1 #ifndef __PHYSICS_MODEL__ 2 #define __PHYSICS_MODEL__ 6 #include "navier_stokes.h" 13 template <
int dim,
int nspecies,
int nstate,
typename real,
int nstate_baseline_physics>
40 std::shared_ptr< PhysicsBase<dim,nspecies,nstate_baseline_physics,real> >
physics_baseline;
43 std::shared_ptr< ModelBase<dim,nspecies,nstate,real> >
model;
52 std::array<dealii::Tensor<1,dim,real>,nstate>
54 const std::array<real,nstate> &conservative_soln,
55 const std::array<dealii::Tensor<1,dim,real>,nstate> &conservative_soln_gradient)
const;
58 std::array<dealii::Tensor<1,dim,real>,nstate>
60 const std::array<real,nstate> &primitive_soln,
61 const std::array<dealii::Tensor<1,dim,real>,nstate> &primitive_soln_gradient)
const;
65 const std::array<real,nstate> &conservative_soln)
const;
69 const std::array<real,nstate> &solution,
70 const std::array<dealii::Tensor<1,dim,real>,nstate> &solution_gradient,
71 const std::array<real,nstate> &filtered_solution,
72 const std::array<dealii::Tensor<1,dim,real>,nstate> &filtered_solution_gradient,
73 const dealii::types::global_dof_index cell_index)
override;
77 const std::array<real,nstate> &conservative_soln,
78 const std::array<dealii::Tensor<1,dim,real>,nstate> &solution_gradient,
79 const dealii::types::global_dof_index cell_index)
const;
83 const std::array<real,nstate> &solution,
84 const std::array<dealii::Tensor<1,dim,real>,nstate> &solution_gradient,
85 const std::array<real,nstate> &filtered_solution,
86 const std::array<dealii::Tensor<1,dim,real>,nstate> &filtered_solution_gradient,
87 const bool on_boundary,
88 const dealii::types::global_dof_index cell_index,
89 const dealii::Tensor<1,dim,real> &normal,
90 const int boundary_type)
override;
94 const dealii::Point<dim,real> &pos,
95 const std::array<real,nstate> &conservative_soln,
96 const std::array<dealii::Tensor<1,dim,real>,nstate> &solution_gradient,
97 const dealii::types::global_dof_index cell_index)
const;
101 const dealii::Point<dim,real> &pos,
102 const std::array<real,nstate> &conservative_soln,
103 const real current_time,
104 const dealii::types::global_dof_index cell_index)
const;
111 const std::array<real,nstate> &conservative_soln1,
112 const std::array<real,nstate> &conservative_soln2)
const;
116 const std::array<real,nstate> &conservative_soln)
const;
120 const std::array<real,nstate> &entropy_var)
const;
126 const std::array<real,nstate> &,
127 const dealii::Tensor<1,dim,real> &)
const;
134 const std::array<real,nstate> &soln,
135 const dealii::Tensor<1,dim,real> &normal)
const override;
143 const dealii::Point<dim, real> &,
144 const dealii::Tensor<1,dim,real> &,
145 const std::array<real,nstate> &,
146 const std::array<dealii::Tensor<1,dim,real>,nstate> &,
147 std::array<real,nstate> &,
148 std::array<dealii::Tensor<1,dim,real>,nstate> &)
const;
152 const int boundary_type,
153 const dealii::Point<dim, real> &pos,
154 const dealii::Tensor<1,dim,real> &normal,
155 const std::array<real,nstate> &soln_int,
156 const std::array<dealii::Tensor<1,dim,real>,nstate> &soln_grad_int,
157 const std::array<real,nstate> &,
158 const std::array<dealii::Tensor<1,dim,real>,nstate> &,
159 std::array<real,nstate> &soln_bc,
160 std::array<dealii::Tensor<1,dim,real>,nstate> &soln_grad_bc)
const override;
166 const dealii::Vector<double> &uh,
167 const std::vector<dealii::Tensor<1,dim> > &duh,
168 const std::vector<dealii::Tensor<2,dim> > &dduh,
169 const dealii::Tensor<1,dim> &normals,
170 const dealii::Point<dim> &evaluation_points)
const;
200 template <
int dim,
int nspecies,
int nstate,
typename real,
int nstate_baseline_physics>
229 const std::array<real,nstate> &solution,
230 const std::array<dealii::Tensor<1,dim,real>,nstate> &solution_gradient,
231 const std::array<real,nstate> &filtered_solution,
232 const std::array<dealii::Tensor<1,dim,real>,nstate> &filtered_solution_gradient,
233 const dealii::types::global_dof_index cell_index)
override;
237 const std::array<real,nstate> &solution,
238 const std::array<dealii::Tensor<1,dim,real>,nstate> &solution_gradient,
239 const std::array<real,nstate> &filtered_solution,
240 const std::array<dealii::Tensor<1,dim,real>,nstate> &filtered_solution_gradient,
241 const bool on_boundary,
242 const dealii::types::global_dof_index cell_index,
243 const dealii::Tensor<1,dim,real> &normal,
244 const int boundary_type)
override;
std::array< real, nstate > convert_primitive_to_conservative(const std::array< real, nstate > &primitive_soln) const
Convert primitive solution to conservative solution.
std::array< real, nstate > physical_source_term(const dealii::Point< dim, real > &pos, const std::array< real, nstate > &conservative_soln, const std::array< dealii::Tensor< 1, dim, real >, nstate > &solution_gradient, const dealii::types::global_dof_index cell_index) const
Physical source term.
dealii::ConditionalOStream pcout
ConditionalOStream.
std::array< real, nstate > compute_conservative_variables_from_entropy_variables(const std::array< real, nstate > &entropy_var) const
Computes the conservative variables from the entropy variables.
const bool has_nonzero_diffusion
Flag to signal that diffusion term is non-zero.
virtual std::array< real, nstate > dissipative_flux_dot_normal(const std::array< real, nstate > &solution, const std::array< dealii::Tensor< 1, dim, real >, nstate > &solution_gradient, const std::array< real, nstate > &filtered_solution, const std::array< dealii::Tensor< 1, dim, real >, nstate > &filtered_solution_gradient, const bool on_boundary, const dealii::types::global_dof_index cell_index, const dealii::Tensor< 1, dim, real > &normal, const int boundary_type) override
Dissipative (i.e. viscous) flux: dot normal vector.
Base class from which Advection, Diffusion, ConvectionDiffusion, and Euler is derived.
Manufactured solution used for grid studies to check convergence orders.
Physics Model equations. Derived from PhysicsBase, holds a baseline physics and model terms and equat...
std::shared_ptr< PhysicsBase< dim, nspecies, nstate_baseline_physics, real > > physics_baseline
Baseline physics object with nstate==nstate_baseline_physics.
real max_convective_eigenvalue(const std::array< real, nstate > &soln) const
Maximum convective eigenvalue.
PartialDifferentialEquation
Possible Partial Differential Equations to solve.
real max_convective_normal_eigenvalue(const std::array< real, nstate > &soln, const dealii::Tensor< 1, dim, real > &normal) const override
Maximum convective normal eigenvalue (used in Lax-Friedrichs)
Files for the baseline physics.
const bool has_nonzero_physical_source
Flag to signal that physical source term is non-zero.
std::array< real, nstate > convective_eigenvalues(const std::array< real, nstate > &, const dealii::Tensor< 1, dim, real > &) const
std::shared_ptr< ManufacturedSolutionFunction< dim, nspecies, real > > manufactured_solution_function
Manufactured solution function.
Physics model additional terms and equations to the baseline physics.
std::array< dealii::Tensor< 1, dim, real >, nstate > convective_flux(const std::array< real, nstate > &conservative_soln) const
Convective flux: .
Main parameter class that contains the various other sub-parameter classes.
real max_viscous_eigenvalue(const std::array< real, nstate > &soln) const
Maximum viscous eigenvalue.
void boundary_face_values_viscous_flux(const int boundary_type, const dealii::Point< dim, real > &pos, const dealii::Tensor< 1, dim, real > &normal, const std::array< real, nstate > &soln_int, const std::array< dealii::Tensor< 1, dim, real >, nstate > &soln_grad_int, const std::array< real, nstate > &, const std::array< dealii::Tensor< 1, dim, real >, nstate > &, std::array< real, nstate > &soln_bc, std::array< dealii::Tensor< 1, dim, real >, nstate > &soln_grad_bc) const override
Boundary face values for viscous fluxes.
std::array< dealii::Tensor< 1, dim, real >, nstate > convective_numerical_split_flux(const std::array< real, nstate > &conservative_soln1, const std::array< real, nstate > &conservative_soln2) const
Convective Numerical Split Flux for split form.
std::array< dealii::Tensor< 1, dim, real >, nstate > convert_primitive_gradient_to_conservative_gradient(const std::array< real, nstate > &primitive_soln, const std::array< dealii::Tensor< 1, dim, real >, nstate > &primitive_soln_gradient) const
std::array< real, nstate > compute_entropy_variables(const std::array< real, nstate > &conservative_soln) const
Computes the entropy variables.
std::vector< std::string > post_get_names() const
Returns names of the solution to be used by PhysicsPostprocessor to output current solution...
const int mpi_rank
MPI rank.
std::array< real, nstate > source_term(const dealii::Point< dim, real > &pos, const std::array< real, nstate > &conservative_soln, const real current_time, const dealii::types::global_dof_index cell_index) const
Source term that does not require differentiation.
std::shared_ptr< ModelBase< dim, nspecies, nstate, real > > model
Model object.
dealii::Vector< double > post_compute_derived_quantities_vector(const dealii::Vector< double > &uh, const std::vector< dealii::Tensor< 1, dim > > &duh, const std::vector< dealii::Tensor< 2, dim > > &dduh, const dealii::Tensor< 1, dim > &normals, const dealii::Point< dim > &evaluation_points) const
Returns current vector solution to be used by PhysicsPostprocessor to output current solution...
dealii::UpdateFlags post_get_needed_update_flags() const
Returns required update flags of the solution to be used by PhysicsPostprocessor to output current so...
void boundary_face_values(const int, const dealii::Point< dim, real > &, const dealii::Tensor< 1, dim, real > &, const std::array< real, nstate > &, const std::array< dealii::Tensor< 1, dim, real >, nstate > &, std::array< real, nstate > &, std::array< dealii::Tensor< 1, dim, real >, nstate > &) const
Evaluates boundary values and gradients on the other side of the face.
virtual std::array< dealii::Tensor< 1, dim, real >, nstate > dissipative_flux(const std::array< real, nstate > &solution, const std::array< dealii::Tensor< 1, dim, real >, nstate > &solution_gradient, const std::array< real, nstate > &filtered_solution, const std::array< dealii::Tensor< 1, dim, real >, nstate > &filtered_solution_gradient, const dealii::types::global_dof_index cell_index) override
Dissipative (i.e. viscous) flux: .
std::vector< dealii::DataComponentInterpretation::DataComponentInterpretation > post_get_data_component_interpretation() const
Returns DataComponentInterpretation of the solution to be used by PhysicsPostprocessor to output curr...
~PhysicsModelFiltered()
Destructor.
const MPI_Comm mpi_communicator
MPI communicator.
const int n_model_equations
Number of model equations (i.e. those additional to the baseline physics)
std::array< dealii::Tensor< 1, dim, real >, nstate > convert_conservative_gradient_to_primitive_gradient(const std::array< real, nstate > &conservative_soln, const std::array< dealii::Tensor< 1, dim, real >, nstate > &conservative_soln_gradient) const
PhysicsModel(const Parameters::AllParameters *const parameters_input, Parameters::AllParameters::PartialDifferentialEquation baseline_physics_type, std::shared_ptr< ModelBase< dim, nspecies, nstate, real > > model_input, std::shared_ptr< ManufacturedSolutionFunction< dim, nspecies, real > > manufactured_solution_function, const bool has_nonzero_diffusion, const bool has_nonzero_physical_source)
Constructor.
std::array< real, nstate > convert_conservative_to_primitive(const std::array< real, nstate > &conservative_soln) const
Convert conservative variables to primitive variables.