Seastead Wave Simulation: Open Source Software Comparison

Design Context: 44ft Equilateral Triangle Deckhouse + 3x NACA 0035 Foil Legs (21.5ft x 8.5ft chord) + Heave Plates + Mooring.

Critical Physics: Non-linear hydrostatics (large waterplane area change), Viscous damping (heave plates/foils), Slamming/Green water on deck/legs, Mooring dynamics, 6-DOF motions.

Hardware: High-end GPU (NVIDIA RTX 3090/4090/A-series class assumed). OS: Linux preferred, Windows via WSL2 acceptable.

Table of Contents

Executive Summary & Top Recommendation

Winner for Engineering Accuracy + Visualization + GPU Usage: DualSPHysics (v5.2+) running on Linux (native or WSL2).
Runner Up (Best Python Ecosystem / Frequency Domain + Non-linear Time Domain Hybrid): Capytaine (BEM) + MoorDyn + Custom Python Non-linear Froude-Krylov Solver.

Why DualSPHysics?

Why NOT the others?

Detailed Comparison Matrix

Criteria DualSPHysics (GPU SPH) Capytaine + MoorDyn (Python BEM) Project Chrono (FSI-SPH) OpenFOAM (VOF - olaFlow) REEF3D (CFD GPU) SPlisHSPlasH (SPH)
Physics Model Weakly Compressible SPH (WCSPH). Fully non-linear, viscous, compressible (acoustic), mesh-free. Linear Potential Flow (BEM) + Non-linear FK (custom). Inviscid (mostly). WCSPH (similar kernel to DualSPHysics) + Chrono Multibody. VOF (Finite Volume). Incompressible. Turbulence models (k-omega SST). Level Set / Ghost Fluid (High Order FDM). Incompressible. Turbulence. WCSPH / DFSPH. Good for graphics, less marine validation.
Handles Your Non-Linearities Excellent Native large motion, slamming, ventilation, heave plate separation. Poor Requires manual non-linear FK + Morison strip theory hacks. Excellent Same physics as DualSPHysics. Good Mesh deformation limits large 6-DOF amplitude. Good Cartesian grid + Immersed Boundary handles large motion well. Fair Possible, less marine benchmarking.
GPU Utilization Native CUDA (100% GPU). Fastest option. CPU Only (BEM is dense matrix solve). Native CUDA (via Chrono::FSI). CPU (MPI) OpenFOAM-GPU experimental. Native CUDA Very fast. Native CUDA/OpenCL Fast.
Mooring (MoorDyn) Native Coupling (v5.2+ DLL link). Native Python (MoorDyn-Python wrapper). Native (Chrono::MoorDyn). External (FAST/OrcaFlex coupling, complex). Limited Usually custom coupling. None Custom only.
Python / AI Scripting Moderate XML input files. pysph wrapper exists but unofficial. Best: Python writes XML/STL. Excellent Pure Python OOP API. AI will write scripts fast. Moderate Python bindings (PyChrono) exist but lag C++ API. Moderate PyFoam, oftools. Case dicts are text. Poor C++ input files. Limited Python. Poor C++ / JSON config.
Pre/Post Processing Good GenCase (STL->Particles), ParaView, PostDualSPH. Excellent Matplotlib, NumPy, Pandas native. Fair ParaView, custom C++ post-proc. Excellent ParaView, foamToVTK, huge ecosystem. Fair Tecplot/Paraview, custom tools. Fair ParaView, built-in GUI.
Setup Complexity (Your Geometry) Medium STL -> Particles -> XML. Wave tank setup standard. Low Mesh panels (Gmsh) -> Python -> Run. High Chrono::FSI setup is verbose C++/JSON. Very High snappyHexMesh + dynamicMeshDict + waveGen. High Cartesian grid + STL level-set. Complex config. Medium Scene description files.
Validation / Marine Cred High ISOPE, OMAE papers. Used for WEC, slamming, coastal. High Standard for linear seakeeping/WEC. Medium Growing, more robotics/granular focus. Highest Industry standard for VOF. Medium Strong academic (NTNU), less commercial. Low Graphics/Engineering crossover.
Cost / License GPL v3 (Free) MIT / BSD (Free) BSD-3 (Free) GPL v3 (Free) GPL v3 (Free) MIT (Free)

Deep Dives per Software

1. DualSPHysics (The Recommended Choice)

Website: dual.sphysics.org | Repo: GitHub

Why it fits YOUR specific geometry:

The Workflow (AI Automatable):

  1. CAD: Export 4 STLs: Hull_Triangle (walls+floor+ceiling as single watertight shell), Leg_Port, Leg_Starboard, Leg_Aft (or identical Leg x3 + transform XML). Heave plates can be separate STLs or merged.
  2. GenCase (Pre-processor): Reads STLs. Generates particle positions for fluid (wave tank) and boundary (bodies). Defines initial waterline (50% leg submergence). Claude writes the GenCase.xml.
  3. DualSPHysics (Solver): Runs on GPU. Inputs: GenCase output + DualSPHysics.xml (numerics, wave maker, mooring coupling, output freq). Claude writes the XML.
  4. Post: PartVTK tool converts binary output to .vtk. Open in ParaView -> Animate -> Save Video.
Resolution Warning: Your legs are 8.5ft chord (~2.6m). For SPH, you need dp (particle spacing) <= Chord/40 ~ 6.5cm for pressure convergence on foils. Tank size: ~60m x 30m x 15m (deep water). Particle count ~ 8-12 Million. VRAM needed: ~12-16 GB (RTX 3090/4090 24GB is perfect. 12GB cards will struggle, need CPU fallback or smaller tank).

2. Capytaine + MoorDyn (The "Fast Physics" Baseline)

Best for: Quick RAOs, mean drift forces, mooring stiffness sizing, checking if the concept floats upright before spending GPU hours.

Python API Example (Claude writes this in seconds):

# pip install capytaine moordyn import capytaine as cpt import numpy as np # 1. Define Bodies (Mesh from Gmsh/STL) leg_mesh = cpt.mesh.meshes.mesh_from_stl('leg.stl') # ... define 3 legs at triangle vertices, triangle deckhouse ... # 2. Solve BEM (Frequency Domain) solver = cpt.BEMSolver() freqs = np.linspace(0.1, 2.0, 20) # rad/s results = solver.solve_all(bodies, freqs, wave_directions=[0]) # 3. Extract Hydro Coeffs (Added Mass, Damping, Exciting Force) # results[body].added_mass, .radiation_damping, .diffraction_force # 4. Couple MoorDyn (Quasi-static or Time Domain via Cummins Eq) # Requires writing Custom Time Domain solver in Python using # convolution integral (Cummins) + Non-linear Froude-Krylov (instant wetted hull) # This is where it gets hard for your geometry.

Verdict: Do this FIRST (Week 1). It gives you natural periods, mooring pre-tension estimates, and a sanity check. Do not use for final "failure" analysis.

3. Project Chrono (Chrono::FSI-SPH)

Essentially the same SPH solver as DualSPHysics (developed in collaboration) but embedded in a Game-Engine style Multibody Dynamics kernel.

Use Chrono INSTEAD of DualSPHysics ONLY if: You need to simulate the internal mechanics simultaneously: e.g., the helical screw motor torque curves, the dinghy davit deployment kinematics, the walkway connection coupling between two seasteads (joint friction, slack), or tracked vehicle driving on deck.

For pure seakeeping: DualSPHysics has better wave absorption (active wave absorption - AWA), better wave generation (2nd order Stokes, focused waves), and simpler input files.

4. OpenFOAM (olaFlow / waves2Foam)

The "Heavy Iron" of CFD. VOF method captures air-water interface sharply (no particle noise).

Blocker for you: Dynamic Meshing for 6-DOF Trimaran. Your legs move 7ft+ vertically. The mesh around the foil/heave plates must deform or remesh every timestep. dynamicOversetFvMesh (overset/chimera) is the only robust way. Setting up 4 overlapping mesh zones (background + 3 leg zones) with heave plates sliding through background cells is a 2-3 month expert task. Not AI-friendly.

5. REEF3D (GPU CFD)

High-order finite difference on Cartesian grid + Level Set + Immersed Boundary (IB). Handles moving bodies extremely well (no meshing!). GPU native (CUDA). Used for breaking waves on fixed structures.

Issue: 6-DOF coupling for floating bodies is newer (2022+). MoorDyn coupling exists but less tested than DualSPHysics. Input is C++ structs / text files. Less Pythonic. Good alternative if DualSPHysics particle noise is unacceptable, but higher barrier to entry.

6. Blender (FLIP Fluids / Mantaflow)

Hard No for Engineering.

Use Blender FOR: Importing DualSPHysics .vtk or .csv motion data (6-DOF CSV) -> Drive Blender Rig -> Render Photorealistic Marketing Video.

Time-to-First-Simulation Estimates (With Claude Code / Cursor)

Assumes: You have STLs exported from CAD (Rhino/SolidWorks/FreeCAD). You run Linux (Ubuntu 22.04) natively or WSL2. GPU Drivers/CUDA Toolkit installed.

Phase DualSPHysics Capytaine + MoorDyn Project Chrono (FSI) OpenFOAM (olaFlow)
Environment Setup 1 Day (Docker: docker pull dualsphysics/dualsphysics:gpu) 2 Hours (pip install) 1 Day (Docker: projectchrono/chrono:gpu or compile) 2 Days (Docker: opencfd/openfoam + olaFlow compile)
Geometry Prep (STL -> Input) 2 Days (GenCase XML tuning: dp, tank dims, body transforms, ballast) 1 Day (Gmsh panel mesh + Python body setup) 3 Days (Chrono::FSI JSON format is verbose; STLs -> ChTriangleMeshConnected) 5-10 Days (snappyHexMesh + Overset zones + STL cleaning)
Physics Config (Waves, Mooring, Output) 2 Days (Wave maker type, AWA, MoorDyn.txt coupling, Output VTK freq) 2 Days (MoorDyn.py + Custom Time Domain Solver Script) 3 Days (Chrono::ChWaveGenerator, ChMoorDyn, Output callbacks) 5 Days (waveGen dict, dynamicMeshDict, MoorDyn coupling compile)
Debug / First Valid Run 3 Days (Particle instability, tensile instability, wall BCs, ballast check) 1 Day (Matrix singularities, irregular freqs, MoorDyn init) 5 Days (FSI coupling stability, time step, kernel params) 10+ Days (Courant number, mesh quality, pressure-velocity coupling)
TOTAL TO FIRST VIDEO ~8 Days ~6 Days (But wrong physics for final answer) ~12 Days ~22+ Days
Pro Tip: Run Capytaine (Week 1) and DualSPHysics (Week 2-3) in parallel. Capytaine gives you the target natural periods (Heave/Roll/Pitch) and mooring stiffness. You use those to validate the DualSPHysics model (run decay tests in DualSPHysics -> match periods).

Design Iteration: "How hard to run Design B?"

DualSPHysics (Parameterized XML + Python Wrapper)

Once you have a working GenCase.xml and DualSPHysics.xml template, changing the design is trivial for geometric scaling.

Effort: Low (15 mins script edit + Compute time).

Capytaine

Effort: Very Low (Pure Python parametric script). But physics fidelity ceiling is hit immediately.

OpenFOAM / REEF3D

Effort: High. Changing leg length requires regenerating overset mesh zones / background mesh refinement boxes. Changing heave plates requires new immersed boundary STL + refinement zones. Manual intervention almost guaranteed.


Generated for Seastead Design Project | DualSPHysics v5.2+ / Capytaine / MoorDyn Stack Recommended