1 #include "dg_factory.hpp" 3 #include "strong_dg.hpp" 4 #include "strong_dg_les.hpp" 8 template <
int dim,
int nspecies,
typename real,
typename MeshType>
9 std::shared_ptr< DGBase<dim,nspecies,real,MeshType> >
13 const unsigned int degree,
14 const unsigned int max_degree_input,
15 const unsigned int grid_degree_input,
16 const std::shared_ptr<Triangulation> triangulation_input)
19 const PDE_enum pde_type = parameters_input->
pde_type;
21 const Model_enum model_type = parameters_input->
model_type;
26 if constexpr(nspecies==1){
27 if (pde_type == PDE_enum::advection) {
28 return std::make_shared< DGWeak<dim,nspecies,1,real,MeshType> >(parameters_input, degree, max_degree_input, grid_degree_input, triangulation_input);
29 }
else if (pde_type == PDE_enum::advection_vector) {
30 return std::make_shared< DGWeak<dim,nspecies,2,real,MeshType> >(parameters_input, degree, max_degree_input, grid_degree_input, triangulation_input);
31 }
else if (pde_type == PDE_enum::diffusion) {
32 return std::make_shared< DGWeak<dim,nspecies,1,real,MeshType> >(parameters_input, degree, max_degree_input, grid_degree_input, triangulation_input);
33 }
else if (pde_type == PDE_enum::convection_diffusion) {
34 return std::make_shared< DGWeak<dim,nspecies,1,real,MeshType> >(parameters_input, degree, max_degree_input, grid_degree_input, triangulation_input);
35 }
else if (pde_type == PDE_enum::burgers_inviscid) {
36 return std::make_shared< DGWeak<dim,nspecies,dim,real,MeshType> >(parameters_input, degree, max_degree_input, grid_degree_input, triangulation_input);
37 }
else if (pde_type == PDE_enum::burgers_viscous) {
38 return std::make_shared< DGWeak<dim,nspecies,dim,real,MeshType> >(parameters_input, degree, max_degree_input, grid_degree_input, triangulation_input);
39 }
else if (pde_type == PDE_enum::burgers_rewienski) {
40 return std::make_shared< DGWeak<dim,nspecies,dim,real,MeshType> >(parameters_input, degree, max_degree_input, grid_degree_input, triangulation_input);
41 }
else if (pde_type == PDE_enum::euler) {
42 return std::make_shared< DGWeak<dim,nspecies,dim+2,real,MeshType> >(parameters_input, degree, max_degree_input, grid_degree_input, triangulation_input);
43 }
else if (pde_type == PDE_enum::navier_stokes) {
44 return std::make_shared< DGWeak<dim,nspecies,dim+2,real,MeshType> >(parameters_input, degree, max_degree_input, grid_degree_input, triangulation_input);
45 }
else if (pde_type == PDE_enum::navier_stokes_channel_flow_constant_source_term) {
46 return std::make_shared< DGWeak<dim,nspecies,dim+2,real,MeshType> >(parameters_input, degree, max_degree_input, grid_degree_input, triangulation_input);
47 }
else if ((pde_type == PDE_enum::physics_model) && (model_type == Model_enum::reynolds_averaged_navier_stokes) && (rans_model_type == RANSModel_enum::SA_negative)) {
48 return std::make_shared< DGWeak<dim,nspecies,dim+3,real,MeshType> >(parameters_input, degree, max_degree_input, grid_degree_input, triangulation_input);
49 }
else if(pde_type == PDE_enum::real_gas) {
50 std::cout <<
"Real Gas PDE only supports 2 or more species... Aborting." << std::endl;
54 else if ((pde_type == PDE_enum::physics_model || pde_type == PDE_enum::physics_model_filtered) && (model_type == Model_enum::large_eddy_simulation || model_type == Model_enum::navier_stokes_model)) {
55 return std::make_shared< DGWeak<dim,nspecies,dim+2,real,MeshType> >(parameters_input, degree, max_degree_input, grid_degree_input, triangulation_input);
59 else if (pde_type == PDE_enum::real_gas) {
61 return std::make_shared< DGWeak<dim,nspecies,dim+nspecies+1,real,MeshType> >(parameters_input, degree, max_degree_input, grid_degree_input, triangulation_input);
64 if constexpr(nspecies==1) {
65 if (pde_type == PDE_enum::advection) {
66 return std::make_shared< DGStrong<dim,nspecies,1,real,MeshType> >(parameters_input, degree, max_degree_input, grid_degree_input, triangulation_input);
67 }
else if (pde_type == PDE_enum::advection_vector) {
68 return std::make_shared< DGStrong<dim,nspecies,2,real,MeshType> >(parameters_input, degree, max_degree_input, grid_degree_input, triangulation_input);
69 }
else if (pde_type == PDE_enum::diffusion) {
70 return std::make_shared< DGStrong<dim,nspecies,1,real,MeshType> >(parameters_input, degree, max_degree_input, grid_degree_input, triangulation_input);
71 }
else if (pde_type == PDE_enum::convection_diffusion) {
72 return std::make_shared< DGStrong<dim,nspecies,1,real,MeshType> >(parameters_input, degree, max_degree_input, grid_degree_input, triangulation_input);
73 }
else if (pde_type == PDE_enum::burgers_inviscid) {
74 return std::make_shared< DGStrong<dim,nspecies,dim,real,MeshType> >(parameters_input, degree, max_degree_input, grid_degree_input, triangulation_input);
75 }
else if (pde_type == PDE_enum::burgers_viscous) {
76 return std::make_shared< DGStrong<dim,nspecies,dim,real,MeshType> >(parameters_input, degree, max_degree_input, grid_degree_input, triangulation_input);
77 }
else if (pde_type == PDE_enum::burgers_rewienski) {
78 return std::make_shared< DGStrong<dim,nspecies,dim,real,MeshType> >(parameters_input, degree, max_degree_input, grid_degree_input, triangulation_input);
79 }
else if (pde_type == PDE_enum::euler) {
80 return std::make_shared< DGStrong<dim,nspecies,dim+2,real,MeshType> >(parameters_input, degree, max_degree_input, grid_degree_input, triangulation_input);
81 }
else if (pde_type == PDE_enum::navier_stokes) {
82 return std::make_shared< DGStrong<dim,nspecies,dim+2,real,MeshType> >(parameters_input, degree, max_degree_input, grid_degree_input, triangulation_input);
83 }
else if (pde_type == PDE_enum::navier_stokes_channel_flow_constant_source_term) {
84 return std::make_shared< DGStrong<dim,nspecies,dim+2,real,MeshType> >(parameters_input, degree, max_degree_input, grid_degree_input, triangulation_input);
85 }
else if (pde_type == PDE_enum::navier_stokes_channel_flow_constant_source_term_wall_model) {
86 return std::make_shared< DGStrong<dim,nspecies,dim+2,real,MeshType> >(parameters_input, degree, max_degree_input, grid_degree_input, triangulation_input);
87 }
else if ((pde_type == PDE_enum::physics_model) && (model_type == Model_enum::reynolds_averaged_navier_stokes) && (rans_model_type == RANSModel_enum::SA_negative)) {
88 return std::make_shared< DGStrong<dim,nspecies,dim+3,real,MeshType> >(parameters_input, degree, max_degree_input, grid_degree_input, triangulation_input);
91 else if ((pde_type == PDE_enum::physics_model || pde_type == PDE_enum::physics_model_filtered) && (model_type == Model_enum::large_eddy_simulation || model_type == Model_enum::navier_stokes_model)) {
94 if(model_type == Model_enum::large_eddy_simulation) {
97 if(SGS_model_type == SGS_enum::shear_improved_smagorinsky) {
98 return std::make_shared< DGStrongLES_ShearImproved<dim,nspecies,dim+2,real,MeshType> >(parameters_input, degree, max_degree_input, grid_degree_input, triangulation_input);
99 }
else if(SGS_model_type == SGS_enum::dynamic_smagorinsky) {
100 return std::make_shared< DGStrongLES_DynamicSmagorinsky<dim,nspecies,dim+2,real,MeshType> >(parameters_input, degree, max_degree_input, grid_degree_input, triangulation_input);
102 return std::make_shared< DGStrongLES<dim,nspecies,dim+2,real,MeshType> >(parameters_input, degree, max_degree_input, grid_degree_input, triangulation_input);
104 }
else if (model_type == Model_enum::navier_stokes_model && flow_case_type == FlowCaseType_enum::channel_flow) {
105 return std::make_shared< DGStrong_ChannelFlow<dim,nspecies,dim+2,real,MeshType> >(parameters_input, degree, max_degree_input, grid_degree_input, triangulation_input);
110 else if (pde_type == PDE_enum::real_gas) {
112 return std::make_shared< DGStrong<dim,nspecies,dim+nspecies+1,real,MeshType> >(parameters_input, degree, max_degree_input, grid_degree_input, triangulation_input);
115 std::cout <<
"Can't create DGBase in create_discontinuous_galerkin(). Invalid PDE type: " << pde_type << std::endl;
119 template <
int dim,
int nspecies,
typename real,
typename MeshType>
120 std::shared_ptr< DGBase<dim,nspecies,real,MeshType> >
124 const unsigned int degree,
125 const unsigned int max_degree_input,
126 const std::shared_ptr<Triangulation> triangulation_input)
128 return create_discontinuous_galerkin(parameters_input, degree, max_degree_input, degree+1, triangulation_input);
131 template <
int dim,
int nspecies,
typename real,
typename MeshType>
132 std::shared_ptr< DGBase<dim,nspecies,real,MeshType> >
136 const unsigned int degree,
137 const std::shared_ptr<Triangulation> triangulation_input)
139 return create_discontinuous_galerkin(parameters_input, degree, degree, triangulation_input);
FlowCaseType
Selects the flow case to be simulated.
PartialDifferentialEquation pde_type
Store the PDE type to be solved.
FlowCaseType flow_case_type
Selected FlowCaseType from the input file.
FlowSolverParam flow_solver_param
Contains the parameters for simulation cases (flow solver test)
PartialDifferentialEquation
Possible Partial Differential Equations to solve.
Files for the baseline physics.
bool use_weak_form
Flag to use weak or strong form of DG.
ModelType
Types of models available.
Main parameter class that contains the various other sub-parameter classes.
SubGridScaleModel SGS_model_type
Store the SubGridScale (SGS) model type.
This class creates a new DGBase object.
ReynoldsAveragedNavierStokesModel
Types of Reynolds-averaged Navier-Stokes (RANS) models that can be used.
static std::shared_ptr< DGBase< dim, nspecies, real, MeshType > > create_discontinuous_galerkin(const Parameters::AllParameters *const parameters_input, const unsigned int degree, const unsigned int max_degree_input, const unsigned int grid_degree_input, const std::shared_ptr< Triangulation > triangulation_input)
Creates a derived object DG, but returns it as DGBase.
ReynoldsAveragedNavierStokesModel RANS_model_type
Store the Reynolds-averaged Navier-Stokes (RANS) model type.
SubGridScaleModel
Types of sub-grid scale (SGS) models that can be used.
ModelType model_type
Store the model type.
PhysicsModelParam physics_model_param
Contains parameters for Physics Model.