Skip to content

sgoudarzi/openfoam-surf-fin

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

2 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

openfoam-surf-fin

OpenFOAM CFD case for an FCS H4 surfboard center fin, with validated baseline polar (-10° to +10°, U = 6 m/s, seawater).

FCS H4 polar animation

The geometry is reproduced from published FCS dimensions; the foil section, sweep, area, and depth match the manufacturer data sheet. The full case (mesh, solver, polar driver, post-processing) is included for direct reproducibility on OpenFOAM-v2512.

To my knowledge this is the most rigorous open-source surfboard fin CFD reference available — the only other surfboard-related repo on GitHub (edwardsp/surfboard) is an Azure HPC benchmark with no geometry, no validation, and no documented methodology.

Quick start

git clone https://github.com/sgoudarzi/openfoam-surf-fin.git
cd openfoam-surf-fin/case

# generate the geometry (writes constant/triSurface/fin.stl)
python3 ../scripts/make_fin_FCS_H4.py

# mesh and run α = 5°
./Allmesh
./Allrun 6.0 5.0

# or run the full polar (-10..+10°, ~3 hours on 12 cores)
python3 ../scripts/runAoASweep.py --speeds=6.0 --alphas=-10,-5,-3,0,3,5,10
python3 ../scripts/plotForces.py ../surfboardFin_sweep/polar.csv

Requires OpenFOAM-v2512 (or v2412+), numpy, matplotlib.

Geometry

Property Value Source
Base chord 111.76 mm FCS II H4 Medium data sheet
Depth 117.09 mm FCS II H4 Medium data sheet
Sweep 37.2° FCS II H4 Medium data sheet
Area (planform) 9 406 mm² matched by fit (achieved 9 406)
Aspect ratio 1.46 computed
Planform shape elliptical, raked c(s) = c_base·(1−s²)^0.746 (fit to area)
LE rake x_le(s) = depth·tan(37.2°)·s^1.2
Foil section NACA 0009 at base → NACA 0006 at tip published as "tapered foil"
Tip handling truncated at s = 0.98 avoids degenerate centroid
STL 47 878 triangles, watertight verified by edge-count check

H4 geometry

The parametric generator is at scripts/make_fin_FCS_H4.py. All geometric parameters are exposed at the top of the file. The planform exponent is fitted by bisection to hit the published area exactly.

CFD setup

Solver simpleFoam (steady, incompressible)
Turbulence k–ω SST (RANS)
Fluid seawater, ν = 1.19 × 10⁻⁶ m²/s, ρ = 1000 kg/m³
Inlet velocity 6.0 m/s (≈ 12 knots, mid-range surfing speed)
Reynolds number Re ≈ 5.6 × 10⁵ (based on base chord)
Domain 2.8 m × 1.0 m × 1.2 m (X × Y × Z), fin centered at (0, 0, 0)
Boundaries inlet (Dirichlet), outlet (inletOutlet), boardPlane (slip), farfield (slip), fin (wall)
Mesh ~1.3 M cells, snappyHexMesh
Layer coverage 97.4 % on fin patch, 6 prism layers
y⁺ on fin 7.7 min / 14.1 avg / 123 max
Convergence 2 500 SIMPLE iterations, residuals ~10⁻⁸
Parallel 12 ranks via scotch decomposition

Reference quantities for force coefficients: Aref = 9 406 mm², lref = 111.76 mm, ρref = 1000 kg/m³.

Baseline polar

Baseline polar

α [deg] CL CD L/D Cm,pitch
−10 −0.0392 0.0228 −1.72 −0.0052
−5 −0.0087 0.0171 −0.51 −0.0083
−3 +0.0030 0.0163 +0.19 −0.0094
0 +0.0204 0.0164 +1.24 −0.0111
+3 +0.0376 0.0183 +2.05 −0.0128
+5 +0.0491 0.0205 +2.40 −0.0139
+10 +0.0789 0.0296 +2.67 −0.0167

Reproducibility note: the table above is from a 12-rank parallel run. The same case run in serial converges to Cl = 0.0435, Cd = 0.0200 (L/D = 2.18) at α = 5°. The ~13% difference is parallel-decomposition scatter near separation onset — see docs/validation.md. For an exactly reproducible single-point value, run serial; see results/serial_a5_reference.txt.

Notable features

  • Lift slope in the linear regime (−3° to +3°): dCₗ/dα ≈ 0.0058 /deg. Helmbold prediction for AR = 1.46 inviscid is ≈ 0.036 /deg; the case recovers ≈ 16 % of inviscid slope, the expected penalty for fully turbulent RANS at transitional Re (see docs/validation.md).
  • Zero-lift offset Cₗ(0) = +0.020. This is a real effect from the asymmetric thickness taper (NACA 0009 base → 0006 tip) creating an effective spanwise twist, not numerical noise.
  • Drag bucket bottoms at α ≈ −3°, skewed negative by the same asymmetry. Cd asymmetry across α = ±10° is ~30 %.
  • L/D is monotonic over the swept range; peak is past +10°. For typical surfing AoA (±5°), L/D operates in [−1, +2.4].

Honest caveats (also in docs/methodology.md):

  • Absolute Cₗ is conservative — fully-turbulent RANS at transitional Re (5.6×10⁵) without a γ–Reθ transition model typically under-predicts lift by 30–40 %.
  • Relative comparisons between fin variants are robust because both baseline and variant share the same numerical bias.
  • The boardPlane is modeled as inviscid slip rather than a no-slip surfboard underside. This isolates fin behavior from the board boundary layer; results are comparable to wing-with-image-plane, not a board-mounted fin in a real boundary layer.

Repository layout

openfoam-surf-fin/
├── README.md
├── LICENSE                   # MIT
├── case/                     # complete OpenFOAM case
│   ├── 0.orig/               # initial / BC fields (U, p, k, omega, nut)
│   ├── constant/
│   │   ├── triSurface/       # fin.stl lives here after generator runs
│   │   ├── transportProperties
│   │   └── turbulenceProperties
│   ├── system/
│   │   ├── controlDict       # forceCoeffs1, yPlus, write controls
│   │   ├── fvSchemes
│   │   ├── fvSolution
│   │   ├── blockMeshDict     # background hex grid
│   │   ├── snappyHexMeshDict # surface + layer refinement
│   │   ├── decomposeParDict  # 12-rank scotch decomposition
│   │   └── surfaceFeatureExtractDict
│   ├── Allmesh               # blockMesh → snappy → renumber
│   ├── Allrun                # decomposePar → potentialFoam → simpleFoam → forces
│   └── Allclean
├── scripts/
│   ├── make_fin_FCS_H4.py    # parametric STL generator
│   ├── runAoASweep.py        # polar driver (clones case per AoA)
│   └── plotForces.py         # plots polar.csv
├── results/
│   ├── polar.csv             # validated baseline polar
│   ├── H4_baseline_polar.png # 3-panel polar plot
│   └── H4_baseline_U6_a5.txt # summary at α = 5°
└── docs/
    ├── methodology.md        # solver, schemes, BCs, convergence
    ├── validation.md         # comparison to published surfboard CFD literature
    ├── H4_polar_animated.gif # animation used at top of README
    └── fin_FCS_H4.png        # 3-view static render

References

  • FCS product data, FCS II H4 Medium center fin specifications.
  • Sakellariou, K., Bertz, T., Voss, R., Knoblauch, S., Pfaller, R. (2019). Computational hydrodynamics of a typical 3-fin surfboard setup. Applied Ocean Research 88, 209–222. DOI: 10.1016/j.apor.2019.04.016
  • Knoblauch, S., Pfaller, R., Sakellariou, K., Voss, R. (2020). Numerical Investigation of the Hydrodynamics of Changing Fin Positions within a 4-Fin Surfboard Configuration. Applied Sciences 10(3), 816. DOI: 10.3390/app10030816
  • Schäfer, M. et al. (2025). Measurements of the hydrodynamic pressure on a surfboard fin during surfing. Scientific Reports 15. DOI: 10.1038/s41598-025-94834-0
  • Carswell, D. (2007). Hydrodynamic Performance of Surfboard Fins. BEng thesis, Plymouth University. (Frequently cited single-fin experimental + numerical baseline.)
  • OpenFOAM Foundation / OpenCFD Ltd. OpenFOAM v2512. https://openfoam.com

License

MIT — see LICENSE. The H4 dimensions referenced here are public information from the FCS data sheet; no proprietary FCS data is distributed. The STL generator constructs an interpretation of those public specs, not the manufacturer file.

Author

Sahar Goudarzi — sgoudarzi.github.io · LinkedIn

Related repos: nrel5mw-ami-openfoam · openfoam-hydraulic-validation

About

OpenFOAM CFD case for an FCS H4 surfboard center fin with validated baseline polar

Topics

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors