Software for Seastead Structural Design & Weight Estimation

Your design is a fascinating hybrid: a containerizable, aluminum space-frame trimaran with SWATH-like legs and foil-shaped buoyancy pods. Because it sits between traditional yacht design, offshore platform engineering, and aerospace-style space-frame analysis, no single open-source tool does all of this automatically.

The professional workflow usually couples a **Naval Architecture package** (hydrostatics, stability, panel sizing) with a **Structural FEA package** (truss optimization, buckling, fatigue) and a **Weight Tracking Spreadsheet/Database**.

Recommended Open-Source Workflow:
  1. Hydrostatics & Stability: Free!ship or Delftship Free (model hull/legs) → Export offsets.
  2. Global Loads & Wave Response: Nemoh (BEM potential flow) or OpenFOAM (CFD) for slamming/heave plate forces.
  3. Structural FEA (Space Frame & Shells): CalculiX (via PrePoMax or FreeCAD FEM) for truss optimization, buckling, and plate sizing per DNV/ISO rules.
  4. Weight Tracking: Python (pandas) or Excel/LibreOffice Calc linked to FEA material volumes.

Detailed Tool Evaluation

Hydrostatics / Naval Architecture
Free!ship / Delftship Free
Surface modelers for hull forms. Essential for defining your NACA 0035 legs, calculating displacement, KB, BM, waterplane area (critical for your 1ft = 1/7 buoyancy calc), and GZ curves. Delftship Free exports to many formats.
Pros: Purpose-built for hull fairness; hydrostatics output (KMT, LCB, LCF) instant; handles foil sections natively; Delftship has resistance prediction (Holtrop).
Cons: No structural FEA; no aluminum rule checking (DNV/ABS); "Free" version limits stations/layers; stability criteria checking is manual.

freeship.org | delftship.net

Hydrodynamics / Wave Loads (BEM)
Nemoh (Open Source WAMIT Alternative)
Boundary Element Method solver for diffraction/radiation. Calculates Added Mass, Damping, Excitation Forces, and RAOs (Response Amplitude Operators) for your 3 foil legs. This gives you the design wave loads to feed into your structural FEA.
Pros: Free, open source (GPL); handles multiple interacting bodies (your 3 legs); outputs forces per frequency/direction; Python scripting for batch runs.
Cons: Potential flow only (no viscous drag, no slamming, no breaking waves); steep learning curve (text input files); requires meshing (Gmsh/Salome); heave plates are tricky to model accurately in BEM.

GitHub: ecnantes/nemoh

Structural FEA (The Core Need)
CalculiX (via PrePoMax or FreeCAD FEM)
The only viable open-source non-linear FEA solver capable of **buckling analysis**, **large displacement**, and **contact** (bolted joints). You model the triangle space-frame as beam elements (B31) and the leg skins/walkway/deck as shell elements (S4R).
Pros: Real FEA (implicit/explicit); handles aluminum plasticity/buckling; beam elements perfect for your truss; free (GPL); PrePoMax GUI makes pre/post-processing usable.
Cons: No "Marine Wizard" – you must implement DNV-RU-SHIP / ISO 12215 scantling rules manually via scripts; meshing complex foil transitions is tedious; no built-in weight database.

CalculiX Home | PrePoMax GUI (Free)

CFD / Viscous Loads (Optional but Recommended)
OpenFOAM
For slamming loads on the leg trailing edges, heave plate forces, and RIM drive inflow velocity. Necessary because Nemoh (potential flow) underestimates drag and slamming on foils.
Pros: Industry standard; handles multiphase (VOF) for wave impact; rotating mesh (MRF/AMI) for RIM drive thrust validation.
Cons: Extremely high compute cost; months of learning curve; overkill for initial weight estimation.

openfoam.org

Parametric CAD / Geometry Kernel
FreeCAD (with FEM Workbench)
Parametric modeler. You can drive the triangle geometry (44ft side), leg placement constraints, and container packing logic with Python macros. The FEM workbench wraps CalculiX/Netgen.
Pros: Single environment for CAD → FEM → TechDraw (drawings); Python API for design automation (e.g., "iterate leg chord 8.0–8.5ft"); constraint solver ensures container fit.
Cons: Assembly4/LinkDaily workflow required for large assemblies; FEM meshing (Netgen/Gmsh) less robust than commercial tools for thin-walled foil shells.

freecad.org

Weight Engineering / Management
Python (pandas) + Jupyter / VS Code
Not a CAD tool, but the **single source of truth** for your 62,000 lbs limit. Write scripts to: 1. Sum FEA material volumes × density (Al 5083/6061-T6 ≈ 0.096 lb/in³). 2. Apply margins (welding +10%, paint +2%, contingency +15%). 3. Track CoG per module (Legs, Frame, Deck, Batteries, Dinghy).
Pros: Version controllable (Git); parametric (change battery % → instant new CoG/Weight); exports to CSV for stability software.
Cons: You build it yourself; requires discipline to keep updated with CAD changes.

Commercial "Mid-Range" Alternatives (If Budget Allows)

If the open-source learning curve threatens your timeline, these are standard in small commercial yards/naval architecture firms and cost ~$2k–$10k/yr:

Critical Path for Your Specific Design:
1. Leg Scantlings: Your legs are pressure vessels (airtight compartments) + bending beams + buckling panels. ISO 12215-5 (Pressure vessels) + DNV-RU-SHIP Ch.4 (Hull Girder) + Ch.7 (Local Strength). CalculiX is the only FOSS tool that can buckle-check the 8.5ft chord foil skins with stiffener spacing optimization.
2. Triangle Frame: Model as pinned-joint truss first (beam elements) for sizing. Then model critical nodes (leg attach points, mid-span beam connections) with solid/shell elements for weld stress.
3. Containerization Check: Use FreeCAD Assembly4 to simulate the "Tetris" packing (Legs stacked starboard, Frames port, Dinghy/Thruster kits center) before cutting metal.

Starter Python Snippet: Weight Tracker

import pandas as pd

# Material Properties
RHO_AL = 0.0975  # lb/in^3 (5083-H116 / 6061-T6)
MARGIN_WELD = 1.10
MARGIN_PAINT = 1.02
MARGIN_CONT = 1.15  # 15% Contingency

# Define Structure as list of dicts
parts = [
    {"name": "Leg_Skin_Port", "type": "Shell", "vol_in3": 12000, "loc": "Leg_Port", "z_ft": -5},
    {"name": "Leg_Stiffeners_Port", "type": "Beam", "vol_in3": 4500, "loc": "Leg_Port", "z_ft": -5},
    {"name": "Leg_Bulkheads_Port", "type": "Shell", "vol_in3": 3000, "loc": "Leg_Port", "z_ft": -2},
    {"name": "Triangle_Wall_1", "type": "Truss", "vol_in3": 8000, "loc": "Frame", "z_ft": 2},
    {"name": "Triangle_Wall_2", "type": "Truss", "vol_in3": 8000, "loc": "Frame", "z_ft": 2},
    {"name": "Triangle_Wall_3", "type": "Truss", "vol_in3": 8000, "loc": "Frame", "z_ft": 2},
    {"name": "Mid_Triangle_Beams", "type": "Beam", "vol_in3": 5000, "loc": "Frame", "z_ft": 3.5},
    {"name": "Deck_Plating", "type": "Shell", "vol_in3": 15000, "loc": "Deck", "z_ft": 7},
    {"name": "Walkway_Grating", "type": "Misc", "weight_lb": 1200, "loc": "Walkway", "z_ft": 8},
    {"name": "Batteries_48V_100kWh", "type": "Outfit", "weight_lb": 8500, "loc": "Legs_Low", "z_ft": -6}, # 25% Disp target
    {"name": "RIM_Thrusters_x6", "type": "Machinery", "weight_lb": 1800, "loc": "Legs_Mid", "z_ft": -3},
    {"name": "Dinghy_RIB_14ft", "type": "Outfit", "weight_lb": 600, "loc": "Aft_Deck", "z_ft": 1},
    {"name": "Mooring_Gear_x3", "type": "Outfit", "weight_lb": 900, "loc": "Corners", "z_ft": 0},
]

df = pd.DataFrame(parts)

# Calculate weights
def calc_wt(row):
    if 'vol_in3' in row and pd.notna(row['vol_in3']):
        return row['vol_in3'] * RHO_AL * MARGIN_WELD * MARGIN_PAINT * MARGIN_CONT
    return row['weight_lb'] * MARGIN_CONT # Outfit gets contingency only

df['weight_lb'] = df.apply(calc_wt, axis=1)

# Center of Gravity Calculation (simplified: assumes X/Y centered, only Z matters for stability)
total_wt = df['weight_lb'].sum()
vcg = (df['weight_lb'] * df['z_ft']).sum() / total_wt

print(f"{'Component':<25} {'Weight (lb)':>12} {'Z (ft)':>8}")
for _, r in df.iterrows():
    print(f"{r['name']:<25} {r['weight_lb']:>12.0f} {r['z_ft']:>8.1f}")
print("-" * 48)
print(f"{'TOTAL LIGHTSHIP':<25} {total_wt:>12.0f} {vcg:>8.2f}")
print(f"\nTarget Max Displacement: 27,500 lb")
print(f"Margin to Target: {27500 - total_wt:,.0f} lb")