119 static unsigned int const rank =
120 (n_components == 1) ? 0 : ((n_components == dim) ? 1 : dealii::numbers::invalid_unsigned_int);
122 typedef typename std::vector<
123 dealii::GridTools::PeriodicFacePair<typename dealii::Triangulation<dim>::cell_iterator>>
127 add_parameters(dealii::ParameterHandler & prm, std::vector<std::string>
const & subsection_names)
129 for(
auto & name : subsection_names)
131 prm.enter_subsection(name);
134 resolution.add_parameters(prm);
135 output_parameters.add_parameters(prm);
137 for(
auto & name : subsection_names)
140 prm.leave_subsection();
144 Domain(std::string parameter_file, MPI_Comm
const & comm)
146 pcout(std::cout, dealii::Utilities::MPI::this_mpi_process(mpi_comm) == 0),
147 parameter_file(parameter_file)
156 setup_pre(std::shared_ptr<
Grid<dim>> & grid,
157 std::shared_ptr<dealii::Mapping<dim>> & mapping,
159 std::vector<std::string>
const & subsection_names)
162 parse_parameters(subsection_names);
165 param.grid.n_refine_global = this->resolution.refine_space;
166 param.degree = this->resolution.degree;
170 param.print(pcout,
"List of parameters:");
173 grid = std::make_shared<Grid<dim>>();
174 create_grid(*grid, mapping, multigrid_mappings);
175 print_grid_info(pcout, *grid);
179 setup_post(std::shared_ptr<
Grid<dim> const>
const & grid)
182 boundary_descriptor = std::make_shared<BoundaryDescriptor<rank, dim>>();
183 set_boundary_descriptor();
184 verify_boundary_conditions(*boundary_descriptor, *grid);
187 field_functions = std::make_shared<FieldFunctions<dim>>();
188 set_field_functions();
191 virtual std::shared_ptr<Poisson::PostProcessorBase<dim, n_components, Number>>
192 create_postprocessor()
const = 0;
195 get_parameters()
const
200 std::shared_ptr<BoundaryDescriptor<rank, dim>
const>
201 get_boundary_descriptor()
const
203 return boundary_descriptor;
206 std::shared_ptr<FieldFunctions<dim>
const>
207 get_field_functions()
const
209 return field_functions;
214 parse_parameters(std::vector<std::string>
const & subsection_names)
216 dealii::ParameterHandler prm;
217 this->add_parameters(prm, subsection_names);
218 prm.parse_input(parameter_file,
"",
true,
true);
221 MPI_Comm
const mpi_comm;
223 dealii::ConditionalOStream pcout;
227 std::shared_ptr<BoundaryDescriptor<rank, dim>> boundary_descriptor;
228 std::shared_ptr<FieldFunctions<dim>> field_functions;
230 std::string parameter_file;
238 set_parameters() = 0;
242 std::shared_ptr<dealii::Mapping<dim>> & mapping,
246 set_boundary_descriptor() = 0;
249 set_field_functions() = 0;
256 ApplicationBase(std::string parameter_file, MPI_Comm
const & comm)
257 : mpi_comm(comm), parameter_file(parameter_file)
262 add_parameters(dealii::ParameterHandler & prm)
264 AssertThrow(domain1.get(), dealii::ExcMessage(
"Domain 1 is uninitialized."));
265 AssertThrow(domain2.get(), dealii::ExcMessage(
"Domain 2 is uninitialized."));
267 domain1->add_parameters(prm, {
"Domain1"});
268 domain2->add_parameters(prm, {
"Domain2"});
271 virtual ~ApplicationBase()
275 std::shared_ptr<Domain<dim, n_components, Number>> domain1, domain2;
278 dealii::types::boundary_id boundary_id_overlap =
279 std::numeric_limits<dealii::types::boundary_id>::max() - 1;
282 MPI_Comm
const mpi_comm;
285 std::string parameter_file;