Manual
Manual
0)
Reference Manual
July 2022
2
Copyright Notice and Disclaimers
Proper acknowledgment should be given in publications resulting from the use of these
software.
3
4
Acknowledgments
We would like to thank all the code users through the years, in particular to María Castro, María
José Orjuela, Francisco González, Carlos Romero, and especially to Ángel Gabriel Vega, who is giving
momentum to the project and it is the author of the tutorials. Their experience have been very valuable
for debugging and developing the software. We would like to make a special mention to Luis Alberto
Padrón for pushing and supporting this open source enterprise from many angles.
This software has been developed with the support of research projects:
• PID2020-120102RB-I00, funded by the Agencial Estatal de Investigación of Spain,
MCIN/AEI/10.13039/501100011033.
5
6
Contents
1 Overview 9
1.1 Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
1.2 How to download . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10
1.3 How to install . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
1.3.1 GNU/Linux *.deb installer . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
1.3.2 GNU/Linux *.sh installer . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
1.3.3 Windows installer . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
1.4 How to use . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12
2 Input file 15
2.1 Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15
2.2 General sections . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17
2.2.1 Section problem . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17
2.2.2 Section frequencies . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17
2.2.3 Section settings . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18
2.2.4 Section export . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20
2.2.5 Materials . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20
2.3 Low-level entities of the model (mesh) in native format . . . . . . . . . . . . . . . . . . . . 23
2.3.1 Section nodes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23
2.3.2 Section elements . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24
2.3.3 Section parts . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25
2.4 High-level entities of the model (topology) . . . . . . . . . . . . . . . . . . . . . . . . . . . 25
2.4.1 Section boundaries . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25
2.4.2 Section be bodyloads . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26
2.4.3 Section fe subregions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27
2.4.4 Section regions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27
2.5 Cross sections . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28
2.5.1 Discrete translational springs/dashpots (distra) . . . . . . . . . . . . . . . . . . . . 28
2.5.2 Discrete rotational/translational springs/dashpots (disrotra) . . . . . . . . . . . . 30
2.5.3 Point mass (pmass) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30
2.5.4 Bar finite element (bar) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30
2.5.5 Beam finite element obtained from the degeneration of the solid (degbeam) . . . . 30
2.5.6 Straight beam finite element (strbeam) . . . . . . . . . . . . . . . . . . . . . . . . 30
2.5.7 Shell finite element obtained from the degeneration of the solid (degshell) . . . . . 30
2.6 Conditions of the model . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30
2.6.1 Section symmetry planes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30
2.6.2 Section conditions over be boundaries . . . . . . . . . . . . . . . . . . . . . . 31
2.6.3 Section conditions over nodes . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32
2.6.4 Section incident waves . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33
3 Output files 35
3.1 Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35
3.2 Nodal solutions file (*.nso) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35
3.3 Element solutions file (*.eso) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38
3.4 Gmsh results file (*.pos) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41
7
8 CONTENTS
Overview
In this chapter, a brief overview of MultiFEBE download, install and usage is given. Since MultiFEBE
is open source (GPLv2 license), it can also be compiled by you, see Appendix A.
1.1 Introduction
MultiFEBE is a solver for performing linear elastic static and time harmonic analyses of continuum and
structural mechanics problems comprising multiple interacting regions. It is based on the Finite Element
Method (FEM) and the Boundary Element Method (BEM), which are combined in order to offer many
advanced features not found elsewhere. These distinctive features have been published in many scientific
papers, from which [1, 2, 3, 4, 5] can be highlighted. No doubt, this program is heir to boundary element
codes published by Professor Jose Domínguez [6].
Linear elastic solid materials are available for regions modeled by finite elements or boundary elements
in static and time harmonic analysis, whereas linear poroelastic (Biot’s theory) and inviscid fluid materials
are available only for regions modeled by boundary elements in time harmonic analysis (wave propagation
problems).
It has a full set of linear elastic finite elements:
It also has a full set of boundary elements for linear elastic solids, poroelastic media and inviscid
fluids:
9
10 CHAPTER 1. OVERVIEW
Finite elements can be coupled to ordinary boundary, crack boundary and body load elements in
order to study Soil-Structure, Fluid-Structure and Soil-Fluid-Structure Interaction in wave propagation
problems. This type of mcoupling
Figure 1.1 shows an example of the modeling capabilities, where an Offshore Wind Turbine installed
on a jacket structure founded on suction caissons. Finite elements model the whole foundation and
structure, which includes additional masses in order to incorporate Water-Structure Interaction, and
boundary and body load elements (geometrically coincident with suction caissons skirts and lids) for
modeling Soil-Structure Interaction. Soil free-surface discretization is not shown for the sake of clarity.
$ chmod +x multifebe-x.x.x-Linux.sh
$ ./multifebe-x.x.x-Linux.sh
5. Follow the instructions of the installer. The program files are decompressed by default in the same
directory as the installer. You will have to copy or move the binary multifebe to /usr/bin, or
create a simbolic link, so that it is available in the terminal. See more details in Appendix A.
$ multifebe --help
it will then print a brief help about how to run it and the available options:
$ multifebe --help
Usage:
multifebe [options]
Options:
-i, --input STRING Input file name [required]
-o, --output STRING Output files basename [default: input file name]
-m, --memory INTEGER Max. memory allowed (GB) [default: 0 (unlimited)]
-b, --verbose INTEGER Verbose level: 0-10 [default: 1]
-v, --version Program version
-h, --help This help
Note that each option can start with one or two hyphens, followed by respectively the short or long
name of the option. In the previous case, we could request help from the program by writing either -h
or --help. Some options does not require a value like -h or -v, but other options require a string or a
number, which are written after each of them. Options are self-descriptive from the program help, but
more details are given in Table 1.1.
Option name
Short Long Argument Description
MultiFEBE uses OpenMP in order to take full advantage of multi-core shared-memory computers.
By default, the program uses all the available cores, but it is possible to control the number of cores used
by previously defining the environment variable OMP_NUM_THREADS. Imagine you would like to only use 4
cores, then in GNU/Linux you would have to execute:
$ export OMP_NUM_THREADS=4
$ set OMP_NUM_THREADS=4
Figure 1.3 shows a MultiFEBE usage flowchart. It operates mainly through plain text files. The
program reads the input file in order to define the case (type of analysis, geometry topology, mesh,
materials, boundary conditions, results to be calculated, etc). Results are written into a set of output
files which depends on the type of results requested in the input file.
Figure 1.3: MultiFEBE usage flowchart. Orange blocks corresponds to MultiFEBE solver files and
processes. Blue blocks corresponds to Gmsh pre- and post-processor files and processes. MultiFEBE is
able to read Gmsh mesh files and write Gmsh postprocessing results files. Green blocks corresponds to
the possibility of generating the mesh in MultiFEBE native format from GiD and a *.bas template file.
Most of the user effort is usually spent in preparing the geometry, mesh and then post-processing
the results. In order to facilitate these tasks, we have included the possibility of reading and writing
Gmsh files. Gmsh is a powerful free and open-source pre- and post-processor. The only Gmsh file
format that MultiFEBE can read is MSH file format version 2.2, which is the default file format up to
Gmsh 3.0.6. Newer Gmsh versions save mesh files in newer mesh file formats by default. However, you
14 CHAPTER 1. OVERVIEW
can also export meshes in older file format versions by doing File>Export>Format: Mesh - Gmsh MSH
(*.msh)>Format: Version 2 ASCII when using the GUI, or including the option -format msh2 when
using the command-line. This integration enables the user to perform, for example, extensive parametric
studies with relatively little extra effort, and effective visualization of results. We have also created a
GiD *.bas template file which allows exporting the mesh file in the MultiFEBE native format (located in
the bin/ folder). We intend to improve the integration of MultiFEBE solver in GiD and others pre- and
post-processors in the near future. In the same vein as PILEDYN, we have also created some problem-
specific https://www.mathworks.com/MATLAB pre- and post-processors that will be available in our
research group webpage.
The proposed workflow to perform an analysis is:
1. Decide the modelling approach, which will lead to the required topology and geometry. We suggest
using Gmsh for creating the geometry, which allows defining the geometry parametrically through
simple .geo files.
2. Generate the mesh with appropriate element sizes. In Gmsh, this can be easily done by defining
element sizes all over the geometry using variables. Then you can set their value in order to generate
a mesh. Once you have your solver results, you may have to return to this step to generate additional
refined meshes in order to check results convergence.
3. Open your favourite plain text text editor, and write the case input file according to the required
data, as shown in Chapter 2. If you use Gmsh for generating the mesh file, then you will have to
define the path to it in section [settings].
4. Run the solver. Copy the solver executable to the folder where the case input file is located. Then,
open a terminal in this folder and execute:
$ multifebe -i case.dat
where it has been assumed that the case input file is named case.dat. BEM models may require
a huge amount of memory. We recommend that if the model is relatively big, or you are running
the solver on a laptop, then you have to limit the available RAM for the program by including the
following option:
$ multifebe -i case.dat -m 4
which will stop the solver if the predicted required memory is greater that 4 GB (or any other
quantity smaller than the available memory in the computer). This will prevent the computer from
swapping and halting if such amount of memory is required.
5. Once the solver ends, the results are exported to one or more output files, see Chapter 3. If you
used a Gmsh mesh file (*.msh), Gmsh post-processing files *.pos will be generated. If that is
the case, you can visualize the results in the Gmsh GUI. Other text files containing node-by-node,
element-by-element, or other results can be generated (depending on how you set the case input
file). This text files can be easily processed by spreadsheet programs, MATLAB/Octave, GNU
utilities such as awk, etcetera. We recommend the latter, as it is particularly fast once you learn
how to use it. They can also be plotted through GNU/Linux utilities such as GNUPlot.
Chapter 2
Input file
2.1 Introduction
The input file is a plain text file which contains the case data. In the following, we will assume that
the name of the input file name is input.dat, but any other name and extension will also be valid. The
important fact is that the file must be a plain text file, and thus it must be edited as such in plain text
editors such as Notepad, Notepad++ or others in Windows (but not Word or LibreOffice!), and emacs,
gedit, vim or others in GNU/Linux environments.
The case data is divided into sections. Each section is a block of data related to an aspect of the case
or the solver settings. Each section begins with a line exclusively containing a header with the section
name between brackets, i.e. [section name], and it ends when all the required data has been introduced
or when another section header appears. It is important to note that its location within the file is not
relevant. The data required for a section is defined by one or more lines after the header line. Each section
has its own section format, which can be in the form of simple statements (keyword = values, entity
id: values), or a sequence of numbers and strings. Only the recognized sections are read. Therefore,
comments can be introduced outside the recognized ones (see example below). Recognized sections are
shown in Table 2.1. Some sections are required (mandatory), some sections are required depending on
the data introduced in other sections (dependant), and others are completely optional.
input.dat
[case description] <-- this is an unrecognized section used as a comment section
3x3 pile group analysis of stresses
[problem]
n = 3D
type = mechanics
analysis = harmonic
[frequencies]
Hz
lin
100
0.01
10.
[symmetry planes]
plane_zx: symmetry
plane_yz: antisymmetry
...
All the identifiers of model entities (regions, boundaries, elements, nodes, etc) must be integers greater
than 0. Floating point numbers can be expressed as 125. (simple precision), 1.25e2 (simple precision)
or 1.25d2 (double precision). Complex numbers are expressed as (2.d3,1.d1).
15
16 CHAPTER 2. INPUT FILE
General sections
type mandatory laplace Laplace problem (unmaintained, it may not work properly)
mechanics Mechanics problem
[problem]
n = 2D
type = mechanics
subtype = plane_strain
analysis = static
...
• list - Frequencies are defined by a given list of frequencies. The list can be unordered.
• lin - Frequencies are defined by a given number of uniformly (linearly) distributed frequencies
between a minimum and a maximum.
• log - Frequencies are defined by a given number of logarithmically distributed frequencies between
a minimum and a maximum.
The third line defines the number of frequencies. If the frequencies are defined by a list, these are
defined in the fourth and the following lines (as much as the number of frequencies). If the frequencies
are defined by a lin or log distribution of frequencies, the fourth and fifth lines respectively contains
the minimum and maximum frequency. The general format of the section depending on how frequencies
are defined (list, lin or log) can be illustrated as:
18 CHAPTER 2. INPUT FILE
input.dat input.dat input.dat
... ... ...
In the following, we are going the show three example of each way of defining the frequencies. In the
first place, we show how to define an analysis at frequencies 9 Hz, 2 Hz, 5 Hz and 4 Hz. Secondly, we
show how to define an analysis at 10 frequencies linearly distributed between 10 and 100 rad/s, i.e. 10
rad/s, 20 rad/s, ..., 100 rad/s. Last, we show how to define an analysis at 4 frequencies logarithmically
distributed between 10 and 10000 Hz, i.e. 10 Hz, 100 Hz, 1000 Hz and 10000 Hz.
input.dat (example of list) input.dat (example of lin) input.dat (example of log)
... ... ...
Geometrical parameters
Auxiliary files
formats: native or Gmsh (MSH version 2.2). The native format is a very easy to manually generate, but
it is also the file format which GiD generates after using the template file multifebe.bas (see Appendix
C). The Gmsh mesh file format 2.2 is the default file format generated by Gmsh from Gmsh version 2.0.0
up until 3.0.6. Newer versions (Gmsh 4.0.0 onwards) generate by default a new file format version 4.
However, you can still export meshes in this older file format versions by doing File>Export>Format:
Mesh - Gmsh MSH (*.msh)>Format: Version 2 ASCII when using the GUI, or including the option
-format msh2 when using the command-line. You could also read from another file the frequencies, for
example, if you save some standard set of frequencies in a file you can use in several cases, e.g. one-third
octave middle frequencies for sound analysis.
Most of the times, you would only need to define the path to a mesh file and its format. For example,
a Gmsh mesh file located in the same directory as the input file input.dat:
input.dat
...
[settings]
mesh_file_mode = 2 "pilegroup.msh"
...
[settings]
real_format = eng_simple
complex_notation = polar
...
2.2.5 Materials
This section allows the definition of a set of materials and its properties. The type of materials available
are three linear elastic materials: inviscid fluid, elastic solid, and Biot’s poroelastic medium [7]. Each
one of these represent a very different kind of material. The first one represents an acoustic medium,
where only longitudinal P waves can propagate. It is therefore appropriate to model sound propagation
through fluids like air or water. The second one is the common material for modelling structures, soils,
etc. In a continuum region, longitudinal P and transverse S waves can propagate. The last one represent
2.2. GENERAL SECTIONS 21
BE boundaries and BE body loads kinematic and stress resultants output file
Integer Iw Iw.m
Decimal Fw.d
Exponential Ew.d Ew.dEe
Real
Scientific ESw.d ESw.dEe
Engineering ENw.d ENw.dEe
a porous medium where a compressible fluid is present inside a elastic frame. In a continuum region, two
types of longitudinal waves (P1 and P2) and transverse S waves can propagate.
The section format is a sequence of numbers and strings, whose format can be described as follows:
general format of section [materials]
[materials]
<n = number of materials>
<material 1 identifier> <type of material> <property> <value> <property> <value> ...
<material 2 identifier> <type of material> <property> <value> <property> <value> ...
...
<material n identifier> <type of material> <property> <value> <property> <value> ...
The first line must contain the number of materials to be considered. Next, there must be as many
lines as the number of materials defined. Each line starts with the material identifier (a integer greater
than 0). Then, it follows with a string indicating the type of material to be defined in that line: fluid,
elastic_solid, or biot_poroelastic_medium. After defining the type of material, if follows several
pairs of string (property symbol) and real value (property value), which depends on the type of material.
If the type of material is fluid (which can be used only for time harmonic analysis), then it is
necessary to define two between the three following properties: bulk modulus K, density ρ and wave
propagation speed c. Optionally, you can define an articial hysteretic damping ratio ξ, which is zero by
default. See Table 2.6 for more details.
Bulk modulus K K
Density ρ rho
√
Wave propagation speed c = K/ρ c
Artificial hysteretic damping ratio ξ xi
Table 2.6: Properties of an inviscid fluid (fluid). Only usable for time harmonic analysis. At least two
between K, ρ and c must be defined. ξ is optional (ξ = 0 by default).
If the type of material is elastic_solid, then it is necessary to define two of the five following
properties: Young’s modulus E, bulk modulus K, Lamé’s first parameter, λ, shear modulus µ and
Poisson’s ratio ν. If a time harmonic analysis is going to be performed, it is mandatory to define the
density. Optionally, you can define the hysteretic damping ratio ξ, which is zero by default. See Table
2.7 for more details.
Table 2.7: Properties of an elastic solid (elastic_solid). At least two between E, K, λ, µ and ν must
be defined. ρ is mandatory for time harmonic analysis. ξ is optional (ξ = 0 by default).
If the type of material is biot_poroelastic_medium, then it is necessary to define two of the five
following properties of the solid phase: Young’s modulus E, bulk modulus K, Lamé’s first parameter, λ,
shear modulus µ and Poisson’s ratio ν. It is mandatory to define the solid and fluid phases densities, as
well as the porosity, coupling parameters, additional density and dissipation constant. Optionally, you
can define the solid phase hysteretic damping ratio ξ, which is zero by default. See Table 2.8 for more
details.
Let’s show a very simple example where we have two materials: water (c = 1480 m/s, ρ = 1000
kg/m3 ) and soil modelled as an elastic solid (E = 60 MPa, ν = 0.4, ρ = 2000 kg/m3 , ξ = 5%). In such a
case, the section should be written as:
2.3. LOW-LEVEL ENTITIES OF THE MODEL (MESH) IN NATIVE FORMAT 23
Solid phase
Table 2.8: Properties of a Biot’s poroelastic medium (biot_poroelastic_medium). At least two between
E, K, λ, µ and ν must be defined. ξ is optional (ξ = 0 by default). The other properties are mandatory.
input.dat
...
[materials]
2
1 fluid c 1480. rho 1000.
2 elastic_solid E 60.d6 nu 0.4 rho 2000. xi 0.05
...
• Element identifier.
• Type of element. It could be introduced via a string: line2, line3, tri3, tri6, quad4, quad8,
quad9; or a number: 1, 8, 2, 9, 3, 16, 10; respectively. Note that the numbers correspond to the
numbers used by the gmsh file format.
• List of tags, where the first auxiliary tag is mandatory, and corresponds to the identifier of the part
which the element belongs. The rest of the tags are optional and they are read, but they are not
used.
Let’s show an example of a mesh with 10 elements of the type line3 (quadratic line element), where
elements 1 to 5 belongs to part 1, and elements 6 to 10 belongs to part 2:
input.dat
...
[elements]
10
3 line3 1 1 1 3 2
2 line3 1 1 3 5 4
1 line3 1 1 5 7 6
4 line3 1 1 7 9 8
5 line3 1 1 9 11 10
6 line3 1 2 12 14 13
10 line3 1 2 14 16 15
8 line3 1 2 16 18 17
9 line3 1 2 18 20 19
7 line3 1 2 20 22 21
...
Note that given that we use an identifier for each element, the order is unimportant. The same happens
with other model entities such as nodes and parts.
2.4. HIGH-LEVEL ENTITIES OF THE MODEL (TOPOLOGY) 25
where <part name> is a string which allows labelling the part for easy identification. However, this is
not used in the rest of the case input file.
∂Ω = {. . . , Γj , . . .} (2.1)
whose orientation must be outwards from the BE region. A minus sign before Γj can be used to indicate
the reversion of the orientation of Γj in order to get a compatible ∂Ω.
There are two main classes of boundaries:
• Ordinary. An ordinary boundary is a boundary in the classical sense. It can be connected with
one or two BE regions. In both cases, the boundary can be connected with FE elements.
Ω1
Ω1
n n ∂Ω1 = {. . . , −Γ, . . .} −t −Γ
t Γ t Γ −n
n
∂Ω2 = {. . . , Γ, . . .} t Γ
Ω Ω2
Ω2
Figure 2.1: Ordinary Figure 2.2: Ordinary boundary connected with two regions
boundary connected with
one region
• Crack-like. A special boundary that lies inside a BE region and is composed by two crack-like
sub-boundaries (Γ+ and Γ− ) of opposite orientations. Thus, a crack-like boundary can be connected
only with one BE region. Generally speaking, it is the condensed geometric description of a null
thickness inclusion or void. Its orientation defines the orientation of the positive sub-boundary Γ+ ,
i.e. it defines which face is Γ+ and which face is Γ− .
26 CHAPTER 2. INPUT FILE
n t− = −t Γ−
t Γ n− = −n
w→0
n+ = n
t+ = t Γ+
Ω Ω
Each boundary is build up with unique boundary elements and nodes, which are defined by a “part”
of the mesh. Thus, all boundaries must be connected with one and only one mesh part. The orientation
of all boundary elements in that part must be the same, i.e. be compatible, which defines the orientation
of the boundary.
The first line indicates the number of boundaries. Then, one line per boundary indicating the bound-
ary identifier, the identifier of the part that discretize it, and finally the boundary class (ordinary or
crack-like). The general format of the section is:
general format of section [boundaries]
[boundaries]
<n = number of boundaries>
<boundary 1 identifier> <part identifier> <boundary class: ordinary or crack-like>
<boundary 2 identifier> <part identifier> <boundary class: ordinary or crack-like>
...
<boundary n identifier> <part identifier> <boundary class: ordinary or crack-like>
Next, it is shown an example with 4 boundaries, where boundary 1 is the part 1 of the mesh and is an
ordinary boundary, boundary 3 is the part 6 of the mesh and is an ordinary boundary, boundary 4 is
the part 2 of the mesh and is a crack-like boundary, and boundary 2 is the part 3 of the mesh and is an
ordinary boundary:
input.dat
...
[boundaries]
4
1 1 ordinary
3 6 ordinary
4 2 crack-like
2 3 ordinary
...
where the last two zeros at the end of the each line are mandatory, and they are going to be used in the
future for additional features.
2.4. HIGH-LEVEL ENTITIES OF THE MODEL (TOPOLOGY) 27
where the last two zeros at the end of the each line are mandatory, and they are going to be used in the
future for additional features.
• BEM (BE region). The region is treated by the BEM. Its discretization is defined by its boundary
∂Ω, which in general is built using a set of boundaries, which in turn is associated with mesh parts
and hence with boundary elements.
• FEM (FE region). The region is treated by the FEM. Its discretization is defined by a set of FE
subregions, which in turn is associated with parts and hence with finite elements. FE region can
only be made of elastic solid materials, i.e. finite elements for fluid or poroelastic medium are not
availabe.
The interaction (coupling) between BE regions is done through their shared boundaries, which must have
opposite orientation for each region, see Figure 2.2. The interaction between FE regions is done through
their shared nodes as usual. The interaction between BE boundaries and FE regions is done through
the BE boundaries and the boundary of the FE elements that shares the same position. The interaction
between BE and FE elements is automatically detected.
The format of this section is explained in the following. The first line indicates the number of regions.
Then, for each region there must be a block of data consisting of several lines of data. The first one is the
region identifier and the region class (discretization method: “fe” or “be”). If the region is a BE region,
then the second line indicates the number of boundaries and a list of boundaries (with their orientation
signs). If the region is a FE reigon, then the second line indicates the number of FE subregions and a
list of fe subregions. The third line defines the material. Then, only if the region is a BE region, the
fourth line defines the number and a list of BE body loads. Also, only if the region is a BE region and
the analysis is time harmonic, the fifth line defines the number and a list of incident fields. The general
format of the section is:
general format of section [regions]
[regions]
<n = number of regions>
...
<type of cross section 1> <m = n. of FE subregions> <subr. 1 id> <subr. 2 id> ... <subr. m id> ...
<type of cross section 2> <m = n. of FE subregions> <subr. 1 id> <subr. 2 id> ... <subr. m id> ...
...
<type of cross section n> <m = n. of FE subregions> <subr. 1 id> <subr. 2 id> ... <subr. m id> ...
• Local coordinates. It allows to establish the stiffnesses and viscous damping coeficients in local
coordinates, i.e. axial spring/dashpot in x′ direction (kx′ , cx′ ) and lateral springs in y ′ and z ′
directions (ky′ , cy′ , kz′ , cz′ ). In two-dimensional analysis, the local stiffness and damping coefficient
matrices are:
kx′ 0 −kx′ 0 cx′ 0 −cx′ 0
0 k ′ 0 −k ′ 0 c ′ 0 −c y ′
K′ = , C′ =
y y y
(2.2)
−kx′ 0 kx′ 0 −cx′ 0 cx′ 0
0 −ky′ 0 ky ′ 0 −cy′ 0 cy ′
In three-dimensional analysis:
kx′ 0 0 −kx′ 0 0 cx ′ 0 0 −cx′ 0 0
0 ky ′ 0 0 −ky′ 0 0 cy′ 0 0 −cy′ 0
0 0 kz ′ 0 0 −kz′ 0 0 cz ′ 0 0 −cz′
K′ =
,
C′ =
−kx′ 0 0 kx′ 0 0 −cx′ 0 0 cx ′ 0 0
0 −ky′ 0 0 ky ′ 0 0 −cy′ 0 0 cy′ 0
0 0 −kz′ 0 0 kz′ 0 0 −cz′ 0 0 cz ′
(2.3)
In this latter case, in order to uniquely define the local axis, a reference vector v2ref is required for
establishing the local y ′ axis. With all these information, we can define a coordinate transformation
matrix to build the definitive global stiffness and viscous damping matrix.
2.5. CROSS SECTIONS 29
• Global coordinates. It allows to establish the stiffnesses and viscous damping coeficients directly
in global coordinates, i.e. springs and dashpots in x, y and z directions: kx , cx , ky , cy , kz and, cz .
In two-dimensional analysis, the global stiffness and damping coefficient matrices are:
kx 0 −kx 0 cx 0 −cx 0
0 ky 0 −ky 0 cy 0 −cy
K= (2.4)
, C =
−kx 0 kx 0 −cx 0 cx 0
0 −ky 0 ky 0 −cy 0 cy
In three-dimensional analysis:
kx 0 0 −kx 0 0 cx 0 0 −cx 0 0
0 ky 0 0 −ky 0 0 cy 0 0 −cy 0
0 0 kz 0 0 −kz 0 0 cz 0 0 −cz
K=
,
C=
−kx 0 0 kx 0 0 −cx 0 0 cx 0 0
0 −ky 0 0 ky 0 0 −cy 0 0 cy 0
0 0 −kz 0 0 kz 0 0 −cz 0 0 cz
(2.5)
The syntax for such type of finite element is (<FE subregions> includes <m = n. of FE subregions>
<subr. 1 id> <subr. 2 id> ... <subr. m id>):
• 2D static analysis, distra elements in local coordinates:
format of section [cross sections] for distra elements
[cross sections]
...
distra <FE subregions> local <kx'> <ky'>
...
• 2D time harmonic analysis, distra elements in local coordinates (kx′ and ky′ as complex numbers):
format of section [cross sections] for distra elements
[cross sections]
...
distra <FE subregions> local <kx'> <ky'> <cx'> <cy'>
...
• 2D time harmonic analysis, distra elements in global coordinates (kx and ky as complex numbers):
30 CHAPTER 2. INPUT FILE
• 3D time harmonic analysis, distra elements in local coordinates (kx′ , ky′ and kz′ as complex num-
bers):
format of section [cross sections] for distra elements
[cross sections]
...
distra <FE subregions> local <kx'> <ky'> <kz'> <cx'> <cy'> <cz'> <v2r_x> <v2r_y> <v2r_z>
...
• 3D time harmonic analysis, distra elements in global coordinates (kx , ky and kz as complex num-
bers):
format of section [cross sections] for distra elements
[cross sections]
...
distra <FE subregions> global <kx> <ky> <kz> <cx> <cy> <cz>
...
2.5.5 Beam finite element obtained from the degeneration of the solid (deg-
beam)
To be documented.
2.5.7 Shell finite element obtained from the degeneration of the solid (degshell)
To be documented.
In order to indicate the existence and the nature of the symmetry, it is necessary to define up to three
of the symmetry planes implemented: plane with unit normal n = e1 = (1, 0, 0) (plane yz), plane with
unit normal n = e2 = (0, 1, 0) (plane zx), or plane with unit normal n = e3 = (0, 0, 1) (plane xy); where
each of one can be either of symmetry or antisymmetry. The general format for the section is:
general format of section [symmetry planes]
[symmetry planes]
<"plane_n1", "plane_n2" or "plane_n3"> : <"symmetry" or "antisymmetry">
...
For example, if the plane with normal n = e1 = (1, 0, 0) (plane yz) is a symmetry plane, i.e. fields at
(x1 , x2 , x3 ) are symmetric to fields at (−x1 , x2 , x3 ), then:
input.dat
...
[symmetry planes]
plane_n1: symmetry
...
0 displacement U uk = U
1 traction T tk = T
global
4 infinitesimal rotation field center c, axis a, angle θ uk = θ [a × (x − c)] · ek
10 normal pressure P tk = P nk
2 displacement U u · lk = U
local
3 traction T t · lk = T
It is always preferable using the B.C. expressed in global axes (B.C. 0 or 1) when possible because
they do not need additional equations. If the boundary is planar and its normal vector is parallel to any
global axis, then the B.C. expressed in local axes are not needed at all.
There are available two boundary conditions for each face of a crack-like boundary. One establishes
a displacement, while the other establishes a traction, see Table 2.10.
0 displacement U+ u+
k =U
+
Γ+
1 traction T+ t+
k =T
+
0 displacement U− u−
k =U
−
Γ−
1 traction T− t−
k =T
−
where note that for two-dimensional problems, the z lines must be removed. An example of a two-
dimensional problem with two boundaries with identifiers 1 and 3, being the first an ordinary boundary
with null displacements and the second a crack-like boundary with traction-free faces:
input.dat
...
...
...
Note that if the analysis is time harmonic, the values of the boundary conditions must be introduced as
complex numbers, e.g.(0.,0.).
For a two-dimensional problem, example of a clamped beam FE node with identifier 67, and a pin
beam FE node with identifier 41:
2.6. CONDITIONS OF THE MODEL 33
input.dat
...
y z
incidence direction
incidence direction P
P
θ y
SH
θ x φ
SV
x
SV
2D 3D
The incident waves can be defined in terms of displacements (unitary displacements), in terms of
stresses (unitary stresses) or in terms of the potentials (unitary potentials). The general format for the
section is:
general format of section [incident waves]
[incident waves]
<number of incident waves>
...
[incident waves]
1
1
plane
full-space
0 1. 0. 0. 90.
0. 0. 0. 0.
viscoelastic p
...
34 CHAPTER 2. INPUT FILE
[incident waves]
1
1
plane
half-space 2 0. 1
0 1. 0. 0. 90.
0. 0. 0. 0.
viscoelastic sv
...
Chapter 3
Output files
3.1 Introduction
Output files are written according to the type of analysis and model, as well as the input file export
section. By default the path and name of the output files is equal to the input file but with an additional
extension. The path and name can be changed when calling the solver from the terminal as explained
in 1.4. There are three main native output files with the following additional extensions: nodal solutions
(*.nso), element solutions (*.eso) and stress resultant solutions (*.tot). The specific file format is
different for static and time harmonic analysis. There is one Gmsh output file (*.pos) which contains
the case mesh and results (MSH file format version 2.2).
$1 integer Analysis step index. For linear elastic static analysis it is always 0. For
time harmonic analysis it is the frequency index. In future releases,
it will receive the natural frequency index (for modal analysis), or the
time step index (for transient analysis), or the loading step index (for
non-linear static analysis).
$2 float Analysis step value. For linear elastic static analysis it is always 0.0.
For time harmonic analysis it is the frequency value (in Hz or rad/s
depending on the units used in the frequencies section of the input file).
In future releases, it will receive the natural frequency value (for modal
analysis), or the time step value (for transient analysis), or the loading
step value (for non-linear static analysis).
$3 integer Identifier of the region to which the node result belongs. In the case of
finite element nodes, this has no significance since results does not de-
pend on the region. However, in the case of boundary elements belonging
to two regions (interface boundary elements) this allows selecting which
result is required.
$4 integer Region class: 1 (BE region) or 2 (FE region).
$5 integer Region type: 1 (inviscid fluid) or 2 (elastic solid) or 3 (poroelastic
medium).
35
36 CHAPTER 3. OUTPUT FILES
From column $10 onwards, the meaning of each column differs depending on the problem dimension
(2D or 3D), on the type of analysis (static or time harmonic), on the region class (BE or FE), on the
region type (inviscid fluid, elastic solid, poroelastic medium), and on the number of DOF (if a FE region).
For 2D problems in a static analysis (all regions are only of the elastic solid type):
BE region node
$12,$13 float Node displacements (u1 , u2 ).
$14,$15 float Node tractions (t1 , t2 ).
For 3D problems in a static analysis (all regions are only of the elastic solid type):
BE region node
$13-$15 float Node displacements (u1 , u2 , u3 ).
$16-$18 float Node tractions (t1 , t2 , t3 ).
FE region node with 5 DOFs (shell element nodes with local rotations)
$13-$17 float Node displacements/local rotations (u1 , u2 , u3 , α, β).
$18-$22 float Node forces/local moments (f1 , f2 , f3 , mα , mβ ).
3.2. NODAL SOLUTIONS FILE (*.NSO) 37
For 2D problems in a time harmonic analysis, where each node variable is written by two consecu-
tive columns containing its real and imaginary parts (if complex_notation = cartesian in [export]
section) or absolute value and argument (if complex_notation = polar in [export] section):
For 3D problems in a time harmonic analysis, where as in the 2D case each node variable is written by
two consecutive columns containing its real and imaginary parts (if complex_notation = cartesian in
38 CHAPTER 3. OUTPUT FILES
[export] section) or absolute value and argument (if complex_notation = polar in [export] section):
FE region node (only of elastic solid type) with 5 DOFs (shell element nodes with local rotations)
$13-$22 float Node displacements/local rotations (u1 , u2 , u3 , α, β).
$23-$32 float Node forces/local moments (f1 , f2 , f3 , mα , mβ ).
comment line in GNU/Linux environments), describing the file and the meaning of the main data columns.
The first 13 columns are always present, and indicates the following:
$1 integer Analysis step index. For linear elastic static analysis it is always 0. For
time harmonic analysis it is the frequency index. In future releases,
it will receive the natural frequency index (for modal analysis), or the
time step index (for transient analysis), or the loading step index (for
non-linear static analysis).
$2 float Analysis step value. For linear elastic static analysis it is always 0.0.
For time harmonic analysis it is the frequency value (in Hz or rad/s
depending on the units used in the frequencies section of the input file).
In future releases, it will receive the natural frequency value (for modal
analysis), or the time step value (for transient analysis), or the loading
step value (for non-linear static analysis).
$3 integer Identifier of the region to which the element node result belongs. In the
case of finite element nodes, this has no significance since results does
not depend on the region. However, in the case of boundary elements
belonging to two regions (interface boundary elements) this allows se-
lecting which result is required.
$4 integer Region class: 1 (BE region) or 2 (FE region).
$5 integer Region type: 1 (inviscid fluid) or 2 (elastic solid) or 3 (poroelastic
medium).
$6 integer Identifier of the BE boundary (if $4==1) or FE subregion (if $4==2) to
which the element result belongs. In the case of boundary elements be-
longing to two regions (interface boundary elements) this allows selecting
which result is required.
$7 integer If $4==1, then it indicates the boundary class: 1 (ordinary) or 2 (crack-
like). If $4==2, then it indicates the finite element dimension.
$8 integer If $4==1, then it indicates the boundary face: 1 (positive normal) or 2
(negative normal). If $4==2, then it indicates the finite element type.
$9-$11 integer Element identifier, dimension and type.
$12,$13 integer Element node index and number of degrees of freedom.
$14 integer Node identifier.
For 2D problems in a time harmonic analysis, where each node variable is written by two consecu-
tive columns containing its real and imaginary parts (if complex_notation = cartesian in [export]
section) or absolute value and argument (if complex_notation = polar in [export] section):
For 3D problems in a time harmonic analysis, where each node variable is written by two consecu-
tive columns containing its real and imaginary parts (if complex_notation = cartesian in [export]
section) or absolute value and argument (if complex_notation = polar in [export] section):
Go to MultiFEBE’s GitHub webpage, and download the source code. Then, decompress the *.tar.gz
or *.zip file.
A.1 GNU/Linux
The steps to compile the source code are the usual on GNU/Linux projects using CMake. The particular
commands shown below are for Debian distributions (e.g. Ubuntu), but it should be very similar for
others.
1. First, you have to install the pre-requisites if not already installed, so you have to open a terminal
and execute:
• Install GNU Fortran, GNU Make and CMake:
$ sudo apt-get install gfortran make cmake cmake-extras
• Install OpenBLAS:
$ sudo apt-get install libopenblas-base libopenblas-dev
2. Once you have all the pre-requisites, navigate at the source code main folder. Then create a
temporary folder (e.g. build) where making the compilation, and navigate inside it:
$ mkdir -p build
$ cd build
3. Execute cmake taking into account that the CMake configuration file is in the parent folder:
$ cmake -G "Unix Makefiles" ..
During the process, if any tool or dependency is missing, then CMake is going to notify you.
4. Once CMake correctly finishes, you can now execute GNU Make:
$ make
5. If all this process ends correctly, you will have the executable multifebe there. However, it is still
not available system-wide in the terminal. You have at this point several options:
(a) The simpler one is to copy the binary to usr/bin:
$ sudo cp multifebe /usr/bin/.
(b) The cleaner one is making a *.deb installer which will manage not only this, but it will
also copy the documentation to the corresponding folders (/usr/share/doc/multifebe), and
create a package registry so that it can also be completely uninstalled or updated in the future.
In order to do so, you have to execute CPack as:
$ cpack
At the end of the process, you will have at your disposal your own *.deb installer. Then, you
can follow the step described above in section 1.3.1.
43
44 APPENDIX A. HOW TO COMPILE THE SOURCE CODE
A.2 Windows
The compilation in Windows requires much more steps than in GNU/Linux, but basically because it is
required to install and to configure MSYS2. MSYS2 is a collection of tools and libraries providing you with
an easy-to-use environment for building, installing and running native Windows software. Furthermore,
it is very similar to GNU/Linux environments, so most of the programming work is shared when building
for GNU/Linux and Windows.
2. After the installation, the ”MSYS2 MSYS” terminal is automatically opened. Close it.
4. MSYS2 installs the so called Mintty terminal, but it provides separate launchers for different envi-
ronments, such as the already opened “MSYS2 MSYS”, but also “MinGW x64”, which is the one
used for compiling, and others. See Figure A.1.
5. We will reproduce the post-installation instructions given by MSYS2 at the date of this writing.
First, open the “MSYS2 MSYS” terminal. See Figure A.1.
6. Update the packages by typing and executing the command pacman -Syu as shown in Figure A.3.
7. Proceed with the installation by typing Y and executing as shown in Figure A.3.
8. After updating, the terminal ask permission for closing. Type Y and execute.
A.2. WINDOWS 45
9. Open again the “MSYS2 MSYS” terminal, and type and execute again the update command pacman
-Syu.
$ pacman -S mingw-w64-x86_64-toolchain
14. Install additional tools and libraries required by typing and executing the following sequence of
commands:
(a) Install GNU C Compiler and GNU Fortran for MinGW 64 bits:
$ pacman -S gcc mingw-w64-x86_64-gcc gcc-fortran mingw-w64-x86_64-gcc-fortran
15. In the “MSYS2 MinGW x64” terminal, navigate to the source code main folder. In the case
illustrated in the following figures D:\multifebe.
16. Create a folder where all compilation build files are generated. In the case illustrated in the following
figures it is named build. This can be done by executing:
$ mkdir -p build
$ cd build
18. Execute cmake taking into account that we want to use make as the compilation tool (thus using the
option -G ``Unix Makefiles'') and that the configuration file CMakeLists.txt is in the parent
folder:
$ cmake -G "Unix Makefiles" ..
$ make
20. After this is correctly done, multifebe.exe should be ready to be used in the current folder.
21. You can manually install this program in the system by creating a new folder inside C:\Files
(x86) called for example multifebe, and copy multifebe.exe inside it. Then you have to add
this directory to the system or user PATH environment variable. To do so, follow the instructions
in this link, or do a search on the web about “How to set the path and environment variables
in Windows”. After this is done, you can run the program on a system terminal, like cmd or
PowerShell.
22. It is also possible to build an installer which do all this for you, and furthermore integrates the
program into your system with a uninstaller, etc. You have to be in a “MSYS2 MinGW x64”
terminal, and the current working directory in the folder where we are compilating.
23. Then you can build the installer by executing in the terminal:
$ cpack
24. This will create and installer called multifebe-x.x.x-w64.exe, which is the installer we release
for Windows. Then you can execute it and follow the instructions above in section 1.3.3.
Appendix B
In Gmsh newer than version 3.0.6, the default Gmsh mesh file format is not MSH file format version 2.2.
Therefore, you will have to save the mesh from an alternative workflow.
When using the Gmsh GUI, you have to follow the steps shown in Fig. B.1. When using the
command-line interface, you have to include the option -format msh2, for example:
47
48 APPENDIX B. GMSH - HOW TO EXPORT A MESH IN MSH FILE FORMAT VERSION 2.2
(a) Step 1: File > Export (b) Step 2: Format: Mesh - Gmsh MSH (*.msh)
We have implemented a *.bas template file for writing mesh files in the MultiFEBE native format from
GiD pre- and post-processor. It is a simple plain text file containing a script in GiD language. Two
versions of the template file are included in the package, one with carriage return of the Windows type
(multifebe_win.bas), and another with the Unix type (multifebe_unix.bas). Note that the shown
blank lines are necessary. Conceptually, each GiD “layer” is a “part” in MultiFEBE jargon.
multifebe_win.bas & multifebe_unix.bas
1
2 *IntFormat "%12i"
3 *RealFormat "%25.16e"
4 [parts]
5 *Set var nLayer=0
6 *loop layers
7 *Set var nLayer=LayerNum
8 *end layers
9 *nLayer
10 *loop layers
11 *LayerNum *LayerName
12 *end layers
13 [nodes]
14 *nPoin
15 *set elems(all)
16 *loop nodes
17 *NodesNum *NodesCoord
18 *end nodes
19 [elements]
20 *set Elems(All)
21 *nElem
22 *set Elems(Linear)
23 *loop elems
24 *if(ElemsNnode==2)
25 *ElemsNum line2 1 *ElemsLayerNum *ElemsConec
26 *endif
27 *if(ElemsNnode==3)
28 *ElemsNum line3 1 *ElemsLayerNum *ElemsConec
29 *endif
30 *end elems
31 *set Elems(Triangle)
32 *loop elems
33 *if(ElemsNnode==3)
34 *ElemsNum tri3 1 *ElemsLayerNum *ElemsConec
35 *endif
36 *if(ElemsNnode==6)
37 *ElemsNum tri6 1 *ElemsLayerNum *ElemsConec
38 *endif
39 *end elems
40 *set Elems(Quadrilateral)
41 *loop elems
42 *if(ElemsNnode==4)
43 *ElemsNum quad4 1 *ElemsLayerNum *ElemsConec
44 *endif
49
50 APPENDIX C. GID *.BAS TEMPLATE FILE
45 *if(ElemsNnode==8)
46 *ElemsNum quad8 1 *ElemsLayerNum *ElemsConec
47 *endif
48 *if(ElemsNnode==9)
49 *ElemsNum quad9 1 *ElemsLayerNum *ElemsConec
50 *endif
51 *end elems
52
Bibliography
[1] O. Maeso, J. J. Aznárez, and J. Domínguez. Three‐dimensional models of reservoir sediment and
effects on the seismic response of arch dams. Earthquake Engineering and Structural Dynamics,
33(10):1103–1123, 2004.
[2] J. J. Aznárez, O. Maeso, and J. Domínguez. BE analysis of bottom sediments in dynamic fluid-
structure interaction problems. Engineering Analysis with Boundary Elements, 30:124–136, 2006.
[3] L.A. Padrón, J.J. Aznárez, and O. Maeso. BEM–FEM coupling model for the dynamic analysis of
piles and pile groups. Engineering Analysis with Boundary Elements, 31(6):473 – 484, 2007.
[4] Guillermo M. Álamo, Alejandro E. Martínez-Castro, Luis A. Padrón, Juan J. Aznárez, Rafael Gallego,
and Orlando Maeso. Efficient numerical model for the computation of impedance functions of inclined
pile groups in layered soils. Engineering Structures, 126:379–390, 2016.
[5] J. D. R. Bordón, J. J. Aznárez, and O. Maeso. Dynamic model of open shell structures buried in
poroelastic soils. Computational Mechanics, 60(2):269–288, 2017.
[6] J. Domínguez. Boundary Elements in Dynamics. WIT Press, 1993.
[7] M.A. Biot. Theory of propagation of elastic waves in a fluid‐saturated porous solid. i. low‐frequency
range. The Journal of the Acoustical Society of America, 28(168), 1956.
51