Here's a complete, self-contained HTML page you can drop into your website. It surveys the open-source (and a few commercial benchmark) tools for parametric seastead structural design, proposes a concrete toolchain that does exactly what you described ("input shape/spacing → get truss design + piece-by-piece weights"), includes a materials/scantling cheat sheet, a sample pipeline skeleton, and — since I ran the numbers — a short "sanity check" section flagging a few geometric issues in the current design worth resolving before you parametrize it. ```html Parametric Seastead Structural Design — Software Survey & Toolchain

Parametric Seastead Structural Design
Software Survey & Recommended Toolchain

Goal: type in “this foil shape, this triangle spacing” and get a real aluminum member schedule, connection list, and piece-by-piece weights — for a 44′ triangle / 3-leg seastead that packs into one 45′ high-cube container.

Companion notes for the seastead design study · Marine aluminum · Target displacement 27,500 lb

Quick Answer

Short version: there is no single open-source program today that goes from “shape + spacing” to a sized truss with weights. The good news: your structure is simple enough (triangular box-girder walls, bolted floor/ceiling panels, three foil-section legs) that a small custom Python toolchain gets you 90% of the way:

If you prefer a GUI over code: FreeCAD (spreadsheet-driven parametric models + built-in CalculiX FEM + mass properties) is the strongest single open-source package.

Two Recommended Stacks

Stack A — “The Generator” (scripted, automatable) ★ recommended
LayerTool
ParametersOne params.py / JSON file (all dimensions in SI internally)
Solid geometrybuild123d or CadQuery (Python, OCCT kernel)
Global frame sizingPyNite — auto-loop member catalogs until utilization ≤ target
Plating/stiffenersCustom ISO 12215-5 / DNV scantling functions
Local FEA checksCalculiX + Gmsh (brackets, thruster mounts, heave plates, corner joints)
BOM / weights / CGpandas → CSV + Markdown/HTML report
Packing checkSame script: bin-pack parts into 44.6×7.7×8.9 ft, ≤62,000 lb

Effort: roughly a weekend to first numbers, a few weeks to trustworthy. Every design variant becomes a one-line parameter change.

Stack B — “GUI-first” (visual, slower to automate)
LayerTool
CAD & assembliesFreeCAD (Spreadsheet workbench drives dimensions; Assembly workbench; Fasteners addon)
Mass propertiesFreeCAD volume × density, or its Material system
FEAFreeCAD FEM workbench (ships with CalculiX solver)
Heavy FEASalome-Meca (Salome + Code_Aster) or Gmsh + PrePoMax + CalculiX
BOMFreeCAD spreadsheet / export to CSV

Best for exploring the container pack-out visually and producing drawings. Member auto-sizing still wants Stack A’s loop.

Tool Matrix by Task

TaskFirst choice (OSS)AlternativesNotes
Parametric geometry, part families, STEP export build123d / CadQuery OSS FreeCAD, OpenVSP, Blender+Sverchok Foil lofts, panel arrays, extrusion cuts — all scriptable.
Truss / frame member sizing (auto-iterate) PyNite OSS Frame3DD, Anastruct (2D), OpenSees Loop over RHS/extrusion catalogs until utilization target met.
Hull/wall plating & stiffener scantlings Your own scripts (ISO 12215-5 / DNV formulas) OSS Spreadsheets No turnkey OSS scantling tool exists; the formulas are simple to code (~200 lines).
Full FEA verification (shells, welds, brackets) CalculiX OSS Code_Aster/Salome-Meca, Elmer, FreeCAD FEM Abaqus-style input; nonlinear, contact, buckling.
Meshing Gmsh OSS Salome, snappyHexMesh (OpenFOAM) Python-scriptable; reads STEP.
Optimization (optional) scipy.optimize / NLopt OSS Dakota Drive PyNite sizing; minimize weight s.t. utilization & deflection limits.
Hydrostatics, displacement, draft curves Direct from your geometry (Python) OSS DELFTship Free, FreeShip Your shapes are prisms + foils — closed-form integration is easy and exact.
Wave loads / motions (seakeeping RAOs) Capytaine (Nemoh successor) OSS Nemoh Linear potential-flow BEM; wave loads on the 3-leg arrangement.
Coupled dynamics + tension-leg mooring OpenFAST (HydroDyn + MoorDyn) OSS MoorDyn standalone; custom Python Built for floating wind; adaptable to taut taut-leg pretension studies.
Slamming / green water / walkway wave pass-through OpenFOAM (interFoam), REEF3D OSS DualSPHysics free-academic Only needed later, for detail design.
Foil section drag (NACA 0035 legs) XFLR5 OSS OpenVSP parasite-drag buildup 2D section CL/CD at your Reynolds numbers.
Thruster / propulsor first-cut sizing OpenProp OSS Vendor data for rim drives Rim drives are niche; actuator-disk math is fine at concept stage.
BOM, weights, CG, container load plan pandas + openpyxl OSS FreeCAD spreadsheet Single source of truth; diff-able in git.
Visualization / renders for the website Blender (+Sverchok) OSS FreeCAD TechDraw for drawings Import STEP from build123d/CadQuery.
Commercial benchmarks (what the pros use, for reference): Rhino+Grasshopper+Karamba3D (interactive truss sizing), DNV Sesam/GeniE (semi-submersible structures), Maxsurf + Maxsurf Structure, OrcaFlex (moorings), ShipWeight (weight databases), Onshape free tier (cloud parametric CAD with configurations & BOM — not OSS, but zero-cost and excellent).

Tool Profiles

Geometry & Parametrics

build123d / CadQuery OSS

Python libraries for parametric solid modeling on the OpenCascade kernel. You write code like “loft a NACA 0035 section, cut the trailing edge, array bolt holes,” and get exact solids with exact volumes. Exports STEP/STL for FreeCAD, Gmsh, Blender, and machine shops.

  • Why for you: the whole seastead becomes a function build(params) → parts[]; every part carries its volume → weight for free.
  • Watch out: code-only, no GUI; learn the selector/idiom style.
FreeCAD OSS (LGPL)

Full parametric CAD. Key features for this project:

  • Spreadsheet workbench: drive every sketch dimension from named cells (= your parameter panel).
  • Assembly workbench (native in v1.0+) — assemble the container pack-out and check clearances.
  • FEM workbench — embedded CalculiX: CAD → mesh → solve → stress, one GUI.
  • Addons: Fasteners (bolt library), BOLTS (standard profiles), TechDraw (drawings for the shipyard).
  • Volume/mass: assign density, read mass properties; or Shape.Volume × ρ.

Watch out: big assemblies get slow; it sizes nothing for you — pair with PyNite or hand scantlings.

OpenVSP OSS (NASA)

NASA’s parametric geometry tool. Component-based (lofts, ducts, pods), with a mass-properties tool (set material densities per component) and parasite-drag buildup. Great for rapid “what if the legs were longer / triangle bigger” layout studies and decent CG/inertia guesses. Not a structural sizer.

Blender + Sverchok OSS (GPL)

Node-based parametric meshing inside Blender. Excellent for marketing renders and exploded assembly animations of the pack-out sequence; mass via mesh volume × density. Not engineering-grade solids — use downstream of build123d/CadQuery, not instead of.

Structures & FEA

PyNite OSS (MIT)

Pure-Python 3D frame/truss FEA: pip install PyNite. Nodes, beam elements, releases, springs, load combinations, P-Δ, plate elements, reactions and member force envelopes.

  • Why for you: the auto-sizing loop is ~30 lines — try each candidate extrusion from lightest to heaviest, solve, check utilization, stop at first pass. Exactly the “design the actual truss and give weights” behavior you asked for.
  • Watch out: frame elements only (no continuum stress) — follow up with CalculiX for joints, brackets, and local loads.
CalculiX (+ Gmsh, PrePoMax) OSS (GPL) / freeware GUI

Industrial-grade FEA solver with Abaqus-compatible input. Nonlinear, contact, buckling, heat. Pair with Gmsh (scripted mesher, reads STEP) and either FreeCAD’s FEM workbench or PrePoMax (free Windows GUI) as pre/post.

  • Use for: corner-joint weldments, thruster mount pads, heave-plate attachments, mooring-screw hard points, crane/pad-eye locals, and eventually a shell-model check of the whole triangle box girder.
Code_Aster / Salome-Meca OSS (GPL)

EDF’s industrial FEA bundled with the Salome CAD/mesh platform. More capable (and steeper) than CalculiX; enormous verification-example library. Choose this when you outgrow CalculiX or want fatigue/eigenvalue workflows with strong documentation.

Frame3DD / Anastruct / OpenSees OSS

Frame3DD (GPL, C): mature 3D frame statics + dynamics; callable, dated UX.
Anastruct: very quick 2D frame checks (e.g., a wall panel as a 2D ring beam).
OpenSees: research-grade, civil-oriented; overkill here but capable.

Marine / Hydrodynamics

Capytaine (ex-Nemoh) OSS

Linear potential-flow boundary-element solver (radiation/diffraction). Mesh the three legs + triangle, get added mass, damping, RAOs, and first-order wave loads per sea state — the loads that feed your structural sizing. Python API, actively maintained.

OpenFAST (HydroDyn + MoorDyn) OSS (BSD)

NREL’s coupled floating-system simulator. HydroDyn (wave kinematics + body forcing) + MoorDyn (dynamic mooring lines, including taut lines) + a controller slot. Built for floating wind turbines but the physics is generic: use it to check the tension-leg concept (pretension, slack risk, snap loads) and the two-seastead-connected-in-waves problem qualitatively.

DELFTship Free / FreeShip freeware / OSS

Hull surface modelers with hydrostatics/stability. Honestly optional for you — your displaced shapes (3 foil prisms + triangle) are simple enough to integrate exactly in Python, and you’ll want that inside the generator anyway.

XFLR5 OSS (GPL)

2D foil section analysis. Run NACA 0035 at your chord/Reynolds range to get profile drag and lift-curve slope for transit-power estimates and for the “leading edge forward” drag argument.

OpenFOAM / REEF3D / DualSPHysics OSS / OSS / academic

Later-stage CFD: green-water on the walkway grating, slamming on heave plates, dinghy wake shielding. REEF3D is purpose-built for wave–structure interaction; OpenFOAM interFoam is the generalist; DualSPHysics (SPH) is free for academic use, license-checked for commercial.

Design Rules, Standards & Materials Cheat Sheet

Scantling rules (how thick does each piece need to be?)

Marine aluminum quick reference (verify against the standard you use)

Alloy / formDensityBase yield (typ.)As-welded yield (typ. design)Typical use
5083-H116 / H321 plate2,660 kg/m³ (166 lb/ft³)≈ 230 MPa≈ 125–145 MPaShell/wall plating, tanks — the marine temper (exfoliation-resistant)
6082-T6 extrusions (EU)2,700 kg/m³≈ 260 MPa≈ 150–160 MPaFrames, beams, walkway structure
6061-T6 extrusions (US)2,700 kg/m³≈ 275 MPa≈ 150–165 MPaSame, US supply chain

The Generator: How the Pieces Fit Together

The workflow that produces “shape in → sized structure + weights out.” Everything below is illustrative skeleton code, not a finished program.

# seastead_gen.py — illustrative skeleton (SI internally, imperial display)

@dataclass
class Params:
    tri_side_m: float = 44.0 * 0.3048      # equilateral triangle, wall centerline
    wall_h_m:   float = 7.0  * 0.3048      # floor-to-ceiling
    leg_len_m:  float = 21.5 * 0.3048      # span of each foil leg
    leg_chord_m: float = 8.5 * 0.3048      # NACA 0035 chord
    leg_t_over_c: float = 0.35
    te_cut_m:   float = 0.5  * 0.3048      # blunt trailing edge
    walkway_w_m: float = 3.0 * 0.3048
    disp_target_kg: float = 27_500 * 0.4536
    util_limit: float = 0.80               # max member utilization
    ...

# ---------- 1. Buoyancy & draft ----------
def naca0035_area(t, c):                   # symmetric 4-digit section area
    return 0.685 * t * c                   # (closed-TE variant ≈ same)

def leg_volume(p):                         # × (1 - te_cut correction)
    ...

def draft_vs_displacement(p):              # integrate immersed foil volume
    return interpolator                    # → check 27,500 lb point & waterplane

# ---------- 2. Environmental loads ----------
def design_pressures(p, h_s, T_p):         # ISO 12215-5-style slam/static heads
    return pressure_map                    # per panel zone (bow/beam/stern factors)

# ---------- 3. Scantlings ----------
def plate_thickness(pressure, spacing, allowable): ...
def stiffener_SM(pressure, spacing, span, allowable): ...

# ---------- 4. Global frame: auto-size with PyNite ----------
from Pynite import FEModel3D

def build_frame(profile_set):              # nodes/elements for triangle box girder,
    m = FEModel3D()                        # floor beams, ceiling beams, leg attachments
    ...                                    # loads: gravity + inverted pressures + leg reactions
    return m

def autosize(catalog):                     # catalog sorted by lb/ft, ascending
    for candidate in catalog:
        m = build_frame(candidate)
        m.analyze()
        if max_utilization(m) <= Params.util_limit \
           and max_deflection(m) <= span/240:
            return candidate                # lightest member that passes
    raise RuntimeError("no member passes")

# ---------- 5. Local FEA hooks (CalculiX via .inp files) ----------
def write_ccx_inp(joint_id, loads): ...    # corner joints, thruster mounts, heave plates

# ---------- 6. Outputs ----------
def bom(parts) -> pd.DataFrame:
    # id, group, description, alloy, profile, length_m, unit_kg, qty, kg, notes
    ...

def container_pack_check(bom):             # 44.6 × 7.7 × 8.9 ft, ≤ 62,000 lb, CG box
    ...

def report():                              # markdown/HTML: BOM, group rollups, CG, margins
    ...

Why this beats a monolithic program: every assumption (wave pressure, utilization limit, weld knockdown, contingency) lives in one auditable file. When someone asks “what if the walkway is 4 ft?” you change one number and re-run — new truss sizes, new weights, new pack-out, in seconds.

What the Output Should Look Like

BOM schema (per piece)

IDGroupDescriptionAlloy/formProfile / thicknessLengthUnit wtQtyTotalJoints / notes
WP-A1WallsWall panel, side A5083-H116 plate5 mm22′-0″ × 7′-0″419 lb31,257 lbfield-bolted to chords, sealed
CB-W1WallsBottom chord, wall 16082-T6RHS 150×75×522′-0″3.9 lb/ft3258 lbcorner gussets CC-01
FJ-01FloorFloor joist6082-T6RHS 100×50×421′-4″2.1 lb/ft17748 lb@16″ o.c., clip FCL-1
Values above are illustrative placeholders showing the schema — the generator computes real ones.

Group rollup → container check

Sanity Checks on the Current Design (run the numbers before coding)

These are rough, first-pass calculations from your stated dimensions — worth resolving before building the parametric model, because two of them affect the fundamental geometry.

  1. Leg buoyancy vs. target displacement. NACA 0035 at 8.5′ chord → thickness 2.98′; section area ≈ 0.685·t·c ≈ 17.3 ft²; leg volume ≈ 17.3 × 21.5 ≈ 372 ft³. Three legs fully submerged ≈ 1,117 ft³ ≈ 71,500 lb. At your 27,500 lb target the legs sit only ~38% submerged (draft ≈ 5.5–6 ft if evenly shaped), not 50%. That’s good news (payload/reserve margin), but it changes your waterline-dependent details (ladder position, thruster depth, heave-plate immersion, walkway height above water).
  2. The “1 ft = 1/7 of displacement” waterplane claim needs a decision on leg attitude. 1/7 of 27,500 lb per foot of draft ⇒ waterplane area ≈ 61 ft². If the legs run as horizontal wings (leading edge forward, 8.5′ chord horizontal), the waterplane cutting a ~3′-thick foil would be several hundred ft² — heave stiffness more like a barge (ΔB ≈ 20,000+ lb/ft), not 1/7. A waterplane of ~61 ft² is consistent with the waterline cutting near the thin tip of a vertically-oriented foil. These two attitudes give completely different rides, drafts, and mooring pretensions — pin this down first.
  3. Container pack-out of the legs looks geometrically tight. If the 8.5′ chord is vertical in the container, one leg fits (8.5 < 8.9′) but two stacked = 17′ — no. If the chord is horizontal across the width, 8.5′ > 7.7′ — no. If the chord runs fore-aft along the 44.6′ length, then the 21.5′ span must cross the 7.7′ width — also no. Possible fixes to study: shipping legs tilted in the vertical-longitudinal plane (diagonal), or re-orienting so two legs sit side-by-side (2 × 2.98′ = 5.96′ wide) with the third elsewhere. The generator’s pack-check module will catch this automatically once the leg coordinate system is defined.
  4. Dimension bookkeeping: the text says legs are 21.5′ long with 8.5′ chord, but also “50% under water (0.5 × 14.5 feet).” Define the leg’s local axes (span / chord / thickness) and which is vertical — the whole model hangs on that definition.
  5. Energy & power ballparks (context for the weight budget): triangle area = √3/4 × 44² ≈ 838 ft² (77.9 m²) → ~15 kWp solar. Batteries at 25% of 27,500 lb ≈ 6,900 lb ≈ 3.1 t of LiFePO₄ ≈ roughly 300–450 kWh at pack-level energy density. Size conduit and bus work for the real thruster power once rim-drive specs exist.
  6. Small flags: heave plates add transit drag (consider bolt-off for passages); aft dinghy davit ropes and the stern mooring-screw pair live in the same space — detail that intersection; the inter-seastead walkway control loop is a fun controls project (Python/MPC on top of each boat’s thruster model) but keep a manual override.

Workflow Tips

``` A few highlights of what's inside, beyond the software list: - **The honest answer:** no single OSS tool does shape→truss→weights, but `build123d`/`CadQuery` + `PyNite` + a small ISO 12215-5 scantling module + `pandas` gets you a true parametric generator, and FreeCAD is the best single-GUI fallback (its FEM workbench even embeds CalculiX). - **Section "Design Sanity Checks"** flags four things I'd resolve before writing any code: the legs appear to float ~38% submerged (not 50%) at 27,500 lb — extra margin; your "1 ft = 1/7 displacement" waterplane figure is only consistent with a particular leg attitude (worth pinning down, since it changes the ride character completely); and the two-stacked-legs container pack-out appears geometrically impossible in every orientation I checked — the page suggests workarounds to study. Want me to draft the actual working `params.py` + PyNite auto-sizing loop as a starting codebase next?