Theory manual¶
This document presents several aspects of the theoretical background for Nemoh and Capytaine. We refer also to [Del87] [Del89] [Del93] [BD15] and [AD18].
Warning
This document is a work in progress. It is incomplete and might contain errors.
Linear boundary value problem¶
Hypotheses¶
The fluid is inviscid.
The fluid is incompressible: \(\nabla \cdot u = 0\) with \(u\) the flow velocity.
The flow is irrotational: \(\nabla \times u = 0\).
The wave amplitude is small with respect to the wavelength.
The amplitude of the body motion is small with respect to its dimension.
The sea bottom is flat. The water depth is denoted \(h\).
Mathematical problem¶
The mass conservation equation can be rewritten as the Laplace equation
where \(\phi\) is the velocity potential defined as \(u = \nabla \phi\).
Since the problem is linear, we look for a solution in the frequency domain:
The partial differential equation (14) is completed with the following boundary conditions:
linearized free surface boundary condition:
no velocity boundary condition at the (flat) sea bottom:
a given velocity \(u\) on the floating body surface \(\Gamma\):
where \(n\) denotes the normal vector at the surface of the floating body.
The normal velocity on the floating body surface is the input of the problem. It depends on the type of problem:
- Radiation problem:
For the radiation problem, the normal velocity on the body surface corresponds to the motion of the body along one of its degrees of freedom. The resolution of the Laplace problem allows to derive the added mass and the radiation damping associated with this degree of freedom (see also Post-processing).
- Diffraction problem:
For the diffraction problem, the velocity on the floating body is given by the velocity of Airy’s wave field. Once the problem has been solved, the linear Froude-Krylov force is computed by the integration of the pressure (\(p = i \rho \omega \Phi\)) on the floating body (see also Post-processing).
The incoming Airy’s wave fields is given by
(19)¶\[\Phi_0 = - i \frac{g}{\omega} \frac{\cosh (k (z+h))}{\cosh (k h)} e^{i k (x \cos \beta + y \sin \beta)}\]in finite depth, where the wave number \(k\) is defined by the dispersion relation \(\omega^2 = k g \tanh (k h)\), and by
(20)¶\[\Phi_0 = - i \frac{g}{\omega} e^{k z} e^{i k (x \cos \beta + y \sin \beta)}\]in infinite depth, where the wave number \(k\) is defined by \(\omega^2 = k g\).
In the above equations, \(\beta\) is the angle of the incoming wave. The angle \(\beta = 0\) corresponds to waves propagating in the \(x\) direction from \(x=-\infty\) to \(x=+\infty\). The angle \(\beta = \pi/2\) corresponds to waves propagating in the \(y\) direction from \(y=-\infty\) to \(y=+\infty\).
Integral problem¶
The partial differential equation can be rewritten as a boundary integral problem. Let us introduce the Green function \(G(\xi, \cdot)\), which is solution of the partial differential equation:
where the \(\nabla\) is meant as the derivative with respect to \(x\).
The above equation is associated with the boundary condition (16) and (17), where \(\xi\) is a given point in the domain and \(\delta\) is the Dirac distribution.
With the help of this Green function \(G\), the potential of the surface of the floating body \(\Gamma\) can be rewritten as a function of a source distribution \(\sigma\):
for all point \(x\) in the fluid or on the hull of the floating body \(\Gamma\).
The integral on the other boundaries of the domain is zero due to the properties of the Green function.
The differentiation of (22) differs depending whether \(x\) is in the bulk of the fluid or on the hull.
On the hull, one has [Del87]:
where \(x\) is a point on \(\Gamma\) and \(n\) is the vector normal to \(\Gamma\) in \(x\). For any vector \(t\) tangential to \(\Gamma\) at \(x\), one has
Finally, for \(x\) in the bulk of the fluid, one has
Note
Dimensional analysis:
\(\Phi\) is in m²·s¯¹.
\(\sigma\) is in m·s¯¹.
\(G\) is in m¯¹.
TODO: discuss direct method as in [AN24]
Discretization¶
The equations (22) and (23) can be discretized using a collocation method. Considering a mesh of the surface of the floating body \(\Gamma = \cup_i \Gamma_i\):
where for all \(i\), \(x_i\) is the center of the face \(\Gamma_i\) and \(n_i\) is its normal vector. Each element of the matrices \(S\) and \(K\) can be seen as the interaction between two faces of the mesh.
Note
\(K\) should not be confused with the similar matrix \(D\) defined as:
Note that the derivation of \(G\) is done with respect to a different variable.
The matrix \(D\) is used in the direct boundary integral equation, as e.g. in HAMS [Liu19]. In the mathematical literature, \(D\) is also referred to as the double layer operator and \(K\) as the adjoint double layer operator.
The matrices \(S\) and \(K\) relates the vectors \(\Phi\), \(u\) and \(\sigma\) through the following approximations of (22) and (23):
The resolution of the discrete problem with Nemoh consists of two main steps:
The evaluation of the coefficients of the complex-valued matrices \(S\) and \(K\)
The resolution of the complex-valued linear problem \(K \sigma = u\).
Once \(\sigma\) has been computed, \(\Phi\) can be easily deduced. Then other magnitudes such as the Froude-Krylov forces or the added mass can be derived.
flowchart TD;
h[Water depth] --> gf(Assembling matrices);
ω[Wave frequency ω] --> gf(Assembling matrices);
m[Mesh] --> gf;
gf -- K matrix --> ls(Linear solver);
un[Normal velocity on hull] --> ls;
gf -- S matrix --> mvp(Matrix vector product);
ls -- sources distribution σ --> mvp;
mvp -- potential distribution Φ --> int("Integrate on mesh");
m --> int;
int --> f["Hydrodynamic forces\n(aka added mass and radiation damping)"]
classDef input fill:#DDDDDD,color:#333333,stroke:#444444
classDef step fill:#88BBBB,color:#003333,stroke:#226666
classDef output fill:#FFE3AA,color:#553900,stroke:#AA8439
class ω,m,un,h input
class gf,ls,mvp,int step
class f output
Fig. 2 A simplified flowchart of the internals of Capytaine solver¶
Problem with forward speed¶
We refer to [D22] for a detailed description of the theory behind the approximate forward speed model used in Capytaine.
It relies on the following hypotheses:
The magnitude \(U\) of the forward speed is small.
The body is thin enough, such that the flow around the body assuming a rigid free surface (also called double-body flow) can be approximated by \(\overrightarrow{u} = (-U, 0, 0)\) in the reference frame of the body.
Then, the following modification are done to the solver to take forward speed into account:
Doppler shift: The frequency used in the computation is replaced by the encounter frequency
where \(k\) is the wavenumber and \(\beta\) is the wave direction.
For this purpose, the wave_direction parameter can be passed to radiation problem.
Normal velocity on hull: The boundary condition on the body radiating with a dof defined by the displacement \(\delta\!r(x, y, z)\) reads
The above relationship has currently only been implemented for the six dofs of single rigid bodies, as follows
Dof |
\(\delta \! r\) |
\(\frac{\partial \delta\! r}{\partial x}\) |
|---|---|---|
Surge |
\((1, 0, 0)\) |
\((0, 0, 0)\) |
Sway |
\((0, 1, 0)\) |
\((0, 0, 0)\) |
Heave |
\((0, 0, 1)\) |
\((0, 0, 0)\) |
Roll |
\((0, -z, y)\) |
\((0, 0, 0)\) |
Pitch |
\((z, 0, -x)\) |
\((0, 0, -1)\) |
Yaw |
\((-y, x, 0)\) |
\((0, 1, 0)\) |
In other words, the supplementary term is zero except for pitch and yaw.
Gradient of potential in pressure: The equation relating the potential to the pressure is updated as follows
Similarly the relationship between the potential and the free surface elevation reads
The computation of \(\frac{\partial \phi}{\partial x}\) makes the problems with forward speed typically 50% slower that problems without.
The overall workflow with forward speed thus looks as follows.
graph TD
h[Water depth] --> gf(Assembling matrices);
omega[Wave frequency ω] --> doppler(Doppler shift);
fs[Forward speed U] --> doppler(Doppler shift);
fs --> un;
doppler -- Encounter frequency --> gf(Assembling matrices)
m[Mesh] --> gf;
gf -- K matrix --> ls(Linear solver);
dof[Degree of freedom] --> un(Normal velocity on hull);
un -- RHS of linear problem --> ls;
gf -- S matrix --> mvp(Matrix vector product);
ls -- sources distribution σ --> mvp;
ls -- sources distribution σ --> grad;
gf -- extended K matrix --> grad;
mvp -- potential distribution Φ --> int("Integrate pressure on mesh");
grad(Matrix vector product) -- gradient of Φ --> int;
m --> int;
fs --> int;
int --> f["Hydrodynamic forces"]
classDef input fill:#DDDDDD,color:#333333,stroke:#444444
classDef step fill:#88BBBB,color:#003333,stroke:#226666
classDef newstep fill:#FFAAAA,color:#550000,stroke:#113939
classDef output fill:#FFE3AA,color:#553900,stroke:#AA8439
class fs,omega,m,h,dof input
class doppler,un,grad newstep
class gf,ls,mvp,int step
class f output
Fig. 3 A simplified flowchart of the internals of Capytaine solver with forward speed, where red boxes are the supplementary steps introduced by forward speed.¶
Post-processing¶
Forces on body surfaces¶
Forces acting on body surfaces are computed by integration of the pressure field.
where \(p = i \omega \rho \Phi\) stands for the complex-valued pressure fields in frequency-domain, \(n\) is the normal vector on the hull \(\Gamma\) (oriented towards the fluid in Capytaine, see Conventions and differences to other codes) and \(\delta\!r_j\) is the local displacement of the hull of the degree of freedom \(j\).
For a single rigid body, the degrees of freedom reads:
Dof \(j\) |
Local hull displacement |
|---|---|
Surge |
\(\delta\!r_j(x) = (1, 0, 0)\) |
Sway |
\(\delta\!r_j(x) = (0, 1, 0)\) |
Heave |
\(\delta\!r_j(x) = (0, 0, 1)\) |
Roll |
\(\delta\!r_j(x) = (1, 0, 0) \times (x-x_0, y-y_0, z-z_0)\) |
Pitch |
\(\delta\!r_j(x) = (0, 1, 0) \times (x-x_0, y-y_0, z-z_0)\) |
Yaw |
\(\delta\!r_j(x) = (0, 0, 1) \times (x-x_0, y-y_0, z-z_0)\) |
where \((x_0, y_0, z_0)\) is the rotation center and \(\times\) denotes the cross product.
The potential field can be decomposed into three contributions, and so does the resulting force:
The Froude-Krylov forces \(F_{FK}\), from the integration of the incident wave field pressure (incoming plane waves). In Capytaine, the incident wave pressure can be retrieved with the
airy_wave_pressure()function.The diffraction forces \(F_{D}\), from the integration of the diffracted wave field (all bodies held fixed).
The radiation forces \(F_{R}\), which is itself a linear combination of the forces exerted by the fluid on the body in response to a motion of each degree of freedom.
The component \(j\) of the radiation force \(F_{R}\) is further rewritten as
where \(A_{jk}\) is the added mass matrix, \(B_{jk}\) is the radiation damping matrix and \(X_k\) is the amplitude of the motion of the body along the degree of freedom \(k\).
In other words, one has
and
where \(\Phi_k\) is the potential field computed with the normal velocity on the hull \(\frac{\partial \Phi_k}{\partial n} = -i \omega \delta \! r_k \cdot n\).
In Capytaine’s wording, the degree of freedom \(k\) defining the normal velocity on the hull is called radiating_dof, while the degree of freedom \(j\) used in the integration of the force is the influenced_dof.
Note
From Green second identity
one has, when using the definition of the normal velocity of the radiation problem above,
from which we can deduce the symmetry of the added mass matrix and the radiation dampings matrix.
Note
As an alternative to \(\frac{\partial \Phi_k}{\partial n} = -i \omega \delta \! r_k \cdot n\), some software such as the version 1 of Capytaine use \(\frac{\partial \tilde \Phi_k}{\partial n} = \delta \! r_k \cdot n\), that is \(\tilde \Phi_k = \frac{\Phi_k}{-i \omega}\).
It leads to the following definition of the added mass and radiation damping
and
This form is convenient since the all the \(\omega\) in the expression of the added mass disappears, which make it possible to compute the value of the added mass at frequency such as zero or infinity.
However, the implementation of \(\tilde \Phi\) in version 1 of Capytaine was not consistent with the use of \(\Phi\) for diffraction problem and it was easy to forget the missing \(-i\omega\) for some post-processing of \(\tilde \Phi\) for radiation problems.
In version 2.0 of Capytaine, \(\Phi\) is used everywhere instead of \(\tilde \Phi\). Since version 2.1, another method has been implemented to take into account the cancelling of the \(\omega\) in the expression of the added mass allowing to compute the added mass at zero and infinite frequency.
Dynamic coupling and impedance¶
Consider a body or a system of bodies. The general linear equation of motion can be expressed in time domain as
and in frequency domain, with the assumed time dependence \(x(t) = \mathrm{Re} \left( X e^{-i \omega t} \right)\),
where \(M_{jk}\) is the inertia matrix, accounting for the mass distribution, \(C_{jk}\) is the mechanical damping matrix, \(K_{jk}\) is the stiffness matrix which comprises mechanical and hydrostatic effects, and \(F_j\) are generic external forces.
Note
The hydrostatic contribution to matrix \(K_{jk}\) accounts for a variation of hydrostatic force in direction \(j\) due to a unit motion in direction \(k\). It is a geometric property of the body.
As seen above, forces \(F_j\) can be decomposed as
The full system becomes
that is
where \(H\) denotes the following transfer function matrix
and \(F_{ex}\) denotes the excitation force.
The oscillation amplitude is obtained by solving the complex-valued linear system.
Note
Matrices \(A_{jk}\) and \(B_{jk}\) depend on \(\omega\), and so does \(H_{jk}\) and \(X_k\).
Free surface elevation¶
The potential at the reference surface \(z = 0\) can be connected to the free surface elevation by the dynamic condition
which, in frequency domain, is
For a fully coupled problem (bodies free to oscillate, i.e. diffraction and radiation combined), the free surface elevation can be computed as
Far-field coefficients¶
Far from the floating body, the potential of an infinite depth problem can be written as
where \(\rho(x)\) and \(\theta(x)\) are the cylindrical coordinates of \(x\) and \(H\) is the so-called Kochin function which can be computed as
Proof. Let us first note, following [Del87] (p.79), that for large \(\rho(x)\):
Then the asymptotic behavior of the infinite depth Green function (see Green function in infinite depth) reads
which can be rewritten as
Incorporating into the source representation (22), we have
Capytaine computes the Kochin function in finite depth as
Note that other work might define the Kochin function slightly differently, with a different normalization.
Mean drift force¶
Far field formulation:
The expression of the mean drift force for the degrees of freedom Surge and Sway is the following:
where \(\beta\) is the wave direction, \(H\) the Kochin function, \(k\) the wavenumber, \(h\) the water depth and \(k_0\) the deep water wavenumber.
Note
The coefficient in front of the integral above can be very large at high frequency and can make the result very sensitive to small numerical inaccuracies in the Kochin function. Unfortunately, numerical incurracies can be common at high frequency, that is when the wavelength is small with respect to the mesh resolution. In other words, mesh convergence should be checked carefully for the mean drift force at high frequency.
Here is the expression for the Yaw moment:
The Kochin function has to be rebuild from the contributions of all the radiation problems and the diffraction problem:
where \(X_k\) is the motion RAO of the body corresponding to the degree of freedom \(k\), \(H_{R_k}\) is the Kochin function associated with the radiated potential of degree of freedom \(k\) and \(H_{D}\) is the Kochin function associated with the diffracted potential.