72 if constexpr (has_n_mpi_ensembles_v<HD>)
73 n_ensembles = HD::n_mpi_ensembles();
76 std::make_unique<MPIEnsemble>(mpi_comm, n_ensembles);
79 hyperbolic_system_container_ =
80 std::make_unique<MPIEnsembleContainer<HyperbolicSystem>>(
81 mpi_ensemble,
"/B - Equation");
83 hyperbolic_system_container_->get();
86 parabolic_system_container_ =
87 std::make_unique<MPIEnsembleContainer<ParabolicSystem>>(
88 mpi_ensemble,
"/B - Equation");
90 parabolic_system_container_->get();
94 mpi_ensemble,
"/C - Discretization");
96 this->
offline_data_ = std::make_unique<OfflineData<dim, Number>>(
100 initial_values_container_ = std::make_unique<
103 "/E - InitialValues",
109 initial_values_container_->get();
112 auto hyperbolic_module =
113 std::make_unique<HyperbolicModule>(mpi_ensemble,
117 "/F - HyperbolicModule");
118 const auto &initial_precomputed =
119 hyperbolic_module->initial_precomputed();
123 std::make_unique<ParabolicModule>(mpi_ensemble,
128 "/G - ParabolicModule");
136 "/H - TimeIntegrator");
139 std::make_unique<Postprocessor<HD, dim, Number>>(offline_data,
142 initial_precomputed);
145 std::make_unique<SolutionTransfer<HD, dim, Number>>(
151 "/F - HyperbolicModule");
198 if (!discretization.has_triangulation()) {
199 if (mpi_ensemble.n_ensembles() > 1)
200 context.
info(
"setting up MPI ensemble");
201 context.
info(
"creating mesh and interpolating initial values");
202 discretization.prepare(mpi_ensemble.base_name(context.
base_name));
205 context.
info(
"preparing compute kernels");
206 discretization.update_mapping();
209 this->hyperbolic_module_->n_precomputed_values());
219 if (solution_transfer.has_handle()) {
221 solution_transfer.project(state_vector);
222 solution_transfer.reset_handle();
227 "time step [X] - interpolate data vectors");