The purpose of the BEMUse library is threefold:
BEMUse is written in C++ and can be compiled in two configurations depending on your application case:
The core architecture of BEMUse is identical in both cases.
WAMIT
®, NEMOH
and .stl
geometry formats; WAMIT
® and NEMOH
geometry formats; Boundary
class.BEMUse is developed by Joseph Saverin and is distributed under the GNU General Public License Version 2.0, copyright © Joseph Saverin 2022.
In order to carry out an analysis with BEMUse, you need to specify the geometry which you wish to analyse and the simulation parameters. The geometry is specified over the command line. There are two options for specifying a geometry.
You can import an external geometry simply by specifying a WAMIT
® (.gdf
), NEMOH
(.mar
) or (.stl
) geometry file.
The specified path should be relative to the directory in which the executable is found. An example might be:
BEMUse <ExternalGeos/MyGeo.mar> <OutputPrefix>
BEMUse will automatically recognise the geometry type based on the file suffix. As the surface elements are externally defined,
you do not need to specify the input files Discretisation.bemin
or Dimensions.bemin
(these are described below).
A range of template geometries are available which are already parametrised in BEMuse, so that you only need to specify the discretisation or dimensions. These geometries include analytical geometries as well as standard geometries for floating offshore wind turbine platforms. This list is regularly being extended and if you would like to have your geometry on this list, please get in touch. In order to see a list of the available geometries, type the following into the command line:
BEMUse Templates
In order to check what the necessary inputs (described below) are for your chosen template geometry, <GeoType>
, you need simply to type:
BEMUse Inputs <GeoType>
You are required to specify a directory named Outputs
within the directory of the executable where the output files will be written.
In order to discern between multiple runs, you are also required to specify the output file prefix.
Provided you have provided the input parameters (described below), a complete call to execute BEMUse and write the outputs will look like this:
BEMUse <GeoType> <OutputPrefix>
That simple! If there are insufficient inputs defined for the chosen geometry, the behaviour will be undefined.
A range of simulation parameters also need to be defined for a BEMUse simulation. These are defined in text-based input files.
You are required to specify a directory named Inputs
within the directory of the executable from where the input files will be read.
These files are defined below along with the corresponding variables:
Frequencies.bemin
: Specify here the desired frequencies of analysis
Discretisation.bemin
: Specify here the discretisation for the template geometries. These have three formats:
IFR
feature has been activated;Dimensions.bemin
- Specify here the dimensions for the template geometries. These have two formats:
Inertia.bemin
- Specify here the inertial parameters of the geometry. These are important for the calculation of the RAOs of the geometry. These include:
SolverParams.bemin
- Specify solver flags
Discretisation.bemin
file In this case you really don't need to do very much at all, just follow the steps in the GUI. Once you have specified a geometry, you can toggle any of the visualisation options at the top right of the window. BEMUse solves a radiation potential for each of the six degrees of freedom (surge, sway, heave, roll, pitch, yaw) at each frequency. BEMUse solves a diffraction potential for each of the six degree of freedom for each incoming wave angle selected in the specification of the analysis. The radiation potential and diffraction potential can only be visualised once an analysis has completed. The free surface visualisation is only possible if you have specified an exterior free surface grid in the creation of the geometry.
A number of options exist for modifying the visualisation:
Shift
button and use the scroll on your mouse;Ctrl
button and use the scroll on your mouse;Alt
button and use the scroll on your mouse. I am currently in the process of preparing a simple reference paper for BEMUse on ArXiv. In the meantime, if you use BEMUse please cite it in your publication as follows:
The only dependency of BEMUse is the eigen lineary algebra library. The compilation of BEMUse has been tested with GCC (v7.3).
Two options are available for compiling:
qmake: BEMUse was prepared with the cross-platform development environment Qt Creator. The .pro file required for compiling with qmake has been provided. You simply need to include the path to the eigen directory on your device. For example:
INCLUDEPATH += -L$$PWD/../eigen/
As the GUI config relies on the Qt widget libraries, this configuration is probably best compiled with [Qt Creator].
In order to avoid compiling the GUI config the entire section in the .pro
file below the line # GUI configuration
should be commented out.
CMake: The CMakeLists.txt
file has been provided.
You simply need to point the EIGEN_DIR
variable to the eigen directory on your device.
For example:
set(EIGEN_DIR C:\\MyCodeisHere\\eigen\\)
Nb. The CMakeLists file is currently only configured to compile the command-line version of BEMUse.
Pre-built binaries are available on the releases page.
A [readthedocs] page is currently being prepared.