Parametric CAD and simulation workflow for seastead concept studies

This is a brainstorming-level workflow for comparing candidate seastead geometries before paying for final naval architecture. The goal is to keep one parametric source of truth and derive multiple analysis artifacts from it: 3D-printed Froude scale models, Capytaine wave-response meshes, structural FEA models, and CFD models.

Short answer and recommended approach

Yes, it is reasonable to use one parametric model as the ground truth.

However, I would not think of it as “one OpenSCAD file.” I would think of it as a parametric model repository: one set of design parameters, one global coordinate system, a set of part modules, an assembly definition, and scripted export rules that generate all downstream files.

Key recommendations:

  1. Keep OpenSCAD if it is working well for concept generation and 3D printing. It is especially good for early parametric geometry, AI-assisted iteration, and STL/3MF production.
  2. Treat OpenSCAD output as mesh output, not as a complete engineering model. STL/3MF meshes are fine for printing and can sometimes be used for CFD or hydrodynamic meshing, but they are usually not ideal for serious FEA unless cleaned, simplified, and converted into shell/beam models.
  3. For engineering-grade workflows, consider making FreeCAD or CadQuery/build123d the master CAD system instead of OpenSCAD. These can produce STEP/BREP boundary representation geometry, which is much better for FEA and CFD meshing.
  4. Use Capytaine for early wave response and RAO-type studies. It is much faster than CFD and appropriate for first-pass wave performance screening.
  5. Use Gmsh as a mesh hub for FEA and CFD. Gmsh can import STEP/BREP and, with care, STL/OBJ surfaces.
  6. Use CalculiX, Elmer, or Code_Aster for FEA. Use OpenFOAM, optionally with olaFlow/waves2Foam/REEF3D-type wave tools, for CFD.
  7. A 1:50 plastic structural model can be useful, but only if you understand scaling laws. It can give qualitative insight into stiffness, load paths, buckling shapes, and weak zones. It should not be used as a direct quantitative prediction of full-scale aluminum strength unless you carefully match similitude parameters.

Should OpenSCAD be the single ground truth?

Yes, at the concept stage it is reasonable to use a single parametric source of truth. The important point is that the “ground truth” should include more than one geometry file. It should include:

OpenSCAD is excellent for AI-assisted parametric geometry and 3D printing. Its main weakness for your larger goal is that it primarily produces tessellated mesh output such as STL. For FEA and CFD, STEP/BREP geometry is often much better because it can be meshed cleanly and edited into structural surfaces.

So my advice is:

Strategy When it makes sense Strengths Weaknesses
Keep OpenSCAD as the master Your geometry is mostly parametric primitives, extrusions, hulls, cylinders, boxes, and simple freeform shapes. You primarily want fast concept iteration and 3D printing. Easy AI-assisted generation, simple text files, good STL production, easy version control. No robust native STEP/BREP export. FEA and CFD workflows require mesh cleanup and conversion. Not ideal for marine structural shell modeling.
Use FreeCAD as the master You want a more engineering-oriented open-source CAD model that can export STEP and also connect to FEM/CFD tools. STEP/BREP export, Python scripting, FEM workbench, CFD workbench options, import/export of many formats. Interface and topology can be less predictable than OpenSCAD for fully scripted AI-generated geometry. Some workbenches vary in maturity.
Use CadQuery/build123d as the master You want Python-parametric CAD with good STEP/BREP output and AI-friendly code generation. Very good parametric Python workflow, OpenCascade-based STEP/BREP output, integrates nicely with scripts and Gmsh. Less direct GUI than FreeCAD/OpenSCAD. Requires Python pipeline. Less mature direct 3D printing GUI workflow.
Hybrid approach Keep OpenSCAD for concept/printing but move selected designs into FreeCAD/CadQuery for engineering analysis. Best of both worlds: fast AI/OpenSCAD concept iteration, then engineering-grade geometry when needed. Requires discipline to avoid multiple divergent “truths.”

For your current stage, I would probably do this:

  1. Keep OpenSCAD for early concept generation and Froude scale printing.
  2. Once a concept looks promising, convert or recreate it in FreeCAD or CadQuery/build123d.
  3. Use that engineering CAD model to export STEP/BREP for Gmsh, FEA, and CFD.
  4. Use OpenSCAD/CAD STL output for physical printing.

Suggested repository structure

A good structure separates design parameters, part modules, assembly, printing splits, export scripts, and simulation inputs. This keeps the model maintainable and makes it easier for AI tools to edit only the correct layer.

seastead-project/
├── README.md
├── Makefile                  # or justfile / build script
├── params/
│   ├── design_v001.yaml      # human-readable design parameters
│   ├── design_v002.yaml
│   └── materials.yaml
├── cad/
│   ├── common/
│   │   ├── units.scad
│   │   ├── parameters.scad
│   │   ├── coordinate_system.scad
│   │   ├── connectors.scad
│   │   └── print_helpers.scad
│   ├── parts/
│   │   ├── pontoon.scad
│   │   ├── deck_box.scad
│   │   ├── column.scad
│   │   ├── bulkhead.scad
│   │   └── mooring_bracket.scad
│   ├── assembly/
│   │   ├── full_seastead.scad
│   │   └── wetted_hull.scad
│   ├── print/
│   │   ├── part_01_bow.scad
│   │   ├── part_02_midship.scad
│   │   └── part_03_stern.scad
│   └── variants/
│       ├── catamaran_a.scad
│       ├── semisub_b.scad
│       └── spar_c.scad
├── scripts/
│   ├── export_stl.sh
│   ├── export_3mf.sh
│   ├── check_mesh.py
│   ├── stl_to_hydro_mesh.py
│   ├── capytaine_run.py
│   ├── gmsh_mesh.py
│   └── openfoam_setup.sh
├── build/
│   ├── print/
│   ├── hydro/
│   ├── fea/
│   └── cfd/
├── sim/
│   ├── capytaine/
│   ├── fea/
│   └── cfd/
└── docs/
    ├── scaling_laws.md
    ├── assumptions.md
    └── naval_architect_handoff.md

The important idea is that every exported file should be traceable to a specific design version and git commit. A naming convention helps a lot:

designA_v003_full_hydro.obj
designA_v003_s50_print_part01.stl
designA_v003_full_structural.step
designA_v003_full_fea.msh
designA_v003_full_cfd.stl

Use one coordinate convention everywhere. A useful marine convention is: x longitudinal, y transverse, z vertical upward, with the design waterline at z = 0. Keep the CAD model in millimeters if you like OpenSCAD, but convert to meters for Capytaine, OpenFOAM, FEA, and other SI-based solvers.

How to organize multiple OpenSCAD files and fit them together

OpenSCAD does not have a full constraint-based assembly system like a traditional CAD package. However, you can create a robust assembly pattern using modules, explicit transforms, shared parameters, and named connection features.

1. Use include for shared parameters and use for modules

In OpenSCAD:

// common/parameters.scad
unit_mm = 1;

// Full-scale design parameters, stored in mm for OpenSCAD convenience.
full_length = 24000;
full_beam = 12000;
design_draft = 3500;
freeboard = 2000;
pontoon_radius = 1500;

// Waterline is z = 0. Hull below waterline has negative z.
waterline_z = 0;

// Printing
printer_clearance = 0.25;
wall_thickness_print = 2.0;
// assembly/full_seastead.scad
include <../common/parameters.scad>
use <../parts/pontoon.scad>
use <../parts/deck_box.scad>

module seastead() {
  pontoon(x_offset = -full_length/4, y_offset = -full_beam/4);
  pontoon(x_offset = -full_length/4, y_offset =  full_beam/4);
  pontoon(x_offset =  full_length/4, y_offset = -full_beam/4);
  pontoon(x_offset =  full_length/4, y_offset =  full_beam/4);

  deck_box(
    length = full_length * 0.9,
    width = full_beam * 0.9,
    z_top = freeboard
  );
}

seastead();

2. Define local origins for every part

Each part should have a predictable local origin. For example:

This makes assembly transforms easier to reason about and reduces hidden alignment errors.

3. Use explicit assembly transforms

Avoid relying on visual alignment. Put every transform in code.

module assembled_seastead() {
  translate([0, 0, 0])
    base_hull();

  translate([0, 0, deck_z])
    deck_structure();

  translate([mooring_x, mooring_y, mooring_z])
    rotate([0, 0, mooring_angle])
      mooring_bracket();
}

4. Create connector features

For 3D-printed split models, define male/female connectors, dowel holes, flanges, lap joints, or snap features. Put these in a shared library so every part uses the same tolerances.

// common/connectors.scad
module dowel_hole(d = 10, h = 20, clearance = 0.25) {
  cylinder(d = d + 2*clearance, h = h, $fn = 48);
}

module dowel_pin(d = 10, h = 20, clearance = 0.25) {
  cylinder(d = d - clearance, h = h, $fn = 48);
}

module flange_joint(thickness = 4, bolt_spacing = 30) {
  // Define a reusable mating flange here.
}

5. Use print envelopes or cutting planes to split the model

// print/part_01_bow.scad
include <../common/parameters.scad>
use <../assembly/full_seastead.scad>

module print_envelope() {
  cube([250, 180, 180], center = true);
}

intersection() {
  seastead();

  translate([full_length/4, 0, 0])
    print_envelope();
}

If you split a model for printing, do not rely only on visual overlap. Add physical registration features: pins, flats, keyed joints, bolted flanges, or lap joints. Otherwise the assembled physical model may not match the numerical model.

6. Consider a machine-readable assembly manifest

If you have many variants, you can keep the assembly layout in YAML or JSON and generate OpenSCAD code from Python. Example YAML:

assembly:
  - part: pontoon
    file: parts/pontoon.scad
    translate: [-6000, -3000, -1500]
    rotate: [0, 0, 0]

  - part: pontoon
    file: parts/pontoon.scad
    translate: [-6000, 3000, -1500]
    rotate: [0, 0, 0]

  - part: deck_box
    file: parts/deck_box.scad
    translate: [0, 0, 2000]
    rotate: [0, 0, 0]

A Python script can turn this into an OpenSCAD assembly file. This is useful if AI is helping you generate many variants.

Deriving the different output files

1. 3D-printed Froude scale model

For a Froude scale physical model, the scale factor is usually defined as:

lambda = L_full / L_model

For a 1:50 model, lambda = 50.

Froude scaling rules:

Quantity Model value relative to full scale Example for lambda = 50
Length1 / lambda1/50
Area1 / lambda^21/2500
Volume, displacement1 / lambda^31/125000
Mass, if same density1 / lambda^31/125000
Velocity1 / sqrt(lambda)1/7.07
Time, wave period1 / sqrt(lambda)1/7.07
Wave height, draft, freeboard1 / lambda1/50
Pressure1 / lambda1/50
Force1 / lambda^31/125000
Moment1 / lambda^41/6250000
Mass moment of inertia1 / lambda^51/312500000

For a physical seakeeping model, you generally need to scale:

Froude scaling cannot simultaneously match Reynolds number. Small-scale models often have too low Reynolds number, so viscous effects, boundary-layer behavior, and some damping may be wrong. For wave-dominated seakeeping, Froude scaling is still the standard first choice.

2. Capytaine wave simulations

Capytaine is a good open-source tool for early wave response analysis. It is a boundary-element-method potential-flow tool, not a full CFD tool. That makes it much faster for exploring many wave periods, directions, and geometries.

Capytaine is appropriate for:

Capytaine is less appropriate for:

OpenSCAD STL output can be used as a starting point, but you will usually want to process it before using it in Capytaine:

  1. Export the hull at the desired scale, preferably full scale in meters for solver clarity.
  2. Cut the hull at the design waterline, keeping the wetted surface.
  3. Make sure the mesh is watertight and manifold.
  4. Remove duplicate vertices and sliver triangles.
  5. Decimate or remesh to reasonable panel sizes.
  6. Check normals: they should point outward from the body.
  7. Follow Capytaine guidance regarding waterplane closure or lids if needed for your mesh type.

A Python conversion script is useful here. The exact API may vary, but conceptually it may look like:

# Pseudo-code, not necessarily exact current Capytaine API.
import capytaine as cpt

vertices, faces = load_clean_panel_mesh("build/hydro/hull_wetted.obj")

body = cpt.FloatingBody(
    mesh=cpt.Mesh(vertices=vertices, faces=faces)
)

body.add_all_rigid_body_dofs()

solver = cpt.BEMSolver()

# Loop over wave periods, directions, and frequencies.
# Compute RAOs, excitation forces, radiation damping, etc.

For visualization of different wave sizes and periods, you can:

3. Finite element analysis, FEA

For structural FEA, an STL from OpenSCAD is usually not the best direct input. Marine structures are normally modeled as shells, plates, beams, stiffeners, bulkheads, and frames. A dense solid STL of the whole seastead can become enormous and may not represent the actual structural behavior well.

Better workflow:

  1. Create or convert the structural geometry into STEP/BREP.
  2. Create mid-surfaces for plates and shells.
  3. Create beam/line elements for stiffeners, frames, and major members.
  4. Mesh with Gmsh, Netgen, Salome, or FreeCAD FEM tools.
  5. Solve with CalculiX, Elmer, or Code_Aster.
  6. Apply loads from hydrostatic pressure, wave pressure, weight, ballast, equipment, wind, and mooring points.

If you stay purely with OpenSCAD, one possible but weaker route is:

OpenSCAD STL -> mesh cleanup -> volume mesh -> FEA

This can work for rough solid-model studies, but it is usually not ideal for marine plate/shell structures. For a seastead, shell and beam modeling is normally much more useful.

4. Plastic scaled structural model

See the dedicated section below. A plastic model can be helpful, but only with careful scaling rules.

5. CFD

OpenFOAM is the main open-source CFD option worth considering. OpenSCAD STL files can be used with OpenFOAM’s snappyHexMesh, but mesh quality and geometry cleanliness are critical.

For wave CFD, useful open-source options include:

For early concept screening, I would use Capytaine first. Use CFD only for selected cases where viscous effects, wave breaking, slamming, moonpools, overtopping, or strong flow separation matter. Full floating-body CFD with six-degree-of-freedom motion and dynamic meshing is significantly more complex than potential-flow analysis.

Can a 1:50 plastic model say anything about full-scale aluminum strength?

Short answer: only qualitatively, unless you carefully design the model for structural similitude. A geometrically scaled 1:50 plastic model will not automatically tell you whether a full-scale aluminum structure is strong enough.

Why direct strength scaling is difficult

If you scale geometry by a factor lambda = 50, many structural quantities do not scale in the same way. For Froude-scaled wave loads:

Quantity Geometric scaling with same material and Froude loads Implication
Length 1 / lambda Model is 50 times shorter.
Cross-sectional area 1 / lambda^2 Area decreases rapidly.
Wave pressure 1 / lambda Model pressures are lower.
Force 1 / lambda^3 Total loads drop rapidly.
Bending moment 1 / lambda^4 Moments drop even faster.
Section modulus 1 / lambda^3 Geometric strength property drops.
Bending stress with geometric scaling 1 / lambda Model stresses are lower than full-scale equivalent.

This means that a geometrically scaled model under Froude-scaled loads may appear stronger or stiffer than it should relative to the full-scale structure.

Useful dimensionless groups

To make a scaled structural model meaningful, you should think in terms of dimensionless similarity parameters.

Parameter Definition Purpose
Froude number Fr = V / sqrt(g L) Matches gravity-wave behavior.
Cauchy number / stiffness similarity Ca ~ rho g L / E or rho V^2 / E Relates fluid loads to structural stiffness.
Strength coefficient sigma_y / (rho g L) Relates material strength to hydrodynamic pressure scale.
Reynolds number Re = V L / nu Viscous flow similarity; usually cannot match with Froude scaling.

For stiffness similarity with Froude scaling, you would ideally like:

E_model / E_full = L_model / L_full = 1 / lambda

For a 1:50 model of aluminum:

E_aluminum ≈ 70 GPa
Target E_model ≈ 70 GPa / 50 ≈ 1.4 GPa

Many 3D-printed plastics have effective moduli in the rough range of 1 to 3 GPa, depending on material, infill, orientation, and print quality. So for stiffness, a plastic model can sometimes be in the right ballpark.

For strength similarity, you would like:

sigma_y_model / sigma_y_full = 1 / lambda

For aluminum with yield strength around 250 MPa:

Target sigma_y_model ≈ 250 MPa / 50 ≈ 5 MPa

Most solid 3D-printed plastics are much stronger than 5 MPa, even accounting for layer adhesion. Therefore, a normal plastic model is often too strong relative to the scaled loads. It may not fail when the full-scale aluminum structure would be approaching its limit.

Practical rules for making a plastic structural model useful

  1. Use it for qualitative behavior, not final strength. It can show load paths, flexible zones, buckling modes, torsional weakness, and poor connection details.
  2. Define the scaling law explicitly. Write down the length scale, load scale, pressure scale, stiffness target, and strength target.
  3. Measure printed material properties. Print test coupons and measure effective tensile modulus and strength in the relevant directions. Printed parts are anisotropic.
  4. Tune effective stiffness with infill. If solid PLA or PETG is too stiff, reduce infill, use a different pattern, or use a more flexible material.
  5. Beware minimum wall thickness. If full-scale plate thickness is 10 mm, a 1:50 geometric thickness is 0.2 mm. That is usually impractical for FDM printing and may not represent real plate behavior.
  6. Apply scaled loads carefully. Use pressure scaling, point-load scaling, or ballast scaling rather than just “push on it by hand.”
  7. Measure deflections and strains. Use dial indicators, strain gauges, or simple displacement markers. Compare against FEA, not just intuition.
  8. Do not use it for fatigue, corrosion, connection design, or code compliance. Those require proper engineering analysis.

A plastic model is very useful for checking whether a structure feels obviously too flexible, where buckling shapes might occur, and whether load paths make sense. It is not a reliable substitute for aluminum FEA or naval architecture.

Open-source software options

Purpose Software Notes
Parametric concept CAD OpenSCAD Excellent for scripted, AI-assisted concept geometry and 3D printing. Main output is mesh-based. Limited native engineering CAD exchange.
Engineering CAD / STEP export FreeCAD Good open-source general CAD. Can export STEP/BREP. Has FEM and CFD workbenches, though maturity varies.
Python parametric CAD CadQuery, build123d Strong option if you want AI-generated Python CAD with STEP/BREP output. Very good for scripted parametric engineering geometry.
Integrated CAD/meshing/simulation platform Salome Powerful platform for geometry, meshing, and coupling to solvers such as Code_Aster and CFD tools. Steeper learning curve.
Mesh generation and repair Gmsh Excellent open-source mesher. Can import STEP/BREP and generate shell/volume meshes for FEA/CFD.
Mesh cleanup / inspection MeshLab, Blender, trimesh, PyVista Useful for checking STL watertightness, repairing meshes, decimating, slicing, and inspecting normals.
Linear potential-flow wave analysis Capytaine Good for early wave response, RAOs, excitation forces, radiation damping, and frequency-domain screening.
FEA solver CalculiX Common open-source structural solver. Abaqus-like input style. Works well with Gmsh/FreeCAD workflows.
FEA / multiphysics solver Elmer Multiphysics open-source solver. Useful for structural, thermal, fluid, and coupled problems.
Advanced FEA Code_Aster, often via Salome-Meca Very capable structural mechanics solver, but steeper learning curve.
FEA preprocessing FreeCAD FEM, Salome, Gmsh FreeCAD FEM is convenient for simple CalculiX/Elmer workflows. Salome is more powerful but heavier.
CFD solver OpenFOAM Main open-source CFD package. Can use STL geometry via snappyHexMesh. Wave modeling requires additional setup.
Wave CFD extensions olaFlow, waves2Foam, REEF3D Useful for wave generation, absorption, breaking waves, coastal structures, and free-surface flows.
SPH / violent free surface DualSPHysics Useful for highly nonlinear free-surface events, slamming-like phenomena, and visual/physical insight.
Post-processing ParaView, PyVista, matplotlib ParaView is excellent for CFD and some FEA fields. Python plotting is useful for RAOs and time series.

What works well with OpenSCAD output?

Task Works with OpenSCAD STL? Comments
3D printing Yes, very well This is OpenSCAD’s strong point.
Physical Froude model Yes Need watertight parts, ballast, and correct mass scaling.
Capytaine mesh Possible with conversion Clean, decimate, cut at waterline, check normals and manifoldness.
OpenFOAM CFD Possible snappyHexMesh can use STL, but geometry must be clean and meshing carefully controlled.
Serious structural FEA Not ideal directly Better to create shell/beam structural model from STEP/BREP in FreeCAD/CadQuery/Salome.

A better software stack if you want one base model for many outputs

There is no single open-source program that perfectly does CAD, slicing, Capytaine hydrodynamics, FEA, and CFD in one environment. The practical answer is a scripted pipeline with a single parametric geometry source and interchangeable open formats.

A good open-source pipeline would look like this:

Design parameters
   |
   v
Parametric CAD
OpenSCAD / CadQuery / FreeCAD
   |
   +--> STL/3MF for 3D printing
   |
   +--> Clean watertight mesh for Capytaine
   |
   +--> STEP/BREP for structural FEA
   |        |
   |        +--> Gmsh shell/volume mesh
   |        +--> CalculiX / Elmer / Code_Aster
   |
   +--> STL/STEP for CFD
            |
            +--> OpenFOAM snappyHexMesh
            +--> interFoam / olaFlow / waves2Foam / REEF3D

Recommended stack for your stage

  1. Concept geometry: OpenSCAD if you are already productive with it.
  2. Engineering geometry: FreeCAD or CadQuery/build123d once a concept becomes promising.
  3. Mesh hub: Gmsh, plus Python tools such as trimesh and PyVista.
  4. Wave response: Capytaine.
  5. Structural FEA: CalculiX via FreeCAD FEM or directly via Gmsh-generated meshes. Elmer or Code_Aster if needed.
  6. CFD: OpenFOAM with wave extensions, used selectively.
  7. Visualization: ParaView and Python/matplotlib.

If you want to stay mostly in OpenSCAD

You can still build a useful pipeline. The key is to add scripts that convert and validate OpenSCAD exports.

openscad -D 'DESIGN="catamaran_a"' \
         -D 'SCALE=1/50' \
         -D 'PART="part_01_bow"' \
         -o build/print/catamaran_a_s50_part_01_bow.stl \
         cad/print/export_part.scad

You can also use OpenSCAD’s command-line variable overrides to generate many variants from one master file. A Makefile or Python script can regenerate all STL files, hydro meshes, and simulation inputs whenever the CAD source changes.

If you want a more engineering-grade future path

I would seriously consider CadQuery/build123d or FreeCAD as the master geometry system. The reason is simple: STEP/BREP geometry is much easier to use for FEA and CFD than STL meshes.

CadQuery/build123d may be especially good if you are already using AI to generate OpenSCAD, because AI can also generate Python CadQuery code. The output is often more suitable for downstream engineering tools.

Recommended practical plan

Phase 1: Fast concept screening with OpenSCAD

  1. Create several parametric OpenSCAD variants.
  2. Export STL/3MF files for small Froude scale printing.
  3. Check buoyancy, volume, deck layout, and basic visual plausibility.
  4. Use simple hydrostatic checks from watertight meshes: displacement, center of buoyancy, waterplane area.
  5. Document assumptions and scale factors.

Phase 2: Hydrodynamic screening with Capytaine

  1. Select the best 3 to 5 concepts.
  2. Generate clean wetted-surface meshes below the design waterline.
  3. Run Capytaine over a range of wave periods and directions.
  4. Compare RAOs, wave excitation forces, and motion responses.
  5. Identify concepts with poor motion behavior or resonance problems.

Phase 3: Preliminary structural sanity check

  1. Move promising concepts into FreeCAD or CadQuery.
  2. Create simplified structural surfaces: hull plates, deck plates, bulkheads, columns, pontoons.
  3. Export STEP/BREP.
  4. Mesh with Gmsh.
  5. Run simple CalculiX or Elmer load cases: static pressure, weight, patch loads, simplified wave bending.
  6. Do not attempt final code compliance yet; just remove obviously weak concepts.

Phase 4: Selective CFD

  1. Use OpenFOAM or another wave CFD tool only for cases where potential flow is not enough.
  2. Examples: wave overtopping, slamming, moonpools, viscous damping, strong flow separation, breaking waves.
  3. Keep the geometry simplified. Remove tiny features that do not affect global wave behavior.

Phase 5: Physical model validation

  1. Print a Froude scale model of the selected concept.
  2. Ballast it to the correct displacement, center of gravity, and mass moments of inertia.
  3. Test in regular waves first, then irregular waves if possible.
  4. Compare observed motions and loads with Capytaine predictions.
  5. Use discrepancies to improve assumptions before paying for detailed naval architecture.

Checklist before going to a naval architect

You do not need full naval-architecture-level detail yet, but the following package will make the naval architect much more effective:

Item Why it helps
Parametric geometry source Shows that the design can be adjusted, not just a frozen mesh.
Global coordinate system and units Prevents scaling and orientation mistakes.
Principal dimensions Length, beam, draft, freeboard, displacement, waterline location.
Hydrostatic summary Displacement, center of buoyancy, waterplane area, rough stability indicators.
Capytaine RAO plots Shows motion response versus wave period and direction.
Preliminary load cases Static pressure, wave pressure, equipment loads, mooring loads, wind assumptions.
Preliminary FEA or structural sanity results Helps identify obviously weak members or connections.
Physical model observations Wave tank or pool tests, even qualitative ones, are valuable.
Known uncertainties Mesh quality, material assumptions, scaling limitations, missing viscous effects.
Design intent and operational requirements Target sea state, occupancy, mooring environment, maintenance access, safety factors.

Important: This workflow is for concept screening. It is not a substitute for stability analysis, classification rules, structural code compliance, fatigue, corrosion allowance, mooring design, survivability analysis, or final naval architecture. A qualified naval architect should verify critical safety items before full-scale construction.

Bottom line

Yes, use one parametric ground-truth model. But make it a disciplined parametric model repository, not just one scattered OpenSCAD file. For your current stage, OpenSCAD is a reasonable master for concept generation and 3D printing. For better FEA and CFD compatibility, plan to move promising designs into FreeCAD or CadQuery/build123d so that you can export STEP/BREP geometry.

A practical open-source toolchain would be:

OpenSCAD / CadQuery / FreeCAD
+ Gmsh
+ Capytaine
+ CalculiX or Elmer or Code_Aster
+ OpenFOAM / olaFlow / waves2Foam / REEF3D
+ ParaView

Use Capytaine for early wave behavior, FEA for structural sanity, CFD selectively for nonlinear/viscous questions, and plastic scale models for qualitative insight and physical validation. With this approach, you can explore many designs cheaply and bring a much more useful package to the naval architect.