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 prescribe_initial_conditions(VectorType & src,
double const evaluation_time)
const final;
133 evaluate_explicit_time_int(VectorType & dst,
134 VectorType
const & src,
135 double const evaluation_time,
136 VectorType
const * velocity =
nullptr)
const final;
143 evaluate_convective_term(VectorType & dst,
144 VectorType
const & src,
145 double const evaluation_time,
146 VectorType
const * velocity =
nullptr)
const;
159 rhs(VectorType & dst,
160 double const evaluation_time = 0.0,
161 VectorType
const * velocity =
nullptr)
const final;
168 apply_mass_operator(VectorType & dst, VectorType
const & src)
const;
175 apply_mass_operator_add(VectorType & dst, VectorType
const & src)
const;
182 apply_convective_term(VectorType & dst, VectorType
const & src)
const;
185 update_convective_term(
double const evaluation_time, VectorType
const * velocity =
nullptr)
const;
192 apply_diffusive_term(VectorType & dst, VectorType
const & src)
const;
200 apply_conv_diff_operator(VectorType & dst, VectorType
const & src)
const;
203 update_conv_diff_operator(
double const evaluation_time,
204 double const scaling_factor,
205 VectorType
const * velocity =
nullptr);
211 update_after_grid_motion(
bool const update_matrix_free);
217 prepare_coarsening_and_refinement(std::vector<VectorType *> & vectors);
220 interpolate_after_coarsening_and_refinement(std::vector<VectorType *> & vectors);
228 solve(VectorType & sol,
229 VectorType
const & rhs,
230 bool const update_preconditioner,
231 double const scaling_factor = -1.0,
232 double const time = -1.0,
233 VectorType
const * velocity =
nullptr)
final;
239 calculate_time_step_max_efficiency(
unsigned int const order_time_integrator)
const final;
247 calculate_time_step_cfl_global(
double const time)
const final;
251 calculate_time_step_cfl_numerical_velocity(VectorType
const & velocity)
const final;
255 calculate_time_step_cfl_analytical_velocity(
double const time)
const final;
261 calculate_time_step_diffusion()
const final;
267 dealii::MatrixFree<dim, Number>
const &
268 get_matrix_free()
const;
270 dealii::DoFHandler<dim>
const &
271 get_dof_handler()
const;
273 dealii::DoFHandler<dim>
const &
274 get_dof_handler_velocity()
const;
276 dealii::types::global_dof_index
277 get_number_of_dofs()
const;
280 get_dof_name()
const;
283 get_dof_index()
const;
286 get_quad_index()
const;
288 std::shared_ptr<dealii::Mapping<dim>
const>
291 dealii::AffineConstraints<Number>
const &
292 get_constraints()
const;
302 initialize_dof_handler_and_constraints();
314 calculate_maximum_velocity(
double const time)
const;
320 calculate_minimum_element_length()
const;
323 needs_own_dof_handler_velocity()
const;
326 get_quad_name()
const;
329 get_quad_name_overintegration()
const;
332 get_dof_name_velocity()
const;
338 get_dof_index_velocity()
const;
341 get_quad_index_overintegration()
const;
347 setup_preconditioner();
358 std::shared_ptr<Grid<dim>
const> grid;
363 std::shared_ptr<ExaDG::SolutionTransfer<dim, VectorType>> solution_transfer;
368 std::shared_ptr<dealii::Mapping<dim>
const> mapping;
370 std::shared_ptr<MultigridMappings<dim, Number>>
const multigrid_mappings;
375 std::shared_ptr<BoundaryDescriptor<dim>
const> boundary_descriptor;
376 std::shared_ptr<FieldFunctions<dim>
const> field_functions;
383 std::string
const field;
388 std::shared_ptr<dealii::FiniteElement<dim>> fe;
389 dealii::DoFHandler<dim> dof_handler;
394 std::shared_ptr<dealii::FiniteElement<dim>> fe_velocity;
395 std::shared_ptr<dealii::DoFHandler<dim>> dof_handler_velocity;
400 dealii::AffineConstraints<Number> affine_constraints;
402 std::string
const dof_index_std =
"conv_diff";
403 std::string
const dof_index_velocity =
"conv_diff_velocity";
405 std::string
const quad_index_std =
"conv_diff";
406 std::string
const quad_index_overintegration =
"conv_diff_overintegration";
408 std::string dof_index_velocity_external;
413 std::shared_ptr<dealii::MatrixFree<dim, Number>
const> matrix_free;
414 std::shared_ptr<MatrixFreeData<dim, Number>
const> matrix_free_data;
419 std::shared_ptr<dealii::MatrixFree<dim, Number>> matrix_free_own_storage;
424 std::shared_ptr<Operators::ConvectiveKernel<dim, Number>> convective_kernel;
425 std::shared_ptr<Operators::DiffusiveKernel<dim, Number>> diffusive_kernel;
427 MassOperator<dim, 1, Number> mass_operator;
441 std::shared_ptr<PreconditionerBase<Number>> preconditioner;
442 std::shared_ptr<Krylov::SolverBase<VectorType>> iterative_solver;
447 MPI_Comm
const mpi_comm;
452 dealii::ConditionalOStream pcout;