Skip to content

Monopile under high-cyclic loading

Finite Element (FE) representation

Tip

The mesh file for quadratically interpolated elements are found here. The full input files here.

Warning

If you are not able to use user-subroutines (because you have not installed OneAPI), a reduced version of the input files without the need for user-subroutines is found here. Note that in this input file a mesh with linearly interpolated elements is used in order to speed up the simulation.

This example explains the simulation of the long-term response of monopile foundations using the HCA model in combination with the hypoplastic model with intergranular strain. The mesh generation is skipped for this example.

The adopted finite element model is given in Figure 1. The pile has a length of 10 m and a diameter of 4 m. The file containing the mesh (mesh.inp) is discussed first and then the step file (step_tutorial.inp) is addressed.

figure 1 Figure 1. Model of the monopile (only the corner nodes of the elements are visible)

Running out of RAM

The simulation needs quite a bit of RAM. If your simulation is killed, the RAM of your computer is not enough.

Mesh

For the soil, three-dimensional u-p finite elements with 27 nodes discretising the displacement u of the solid phase and 8 nodes discretising the pore water pressure \(p^w\) are utilised (termed u27p8 element, obtained using the bi-quadratic option in the element definition since the pre-processor generated u20 elements).

.
.
*Element, type=u20p8-sat,bi-quadratic
.
.

Hence, quadratic interpolation functions are used for the solid displacement while linear interpolation functions are applied for the pore water pressure (i.e. Taylor-Hood element formulation 1). The u27p8 element is superior to the u20p8 element in contact analyses.

The pile is modelled with single phase elements with 27 nodes (u27-solid obtained again using the bi-quadratic option).

.
.
*Element, type=u20-solid,bi-quadratic
.
.

Properties, Initial conditions and step definitions

Properties, contact and Initial conditions

The step file (step_tutorial.inp) first includes the mesh file by defining:

*include=mesh

Then the material definitions are given. The pile is composed of two materials: the regular steel material and a much stiffer material used only for the uppermost row of elements where the load is applied to the pile. This is done to avoid excessive deformations of the pile at the point of load application.

*Material, name=Elastisch_Stahl, phases = 1
*Density
30.9416d0
*Mechanical = Linear_Elasticity
2.1e+8, 0.3
**
*Material, name=Stahl_kopf, phases = 1
*Density
30.9416d0
*Mechanical = Linear_Elasticity
2.1e+12, 0.3

Note that the density is set higher in order to consider an additional length of the pile not modelled.

For the low-cycle phase of the HCA model, the Hypoplastic model with intergranular strain extension is used. The parameters calibrated for "Karlsruhe fine sand" are adopted. The parameters for the HCA model are provided in the Table below

\(C_{\textrm{ampl}}\) \(C_{e}\) \(C_{p}\) \(C_{Y}\) \(C_{N1}\) \(C_{N2}\) \(C_{N3}\)
1.33 0.60 0.23 1.68 2.95\(\cdot10^{-4}\) 0.41 \(1.9 \cdot 10^{-5}\)

Two densities have to be given which are the density of the solid grains and the density of water. In addition, the bulk modulus of the pore water and the permeability have to be defined. In numgeo, the permeability equals the dynamic viscosity (set to \(10^{-6}\) kPas) multiplied with the hydraulic conductivity \(k^w\) and divided by the unit weight of water (\(\gamma_w = 10~\)kN/m\(^3\)). A high hydraulic conductivity of \(k^w\) = 1 \(\cdot\) \(10^{-3}\) m/s is defined here. The resulting permeability of \(10^{-10}\) m\(^2\) is set in the input file.

To avoid positive mean effective stresses (in mechanical sign convention), a minimum value is set. In addition, an artificial viscosity is used to achieve better convergence. However, it is not necessarily required and also doesn't influence the results.

In addition to the material parameters, the HCA model requires the declaration of the step types. The first four steps are low-cycle ("implicit") steps. The first sinusoidal load is applied in \(step4\). In \(step5\) the second cycle is applied, for which the strain path is recorded. The actual HCA phase is performed in \(step6\). The period of the cycles is 1 s for why in line 40 to 41 the cycle time is set to 1 s.

*Material, name = hypo, phases = 2
*Mechanical = HCA_Hypoplasticity
**phi, nu, hS, n, ed0, ec0, ei0, alpha
**beta, mT, mR, R, betaR, chi, Kw
0.577, 0.0, 4d6, 0.27, 0.677, 1.054, 1.15, 0.14
2.5, 1.2, 2.4, 1d-4, 0.1, 6.0 , 0.
*******
**CN1, CN2, CN3, Campl, Ce, 0, Cp2, 0
**Cy2, Cpi1, Cpi2, Cpi3, patm, eref, eps^ampl_ref, A
**a, n, nu, phic
0.000295, 0.41, 0.000019, 1.33, 0.6, 0, 0.23, 0
1.68, 0, 0, 0, 100, 1.054, 0.0001, 1209
1.63, 0.5, 0.32, 0.577

*Density
2.7d0, 1.0


*minpressure
-0.05

*mechanical viscosity = linear
0.5,2.0,1.1,1.5,1.1,1.5

*Bulk modulus
2.2d5

*Permeability=ISOTROPIC
1.0e-10
** k = 1.0e-10 * 1.0e-6 * 10 = 1.0e-3
*Dynamic viscosity
1.0e-6

*Implicit hca steps
step1,step2,step3,step4
*Recording hca steps
step5
*Explicit hca steps
step6
*HCA cycle time
1

The penalty method is used to enforce the contact constraints. No separation between soil and pile is possible once the contact is active. A simple Coulomb friction model with a friction coefficient of 0.3 is used.

The contact between soil and pile is discretised using a mortar contact discretisation technique.

A small value for the contact clearance is defined, which leads to a small value of initial contact pressure. This is beneficial since the Initial stress state is closer to equilibrium, in which the earth pressure is acting as contact pressure.

*Interaction,name=pen,MECHANICAL=penalty,no separation
*friction, model=MC,stiffness_factor=0.02
0.3,0,0

*Contact Pair,interaction=pen,discretisation=element mortar
BodenMonopileAussenSurface,MonopileAussenSurface
BodenMonopileInnenSurface,MonopileInnenSurface
BodenPfahlfussSurface,MonopileUntenSurface
*contact options, name=pen, clearance=1d-6

The Initial conditions for stress and state variables are defined in user subroutines (see the files shipped with this document). The void ratio used for the calculation of the density is given in addition. This value does not necessary have to coincide with the value given in the user Initial state file. A hydrostatic pore water pressure is defined for the entire soil mass.

**---------------------------------- Initial conditions -----------------------------
** 
*Initial conditions, type=stress, user

*Initial conditions, type=state variables, user
Geometrie_Bodenkoerper_Aussen4
Geometrie_Bodenkoerper_Aussen5
Geometrie_Bodenkoerper_Innen4

*Initial conditions, type=void ratio, default
BodenInstance.BodenAlle,0.7524d0

*Initial conditions, type=pore water pressure, default
BodenInstance.BodenAlle, 0.0d0, 0.0d0, 50.0d0, 500.0d0

For the analysis, different time distributions of boundary and loading conditions have to be defined. This is done using the following Amplitude definitions:

*Amplitude, Name = LoadingRamp , Type = RAMP
0.0, 0.0, 1.0d0, 1.0d0
*Amplitude, Name = Sinus1Hz , Type = PERIODIC
1,0.0,0.0,6.28
0,1

The Amplitude \(LoadingRamp\) defines a linear increase of a quantity beginning with the relative value 0 at the time \(t_1=0\) and the relative value 1 at the time \(t_2=1\). To apply the cyclic loading, a sinusoidal Amplitude with a frequency of 1 Hz is defined in addition.

Steps and loading definitions

The first step is defined below. The analysis type of the step is a static step. The keyword Body force imposes a gravitational force which is applied instantaneous (Instant). The element sets \(BodenInstance.BodenAlle\) and \(MonopileInstance.MonopileAlle\) are loaded by the gravity (Amplitude \(10\) m/s\(^2\), directed downwards with the normalized vector of the gravity \(\vec{\textbf{b}}=\{0,0,1\}\)).

All nodes of the pile and the soil are constraint in 1-, 2- and 3-direction. Therefore, no displacement is possible for any Node in the model. The pore water pressure is prescribed hydrostatically using a user subroutine (see the files shipped with this document). The error controls are modified and only the local convergence controls are set active.

The output is written in the vtk format (suitable for ParaView) and is of ASCII type. The Node output includes the displacement (U) and pore water pressure (PW) of the nodes. The element output includes the stress (S) as well as the void ratio (Void_ratio) and the contact output variables (Contact). The contact output contains contact stresses as well as contact distances for each contact Node. In addition, a print output is defined. The displacement and the pore water pressure is printed for several nodes of the model.

** STEP: Eigengewicht_Boden
** 

*Step, name=step1,inc=1
*static
1,1,1d-4,1

** LOADS


*Body force, Instant
BodenInstance.BodenAlle, GRAV, 10., 0., 0., 1.

*Body force, Instant
MonopileInstance.MonopileAlle, GRAV, 10., 0., 0., 1.

*Boundary
MonopileInstance.MonopileAlle, u1,0.0d0
MonopileInstance.MonopileAlle, u2,0.0d0
MonopileInstance.MonopileAlle, u3,0.0d0
BodenInstance.BodenAlle, u1,0.0d0
BodenInstance.BodenAlle, u2,0.0d0
BodenInstance.BodenAlle, u3,0.0d0
*Uboundary
BodenInstance.BodenAlle, pw,1.0d0

*Controls, global, deactivate
*Controls, u, activate

*output, field, vtk, ASCII
*Node output, nset = BodenInstance.BodenAlle
U,pw
*element output, elset = BodenInstance.BodenAlle
S, Contact, void_ratio
*output, print
*Node output, nset = Knoten_Monopile_Aussen_Oben_Links
U
*Node output, nset = Knoten_Monopile_Aussen_Oben_Links
U
*Node output, nset = Monopile_Symmetrie_Vorne
U, coords
*Node output, nset = PWD_rechts_oben
U, coords, pw
*Node output, nset = PWD_links_oben
U, coords, pw
*Node output, nset = PWD_rechts_unten
U, coords, pw
*Node output, nset = PWD_links_unten
U, coords, pw
*End STEP

In the second step the correct boundary conditions of the model are established. The back-side of the soil is constraint in the two horizontal directions. The bottom is constraint in the vertical direction. The symmetry axis of both parts of the model is constraint in the y-direction (see Figure 1)

A vertical loading is applied to the monopile head. The left and the right top node of the pile are gradually loaded by 500 kN over the course of the step. An additional surface pressure on the top of the model is applied. The output remains identical to the first step.

** 
*Step, name=step2,inc=100
*static
0.5,1,1d-4,1

** LOADS

*Body force, Instant
BodenInstance.BodenAlle, GRAV, 10., 0., 0., 1.

*Body force, Instant
MonopileInstance.MonopileAlle, GRAV, 10., 0., 0., 1.

** BOUNDARY CONDITIONS
*Boundary
Boden_Hinten,u1,0.0d0
Boden_Hinten,u2,0.0d0
Boden_Unten_S5,u3,0.0d0
Boden_Symmetrie_Vorne_Links, u2,0.0d0
Boden_Symmetrie_Vorne_Mitte, u2,0.0d0
Monopile_Symmetrie_Vorne,u2,0.0d0
Boden_Symmetrie_Vorne_Rechts, u2,0.0d0
*Uboundary
BodenInstance.BodenAlle, pw,1.0d0

** LOADS


*Cload,Amplitude=LoadingRamp
Knoten_Monopile_Aussen_Oben_Rechts, 3, 500
*Cload,Amplitude=LoadingRamp
Knoten_Monopile_Aussen_Oben_Links, 3, 500

*Dload,Instant
_BodenObenS1Surface_S2,P2,-3d0
*Dload ,Instant
_BodenObenS1Surface_S3,P3,-3d0


*Controls, global, deactivate
*Controls, u, modify
0.05,0.05,0.08,1e-7,1e-7, 3

*output, field, vtk, ASCII
*Node output, nset = BodenInstance.BodenAlle
U,pw
*element output, elset = BodenInstance.BodenAlle
S, Contact, void_ratio
*output, print
*Node output, nset = Knoten_Monopile_Aussen_Oben_Links
U
*Node output, nset = Knoten_Monopile_Aussen_Oben_Links
U
*Node output, nset = Monopile_Symmetrie_Vorne
U, coords
*Node output, nset = PWD_rechts_oben
U, coords, pw
*Node output, nset = PWD_links_oben
U, coords, pw
*Node output, nset = PWD_rechts_unten
U, coords, pw
*Node output, nset = PWD_links_unten
U, coords, pw
*End STEP

In the third step the mean value of horizontal loading is applied. The left and the right top node of the pile are gradually loaded by 50 kN in horizontal direction and a moment (represented by a vertical force pair) of \(600\cdot2\cdot2 = 2400\) kNm over the course of the step. The other definitions remain identical to the previous step.

** 
*Step, name=step3,inc=100
*static
0.05,1.0d0,1d-4,0.05
** 
** LOADS

*Body force, Instant
BodenInstance.BodenAlle, GRAV, 10., 0., 0., 1.

*Body force, Instant
MonopileInstance.MonopileAlle, GRAV, 10., 0., 0., 1.

** BOUNDARY CONDITIONS
*Boundary
Boden_Hinten,u1,0.0d0
Boden_Hinten,u2,0.0d0
Boden_Unten_S5,u3,0.0d0
Boden_Symmetrie_Vorne_Links, u2,0.0d0
Boden_Symmetrie_Vorne_Mitte, u2,0.0d0
Monopile_Symmetrie_Vorne,u2,0.0d0
Boden_Symmetrie_Vorne_Rechts, u2,0.0d0

*Uboundary
BodenInstance.BodenAlle, pw,1.0d0

** 
** LOADS
** 
*cload,Instant
Knoten_Monopile_Aussen_Oben_Rechts, 3, 500
*cload,Instant
Knoten_Monopile_Aussen_Oben_Links, 3, 500

*Cload,Amplitude=LoadingRamp
Knoten_Monopile_Aussen_Oben_Rechts, 1, -50

*Cload,Amplitude=LoadingRamp
Knoten_Monopile_Aussen_Oben_Links, 1, -50

*Cload,Amplitude=LoadingRamp
Knoten_Monopile_Aussen_Oben_Rechts, 3, 600

*Cload,Amplitude=LoadingRamp
Knoten_Monopile_Aussen_Oben_Links, 3, -600

*Dload,Instant
_BodenObenS1Surface_S2,P2,-3d0
*Dload ,Instant
_BodenObenS1Surface_S3,P3,-3d0
**
*Controls, global, deactivate
*Controls, u, modify
0.04,0.04,0.04,1e-7,1e-7,3
*Controls, pw, deactivate
**
*output, field, vtk, ASCII
*Node output, nset = BodenInstance.BodenAlle
U,pw,V,A
*element output, elset = BodenInstance.BodenAlle
S, Contact, void_ratio,contact_diagnostic
*output, print
*Node output, nset = Knoten_Monopile_Aussen_Oben_Links
U
*Node output, nset = Monopile_Symmetrie_Vorne
U, coords
*Node output, nset = PWD_rechts_oben
U, coords, pw
*Node output, nset = PWD_links_oben
U, coords, pw
*Node output, nset = PWD_rechts_unten
U, coords, pw
*Node output, nset = PWD_links_unten
U, coords, pw
*End STEP

The fourth and fifth step are identical (expect of the step name). The horizontal sinusoidal load is applied, which also has a component in horizontal direction and a moment component. Note that for this example no effects from excess pore water pressure and consolidation are accounted for because the simulation is faster. This is defined by setting the step to static and constraining the pore water pressure in the entire model. If one would want to consider these effects, the type of analysis has to be changed to a transient calculation, including pore water pressure change and water flow (consolidation). In addition, the boundary condition for the pore water pressure would have to be deleted. The boundary conditions for Boden_Oben_S1 and Boden_hinten would in this case allow for drainage at the top and the back of the model. In the current definition as static step they are obsolete.

** 
*Step, name=step4,inc=1000, no cut back
*static
0.05,1.0d0,1d-4,0.05
** 
** LOADS

*Body force, Instant
BodenInstance.BodenAlle, GRAV, 10., 0., 0., 1.

*Body force, Instant
MonopileInstance.MonopileAlle, GRAV, 10., 0., 0., 1.

** BOUNDARY CONDITIONS
*Boundary
Boden_Hinten,u1,0.0d0
Boden_Hinten,u2,0.0d0
Boden_Unten_S5,u3,0.0d0
Boden_Symmetrie_Vorne_Links, u2,0.0d0
Boden_Symmetrie_Vorne_Mitte, u2,0.0d0
Monopile_Symmetrie_Vorne,u2,0.0d0
Boden_Symmetrie_Vorne_Rechts, u2,0.0d0
*boundary
Boden_Oben_S1, pw,0.0d0
*uboundary
Boden_hinten, pw,1.0d0
Boden_Unten_S5, pw,1.0d0
** 
** LOADS
** 
*cload,Instant
Knoten_Monopile_Aussen_Oben_Rechts, 3, 500
*cload,Instant
Knoten_Monopile_Aussen_Oben_Links, 3, 500
*Cload,Instant
Knoten_Monopile_Aussen_Oben_Rechts, 1, -50

*Cload,Instant
Knoten_Monopile_Aussen_Oben_Links, 1, -50

*Cload,Instant
Knoten_Monopile_Aussen_Oben_Rechts, 3, 600

*Cload,Instant
Knoten_Monopile_Aussen_Oben_Links, 3, -600

*Cload, Amplitude=Sinus1Hz
Knoten_Monopile_Aussen_Oben_Rechts, 3, 600

*Cload, Amplitude=Sinus1Hz
Knoten_Monopile_Aussen_Oben_Links, 3, -600

*Cload, Amplitude=Sinus1Hz
Knoten_Monopile_Aussen_Oben_Rechts, 1, -50

*Cload, Amplitude=Sinus1Hz
Knoten_Monopile_Aussen_Oben_Links, 1, -50
*Dload,Instant
_BodenObenS1Surface_S2,P2,-3d0
*Dload ,Instant
_BodenObenS1Surface_S3,P3,-3d0
*Uboundary
BodenInstance.BodenAlle, pw,1.0d0

** 
**
*Controls, global, deactivate
*Controls, u, modify
0.04,0.04,0.04,1e-7,1e-7,3
*Controls, pw, deactivate
**
*output, field, vtk, ASCII
*frequency=5
*Node output, nset = BodenInstance.BodenAlle
U,pw,V,A
*element output, elset = BodenInstance.BodenAlle
S, Contact, void_ratio
*output, print
*Node output, nset = Knoten_Monopile_Aussen_Oben_Links
U
*Node output, nset = Monopile_Symmetrie_Vorne
U, coords
*Node output, nset = PWD_rechts_oben
U, coords, pw
*Node output, nset = PWD_links_oben
U, coords, pw
*Node output, nset = PWD_rechts_unten
U, coords, pw
*Node output, nset = PWD_links_unten
U, coords, pw
*End STEP

Lastly, the HCA step is defined in step 6 simulating \(10^6\) further cycles. Only the mean value of load is applied in this step. The strain Amplitude was automatically calculated at the end of step 5. Some HCA-specific output variables are requested.

** 
*Step, name=step6,inc=100000
*static
1,1d6,1d-4,1d4
** 
** LOADS

*Body force, Instant
BodenInstance.BodenAlle, GRAV, 10., 0., 0., 1.

*Body force, Instant
MonopileInstance.MonopileAlle, GRAV, 10., 0., 0., 1.

** BOUNDARY CONDITIONS
*Boundary
Boden_Hinten,u1,0.0d0
Boden_Hinten,u2,0.0d0
Boden_Unten_S5,u3,0.0d0
Boden_Symmetrie_Vorne_Links, u2,0.0d0
Boden_Symmetrie_Vorne_Mitte, u2,0.0d0
Monopile_Symmetrie_Vorne,u2,0.0d0
Boden_Symmetrie_Vorne_Rechts, u2,0.0d0
*boundary
Boden_Oben_S1, pw,0.0d0
*uboundary
Boden_hinten, pw,1.0d0
Boden_Unten_S5, pw,1.0d0
** 
** LOADS
** 
*cload,Instant
Knoten_Monopile_Aussen_Oben_Rechts, 3, 500
*cload,Instant
Knoten_Monopile_Aussen_Oben_Links, 3, 500

*Cload,Instant
Knoten_Monopile_Aussen_Oben_Rechts, 1, -50

*Cload,Instant
Knoten_Monopile_Aussen_Oben_Links, 1, -50

*Cload,Instant
Knoten_Monopile_Aussen_Oben_Rechts, 3, 600

*Cload,Instant
Knoten_Monopile_Aussen_Oben_Links, 3, -600
*Dload,Instant
_BodenObenS1Surface_S2,P2,-3d0
*Dload ,Instant
_BodenObenS1Surface_S3,P3,-3d0
*Uboundary
BodenInstance.BodenAlle, pw,1.0d0
** 

**
*Controls, global, deactivate
*Controls, u, modify
0.12,0.12,0.08,1e-7,1e-7,3
**
*output, field, vtk, ASCII
*frequency=5
*Node output, nset = BodenInstance.BodenAlle
U,pw
*element output, elset = BodenInstance.BodenAlle
S, Contact, void_ratio, Strain_ampl, Strain_acc, cyclic_history, fe, fampl, fy, fp, 
*output, print
*Node output, nset = Knoten_Monopile_Aussen_Oben_Links
U
*Node output, nset = Monopile_Symmetrie_Vorne
U, coords
*Node output, nset = PWD_rechts_oben
U, coords, pw
*Node output, nset = PWD_links_oben
U, coords, pw
*Node output, nset = PWD_rechts_unten
U, coords, pw
*Node output, nset = PWD_links_unten
U, coords, pw
*End STEP

The calculation is started by calling numgeo over the command line, specifying the name of the input file step (without ending), confirming by pressing enter, specifying the number of CPUs (depending on the hardware, 4 CPUs are appropriated here) and pressing enter again.

Results of the simulation

After the calculation is finished (the command window is ready for a new command), open the .sta file first and check that the simulation was successful by identifying that both steps have been completed successfully. If the calculation immediately stops, check the error message in the .log file and if any error files were generated in the calculation folder.

To see the output of the calculation, start ParaView and open the pvd file (in the right upper options bar: "File" \(\rightarrow\) "Open...").

The field of the strain amplitude and the final deformed configuration after \(10^6\) cycles (5-times enhanced) is given in Figure 1. The monopile pile head rotation is depicted in Figure 2 using the python script shipped with this file.

figure 1 Figure 1. Field of strain amplitude and pattern of deformations at 1 million cycles (5-times enhanced)

figure 2 Figure 2. Pile head rotation vs. time or number of load cycles


  1. C. Taylor and P. Hood. A numerical solution of the Navier-Stokes equations using the finite element technique. Computers and Fluids, 1(1):73–100, 1973. URL: https://www.sciencedirect.com/science/article/pii/0045793073900273, doi:10.1016/0045-7930(73)90027-3