22#ifndef INCLUDE_EXADG_INCOMPRESSIBLE_NAVIER_STOKES_DRIVER_H_
23#define INCLUDE_EXADG_INCOMPRESSIBLE_NAVIER_STOKES_DRIVER_H_
25#include <exadg/functions_and_boundary_conditions/verify_boundary_conditions.h>
26#include <exadg/grid/mapping_deformation_function.h>
27#include <exadg/grid/mapping_deformation_poisson.h>
28#include <exadg/incompressible_navier_stokes/postprocessor/postprocessor_base.h>
29#include <exadg/incompressible_navier_stokes/spatial_discretization/operator_coupled.h>
30#include <exadg/incompressible_navier_stokes/spatial_discretization/operator_dual_splitting.h>
31#include <exadg/incompressible_navier_stokes/spatial_discretization/operator_pressure_correction.h>
32#include <exadg/incompressible_navier_stokes/time_integration/driver_steady_problems.h>
33#include <exadg/incompressible_navier_stokes/time_integration/time_int_bdf_coupled_solver.h>
34#include <exadg/incompressible_navier_stokes/time_integration/time_int_bdf_dual_splitting.h>
35#include <exadg/incompressible_navier_stokes/time_integration/time_int_bdf_pressure_correction.h>
36#include <exadg/incompressible_navier_stokes/user_interface/application_base.h>
37#include <exadg/matrix_free/matrix_free_data.h>
38#include <exadg/operators/finite_element.h>
39#include <exadg/utilities/print_general_infos.h>
52enum class OperatorType{
53 CoupledNonlinearResidual,
55 PressurePoissonOperator,
59 VelocityConvDiffOperator,
64enum class PressureDegree
71get_dofs_per_element(OperatorType
const & operator_type,
72 PressureDegree
const & pressure_degree,
73 unsigned int const dim,
74 unsigned int const degree,
75 ExaDG::ElementType
const element_type)
77 unsigned int degree_p = 1;
78 if(pressure_degree == PressureDegree::MixedOrder)
79 degree_p = degree - 1;
80 else if(pressure_degree == PressureDegree::EqualOrder)
83 AssertThrow(
false, dealii::ExcMessage(
"Not implemented."));
85 unsigned int const velocity_dofs_per_element = ExaDG::get_dofs_per_element(
86 element_type,
true , dim , degree, dim);
88 unsigned int const pressure_dofs_per_element = ExaDG::get_dofs_per_element(
89 element_type,
true , 1 , degree_p, dim);
92 if(operator_type == OperatorType::CoupledNonlinearResidual or
93 operator_type == OperatorType::CoupledLinearized)
95 return velocity_dofs_per_element + pressure_dofs_per_element;
98 else if(operator_type == OperatorType::ConvectiveOperator or
99 operator_type == OperatorType::VelocityConvDiffOperator or
100 operator_type == OperatorType::HelmholtzOperator or
101 operator_type == OperatorType::ProjectionOperator or
102 operator_type == OperatorType::InverseMassOperator)
104 return velocity_dofs_per_element;
107 else if(operator_type == OperatorType::PressurePoissonOperator)
109 return pressure_dofs_per_element;
113 AssertThrow(
false, dealii::ExcMessage(
"Not implemented."));
119template<
int dim,
typename Number>
123 Driver(MPI_Comm
const & comm,
126 bool const is_throughput_study);
135 print_performance_results(
double const total_time)
const;
140 std::tuple<unsigned int, dealii::types::global_dof_index, double>
141 apply_operator(OperatorType
const & operator_type,
142 unsigned int const n_repetitions_inner,
143 unsigned int const n_repetitions_outer)
const;
146 using VectorType = dealii::LinearAlgebra::distributed::Vector<Number>;
152 MPI_Comm
const mpi_comm;
155 dealii::ConditionalOStream pcout;
161 bool const is_throughput_study;
164 std::shared_ptr<ApplicationBase<dim, Number>> application;
167 std::shared_ptr<Grid<dim>> grid;
169 std::shared_ptr<dealii::Mapping<dim>> mapping;
171 std::shared_ptr<MultigridMappings<dim, Number>> multigrid_mappings;
174 std::shared_ptr<DeformedMappingBase<dim, Number>> ale_mapping;
176 std::shared_ptr<MultigridMappings<dim, Number>> ale_multigrid_mappings;
179 std::shared_ptr<HelpersALE<dim, Number>> helpers_ale;
184 std::shared_ptr<SpatialOperatorBase<dim, Number>> pde_operator;
191 std::shared_ptr<Postprocessor> postprocessor;
198 std::shared_ptr<TimeIntBDF<dim, Number>> time_integrator;
201 std::shared_ptr<DriverSteadyProblems<dim, Number>> driver_steady;
Definition application_base.h:51
Definition postprocessor_base.h:39
Definition timer_tree.h:36