Skip to content
Snippets Groups Projects
Commit eed5684e authored by Denis Louis's avatar Denis Louis
Browse files

readme update

parent f94a649c
No related branches found
No related tags found
No related merge requests found
......@@ -22,56 +22,64 @@ To build the independent BEM solver:
## Creation of a .geo file
To create a .geo file that will work with the program, some rules must be respected:
- For the FEM domain:
1. FEM domain should be defined as `Physical Curve` with the precise name `FEM_domain`.
For example, if the user want the Curve Loop(1) to be a FEM domain, where `x`is the tag:
<pre><code>Physical Curve("FEM_domain", x) = {1};.<code><pre>
To create a .geo file compatible with the program, some rules must be respected:
- For the elastic FEM part:
1. The FEM domain should be defined as a `Physical Surface` with the precise name `FEM_domain`.
First, a `Curve Loop` gathering the lines representing the boundary of the FEM domain must be created.
Then, a `Plane 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:
<pre><code>Physical Surface("FEM_domain", x) = {1};.<code><pre>
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:
<pre><code>Physical Surface("FEM_domain", x) = {1, 2, 3, 4, 5};.<code><pre>
2. The boundary conditions, material properties and volumic forces must then be specified to the FEM domain:
2. The mechanical boundary conditions, material properties and volumic forces must be specified for the FEM domain:
- **BOUNDARY CONDITIONS**:
1. The edges on which the user want to imposed a boundary condition must be defined as `Physical Curve`.
For example, if the user want to impose a condition on a bottom edge related to the `Line(1)`:
1. 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 the `Line(1)`:
<pre><code>`Physical Curve("bottom_edge", x) = {1};`<code><pre>
2. All boundary conditions must be written as `SetNumber("Boundary Conditions/name_of_the_edge/...")` with `name_of_the_edge` the
edge on which the condition is imposed.
2. All boundary conditions must be written as `SetNumber("Boundary Conditions/name_of_the_physical_curve/...")`
with `name_of_the_physical_curve` the physical curve on which the condition is imposed.
3. The Dirichlet boundary conditions, i.e the imposed horizontal and vertical displacement `u_x` and `u_y` of an edge,
must be written as `Setnumber("Boundary Conditions/name_of_the_edge/ux", desired_value);`, same applies for `u_y`.
For example, if the user want to imposed an embedding on an the bottom edge:
<pre><code>SetNumber("Boundary Conditions/bottom_left/ux", 0.);
SetNumber("Boundary Conditions/bottom_left/uy", 0.);<code><pre>
4. The Neumann boundary conditions, i.e surface traction (or compression) in the horizontal (`t_x`) or vertical (`t_y`) direction
imposed on an edge, must be written as `SetNumber("Boundary Conditions/name_of_edge/tx", desired_value);`, same applies for
`t_y`.
must be written as `Setnumber("Boundary Conditions/name_of_the_physical_curve/ux", desired_value);`, same applies for `u_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:
<pre><code>SetNumber("Boundary Conditions/left_edge/ux", 0.);
SetNumber("Boundary Conditions/left_edge/uy", 0.);<code><pre>
4. The Neumann boundary conditions, i.e surface traction in the horizontal (`t_x`) or vertical (`t_y`) direction imposed on
an edge, must be written as `SetNumber("Boundary Conditions/name_of_the_physical_curve/tx", desired_value)`,
same applies for `t_y`. Note that on a specific edge, both horizontal and vertical surface tractions must be
prescribed. If the user only wants to prescribe `t_x`, `t_y` must also be set to zero.
5. Dirichlet boundary conditions can also be imposed on a specific point of the domain. In this case, a `Physical Point`
must be created.
- **MATERIAL PROPERTIES**:
All the material properties must be written as `SetNumber("Materials/domain/name_of_property", value_of_property);`.
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 modulus, named `Young`.
- Poisson ration, named `Poisson`.
- Volumic density, named `rho`.
- Young's modulus, named `Young`.
- Poisson's ratio, named `Poisson`.
- Mass density, named `rho`.
- **VOLUMIC FORCES**:
Volumic forces, i.e forces applied on all the volume in the horizontal (`b_x`) or vertical (`b_y`) direction
must be written as `SetNumber("Volumic Forces/FEM_domain/b_x",0);`, same applies for `b_y`.
- For the BEM domains:
1. The lines of the BEM surfaces must be created in such a way that the air of the surface is located to the left of the Curve Loop.
2. BEM domain should be defined as `Physical Curve` with the precise name `BEM_domain_X`, with `X` the number of the BEM domain (`X=1` if it is the first one, `X=2` if it is the seconde one, ...).
For example, if the user want the `Curve Loop(1)` to be a FEM domain:
<pre><code>Physical Curve("FEM_domain", x) = {1};<code><pre>
3. Lines belonging to the BEM and FEM domains must be specified as `Physical Curve("BEM_FEM_boundary_X, x)={Lines_of_the_two_domains}`. For example, if `Line(1)`, `Line(4)` and `Line(5)` belong to the intersection of the BEM domain and the FEM domain:
<pre><code> Physical Curve("BEM_FEM_boundary_1", x) = {1, 4, 5};<code><pre>
4. The electrode on line defining the electrode on wich the electric potential is imposed must be defined as `Physical Curve("electrode_X", x)={Lines_corresponding_to_electrode}`.
5. The line which are not defined as an electrode or as a an intersection between the two types of domain must be specified as `Physical Curve("outside_X", x) = {Lines_of_outside};`
6. Boundary conditions and materials properties must then be specified for the Bem domain:
Volumic forces, in the horizontal (`b_x`) or vertical (`b_y`) direction must be written as `SetNumber("Volumic Forces/FEM_domain/b_x",0);`, same applies for `b_y`.
- For the electrostatic BEM part:
1. 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.
2. Multiple BEM domains can be defined. One BEM domain should be defined as a `Physical Surface` with the precise name `BEM_domain_X`, with `X` the identifier of the BEM domain (`X=1` if it is the first domain, `X=2` if it is the second one, ...).
3. Boundary conditions and material properties must then be specified for the BEM domain:
- **BOUNDARY CONDITIONS**:
- Two Dirichlet boundary conditions need to be imposed:
1. The electric potential of the electrode, specified as `SetNumber("Boundary Conditions/electrode_X/BEM_domain_X/dirichlet", value_of_potential);`.
2. A condition on the boundary between the FEM and the BEM domain. It is often considered as the place where the electric potential is equal to 0, defined as `SetNumber("Boundary Conditions/BEM_FEM_boundary_X/BEM_domain_X/dirichlet", value_of_potential);`.
- One Neumann boundary condition on the line which are not defined as an electrode or as a an intersection between the two types of domain, written as `SetNumber("Boundary Conditions/outside_X/BEM_domain_X/neumann", 0);`.
- **MATERIAL PROPERTIES**: The dielectric permittivity of the BEM domain must be specified, it is done writing `SetNumber("Materials/BEM_domain_X/Epsilon", value_Epsilon);`.
**Note**: These operations must be done for each BEM domains the user want to create, replacing `X` by the number of the BEM domain.
1. Dirichlet boundary conditions, corresponding to imposing an electric potential, can be imposed on a physical curve as:
`SetNumber("Boundary Conditions/name_of_the_physical_curve/BEM_domain_X/dirichlet", value_of_potential);`.
2. Neumann boundary conditions, corresponding to imposing the normal component of the electric field, can be imposed on a physical curve as: `SetNumber("Boundary Conditions/name_of_the_physical_curve/BEM_domain_X/neumann", value_of_field);`.
- **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:
1. 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, if `Line(1)`, `Line(4)` and `Line(5)` belong to the intersection of the BEM domains and the FEM domain:
<pre><code> Physical Curve("BEM_FEM_boundary", x) = {1, 4, 5};<code><pre>
- For the mechanical or the coupled solver, the user can choose between the linear or non-linear iterative solver, by setting
<pre><code> SetNumber("Non_linear_solver",0);<code><pre>
for the linear solver, or
<pre><code> SetNumber("Non_linear_solver",1);<code><pre>
for the non-linear solver.
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment