4 #include <deal.II/base/tensor.h> 5 #include <deal.II/numerics/data_component_interpretation.h> 6 #include <deal.II/fe/fe_update_flags.h> 7 #include <deal.II/base/types.h> 8 #include <deal.II/base/conditional_ostream.h> 10 #include "parameters/all_parameters.h" 11 #include "parameters/parameters_manufactured_solution.h" 12 #include "physics/manufactured_solution.h" 33 template <
int dim,
int nspecies,
int nstate,
typename real>
43 const bool has_nonzero_diffusion_input,
44 const bool has_nonzero_physical_source_input,
51 const bool has_nonzero_diffusion_input,
52 const bool has_nonzero_physical_source_input,
80 virtual real
compute_pressure (
const std::array<real,nstate> &conservative_soln )
const;
83 virtual real
compute_entropy (
const std::array<real,nstate> &conservative_soln )
const;
86 virtual real
compute_gamma (
const std::array<real,nstate> &conservative_soln )
const;
92 virtual std::array<dealii::Tensor<1,dim,real>,nstate>
94 const std::array<real,nstate> &conservative_soln,
95 const std::array<dealii::Tensor<1,dim,real>,nstate> &conservative_soln_gradient)
const = 0;
98 virtual std::array<dealii::Tensor<1,dim,real>,nstate>
100 const std::array<real,nstate> &primitive_soln,
101 const std::array<dealii::Tensor<1,dim,real>,nstate> &primitive_soln_gradient)
const = 0;
104 virtual std::array<dealii::Tensor<1,dim,real>,nstate>
convective_flux (
105 const std::array<real,nstate> &solution)
const = 0;
109 const std::array<real,nstate> &conservative_soln1,
110 const std::array<real,nstate> &conservative_soln2)
const;
114 const std::array<real,nstate> &conservative_soln)
const = 0;
118 const std::array<real,nstate> &entropy_var)
const = 0;
124 const std::array<real,nstate> &,
125 const dealii::Tensor<1,dim,real> &)
const = 0;
132 const std::array<real,nstate> &soln,
133 const dealii::Tensor<1,dim,real> &normal)
const;
145 const std::array<real,nstate> &solution,
146 const std::array<dealii::Tensor<1,dim,real>,nstate> &solution_gradient,
147 const std::array<real,nstate> &filtered_solution,
148 const std::array<dealii::Tensor<1,dim,real>,nstate> &filtered_solution_gradient,
149 const bool on_boundary,
150 const dealii::types::global_dof_index cell_index,
151 const dealii::Tensor<1,dim,real> &normal,
152 const int boundary_type);
156 const std::array<real,nstate> &solution,
157 const std::array<dealii::Tensor<1,dim,real>,nstate> &solution_gradient,
158 const std::array<real,nstate> &filtered_solution,
159 const std::array<dealii::Tensor<1,dim,real>,nstate> &filtered_solution_gradient,
160 const dealii::types::global_dof_index cell_index);
164 const std::array<real,nstate> &solution,
165 const std::array<dealii::Tensor<1,dim,real>,nstate> &solution_gradient,
166 const dealii::types::global_dof_index cell_index)
const = 0;
177 const dealii::Point<dim,real> &pos,
178 const std::array<real,nstate> &solution,
179 const real current_time,
180 const dealii::types::global_dof_index cell_index)
const = 0;
184 const dealii::Point<dim,real> &pos,
185 const std::array<real,nstate> &solution,
186 const std::array<dealii::Tensor<1,dim,real>,nstate> &solution_gradient,
187 const dealii::types::global_dof_index cell_index)
const;
191 const real viscosity_coefficient,
192 const dealii::Point<dim,real> &pos,
193 const std::array<real,nstate> &solution)
const;
198 const dealii::Point<dim, real> &,
199 const dealii::Tensor<1,dim,real> &,
200 const std::array<real,nstate> &,
201 const std::array<dealii::Tensor<1,dim,real>,nstate> &,
202 const std::array<real,nstate> &,
203 const std::array<dealii::Tensor<1,dim,real>,nstate> &,
204 std::array<real,nstate> &,
205 std::array<dealii::Tensor<1,dim,real>,nstate> &)
const;
210 const dealii::Point<dim, real> &,
211 const dealii::Tensor<1,dim,real> &,
212 const std::array<real,nstate> &,
213 const std::array<dealii::Tensor<1,dim,real>,nstate> &,
214 const std::array<real,nstate> &,
215 const std::array<dealii::Tensor<1,dim,real>,nstate> &,
216 std::array<real,nstate> &,
217 std::array<dealii::Tensor<1,dim,real>,nstate> &)
const;
222 const dealii::Point<dim, real> &,
223 const dealii::Tensor<1,dim,real> &,
224 const std::array<real,nstate> &,
225 const std::array<dealii::Tensor<1,dim,real>,nstate> &,
226 std::array<real,nstate> &,
227 std::array<dealii::Tensor<1,dim,real>,nstate> &)
const = 0;
233 const dealii::Vector<double> &uh,
234 const std::vector<dealii::Tensor<1,dim> > &,
235 const std::vector<dealii::Tensor<2,dim> > &,
236 const dealii::Tensor<1,dim> &,
237 const dealii::Point<dim> &)
const;
244 const dealii::Tensor<1,dim> &,
245 const dealii::Tensor<2,dim> &,
246 const dealii::Tensor<1,dim> &,
247 const dealii::Point<dim> &)
const;
272 template<
typename real2>
const Parameters::AllParameters *const all_parameters
Pointer to parameters object.
virtual std::array< real, nstate > physical_source_term(const dealii::Point< dim, real > &pos, const std::array< real, nstate > &solution, const std::array< dealii::Tensor< 1, dim, real >, nstate > &solution_gradient, const dealii::types::global_dof_index cell_index) const
Physical source term that does require differentiation.
real2 handle_non_physical_result(const std::string message="") const
Function to handle nonphysical results.
const bool has_nonzero_diffusion
Flag to signal that diffusion term is non-zero.
virtual dealii::Vector< double > post_compute_derived_quantities_scalar(const double &uh, const dealii::Tensor< 1, dim > &, const dealii::Tensor< 2, dim > &, const dealii::Tensor< 1, dim > &, const dealii::Point< dim > &) const
Returns current scalar solution to be used by PhysicsPostprocessor to output current solution...
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)
Dissipative fluxes dot normal vector.
Base class from which Advection, Diffusion, ConvectionDiffusion, and Euler is derived.
Manufactured solution used for grid studies to check convergence orders.
virtual std::array< dealii::Tensor< 1, dim, real >, nstate > convective_flux(const std::array< real, nstate > &solution) const =0
Convective fluxes that will be differentiated once in space.
virtual real compute_pressure(const std::array< real, nstate > &conservative_soln) const
Compute pressure from conservative solution.
virtual dealii::Vector< double > post_compute_derived_quantities_vector(const dealii::Vector< double > &uh, const std::vector< dealii::Tensor< 1, dim > > &, const std::vector< dealii::Tensor< 2, dim > > &, const dealii::Tensor< 1, dim > &, const dealii::Point< dim > &) const
Returns current vector solution to be used by PhysicsPostprocessor to output current solution...
PhysicsBase(const Parameters::AllParameters *const parameters_input, const bool has_nonzero_diffusion_input, const bool has_nonzero_physical_source_input, const dealii::Tensor< 2, 3, double > input_diffusion_tensor=Parameters::ManufacturedSolutionParam::get_default_diffusion_tensor(), std::shared_ptr< ManufacturedSolutionFunction< dim, nspecies, real > > manufactured_solution_function_input=nullptr)
Default constructor that will set the constants.
Files for the baseline physics.
virtual std::array< real, nstate > convective_eigenvalues(const std::array< real, nstate > &, const dealii::Tensor< 1, dim, real > &) const =0
Spectral radius of convective term Jacobian.
const bool has_nonzero_physical_source
Flag to signal that physical source term is non-zero.
virtual std::array< real, nstate > compute_kinetic_energy_variables(const std::array< real, nstate > &conservative_soln) const
Compute kinetic energy variables from conservative solution.
virtual real compute_entropy(const std::array< real, nstate > &conservative_soln) const
Compute entropy from conservative solution.
virtual std::array< real, nstate > source_term(const dealii::Point< dim, real > &pos, const std::array< real, nstate > &solution, const real current_time, const dealii::types::global_dof_index cell_index) const =0
Artificial dissipative fluxes that will be differentiated ONCE in space.
std::shared_ptr< ManufacturedSolutionFunction< dim, nspecies, real > > manufactured_solution_function
Manufactured solution function.
Main parameter class that contains the various other sub-parameter classes.
virtual 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 =0
const double BIG_NUMBER
BIG_NUMBER which is returned in place of NaN according to handle_non_physical_result() ...
NonPhysicalBehaviorEnum
Enum of nonphysical behavior.
virtual std::array< real, nstate > convert_conservative_to_primitive(const std::array< real, nstate > &conservative_soln) const =0
Convert conservative variables to primitive variables.
virtual std::array< real, nstate > compute_entropy_variables(const std::array< real, nstate > &conservative_soln) const =0
Computes the entropy variables.
static dealii::Tensor< 2, 3, double > get_default_diffusion_tensor()
gets the default diffusion tensor
virtual void boundary_face_values_viscous_flux(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 > &, 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 for the viscous flux...
virtual real compute_gamma(const std::array< real, nstate > &conservative_soln) const
Compute gamma from conservative solution.
virtual real max_convective_eigenvalue(const std::array< real, nstate > &soln) const =0
Maximum convective eigenvalue.
const NonPhysicalBehaviorEnum non_physical_behavior_type
Determines type of nonphysical behavior.
virtual dealii::UpdateFlags post_get_needed_update_flags() const
Returns required update flags of the solution to be used by PhysicsPostprocessor to output current so...
virtual std::array< real, nstate > compute_conservative_variables_from_entropy_variables(const std::array< real, nstate > &entropy_var) const =0
Computes the conservative variables from the entropy variables.
virtual 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 =0
virtual 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 > &, 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 for the convective flux...
virtual std::array< real, nstate > artificial_source_term(const real viscosity_coefficient, const dealii::Point< dim, real > &pos, const std::array< real, nstate > &solution) const
Artificial source term that does not require differentiation stemming from artificial dissipation...
dealii::ConditionalOStream pcout
ConditionalOStream.
virtual std::vector< dealii::DataComponentInterpretation::DataComponentInterpretation > post_get_data_component_interpretation() const
Returns DataComponentInterpretation of the solution to be used by PhysicsPostprocessor to output curr...
virtual std::array< real, nstate > convert_primitive_to_conservative(const std::array< real, nstate > &primitive_soln) const =0
Convert primitive solution to conservative solution.
virtual real max_convective_normal_eigenvalue(const std::array< real, nstate > &soln, const dealii::Tensor< 1, dim, real > &normal) const
Maximum convective normal eigenvalue (used in Lax-Friedrichs)
virtual ~PhysicsBase()=default
Virtual destructor required for abstract classes.
virtual std::vector< std::string > post_get_names() const
Returns names of the solution to be used by PhysicsPostprocessor to output current solution...
dealii::Tensor< 2, dim, double > diffusion_tensor
Anisotropic diffusion matrix.
virtual 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.
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)
Dissipative fluxes that will be differentiated ONCE in space.
virtual real max_viscous_eigenvalue(const std::array< real, nstate > &soln) const =0
Maximum viscous eigenvalue.