Open‑Source Seastead Wave‑Simulation Tools – Comparison

This page compares free / open‑source packages that can simulate a small floating platform (seastead) with legs, cables, and wave loading. The goal is to see when cables go slack or experience snap (snatch) loads, and to produce visual videos of the motion.

Quick‑look table

Software What it does Pros Cons Time to first simple model* Accuracy for cables & waves Example video (YouTube) Homepage / Docs
Project Chrono (incl. HydroChrono / PyChrono) Multi‑body dynamics (rigid bodies, cables/chains, joints). Built‑in buoyancy & wave forcing. 3‑D visualization. · All‑in‑one environment (no extra solvers).
· Python API (PyChrono) works well with AI assistants.
· Can model slack/tension in cables (distance constraints).
· Runs on Linux/Windows, no GPU needed.
· Hydrodynamic model is simplified (added‑mass / radiation only).
· No built‑in diffraction / wave‑interaction (unless you couple with Capyatine).
· Cable model is quasi‑static (no dynamic stretch).
~1‑2 days (create geometry, add buoyancy, add cable constraints, run wave).
≈ 20 lines of Python with AI help.
Good for “ball‑park” motion and cable‑tension estimation. Wave heights can be prescribed; snap‑load detection is possible by watching tension spikes. Project Chrono – floating platform in waves (≈ 1 min)
Capyatine + MoorDyn
  • Capyatine: solves linear‑wave diffraction/radiation (frequency‑domain) → gives hydrodynamic coefficients (added mass, damping, wave‑excitation).
  • MoorDyn: dynamic mooring‑line solver (catenary + elastic stretch).
· High‑fidelity wave‑load (diffraction) for complex hulls.
· MoorDyn handles elastic cables with tension‑dependent stiffness, slack‑to‑tight transitions.
· Both are pure‑Python‑friendly (Capyatine has a Python wrapper; MoorDyn has a C library + Python API).
· Two separate packages → you must feed Capyatine results (matrices) into MoorDyn and couple with your own multi‑body code (e.g., a simple Python ODE or Chrono).
· Requires some “glue” scripting and understanding of frequency‑domain data.
~1‑2 weeks (learn Capyatine’s input format, generate hydrodynamic coefficients, set up MoorDyn, write coupling script).
≈ 150‑200 lines of Python with AI help.
Excellent for wave‑load (diffraction) and realistic cable dynamics (snap loads). Good for engineering‑level studies. Capyatine + MoorDyn – floating wind turbine example (≈ 2 min)
Blender (Rigid Body + Fluid) 3‑D modelling tool with a built‑in “Rigid Body” physics engine. Optional “Fluid” simulation (Eulerian grid). · Very quick to build geometry and animate.
· Many tutorials and a huge community.
· Good for artistic video output.
· Rigid‑Body engine is not a real‑world dynamics solver – no proper buoyancy, added‑mass, or wave forces.
· Fluid sim is extremely expensive, low‑resolution, and cannot produce realistic cable snap loads.
~½ day to make a simple model, but the physics will be unrealistic. Not suitable for engineering‑level predictions. Only “visual” feel. Blender floating platform (artist’s impression)
DualSPHysics GPU‑accelerated Smoothed Particle Hydrodynamics (SPH) fluid solver. Can simulate fully nonlinear wave–structure interaction. · Truly captures wave breaking, splash, and complex fluid‑structure interaction.
· Runs on CUDA/OpenCL (good GPU availability).
· Steep learning curve; requires careful meshing, particle tuning, and long simulation times.
· No built‑in cable/chain mechanics – you would need to couple with a multi‑body code (e.g., Chrono).
· Primarily a CFD tool, not a multi‑body tool.
~2 weeks to set up fluid domain, mesh, and couple to a structural solver (or approximate with particle‑based “flexible” lines). High‑fidelity fluid but cable modeling is difficult; you would see slack but not precise tension without extra work. DualSPHysics wave‑structure example
OpenFOAM (coupled with multi‑body) General‑purpose CFD suite (RANS, LES, wave‑generation). Must be coupled to a structural solver (e.g., Chrono, or your own code). · Many wave‑generation libraries (e.g., waves2Foam).
· Accurate fluid forces for complex hulls.
· Very steep learning curve, large number of knobs.
· Requires substantial pre‑/post‑processing (mesh generation, case setup).
· Not “quick‑look” tool for brainstorming.
≥ 3‑4 weeks to get a stable CFD‑structure simulation. Accurate fluid but coupling to flexible cables is non‑trivial; you’ll spend most time on the CFD side. OpenFOAM floating platform wave load
OpenFAST (offshore wind tool) Multi‑physics platform for wind turbines that includes mooring dynamics (via MoorDyn) and linear‑wave diffraction. · Already includes a mooring‑line module (MoorDyn).
· Can do full coupled wave‑mooring‑structure analysis.
· Primary focus is wind‑turbine support; adapting to a small seastead needs a lot of configuration.
· Not Python‑centric (mostly Fortran + XML).
· Large download & steep learning.
≈ 2‑3 weeks to set up a simple seastead model. Accurate wave & mooring but might be overkill for a tiny 4‑leg platform. OpenFAST mooring example

*Time to first simple model assumes you are comfortable writing Python scripts and have an AI assistant (Claude Code / Cursor.ai) to generate scaffold code. Times are order‑of‑magnitude estimates; actual effort depends on your prior experience.

Which tool is best for the “brain‑storming” stage?

Typical workflow with Project Chrono (recommended)

  1. Installpip install pychrono (or build from source for the newest HydroChrono).
  2. Create geometry – Use simple cylinders for the four legs and a box for the living area. Export as a .obj or create directly in PyChrono (e.g., ChBodyEasyCylinder).
  3. Add buoyancy – Use the built‑in ChBuoyancy (or the newer HydroChrono helper) that computes force based on submerged volume. It accepts a wave height & period.
  4. Add cables – Create ChLinkDistance or a chain of point‑masses to represent flexible cables. Measure the link’s tension with link.GetReaction().
  5. Run simulation – Set a time step (e.g., 1 ms), run for several wave periods, and record position / tension.
  6. Visualize – Use the built‑in Irrlicht viewer (or export to VTK and render with ParaView). You can capture a screen‑record for a video.
  7. Detect snap loads – Plot the tension time‑history; look for sudden spikes when a cable goes slack and then re‑tensions.

A minimal script (≈ 50 lines) can be generated by an AI assistant. Below is a rough sketch (Python):

# PyChrono example (pseudo‑code)
import pychrono as chrono
import math

sys = chrono.ChSystemSMC()
# Wave parameters
wave_height = 1.0  # m
wave_period = 5.0  # s

# Platform (box)
platform = chrono.ChBodyEasyBox(12.192, 4.877, 1.0, 1500, True)
sys.AddBody(platform)

# Legs (cylinders) – 4 legs, each 1.22 m dia, 7.32 m long
leg_dim = chrono.ChDimensionConstants()
for (x, y) in [(-6.1,-2.44), (6.1,-2.44), (-6.1,2.44), (6.1,2.44)]:
    leg = chrono.ChBodyEasyCylinder(0.61, 7.32, 1500, True)
    leg.SetPos(chrono.ChVector(x, y, -3.66))   # half submerged
    sys.AddBody(leg)
    # Attach leg to platform with a revolute joint (pivot)
    joint = chrono.ChLinkRevolute()
    joint.Initialize(platform, leg, chrono.ChFrame(chrono.ChVector(x, y, 0)))
    sys.AddLink(joint)

# Simple cable (distance constraint) between leg bottoms
cable = chrono.ChLinkDistance()
cable.Initialize(leg1, leg2, False)   # you would list the two leg bodies
sys.AddLink(cable)

# Buoyancy – use built‑in simple buoyancy (no diffraction)
buoy = chrono.ChBuoyancy()
buoy.SetWaterDensity(1025)
buoy.SetWaveHeight(wave_height)
buoy.SetWavePeriod(wave_period)
# Attach to each body
for body in [platform] + legs:
    body.AddBuoyancyForce(buoy)

# Run
ts = 0.001
duration = 30.0
while sys.GetChTime() < duration:
    sys.DoStepDynamics(ts)
    # monitor tension (cable.GetReaction()[0])
    pass

You can replace the simple buoyancy with a HydroChrono “ChHydroWave” for more realistic sinusoidal wave forcing. The script will run on a laptop in a few minutes, giving you a video of the platform bobbing and cables tensioning.

Workflow with Capyatine + MoorDyn (if you need higher fidelity)

  1. Create a “mesh” of the platform (e.g., in Gmsh) and run Capyatine to obtain added‑mass, damping, and excitation matrices.
  2. Use those matrices in your own time‑domain integration (or couple to Chrono via Python‑CTypes). This step provides accurate wave forces.
  3. Set up MoorDyn input files for each cable – you can specify the unstretched length, stiffness, and damping.
  4. Run the coupled simulation (you will write a loop that updates the platform’s motion, computes wave forces from Capyatine, and passes the motion to MoorDyn for cable tension).
  5. Record tension and produce a video (e.g., via Matplotlib animation or by exporting to VTK).

This path is more work but yields engineering‑grade data for snap loads.

Summary recommendation

Links & resources

All of the above packages run on Linux and Windows. They are free (no licence fee), and you can ask Claude Code or Cursor.ai to help write the Python glue code.

Prepared for the seastead brainstorming team – feel free to copy this HTML onto your site.