1 #include "parameters/all_parameters.h" 2 #include "parameters/parameters_manufactured_solution.h" 4 #include <deal.II/base/tensor.h> 8 #include "model_factory.h" 9 #include "manufactured_solution.h" 10 #include "large_eddy_simulation.h" 11 #include "reynolds_averaged_navier_stokes.h" 12 #include "negative_spalart_allmaras_rans_model.h" 17 template <
int dim,
int nstate,
typename real>
18 std::shared_ptr < ModelBase<dim,nstate,real> >
23 PDE_enum pde_type = parameters_input->
pde_type;
25 if(pde_type == PDE_enum::physics_model) {
27 std::shared_ptr< ManufacturedSolutionFunction<dim,real> > manufactured_solution_function
31 Model_enum model_type = parameters_input->
model_type;
39 if (model_type == Model_enum::large_eddy_simulation) {
40 if constexpr ((nstate==dim+2) && (dim==3)) {
44 if (sgs_model_type == SGS_enum::smagorinsky) {
48 return std::make_shared < LargeEddySimulation_Smagorinsky<dim,nstate,real> > (
51 parameters_input->euler_param.gamma_gas,
52 parameters_input->euler_param.mach_inf,
53 parameters_input->euler_param.angle_of_attack,
54 parameters_input->euler_param.side_slip_angle,
55 parameters_input->navier_stokes_param.prandtl_number,
56 parameters_input->navier_stokes_param.reynolds_number_inf,
57 parameters_input->navier_stokes_param.use_constant_viscosity,
58 parameters_input->navier_stokes_param.nondimensionalized_constant_viscosity,
59 parameters_input->navier_stokes_param.temperature_inf,
60 parameters_input->physics_model_param.turbulent_prandtl_number,
61 parameters_input->physics_model_param.ratio_of_filter_width_to_cell_size,
62 parameters_input->physics_model_param.smagorinsky_model_constant,
63 parameters_input->navier_stokes_param.nondimensionalized_isothermal_wall_temperature,
64 parameters_input->navier_stokes_param.thermal_boundary_condition_type,
65 manufactured_solution_function,
66 parameters_input->two_point_num_flux_type);
67 }
else if (sgs_model_type == SGS_enum::wall_adaptive_local_eddy_viscosity) {
71 return std::make_shared < LargeEddySimulation_WALE<dim,nstate,real> > (
74 parameters_input->euler_param.gamma_gas,
75 parameters_input->euler_param.mach_inf,
76 parameters_input->euler_param.angle_of_attack,
77 parameters_input->euler_param.side_slip_angle,
78 parameters_input->navier_stokes_param.prandtl_number,
79 parameters_input->navier_stokes_param.reynolds_number_inf,
80 parameters_input->navier_stokes_param.use_constant_viscosity,
81 parameters_input->navier_stokes_param.nondimensionalized_constant_viscosity,
82 parameters_input->navier_stokes_param.temperature_inf,
83 parameters_input->physics_model_param.turbulent_prandtl_number,
84 parameters_input->physics_model_param.ratio_of_filter_width_to_cell_size,
85 parameters_input->physics_model_param.WALE_model_constant,
86 parameters_input->navier_stokes_param.nondimensionalized_isothermal_wall_temperature,
87 parameters_input->navier_stokes_param.thermal_boundary_condition_type,
88 manufactured_solution_function,
89 parameters_input->two_point_num_flux_type);
90 }
else if (sgs_model_type == SGS_enum::vreman) {
94 return std::make_shared < LargeEddySimulation_Vreman<dim,nstate,real> > (
97 parameters_input->euler_param.gamma_gas,
98 parameters_input->euler_param.mach_inf,
99 parameters_input->euler_param.angle_of_attack,
100 parameters_input->euler_param.side_slip_angle,
101 parameters_input->navier_stokes_param.prandtl_number,
102 parameters_input->navier_stokes_param.reynolds_number_inf,
103 parameters_input->navier_stokes_param.use_constant_viscosity,
104 parameters_input->navier_stokes_param.nondimensionalized_constant_viscosity,
105 parameters_input->navier_stokes_param.temperature_inf,
106 parameters_input->physics_model_param.turbulent_prandtl_number,
107 parameters_input->physics_model_param.ratio_of_filter_width_to_cell_size,
108 parameters_input->physics_model_param.vreman_model_constant,
109 parameters_input->navier_stokes_param.nondimensionalized_isothermal_wall_temperature,
110 parameters_input->navier_stokes_param.thermal_boundary_condition_type,
111 manufactured_solution_function,
112 parameters_input->two_point_num_flux_type);
115 std::cout <<
"Can't create LargeEddySimulationBase, invalid SGSModelType type: " << sgs_model_type << std::endl;
116 assert(0==1 &&
"Can't create LargeEddySimulationBase, invalid SGSModelType type");
122 manufactured_solution_function =
nullptr;
129 else if (model_type == Model_enum::reynolds_averaged_navier_stokes) {
133 if(rans_model_type == RANSModel_enum::SA_negative){
134 if constexpr (nstate==dim+3) {
138 return std::make_shared < ReynoldsAveragedNavierStokes_SAneg<dim,nstate,real> > (
141 parameters_input->euler_param.gamma_gas,
142 parameters_input->euler_param.mach_inf,
143 parameters_input->euler_param.angle_of_attack,
144 parameters_input->euler_param.side_slip_angle,
145 parameters_input->navier_stokes_param.prandtl_number,
146 parameters_input->navier_stokes_param.reynolds_number_inf,
147 parameters_input->navier_stokes_param.use_constant_viscosity,
148 parameters_input->navier_stokes_param.nondimensionalized_constant_viscosity,
149 parameters_input->physics_model_param.turbulent_prandtl_number,
150 parameters_input->navier_stokes_param.temperature_inf,
151 parameters_input->navier_stokes_param.nondimensionalized_isothermal_wall_temperature,
152 parameters_input->navier_stokes_param.thermal_boundary_condition_type,
153 manufactured_solution_function,
154 parameters_input->two_point_num_flux_type);
158 manufactured_solution_function =
nullptr;
163 std::cout <<
"Can't create ReynoldsAveragedNavierStokesBase, invalid RANSModelType type: " << rans_model_type << std::endl;
164 assert(0==1 &&
"Can't create ReynoldsAveragedNavierStokesBase, invalid RANSModelType type");
171 std::cout <<
"Can't create ModelBase, invalid ModelType type: " << model_type << std::endl;
172 assert(0==1 &&
"Can't create ModelBase, invalid ModelType type");
173 manufactured_solution_function =
nullptr;
PartialDifferentialEquation pde_type
Store the PDE type to be solved.
static std::shared_ptr< ManufacturedSolutionFunction< dim, real > > create_ManufacturedSolution(Parameters::AllParameters const *const param, int nstate)
Construct Manufactured solution object from global parameter file.
PartialDifferentialEquation
Possible Partial Differential Equations to solve.
Files for the baseline physics.
EulerParam euler_param
Contains parameters for the Euler equations non-dimensionalization.
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.
double ref_length
Reference length.
static std::shared_ptr< ModelBase< dim, nstate, real > > create_Model(const Parameters::AllParameters *const parameters_input)
Factory to return the correct model given input parameters.
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.
Create specified model as ModelBase object.
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.