54 add_parameters(dealii::ParameterHandler & prm)
56 output_parameters.add_parameters(prm);
59 ApplicationBase(std::string parameter_file, MPI_Comm
const & comm)
61 pcout(std::cout, dealii::Utilities::MPI::this_mpi_process(mpi_comm) == 0),
62 parameter_file(parameter_file),
63 n_subdivisions_1d_hypercube(1)
67 virtual ~ApplicationBase()
72 set_parameters_throughput_study(
unsigned int const degree,
73 unsigned int const refine_space,
74 unsigned int const n_subdivisions_1d_hypercube)
76 this->param.degree_u = degree;
77 this->param.grid.n_refine_global = refine_space;
78 this->n_subdivisions_1d_hypercube = n_subdivisions_1d_hypercube;
82 set_parameters_convergence_study(
unsigned int const degree,
83 unsigned int const refine_space,
84 unsigned int const refine_time)
86 this->param.degree_u = degree;
87 this->param.grid.n_refine_global = refine_space;
88 this->param.n_refine_time = refine_time;
93 std::shared_ptr<dealii::Mapping<dim>> & mapping,
100 param.print(pcout,
"List of parameters:");
103 grid = std::make_shared<Grid<dim>>();
104 create_grid(*grid, mapping, multigrid_mappings);
105 print_grid_info(pcout, *grid);
108 boundary_descriptor = std::make_shared<BoundaryDescriptor<dim>>();
109 set_boundary_descriptor();
110 verify_boundary_conditions<dim>(*boundary_descriptor, *grid);
113 field_functions = std::make_shared<FieldFunctions<dim>>();
114 set_field_functions();
117 virtual std::shared_ptr<PostProcessorBase<dim, Number>>
118 create_postprocessor() = 0;
121 get_parameters()
const
126 std::shared_ptr<BoundaryDescriptor<dim>
const>
127 get_boundary_descriptor()
const
129 return boundary_descriptor;
132 std::shared_ptr<FieldFunctions<dim>
const>
133 get_field_functions()
const
135 return field_functions;
139 virtual std::shared_ptr<dealii::Function<dim>>
140 create_mesh_movement_function()
142 std::shared_ptr<dealii::Function<dim>> mesh_motion =
143 std::make_shared<dealii::Functions::ZeroFunction<dim>>(dim);
150 setup_poisson(std::shared_ptr<
Grid<dim> const>
const & grid)
154 set_parameters_poisson();
155 poisson_param.check();
156 poisson_param.print(pcout,
"List of parameters for Poisson solver (moving mesh):");
158 poisson_boundary_descriptor = std::make_shared<Poisson::BoundaryDescriptor<1, dim>>();
159 set_boundary_descriptor_poisson();
160 verify_boundary_conditions(*poisson_boundary_descriptor, *grid);
162 poisson_field_functions = std::make_shared<Poisson::FieldFunctions<dim>>();
163 set_field_functions_poisson();
165 AssertThrow(poisson_param.right_hand_side ==
false,
166 dealii::ExcMessage(
"Poisson problem is used for mesh movement. Hence, "
167 "the right-hand side has to be zero for the Poisson problem."));
171 get_parameters_poisson()
const
173 return poisson_param;
176 std::shared_ptr<Poisson::BoundaryDescriptor<1, dim>
const>
177 get_boundary_descriptor_poisson()
const
179 return poisson_boundary_descriptor;
182 std::shared_ptr<Poisson::FieldFunctions<dim>
const>
183 get_field_functions_poisson()
const
185 return poisson_field_functions;
192 dealii::ParameterHandler prm;
193 this->add_parameters(prm);
194 prm.parse_input(parameter_file,
"",
true,
true);
197 MPI_Comm
const mpi_comm;
199 dealii::ConditionalOStream pcout;
203 std::shared_ptr<FieldFunctions<dim>> field_functions;
204 std::shared_ptr<BoundaryDescriptor<dim>> boundary_descriptor;
208 std::shared_ptr<Poisson::FieldFunctions<dim>> poisson_field_functions;
209 std::shared_ptr<Poisson::BoundaryDescriptor<1, dim>> poisson_boundary_descriptor;
211 std::string parameter_file;
213 unsigned int n_subdivisions_1d_hypercube;
219 set_parameters() = 0;
223 std::shared_ptr<dealii::Mapping<dim>> & mapping,
227 set_boundary_descriptor() = 0;
230 set_field_functions() = 0;
234 set_parameters_poisson()
237 dealii::ExcMessage(
"Has to be overwritten by derived classes in order "
238 "to use Poisson solver for mesh movement."));
242 set_boundary_descriptor_poisson()
245 dealii::ExcMessage(
"Has to be overwritten by derived classes in order "
246 "to use Poisson solver for mesh movement."));
250 set_field_functions_poisson()
253 dealii::ExcMessage(
"Has to be overwritten by derived classes in order "
254 "to use Poisson solver for mesh movement."));