From 62a7fe36b0b8397eb021027d30937d6aa7ec6ece Mon Sep 17 00:00:00 2001
From: Vanraes Valentin <valentin.vanraes@student.uliege.be>
Date: Sat, 14 May 2022 15:34:53 +0000
Subject: [PATCH] README.md: How to create .geo

---
 README.md | 63 ++++++++++++++++++++++++++++++++++++++++++++++++++++++-
 1 file changed, 62 insertions(+), 1 deletion(-)

diff --git a/README.md b/README.md
index b2530e5..007c943 100644
--- a/README.md
+++ b/README.md
@@ -18,4 +18,65 @@ 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
\ No newline at end of file
+- similar procedure but to be done in the srcs/BEM folder
+
+## 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> 
+    
+  2. The boundary conditions, material properties and volumic forces must then be specified to 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)`: 
+                <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.
+      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`.
+    - **MATERIAL PROPERTIES**:
+                All the material properties must be written as `SetNumber("Materials/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`.
+    - **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: 
+    - **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. 
+
+
+
+
+
+
+
+
-- 
GitLab