Multiphysics 0471
Multiphysics Integrated Computational Project
FOR WINDOWS:
To build the coupled FEM/BEM solver:
- go to the srcs folder (cd srcs)
- create a build folder (mkdir build)
- go to this build folder (cd build)
- cmake ..
- make
To execute the solver:
- in build folder: solver.exe ..\hybrid_geo.geo (or any other .geo file present at the root of the srcs folder)
To build the independent FEM solver:
- similar procedure but to be done in the srcs/FEM folder
To build the independent BEM solver:
- similar procedure but to be done in the srcs/BEM folder
Creation of a .geo file
To create a .geo file compatible with the program, some rules must be respected:
-
For the elastic FEM part:
-
The FEM domain should be defined as a
Physical Surface
with the precise nameFEM_domain
. First, aCurve Loop
gathering the lines representing the boundary of the FEM domain must be created. Then, aPlane Surface
containing the corresponding curve loop must be created. Finally, if the plane surface is the first of the .geo file, the physical surface must be created as:Physical Surface("FEM_domain", x) = {1};
, where x is the tag of the physical surface. Multiple sub domains can be included in the FEM domain. For example, if plane surfaces have been created for five sub domains, the physical surface must be created as:Physical Surface("FEM_domain", x) = {1, 2, 3, 4, 5};.
-
The mechanical boundary conditions, material properties and volumic forces must be specified for the FEM domain:
-
BOUNDARY CONDITIONS:
- The edges on which the user wants to impose a boundary condition must be defined as
Physical Curve
. As an example, if the user want to impose a condition on the bottom edge related to theLine(1)
:Physical Curve("bottom_edge", x) = {1};
- All boundary conditions must be written as
SetNumber("Boundary Conditions/name_of_the_physical_curve/...")
withname_of_the_physical_curve
the physical curve on which the condition is imposed. - The Dirichlet boundary conditions, i.e the imposed horizontal and vertical displacement
u_x
andu_y
of an edge,
expressed in [m], must be written asSetnumber("Boundary Conditions/name_of_the_physical_curve/ux", desired_value);
, same applies foru_y
. Note that the horizontal displacement can be imposed on a physical curve without imposing the vertical displacement, and vice-versa. As an example, if the user wants the left edge to be clamped:SetNumber("Boundary Conditions/left_edge/ux", 0.); SetNumber("Boundary Conditions/left_edge/uy", 0.);
- The Neumann boundary conditions, i.e surface traction in the horizontal (
t_x
) or vertical (t_y
) direction imposed on an edge, expressed in [Pa], must be written asSetNumber("Boundary Conditions/name_of_the_physical_curve/tx", desired_value)
, same applies fort_y
. Note that on a specific edge, both horizontal and vertical surface tractions must be prescribed. If the user only wants to prescribet_x
,t_y
must also be set to zero. - Dirichlet boundary conditions can also be imposed on a specific point of the domain. In this case, a
Physical Point
must be created.
- The edges on which the user wants to impose a boundary condition must be defined as
-
MATERIAL PROPERTIES:
All the material properties must be written as
SetNumber("Materials/FEM_domain/name_of_property", value_of_property);
. The different properties that must be specified are:- Young's modulus, expressed in [Pa], named
Young
. - Poisson's ratio, without physical units, named
Poisson
. - Mass density, expressed in [kg/m3], named
rho
.
- Young's modulus, expressed in [Pa], named
-
VOLUMIC FORCES:
Volumic forces in the horizontal (
b_x
) or vertical (b_y
) direction, expressed in [m/s2], must be written asSetNumber("Volumic Forces/FEM_domain/b_x",0);
, same applies forb_y
.
-
-
For the electrostatic BEM part:
- The lines corresponding to the boundary of the BEM surfaces must be created in such a way that the area of the BEM surface is located on the left of the Curve Loop.
- Multiple BEM domains can be defined. One BEM domain should be defined as a
Physical Surface
with the precise nameBEM_domain_X
, withX
the identifier of the BEM domain (X=1
if it is the first domain,X=2
if it is the second one, ...). - Boundary conditions and material properties must then be specified for the BEM domain:
-
BOUNDARY CONDITIONS:
- Dirichlet boundary conditions, corresponding to imposing an electric potential expressed in [V], can be imposed on a physical curve as:
SetNumber("Boundary Conditions/name_of_the_physical_curve/BEM_domain_X/dirichlet", value_of_potential);
. - Neumann boundary conditions, corresponding to imposing the normal component of the electric field expressed in [V/m], can be imposed on a physical curve as:
SetNumber("Boundary Conditions/name_of_the_physical_curve/BEM_domain_X/neumann", value_of_field);
.
- Dirichlet boundary conditions, corresponding to imposing an electric potential expressed in [V], can be imposed on a physical curve as:
-
MATERIAL PROPERTIES: The dielectric permittivity of the material inside the BEM domain must be specified. It is done writing
SetNumber("Materials/BEM_domain_X/Epsilon", value_of_Epsilon);
.
Note: These operations must be done for each BEM domain the user wants to create, replacing
X
by the given identifier of the BEM domain. -
For the coupling between the FEM and BEM domains:
- All the lines belonging to the interface between the FEM domain and the different BEM domains must be specified as a single
Physical Curve("BEM_FEM_boundary, x)={List_of_the_interface_lines}
. As an example, ifLine(1)
,Line(4)
andLine(5)
belong to the intersection of the BEM domains and the FEM domain:Physical Curve("BEM_FEM_boundary", x) = {1, 4, 5};
- All the lines belonging to the interface between the FEM domain and the different BEM domains must be specified as a single
-
For the mechanical or the coupled solver, the user can choose between the linear or non-linear iterative solver, by setting
SetNumber("Non_linear_solver",0);
for the linear solver, orSetNumber("Non_linear_solver",1);
for the non-linear solver.