From eed5684e44fc9d91623c115bf52d81553d96aaa3 Mon Sep 17 00:00:00 2001 From: Louis Denis <louis.denis@student.uliege.be> Date: Sun, 15 May 2022 11:55:12 +0200 Subject: [PATCH] readme update --- README.md | 92 ++++++++++++++++++++++++++++++------------------------- 1 file changed, 50 insertions(+), 42 deletions(-) diff --git a/README.md b/README.md index 007c943..9ba6ebb 100644 --- a/README.md +++ b/README.md @@ -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. -- GitLab