56 add_parameters(dealii::ParameterHandler & prm, std::vector<std::string>
const & subsection_names)
58 for(
auto & name : subsection_names)
60 prm.enter_subsection(name);
63 resolution.add_parameters(prm);
65 output_parameters.add_parameters(prm);
67 for(
auto & name : subsection_names)
70 prm.leave_subsection();
74 FluidBase(std::string parameter_file, MPI_Comm
const & comm)
76 pcout(std::cout, dealii::Utilities::MPI::this_mpi_process(mpi_comm) == 0),
77 parameter_file(parameter_file)
87 std::shared_ptr<dealii::Mapping<dim>> & mapping,
89 std::vector<std::string>
const & subsection_names)
91 parse_parameters(subsection_names);
94 param.degree_u = resolution.degree;
95 param.grid.n_refine_global = resolution.refine_space;
99 param.print(pcout,
"List of parameters:");
102 grid = std::make_shared<Grid<dim>>();
103 create_grid(*grid, mapping, multigrid_mappings);
104 print_grid_info(pcout, *grid);
107 boundary_descriptor = std::make_shared<IncNS::BoundaryDescriptor<dim>>();
108 set_boundary_descriptor();
109 verify_boundary_conditions<dim>(*boundary_descriptor, *grid);
112 field_functions = std::make_shared<IncNS::FieldFunctions<dim>>();
113 set_field_functions();
116 virtual std::shared_ptr<IncNS::PostProcessorBase<dim, Number>>
117 create_postprocessor() = 0;
120 get_parameters()
const
125 std::shared_ptr<IncNS::BoundaryDescriptor<dim>
const>
126 get_boundary_descriptor()
const
128 return boundary_descriptor;
131 std::shared_ptr<IncNS::FieldFunctions<dim>
const>
132 get_field_functions()
const
134 return field_functions;
138 virtual std::shared_ptr<dealii::Function<dim>>
139 create_mesh_movement_function()
141 std::shared_ptr<dealii::Function<dim>> mesh_motion =
142 std::make_shared<dealii::Functions::ZeroFunction<dim>>(dim);
149 parse_parameters(std::vector<std::string>
const & subsection_names)
151 dealii::ParameterHandler prm;
152 this->add_parameters(prm, subsection_names);
153 prm.parse_input(parameter_file,
"",
true,
true);
156 MPI_Comm
const mpi_comm;
158 dealii::ConditionalOStream pcout;
162 std::shared_ptr<IncNS::FieldFunctions<dim>> field_functions;
163 std::shared_ptr<IncNS::BoundaryDescriptor<dim>> boundary_descriptor;
165 std::string parameter_file;
171 set_parameters() = 0;
175 std::shared_ptr<dealii::Mapping<dim>> & mapping,
179 set_boundary_descriptor() = 0;
182 set_field_functions() = 0;
192 add_parameters(dealii::ParameterHandler & prm, std::vector<std::string>
const & subsection_names)
194 for(
auto & name : subsection_names)
196 prm.enter_subsection(name);
199 prm.enter_subsection(
"SpatialResolution");
201 prm.add_parameter(
"Degree",
203 "Polynomial degree of shape functions.",
204 dealii::Patterns::Integer(1),
207 prm.leave_subsection();
209 output_parameters.add_parameters(prm);
211 for(
auto & name : subsection_names)
214 prm.leave_subsection();
218 ScalarBase(std::string parameter_file, MPI_Comm
const & comm)
220 pcout(std::cout, dealii::Utilities::MPI::this_mpi_process(comm) == 0),
221 parameter_file(parameter_file),
226 virtual ~ScalarBase()
231 setup(std::vector<std::string>
const & subsection_names,
Grid<dim> const & grid)
233 parse_parameters(subsection_names);
236 param.degree = degree;
241 param.print(this->pcout,
"List of parameters for quantity " + subsection_names.back() +
":");
244 boundary_descriptor = std::make_shared<ConvDiff::BoundaryDescriptor<dim>>();
245 set_boundary_descriptor();
246 verify_boundary_conditions(*boundary_descriptor, grid);
249 field_functions = std::make_shared<ConvDiff::FieldFunctions<dim>>();
250 set_field_functions();
253 virtual std::shared_ptr<ConvDiff::PostProcessorBase<dim, Number>>
254 create_postprocessor() = 0;
257 get_parameters()
const
262 std::shared_ptr<ConvDiff::BoundaryDescriptor<dim>
const>
263 get_boundary_descriptor()
const
265 return boundary_descriptor;
268 std::shared_ptr<ConvDiff::FieldFunctions<dim>
const>
269 get_field_functions()
const
271 return field_functions;
276 parse_parameters(std::vector<std::string>
const & subsection_names)
278 dealii::ParameterHandler prm;
279 this->add_parameters(prm, subsection_names);
280 prm.parse_input(parameter_file,
"",
true,
true);
283 MPI_Comm
const mpi_comm;
285 dealii::ConditionalOStream pcout;
288 std::shared_ptr<ConvDiff::FieldFunctions<dim>> field_functions;
289 std::shared_ptr<ConvDiff::BoundaryDescriptor<dim>> boundary_descriptor;
291 std::string parameter_file;
297 set_parameters() = 0;
300 set_boundary_descriptor() = 0;
303 set_field_functions() = 0;
313 add_parameters(dealii::ParameterHandler & prm)
315 AssertThrow(fluid.get(), dealii::ExcMessage(
"fluid has not been initialized."));
317 fluid->add_parameters(prm, {
"Fluid"});
319 for(
unsigned int i = 0; i < scalars.size(); ++i)
321 AssertThrow(scalars[i].get(),
322 dealii::ExcMessage(
"scalar[" + std::to_string(i) +
323 "] has not been initialized."));
325 scalars[i]->add_parameters(prm, {
"Scalar" + std::to_string(i)});
329 ApplicationBase(std::string parameter_file, MPI_Comm
const & comm)
331 pcout(std::cout, dealii::Utilities::MPI::this_mpi_process(comm) == 0),
332 parameter_file(parameter_file)
336 virtual ~ApplicationBase()
342 std::shared_ptr<dealii::Mapping<dim>> & mapping,
345 AssertThrow(fluid.get(), dealii::ExcMessage(
"fluid has not been initialized."));
349 fluid->setup(grid, mapping, multigrid_mappings, {
"Fluid"});
351 for(
unsigned int i = 0; i < scalars.size(); ++i)
353 AssertThrow(scalars[i].get(),
354 dealii::ExcMessage(
"scalar[" + std::to_string(i) +
355 "] has not been initialized."));
357 scalars[i]->setup({
"Scalar" + std::to_string(i)}, *grid);
360 AssertThrow(scalars[i]->get_parameters().ale_formulation ==
361 fluid->get_parameters().ale_formulation,
363 "Parameter ale_formulation is different for fluid field and scalar field"));
366 scalars[i]->get_parameters().adaptive_time_stepping ==
367 fluid->get_parameters().adaptive_time_stepping,
369 "The option adaptive_time_stepping has to be consistent for fluid and scalar transport solvers."));
373 std::shared_ptr<FluidBase<dim, Number>> fluid;
374 std::vector<std::shared_ptr<ScalarBase<dim, Number>>> scalars;
377 MPI_Comm
const mpi_comm;
379 dealii::ConditionalOStream pcout;
382 std::string parameter_file;