66 ApplicationBase(std::string parameter_file, MPI_Comm
const & comm)
68 pcout(std::cout, dealii::Utilities::MPI::this_mpi_process(mpi_comm) == 0),
69 parameter_file(parameter_file)
73 virtual ~ApplicationBase()
78 add_parameters(dealii::ParameterHandler & prm)
80 resolution.add_parameters(prm,
"SpatialResolutionStructure");
81 output_parameters.add_parameters(prm,
"Output");
87 dealii::ParameterHandler prm;
88 this->add_parameters(prm);
89 prm.parse_input(parameter_file,
"",
true,
true);
94 std::shared_ptr<dealii::Mapping<dim>> & mapping,
99 set_resolution_parameters();
105 AssertThrow(param.pull_back_traction ==
true,
106 dealii::ExcMessage(
"Invalid parameter in context of fluid-structure interaction."));
107 param.print(pcout,
"List of parameters for structure:");
110 grid = std::make_shared<Grid<dim>>();
111 create_grid(*grid, mapping, multigrid_mappings);
112 print_grid_info(pcout, *grid);
115 boundary_descriptor = std::make_shared<Structure::BoundaryDescriptor<dim>>();
116 set_boundary_descriptor();
117 verify_boundary_conditions(*boundary_descriptor, *grid);
120 material_descriptor = std::make_shared<Structure::MaterialDescriptor>();
121 set_material_descriptor();
124 field_functions = std::make_shared<Structure::FieldFunctions<dim>>();
125 set_field_functions();
129 get_parameters()
const
134 std::shared_ptr<Structure::BoundaryDescriptor<dim>
const>
135 get_boundary_descriptor()
const
137 return boundary_descriptor;
140 std::shared_ptr<Structure::MaterialDescriptor const>
141 get_material_descriptor()
const
143 return material_descriptor;
146 std::shared_ptr<Structure::FieldFunctions<dim>
const>
147 get_field_functions()
const
149 return field_functions;
152 virtual std::shared_ptr<Structure::PostProcessor<dim, Number>>
153 create_postprocessor() = 0;
156 MPI_Comm
const mpi_comm;
158 dealii::ConditionalOStream pcout;
161 std::shared_ptr<Structure::MaterialDescriptor> material_descriptor;
162 std::shared_ptr<Structure::BoundaryDescriptor<dim>> boundary_descriptor;
163 std::shared_ptr<Structure::FieldFunctions<dim>> field_functions;
165 std::string parameter_file;
171 set_resolution_parameters()
173 param.degree = resolution.degree;
174 param.grid.n_refine_global = resolution.refine_space;
178 set_parameters() = 0;
182 std::shared_ptr<dealii::Mapping<dim>> & mapping,
186 set_boundary_descriptor() = 0;
189 set_material_descriptor() = 0;
192 set_field_functions() = 0;
205 ApplicationBase(std::string parameter_file, MPI_Comm
const & comm)
207 pcout(std::cout, dealii::Utilities::MPI::this_mpi_process(mpi_comm) == 0),
208 parameter_file(parameter_file)
212 virtual ~ApplicationBase()
217 add_parameters(dealii::ParameterHandler & prm)
219 resolution.add_parameters(prm,
"SpatialResolutionFluid");
220 output_parameters.add_parameters(prm,
"Output");
226 dealii::ParameterHandler prm;
227 this->add_parameters(prm);
228 prm.parse_input(parameter_file,
"",
true,
true);
233 std::shared_ptr<dealii::Mapping<dim>> & mapping,
238 set_resolution_parameters();
243 param.print(pcout,
"List of parameters for incompressible flow solver:");
246 AssertThrow(param.problem_type == IncNS::ProblemType::Unsteady,
247 dealii::ExcMessage(
"Invalid parameter in context of fluid-structure interaction."));
248 AssertThrow(param.ale_formulation ==
true,
249 dealii::ExcMessage(
"Invalid parameter in context of fluid-structure interaction."));
252 grid = std::make_shared<Grid<dim>>();
253 create_grid(*grid, mapping, multigrid_mappings);
254 print_grid_info(pcout, *grid);
257 boundary_descriptor = std::make_shared<IncNS::BoundaryDescriptor<dim>>();
258 set_boundary_descriptor();
259 IncNS::verify_boundary_conditions<dim>(*boundary_descriptor, *grid);
262 field_functions = std::make_shared<IncNS::FieldFunctions<dim>>();
263 set_field_functions();
268 if(param.mesh_movement_type == IncNS::MeshMovementType::Poisson)
271 set_parameters_ale_poisson();
272 ale_poisson_param.check();
273 AssertThrow(ale_poisson_param.right_hand_side ==
false,
274 dealii::ExcMessage(
"Parameter does not make sense in context of FSI."));
276 ale_poisson_param.grid.create_coarse_triangulations ==
277 param.grid.create_coarse_triangulations,
279 "ALE and fluid use the same Grid, requiring the same settings in terms of multigrid coarsening."));
281 ale_poisson_param.print(pcout,
"List of parameters for ALE solver (Poisson):");
284 ale_poisson_boundary_descriptor = std::make_shared<Poisson::BoundaryDescriptor<1, dim>>();
285 set_boundary_descriptor_ale_poisson();
286 verify_boundary_conditions(*ale_poisson_boundary_descriptor, *grid);
289 ale_poisson_field_functions = std::make_shared<Poisson::FieldFunctions<dim>>();
290 set_field_functions_ale_poisson();
292 else if(param.mesh_movement_type == IncNS::MeshMovementType::Elasticity)
295 set_parameters_ale_elasticity();
296 ale_elasticity_param.check();
297 AssertThrow(ale_elasticity_param.body_force ==
false,
298 dealii::ExcMessage(
"Parameter does not make sense in context of FSI."));
300 ale_poisson_param.grid.create_coarse_triangulations ==
301 param.grid.create_coarse_triangulations,
303 "ALE and fluid use the same Grid, requiring the same settings in terms of multigrid coarsening."));
305 ale_elasticity_param.print(pcout,
"List of parameters for ALE solver (elasticity):");
308 ale_elasticity_boundary_descriptor = std::make_shared<Structure::BoundaryDescriptor<dim>>();
309 set_boundary_descriptor_ale_elasticity();
310 verify_boundary_conditions(*ale_elasticity_boundary_descriptor, *grid);
313 ale_elasticity_material_descriptor = std::make_shared<Structure::MaterialDescriptor>();
314 set_material_descriptor_ale_elasticity();
317 ale_elasticity_field_functions = std::make_shared<Structure::FieldFunctions<dim>>();
318 set_field_functions_ale_elasticity();
322 AssertThrow(
false, dealii::ExcMessage(
"not implemented."));
327 get_parameters()
const
332 std::shared_ptr<IncNS::BoundaryDescriptor<dim>
const>
333 get_boundary_descriptor()
const
335 return boundary_descriptor;
338 std::shared_ptr<IncNS::FieldFunctions<dim>
const>
339 get_field_functions()
const
341 return field_functions;
344 virtual std::shared_ptr<IncNS::PostProcessorBase<dim, Number>>
345 create_postprocessor() = 0;
348 get_parameters_ale_poisson()
const
350 return ale_poisson_param;
353 std::shared_ptr<Poisson::BoundaryDescriptor<1, dim>
const>
354 get_boundary_descriptor_ale_poisson()
const
356 return ale_poisson_boundary_descriptor;
359 std::shared_ptr<Poisson::FieldFunctions<dim>
const>
360 get_field_functions_ale_poisson()
const
362 return ale_poisson_field_functions;
366 get_parameters_ale_elasticity()
const
368 return ale_elasticity_param;
371 std::shared_ptr<Structure::BoundaryDescriptor<dim>
const>
372 get_boundary_descriptor_ale_elasticity()
const
374 return ale_elasticity_boundary_descriptor;
377 std::shared_ptr<Structure::MaterialDescriptor const>
378 get_material_descriptor_ale_elasticity()
const
380 return ale_elasticity_material_descriptor;
383 std::shared_ptr<Structure::FieldFunctions<dim>
const>
384 get_field_functions_ale_elasticity()
const
386 return ale_elasticity_field_functions;
390 MPI_Comm
const mpi_comm;
392 dealii::ConditionalOStream pcout;
396 std::shared_ptr<IncNS::FieldFunctions<dim>> field_functions;
397 std::shared_ptr<IncNS::BoundaryDescriptor<dim>> boundary_descriptor;
403 std::shared_ptr<Poisson::FieldFunctions<dim>> ale_poisson_field_functions;
404 std::shared_ptr<Poisson::BoundaryDescriptor<1, dim>> ale_poisson_boundary_descriptor;
408 std::shared_ptr<Structure::FieldFunctions<dim>> ale_elasticity_field_functions;
409 std::shared_ptr<Structure::BoundaryDescriptor<dim>> ale_elasticity_boundary_descriptor;
410 std::shared_ptr<Structure::MaterialDescriptor> ale_elasticity_material_descriptor;
412 std::string parameter_file;
418 set_resolution_parameters()
420 param.degree_u = resolution.degree;
421 param.grid.n_refine_global = resolution.refine_space;
426 set_parameters() = 0;
430 std::shared_ptr<dealii::Mapping<dim>> & mapping,
434 set_boundary_descriptor() = 0;
437 set_field_functions() = 0;
443 set_parameters_ale_poisson() = 0;
446 set_boundary_descriptor_ale_poisson() = 0;
449 set_field_functions_ale_poisson() = 0;
453 set_parameters_ale_elasticity() = 0;
456 set_boundary_descriptor_ale_elasticity() = 0;
459 set_material_descriptor_ale_elasticity() = 0;
462 set_field_functions_ale_elasticity() = 0;