70 typedef dealii::LinearAlgebra::distributed::Vector<Number> VectorType;
71 typedef dealii::LinearAlgebra::distributed::BlockVector<Number> BlockVectorType;
75 typedef dealii::VectorizedArray<Number> scalar;
76 typedef dealii::Tensor<1, dim, dealii::VectorizedArray<Number>> vector;
77 typedef dealii::Tensor<2, dim, dealii::VectorizedArray<Number>> tensor;
79 typedef std::pair<unsigned int, unsigned int> Range;
81 typedef FaceIntegrator<dim, dim, Number> FaceIntegratorU;
82 typedef FaceIntegrator<dim, 1, Number> FaceIntegratorP;
91 std::shared_ptr<dealii::Mapping<dim>
const> mapping,
96 std::string
const & field,
97 MPI_Comm
const & mpi_comm);
120 setup(std::shared_ptr<dealii::MatrixFree<dim, Number>
const> matrix_free,
122 std::string
const & dof_index_temperature =
"");
131 setup_preconditioners_and_solvers()
146 dealii::MatrixFree<dim, Number>
const &
147 get_matrix_free()
const;
150 get_dof_name_velocity()
const;
153 get_dof_index_velocity()
const;
156 get_dof_index_pressure()
const;
159 get_quad_index_velocity_linear()
const;
162 get_quad_index_pressure()
const;
166 get_dof_index_velocity_scalar()
const;
169 get_quad_index_velocity_nonlinear()
const;
172 get_quad_index_velocity_gauss_lobatto()
const;
175 get_quad_index_pressure_gauss_lobatto()
const;
178 get_quad_index_velocity_linearized()
const;
181 std::shared_ptr<dealii::Mapping<dim>
const>
184 dealii::FiniteElement<dim>
const &
187 dealii::FiniteElement<dim>
const &
190 dealii::DoFHandler<dim>
const &
191 get_dof_handler_u()
const;
193 dealii::DoFHandler<dim>
const &
194 get_dof_handler_u_scalar()
const;
196 dealii::DoFHandler<dim>
const &
197 get_dof_handler_p()
const;
199 dealii::AffineConstraints<Number>
const &
200 get_constraint_p()
const;
202 dealii::AffineConstraints<Number>
const &
203 get_constraint_u()
const;
205 dealii::types::global_dof_index
206 get_number_of_dofs()
const;
208 dealii::VectorizedArray<Number>
209 get_viscosity_boundary_face(
unsigned int const face,
unsigned int const q)
const;
212 std::shared_ptr<ContainerInterfaceData<1, dim, double>>
213 get_container_interface_data();
216 set_velocity_ptr(VectorType
const & velocity)
const;
222 initialize_vector_velocity(VectorType & src)
const;
225 initialize_vector_velocity_scalar(VectorType & src)
const;
228 initialize_vector_pressure(VectorType & src)
const;
231 initialize_block_vector_velocity_pressure(BlockVectorType & src)
const;
237 prescribe_initial_conditions(VectorType & velocity,
238 VectorType & pressure,
239 double const time)
const;
244 interpolate_stress_bc(VectorType & stress,
245 VectorType
const & velocity,
246 VectorType
const & pressure)
const;
256 calculate_time_step_max_efficiency(
unsigned int const order_time_integrator)
const;
260 calculate_time_step_cfl_global()
const;
264 calculate_time_step_cfl(VectorType
const & velocity)
const;
268 calculate_cfl_from_time_step(VectorType & cfl,
269 VectorType
const & velocity,
270 double const time_step_size)
const;
276 get_characteristic_element_length()
const;
287 is_pressure_level_undefined()
const;
292 adjust_pressure_level_if_undefined(VectorType & pressure,
double const & time)
const;
298 set_temperature(VectorType
const & temperature);
307 compute_vorticity(VectorType & dst, VectorType
const & src)
const;
311 compute_divergence(VectorType & dst, VectorType
const & src)
const;
315 compute_shear_rate(VectorType & dst, VectorType
const & src)
const;
319 compute_velocity_magnitude(VectorType & dst, VectorType
const & src)
const;
323 compute_vorticity_magnitude(VectorType & dst, VectorType
const & src)
const;
327 compute_streamfunction(VectorType & dst, VectorType
const & src)
const;
331 compute_q_criterion(VectorType & dst, VectorType
const & src)
const;
339 apply_mass_operator(VectorType & dst, VectorType
const & src)
const;
342 apply_mass_operator_add(VectorType & dst, VectorType
const & src)
const;
346 evaluate_add_body_force_term(VectorType & dst,
double const time)
const;
350 evaluate_convective_term(VectorType & dst, VectorType
const & src, Number
const time)
const;
354 evaluate_pressure_gradient_term(VectorType & dst,
355 VectorType
const & src,
356 double const time)
const;
360 evaluate_velocity_divergence_term(VectorType & dst,
361 VectorType
const & src,
362 double const time)
const;
366 apply_inverse_mass_operator(VectorType & dst, VectorType
const & src)
const;
372 update_viscosity(VectorType
const & velocity)
const;
378 update_projection_operator(VectorType
const & velocity,
double const time_step_size)
const;
381 rhs_add_projection_operator(VectorType & dst,
double const time)
const;
384 solve_projection(VectorType & dst,
385 VectorType
const & src,
386 bool const & update_preconditioner)
const;
392 calculate_dissipation_convective_term(VectorType
const & velocity,
double const time)
const;
395 calculate_dissipation_viscous_term(VectorType
const & velocity)
const;
398 calculate_dissipation_divergence_term(VectorType
const & velocity)
const;
401 calculate_dissipation_continuity_term(VectorType
const & velocity)
const;
407 update_after_grid_motion(
bool const update_matrix_free);
413 set_grid_velocity(VectorType
const & velocity);
419 distribute_constraint_u(VectorType & velocity)
const;
426 setup_projection_solver();
429 unsteady_problem_has_to_be_solved()
const;
434 std::shared_ptr<Grid<dim>
const> grid;
440 std::shared_ptr<dealii::Mapping<dim>
const> mapping;
442 std::shared_ptr<MultigridMappings<dim, Number>>
const multigrid_mappings;
447 std::shared_ptr<BoundaryDescriptor<dim>
const> boundary_descriptor;
448 std::shared_ptr<FieldFunctions<dim>
const> field_functions;
458 std::string
const field;
474 std::shared_ptr<Poisson::BoundaryDescriptor<0, dim>> boundary_descriptor_laplace;
479 dealii::Point<dim> first_point;
480 dealii::types::global_dof_index dof_index_first_point;
486 mutable double evaluation_time;
492 std::shared_ptr<dealii::FiniteElement<dim>> fe_u;
493 std::shared_ptr<dealii::FiniteElement<dim>> fe_p;
494 std::shared_ptr<dealii::FiniteElement<dim>> fe_u_scalar;
496 dealii::DoFHandler<dim> dof_handler_u;
497 dealii::DoFHandler<dim> dof_handler_p;
498 dealii::DoFHandler<dim> dof_handler_u_scalar;
500 dealii::AffineConstraints<Number> constraint_u, constraint_p, constraint_u_scalar;
502 std::string
const dof_index_u =
"velocity";
503 std::string
const dof_index_p =
"pressure";
504 std::string
const dof_index_u_scalar =
"velocity_scalar";
506 std::string
const quad_index_u =
"velocity";
507 std::string
const quad_index_p =
"pressure";
508 std::string
const quad_index_u_nonlinear =
"velocity_nonlinear";
509 std::string
const quad_index_u_gauss_lobatto =
"velocity_gauss_lobatto";
510 std::string
const quad_index_p_gauss_lobatto =
"pressure_gauss_lobatto";
512 std::shared_ptr<MatrixFreeData<dim, Number>
const> matrix_free_data;
513 std::shared_ptr<dealii::MatrixFree<dim, Number>
const> matrix_free;
518 std::shared_ptr<dealii::MatrixFree<dim, Number>> matrix_free_own_storage;
520 bool pressure_level_is_undefined;
525 std::shared_ptr<ContainerInterfaceData<1, dim, double>> interface_data_dirichlet_cached;
534 std::shared_ptr<Operators::ConvectiveKernel<dim, Number>> convective_kernel;
535 std::shared_ptr<Operators::ViscousKernel<dim, Number>> viscous_kernel;
537 std::shared_ptr<Operators::DivergencePenaltyKernel<dim, Number>> div_penalty_kernel;
538 std::shared_ptr<Operators::ContinuityPenaltyKernel<dim, Number>> conti_penalty_kernel;
573 std::shared_ptr<ProjOperator> projection_operator;
582 std::shared_ptr<ELEMENTWISE_PROJ_OPERATOR> elementwise_projection_operator;
586 std::shared_ptr<ELEMENTWISE_PRECONDITIONER> elementwise_preconditioner_projection;
589 std::shared_ptr<Krylov::SolverBase<VectorType>> projection_solver;
590 std::shared_ptr<PreconditionerBase<Number>> preconditioner_projection;
601 MPI_Comm
const mpi_comm;
603 dealii::ConditionalOStream pcout;
608 calculate_minimum_element_length()
const;
614 initialize_boundary_descriptor_laplace();
617 initialize_dof_handler_and_constraints();
620 initialize_dirichlet_cached_bc();
623 initialize_operators(std::string
const & dof_index_temperature);
626 initialize_calculators_for_derived_quantities();
629 initialization_pure_dirichlet_bc();
632 cell_loop_empty(dealii::MatrixFree<dim, Number>
const &,
640 face_loop_empty(dealii::MatrixFree<dim, Number>
const &,
648 local_interpolate_stress_bc_boundary_face(dealii::MatrixFree<dim, Number>
const & matrix_free,
650 VectorType
const & src,
651 Range
const & face_range)
const;
656 mutable VectorType
const * velocity_ptr;
657 mutable VectorType
const * pressure_ptr;