53 add_parameters(dealii::ParameterHandler & prm, std::vector<std::string>
const & subsection_names)
55 for(
auto & name : subsection_names)
57 prm.enter_subsection(name);
60 resolution.add_parameters(prm);
62 output_parameters.add_parameters(prm);
64 for(
auto & name : subsection_names)
67 prm.leave_subsection();
71 FluidBase(std::string parameter_file, MPI_Comm
const & comm)
73 pcout(std::cout, dealii::Utilities::MPI::this_mpi_process(mpi_comm) == 0),
74 parameter_file(parameter_file)
84 std::shared_ptr<dealii::Mapping<dim>> & mapping,
86 std::vector<std::string>
const & subsection_names)
88 parse_parameters(subsection_names);
91 param.degree_u = resolution.degree;
92 param.grid.n_refine_global = resolution.refine_space;
96 param.print(pcout,
"List of parameters:");
99 grid = std::make_shared<Grid<dim>>();
100 create_grid(*grid, mapping, multigrid_mappings);
101 print_grid_info(pcout, *grid);
104 boundary_descriptor = std::make_shared<IncNS::BoundaryDescriptor<dim>>();
105 set_boundary_descriptor();
106 verify_boundary_conditions<dim>(*boundary_descriptor, *grid);
109 field_functions = std::make_shared<IncNS::FieldFunctions<dim>>();
110 set_field_functions();
113 virtual std::shared_ptr<IncNS::PostProcessorBase<dim, Number>>
114 create_postprocessor() = 0;
117 get_parameters()
const
122 std::shared_ptr<IncNS::BoundaryDescriptor<dim>
const>
123 get_boundary_descriptor()
const
125 return boundary_descriptor;
128 std::shared_ptr<IncNS::FieldFunctions<dim>
const>
129 get_field_functions()
const
131 return field_functions;
135 virtual std::shared_ptr<dealii::Function<dim>>
136 create_mesh_movement_function()
138 std::shared_ptr<dealii::Function<dim>> mesh_motion =
139 std::make_shared<dealii::Functions::ZeroFunction<dim>>(dim);
146 parse_parameters(std::vector<std::string>
const & subsection_names)
148 dealii::ParameterHandler prm;
149 this->add_parameters(prm, subsection_names);
150 prm.parse_input(parameter_file,
"",
true,
true);
153 MPI_Comm
const mpi_comm;
155 dealii::ConditionalOStream pcout;
159 std::shared_ptr<IncNS::FieldFunctions<dim>> field_functions;
160 std::shared_ptr<IncNS::BoundaryDescriptor<dim>> boundary_descriptor;
162 std::string parameter_file;
168 set_parameters() = 0;
172 std::shared_ptr<dealii::Mapping<dim>> & mapping,
176 set_boundary_descriptor() = 0;
179 set_field_functions() = 0;
189 add_parameters(dealii::ParameterHandler & prm, std::vector<std::string>
const & subsection_names)
191 for(
auto & name : subsection_names)
193 prm.enter_subsection(name);
196 prm.enter_subsection(
"SpatialResolution");
198 prm.add_parameter(
"Degree",
200 "Polynomial degree of shape functions.",
201 dealii::Patterns::Integer(1),
204 prm.leave_subsection();
206 output_parameters.add_parameters(prm);
208 for(
auto & name : subsection_names)
211 prm.leave_subsection();
215 ScalarBase(std::string parameter_file, MPI_Comm
const & comm)
217 pcout(std::cout, dealii::Utilities::MPI::this_mpi_process(comm) == 0),
218 parameter_file(parameter_file),
223 virtual ~ScalarBase()
228 setup(std::vector<std::string>
const & subsection_names,
Grid<dim> const & grid)
230 parse_parameters(subsection_names);
233 param.degree = degree;
238 param.print(this->pcout,
"List of parameters for quantity " + subsection_names.back() +
":");
241 boundary_descriptor = std::make_shared<ConvDiff::BoundaryDescriptor<dim>>();
242 set_boundary_descriptor();
243 verify_boundary_conditions(*boundary_descriptor, grid);
246 field_functions = std::make_shared<ConvDiff::FieldFunctions<dim>>();
247 set_field_functions();
250 virtual std::shared_ptr<ConvDiff::PostProcessorBase<dim, Number>>
251 create_postprocessor() = 0;
254 get_parameters()
const
259 std::shared_ptr<ConvDiff::BoundaryDescriptor<dim>
const>
260 get_boundary_descriptor()
const
262 return boundary_descriptor;
265 std::shared_ptr<ConvDiff::FieldFunctions<dim>
const>
266 get_field_functions()
const
268 return field_functions;
273 parse_parameters(std::vector<std::string>
const & subsection_names)
275 dealii::ParameterHandler prm;
276 this->add_parameters(prm, subsection_names);
277 prm.parse_input(parameter_file,
"",
true,
true);
280 MPI_Comm
const mpi_comm;
282 dealii::ConditionalOStream pcout;
285 std::shared_ptr<ConvDiff::FieldFunctions<dim>> field_functions;
286 std::shared_ptr<ConvDiff::BoundaryDescriptor<dim>> boundary_descriptor;
288 std::string parameter_file;
294 set_parameters() = 0;
297 set_boundary_descriptor() = 0;
300 set_field_functions() = 0;
310 add_parameters(dealii::ParameterHandler & prm)
312 AssertThrow(fluid.get(), dealii::ExcMessage(
"fluid has not been initialized."));
314 fluid->add_parameters(prm, {
"Fluid"});
316 for(
unsigned int i = 0; i < scalars.size(); ++i)
318 AssertThrow(scalars[i].get(),
319 dealii::ExcMessage(
"scalar[" + std::to_string(i) +
320 "] has not been initialized."));
322 scalars[i]->add_parameters(prm, {
"Scalar" + std::to_string(i)});
326 ApplicationBase(std::string parameter_file, MPI_Comm
const & comm)
328 pcout(std::cout, dealii::Utilities::MPI::this_mpi_process(comm) == 0),
329 parameter_file(parameter_file)
333 virtual ~ApplicationBase()
339 std::shared_ptr<dealii::Mapping<dim>> & mapping,
342 AssertThrow(fluid.get(), dealii::ExcMessage(
"fluid has not been initialized."));
346 fluid->setup(grid, mapping, multigrid_mappings, {
"Fluid"});
348 for(
unsigned int i = 0; i < scalars.size(); ++i)
350 AssertThrow(scalars[i].get(),
351 dealii::ExcMessage(
"scalar[" + std::to_string(i) +
352 "] has not been initialized."));
354 scalars[i]->setup({
"Scalar" + std::to_string(i)}, *grid);
357 AssertThrow(scalars[i]->get_parameters().ale_formulation ==
358 fluid->get_parameters().ale_formulation,
360 "Parameter ale_formulation is different for fluid field and scalar field"));
363 scalars[i]->get_parameters().adaptive_time_stepping ==
364 fluid->get_parameters().adaptive_time_stepping,
366 "The option adaptive_time_stepping has to be consistent for fluid and scalar transport solvers."));
370 std::shared_ptr<FluidBase<dim, Number>> fluid;
371 std::vector<std::shared_ptr<ScalarBase<dim, Number>>> scalars;
374 MPI_Comm
const mpi_comm;
376 dealii::ConditionalOStream pcout;
379 std::string parameter_file;