60 ApplicationBase(std::string parameter_file, MPI_Comm
const & comm)
62 pcout(std::cout, dealii::Utilities::MPI::this_mpi_process(mpi_comm) == 0),
63 parameter_file(parameter_file)
67 virtual ~ApplicationBase()
72 add_parameters(dealii::ParameterHandler & prm)
74 resolution.add_parameters(prm,
"SpatialResolutionStructure");
75 output_parameters.add_parameters(prm,
"Output");
81 dealii::ParameterHandler prm;
82 this->add_parameters(prm);
83 prm.parse_input(parameter_file,
"",
true,
true);
88 std::shared_ptr<dealii::Mapping<dim>> & mapping,
93 set_resolution_parameters();
99 AssertThrow(param.pull_back_traction ==
true,
100 dealii::ExcMessage(
"Invalid parameter in context of fluid-structure interaction."));
101 param.print(pcout,
"List of parameters for structure:");
104 grid = std::make_shared<Grid<dim>>();
105 create_grid(*grid, mapping, multigrid_mappings);
106 print_grid_info(pcout, *grid);
109 boundary_descriptor = std::make_shared<Structure::BoundaryDescriptor<dim>>();
110 set_boundary_descriptor();
111 verify_boundary_conditions(*boundary_descriptor, *grid);
114 material_descriptor = std::make_shared<Structure::MaterialDescriptor>();
115 set_material_descriptor();
118 field_functions = std::make_shared<Structure::FieldFunctions<dim>>();
119 set_field_functions();
123 get_parameters()
const
128 std::shared_ptr<Structure::BoundaryDescriptor<dim>
const>
129 get_boundary_descriptor()
const
131 return boundary_descriptor;
134 std::shared_ptr<Structure::MaterialDescriptor const>
135 get_material_descriptor()
const
137 return material_descriptor;
140 std::shared_ptr<Structure::FieldFunctions<dim>
const>
141 get_field_functions()
const
143 return field_functions;
146 virtual std::shared_ptr<Structure::PostProcessor<dim, Number>>
147 create_postprocessor() = 0;
150 MPI_Comm
const mpi_comm;
152 dealii::ConditionalOStream pcout;
155 std::shared_ptr<Structure::MaterialDescriptor> material_descriptor;
156 std::shared_ptr<Structure::BoundaryDescriptor<dim>> boundary_descriptor;
157 std::shared_ptr<Structure::FieldFunctions<dim>> field_functions;
159 std::string parameter_file;
165 set_resolution_parameters()
167 param.degree = resolution.degree;
168 param.grid.n_refine_global = resolution.refine_space;
172 set_parameters() = 0;
176 std::shared_ptr<dealii::Mapping<dim>> & mapping,
180 set_boundary_descriptor() = 0;
183 set_material_descriptor() = 0;
186 set_field_functions() = 0;
199 ApplicationBase(std::string parameter_file, MPI_Comm
const & comm)
201 pcout(std::cout, dealii::Utilities::MPI::this_mpi_process(mpi_comm) == 0),
202 parameter_file(parameter_file)
206 virtual ~ApplicationBase()
211 add_parameters(dealii::ParameterHandler & prm)
213 resolution.add_parameters(prm,
"SpatialResolutionFluid");
214 output_parameters.add_parameters(prm,
"Output");
220 dealii::ParameterHandler prm;
221 this->add_parameters(prm);
222 prm.parse_input(parameter_file,
"",
true,
true);
227 std::shared_ptr<dealii::Mapping<dim>> & mapping,
232 set_resolution_parameters();
237 param.print(pcout,
"List of parameters for incompressible flow solver:");
240 AssertThrow(param.problem_type == IncNS::ProblemType::Unsteady,
241 dealii::ExcMessage(
"Invalid parameter in context of fluid-structure interaction."));
242 AssertThrow(param.ale_formulation ==
true,
243 dealii::ExcMessage(
"Invalid parameter in context of fluid-structure interaction."));
246 grid = std::make_shared<Grid<dim>>();
247 create_grid(*grid, mapping, multigrid_mappings);
248 print_grid_info(pcout, *grid);
251 boundary_descriptor = std::make_shared<IncNS::BoundaryDescriptor<dim>>();
252 set_boundary_descriptor();
253 IncNS::verify_boundary_conditions<dim>(*boundary_descriptor, *grid);
256 field_functions = std::make_shared<IncNS::FieldFunctions<dim>>();
257 set_field_functions();
262 if(param.mesh_movement_type == IncNS::MeshMovementType::Poisson)
265 set_parameters_ale_poisson();
266 ale_poisson_param.check();
267 AssertThrow(ale_poisson_param.right_hand_side ==
false,
268 dealii::ExcMessage(
"Parameter does not make sense in context of FSI."));
270 ale_poisson_param.grid.create_coarse_triangulations ==
271 param.grid.create_coarse_triangulations,
273 "ALE and fluid use the same Grid, requiring the same settings in terms of multigrid coarsening."));
275 ale_poisson_param.print(pcout,
"List of parameters for ALE solver (Poisson):");
278 ale_poisson_boundary_descriptor = std::make_shared<Poisson::BoundaryDescriptor<1, dim>>();
279 set_boundary_descriptor_ale_poisson();
280 verify_boundary_conditions(*ale_poisson_boundary_descriptor, *grid);
283 ale_poisson_field_functions = std::make_shared<Poisson::FieldFunctions<dim>>();
284 set_field_functions_ale_poisson();
286 else if(param.mesh_movement_type == IncNS::MeshMovementType::Elasticity)
289 set_parameters_ale_elasticity();
290 ale_elasticity_param.check();
291 AssertThrow(ale_elasticity_param.body_force ==
false,
292 dealii::ExcMessage(
"Parameter does not make sense in context of FSI."));
294 ale_poisson_param.grid.create_coarse_triangulations ==
295 param.grid.create_coarse_triangulations,
297 "ALE and fluid use the same Grid, requiring the same settings in terms of multigrid coarsening."));
299 ale_elasticity_param.print(pcout,
"List of parameters for ALE solver (elasticity):");
302 ale_elasticity_boundary_descriptor = std::make_shared<Structure::BoundaryDescriptor<dim>>();
303 set_boundary_descriptor_ale_elasticity();
304 verify_boundary_conditions(*ale_elasticity_boundary_descriptor, *grid);
307 ale_elasticity_material_descriptor = std::make_shared<Structure::MaterialDescriptor>();
308 set_material_descriptor_ale_elasticity();
311 ale_elasticity_field_functions = std::make_shared<Structure::FieldFunctions<dim>>();
312 set_field_functions_ale_elasticity();
316 AssertThrow(
false, dealii::ExcMessage(
"not implemented."));
321 get_parameters()
const
326 std::shared_ptr<IncNS::BoundaryDescriptor<dim>
const>
327 get_boundary_descriptor()
const
329 return boundary_descriptor;
332 std::shared_ptr<IncNS::FieldFunctions<dim>
const>
333 get_field_functions()
const
335 return field_functions;
338 virtual std::shared_ptr<IncNS::PostProcessorBase<dim, Number>>
339 create_postprocessor() = 0;
342 get_parameters_ale_poisson()
const
344 return ale_poisson_param;
347 std::shared_ptr<Poisson::BoundaryDescriptor<1, dim>
const>
348 get_boundary_descriptor_ale_poisson()
const
350 return ale_poisson_boundary_descriptor;
353 std::shared_ptr<Poisson::FieldFunctions<dim>
const>
354 get_field_functions_ale_poisson()
const
356 return ale_poisson_field_functions;
360 get_parameters_ale_elasticity()
const
362 return ale_elasticity_param;
365 std::shared_ptr<Structure::BoundaryDescriptor<dim>
const>
366 get_boundary_descriptor_ale_elasticity()
const
368 return ale_elasticity_boundary_descriptor;
371 std::shared_ptr<Structure::MaterialDescriptor const>
372 get_material_descriptor_ale_elasticity()
const
374 return ale_elasticity_material_descriptor;
377 std::shared_ptr<Structure::FieldFunctions<dim>
const>
378 get_field_functions_ale_elasticity()
const
380 return ale_elasticity_field_functions;
384 MPI_Comm
const mpi_comm;
386 dealii::ConditionalOStream pcout;
390 std::shared_ptr<IncNS::FieldFunctions<dim>> field_functions;
391 std::shared_ptr<IncNS::BoundaryDescriptor<dim>> boundary_descriptor;
397 std::shared_ptr<Poisson::FieldFunctions<dim>> ale_poisson_field_functions;
398 std::shared_ptr<Poisson::BoundaryDescriptor<1, dim>> ale_poisson_boundary_descriptor;
402 std::shared_ptr<Structure::FieldFunctions<dim>> ale_elasticity_field_functions;
403 std::shared_ptr<Structure::BoundaryDescriptor<dim>> ale_elasticity_boundary_descriptor;
404 std::shared_ptr<Structure::MaterialDescriptor> ale_elasticity_material_descriptor;
406 std::string parameter_file;
412 set_resolution_parameters()
414 param.degree_u = resolution.degree;
415 param.grid.n_refine_global = resolution.refine_space;
420 set_parameters() = 0;
424 std::shared_ptr<dealii::Mapping<dim>> & mapping,
428 set_boundary_descriptor() = 0;
431 set_field_functions() = 0;
437 set_parameters_ale_poisson() = 0;
440 set_boundary_descriptor_ale_poisson() = 0;
443 set_field_functions_ale_poisson() = 0;
447 set_parameters_ale_elasticity() = 0;
450 set_boundary_descriptor_ale_elasticity() = 0;
453 set_material_descriptor_ale_elasticity() = 0;
456 set_field_functions_ale_elasticity() = 0;