1 #include "dg_factory.hpp" 3 #include "strong_dg.hpp" 7 template <
int dim,
typename real,
typename MeshType>
8 std::shared_ptr< DGBase<dim,real,MeshType> >
12 const unsigned int degree,
13 const unsigned int max_degree_input,
14 const unsigned int grid_degree_input,
15 const std::shared_ptr<Triangulation> triangulation_input)
18 const PDE_enum pde_type = parameters_input->
pde_type;
20 const Model_enum model_type = parameters_input->
model_type;
25 if (pde_type == PDE_enum::advection) {
26 return std::make_shared< DGWeak<dim,1,real,MeshType> >(parameters_input, degree, max_degree_input, grid_degree_input, triangulation_input);
27 }
else if (pde_type == PDE_enum::advection_vector) {
28 return std::make_shared< DGWeak<dim,2,real,MeshType> >(parameters_input, degree, max_degree_input, grid_degree_input, triangulation_input);
29 }
else if (pde_type == PDE_enum::diffusion) {
30 return std::make_shared< DGWeak<dim,1,real,MeshType> >(parameters_input, degree, max_degree_input, grid_degree_input, triangulation_input);
31 }
else if (pde_type == PDE_enum::convection_diffusion) {
32 return std::make_shared< DGWeak<dim,1,real,MeshType> >(parameters_input, degree, max_degree_input, grid_degree_input, triangulation_input);
33 }
else if (pde_type == PDE_enum::burgers_inviscid) {
34 return std::make_shared< DGWeak<dim,dim,real,MeshType> >(parameters_input, degree, max_degree_input, grid_degree_input, triangulation_input);
35 }
else if (pde_type == PDE_enum::burgers_viscous) {
36 return std::make_shared< DGWeak<dim,dim,real,MeshType> >(parameters_input, degree, max_degree_input, grid_degree_input, triangulation_input);
37 }
else if (pde_type == PDE_enum::burgers_rewienski) {
38 return std::make_shared< DGWeak<dim,dim,real,MeshType> >(parameters_input, degree, max_degree_input, grid_degree_input, triangulation_input);
39 }
else if (pde_type == PDE_enum::euler) {
40 return std::make_shared< DGWeak<dim,dim+2,real,MeshType> >(parameters_input, degree, max_degree_input, grid_degree_input, triangulation_input);
41 }
else if (pde_type == PDE_enum::navier_stokes) {
42 return std::make_shared< DGWeak<dim,dim+2,real,MeshType> >(parameters_input, degree, max_degree_input, grid_degree_input, triangulation_input);
43 }
else if ((pde_type == PDE_enum::physics_model) && (model_type == Model_enum::reynolds_averaged_navier_stokes) && (rans_model_type == RANSModel_enum::SA_negative)) {
44 return std::make_shared< DGWeak<dim,dim+3,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::large_eddy_simulation)) {
48 return std::make_shared< DGWeak<dim,dim+2,real,MeshType> >(parameters_input, degree, max_degree_input, grid_degree_input, triangulation_input);
52 if (pde_type == PDE_enum::advection) {
53 return std::make_shared< DGStrong<dim,1,real,MeshType> >(parameters_input, degree, max_degree_input, grid_degree_input, triangulation_input);
54 }
else if (pde_type == PDE_enum::advection_vector) {
55 return std::make_shared< DGStrong<dim,2,real,MeshType> >(parameters_input, degree, max_degree_input, grid_degree_input, triangulation_input);
56 }
else if (pde_type == PDE_enum::diffusion) {
57 return std::make_shared< DGStrong<dim,1,real,MeshType> >(parameters_input, degree, max_degree_input, grid_degree_input, triangulation_input);
58 }
else if (pde_type == PDE_enum::convection_diffusion) {
59 return std::make_shared< DGStrong<dim,1,real,MeshType> >(parameters_input, degree, max_degree_input, grid_degree_input, triangulation_input);
60 }
else if (pde_type == PDE_enum::burgers_inviscid) {
61 return std::make_shared< DGStrong<dim,dim,real,MeshType> >(parameters_input, degree, max_degree_input, grid_degree_input, triangulation_input);
62 }
else if (pde_type == PDE_enum::burgers_viscous) {
63 return std::make_shared< DGStrong<dim,dim,real,MeshType> >(parameters_input, degree, max_degree_input, grid_degree_input, triangulation_input);
64 }
else if (pde_type == PDE_enum::burgers_rewienski) {
65 return std::make_shared< DGStrong<dim,dim,real,MeshType> >(parameters_input, degree, max_degree_input, grid_degree_input, triangulation_input);
66 }
else if (pde_type == PDE_enum::euler) {
67 return std::make_shared< DGStrong<dim,dim+2,real,MeshType> >(parameters_input, degree, max_degree_input, grid_degree_input, triangulation_input);
68 }
else if (pde_type == PDE_enum::navier_stokes) {
69 return std::make_shared< DGStrong<dim,dim+2,real,MeshType> >(parameters_input, degree, max_degree_input, grid_degree_input, triangulation_input);
70 }
else if ((pde_type == PDE_enum::physics_model) && (model_type == Model_enum::reynolds_averaged_navier_stokes) && (rans_model_type == RANSModel_enum::SA_negative)) {
71 return std::make_shared< DGStrong<dim,dim+3,real,MeshType> >(parameters_input, degree, max_degree_input, grid_degree_input, triangulation_input);
74 else if ((pde_type == PDE_enum::physics_model) && (model_type == Model_enum::large_eddy_simulation)) {
75 return std::make_shared< DGStrong<dim,dim+2,real,MeshType> >(parameters_input, degree, max_degree_input, grid_degree_input, triangulation_input);
79 std::cout <<
"Can't create DGBase in create_discontinuous_galerkin(). Invalid PDE type: " << pde_type << std::endl;
83 template <
int dim,
typename real,
typename MeshType>
84 std::shared_ptr< DGBase<dim,real,MeshType> >
88 const unsigned int degree,
89 const unsigned int max_degree_input,
90 const std::shared_ptr<Triangulation> triangulation_input)
92 return create_discontinuous_galerkin(parameters_input, degree, max_degree_input, degree+1, triangulation_input);
95 template <
int dim,
typename real,
typename MeshType>
96 std::shared_ptr< DGBase<dim,real,MeshType> >
100 const unsigned int degree,
101 const std::shared_ptr<Triangulation> triangulation_input)
103 return create_discontinuous_galerkin(parameters_input, degree, degree, triangulation_input);
PartialDifferentialEquation pde_type
Store the PDE type to be solved.
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.
This class creates a new DGBase object.
static std::shared_ptr< DGBase< dim, 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
Types of Reynolds-averaged Navier-Stokes (RANS) models that can be used.
ReynoldsAveragedNavierStokesModel RANS_model_type
Store the Reynolds-averaged Navier-Stokes (RANS) model type.
ModelType model_type
Store the model type.
PhysicsModelParam physics_model_param
Contains parameters for Physics Model.