NEMOH v3.0 - User Manual

R Kurnia, Guillaume Ducrozet

► To cite this version:

R Kurnia, Guillaume Ducrozet. NEMOH v3.0 - User Manual. 2022. hal-05533186

HAL Id: hal-05533186

https://hal.science/hal-05533186v1

Submitted on 2 Mar 2026

HAL is a multi-disciplinary open access
archive for the deposit and dissemination of sci-
entific research documents, whether they are pub-
lished or not. The documents may come from
teaching and research institutions in France or
abroad, or from public or private research centers.

L'archive ouverte pluridisciplinaire HAL, est
destinée au dépôt et à la diffusion de documents
scientifiques de niveau recherche, publiés ou non,
émanant des établissements d'enseignement et de
recherche français ou étrangers, des laboratoires
publics ou privés.

<figure><img src="image_1.png" /></figure>

Distributed under a Creative Commons CC BY 4.0 - Attribution - International License
NEMOH v3.0
User Manual

R. Kurnia and G. Ducrozet

December 8, 2022
# Preamble

NEMOH is a Boundary Element Methods (BEM) code dedicated to the computation of wave loads on offshore structures (added mass, radiation damping, diffraction forces, etc.). It has been developed by researchers at Ecole Centrale de Nantes for 30 years. Since its first release in January 2014, NEMOH, as the world's first open-source BEM code, has been widely used by many researchers, and engineers. Typical use is the estimation of the dynamic response of floating structures or performance assessment of wave energy converters.

Now together with this manual, we gladly release NEMOH v3.0 which includes all recent developments in the first-order module and a new extension module for computing quadratic transfer functions (QTFs). This release will be, to our knowledge, the sole and only open-source BEM software that provides the second-order module.

We sincerely hope that the use of this software, just as the design of it has been, will be fascinating, and challenging for academicians and practitioners in the ocean engineering community. We hope to receive comments and suggestions for further improvement and extension of the software that can be profitable for the community.
# Contents

<table><tr><td>1</td><td>Introduction</td><td>3</td></tr><tr><td>2</td><td>Description of NEMOH v3.0</td><td>5</td></tr><tr><td>2.1</td><td>Modelling and Numerical aspects</td><td>5</td></tr><tr><td>2.2</td><td>Units</td><td>9</td></tr><tr><td>2.3</td><td>Software features and capabilities</td><td>9</td></tr><tr><td>2.3.1</td><td>Mesh Preprocessor</td><td>10</td></tr><tr><td>2.3.2</td><td>NEMOH1: 1st-order solver</td><td>10</td></tr><tr><td>2.3.3</td><td>NEMOH2: 2nd-order QTF module</td><td>11</td></tr><tr><td>3</td><td>Getting-started</td><td>12</td></tr><tr><td>3.1</td><td>Executable files</td><td>12</td></tr><tr><td>3.2</td><td>Installation</td><td>12</td></tr><tr><td>3.2.1</td><td>Windows platform</td><td>12</td></tr><tr><td>3.2.2</td><td>Linux platform</td><td>12</td></tr><tr><td>3.3</td><td>Running</td><td>13</td></tr><tr><td>3.4</td><td>Input/Output</td><td>14</td></tr><tr><td>3.4.1</td><td>User's input files</td><td>16</td></tr><tr><td>3.4.2</td><td>Output files</td><td>21</td></tr><tr><td>4</td><td>Supporting Matlab files</td><td>24</td></tr><tr><td>5</td><td>Test-cases</td><td>25</td></tr></table>
# 1 Introduction

This document is the Manual of NEMOH Software in version v3.0 Released on 2nd December 2022. It serves as a guide for using, installing and running the software.

NEMOH in its original version is an open-source potential flow boundary element solver for computing first-order hydrodynamic coefficients in the frequency domain. NEMOH v3.0 includes the treatment of irregular frequencies, has an extended module to post-process the first-order hydrodynamic results, and compute complete Quadratic Transfer Functions (QTFs).

The new developments/extensions in this NEMOH v3.0 are summarised as follows.

* GNU General Public v3 license is used instead of Apache.

* Newly written source codes for better readability and coding practice.

* Green function uses finer interpolation points.

* The influence coefficient is constructed by applying Gauss-quadrature integration over a panel.

* Irregular frequency removal method is available.

* Two new options of the linear system solvers, LU decomposition and GMRES iterative solver, are available for enhanced computational efficiency.

* Full difference- and sum-frequencies QTF module.

The present User Manual is organized as follows. Section 2 describes briefly the mathematical background and the capabilities of the software; it is advised to read this Section before continuing to the rest of the manual. Section 3 describes the installation procedure, how to run the codes, and includes a description of the input and output files. Section 4 describes supporting Matlab files such as a NEMOH wrapper, a mesh converter and the routines to post-process the test cases. Finally, Section 5 describes briefly test cases that will show the capabilities of the code and its use. For new NEMOH users, they can be used as the first elements for setting up a new configuration.
## LICENSE

Copyright ©2022 - LHEEA Lab., Ecole Centrale de Nantes, UMR CNRS 6598

NEMOH is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.

This software is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.

You should have received a copy of the GNU General Public License along with this software. If not, see http://www.gnu.org/licenses/.

The software has been written by G. Delhommeau, P. Guevel, J.C. Daubisse, J. Singh, A. Babarit, R. Kurnia
# 2 Description of NEMOH v3.0

## 2.1 Modelling and Numerical aspects

This section provides background information on NEMOH v3.0 with a focus on basic scientific ideas.

NEMOH v3.0 contains two main modules. First, NEMOH1 solves linear diffrac-
tion and radiation problems of wave-structure interaction using a 3-D boundary element
method in the frequency domain. Second, NEMOH2, an extended module for computing
difference- and sum- frequencies Quadratic Transfer Functions (QTFs) for fixed or float-
ing structures.

The following subsections describe the underlying modelling and numerical approaches
used in NEMOH.

### Notations

As sketched in Fig. 1, we consider fluid domain in the Cartesian coordinate $\boldsymbol{x} = (\vec{x}, z)$ with $\vec{x} = (x, y)$ the horizontal coordinates perpendicular to the $z$ axis in the opposite direction of gravity $\boldsymbol{g}$. Free-surface boundary $S_F$ is defined by the free surface elevation at time $t$, denoted as $\eta(\vec{x}, t)$ with respect to the mean water level at $z = 0$. The fluid velocity potential is denoted as $\Phi(\boldsymbol{x}, t)$ with $\boldsymbol{x}$ in fluid domain $V_\Omega$.

<figure><img src="image_2.png" /><figcaption>Figure 1: Sketch definition of the system</figcaption></figure>

The floating body has 6 degrees of freedom (DoF), $\xi = (\boldsymbol{X}, \boldsymbol{\theta})$ where the positions, $\boldsymbol{X} = (X, Y, Z)$ and the orientations, $\boldsymbol{\theta} = (\theta_1, \theta_2, \theta_3)$ are determined at the center of gravity (COG). Displacements of points at the hull are specified by a body of vector $\boldsymbol{r}$ with respect to the COG as $\boldsymbol{X} = \boldsymbol{X} + \boldsymbol{R}(\boldsymbol{r})$. $\boldsymbol{R}$ is a rotation operator where $\boldsymbol{R}(\boldsymbol{r}) \approx \boldsymbol{\theta} \times \boldsymbol{r}$. The velocity of the points at the hull is expressed as $\boldsymbol{\dot{X}}$.

On the body hull $S_B$, the wetted part is defined as a function $z = \zeta(\vec{x}, t)$. The normalized normal vector is defined as directed toward the fluid domain, $\boldsymbol{n} = -\boldsymbol{N}/|\boldsymbol{N}|$ with $\boldsymbol{N} = (-\nabla_2\zeta, 1)$ where $\nabla_2$ is the two-dimensional gradient in $\vec{x}$. Then the six-dimensional generalized normal vector is defined as $\boldsymbol{\nu} = (\boldsymbol{n}, \boldsymbol{r} \times \boldsymbol{n})^T$, with $()^T$ the matrix transpose operator.

### Modelling

NEMOH1, the first-order solver, is based on the following modelling principles:
* Potential flow theory for an inviscid and incompressible fluid in irrotational motion. The set of equations solved looks for unknowns satisfying free-surface conditions, impermeable bottom condition, diffraction and radiation conditions on the body hull and radiation wave condition in the far field.

* The harmonic fluid potential is defined as

$$ \Phi(\mathbf{x}, t) = \mathrm{Re} \{ \Phi^{(1)}(\mathbf{x}) e^{-i\omega t} \}. \qquad (1) $$

The total potential, $\Phi$, is the sum of the incident potential, the diffraction potential and the radiation potential. The incident potential is defined as, with $k$ and $\omega$ related with the dispersion relation, $\vec{k} = k(\cos \beta, \sin \beta)$, $\beta$ is wave direction and $a$ is a unit wave amplitude,

$$ \Phi_I^{(1)}(\mathbf{x}) = -i \frac{ag \cosh(k(D+z))}{\omega \cosh(kD)} e^{i\vec{k} \cdot \vec{x}}. \qquad (2) $$

The radiation potential is defined as $\Phi_R(\mathbf{x}, t) = \mathrm{Re} \{\dot{\xi}^{(1)}(t) \cdot \psi(\mathbf{x})\}$ where $\psi(\mathbf{x})$ is the normalized vector radiation potential.

* The three-dimensional linear potential flow problem around arbitrary body condition is reformulated in the Boundary Integral Equation (BIE) and transformed into the two-dimensional problem of the source distribution, $\sigma$, on the body surface, $S_B$, using Green's second identity and the appropriate Green function, $G(\mathbf{x}, \mathbf{x}')$.

* The Green function is based on Delhommeau's formulation and is available for finite and infinite water-depth, see [4].

* The source distribution depends on the considered boundary condition problem. For each frequency and wave direction, the diffraction source distribution, $\sigma_D(\mathbf{x})$, depends on the position of the panels while the radiation source distribution, $\sigma_{R_j}(\mathbf{x})$, depends on the position of the panels and the considered degree of freedom $j$.

* Then, the BIE for $\mathbf{x} \in S_B$, is expressed as, with flow points $\mathbf{x}$ and source points $\mathbf{x}'$,

$$ \frac{1}{2} \sigma_{D,R_j}(\mathbf{x}) - \frac{1}{4\pi} \int_{S_B} \partial_n G(\mathbf{x}, \mathbf{x}') \sigma_{D,R_j}(\mathbf{x}') dS' = \mathcal{N}_{D,R_j}(\mathbf{x}). \qquad (3) $$

where $\mathcal{N}(\mathbf{x})$ is the body normal condition. The diffraction normal condition is defined as $\mathcal{N}_D(\mathbf{x}) = -\partial_n \Phi_I^{(1)}(\mathbf{x})$, the normalized radiation condition, $\mathcal{N}_R(\mathbf{x}) = \partial_n \Phi_{R_j}(\mathbf{x})$, with $\Phi_{R_j}(\mathbf{x})$ is the vector component-$j$ of the normalized radiation potential $\psi(\mathbf{x})$, explicitly $\psi = (\Phi_{R_1}, \Phi_{R_2}, \dots, \Phi_{R_{N_{\mathrm{dof}}}})$.

* The diffraction potential, $\Phi_D^{(1)}$, the normalized radiation potential vector component-$j$, $\Phi_{R_j}$ and the corresponding velocities are then computed as follows, for the flow points in the fluid domain $\mathbf{x} \in S_B \cup V_{\Omega_F}$,

$$ \Phi_{D,R_j}^{(1)}(\mathbf{x}) = -\frac{1}{4\pi} \int_{S_B} G(\mathbf{x}, \mathbf{x}') \sigma_{D,R_j}(\mathbf{x}') dS' \qquad (4) $$

$$ \partial_x \Phi_{D,R_j}^{(1)}(\mathbf{x}) = \frac{1}{2} \sigma_{D,R_j}(\mathbf{x}) n \delta_{xx'} - \frac{1}{4\pi} \int_{S_B} \partial_x G(\mathbf{x}, \mathbf{x}') \sigma_{D,R_j}(\mathbf{x}') dS' \qquad (5) $$

where the Kronecker delta $\delta_{xx'} = 1$ for $\mathbf{x} = \mathbf{x}'$, and $\delta_{xx'} = 0$ otherwise.
* The hydrodynamic coefficients are then computed as follows, the excitation force is defined as

$$F_{exc}^{(1)} = \rho \iint_{S_B} -i\omega [\Phi_I^{(1)} + \Phi_D^{(1)}] \nu dS. \quad (6)$$

The added mass matrix and damping coefficient matrix components are computed as

$$M_{ij}^{a} = -\rho \iint_{S_B} \nu_i \mathrm{Re} \{\psi_{R_j}\} dS \quad (7)$$

$$B_{ij} = -\rho\omega \iint_{S_B} \nu_i \mathrm{Im} \{\psi_{R_j}\} dS. \quad (8)$$

* In post-processing, the radiation damping impulse response matrix function ($IRF(t)$), the infinite frequency added mass matrix ($[M^a](\infty)$), and the excitation force impulse response vector function ($IRF_{ex}(t)$) are provided. They are computed as,

$$\mathbf{IRF}(t) \approx \frac{2}{\pi} \int_{0}^{\omega_{max}} [\mathbf{B}](\omega) \cos(\omega t) d\omega,$$

$$[M^a](\infty) \approx \frac{1}{N_\omega} \sum_{i=1}^{N_\omega} [M^a](\omega_i) + \int_{0}^{t_{max}} \mathbf{IRF}(t) \sin(\omega_i t) dt$$

$$\mathbf{IRF}_{exc}(t) \approx \frac{1}{2\pi} \int_{-\omega_{max}}^{\omega_{max}} \mathbf{F}_{exc}(\omega) e^{-i\omega t} d\omega.$$

where $F_{exc}(-\omega) = F_{exc}^*(\omega)$. Note that $\omega_{max}$ is a user-specified input, for better accuracy of $IRF(t)$ make sure that $[B](\omega_{max})$ has reached an asymptotic value.

* Response Amplitude Operators (RAO) are obtained by solving the following equation of motion

$$[-[M + M^a(\omega)]\omega^2 - i\omega[B(\omega) + B_{add}] + [K_h + K_M]] \xi(\omega) = F_{exc}(\omega) \quad (9)$$

where $[B_{add}]$ and $[K_M]$ are user-specified additional damping and stiffness matrices.

NEMOH2, the second-order QTF module, is based on the following principles

* The second-order loads are composed of the quadratic part and the potential part, the detailed formulation is given in [10, 11].

* The quadratic part is based on the near-field method [3].

* The potential part is based on the indirect method [3, 8].

## Numerical Methods

NEMOH1 uses the following numerical approach:

* The BIE, Eq. (3), is discretised using the constant panel method with quadrilateral mesh. This leads to a linear system with the influence coefficients matrix. The mesh is user-specified with the normal direction towards fluid.
* Numerical implementation of the Green function is described in [1].

* Free-surface Green function integrands are pre-calculated with the discretized $\omega^2 r/g \in [0, 100]$ with 676 points in a constant scale and $\omega^2(z + z')/g \in [-251, -1.6 \ 10^{-6}]$ with 130 points in logarithmic scale. A polynomial surface interpolation with the 5th order Lagrange formula is used for interpolating any values in the specified interval.

* The specified points for the interpolation of the Green function are finer than in the previous release. However, an option to switch the two different tabulated Green function data is available in the source file \Solver\Core\INITIALIZE GREEN.f90 with the parameter FLAG IGREEN=1 or 2, 2 being the default.

* Influence coefficients, the integration of $\partial_n G(x, x')$ over a body panel, is computed using Gauss-quadrature integration with a user-input number of Gauss-quadrature points.

* The source distributions on body panels are then obtained after solving the corresponding linear system.

* The linear system is solved using a user-choice solver among the available ones, which are Gauss elimination, LU-decomposition (default) and GMRES-iterative solvers.

* The GMRES solver code [12] from CERFACS is embedded in NEMOH solver module. For using the GMRES solver, the user has to obtain a license in https://www.cerfacs.fr/algor/Softs/GMRES/license.html.

* For free-surface piercing bodies problem, the irregular frequencies removal (IRR) method is applied by the user providing lid panels at $z = 0$. Then, the extended boundary integral equation will be solved [1, 7]. As in [7], the IRR may be influenced by the input parameter $\epsilon$ in input solver.txt that shifts the lid panels from $z = 0$ to $z = -\epsilon d_B$ where $d_B$ is a maximum horizontal distance of points on the body. $d_B$ is computed by the software.

* RAO in Eq. 9 is obtained by applying the inverse matrix using LU-decomposition.

* The software can solve multi-bodies problems, as well as multi-directional waves.

NEMOH2 uses the following numerical approach

* The QTF module can be run only after the first order-hydrodynamic coefficients are computed in NEMOH1.

* In the potential part, the computation of the free-surface integral is an option:

- For the difference-frequency QTFs, it is in general acceptable not to compute the free-surface integral terms.

- For the sum-frequency QTFs, it is necessary to compute the free-surface integrals.
* Important notice: the computation with the free-surface integral still has an issue if the lid body panels exist (cf. IRR method). For now, the user is suggested not to specify the lid body panels in the mesh file input for NEMOH1 computation if he wants to compute the full QTFs with the free surface integral.

* For the free-surface integral, a quadrilateral free-surface mesh has to be specified.

* The computation can be done for bi-directional or uni-directional wave for the specified multiple wave direction.

* QTF computations have not been tested yet for the multi-bodies problem.

NEMOH related publications to be referred are [1] for the first order NEMOH and [9, 10, 11] for the QTF module. A publication related with this release is in preparation as of [6].

## 2.2 Units

NEMOH expects all quantities to be expressed in S.I. units: *m*, *kg*, *s*, *rad* (meter, kilogram, seconds, radian, respectively). But some of the phase outputs may be expressed in *deg* or °, in this case it will be indicated in the file header.

The force unit is [*N*], the moment unit is [*Nm*], added Mass [*kg*], damping coefficient [*kg/s*]. As the force output is normalized with the unit wave amplitude *a* [*m*], then the normalized force unit is [*N/m*] and the normalized moment is [*N*].

Response amplitude operator for translation motion has unit [*m/m*] and for rotation it is [*deg/m*].

The force quadratic transfer function (QTF) has unit [*N/m²*] and for the moment QTF it is [*N/m*]. The QTF output is normalized by *ρg* where the fluid density *ρ*, [*kg/m³*], and the gravitation constant *g*, [*m/s²*].

## 2.3 Software features and capabilities

<figure><img src="image_3.png" /><figcaption>Figure 2: Global flowchart of NEMOH software</figcaption></figure>
Fig. 2 shows a global overview of the software. There are three main programs: a mesh preprocessor, NEMOH1 and NEMOH2. The program features and capabilities are described as follows.

### 2.3.1 Mesh Preprocessor

NEMOH mesh preprocessor, the executable file **mesh**, is for generating the NEMOH mesh file with a given geometry input file and an input **Mesh.cal** file. This **mesh** is not a meshing code but allows the user to refine an existing mesh and to calculate properties such as displacement, buoyancy center, and hydrostatic stiffness. It also makes estimates of masses and inertia matrix. The concept with this program is to write by hand a coarse description of the body under consideration in a **GeomInput** file and to have **mesh** make the refined mesh for NEMOH calculations.

### 2.3.2 NEMOH1: 1st-order solver

NEMOH1 solves the first-order potential flow problem. There are four modules: **preProc**, **hydrosCal**, **solver** and **postProc**, described as follows.

* **preProc**: processes the input mesh file and generates the body condition for each calculation case (diffraction and radiation). The outputs are used as input for **solver**.

* **hydrosCal**: computes hydrostatic parameters, i.e. stiffness matrix and inertia matrix. The output file will be used in the **postProc** for computing the RAOs. If the input mesh is generated by the NEMOH mesh preprocessor, **mesh**, the hydrostatic parameters are already computed and then it is not necessary to execute this program.

* **solver**: solves the boundary value problems for each problem, diffraction and radiation, defined in the file **Normalvelocities.dat**, provided by the **preProc**.

- The influence coefficients matrix is constructed with the infinite/finite depth Green function.

- If a finite depth is specified, then the finite depth green function is applied only for $\frac{\omega^2}{g}D < 20$, otherwise infinite depth case is applied.

- The integration of the Green function on a panel for the influence coefficients is obtained by the Gauss-quadrature integration. The number of Gauss quadrature points is a user input.

- The minimum distance, $\epsilon$, between the flow and source points for the influence coefficient computation is user-specified.

- The source distributions are then obtained by solving the linear system. There are three options for the solver: Gauss elimination, LU-decomposition and GMRES. If the GMRES solver [12] is used and the target tolerance is not achieved after the maximum number of iterations, the problem is automatically solved by LU-decomposition. License for using GMRES has to be obtained in https://www.cerfacs.fr/algor/Softs/GMRES/license.html.
* **postProc**: post-processes the solver's output files. The results are the excitation forces, added mass and damping coefficients. Optionally, the program computes

- the radiation damping impulse response function, the infinite frequency added mass and the excitation force impulse response function,

- the Kochin coefficient,

- the free-surface elevation,

- the motion response amplitude operator (RAO). For the RAO computation, additional stiffness matrix [$K_m$] and additional damping [$B_{add}$] can be user-specified in the Mechanics/ folder.

### 2.3.3 NEMOH2: 2nd-order QTF module

NEMOH2 computes the second-order wave loads that are expressed as Quadratic Transfer Function (QTF). It is suggested to verify the first-order results before running the QTF module. There are three modules in this program: **QTFpreProc**, **QTFsolver** and **QTFpostProc**, described as follows

* **QTFpreProc**: computes the perturbed potential, the total potential, the normalized radiation potential and the corresponding velocities on the body panels, the water-line and the free-surface panels.

- The computation on free-surface panels requires possibly long computational time. Then, it is suggested not to compute the free-surface integral for the first execution of NEMOH2. This is controlled by the flag HASFS, which is available in the input file Nemoh.cal.

- In general, the free-surface integral may be negligible for the difference-frequency QTFs computation.

- The potential on the waterline is rather sensitive with the $\epsilon$ value. For default, $\epsilon = 0.001$, it can be adjusted in input solver.txt. The $\epsilon$ can be set differently for NEMOH1 and NEMOH2. Further investigation into this is needed.

- In case the body lid panels exist, the influence coefficients are affected and give a somewhat larger error for higher frequencies on the free-surface potentials and velocities. This also needs to be investigated.

- For now, in the case of full-QTFs computation, the user is suggested not to specify the lid body panels in a mesh file input for NEMOH1 computation.

* **QTFsolver**: computes the quadratic part and the potential part of the second order loads. The free-surface integrals in the potential part QTF are optionally computed (flag HASFS in Nemoh.cal).

* **QTFpostProc**: adds all the computed QTF parts and produces the total QTF. The option to sum only some parts of the QTF is available in Nemoh.cal.
# 3 Getting-started

This section describes the installation procedure and how to run the codes. It also includes a description of input-output files.

## 3.1 Executable files

Executable/binary files are provided in the Release section of the GitLab project. They can be used directly without the need to do the compilation procedure described in the next subsection. Windows and Linux executable files are provided. In the case of a compilation on your computer, executable files will be located in the bin/ folder.

The following executable files are available:

* NEMOH1: mesh, preProc, hydrosCal, solver, postProc,

* NEMOH2: QTFpreProc, QTFsolver, QTFpostProc.

Note that a Matlab wrapper is provided to use those executable files in a Matlab environment. More details are provided in Sec. 4.

## 3.2 Installation

This procedure is intended for a developer to perform the compilation after changing the source code. Users may skip this step.

As a first preliminary step, it is necessary to install the following external libraries that are used by NEMOH:

* BLAS, https://netlib.org/blas/

* LAPACK, https://netlib.org/lapack/

### 3.2.1 Windows platform

An updated manual will provide the details of the compilation on a Windows platform.

### 3.2.2 Linux platform

Before compiling, the following tools need to be available:

* A Fortran compiler. The code has been tested using:

- gfortran, https://gcc.gnu.org/wiki/GFortran,

- intel fortran compiler, ifort.

* CMake, https://cmake.org/, a cross-platform tool for building and testing the software package.

Compile all Nemoh executables using CMake (from the root of the repository):

```
cmake -S. -Bbuild
```

```
cmake --build build
```
The resulting executables are in the `bin/` directory. To compile only one of the executables, use the `--target` option of CMake. The available targets are:

* for NEMOH: `mesh`, `preProc`, `hydrosCal`, `solver`, `postProc`

* for NEMOH QTF: `QTFpreProc`, `QTFsolver`, `QTFpostProc`

The choice of the compiler is left to CMake, but can be overridden by setting the `CMAKE_Fortran_COMPILER` at the configuration step, e.g.:

```
cmake -S. -Bbuild -DCMAKE_Fortran_COMPILER=gfortran
```

After building, the tests can be run from the `build/` directory:

```
ctest -V -j <N_concurrent>
```

Where `<N_concurrent>` is the number of simultaneous workers (processes). The tests can be restricted using their labels and the `-L` option of `ctest`:

```
ctest -V -j <N_concurrent> -L <label>
```

Where `label` is one of the following:

* `NEMOH1`: only the non-QTF test cases

* `PREPROC`: only the pre-processing operations

* `SOLVER`: only the solving operations (depend on the pre-processing tests)

* `POSTPROC`: only the post-processing operations (depend on the pre-processing and solving tests)

* `NEMOH2`: only the QTF test cases

* `QTF`: only the computation of the QTF (depend on the prior non-QTF Nemoh computation)

Tests with unsatisfied requirements will fail.

## 3.3 Running

The binary files of NEMOH1 and NEMOH2 have to be executed following the order provided in Sec. 3.1.

The following steps are for executing the binary files in the command window.

* Suppose a project directory, e.g. `/NEMOH/projdir/`, that contains all the input files and that is in the same location as the binary directory, i.e `NEMOH/bin/`.

* The program can be run depending on your current working directory in the command line. For example, the following commands are possible, with `binfile` being an executable file i.e. `preProc`, etc., as

- if you are in the `projdir`:

`./../bin/binfile`
- if you are in the bin:

```
./binfile ../projdir
```

Before executing the binary files, the input files are needed. These are described in the next subsection.

Finally, a set of test cases are provided. The results are presented in Sec. 5 and we provide here the methodology to run those tests. The first possibility is to run each of the cases in the command line, following the above instructions. This applies to both Windows and Linux environments.

To simplify the procedure for Linux platforms, Makefile is provided in the TestCases/ directory. It is then possible to run the NEMOH1 test cases by executing the following commands in a Terminal (each line being a test case):

```
make run_1_cylinder
make run_2_2Bodies
make run_3_nonsymmetrical
make run_4_postprocessing
make run_5quicktest
make run_6_box_coarsemesh
make run_7_Solvers_Check OC3
make run_8a_Cylinder_irregfreq
```

For the QTF test cases, the following commands can be used:

```
make run_8b_QTF_Cylinder
make run_9 oc4 semisub
make run_10a softwind
make run_10b softwind FS
make run_11_QTF OC3 Hywind.
```

Commands to clean the test cases are also available to clean all the output files. They can apply either to a specific test case, e.g.

```
make clean_1_cylinder
```

Or to remove a range of test cases

```
make clean_all tests NEMOH1
make clean_all tests NEMOH2
make clean_all tests
```

The description and the benchmark results of those test cases are described in Sec. 5.

## 3.4 Input/Output

Following is the list of the user's input files and the output files for each executable file:

* **mesh**

- User's input files: `projdir/Mesh.cal`, `projdir/geomInput`,

- Output files: `projdir/meshfile`, `projdir/mesh/[*.dat, *.tec]`,

* **preProc**

- User's input files: `projdir/Nemoh.cal`, `projdir/meshfile`,
- Output files: `projdir/Normalvelocities.dat`, `projdir/results/[FKForce.dat, FKForce.tec, index.dat]`, `projdir/mesh/[L10.dat, L12.dat]`,

* **hydrosCal**

- User's input files: `projdir/Nemoh.cal`, `projdir/mesh.cal`,

- Output files: `projdir/mesh/[*.dat, *.tec]`, `projdir/Mechanics/`,

* **solver**

- User's input files: `projdir/Nemoh.cal`, `projdir/input_solver.txt`,

- Output files: `projdir/results/Forces.dat`, `projdir/results/sources` (if QTF will be computed, indicated in `Nemoh.cal`)

* **postProc**

- User's input files: `projdir/Nemoh.cal`, `projdir/Mechanics/[Km.dat, Badd.dat]`

- Output files: `projdir/results/[ExcitationForce.tec, DiffractionForce.tec, RadiationCoefficients.tec, ...]`, `projdir/Motion/RAO.dat`,

* **QTFpreProc**

- User's input files: `projdir/Nemoh.cal`, `projdir/FSmeshfile` (If the free-surface integral, HASFS flag, is computed), `projdir/Mechanics/[Km.dat, Badd.dat]`

- Output files: `projdir/QTFPreprocOut/*.bin`,

* **QTFsolver**

- User's input files: `projdir/Nemoh.cal`,

- Output files: `projdir/results/QTF/*.dat`,

* **QTFpostproc**

- User's input files: `projdir/Nemoh.cal`,

- Output files: `projdir/results/QTF/[OUT_QTFM_N.dat, OUT_QTFP_N.dat]`

As summary, following files are needed for the input, some depends on user-specified choice in `Nemoh.cal`:

* `Nemoh.cal` contains all NEMOH computation parameters

* `Mesh.cal` contains information of `geomInput` file. It is an input for **mesh** and **hydrosCal**.

* a **meshfile**, input for **preProc**, or `geomInput` file, input for **mesh**

* `input_solver.txt` contains **solver** parameters
* `Km.dat` and `Badd.dat`, are the additional stiffness and damping matrices. These optional input are for `postProc/QTFpreProc`

* `FSmeshfile` contains the free-surface mesh if contrib=3 in `Nemoh.cal`.

NEMOH produces the following main output files, some depending on user-specified choice in `Nemoh.cal`,

* hydrostatic files: inertia and stiffness matrices,

* hydrodynamics coefficients: Froude-Krylov force, excitation force, added-mass, damping coefficient,

* Kochin function, free-surface elevation,

* Response Amplitude Operator (RAO),

* Total difference- and sum-frequencies QTFs.

Detail descriptions of the input/output files are discussed in the next subsections.

### 3.4.1 User's input files

`Nemoh.cal`: contains all computation parameters with the format as in Fig. 3. The following parameters have to be specified:

* *Environment*: fluid density, gravity constant, water-depth and wave reference point. Specify 0. for infinite water depth case.

* *Description of floating bodies*: number of bodies, name of the `meshfile`, number of points and number of panels, number of degrees of freedom, motion description, number of resulting generalized forces and its description.

- `meshfile` has to be provided in the folder `projdir/`

- Number of points and panels correspond with the data in the `meshfile`

- For each motion and resulting generalized force, 7 parameters have to be specified in a row. The first parameter, 1 for translation motion/force, 2 for rotation motion/force. The second to fourth parameters is a unit vector of motion/-force, 1 0 0 for surge/roll, 0 1 0 for sway/roll, 0 0 1 for heave/yaw. The fifth to seventh parameters are the reference point coordinate $(x, y, z)$.

- In the multibody cases, all the parameters have to be specified in rows for each body.

* *Load case to be solved*: contains wave frequency and wave direction parameter.

- Four wave frequency parameters have to be specified in a row. First, the frequency type, 1 for radial-frequency [rad/s], 2 for frequency [Hz] and 3 for period [s]. The second to fourth parameters are the number of frequencies/periods, and their minimum and maximum values.
<figure><img src="image_4.png" /><figcaption>Figure 3: Nemoh.cal input file</figcaption></figure>

- In the case of QTF computation, it is suggested that the computed first-order hydrodynamic coefficients in NEMOH1 cover all difference-frequencies and sum-frequencies intervals for the QTF computation. The suggested radial frequency interval is $\omega \in [\Delta\omega, \omega_{max}]$ with a step $\Delta\omega$, $\omega_{max} = N_{\omega}\Delta\omega$ and $N_{\omega}$ is the total number of radial frequencies. The $\omega_{max}$ should be chosen as the maximum computed sum-frequencies, $\omega_1 + \omega_2$.

- The wave direction parameters are the number of directions, and the minimum and maximum angle directions [deg].

* Post processing contains parameters for Impulse Response Functions, pressure, Kochin, free surface elevation, RAO and frequency type output.

- The IRFs computation requires 3 parameters; a switch [0 is not calculated, 1 calculated], a time-step and a maximum time.

- A switch pressure parameter [0 is not calculated, 1 calculated].
- The Kochin parameters are a number of directions (specify 0 if it is not calculated), minimum and maximum values of angle directions [deg].

- The free surface parameters are the number of points in x-direction (specify 0 if it is not calculated) and y-direction, the dimension of the domain in x and y directions [m].

- A switch for RAO computation [0 is not calculated and 1 is calculated]. If QTF will be computed, the RAO has to be computed and then the switch has to be set to 1.

- Frequency output option: 1 for the radial frequency [rad/s], 2 for the frequency [Hz] and 3 for the period [s].

* Quadratic Transfer Function (QTF) contains following parameters

- A flag to decide if QTFs are computed (1) or not (0). If flag=1, then the NEMOH1 module produces the source-distribution file for each problem, which is saved in /projdir/results/source.

- The frequency parameters are provided only in radial frequency [rad/s] under the form of: the number of frequencies, and minimum and maximum values. The values are not necessarily the same as the input in NEMOH 1 but should be within the range of NEMOH1 input, then an interpolation may be applied.

- A flag to choose between uni-directional (0) and bi-directional (1) computations of QTFs. If multi-directions are computed in NEMOH1, all the direction interactions will be computed for the bi-directional case. In the uni-directional case, only the same-direction interaction, $\beta_1 = \beta_2$, will be computed.

- Contribution parameter: 1 computes only the quadratic terms of QTFs (referred as DUOK), 2 computes the quadratic and the body force contribution in the potential QTFs referenced as DUOK+HASBO), 3 includes the computation of the free-surface integrals in the finite domain and semi-infinite domain (this is referenced as DUOK+HASBO+HASFS+ASYMP).

- If Contrib=3, a free-surface mesh file name has to be specified and the file is placed in /projdir/mesh. Type NA if it is not applicable, Contrib< 3.

- If Contrib=3, specify the free-surface parameters: an external radius, $R_e$ is the maximum radius as in the free-surface mesh, a number of discretized radius points in between the waterline $R_b$ and the external radius, $[R_b, R_e]$, and the number of Bessel functions. The number of Bessel functions is used during the computation in the semi-infinite integral, specify 30 as a default value.

- Switch 1 for adding to the quadratic QTF (DUOK) the Hydrostatic terms of the quadratic first-order motion, $-[K]\tilde{\xi}^{(2)}$, where, with $z_G$ is the vertical component of CoG,

$$ \tilde{\xi}^{(2)} = [0, 0, z_G(\theta_1^{(1)2} + \theta_2^{(1)2})/2, \theta_2^{(1)}\theta_3^{(1)}/2, -\theta_3^{(1)}\theta_1^{(1)}/2, 0]^T. $$

Note that this term is optional and needed only in QTFsolver. In other software this term is not always included, e.g. HYDROSTAR [2] does not included it.
- Frequency output option: 1 for the radial frequency [rad/s], 2 for the frequency [Hz] and 3 for the period [s].

- In **QTFpostproc**, QTFs total is calculated with summation of all the terms. Option to exclude/include the terms are available with the corresponding switch for DUOK, HASBO and HASFS+ASYMP terms. Switch 1 to include, 0 to exclude. If Contrib=2, then HASFS+ASYMP switch has to be 0.

**meshfile**: contains all the mesh information with a format as shown in Table 1. Lid panels ($z = 0$) of the structure may be included in this file to activate the irregular frequencies removal method. This mesh file may be generated by NEMOH **mesh** preprocessor or by an external mesh generator. External mesh generators, e.g. the open-source software GMSH [5], may be used to generate mesh files but they must be adapted to the NEMOH format. A Matlab file for converting GMSH mesh file to the NEMOH format is provided in the dedicated repository. The Matlab file will be described in the next section.

<table><caption>Table 1: meshfile format</caption><tr><td>2</td><td>1</td><td>First column must be a 2.<br/>Second column is 1 if half symmetric body mesh, about (xOz),<br/>specified, 0 otherwise.</td></tr><tr><td>1</td><td>x<sub>1</sub></td><td>y<sub>1</sub></td><td>z<sub>1</sub></td><td>Table of nodes. First column is node ID.<br/>Other columns are the node coordinates (x, y, z)</td></tr><tr><td>:</td><td>:</td><td>:</td><td>:</td><td>All nodes coordinated listed in the rows</td></tr><tr><td>0</td><td>0.</td><td>0.</td><td>0.</td><td>Last line of table of nodes</td></tr><tr><td>1</td><td>2</td><td>3</td><td>4</td><td>Table of connectivities. Number of node IDs</td></tr><tr><td>:</td><td>:</td><td>:</td><td>:</td><td>Connectivities in each panel listed in the rows</td></tr><tr><td>0</td><td>0</td><td>0</td><td>0</td><td>Last line of table of connectivities</td></tr></table>

**geomInput**: contain coarse description of mesh, that are number of nodes, number of panels, table of nodes and table of connectivities. The input file has to follow the format as shown in Table 2.

<table><caption>Table 2: geomInput file format</caption><tr><td>100</td><td>Total number of nodes.</td></tr><tr><td>25</td><td>Total number of panels.</td></tr><tr><td>x<sub>1</sub></td><td>y<sub>1</sub></td><td>z<sub>1</sub></td><td>Table of nodes.<br/>The node coordinates (x, y, z)</td></tr><tr><td>:</td><td>:</td><td>:</td><td>All nodes coordinated listed in the rows</td></tr><tr><td>1</td><td>2</td><td>3</td><td>4</td><td>Table of connectivities. Number of node IDs</td></tr><tr><td>:</td><td>:</td><td>:</td><td>:</td><td>Connectivities in each panel listed in the rows</td></tr></table>

**Mesh.cal**: contains mesh and environmental parameters with a format as in Table 3. This file is used as input for **mesh** and **hydroCal**. All the parameters are used in **mesh**.
Only center of gravity, water density, and gravity are used in **hydroCal**.

<table><caption>Table 3: Mesh.cal file format</caption><thead><tr><th>geomInput_name</th><th></th><th>Name of the geomInput file.</th></tr></thead><tbody><tr><td>0</td><td></td><td>1 if a half symmetric body mesh, about (xOz), specified.</td></tr><tr><td>0.</td><td>0.</td><td>Possible translation about x axis (first column) and y axis (second column)</td></tr><tr><td>0.</td><td>0.</td><td>Coordinates of gravity centre</td></tr><tr><td>500.</td><td></td><td>Target for the number of panels in refined mesh</td></tr><tr><td>2.</td><td></td><td></td></tr><tr><td>0.</td><td></td><td></td></tr><tr><td>1.</td><td></td><td></td></tr><tr><td>1025</td><td></td><td>water density (kg/m³)</td></tr><tr><td>9.81</td><td></td><td>gravity (m/s²)</td></tr></tbody></table>

`input solver.txt` contains solver parameters with format as in Table 4. The parameters are described as follows.

* Number of Gauss Quadrature points, $N^2$, is used for the surface integration in the influence coefficients. User specifies an integer value of $N \in [1, 4]$, default $N = 2$.

* Minimum z of flow and source points is defined with a factor $\epsilon_{zmin}$ multiplied by the maximal horizontal distance between two point of the mesh, default $\epsilon_{zmin} = 0.001$.

* Three linear-system solvers are available; 1 Gauss elimination, 2 LU Decomposition, 3 GMRES iterative solver.

* If GMRES solver is chosen then the three parameters, the restart parameter, the relative tolerance and the maximum number of iterations, have to be specified. If the tolerance is not achieved after the maximum iteration exceeded then LU decomposition solves the system directly.

<table><caption>Table 4: `input solver.txt` file format</caption><tr><td>2</td><td>Gauss quadrature (GQ) surface integration, $N^2$ GQ Nodes, specify N=[1,4]</td></tr><tr><td>0.001</td><td>eps_zmin for determine minimum z of flow and source points of panel.</td></tr><tr><td>1</td><td>Solver option: 0 GAUSS ELIM., 1 LU DECOMP., 2 GMRES</td></tr><tr><td>10 1e-5 1000</td><td>GMRES parameters: restart parameter, Rel Tol, max iter</td></tr></table>

`Km.dat` and `Badd.dat` are additional stiffness matrix and damping coefficient matrix. The files contains the matrix components with size $(Nbody \cdot Nradiation) \times (Nbody \cdot Nradiation)$.
FSmeshfile contains all the free-surface mesh information with a format as shown in Table 5. Quadrilateral panels discretized free-surface area in between the body waterline, $R_B$, and the exterior radius $R_e$. Waterline on $R_B$ and $R_e$ has to discretized by line segments.

<table><caption>Table 5: FSmeshfile format (Free surface mesh file)</caption><tr><td>1</td><td>5000</td><td>4900</td><td>400</td><td>This row contains the free-surface computation parameters. First column is 1 if half symmetric free surface mesh specified, 0 otherwise. Column 2-4 are Number of points, Number of panels, Number of segmented waterline, respectively.</td></tr><tr><td>1</td><td>x<sub>1</sub></td><td>y<sub>1</sub></td><td>z<sub>1</sub></td><td>Table of nodes. First column is node ID. Other columns are the node coordinates (x, y, z)</td></tr><tr><td>:</td><td>:</td><td>:</td><td>:</td><td>All nodes coordinated listed in the rows</td></tr><tr><td>0</td><td>0.</td><td>0.</td><td>0.</td><td>Last line of table of nodes</td></tr><tr><td>1</td><td>2</td><td>3</td><td>4</td><td>Table of connectivities in a panel. Number of node IDs</td></tr><tr><td>:</td><td>:</td><td>:</td><td>:</td><td>Connectivities in each panel listed in the rows</td></tr><tr><td>4901</td><td>4902</td><td></td><td></td><td>Table of connectivities in a segmented waterline. Number of node IDs</td></tr><tr><td>:</td><td>:</td><td></td><td></td><td>Connectivities in each line listed in the rows</td></tr><tr><td>0</td><td>0</td><td>0</td><td>0</td><td>Last line of table of connectivities</td></tr></table>

### 3.4.2 Output files

Hydrostatic output files such as inertia and stiffness matrices are produced by **mesh**, if `geomInput` is prescribed, or by **hydroCal**, if `meshfile` is prescribed. The files contain the matrix components with size $(Nbody \cdot Nradiation) \times (Nbody \cdot Nradiation)$.

The following hydrodynamic coefficients are produced in Tecplot format, which can be opened by the Tecplot program or by a simple text-editor program,

* `FKForce.tec`, `DiffractionForce.tec` and `ExcitationForce.tec` are the output files of the Froude-Krylov, the diffraction and the excitation forces respectively. The output file format is given in Table 6. The file contains the absolute value and the phase [deg] of the force for each 'frequency' $f$. The force is given for each specified force axis (i.e. surge, heave, pitch) for each body. The 'frequency' is given based on the chosen type, [rad/s, Hz, s], of the post-processing parameter in `Nemoh.cal`, except the Froude-Krylov force, which is only in the radial frequency [rad/s].

* `RadiationCoefficients.tec` is the output file for added mass and damping coefficients with format as in Table 7. The radiation coefficients are given for each `DoF`, each force axis and for each frequency. The frequency is given based on the chosen 'frequency' type, [rad/s, Hz, s], of the post-processing parameter in `Nemoh.cal`.

The hydrodynamic coefficients are also produced in the `.dat` files, i.e. `CA.dat` for the damping coefficients, `CM.dat` for the added mass coefficients, `Fe.dat` for the excitation
force and *FKForce.dat* for the excitation force. The frequency type of the output files is only radial frequency [rad/s]. These output files are used as input files for the QTF module.

<table><caption>Table 6: Output file format of Froude-Krylov, diffraction and excitation forces</caption><thead><tr><th>f<sub>1</sub></th><th>|F<sub>1</sub>(f<sub>1</sub>)|</th><th>∠F<sub>1</sub>(f<sub>1</sub>)</th><th>...</th><th>|F<sub>Ninteg</sub>(f<sub>1</sub>)|</th><th>∠F<sub>Ninteg</sub>(f<sub>1</sub>)</th></tr></thead><tbody><tr><td>f<sub>2</sub></td><td>|F<sub>1</sub>(f<sub>2</sub>)|</td><td>∠F<sub>1</sub>(f<sub>2</sub>)</td><td>...</td><td>|F<sub>Ninteg</sub>(f<sub>2</sub>)|</td><td>∠F<sub>Ninteg</sub>(f<sub>2</sub>)</td></tr><tr><td>...</td><td>...</td><td>...</td><td>...</td><td>...</td><td>...</td></tr><tr><td>f<sub>Nf</sub></td><td>|F<sub>1</sub>(f<sub>Nf</sub>)|</td><td>∠F<sub>1</sub>(f<sub>Nf</sub>)</td><td>...</td><td>|F<sub>Ninteg</sub>(f<sub>Nf</sub>)|</td><td>∠F<sub>Ninteg</sub>(f<sub>Nf</sub>)</td></tr></tbody></table>

<table><caption>Table 7: Output file format of the radiation coefficients</caption><thead><tr><th>f<sub>1</sub></th><th>M<sup>a</sup><sub>11</sub>(f<sub>1</sub>)</th><th>B<sub>11</sub>(f<sub>1</sub>)</th><th>...</th><th>M<sup>a</sup><sub>1Ninteg</sub>(f<sub>1</sub>)</th><th>B<sub>1Ninteg</sub>(f<sub>1</sub>)</th></tr></thead><tbody><tr><td>f<sub>2</sub></td><td>M<sup>a</sup><sub>11</sub>(f<sub>2</sub>)</td><td>B<sub>11</sub>(f<sub>2</sub>)</td><td>...</td><td>M<sup>a</sup><sub>1Ninteg</sub>(f<sub>2</sub>)</td><td>B<sub>1Ninteg</sub>(f<sub>2</sub>)</td></tr><tr><td>...</td><td>...</td><td>...</td><td>...</td><td>...</td><td>...</td></tr><tr><td>f<sub>Nf</sub></td><td>M<sup>a</sup><sub>11</sub>(f<sub>Nf</sub>)</td><td>B<sub>11</sub>(f<sub>Nf</sub>)</td><td>...</td><td>M<sup>a</sup><sub>1Ninteg</sub>(f<sub>Nf</sub>)</td><td>B<sub>1Ninteg</sub>(f<sub>Nf</sub>)</td></tr></tbody></table><table><thead><tr><th>f<sub>1</sub></th><th>M<sup>a</sup><sub>21</sub>(f<sub>1</sub>)</th><th>B<sub>21</sub>(f<sub>1</sub>)</th><th>...</th><th>M<sup>a</sup><sub>2Ninteg</sub>(f<sub>1</sub>)</th><th>B<sub>2Ninteg</sub>(f<sub>1</sub>)</th></tr></thead><tbody><tr><td>...</td><td>...</td><td>...</td><td>...</td><td>...</td><td>...</td></tr><tr><td>f<sub>Nf</sub></td><td>M<sup>a</sup><sub>21</sub>(f<sub>Nf</sub>)</td><td>B<sub>21</sub>(f<sub>Nf</sub>)</td><td>...</td><td>M<sup>a</sup><sub>2Ninteg</sub>(f<sub>Nf</sub>)</td><td>B<sub>2Ninteg</sub>(f<sub>Nf</sub>)</td></tr><tr><td>...</td><td>...</td><td>...</td><td>...</td><td>...</td><td>...</td></tr><tr><td>f<sub>Nf</sub></td><td>M<sup>a</sup><sub>NDoF1</sub>(f<sub>Nf</sub>)</td><td>B<sub>NDoF1</sub>(f<sub>Nf</sub>)</td><td>...</td><td>M<sup>a</sup><sub>NDoFNinteg</sub>(f<sub>Nf</sub>)</td><td>B<sub>NDoFNinteg</sub>(f<sub>Nf</sub>)</td></tr></tbody></table>

RAO.dat is the output file of the response amplitude operator with the file format as in Table. 8. The output file gives the absolute value and the phase of RAO for each degree of freedom and each frequency. The frequency is given based on the chosen 'frequency' type, [rad/s, Hz, s], of the post-processing parameter in *Nemoh.cal*. Only radial frequency output file will be produced in the case of the QTF computed.

<table><caption>Table 8: Output file format of RAO.dat</caption><thead><tr><th>f<sub>1</sub></th><th>|ξ<sub>1</sub>(f<sub>1</sub>)|</th><th>...</th><th>|ξ<sub>6</sub>(f<sub>1</sub>)|</th><th>∠ξ<sub>1</sub>(f<sub>1</sub>)</th><th>...</th><th>∠ξ<sub>6</sub>(f<sub>1</sub>)</th></tr></thead><tbody><tr><td>...</td><td>...</td><td>...</td><td>...</td><td>...</td><td>...</td><td>...</td></tr><tr><td>f<sub>Nf</sub></td><td>|ξ<sub>1</sub>(f<sub>Nf</sub>)|</td><td>...</td><td>|ξ<sub>6</sub>(f<sub>Nf</sub>)|</td><td>∠ξ<sub>1</sub>(f<sub>Nf</sub>)</td><td>...</td><td>∠ξ<sub>6</sub>(f<sub>Nf</sub>)</td></tr></tbody></table>

IRF.tec and IRF\_excForce.tec are the impulse response functions for the radiation damping and the excitation force, respectively. The radiation damping IRF has the file format as in Table 9 and the excitation force IRF as in Table 10.

pressure.00XXX.dat, kochin.00XXX.dat and freesurface.00XXX.dat are output files of pressure, Kochin and free surface, respectively, for a specific problem-XXX. The problem number is defined as in order of the diffraction problem (*Nbeta*), the
<table><caption>Table 9: Output file format of IRF.tec</caption><tr><td>t<sub>1</sub></td><td>M<sub>11</sub><sup>a</sup>(∞)</td><td>IRF<sub>11</sub>(t<sub>1</sub>)</td><td>...</td><td>M<sub>1Ninteg</sub><sup>a</sup>(∞)</td><td>IRF<sub>1Ninteg</sub>(t<sub>1</sub>)</td></tr><tr><td>t<sub>2</sub></td><td>M<sub>11</sub><sup>a</sup>(∞)</td><td>IRF<sub>11</sub>(t<sub>2</sub>)</td><td>...</td><td>M<sub>1Ninteg</sub><sup>a</sup>(∞)</td><td>IRF<sub>1Ninteg</sub>(t<sub>2</sub>)</td></tr><tr><td>⋮</td><td>⋮</td><td>⋮</td><td>⋮</td><td>⋮</td><td>⋮</td></tr><tr><td>t<sub>1</sub></td><td>M<sub>21</sub><sup>a</sup>(∞)</td><td>IRF<sub>21</sub>(t<sub>1</sub>)</td><td>...</td><td>M<sub>2Ninteg</sub><sup>a</sup>(∞)</td><td>IRF<sub>2Ninteg</sub>(t<sub>1</sub>)</td></tr><tr><td>⋮</td><td>⋮</td><td>⋮</td><td>⋮</td><td>⋮</td><td>⋮</td></tr><tr><td>t<sub>N</sub></td><td>M<sub>NDoF1</sub><sup>a</sup>(∞)</td><td>IRF<sub>NDoF1</sub>(t<sub>N</sub>)</td><td>...</td><td>M<sub>NDoFNinteg</sub><sup>a</sup>(∞)</td><td>IRF<sub>NDoFNinteg</sub>(t<sub>N</sub>)</td></tr></table>

<table><caption>Table 10: Output file format of IRF_excForce.tec</caption><tr><td>t<sub>1</sub></td><td>IRF<sub>1</sub>(t<sub>1</sub>)</td><td>...</td><td>IRF<sub>Ninteg</sub>(t<sub>1</sub>)</td></tr><tr><td>t<sub>2</sub></td><td>IRF<sub>1</sub>(t<sub>2</sub>)</td><td>...</td><td>IRF<sub>Ninteg</sub>(t<sub>2</sub>)</td></tr><tr><td>⋮</td><td>⋮</td><td>⋮</td><td>⋮</td></tr><tr><td>t<sub>N</sub></td><td>IRF<sub>1</sub>(t<sub>N</sub>)</td><td>...</td><td>IRF<sub>Ninteg</sub>(t<sub>N</sub>)</td></tr></table>

radiation problem (Ndof) and for each frequency. So problem-001 is the first frequency and first wave direction, diffraction problem. Suppose Nbeta = 1, then problem-002 is the first frequency radiation problem DoF 1. If Ndof = 6 then problem-008 is the second frequency diffraction problem.

* pressure.00XXX.dat is a pressure output file for the problem-XXX. In each file, the absolute value of pressure, |P|, (Pa) and the phase, $\angle P$, (rad) are given for each panel. The format of the output file is given in Table 11.

<table><caption>Table 11: Output file format of pressure.00XXX.dat</caption><tr><td>x<sub>1</sub></td><td>y<sub>1</sub></td><td>z<sub>1</sub></td><td>|P(x<sub>1</sub>)|</td><td>$\angle P(x_1)$</td></tr><tr><td>⋮</td><td>⋮</td><td>⋮</td><td>⋮</td><td>⋮</td></tr><tr><td>x<sub>Npanel</sub></td><td>y<sub>Npanel</sub></td><td>z<sub>Npanel</sub></td><td>|P(x<sub>Npanel</sub>)|</td><td>$\angle P(x_{Npanel})$</td></tr></table>

* kochin.00XXX.dat is an output file of the Kochin function on a prescribed direction for the problem-XXX. In each file, depending on the diffraction/radiation problem, the computed absolute value of the Kochin, $|H|$, and the phase, $\angle H$, (rad) are saved for each direction, $\vartheta$. The format of the output file is given in Table 12.

* freesurface.00XXX.dat is an output file of the free-surface elevation on a prescribed free-surface domain for the problem-XXX. In each file, depending on the diffraction/radiation problem, the computed absolute value of the free-surface elevation, $|\eta|$, and the phase, $\angle \eta$, (rad) are saved for each free-surface panel position. The format of the output file is given in Table 13.

OUT_QTFM_N.dat and OUT_QTFP_N.dat are the output files of difference- and sum-frequencies QTF. The QTF results are either the total QTF or parts of the QTF terms
<table><caption>Table 12: Output file format of kochin.00XXX.dat</caption><thead><tr><th>ϑ<sub>1</sub></th><th>|H(ϑ<sub>1</sub>)|</th><th>∠H(ϑ<sub>1</sub>)</th></tr></thead><tbody><tr><td>⋮</td><td>⋮</td><td>⋮</td></tr><tr><td>ϑ<sub>Nϑ</sub></td><td>|H(ϑ<sub>Nϑ</sub>)|</td><td>∠H(ϑ<sub>Nϑ</sub>)</td></tr></tbody></table>

<table><caption>Table 13: Output file format of freesurface.00XXX.dat</caption><thead><tr><th>x<sub>1</sub></th><th>y<sub>1</sub></th><th>|η(\vec{x}<sub>1</sub>)|</th><th>∠η(\vec{x}<sub>1</sub>)</th><th>Re[η(\vec{x}<sub>1</sub>)]</th><th>Im[η(\vec{x}<sub>1</sub>)]</th></tr></thead><tbody><tr><td>⋮</td><td>⋮</td><td>⋮</td><td>⋮</td><td>⋮</td><td>⋮</td></tr><tr><td>x<sub>Npanel</sub></td><td>y<sub>Npanel</sub></td><td>|η(\vec{x}<sub>Npanel</sub>)|</td><td>∠η(\vec{x}<sub>Npanel</sub>)</td><td>Re[η(\vec{x}<sub>Npanel</sub>)]</td><td>Im[η(\vec{x}<sub>Npanel</sub>)]</td></tr></tbody></table>

that depend on the user choice QTF post-processing parameters in Nemoh.cal. The QTF values are given in the absolute value with the phase in deg and real-imaginary parts. The QTF values are normalized by $ρg$. The 'frequency' type, [rad/s, Hz, s], depends on the user choice in the Nemoh.cal. The format of the output file is given in Table 14. Only the lower triangular part of the QTF matrix is saved in the file. The full difference-frequency QTF matrix can be constructed with the lower triangular part of the matrix and the upper triangular part which is in conjugate-symmetric with the lower part. The upper triangular part of the sum-frequency QTF is symmetric with the lower triangular part. A Matlab file for reading this output file is provided in matlabRoutines/ and will be described in the next section.

<table><caption>Table 14: Output file format of OUT_QTFM_N.dat and OUT_QTFP_N.dat</caption><thead><tr><th>f<sub>11</sub></th><th>f<sub>21</sub></th><th>β<sub>11</sub></th><th>β<sub>21</sub></th><th>DoF<sub>1</sub></th><th>|QTF|/ρg</th><th>∠QTF</th><th>Re[QTF]/ρg</th><th>Im[QTF]/ρg</th></tr></thead><tbody><tr><th>f<sub>12</sub></th><th>f<sub>21</sub></th><th>β<sub>11</sub></th><th>β<sub>21</sub></th><th>DoF<sub>1</sub></th><th>|QTF|/ρg</th><th>∠QTF</th><th>Re[QTF]/ρg</th><th>Im[QTF]/ρg</th></tr><tr><td>⋮</td><td>⋮</td><td>⋮</td><td>⋮</td><td>⋮</td><td>⋮</td><td>⋮</td><td>⋮</td><td>⋮</td></tr><tr><th>f<sub>1Nf</sub></th><th>f<sub>2Nf</sub></th><th>β<sub>1Nbeta</sub></th><th>β<sub>2Nbeta</sub></th><th>DoF<sub>NDof</sub></th><th>|QTF|/ρg</th><th>∠QTF</th><th>Re[QTF]/ρg</th><th>Im[QTF]/ρg</th></tr></tbody></table>

# 4 Supporting Matlab files

Following Matlab directories, containing a set of functions, are provided in matlabRoutines/,

* **NemohWrapper**: This is for running NEMOH executables in MATLAB environment.

* **GMSHconverter**: There are two codes, first, for converting body mesh file output from GMSH to NEMOH, DIODORE and HYDROSTAR formats and second, for converting free-surface mesh file output from GMSH to NEMOH and HYDROSTAR formats.

* **postproc_testcases**: There are two main codes for plotting results from NEMOH and HYDROSTAR. First, for plotting hydrodynamic coefficients results and second
for plotting QTF results. This code can be executed after all data in one specific
test cases are obtained.

5 Test-cases

The following test cases are provided for verification with the original Aquaplus software (which is the ancestor of NEMOH) and/or HYDROSTAR commercial software [2]. Note that Tecplot's layout files .lay are provided in the relevant test case folder for plotting in Tecplot.

* **1_Cylinder**: half-symmetric body mesh, deep water case, wave direction 0°. The results are shown in Fig. 4.

<figure><img src="image_5.png" /><figcaption>Figure 4: Comparison of the first order results between NEMOH and AQUAPLUS for the test case 1_Cylinder</figcaption></figure>

* **2_2Bodies**: half-symmetric body mesh, two different bodies, water depth 20 m, wave direction 45°. The results are shown in Fig. 5.

* **3_Nonsymmetrical**: full non-symmetrical body mesh, deep-water, wave direction 0°. Comparison of NEMOH results against Aquaplus are shown in Fig. 6, a slight difference are observed in the results. Added mass and damping coefficients comparison between NEMOH and HYDROSTAR are shown in Fig. 7 and for the excitation force is in Fig. 8. Good agreement between NEMOH and HYDROSTAR is achieved.

* **4 Postprocessing**: half-symmetric body mesh, water depth 10 m, wave direction 0°. This test case shows a comparison of the free-surface elevation and the Kochin function. The results are shown in Fig. 9. The phase difference, ±π/2, of wave elevation between NEMOH and AQUAPLUS is due to different conventions of the incident potential.
<figure><img src="image_6.png" /><figcaption>Figure 5: Comparison of the first order results between NEMOH and AQUAPLUS for the test case 2_2Bodies</figcaption></figure>

* **5_QuickTest** shows a quantitative comparison of force and free-surface for the first-frequency diffraction problem. The comparison results are shown in the command window for all the test cases inside the directory `5_QuickTest`.

* **6_box_coarsemesh** is showing the procedure for running the code starting with the executable **mesh** with a coarse description mesh file, **meshbox**. No reference data is given in this test case.

* **7_Solvers_Check_OC3** is testing the performance of the three difference linear solvers, Gauss elimination, LU decomposition and GMRES. Reference logfiles reporting the computational time of the solvers are provided.

* **8a_Cylinder_irregfreq** shows the results with and without irregular frequencies removal (IRR) method. The results are verified against HYDROSTAR with IRR and shown in Fig. 11 for the added mass and damping coefficients and in Fig. 12 for the excitation forces. The mesh used was obtained using GMSH [5] and is shown in Fig. 10.
<figure><img src="image_7.png" /><figcaption>Figure 6: Comparison of the first order results between NEMOH and AQUAPLUS for the test case **3_Nonsymmetrical**</figcaption></figure>
<figure><img src="image_8.png" /></figure>

<figure><img src="image_9.png" /></figure>

<figure><img src="image_10.png" /></figure>

<figure><img src="image_11.png" /></figure>

<figure><img src="image_12.png" /></figure>

<figure><img src="image_13.png" /><figcaption>(a) added mass</figcaption></figure>

<figure><img src="image_14.png" /></figure>

<figure><img src="image_15.png" /></figure>

<figure><img src="image_16.png" /></figure>

<figure><img src="image_17.png" /></figure>

<figure><img src="image_18.png" /></figure>

<figure><img src="image_19.png" /><figcaption>(b) damping coefficients</figcaption></figure>

Figure 7: Comparison of added mass and damping coefficients between NEMOH, red dashed-line, and HYDROSTAR, blue solid-line, for the test case **3_Nonsymmetrical**
<figure><img src="image_20.png" /><figcaption>Figure 8: Comparison of excitation force between NEMOH, red dashed-line, and HY-DROSTAR, blue solid-line, for the test case 3_Nonsymmetrical</figcaption></figure>
<figure><img src="image_21.png" /><figcaption>Figure 9: Comparison of the diffracted wave elevation, the diffraction Kochin function between NEMOH and AQUAPLUS, test case 4 Postprocessing</figcaption></figure>
<figure><img src="image_22.png" /><figcaption>Figure 10: Body boundary mesh for the Cylinder used for test case 8a\_Cylinder\_irregfreq and 8b\_QTF\_Cylinder.</figcaption></figure>
<figure><img src="image_23.png" /></figure>

<figure><img src="image_24.png" /></figure>

<figure><img src="image_25.png" /></figure>

<figure><img src="image_26.png" /></figure>

<figure><img src="image_27.png" /></figure>

<figure><img src="image_28.png" /></figure>

(a) added mass

<figure><img src="image_29.png" /></figure>

<figure><img src="image_30.png" /></figure>

<figure><img src="image_31.png" /></figure>

<figure><img src="image_32.png" /></figure>

<figure><img src="image_33.png" /></figure>

<figure><img src="image_34.png" /></figure>

(b) damping coefficients

Figure 11: Comparison of added mass and damping coefficients between NEMOH without irregular frequencies removal (IRR), green dash-dotted line, NEMOH with IRR, red dashed-line and HYDROSTAR with IRR, blue solid-line, for the test-case 8a_Cylinder_irregfreq
<figure><img src="image_35.png" /><figcaption>Figure 12: Comparison of excitation force between NEMOH without irregular frequencies removal (IRR), green dash-dotted line, NEMOH with IRR, red dashed-line and HYDROSTAR with IRR, blue solid-line, for the test-case 8a_Cylinder_irregfreq</figcaption></figure>
The following test cases are provided for the QTF verification with HYDROSTAR software [2].

* **8b_QTF_Cylinder**: full body mesh with lid panels, CoG (0, 0, 0), deep water, wave direction 0°, the difference-frequency QTF DUOK+HASBO. The results are shown in the density plot, Fig. 13, and in the off-diagonal line plot, Fig. 14. The mesh used was obtained using GMSH [5] and is shown in Fig. 10.

<figure><img src="image_36.png" /></figure>

Figure 13: Density plots of the normalized surge difference frequency QTF magnitude (without the free-surface integrals) for the floating Cylinder (test case 8b_QTF_Cylinder); on the top, middle and bottom rows are for surge, heave and pitch, respectively. HYDROSTAR results are on the left column, NEMOH results are on the middle column and the difference on the right column.

* **9_QTF OC4_Semisubmersible**: full body mesh with lid panels, CoG (0, 0, 0), water depth 200 m, wave direction 0° and 30°, bi-directional QTF, the difference-frequency QTF DUOK+HASBO. The results are shown in the density plot, Fig. 16 and in the off-diagonal line plot, Fig. 17, of the bi-directional QTF ($\beta_1, \beta_2$) = (0°, 30°). The mesh used was obtained using GMSH [5] and is shown in Fig. 15.

* **10a_QTF Software**: half symmetric body mesh with lid panels, CoG (0, 0, -71.56), water depth 200 m, wave direction 0° and 30°, bi-directional QTF, the difference-frequency QTF DUOK+HASBO. The results are shown in the density plot, Fig. 19 and in the off-diagonal line plot, Fig. 20, of the bi-directional QTF ($\beta_1, \beta_2$) = (0°, 30°). The mesh used was obtained using GMSH [5] and is shown in Fig. 18.
<figure><img src="image_37.png" /><figcaption>Figure 14: Comparison of the off-diagonal difference frequency QTF for the Cylinder (test case 8b_QTF_Cylinder) between HYDROSTAR, real part (blue, solid-line), imaginary part (blue, dashed-dot line) and NEMOH, real part (red, dashed-line), imaginary part (red, dotted-line). On the top-left is for surge, on the top-right for heave (the first off-diagonal) and the bottom for pitch (the third off-diagonal).</figcaption></figure>

<figure><img src="image_38.png" /><figcaption>Figure 15: Body boundary mesh for the OC4-platform used for test case 9_QTF_OC4_Semisubmersible.</figcaption></figure>
<figure><img src="image_39.png" /><figcaption>Figure 16: Density plots of the normalized bi-directional, ($\beta_1, \beta_2$) = (0°, 30°), surge difference frequency QTF magnitude (without the free-surface integrals) for the floating OC4-semisubmersible platform (test case 9\_QTF\_OC4\_Semisubmersible); on the top, middle and bottom rows are for surge, heave and pitch, respectively. HYDROSTAR results are on the left column, NEMOH results are on the middle column and the difference on the right column.</figcaption></figure>

<figure><img src="image_40.png" /><figcaption>Figure 17: Comparison of the off-diagonal bi-directional, ($\beta_1, \beta_2$) = (0°, 30°), difference frequency QTF for the OC4-semisubmersible platform (test case 9\_QTF\_OC4\_Semisubmersible) between HYDROSTAR, real part (blue, solid-line), imaginary part (blue, dashed-dot line) and NEMOH, real part (red, dashed-line), imaginary part (red, dotted-line). On the top-left is for surge, on the top-right for heave (the first off-diagonal) and the bottom for pitch (the third off-diagonal).</figcaption></figure>
<figure><img src="image_41.png" /><figcaption>Figure 18: Body boundary mesh and free surface mesh for the SOFTWIND platform, used in test cases 10a_QTF SoftWind and 10b_QTF SoftWind FS</figcaption></figure>

* 10b_QTF SoftWind FS: half symmetric body mesh without lid panels, half symmetric free-surface mesh, CoG (0, 0, -71.56), water depth 200 m, wave direction 0°, the sum-frequency total QTF DUOK+HASBO+HASFS+ASYMP. The results are shown in the density plot, Fig. 21 and in the off-diagonal line plot, Fig. 22. The mesh used was obtained using GMSH [5] and is shown in Fig. 18.

* 11_QTF OC3 Hywind: full body mesh with lid panels, CoG (0, 0, 0), water depth 320 m, wave direction 0°, NEMOH1 uses GMRES solver, the difference-frequency QTF DUOK+HASBO. The results are shown in the density plot, Fig. 24 and in the off-diagonal line plot, Fig. 25, of the difference-frequency QTF. The mesh used was obtained using GMSH [5] and is shown in Fig. 23.

Full description of the QTF test-cases results is reported in [10, 11]. Note that the QTF comparisons between NEMOH and HYDROSTAR for the bidirectional case are in good agreement only if the direction is switched, in NEMOH $\beta = (\beta_1, \beta_2)$ and in Hydrostar $\beta = (\beta_2, \beta_1)$; further investigation regarding this is needed. The imaginary part of QTFs have also a difference sign between NEMOH and HYDROSTAR that may be due to different conventions of the incident potential.
<figure><img src="image_42.png" /><figcaption>Figure 19: Density plots of the normalized bi-directional, ($\beta_1, \beta_2$) = (0°, 30°), surge difference frequency QTF magnitude (without the free-surface integrals) for the floating SOFTWIND platform (test case 10a\_QTF\_SOFTWIND); on the top, middle and bottom rows are for surge, heave and pitch, respectively. HYDROSTAR results are on the left column, NEMOH results are on the middle column and the difference on the right column.</figcaption></figure>

<figure><img src="image_43.png" /><figcaption>Figure 20: Comparison of the off-diagonal bi-directional, ($\beta_1, \beta_2$) = (0°, 30°), difference frequency QTF for the SOFTWIND platform (test case 10a\_QTF\_SOFTWIND) between HYDROSTAR, real part (blue, solid-line), imaginary part (blue, dashed-dot line) and NEMOH, real part (red, dashed-line), imaginary part (red, dotted-line). On the top-left is for surge, on the top-right for heave (the first off-diagonal) and the bottom for pitch (the third off-diagonal).</figcaption></figure>
<figure><img src="image_44.png" /><figcaption>Figure 21: Density plots of the normalized sum-frequency full QTF magnitude (including the free-surface integrals) for the floating SOFTWIND platform (test case 10b_QTF_SOFTWIND_FS); on the top, middle and bottom row are for surge, heave and pitch, respectively. HYDROSTAR results are on the left column, NEMOH results are on the middle column and the difference in the right column.</figcaption></figure>

<figure><img src="image_45.png" /><figcaption>Figure 22: Comparison of the off-diagonal sum-frequency full QTF for SOFTWIND platform (test case 10b_QTF_SOFTWIND_FS) between HYDROSTAR, real part (blue, solid-line), imaginary part (blue, dashed-dot line) and NEMOH, real part (red, dashed-line), imaginary part (red, dotted-line). On the top-left is for surge, on the top-right for heave (the first off-diagonal) and the bottom for pitch (the third off-diagonal).</figcaption></figure>
<figure><img src="image_46.png" /><figcaption>Figure 23: Body boundary mesh for OC3-HYWIND platform, test case 11_QTF_OC3_Hywind.</figcaption></figure>
<figure><img src="image_47.png" /><figcaption>Figure 24: Density plots of the normalized surge difference frequency QTF magnitude (without the free-surface integrals) for the floating OC3-HYWIND platform (test case **11_QTF_OC3_Hywind**); on the top, middle and bottom rows are for surge, heave and pitch, respectively. HYDROSTAR results are on the left column, NEMOH results are on the middle column and the difference on the right column.</figcaption></figure>
<figure><img src="image_48.png" /></figure>

Figure 25: Comparison of the off-diagonal difference frequency QTF for the OC3-HYWIND platform (test case **11_QTF_OC3_Hywind**) between HYDROSTAR, real part (blue, solid-line), imaginary part (blue, dashed-dot line) and NEMOH, real part (red, dashed-line), imaginary part (red, dotted-line). On the top-left is for surge, on the top-right for heave (the first off-diagonal) and the bottom for pitch (the third off-diagonal).

## Acknowledgement

This work was done within the framework of the FLOATECH project. This project has received funding from the European Unions Horizon 2020 research and innovation program under grant agreement No 101007142.

We thank Moran Charlou from LHEEA, ECN for his help in finalizing NEMOH v3.0 release in the gitlab.

## References

[1] A. Babarit and G. Delhommeau. Theoretical and numerical aspects of the open source BEM solver NEMOH. In *Proceedings of the 11th European Wave and Tidal Energy Conference*, Sept 2015.

[2] Bureau Veritas. HYDROSTAR Software v8.14, 2020.

[3] Xiao-Bo Chen. *Etudes des rponses du second ordre dune structure soumise une houle alatoire*. PhD Thesis, Universit de Nantes, 1988.

[4] G. Delhommeau. Amlioration des performances des codes de calcul de diffraction-radiation au premier ordre. In *Proc. Of 2nd Journes de lhydrodynamique*, 1989.

[5] Christophe Geuzaine and Jean-Franois Remacle. GMSH Software v4.8.4, 2021.

[6] R. Kurnia and G. Ducrozet. NEMOH: Open-source boundary element solver for computation of first- and second-order hydrodynamics loads in frequency domain. *Computer Physics Communications*, 2023. In preparation.

[7] M. Malenica and X.B. Chen. On the Irregular Frequencies Appearing In Wave Diffraction-Radiation Solutions. *International Journal of Offshore and Polar Engineering*, 8(02), 06 1998.
[8] B. Molin. Second-order diffraction loads upon three-dimensional bodies. *Applied Ocean Research*, 1(4):197-202, 1979.

[9] Maxime Philippe, Christophe Peyrard Adrien Combourieu, Fabien Robaux, Grard Delhommeau, and Aurlien Babarit. Introducing Second Order Low Frequency Loads in the Open-Source Boundary Element Method Code Nemoh. In *Proceedings of the 11th European Wave and Tidal Energy Conference*, Sept 2015.

[10] R. Kurnia, G. Ducrozet. Computation of Second-order Wave Loads on Floating Offshore Wind Turbine Platforms In Bi-chromatic Bi-directional Waves Using Open-Source Potential Flow Solver NEMOH. In *18mes Journes de l'Hydrodynamique*, 2022.

[11] R. Kurnia, G. Ducrozet, and J.-C. Gilloteaux. Second Order Difference- and Sum-Frequency Wave Loads in the Open-Source Potential Flow Solver NEMOH. In *International Conference on Offshore Mechanics and Arctic Engineering*, volume 5A: Ocean Engineering, 06 2022. V05AT06A019.

[12] V. Frayss, L. Giraud, S. Gratton, and J. Langou. A set of gmres routines for real and complex arithmetics on high performance computers. Technical Report TR/-PA/03/3, CERFACS, 2003.