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."));