51 static unsigned int const rank =
52 (n_components == 1) ? 0 : ((n_components == dim) ? 1 : dealii::numbers::invalid_unsigned_int);
54 typedef typename std::vector<
55 dealii::GridTools::PeriodicFacePair<typename dealii::Triangulation<dim>::cell_iterator>>
59 add_parameters(dealii::ParameterHandler & prm)
61 grid_parameters.add_parameters(prm);
62 output_parameters.add_parameters(prm);
65 ApplicationBase(std::string parameter_file, MPI_Comm
const & comm)
67 pcout(std::cout, dealii::Utilities::MPI::this_mpi_process(mpi_comm) == 0),
68 parameter_file(parameter_file),
69 n_subdivisions_1d_hypercube(1)
73 virtual ~ApplicationBase()
78 set_parameters_throughput_study(
unsigned int const degree,
79 unsigned int const refine_space,
80 unsigned int const n_subdivisions_1d_hypercube)
82 this->param.degree = degree;
83 this->param.grid.n_refine_global = refine_space;
84 this->n_subdivisions_1d_hypercube = n_subdivisions_1d_hypercube;
88 set_parameters_convergence_study(
unsigned int const degree,
unsigned int const refine_space)
90 this->param.degree = degree;
91 this->param.grid.n_refine_global = refine_space;
96 std::shared_ptr<dealii::Mapping<dim>> & mapping,
103 param.print(pcout,
"List of parameters:");
106 grid = std::make_shared<Grid<dim>>();
107 create_grid(*grid, mapping, multigrid_mappings);
108 print_grid_info(pcout, *grid);
110 if(compute_aspect_ratio)
112 auto const reference_cells = grid->triangulation->get_reference_cells();
113 AssertThrow(reference_cells.size() == 1, dealii::ExcMessage(
"No mixed meshes allowed"));
115 auto const quad = reference_cells[0].get_gauss_type_quadrature(param.degree + 1);
117 double const aspect_ratio =
118 dealii::GridTools::compute_maximum_aspect_ratio(*mapping, *grid->triangulation, quad);
119 pcout << std::endl <<
"Maximum aspect ratio = " << aspect_ratio << std::endl;
123 boundary_descriptor = std::make_shared<BoundaryDescriptor<rank, dim>>();
124 set_boundary_descriptor();
125 verify_boundary_conditions(*boundary_descriptor, *grid);
128 field_functions = std::make_shared<FieldFunctions<dim>>();
129 set_field_functions();
132 virtual std::shared_ptr<Poisson::PostProcessorBase<dim, n_components, Number>>
133 create_postprocessor() = 0;
136 get_parameters()
const
141 std::shared_ptr<BoundaryDescriptor<rank, dim>
const>
142 get_boundary_descriptor()
const
144 return boundary_descriptor;
147 std::shared_ptr<FieldFunctions<dim>
const>
148 get_field_functions()
const
150 return field_functions;
157 dealii::ParameterHandler prm;
158 this->add_parameters(prm);
159 prm.parse_input(parameter_file,
"",
true,
true);
162 MPI_Comm
const mpi_comm;
164 dealii::ConditionalOStream pcout;
168 std::shared_ptr<BoundaryDescriptor<rank, dim>> boundary_descriptor;
169 std::shared_ptr<FieldFunctions<dim>> field_functions;
171 std::string parameter_file;
175 unsigned int n_subdivisions_1d_hypercube;
179 bool compute_aspect_ratio =
false;
183 set_parameters() = 0;
187 std::shared_ptr<dealii::Mapping<dim>> & mapping,
191 set_boundary_descriptor() = 0;
194 set_field_functions() = 0;