Skip to content

Commit b66c444

Browse files
authored
Merge pull request #56 from dcodoni/fsi-doc
Update the FSI section of the user guide (issue #54)
2 parents 63ed2de + fa5a875 commit b66c444

File tree

25 files changed

+270
-7
lines changed

25 files changed

+270
-7
lines changed

.DS_Store

8 KB
Binary file not shown.

documentation/.DS_Store

8 KB
Binary file not shown.

documentation/multi_physics.html

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -493,6 +493,22 @@ <h4 class="skipTo appendix"> Appendix </h4>
493493
<zero-md src="multi_physics/user-guide/fluid_solid_interaction/introduction/readme.md" no-shadow></zero-md>
494494
</span>
495495

496+
<span id="user_guide_fluid_solid_interaction">
497+
<zero-md src="multi_physics/user-guide/fluid_solid_interaction/AAA-geometry-mesh/readme.md" no-shadow></zero-md>
498+
</span>
499+
500+
<span id="user_guide_fluid_solid_interaction">
501+
<zero-md src="multi_physics/user-guide/fluid_solid_interaction/AAA-setup/readme.md" no-shadow></zero-md>
502+
</span>
503+
504+
<span id="user_guide_fluid_solid_interaction">
505+
<zero-md src="multi_physics/user-guide/fluid_solid_interaction/AAA-results/readme.md" no-shadow></zero-md>
506+
</span>
507+
508+
<span id="user_guide_fluid_solid_interaction">
509+
<zero-md src="multi_physics/user-guide/fluid_solid_interaction/references/readme.md" no-shadow></zero-md>
510+
</span>
511+
496512
<!-- -------------------- hemodynamics -------------------- -->
497513

498514
<span id="user_guide_hemodynamics">
6 KB
Binary file not shown.
8 KB
Binary file not shown.
Binary file not shown.
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
## Abdominal aortic aneurysm: geometry and mesh
2+
In this guide, we solve the clinical case of an abdominal aortic aneurysm. The geometrical models of the solid and the fluid are shown in the figure below.
3+
<br>
4+
<figure>
5+
<img src="/documentation/multi_physics/user-guide/fluid_solid_interaction/imgs-AAA/model-fluid-solid.png" style="width: 90%; margin-right: 1%; margin-bottom: 0.5em;">
6+
<p style="clear: both;">
7+
<figcaption class="svCaption" >Solid (left) and fluid (right) models of the abdominal aortic aneurysm case. </figcaption>
8+
</figure>
9+
<br>
10+
The fluid domain was obtained from segmenting a medical image, and the solid domain was obtained by extruding the lumen wall of the fluid domain by a constant thickness. For more details on how to generate a patient-specific model look into the modeling section.
11+
The surface mesh for fluid domain, for the solid domain and the inlet section of the combined meshes are shown in the figure below.
12+
<br>
13+
<figure>
14+
<img src="/documentation/multi_physics/user-guide/fluid_solid_interaction/imgs-AAA/mesh-solid-fluid.png" style="width: 90%; margin-right: 1%; margin-bottom: 0.5em;">
15+
<p style="clear: both;">
16+
<figcaption class="svCaption" >Solid (left) and fluid (centre) meshes are first created separately, and then used in svMultiPhysics to perform Fluid-Structure-Interaction simulations with Arbitrary Lagrangian–Eulerian (ALE) coordinates. The right figure represent the inlet section of the combined meshes showing the boundary layer refinement for the fluid mesh and the solid mesh. </figcaption>
17+
</figure>
18+
<br>
19+
It is not the purpose of this guide to illustrate the process of mesh creation for FSI problems, but it is important to state that the interface between the solid mesh (inner wall) and fluid mesh (lumen wall) match. Meaning the lumen_wall of the fluid mesh and the inner_wall of the solid mesh should be exactly the same.
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
## Abdominal aortic aneurysm: results
2+
The simulation of the abdominal aortic aneurism was run in the example described in this guide on 128 processors. The results after 20 time steps for the solid displacement magnitude and fluid pressure are shown in the figure below.
3+
<br>
4+
<figure>
5+
<img src="/documentation/multi_physics/user-guide/fluid_solid_interaction/imgs-AAA/results.png" style="width: 90%; margin-right: 1%; margin-bottom: 0.5em;">
6+
<p style="clear: both;">
7+
<figcaption class="svCaption" >Solid displacement (left) and fluid pressure (right) of the abdominal aortic aneurysm case. </figcaption>
8+
</figure>
9+
<br>
Lines changed: 216 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,216 @@
1+
## Abdominal aortic aneurysm: simulation setup
2+
Before running a simulation, we need to set it up through an input file. The input file for svMultiPhysics is an .xml file. In the following we go through the main steps to take in order to set up an FSI simulation of the Abdominal Aortic Aneurysm problem. It is not the purpose of this guide to provide a detailed description of the input file and all of the options available in svMultiPhysics, but rather to guide the user in setting up a simulation. The first thing to do is to select the time step size. We can estimate the time step size to use for the simulation by taking into account the expected fluid velocity *v* and the average element size *\Delta l* of the fluid mesh. Considering that the CFL (Courant-Friedrichs-Lewy) number should be close to unity, we can get an approximation of the time step size Usually a value between 1 and 10 constitute a stable choice for implicit time integration scheme, such as the one used by svMultiPhysics. The CFL number is defined as follows:
3+
$$ CFL = \frac{v \Delta t}{\Delta l} $$
4+
For the case we are describing here, we set the time step size as follows:
5+
```
6+
<Time_step_size> 1e-3 </Time_step_size>
7+
```
8+
Since we are simulating an FSI problem we have two meshes, one for fluid domain and one for the solid domain. We will add the mesh files for the fluid domain with the relative surfaces as follows:
9+
```
10+
<Add_mesh name="lumen" >
11+
<Mesh_file_path> mesh/fluid-mesh-complete/mesh-complete.mesh.vtu </Mesh_file_path>
12+
<Add_face name="lumen_inlet">
13+
<Face_file_path> mesh/fluid-mesh-complete/mesh-surfaces/inlet.vtp </Face_file_path>
14+
</Add_face>
15+
<Add_face name="lumen_outlet1">
16+
<Face_file_path> mesh/fluid-mesh-complete/mesh-surfaces/outlet1.vtp </Face_file_path>
17+
</Add_face>
18+
<Add_face name="lumen_outlet2">
19+
<Face_file_path> mesh/fluid-mesh-complete/mesh-surfaces/outlet2.vtp </Face_file_path>
20+
</Add_face>
21+
<Add_face name="lumen_wall">
22+
<Face_file_path> mesh/fluid-mesh-complete/mesh-surfaces/lumen_wall.vtp </Face_file_path>
23+
</Add_face>
24+
<Domain> 0 </Domain>
25+
</Add_mesh>
26+
```
27+
We do the same for the mesh of the solid domain:
28+
```
29+
<Add_mesh name="wall" >
30+
<Mesh_file_path> mesh/solid-mesh-complete/mesh-complete.mesh.vtu </Mesh_file_path>
31+
<Add_face name="wall_inlet">
32+
<Face_file_path> mesh/solid-mesh-complete/mesh-surfaces/inlet.vtp </Face_file_path>
33+
</Add_face>
34+
<Add_face name="wall_outlet1">
35+
<Face_file_path> mesh/solid-mesh-complete/mesh-surfaces/outlet1.vtp </Face_file_path>
36+
</Add_face>
37+
<Add_face name="wall_outlet2">
38+
<Face_file_path> mesh/solid-mesh-complete/mesh-surfaces/outlet2.vtp </Face_file_path>
39+
</Add_face>
40+
<Add_face name="wall_inner">
41+
<Face_file_path> mesh/solid-mesh-complete/mesh-surfaces/inner.vtp </Face_file_path>
42+
</Add_face>
43+
<Add_face name="wall_outer">
44+
<Face_file_path> mesh/solid-mesh-complete/mesh-surfaces/outer.vtp </Face_file_path>
45+
</Add_face>
46+
<Domain> 1 </Domain>
47+
</Add_mesh>
48+
```
49+
It is important to have two distinct *Domain* attribute, one for the fluid and one for the solid. The path to the files and the names of the surfaces and mesh are at the user discretion. For FSI it is important to define the surface that is the interface between the fluid and solid domain. At this interface the kinematic and dynamic conditions are satisfied automatically since svMultiPhysics solves the system of equations governing the FSI problem in a monolithic way, meaning the fluid and solid equations are strongly coupled and solved as one system of equations. In our input file we do not have to set any boundary conditions at the interface but we need to define which surface is the interface, like this:
50+
```
51+
<Add_projection name="wall_inner" >
52+
<Project_from_face> lumen_wall </Project_from_face>
53+
</Add_projection>
54+
```
55+
At this point we need to add the equations we want to solve. As we briefly described in the introduction, the FSI problem is solved using the ALE method. For this reason we need two equations, one that solve the strongly coupled system of equations that comprises fluid and solid governing equations, and the second equation that solves for the mesh motion. Let's start from the FSI equation type:
56+
```
57+
<Add_equation type="FSI" >
58+
<Coupled> true </Coupled>
59+
<Min_iterations> 1 </Min_iterations>
60+
<Max_iterations> 7 </Max_iterations>
61+
<Tolerance> 1e-4 </Tolerance>
62+
63+
<Domain id="0" >
64+
<Equation> fluid </Equation>
65+
<Density> 1.06 </Density>
66+
<Viscosity model="Constant" >
67+
<Value> 0.04 </Value>
68+
</Viscosity>
69+
<Backflow_stabilization_coefficient> 0.2 </Backflow_stabilization_coefficient>
70+
</Domain>
71+
72+
<Domain id="1" >
73+
<Equation> struct </Equation>
74+
<Constitutive_model type="neoHookean"> </Constitutive_model>
75+
<Dilational_penalty_model> M94 </Dilational_penalty_model>
76+
<Density> 1.2 </Density>
77+
<Elasticity_modulus> 8.0e6 </Elasticity_modulus>
78+
<Poisson_ratio> 0.49 </Poisson_ratio>
79+
</Domain>
80+
81+
<LS type="GMRES" >
82+
<Linear_algebra type="fsils" >
83+
<Preconditioner> fsils </Preconditioner>
84+
</Linear_algebra>
85+
<Tolerance> 1e-4 </Tolerance>
86+
<Max_iterations> 100 </Max_iterations>
87+
<Krylov_space_dimension> 50 </Krylov_space_dimension>
88+
</LS>
89+
90+
<Output type="Spatial" >
91+
<Displacement> true </Displacement>
92+
<Velocity> true </Velocity>
93+
<Pressure> true </Pressure>
94+
<Stress> true </Stress>
95+
<Strain> true </Strain>
96+
<Cauchy_stress> true </Cauchy_stress>
97+
<Def_grad> true </Def_grad>
98+
<VonMises_stress> true </VonMises_stress>
99+
<WSS> true </WSS>
100+
</Output>
101+
102+
<Output type="Alias" >
103+
<Displacement> FS_Displacement </Displacement>
104+
</Output>
105+
106+
<Add_BC name="lumen_inlet" >
107+
<Type> Dir </Type>
108+
<Time_dependence> Unsteady </Time_dependence>
109+
<Temporal_values_file_path> inflow.flow</Temporal_values_file_path>
110+
<Profile> Parabolic </Profile>
111+
<Impose_flux> true </Impose_flux>
112+
<Follower_pressure_load> true </Follower_pressure_load>
113+
</Add_BC>
114+
115+
<Add_BC name="lumen_outlet1" >
116+
<Type> Neu </Type>
117+
<Time_dependence> RCR </Time_dependence>
118+
<RCR_values>
119+
<Capacitance> 4.98e-4 </Capacitance>
120+
<Distal_resistance> 3474.4 </Distal_resistance>
121+
<Proximal_resistance> 347.4 </Proximal_resistance>
122+
<Distal_pressure> 0 </Distal_pressure>
123+
<Initial_pressure> 0 </Initial_pressure>
124+
</RCR_values>
125+
</Add_BC>
126+
127+
<Add_BC name="lumen_outlet2" >
128+
<Type> Neu </Type>
129+
<Time_dependence> RCR </Time_dependence>
130+
<RCR_values>
131+
<Capacitance> 4.98e-4 </Capacitance>
132+
<Distal_resistance> 3474.4 </Distal_resistance>
133+
<Proximal_resistance> 347.4 </Proximal_resistance>
134+
<Distal_pressure> 0 </Distal_pressure>
135+
<Initial_pressure> 0 </Initial_pressure>
136+
</RCR_values>
137+
</Add_BC>
138+
139+
140+
<Add_BC name="wall_inlet" >
141+
<Type> Dir </Type>
142+
<Value> 0.0 </Value>
143+
</Add_BC>
144+
145+
<Add_BC name="wall_outlet1" >
146+
<Type> Dir </Type>
147+
<Value> 0.0 </Value>
148+
</Add_BC>
149+
150+
<Add_BC name="wall_outlet2" >
151+
<Type> Dir </Type>
152+
<Value> 0.0 </Value>
153+
</Add_BC>
154+
155+
<Add_BC name="wall_outer" >
156+
<Type> Robin </Type>
157+
<Stiffness> 1.0e6 </Stiffness>
158+
<Damping> 0.0 </Damping>
159+
<Follower_pressure_load> true </Follower_pressure_load>
160+
</Add_BC>
161+
</Add_equation>
162+
```
163+
At the beginning of the equation section of the input file shown above, we defined parameters for Newton linearization scheme, in particular we set the maximum number of iterations to be performed per time step and the relative tolerance of the numerical residual. The relative tolerance should not be very low, as a rule of thumb the values used in this guide should satisfy most of the cases:
164+
```
165+
<Min_iterations> 1 </Min_iterations>
166+
<Max_iterations> 7 </Max_iterations>
167+
<Tolerance> 1e-4 </Tolerance>
168+
```
169+
Note that if lower tolerances are used, the maximum number of iterations should be increased too, since it will take more iterations to converge to the desired tolernace. Next step is to define the fluid and solid properties. In particular for the fluid we need to set the density and viscosity, while for the solid we need to define the consitutive model to use and the material properties. Once we defined the properties and set what type of equations we want to solve for the fluid and solid domain, we have to define how we want to solve the linear system arising from the Newton linearization step. Currently the best approach supported by svMultiPhysics for solving the linear system for FSI problems is to use GMRES as linear solver with the ad-hoc preconditioner specified as *fsils*. The relative tolerance is important to be less or equal to the one used for the Newton scheme. The total number of iterations performed by the linear solver amount to *Max_iterations X Krylov_space_dimension*. The final linear solver setup in the input file is:
170+
```
171+
<LS type="GMRES" >
172+
<Linear_algebra type="fsils" >
173+
<Preconditioner> fsils </Preconditioner>
174+
</Linear_algebra>
175+
<Tolerance> 1e-4 </Tolerance>
176+
<Max_iterations> 100 </Max_iterations>
177+
<Krylov_space_dimension> 50 </Krylov_space_dimension>
178+
</LS>
179+
```
180+
Note that having *Krylov_space_dimension=50* is generally a good compromise between accuracy and computational efficiency. The FSI problem is completely defined once the boundary conditions are specified. Applying the boundary conditions to the model's surfaces is a critical step in performing a correct simulations of any kind, not only for FSI problems. In this example, for the fluid problem we set a Dirichlet boundary condition at the inlet, in particular we prescribe an unsteady velocity profile based on values from file. At the two outlet we impose Neumann boundary conditions, in other words we impose the traction through the RCR method. For the solid problem we prescribe Dirichlet boundary conditions (clamped conditions) at the inlet and at the two outlets, while we impose Robin boundary conditions at the outer surface. The final step in setting up the FSI simulation of the Abdominal Aortic Aneurysm problem is to define the mesh moving problem. We do something similar to what we did for the previous FSI equation, i.e. we set the Newton linearization scheme parameters, the mesh Poisson ratio (generally the mesh motion is solved considering the fluid mesh as a linear elastostatic problem), the linear solver parameters and the boundary conditions applied at the surfaces of the fluid mesh (generally they follow the boundary conditions applied at the inlet and outlets of the solid mesh). In this example we define the mesh equation in the input file like it follows:
181+
```
182+
<Add_equation type="mesh" >
183+
<Coupled> true </Coupled>
184+
<Min_iterations> 1 </Min_iterations>
185+
<Max_iterations> 7 </Max_iterations>
186+
<Tolerance> 1e-4 </Tolerance>
187+
<Poisson_ratio> 0.49 </Poisson_ratio>
188+
189+
<LS type="GMRES" >
190+
<Linear_algebra type="fsils" >
191+
<Preconditioner> fsils </Preconditioner>
192+
</Linear_algebra>
193+
<Tolerance> 1e-4 </Tolerance>
194+
</LS>
195+
196+
<Output type="Spatial" >
197+
<Displacement> true </Displacement>
198+
</Output>
199+
200+
<Add_BC name="lumen_inlet" >
201+
<Type> Dir </Type>
202+
<Value> 0.0 </Value>
203+
</Add_BC>
204+
205+
<Add_BC name="lumen_outlet1" >
206+
<Type> Dir </Type>
207+
<Value> 0.0 </Value>
208+
</Add_BC>
209+
210+
<Add_BC name="lumen_outlet2" >
211+
<Type> Dir </Type>
212+
<Value> 0.0 </Value>
213+
</Add_BC>
214+
215+
</Add_equation>
216+
```
Binary file not shown.

0 commit comments

Comments
 (0)