Skip to content

Commit db4e9bb

Browse files
committed
Merge branch 'master' into mpm/change-application-name
2 parents c6187a5 + 52a5b17 commit db4e9bb

21 files changed

Lines changed: 318432 additions & 1 deletion

co_simulation/validation/README.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,3 +5,5 @@ This folder contains the validation cases:
55
- [Mok FSI benchmark](https://github.com/KratosMultiphysics/Examples/blob/master/co_simulation/validation/fsi_mok/README.md)
66

77
- [Dam break against a flexible wall FSI benchmark](https://github.com/KratosMultiphysics/Examples/blob/master/co_simulation/validation/dam_break_flex_wall/README.md)
8+
9+
- [FSI Turek Benchmark](https://github.com/KratosMultiphysics/Examples/tree/master/co_simulation/validation/fsi_turek_FSI2)
Lines changed: 49 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,49 @@
1+
# [Turek benchmark - FSI2](https://github.com/KratosMultiphysics/Examples/tree/master/fluid_structure_interaction/validation/fsi_turek_FSI2)
2+
3+
**Author:** [Juan Ignacio Camarotti](https://github.com/juancamarotti)
4+
5+
**Kratos version:** 9.4
6+
7+
**Source files:** [Turek benchmark - FSI2](https://github.com/KratosMultiphysics/Examples/tree/master/co_simulation/validation/fsi_turek_FSI2/source)
8+
9+
## Case Specification
10+
11+
This is a 2D simulation of the well-known Turek FSI benchmark. It consists in a 2D fluid channel that contains a cylinder to which flexible flag is attached. In this case, the FSI2 set-up is taken into account. The main challenge of such FSI2 test is the large oscillations of the flexible flag associated to the fluid-structure interaction mechanisms. It is therefore considered as a challenging test for the coupling algorithms. The main reference of the test can be found in [Turek et. al. (2006)](https://doi.org/10.1007/3-540-34596-5_15). The following applications of Kratos are used:
12+
* CoSimulationApplication
13+
* MappingApplication
14+
* MeshMovingApplication
15+
* FluidDynamicsApplication
16+
* StructuralMechanicsApplication
17+
* ConstitutiveLawsApplication
18+
* LinearSolversApplication
19+
20+
The problem geometry as well as the boundary conditions are sketched below (image from Turek et. al. (2006).
21+
<p align="center">
22+
<img src="data/turek_benchmark_geometry.png" alt="Turek benchmark geometry." style="width: 800px;"/>
23+
</p>
24+
25+
A Newtonian constitutive law is considered in the fluid domain. The fluid characteristic parameters are:
26+
* Density (&rho;): 1.0E+03 _Kg/m<sup>3</sup>_
27+
* Kinematic viscosity (&nu;): 1.0 _m<sup>2</sup>/s_
28+
29+
On the other hand, a Kirchhoff - Saint Venant plane strain constitutive law with is used in the structure domain. The structure mechanical parameters are
30+
* Density (&rho;): 1.0E+04 _Kg/m<sup>3</sup>_
31+
* Elastic modulus (E): 1.4E+06 _Pa_
32+
* Poisson ratio (&nu;): 0.4
33+
34+
The time step is 0.002 seconds, which is small enough to capture the oscillation peak values. The total simulation time is 20.0 seconds.
35+
36+
## Results
37+
38+
The structural mechanics problem is solved using a FE structured mesh conformed by around 3.3k linear quadrilateral elements implementing a Total Lagrangian formulation. On the other hand, the fluid dynamics problem is solved using a FE unstructured mesh of around 30k linear triangular elements implementing an ALE ASGS Navier-Stokes formulation. The obtained fluid velocity and structure displacement fields, together with the deformed geometry, are shown below. The obtained results are in agreement to the ones in the reference publication.
39+
40+
<p align="center">
41+
<img src="data/turek_benchmark_FSI2_v.gif" alt="Fluid velocity field [m/s]." style="width: 800px;"/>
42+
</p>
43+
44+
<p align="center">
45+
<img src="data/turek_benchmark_FSI2_d.gif" alt="Structure displacement field [m]." style="width: 800px;"/>
46+
</p>
47+
48+
## References
49+
Turek S., Hron J. (2006) Proposal for Numerical Benchmarking of Fluid-Structure Interaction between an Elastic Object and Laminar Incompressible Flow. In: Bungartz HJ., Schäfer M. (eds) Fluid-Structure Interaction. Lecture Notes in Computational Science and Engineering, vol 53. Springer, Berlin, Heidelberg [https://doi.org/10.1007/3-540-34596-5_15](https://doi.org/10.1007/3-540-34596-5_15)
1.67 MB
Loading
5.21 MB
Loading
49.9 KB
Loading
Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
{
2+
"properties" : [{
3+
"model_part_name" : "FluidModelPart.Parts_Fluid",
4+
"properties_id" : 1,
5+
"Material" : {
6+
"constitutive_law" : {
7+
"name" : "Newtonian2DLaw"
8+
},
9+
"Variables" : {
10+
"DENSITY": 1000.0,
11+
"DYNAMIC_VISCOSITY" : 1.0
12+
},
13+
"Tables" : {}
14+
}
15+
}]
16+
}
Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
import KratosMultiphysics as KM
2+
from KratosMultiphysics.CoSimulationApplication.co_simulation_analysis import CoSimulationAnalysis
3+
4+
"""
5+
For user-scripting it is intended that a new class is derived
6+
from CoSimulationAnalysis to do modifications
7+
Check also "kratos/python_scripts/analysis_stage.py" for available methods that can be overridden
8+
"""
9+
10+
parameter_file_name = "ProjectParametersCoSim.json"
11+
with open(parameter_file_name,'r') as parameter_file:
12+
parameters = KM.Parameters(parameter_file.read())
13+
14+
simulation = CoSimulationAnalysis(parameters)
15+
simulation.Run()
Lines changed: 180 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,180 @@
1+
{
2+
"problem_data" : {
3+
"problem_name" : "fsi_turek_FSI2",
4+
"parallel_type" : "OpenMP",
5+
"echo_level" : 0,
6+
"start_time" : 0.0,
7+
"end_time" : 20.0
8+
},
9+
"solver_settings" : {
10+
"solver_type" : "ale_fluid",
11+
"ale_boundary_parts" : ["FluidNoSlipInterface2D_FluidInterface"],
12+
"mesh_motion_solver_settings" : {
13+
"echo_level" : 0,
14+
"domain_size" : 2,
15+
"model_part_name" : "FluidModelPart",
16+
"solver_type" : "structural_similarity"
17+
},
18+
"fluid_solver_settings": {
19+
"solver_type" : "Monolithic",
20+
"domain_size" : 2,
21+
"model_part_name" : "FluidModelPart",
22+
"model_import_settings" : {
23+
"input_type" : "mdpa",
24+
"input_filename" : "fsi_turek_FSI2_Fluid"
25+
},
26+
"material_import_settings" : {
27+
"materials_filename" : "FluidMaterials.json"
28+
},
29+
"echo_level" : 0,
30+
"compute_reactions" : true,
31+
"formulation": {
32+
"element_type": "qsvms",
33+
"use_orthogonal_subscales": false,
34+
"dynamic_tau": 1.0
35+
},
36+
"maximum_iterations" : 10,
37+
"relative_velocity_tolerance" : 1e-6,
38+
"absolute_velocity_tolerance" : 1e-6,
39+
"relative_pressure_tolerance" : 1e-6,
40+
"absolute_pressure_tolerance" : 1e-6,
41+
"volume_model_part_name" : "Parts_Fluid",
42+
"skin_parts" : ["AutomaticInlet2D_Inlet","Outlet2D_Outlet","NoSlip2D_NoSlip","NoSlip2D_Cylinder","FluidNoSlipInterface2D_FluidInterface"],
43+
"no_skin_parts" : ["ALEMeshDisplacementBC2D_FluidALEMeshFreeX","ALEMeshDisplacementBC2D_FluidALEMeshFixXY","ALEMeshDisplacementBC2D_Cylinder"],
44+
"time_stepping" : {
45+
"automatic_time_step" : false,
46+
"time_step" : 0.002
47+
}
48+
}
49+
},
50+
"processes" : {
51+
"initial_conditions_process_list" : [],
52+
"boundary_conditions_process_list" : [{
53+
"python_module" : "apply_inlet_process",
54+
"kratos_module" : "KratosMultiphysics.FluidDynamicsApplication",
55+
"Parameters" : {
56+
"model_part_name" : "FluidModelPart.AutomaticInlet2D_Inlet",
57+
"variable_name" : "VELOCITY",
58+
"modulus" : "1.5*(0.5*(1-cos(0.5*pi*t))*1.0)*(4.0/0.1681)*y*(0.41-y)",
59+
"direction" : "automatic_inwards_normal",
60+
"interval" : [0.0,2.0]
61+
}
62+
},{
63+
"python_module" : "apply_inlet_process",
64+
"kratos_module" : "KratosMultiphysics.FluidDynamicsApplication",
65+
"Parameters" : {
66+
"model_part_name" : "FluidModelPart.AutomaticInlet2D_Inlet",
67+
"variable_name" : "VELOCITY",
68+
"modulus" : "1.5*(1.0)*(4.0/0.1681)*y*(0.41-y)",
69+
"direction" : "automatic_inwards_normal",
70+
"interval" : [2.0,"End"]
71+
}
72+
},{
73+
"python_module" : "apply_outlet_process",
74+
"kratos_module" : "KratosMultiphysics.FluidDynamicsApplication",
75+
"Parameters" : {
76+
"model_part_name" : "FluidModelPart.Outlet2D_Outlet",
77+
"variable_name" : "PRESSURE",
78+
"constrained" : true,
79+
"value" : 0.0,
80+
"hydrostatic_outlet" : false,
81+
"h_top" : 0.0
82+
}
83+
},{
84+
"python_module" : "apply_noslip_process",
85+
"kratos_module" : "KratosMultiphysics.FluidDynamicsApplication",
86+
"Parameters" : {
87+
"model_part_name" : "FluidModelPart.NoSlip2D_NoSlip"
88+
}
89+
},{
90+
"python_module" : "apply_noslip_process",
91+
"kratos_module" : "KratosMultiphysics.FluidDynamicsApplication",
92+
"Parameters" : {
93+
"model_part_name" : "FluidModelPart.NoSlip2D_Cylinder"
94+
}
95+
},
96+
{
97+
"python_module" : "apply_noslip_process",
98+
"kratos_module" : "KratosMultiphysics.FluidDynamicsApplication",
99+
"Parameters" : {
100+
"model_part_name" : "FluidModelPart.FluidNoSlipInterface2D_FluidInterface"
101+
}
102+
}],
103+
"gravity" : [],
104+
"ale_boundary_conditions" : [{
105+
"python_module" : "fix_vector_variable_process",
106+
"kratos_module" : "KratosMultiphysics",
107+
"help" : "This process fixes the selected components of a given vector variable",
108+
"process_name" : "AssignVectorVariableProcess",
109+
"Parameters" : {
110+
"model_part_name" : "FluidModelPart.FluidNoSlipInterface2D_FluidInterface",
111+
"variable_name" : "MESH_DISPLACEMENT",
112+
"constrained" : [true, true, true]
113+
}
114+
115+
},{
116+
"python_module" : "fix_vector_variable_process",
117+
"kratos_module" : "KratosMultiphysics",
118+
"help" : "This process fixes the selected components of a given vector variable",
119+
"process_name" : "AssignVectorVariableProcess",
120+
"Parameters" : {
121+
"model_part_name" : "FluidModelPart.AutomaticInlet2D_Inlet",
122+
"variable_name" : "MESH_DISPLACEMENT",
123+
"constrained" : [true, true, true]
124+
}
125+
126+
},{
127+
"python_module" : "fix_vector_variable_process",
128+
"kratos_module" : "KratosMultiphysics",
129+
"help" : "This process fixes the selected components of a given vector variable",
130+
"process_name" : "AssignVectorVariableProcess",
131+
"Parameters" : {
132+
"model_part_name" : "FluidModelPart.NoSlip2D_NoSlip",
133+
"variable_name" : "MESH_DISPLACEMENT",
134+
"constrained" : [true, true, true]
135+
}
136+
137+
},{
138+
"python_module" : "fix_vector_variable_process",
139+
"kratos_module" : "KratosMultiphysics",
140+
"help" : "This process fixes the selected components of a given vector variable",
141+
"process_name" : "AssignVectorVariableProcess",
142+
"Parameters" : {
143+
"model_part_name" : "FluidModelPart.Outlet2D_Outlet",
144+
"variable_name" : "MESH_DISPLACEMENT",
145+
"constrained" : [true, true, true]
146+
}
147+
148+
},{
149+
"python_module" : "fix_vector_variable_process",
150+
"kratos_module" : "KratosMultiphysics",
151+
"help" : "This process fixes the selected components of a given vector variable",
152+
"process_name" : "AssignVectorVariableProcess",
153+
"Parameters" : {
154+
"model_part_name" : "FluidModelPart.NoSlip2D_Cylinder",
155+
"variable_name" : "MESH_DISPLACEMENT",
156+
"constrained" : [true, true, true]
157+
}}
158+
]
159+
},
160+
"output_processes" : {
161+
"vtk_output" : [{
162+
"python_module" : "vtk_output_process",
163+
"kratos_module" : "KratosMultiphysics",
164+
"process_name" : "VtkOutputProcess",
165+
"help" : "This process writes postprocessing files for Paraview",
166+
"Parameters" : {
167+
"model_part_name" : "FluidModelPart.Parts_Fluid",
168+
"output_control_type" : "step",
169+
"output_interval" : 1,
170+
"file_format" : "binary",
171+
"output_precision" : 7,
172+
"output_sub_model_parts" : false,
173+
"output_path" : "vtk_output_fsi_turek2_cfd",
174+
"save_output_files_in_folder" : true,
175+
"nodal_solution_step_data_variables" : ["VELOCITY","PRESSURE","MESH_DISPLACEMENT","MESH_VELOCITY", "REACTION"]
176+
}
177+
}
178+
]
179+
}
180+
}
Lines changed: 89 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,89 @@
1+
{
2+
"problem_data" : {
3+
"problem_name" : "fsi_turek_FSI2",
4+
"parallel_type" : "OpenMP",
5+
"start_time" : 0.0,
6+
"end_time" : 20.0,
7+
"echo_level" : 0
8+
},
9+
"solver_settings" : {
10+
"solver_type" : "dynamic",
11+
"echo_level" : 1,
12+
"analysis_type" : "non_linear",
13+
"time_integration_method" : "implicit",
14+
"scheme_type" : "bossak",
15+
"model_part_name" : "Structure",
16+
"domain_size" : 2,
17+
"model_import_settings" : {
18+
"input_type" : "mdpa",
19+
"input_filename" : "fsi_turek_FSI2_Structural"
20+
},
21+
"material_import_settings" : {
22+
"materials_filename" : "StructuralMaterials.json"
23+
},
24+
"time_stepping" : {
25+
"time_step" : 0.002
26+
},
27+
"convergence_criterion" : "residual_criterion",
28+
"displacement_relative_tolerance" : 0.0001,
29+
"displacement_absolute_tolerance" : 1e-9,
30+
"residual_relative_tolerance" : 1e-6,
31+
"residual_absolute_tolerance" : 1e-8,
32+
"max_iteration" : 10,
33+
"rotation_dofs" : false
34+
},
35+
"processes" : {
36+
"constraints_process_list" : [{
37+
"python_module" : "assign_vector_variable_process",
38+
"kratos_module" : "KratosMultiphysics",
39+
"Parameters" : {
40+
"model_part_name" : "Structure.DISPLACEMENT_FixedDisplacement",
41+
"variable_name" : "DISPLACEMENT",
42+
"constrained" : [true,true,true],
43+
"value" : [0.0,0.0,0.0],
44+
"interval" : [0.0,"End"]
45+
}
46+
}],
47+
"loads_process_list" : []
48+
},
49+
"output_processes" : {
50+
"vtk_output" : [{
51+
"python_module" : "vtk_output_process",
52+
"kratos_module" : "KratosMultiphysics",
53+
"process_name" : "VtkOutputProcess",
54+
"help" : "This process writes postprocessing files for Paraview",
55+
"Parameters" : {
56+
"model_part_name" : "Structure",
57+
"output_control_type" : "step",
58+
"output_interval" : 1,
59+
"file_format" : "binary",
60+
"output_precision" : 7,
61+
"output_sub_model_parts" : false,
62+
"output_path" : "vtk_output_fsi_turek2_csd",
63+
"save_output_files_in_folder" : true,
64+
"nodal_solution_step_data_variables" : ["DISPLACEMENT", "POINT_LOAD"]
65+
}
66+
},{
67+
"python_module" : "point_output_process",
68+
"kratos_module" : "KratosMultiphysics",
69+
"process_name" : "PointOutputProcess",
70+
"help" : "This process writes postprocessing files for Paraview",
71+
"Parameters" : {
72+
"model_part_name" : "Structure",
73+
"entity_type" : "node",
74+
"interval" : [0.0, "End"],
75+
"position" : [0.60000 ,0.20067 ,0.00000],
76+
"output_variables" : ["DISPLACEMENT_X"],
77+
"historical_value" : true,
78+
"search_configuration" : "initial",
79+
"search_tolerance" : 1e-6,
80+
"print_format" : "",
81+
"output_file_settings" : {
82+
"file_name" : "Point_A_Displacement_X",
83+
"output_path": "",
84+
"write_buffer_size" : 1,
85+
"file_extension" : "dat"
86+
}
87+
}}]
88+
}
89+
}

0 commit comments

Comments
 (0)