moorFV is a coupling library for mooring applications in OpenFOAM, with extensions for beam-fluid interaction problems. It provides finite-volume-based tools and examples for coupling floating-body motion, mooring-line dynamics, and beam-fluid interaction workflows.
- OpenFOAM, tested with OpenFOAM.com-style installations.
beamFoam, which is a mandatory submodule for this library.- A working OpenFOAM build environment with
wmakeavailable in the shell.
Initialize the required submodule after cloning:
git submodule update --init --recursiveThis checks out the beamFoam commit that moorFV is pinned to, which is a
commit on the beamFoam main branch. The submodule is then on a detached
HEAD, which is expected. This is the combination that CI builds and tests on
every pull request.
To use the latest beamFoam main instead (the branch = main entry in
.gitmodules), run:
git submodule update --remote src/beamFoamIf beamFoam main has moved on since the pinned commit, git status in
moorFV then shows src/beamFoam as modified.
The beamFoam submodule is located at:
src/beamFoam
By default, moorFV builds against this bundled submodule. If you want to use
your own beamFoam checkout instead, set BEAMFOAM_DIR before building:
export BEAMFOAM_DIR=/path/to/beamFoamThe selected beamFoam installation must already be compiled, because moorFV uses beamFoam headers from:
$BEAMFOAM_DIR/src/wireBunchingModels/lnInclude
If that directory is missing, compile beamFoam first:
cd "$BEAMFOAM_DIR"
./Allwmake -jLoad your OpenFOAM environment first, then build from the repository root:
./AllwmakeThe root Allwmake delegates to src/Allwmake. The src/Allwmake script
resolves BEAMFOAM_DIR as follows:
- If
BEAMFOAM_DIRis set, it validates and uses that path. - If
BEAMFOAM_DIRis not set, it uses the bundled submodule atsrc/beamFoam. - If the submodule is missing or uninitialized, it prints the required
git submodule update --init --recursive src/beamFoamcommand.
It then checks that beamFoam is on its main branch, or at a commit on
main. The bundled submodule passes this check as it is after
git submodule update, which leaves it at the pinned commit.
This means both of the following are valid:
./Allwmakecd src
./AllwmakeTo clean generated build files:
./AllwcleanExample cases are provided in:
tutorial/
The tutorials are grouped by application:
tutorial/mooring/: moored floating body cases (mooringCase-H12T20,mooringCase-H15T18)tutorial/twoWayBeamFluidInteraction/: two-way actuator-line coupling of a flexible beam with the flow (beamInChannel,oscillatingBeam,flexibleVegetation); each has its ownREADME.md
Each case should be run from its own directory using the local Allrun and Allclean scripts when available.
If you use moorFV or the finite-volume mooring-line method in your work, please cite:
Taran, A., Bali, S., Tukovic, Z., Pakrashi, V., and Cardiff, P. (2025). A finite volume Simo-Reissner beam method for moored floating body dynamics. Applied Ocean Research, 165, 104845. https://doi.org/10.1016/j.apor.2025.104845
For questions, please contact:
- Amirhossein Taran: amirhossein.taran@ucdconnect.ie
- Philip Cardiff: philip.cardiff@ucd.ie
This project is distributed under the GNU General Public License v3.0. See LICENSE for details.

