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_coupled.h>
31#include <exadg/incompressible_navier_stokes/spatial_discretization/operator_dual_splitting.h>
32#include <exadg/incompressible_navier_stokes/spatial_discretization/operator_pressure_correction.h>
33#include <exadg/incompressible_navier_stokes/time_integration/driver_steady_problems.h>
34#include <exadg/incompressible_navier_stokes/time_integration/time_int_bdf_coupled_solver.h>
35#include <exadg/incompressible_navier_stokes/time_integration/time_int_bdf_dual_splitting.h>
36#include <exadg/incompressible_navier_stokes/time_integration/time_int_bdf_pressure_correction.h>
37#include <exadg/incompressible_navier_stokes/user_interface/application_base.h>
38#include <exadg/matrix_free/matrix_free_data.h>
39#include <exadg/operators/finite_element.h>
40#include <exadg/utilities/print_general_infos.h>
53enum class OperatorType{
54 CoupledNonlinearResidual,
56 PressurePoissonOperator,
60 VelocityConvDiffOperator,
65enum class PressureDegree
72get_dofs_per_element(OperatorType
const & operator_type,
73 PressureDegree
const & pressure_degree,
74 unsigned int const dim,
75 unsigned int const degree,
76 ExaDG::ElementType
const element_type)
78 unsigned int degree_p = 1;
79 if(pressure_degree == PressureDegree::MixedOrder)
80 degree_p = degree - 1;
81 else if(pressure_degree == PressureDegree::EqualOrder)
84 AssertThrow(
false, dealii::ExcMessage(
"Not implemented."));
86 unsigned int const velocity_dofs_per_element = ExaDG::get_dofs_per_element(
87 element_type,
true , dim , degree, dim);
89 unsigned int const pressure_dofs_per_element = ExaDG::get_dofs_per_element(
90 element_type,
true , 1 , degree_p, dim);
93 if(operator_type == OperatorType::CoupledNonlinearResidual or
94 operator_type == OperatorType::CoupledLinearized)
96 return velocity_dofs_per_element + pressure_dofs_per_element;
99 else if(operator_type == OperatorType::ConvectiveOperator or
100 operator_type == OperatorType::VelocityConvDiffOperator or
101 operator_type == OperatorType::HelmholtzOperator or
102 operator_type == OperatorType::ProjectionOperator or
103 operator_type == OperatorType::InverseMassOperator)
105 return velocity_dofs_per_element;
108 else if(operator_type == OperatorType::PressurePoissonOperator)
110 return pressure_dofs_per_element;
114 AssertThrow(
false, dealii::ExcMessage(
"Not implemented."));
120template<
int dim,
typename Number>
124 Driver(MPI_Comm
const & comm,
127 bool const is_throughput_study);
136 print_performance_results(
double const total_time)
const;
141 std::tuple<unsigned int, dealii::types::global_dof_index, double>
142 apply_operator(OperatorType
const & operator_type,
143 unsigned int const n_repetitions_inner,
144 unsigned int const n_repetitions_outer)
const;
147 using VectorType = dealii::LinearAlgebra::distributed::Vector<Number>;
153 MPI_Comm
const mpi_comm;
156 dealii::ConditionalOStream pcout;
162 bool const is_throughput_study;
165 std::shared_ptr<ApplicationBase<dim, Number>> application;
168 std::shared_ptr<Grid<dim>> grid;
170 std::shared_ptr<dealii::Mapping<dim>> mapping;
172 std::shared_ptr<MultigridMappings<dim, Number>> multigrid_mappings;
175 std::shared_ptr<DeformedMappingBase<dim, Number>> ale_mapping;
177 std::shared_ptr<MultigridMappings<dim, Number>> ale_multigrid_mappings;
180 std::shared_ptr<HelpersALE<dim, Number>> helpers_ale;
185 std::shared_ptr<SpatialOperatorBase<dim, Number>> pde_operator;
192 std::shared_ptr<Postprocessor> postprocessor;
199 std::shared_ptr<TimeIntBDF<dim, Number>> time_integrator;
202 std::shared_ptr<DriverSteadyProblems<dim, Number>> driver_steady;
Definition application_base.h:51
Definition postprocessor_base.h:40
Definition timer_tree.h:36