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:
- 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.
- 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.
- 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.
- Use Capytaine for early wave response and RAO-type studies. It is much faster than CFD and appropriate for first-pass wave performance screening.
- Use Gmsh as a mesh hub for FEA and CFD. Gmsh can import STEP/BREP and, with care, STL/OBJ surfaces.
- Use CalculiX, Elmer, or Code_Aster for FEA. Use OpenFOAM, optionally with olaFlow/waves2Foam/REEF3D-type wave tools, for CFD.
- 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:
- Design parameters: length, beam, draft, freeboard, pontoon radius, deck height, plate thickness assumptions, etc.
- Global coordinate system: one origin, one orientation, one unit convention.
- Part definitions: separate modules for hulls, pontoons, decks, columns, bulkheads, etc.
- Assembly definition: explicit translations/rotations placing each part into the global frame.
- Print split rules: cutting planes, print envelopes, alignment features, tolerances.
- Export rules: scripts or Makefiles producing STL/3MF for printing, meshes for Capytaine/CFD, and STEP/BREP if using FreeCAD/CadQuery.
- Validation scripts: watertightness checks, volume checks, mass properties, mesh quality checks.
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:
- Keep OpenSCAD for early concept generation and Froude scale printing.
- Once a concept looks promising, convert or recreate it in FreeCAD or CadQuery/build123d.
- Use that engineering CAD model to export STEP/BREP for Gmsh, FEA, and CFD.
- 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:
include <file.scad>brings in variables, functions, and modules. Use it for shared parameters.use <file.scad>brings in modules but not variables. Use it for part modules.
// 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:
- Pontoon: origin at mid-length, centerline, baseline or keel.
- Deck box: origin at center of deck footprint, underside of deck.
- Column: origin at bottom center.
- Bulkhead: origin at center of its reference plane.
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 |
|---|---|---|
| Length | 1 / lambda | 1/50 |
| Area | 1 / lambda^2 | 1/2500 |
| Volume, displacement | 1 / lambda^3 | 1/125000 |
| Mass, if same density | 1 / lambda^3 | 1/125000 |
| Velocity | 1 / sqrt(lambda) | 1/7.07 |
| Time, wave period | 1 / sqrt(lambda) | 1/7.07 |
| Wave height, draft, freeboard | 1 / lambda | 1/50 |
| Pressure | 1 / lambda | 1/50 |
| Force | 1 / lambda^3 | 1/125000 |
| Moment | 1 / lambda^4 | 1/6250000 |
| Mass moment of inertia | 1 / lambda^5 | 1/312500000 |
For a physical seakeeping model, you generally need to scale:
- Hull geometry.
- Displacement mass.
- Center of gravity.
- Radius of gyration / mass moments of inertia.
- Wave height and wave period.
- Mooring stiffness, if moorings are included, using a carefully scaled equivalent system.
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:
- Linear wave excitation forces.
- Radiation damping.
- Added mass.
- Response amplitude operators, RAOs.
- First-pass seakeeping in regular and irregular waves.
- Comparing alternative hull forms.
Capytaine is less appropriate for:
- Breaking waves.
- Strong viscous drag.
- Slamming and green water.
- Large-amplitude nonlinear motions.
- Flow separation-dominated behavior.
- Detailed structural loads near connections.
OpenSCAD STL output can be used as a starting point, but you will usually want to process it before using it in Capytaine:
- Export the hull at the desired scale, preferably full scale in meters for solver clarity.
- Cut the hull at the design waterline, keeping the wetted surface.
- Make sure the mesh is watertight and manifold.
- Remove duplicate vertices and sliver triangles.
- Decimate or remesh to reasonable panel sizes.
- Check normals: they should point outward from the body.
- 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:
- Plot RAOs with Python/matplotlib.
- Export free-surface elevation or pressure data for ParaView if supported by your workflow.
- Generate regular-wave cases first, then irregular-wave spectra such as JONSWAP or Pierson-Moskowitz.
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:
- Create or convert the structural geometry into STEP/BREP.
- Create mid-surfaces for plates and shells.
- Create beam/line elements for stiffeners, frames, and major members.
- Mesh with Gmsh, Netgen, Salome, or FreeCAD FEM tools.
- Solve with CalculiX, Elmer, or Code_Aster.
- 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:
- OpenFOAM with
interFoamor similar multiphase solvers. - olaFlow for wave generation, absorption, and porous media.
- waves2Foam for wave boundary conditions, depending on OpenFOAM version and setup.
- REEF3D for coastal/wave-focused simulations.
- Basilisk for adaptive multiphase flow.
- DualSPHysics for SPH simulations of violent free-surface flows.
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
- Use it for qualitative behavior, not final strength. It can show load paths, flexible zones, buckling modes, torsional weakness, and poor connection details.
- Define the scaling law explicitly. Write down the length scale, load scale, pressure scale, stiffness target, and strength target.
- Measure printed material properties. Print test coupons and measure effective tensile modulus and strength in the relevant directions. Printed parts are anisotropic.
- 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.
- 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.
- Apply scaled loads carefully. Use pressure scaling, point-load scaling, or ballast scaling rather than just “push on it by hand.”
- Measure deflections and strains. Use dial indicators, strain gauges, or simple displacement markers. Compare against FEA, not just intuition.
- 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
- Concept geometry: OpenSCAD if you are already productive with it.
- Engineering geometry: FreeCAD or CadQuery/build123d once a concept becomes promising.
- Mesh hub: Gmsh, plus Python tools such as trimesh and PyVista.
- Wave response: Capytaine.
- Structural FEA: CalculiX via FreeCAD FEM or directly via Gmsh-generated meshes. Elmer or Code_Aster if needed.
- CFD: OpenFOAM with wave extensions, used selectively.
- 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
- Create several parametric OpenSCAD variants.
- Export STL/3MF files for small Froude scale printing.
- Check buoyancy, volume, deck layout, and basic visual plausibility.
- Use simple hydrostatic checks from watertight meshes: displacement, center of buoyancy, waterplane area.
- Document assumptions and scale factors.
Phase 2: Hydrodynamic screening with Capytaine
- Select the best 3 to 5 concepts.
- Generate clean wetted-surface meshes below the design waterline.
- Run Capytaine over a range of wave periods and directions.
- Compare RAOs, wave excitation forces, and motion responses.
- Identify concepts with poor motion behavior or resonance problems.
Phase 3: Preliminary structural sanity check
- Move promising concepts into FreeCAD or CadQuery.
- Create simplified structural surfaces: hull plates, deck plates, bulkheads, columns, pontoons.
- Export STEP/BREP.
- Mesh with Gmsh.
- Run simple CalculiX or Elmer load cases: static pressure, weight, patch loads, simplified wave bending.
- Do not attempt final code compliance yet; just remove obviously weak concepts.
Phase 4: Selective CFD
- Use OpenFOAM or another wave CFD tool only for cases where potential flow is not enough.
- Examples: wave overtopping, slamming, moonpools, viscous damping, strong flow separation, breaking waves.
- Keep the geometry simplified. Remove tiny features that do not affect global wave behavior.
Phase 5: Physical model validation
- Print a Froude scale model of the selected concept.
- Ballast it to the correct displacement, center of gravity, and mass moments of inertia.
- Test in regular waves first, then irregular waves if possible.
- Compare observed motions and loads with Capytaine predictions.
- 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.