51 typedef dealii::LinearAlgebra::distributed::Vector<Number> VectorType;
57 Operator(std::shared_ptr<
Grid<dim> const> grid,
58 std::shared_ptr<dealii::Mapping<dim>
const> mapping,
63 std::string
const & field,
64 MPI_Comm
const & mpi_comm);
85 setup(std::shared_ptr<dealii::MatrixFree<dim, Number>
const> matrix_free_in,
87 std::string
const & dof_index_velocity_external_in =
"");
93 setup_after_coarsening_and_refinement();
99 initialize_dof_vector(VectorType & src)
const final;
105 initialize_dof_vector_velocity(VectorType & src)
const final;
111 interpolate_velocity(VectorType & velocity,
double const time)
const;
117 project_velocity(VectorType & velocity,
double const time)
const final;
123 serialize_vectors(std::vector<VectorType const *>
const & vectors)
const final;
126 deserialize_vectors(std::vector<VectorType *>
const & vectors)
final;
132 prescribe_initial_conditions(VectorType & src,
double const evaluation_time)
const final;
142 evaluate_explicit_time_int(VectorType & dst,
143 VectorType
const & src,
144 double const evaluation_time,
145 VectorType
const * velocity =
nullptr)
const final;
152 evaluate_convective_term(VectorType & dst,
153 VectorType
const & src,
154 double const evaluation_time,
155 VectorType
const * velocity =
nullptr)
const;
168 rhs(VectorType & dst,
169 double const evaluation_time = 0.0,
170 VectorType
const * velocity =
nullptr)
const final;
177 apply_mass_operator(VectorType & dst, VectorType
const & src)
const;
184 apply_mass_operator_add(VectorType & dst, VectorType
const & src)
const;
191 apply_convective_term(VectorType & dst, VectorType
const & src)
const;
194 update_convective_term(
double const evaluation_time, VectorType
const * velocity =
nullptr)
const;
201 apply_diffusive_term(VectorType & dst, VectorType
const & src)
const;
209 apply_conv_diff_operator(VectorType & dst, VectorType
const & src)
const;
212 update_conv_diff_operator(
double const evaluation_time,
213 double const scaling_factor,
214 VectorType
const * velocity =
nullptr);
220 update_after_grid_motion(
bool const update_matrix_free);
226 prepare_coarsening_and_refinement(std::vector<VectorType *> & vectors);
229 interpolate_after_coarsening_and_refinement(std::vector<VectorType *> & vectors);
237 solve(VectorType & sol,
238 VectorType
const & rhs,
239 bool const update_preconditioner,
240 double const scaling_factor = -1.0,
241 double const time = -1.0,
242 VectorType
const * velocity =
nullptr)
final;
248 calculate_time_step_max_efficiency(
unsigned int const order_time_integrator)
const final;
256 calculate_time_step_cfl_global(
double const time)
const final;
260 calculate_time_step_cfl_numerical_velocity(VectorType
const & velocity)
const final;
264 calculate_time_step_cfl_analytical_velocity(
double const time)
const final;
270 calculate_time_step_diffusion()
const final;
276 dealii::MatrixFree<dim, Number>
const &
277 get_matrix_free()
const;
279 dealii::DoFHandler<dim>
const &
280 get_dof_handler()
const;
282 dealii::DoFHandler<dim>
const &
283 get_dof_handler_velocity()
const;
285 dealii::types::global_dof_index
286 get_number_of_dofs()
const;
289 get_dof_name()
const;
292 get_dof_index()
const;
295 get_quad_index()
const;
297 std::shared_ptr<dealii::Mapping<dim>
const>
300 dealii::AffineConstraints<Number>
const &
301 get_constraints()
const;
311 initialize_dof_handler_and_constraints();
323 calculate_maximum_velocity(
double const time)
const;
329 calculate_minimum_element_length()
const;
332 needs_own_dof_handler_velocity()
const;
335 needs_dof_handler_mapping()
const;
338 get_quad_name()
const;
341 get_quad_name_overintegration()
const;
344 get_dof_name_velocity()
const;
350 get_dof_index_velocity()
const;
353 get_quad_index_overintegration()
const;
359 setup_preconditioner();
370 std::shared_ptr<Grid<dim>
const> grid;
375 std::shared_ptr<ExaDG::SolutionTransfer<dim, VectorType>> solution_transfer;
380 std::shared_ptr<dealii::Mapping<dim>
const> mapping;
382 std::shared_ptr<MultigridMappings<dim, Number>>
const multigrid_mappings;
387 std::shared_ptr<BoundaryDescriptor<dim>
const> boundary_descriptor;
388 std::shared_ptr<FieldFunctions<dim>
const> field_functions;
395 std::string
const field;
400 std::shared_ptr<dealii::FiniteElement<dim>> fe;
401 dealii::DoFHandler<dim> dof_handler;
406 std::shared_ptr<dealii::FiniteElement<dim>> fe_mapping;
407 std::shared_ptr<dealii::DoFHandler<dim>> dof_handler_mapping;
412 std::shared_ptr<dealii::FiniteElement<dim>> fe_velocity;
413 std::shared_ptr<dealii::DoFHandler<dim>> dof_handler_velocity;
418 dealii::AffineConstraints<Number> affine_constraints;
420 std::string
const dof_index_std =
"conv_diff";
421 std::string
const dof_index_velocity =
"conv_diff_velocity";
423 std::string
const quad_index_std =
"conv_diff";
424 std::string
const quad_index_overintegration =
"conv_diff_overintegration";
426 std::string dof_index_velocity_external;
431 std::shared_ptr<dealii::MatrixFree<dim, Number>
const> matrix_free;
432 std::shared_ptr<MatrixFreeData<dim, Number>
const> matrix_free_data;
437 std::shared_ptr<dealii::MatrixFree<dim, Number>> matrix_free_own_storage;
442 std::shared_ptr<Operators::ConvectiveKernel<dim, Number>> convective_kernel;
443 std::shared_ptr<Operators::DiffusiveKernel<dim, Number>> diffusive_kernel;
445 MassOperator<dim, 1, Number> mass_operator;
459 std::shared_ptr<PreconditionerBase<Number>> preconditioner;
460 std::shared_ptr<Krylov::SolverBase<VectorType>> iterative_solver;
465 MPI_Comm
const mpi_comm;
470 dealii::ConditionalOStream pcout;