1 #include "physics_post_processor.h" 2 #include "physics/physics_factory.h" 3 #include "physics/model_factory.h" 6 namespace Postprocess {
8 template <
int dim,
int nspecies>
13 const PDE_enum pde_type = parameters_input->
pde_type;
17 const Model_enum model_type = parameters_input->
model_type;
22 if (pde_type == PDE_enum::real_gas) {
23 return std::make_unique< PhysicsPostprocessor<dim,nspecies,dim+nspecies+1> >(parameters_input);
26 if (pde_type == PDE_enum::advection && nspecies == 1) {
27 return std::make_unique< PhysicsPostprocessor<dim,nspecies,1> >(parameters_input);
28 }
else if (pde_type == PDE_enum::advection_vector && nspecies == 1) {
29 return std::make_unique< PhysicsPostprocessor<dim,nspecies,2> >(parameters_input);
30 }
else if (pde_type == PDE_enum::diffusion && nspecies == 1) {
31 return std::make_unique< PhysicsPostprocessor<dim,nspecies,1> >(parameters_input);
32 }
else if (pde_type == PDE_enum::convection_diffusion && nspecies == 1) {
33 return std::make_unique< PhysicsPostprocessor<dim,nspecies,1> >(parameters_input);
34 }
else if (pde_type == PDE_enum::burgers_inviscid && nspecies == 1) {
35 return std::make_unique< PhysicsPostprocessor<dim,nspecies,dim> >(parameters_input);
36 }
else if (pde_type == PDE_enum::burgers_viscous && nspecies == 1) {
37 return std::make_unique< PhysicsPostprocessor<dim,nspecies,dim> >(parameters_input);
38 }
else if (pde_type == PDE_enum::burgers_rewienski && nspecies == 1) {
39 return std::make_unique< PhysicsPostprocessor<dim,nspecies,dim> >(parameters_input);
40 }
else if (pde_type == PDE_enum::euler && nspecies == 1) {
41 return std::make_unique< PhysicsPostprocessor<dim,nspecies,dim+2> >(parameters_input);
42 }
else if (pde_type == PDE_enum::navier_stokes && nspecies == 1) {
43 return std::make_unique< PhysicsPostprocessor<dim,nspecies,dim+2> >(parameters_input);
44 }
else if (pde_type == PDE_enum::navier_stokes_channel_flow_constant_source_term && nspecies == 1) {
45 return std::make_unique< PhysicsPostprocessor<dim,nspecies,dim+2> >(parameters_input);
46 }
else if (pde_type == PDE_enum::navier_stokes_channel_flow_constant_source_term_wall_model && nspecies == 1) {
47 return std::make_unique< PhysicsPostprocessor<dim,nspecies,dim+2> >(parameters_input);
48 }
else if ((pde_type == PDE_enum::physics_model) && (model_type == Model_enum::reynolds_averaged_navier_stokes) && (rans_model_type == RANSModel_enum::SA_negative) && nspecies == 1) {
49 return std::make_unique< PhysicsPostprocessor<dim,nspecies,dim+3> >(parameters_input);
52 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) && nspecies == 1) {
53 return std::make_unique< PhysicsPostprocessor<dim,nspecies,dim+2> >(parameters_input);
58 std::cout <<
"Invalid PDE when creating post-processor" << std::endl;
67 if constexpr(nspecies==1) {
71 this->model =
nullptr;
77 ::evaluate_vector_field (
const dealii::DataPostprocessorInputs::Vector<dim> &inputs, std::vector<dealii::Vector<double>> &computed_quantities)
const 79 const unsigned int n_quadrature_points = inputs.solution_values.size();
80 Assert (computed_quantities.size() == n_quadrature_points, dealii::ExcInternalError());
81 Assert (inputs.solution_values[0].size() == nstate, dealii::ExcInternalError());
82 for (
unsigned int q=0; q<n_quadrature_points; ++q)
84 computed_quantities[q] = this->physics->post_compute_derived_quantities_vector(
85 inputs.solution_values[q],
86 inputs.solution_gradients[q],
87 inputs.solution_hessians[q],
89 inputs.evaluation_points[q]);
94 ::evaluate_scalar_field (
const dealii::DataPostprocessorInputs::Scalar<dim> &inputs, std::vector<dealii::Vector<double>> &computed_quantities)
const 96 const unsigned int n_quadrature_points = inputs.solution_values.size();
97 Assert (computed_quantities.size() == n_quadrature_points, dealii::ExcInternalError());
98 for (
unsigned int q=0; q<n_quadrature_points; ++q)
100 computed_quantities[q] = this->physics->post_compute_derived_quantities_scalar(
101 inputs.solution_values[q],
102 inputs.solution_gradients[q],
103 inputs.solution_hessians[q],
105 inputs.evaluation_points[q]);
110 template <
int dim,
int nspecies,
int nstate>
113 return this->physics->post_get_names();
115 template <
int dim,
int nspecies,
int nstate>
116 std::vector<dealii::DataComponentInterpretation::DataComponentInterpretation>
119 return this->physics->post_get_data_component_interpretation();
121 template <
int dim,
int nspecies,
int nstate>
124 return this->physics->post_get_needed_update_flags();
127 #if PHILIP_SPECIES==1 PartialDifferentialEquation pde_type
Store the PDE type to be solved.
Postprocessor to output solution and other values computed by associated physics. ...
virtual std::vector< dealii::DataComponentInterpretation::DataComponentInterpretation > get_data_component_interpretation() const override
Queries the Physics for the type (scalar/vector) of output data variables.
PhysicsPostprocessor(const Parameters::AllParameters *const parameters_input)
Constructor.
PartialDifferentialEquation
Possible Partial Differential Equations to solve.
Files for the baseline physics.
virtual std::vector< std::string > get_names() const override
Queries the Physics for the names of output data variables.
virtual void evaluate_scalar_field(const dealii::DataPostprocessorInputs::Scalar< dim > &inputs, std::vector< dealii::Vector< double >> &computed_quantities) const override
Queries the Physics to output data of a scalar-valued problem.
ModelType
Types of models available.
Main parameter class that contains the various other sub-parameter classes.
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.
static std::shared_ptr< PhysicsBase< dim, nspecies, nstate, real > > create_Physics(const Parameters::AllParameters *const parameters_input, std::shared_ptr< ModelBase< dim, nspecies, nstate, real > > model_input=nullptr)
Factory to return the correct physics given input file.
ModelType model_type
Store the model type.
virtual void evaluate_vector_field(const dealii::DataPostprocessorInputs::Vector< dim > &inputs, std::vector< dealii::Vector< double >> &computed_quantities) const override
Queries the Physics to output data of a vector-valued problem.
static std::shared_ptr< ModelBase< dim, nspecies, nstate, real > > create_Model(const Parameters::AllParameters *const parameters_input)
Factory to return the correct model given input parameters.
PhysicsModelParam physics_model_param
Contains parameters for Physics Model.
static std::unique_ptr< dealii::DataPostprocessor< dim > > create_Postprocessor(const Parameters::AllParameters *const parameters_input)
Create the post-processor with the correct template parameters.
virtual dealii::UpdateFlags get_needed_update_flags() const override
Queries the Physics for the required update flags to evaluate output data.