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.