22#ifndef EXADG_INCOMPRESSIBLE_NAVIER_STOKES_DRIVER_H_
23#define EXADG_INCOMPRESSIBLE_NAVIER_STOKES_DRIVER_H_
26#include <exadg/functions_and_boundary_conditions/verify_boundary_conditions.h>
27#include <exadg/grid/mapping_deformation_function.h>
28#include <exadg/grid/mapping_deformation_poisson.h>
29#include <exadg/incompressible_navier_stokes/postprocessor/postprocessor_base.h>
30#include <exadg/incompressible_navier_stokes/spatial_discretization/operator_consistent_splitting.h>
31#include <exadg/incompressible_navier_stokes/spatial_discretization/operator_coupled.h>
32#include <exadg/incompressible_navier_stokes/spatial_discretization/operator_dual_splitting.h>
33#include <exadg/incompressible_navier_stokes/spatial_discretization/operator_pressure_correction.h>
34#include <exadg/incompressible_navier_stokes/time_integration/driver_steady_problems.h>
35#include <exadg/incompressible_navier_stokes/time_integration/time_int_bdf_consistent_splitting.h>
36#include <exadg/incompressible_navier_stokes/time_integration/time_int_bdf_coupled_solver.h>
37#include <exadg/incompressible_navier_stokes/time_integration/time_int_bdf_dual_splitting.h>
38#include <exadg/incompressible_navier_stokes/time_integration/time_int_bdf_pressure_correction.h>
39#include <exadg/incompressible_navier_stokes/user_interface/application_base.h>
40#include <exadg/matrix_free/matrix_free_data.h>
41#include <exadg/operators/finite_element.h>
42#include <exadg/utilities/print_general_infos.h>
55enum class OperatorType{
56 CoupledNonlinearResidual,
58 PressurePoissonOperator,
62 VelocityConvDiffOperator,
67enum class PressureDegree
74get_dofs_per_element(OperatorType
const & operator_type,
75 PressureDegree
const & pressure_degree,
76 unsigned int const dim,
77 unsigned int const degree,
78 ExaDG::ElementType
const element_type)
80 unsigned int degree_p = 1;
81 if(pressure_degree == PressureDegree::MixedOrder)
82 degree_p = degree - 1;
83 else if(pressure_degree == PressureDegree::EqualOrder)
86 AssertThrow(
false, dealii::ExcMessage(
"Not implemented."));
88 double const velocity_dofs_per_element = ExaDG::get_dofs_per_element(
89 element_type,
true , dim , degree, dim);
91 double const pressure_dofs_per_element = ExaDG::get_dofs_per_element(
92 element_type,
true , 1 , degree_p, dim);
95 if(operator_type == OperatorType::CoupledNonlinearResidual or
96 operator_type == OperatorType::CoupledLinearized)
98 return static_cast<unsigned int>(velocity_dofs_per_element + pressure_dofs_per_element);
101 else if(operator_type == OperatorType::ConvectiveOperator or
102 operator_type == OperatorType::VelocityConvDiffOperator or
103 operator_type == OperatorType::HelmholtzOperator or
104 operator_type == OperatorType::ProjectionOperator or
105 operator_type == OperatorType::InverseMassOperator)
107 return static_cast<unsigned int>(velocity_dofs_per_element);
110 else if(operator_type == OperatorType::PressurePoissonOperator)
112 return static_cast<unsigned int>(pressure_dofs_per_element);
116 AssertThrow(
false, dealii::ExcMessage(
"Not implemented."));
122template<
int dim,
typename Number>
126 Driver(MPI_Comm
const & comm,
129 bool const is_throughput_study);
138 print_performance_results(
double const total_time)
const;
143 std::tuple<unsigned int, dealii::types::global_dof_index, double>
144 apply_operator(OperatorType
const & operator_type,
145 unsigned int const n_repetitions_inner,
146 unsigned int const n_repetitions_outer)
const;
149 using VectorType = dealii::LinearAlgebra::distributed::Vector<Number>;
155 MPI_Comm
const mpi_comm;
158 dealii::ConditionalOStream pcout;
164 bool const is_throughput_study;
167 std::shared_ptr<ApplicationBase<dim, Number>> application;
170 std::shared_ptr<Grid<dim>> grid;
172 std::shared_ptr<dealii::Mapping<dim>> mapping;
174 std::shared_ptr<MultigridMappings<dim, Number>> multigrid_mappings;
177 std::shared_ptr<DeformedMappingBase<dim, Number>> ale_mapping;
179 std::shared_ptr<MultigridMappings<dim, Number>> ale_multigrid_mappings;
182 std::shared_ptr<HelpersALE<dim, Number>> helpers_ale;
187 std::shared_ptr<SpatialOperatorBase<dim, Number>> pde_operator;
194 std::shared_ptr<Postprocessor> postprocessor;
201 std::shared_ptr<TimeIntBDF<dim, Number>> time_integrator;
204 std::shared_ptr<DriverSteadyProblems<dim, Number>> driver_steady;
Definition application_base.h:51
Definition postprocessor_base.h:40
Definition timer_tree.h:36