Documentation
beamFoam implements a cell-centred finite volume formulation of geometrically exact Simo-Reissner beams. The solver supports large three-dimensional translations and rotations while retaining a one-dimensional beam mesh.
Repository Structure
The main user-facing components are:
applications/solvers/beamFoam: the beam solverapplications/utilities/createBeamMesh: creates the one-dimensional beam mesh fromconstant/beamPropertiesapplications/utilities/setInitialPositionBeam: translates or rotates a beam into its initial reference configurationsrc/wireBunchingModels: beam models, cross-sections, boundary conditions and momentum contributionstutorials: ready-to-run example and validation cases
Case Workflow
A typical Allrun script creates the beam mesh and then starts the solver:
runApplication createBeamMesh
runApplication beamFoam
Cases that do not begin in the default straight orientation use setInitialPositionBeam after mesh creation. For example:
runApplication setInitialPositionBeam \
-cellZone beam_0 \
-translate '(0 0 0)' \
-rotateAngle '((0 -1 0) 90)'
createBeamMesh assumes that the undeformed reference configuration is astraight beam aligned with the global x-direction. This is distinct from theinitial configuration used by a simulation, which may have any orientation andmay be curved. setInitialPositionBeam applies rigid translations androtations; curved initial configurations require the corresponding referenceand initial-configuration fields.
The standard OpenFOAM case directories are used:
0/: initial and boundary conditionsconstant/: beam definition, material properties and load historiessystem/: solution controls, time schemes and function objects
Defining Beams
The primary configuration file is constant/beamProperties. Its beamModel entry selects the solution model, while the beams list defines one or more beams. A beam entry specifies its cross-section, length, number of segments and material properties. For example:
beamModel coupledTotalLagNewtonRaphsonBeam;
beams
(
beam_0
{
crossSectionModel rectangle;
rectangleCrossSectionModelDict
{
b 0.2;
h 0.2;
nx 1;
ny 1;
}
length 2;
nSegments 40;
E 15.293e6;
G 5.882e6;
rho 1000;
}
);
The repository includes circular and rectangular cross-section models. The selected beam model's coefficient dictionary controls nonlinear iteration settings such as the maximum number of correctors and solution tolerance.
Primary Fields and Loads
The primary unknowns are:
W: beam displacementTheta: beam rotation
Boundary conditions in 0/W and 0/Theta apply end constraints, forces and moments. Distributed loads may be supplied through fields such as q, while time-dependent end loads are commonly defined by data files under constant/. Additional momentum contributions include Morison drag and ground contact.
Static and dynamic behavior is selected through the case dictionaries. Dynamic cases can use OpenFOAM time-discretisation schemes such as Euler or Newmark, configured in system/fvSchemes.
Post-Processing
The point displacement field pointW is intended for visualising the deformed beam in ParaView:
> touch case.foam
> paraview case.foam
Apply the Warp By Vector filter using pointW. Many tutorials also provide function objects and gnuplot scripts for displacement and energy histories.
For the complete formulation, discretisation and validation study, see the beamFoam paper.