4 #include <deal.II/base/tensor.h> 6 #include "parameters/all_parameters.h" 7 #include "parameters/parameters_manufactured_solution.h" 77 template <
int dim,
int nspecies,
int nstate,
typename real>
96 const double gamma_gas,
146 const std::array<real,nstate> &conservative_soln)
const override;
149 std::array<real,nstate>
convective_normal_flux (
const std::array<real,nstate> &conservative_soln,
const dealii::Tensor<1,dim,real> &normal)
const;
153 const std::array<real,nstate> &conservative_soln,
154 const dealii::Tensor<1,dim,real> &normal)
const;
158 const std::array<real,nstate> &,
159 const dealii::Tensor<1,dim,real> &)
const override;
167 const std::array<real,nstate> &soln,
168 const dealii::Tensor<1,dim,real> &normal)
const override;
175 const std::array<real,nstate> &conservative_soln,
176 const std::array<dealii::Tensor<1,dim,real>,nstate> &solution_gradient,
177 const dealii::types::global_dof_index cell_index)
const;
181 const std::array<real,nstate> &conservative_soln,
182 const std::array<dealii::Tensor<1,dim,real>,nstate> &solution_gradient)
const;
186 const dealii::Point<dim,real> &pos,
187 const std::array<real,nstate> &conservative_soln,
188 const real current_time,
189 const dealii::types::global_dof_index cell_index)
const;
193 const dealii::Point<dim,real> &pos,
194 const std::array<real,nstate> &conservative_soln,
195 const real current_time)
const;
199 const dealii::Point<dim,real> &pos)
const;
205 template<
typename real2>
213 template<
typename real2>
226 template<
typename real2>
227 std::array<dealii::Tensor<1,dim,real2>,nstate>
229 const std::array<real2,nstate> &conservative_soln,
230 const std::array<dealii::Tensor<1,dim,real2>,nstate> &conservative_soln_gradient)
const;
233 std::array<dealii::Tensor<1,dim,real>,nstate>
235 const std::array<real,nstate> &conservative_soln,
236 const std::array<dealii::Tensor<1,dim,real>,nstate> &conservative_soln_gradient)
const;
239 std::array<dealii::Tensor<1,dim,real>,nstate>
241 const std::array<real,nstate> &primitive_soln,
242 const std::array<dealii::Tensor<1,dim,real>,nstate> &primitive_soln_gradient)
const;
245 virtual real
compute_gamma (
const std::array<real,nstate> &conservative_soln )
const;
248 template<
typename real2>
251 real
compute_pressure (
const std::array<real,nstate> &conservative_soln )
const;
254 template<
typename real2>
255 real2
compute_entropy (
const real2 density,
const real2 pressure)
const;
261 template<
typename real2>
265 real
compute_entropy (
const std::array<real,nstate> &conservative_soln )
const;
271 real
compute_sound (
const std::array<real,nstate> &conservative_soln )
const;
273 real
compute_sound (
const real density,
const real pressure )
const;
276 template<
typename real2>
277 dealii::Tensor<1,dim,real2>
compute_velocities (
const std::array<real2,nstate> &conservative_soln )
const;
279 template<
typename real2>
283 template<
typename real2>
322 template<
typename real2>
339 const std::array<real,nstate> &conservative_soln1,
340 const std::array<real,nstate> &conservative_soln2)
const override;
346 const std::array<real,nstate> &conservative_soln)
const;
351 const std::array<real,nstate> &entropy_var)
const;
355 const std::array<real,nstate> &conservative_soln)
const;
361 const std::array<real,nstate> &conservative_soln1,
362 const std::array<real,nstate> &convervative_soln2)
const;
368 const std::array<real,nstate> &conservative_soln1,
369 const std::array<real,nstate> &convervative_soln2)
const;
375 const std::array<real,nstate> &conservative_soln1,
376 const std::array<real,nstate> &convervative_soln2)
const;
382 const std::array<real,nstate> &conservative_soln1,
383 const std::array<real,nstate> &convervative_soln2)
const;
388 const dealii::Point<dim, real> &,
389 const dealii::Tensor<1,dim,real> &,
390 const std::array<real,nstate> &,
391 const std::array<dealii::Tensor<1,dim,real>,nstate> &,
392 std::array<real,nstate> &,
393 std::array<dealii::Tensor<1,dim,real>,nstate> &)
const;
397 const dealii::Vector<double> &uh,
398 const std::vector<dealii::Tensor<1,dim> > &duh,
399 const std::vector<dealii::Tensor<2,dim> > &dduh,
400 const dealii::Tensor<1,dim> &normals,
401 const dealii::Point<dim> &evaluation_points)
const override;
404 virtual std::vector<std::string>
post_get_names ()
const override;
420 const dealii::Tensor<1,dim,real> &normal_int,
421 const std::array<real,nstate> &soln_int,
422 const std::array<dealii::Tensor<1,dim,real>,nstate> &soln_grad_int,
423 std::array<real,nstate> &soln_bc,
424 std::array<dealii::Tensor<1,dim,real>,nstate> &soln_grad_bc)
const;
428 const dealii::Tensor<1,dim,real> &normal_int,
429 const std::array<real,nstate> &soln_int,
430 const std::array<dealii::Tensor<1,dim,real>,nstate> &soln_grad_int,
431 std::array<real,nstate> &soln_bc,
432 std::array<dealii::Tensor<1,dim,real>,nstate> &soln_grad_bc)
const;
436 const dealii::Point<dim, real> &pos,
437 const dealii::Tensor<1,dim,real> &normal_int,
438 const std::array<real,nstate> &soln_int,
439 const std::array<dealii::Tensor<1,dim,real>,nstate> &soln_grad_int,
440 std::array<real,nstate> &soln_bc,
441 std::array<dealii::Tensor<1,dim,real>,nstate> &soln_grad_bc)
const;
446 const real total_inlet_pressure,
447 const real back_pressure,
448 const std::array<real,nstate> &soln_int,
449 std::array<real,nstate> &soln_bc)
const;
454 const real total_inlet_pressure,
455 const real total_inlet_temperature,
456 const dealii::Tensor<1,dim,real> &normal_int,
457 const std::array<real,nstate> &soln_int,
458 std::array<real,nstate> &soln_bc)
const;
463 const dealii::Tensor<1,dim,real> &normal_int,
464 const std::array<real,nstate> &soln_int,
465 std::array<real,nstate> &soln_bc)
const;
469 std::array<real,nstate> &soln_bc)
const;
473 const std::array<real,nstate> &soln_int,
474 std::array<real,nstate> &soln_bc,
475 std::array<dealii::Tensor<1,dim,real>,nstate> &soln_grad_bc)
const;
479 std::array<real,nstate> &soln_bc)
const;
483 std::array<real,nstate> &soln_bc)
const;
487 const dealii::Point<dim,real> &pos)
const;
491 const dealii::Point<dim,real> &pos)
const;
496 const std::array<real,nstate> &conservative_soln1,
497 const std::array<real,nstate> &conservative_soln2)
const;
501 const std::array<real,nstate> &primitive_soln)
const;
509 const std::array<real,nstate> &conservative_soln1,
510 const std::array<real,nstate> &conservative_soln2)
const;
514 const std::array<real,nstate> &conservative_soln1,
515 const std::array<real,nstate> &conservative_soln2)
const;
519 const std::array<real,nstate> &conservative_soln1,
520 const std::array<real,nstate> &conservative_soln2)
const;
virtual dealii::UpdateFlags post_get_needed_update_flags() const override
For post processing purposes, updates the required flags for dealii.
real compute_mean_density(const std::array< real, nstate > &conservative_soln1, const std::array< real, nstate > &convervative_soln2) const
Mean density given two sets of conservative solutions.
real compute_temperature_from_density_pressure(const real density, const real pressure) const
Given density and pressure, returns NON-DIMENSIONALIZED temperature using free-stream non-dimensional...
dealii::Tensor< 1, dim, double > velocities_inf
Non-dimensionalized Velocity vector at farfield.
std::array< dealii::Tensor< 1, dim, real >, nstate > dissipative_flux(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
Dissipative flux: 0.
const double angle_of_attack
Angle of attack.
std::array< real, nstate > convert_conservative_to_primitive(const std::array< real, nstate > &conservative_soln) const
Convert conservative to primitive (real2==real); required by base class.
void boundary_slip_wall(const dealii::Tensor< 1, dim, real > &normal_int, const std::array< real, nstate > &soln_int, const std::array< dealii::Tensor< 1, dim, real >, nstate > &soln_grad_int, std::array< real, nstate > &soln_bc, std::array< dealii::Tensor< 1, dim, real >, nstate > &soln_grad_bc) const
real compute_pressure_from_density_temperature(const real density, const real temperature) const
Given density and temperature, returns NON-DIMENSIONALIZED pressure using free-stream non-dimensional...
real max_convective_eigenvalue(const std::array< real, nstate > &soln) const override
Maximum convective eigenvalue.
std::array< real, nstate > convective_normal_flux(const std::array< real, nstate > &conservative_soln, const dealii::Tensor< 1, dim, real > &normal) const
Convective normal flux: .
const bool has_nonzero_diffusion
Flag to signal that diffusion term is non-zero.
const double mach_inf
Farfield Mach number.
std::array< dealii::Tensor< 1, dim, real >, nstate > convective_flux(const std::array< real, nstate > &conservative_soln) const override
Convective flux: .
dealii::Tensor< 1, dim, real2 > compute_velocities(const std::array< real2, nstate > &conservative_soln) const
Evaluate velocities from conservative variables.
Base class from which Advection, Diffusion, ConvectionDiffusion, and Euler is derived.
const two_point_num_flux_enum two_point_num_flux_type
Two point numerical flux type (for split form)
Manufactured solution used for grid studies to check convergence orders.
real max_viscous_eigenvalue(const std::array< real, nstate > &soln) const override
Maximum viscous eigenvalue.
real compute_specific_enthalpy(const std::array< real, nstate > &conservative_soln, const real pressure) const
Evaluate pressure from conservative variables.
std::array< real, nstate > compute_kinetic_energy_variables(const std::array< real, nstate > &conservative_soln) const
Computes the kinetic energy variables.
Files for the baseline physics.
const bool has_nonzero_physical_source
Flag to signal that physical source term is non-zero.
virtual void boundary_manufactured_solution(const dealii::Point< dim, real > &pos, const dealii::Tensor< 1, dim, real > &normal_int, const std::array< real, nstate > &soln_int, const std::array< dealii::Tensor< 1, dim, real >, nstate > &soln_grad_int, std::array< real, nstate > &soln_bc, std::array< dealii::Tensor< 1, dim, real >, nstate > &soln_grad_bc) const
Evaluate the manufactured solution boundary conditions.
real compute_total_energy(const std::array< real, nstate > &primitive_soln) const
Given primitive variables, returns total energy.
real compute_sound(const std::array< real, nstate > &conservative_soln) const
Evaluate speed of sound from conservative variables.
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
Boundary condition handler.
std::array< real, nstate > convert_primitive_to_conservative(const std::array< real, nstate > &primitive_soln) const
std::array< dealii::Tensor< 1, dim, real >, nstate > convective_numerical_split_flux_ismail_roe(const std::array< real, nstate > &conservative_soln1, const std::array< real, nstate > &conservative_soln2) const
std::array< real2, nstate > convert_conservative_to_primitive_templated(const std::array< real2, nstate > &conservative_soln) const
real compute_density_from_pressure_temperature(const real pressure, const real temperature) const
Given pressure and temperature, returns NON-DIMENSIONALIZED density using free-stream non-dimensional...
std::array< real, nstate > compute_ismail_roe_parameter_vector_from_primitive(const std::array< real, nstate > &primitive_soln) const
Compute Ismail-Roe parameter vector from primitive solution.
std::shared_ptr< ManufacturedSolutionFunction< dim, nspecies, real > > manufactured_solution_function
Manufactured solution function.
const double pressure_inf
Non-dimensionalized pressure* at infinity.
void boundary_astrophysical_inflow(std::array< real, nstate > &soln_bc) const
Boundary conditions based on user-defined values.
void boundary_riemann(const dealii::Tensor< 1, dim, real > &normal_int, const std::array< real, nstate > &soln_int, std::array< real, nstate > &soln_bc) const
bool check_positive_quantity(real2 &quantity, const std::string qty_name) const
Check positive quantity and modify it according to handle_non_physical_result()
Main parameter class that contains the various other sub-parameter classes.
real compute_entropy_measure(const std::array< real, nstate > &conservative_soln) const
Evaluate entropy from conservative variables.
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 is zero or depends on manufactured solution.
real compute_mean_specific_total_energy(const std::array< real, nstate > &conservative_soln1, const std::array< real, nstate > &convervative_soln2) const
Mean specific total energy given two sets of conservative solutions.
real2 compute_pressure_templated(const std::array< real2, nstate > &conservative_soln) const
Evaluate pressure from conservative variables.
dealii::Tensor< 1, dim, real2 > extract_velocities_from_primitive(const std::array< real2, nstate > &primitive_soln) const
Given primitive variables, returns velocities.
std::array< dealii::Tensor< 1, dim, real >, nstate > convective_numerical_split_flux_chandrashekar(const std::array< real, nstate > &conservative_soln1, const std::array< real, nstate > &conservative_soln2) const
Chandrashekar entropy conserving flux.
virtual std::vector< std::string > post_get_names() const override
For post processing purposes, sets the base names (with no prefix or suffix) of the computed quantiti...
TwoPointNumericalFlux
Two point numerical flux type for split form.
virtual real compute_gamma(const std::array< real, nstate > &conservative_soln) const
For Euler it returns this->gam.
real compute_mean_pressure(const std::array< real, nstate > &conservative_soln1, const std::array< real, nstate > &convervative_soln2) const
Mean pressure given two sets of conservative solutions.
const double entropy_inf
Entropy measure at infinity.
std::array< real, nstate > convective_source_term(const dealii::Point< dim, real > &pos) const
Convective flux contribution to the source term.
void boundary_custom(std::array< real, nstate > &soln_bc) const
Custom boundary conditions for the left boundary of the astrophysical mach jet case where it is not h...
real compute_pressure(const std::array< real, nstate > &conservative_soln) const
Compute pressure from conservative solution.
const double side_slip_angle
Sideslip angle.
const double gamm1
Constant heat capacity ratio (Gamma-1.0) used often.
std::array< real, nstate > convective_eigenvalues(const std::array< real, nstate > &, const dealii::Tensor< 1, dim, real > &) const override
Spectral radius of convective term Jacobian is 'c'.
void boundary_pressure_outflow(const real total_inlet_pressure, const real back_pressure, const std::array< real, nstate > &soln_int, std::array< real, nstate > &soln_bc) const
real compute_kinetic_energy_from_conservative_solution(const std::array< real, nstate > &conservative_soln) const
Given conservative variables, returns kinetic energy.
Euler equations. Derived from PhysicsBase.
double temperature_inf
Non-dimensionalized temperature* at infinity. Should equal 1/density*(inf)
std::array< dealii::Tensor< 1, dim, real >, nstate > get_manufactured_solution_gradient(const dealii::Point< dim, real > &pos) const
Get manufactured solution gradient.
real2 compute_temperature(const std::array< real2, nstate > &primitive_soln) const
Given primitive variables, returns NON-DIMENSIONALIZED temperature using free-stream non-dimensionali...
void boundary_inflow(const real total_inlet_pressure, const real total_inlet_temperature, const dealii::Tensor< 1, dim, real > &normal_int, const std::array< real, nstate > &soln_int, std::array< real, nstate > &soln_bc) const
std::array< real, nstate > compute_conservative_variables_from_entropy_variables(const std::array< real, nstate > &entropy_var) const
virtual std::vector< dealii::DataComponentInterpretation::DataComponentInterpretation > post_get_data_component_interpretation() const override
For post processing purposes, sets the interpretation of each computed quantity as either scalar or v...
std::array< dealii::Tensor< 1, dim, real >, nstate > convective_numerical_split_flux_kennedy_gruber(const std::array< real, nstate > &conservative_soln1, const std::array< real, nstate > &conservative_soln2) const
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
real compute_incompressible_kinetic_energy_from_primitive_solution(const std::array< real, nstate > &primitive_soln) const
Given primitive variables, returns incompressible kinetic energy.
const double sound_inf
Non-dimensionalized sound* at infinity.
std::array< real, nstate > get_manufactured_solution_value(const dealii::Point< dim, real > &pos) const
Get manufactured solution value.
real compute_ismail_roe_logarithmic_mean(const real val1, const real val2) const
Compute Ismail-Roe logarithmic mean.
const double ref_length
Reference length.
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 override
Evaluates convective flux based on the chosen split form.
void boundary_p0_extrapolation(const std::array< real, nstate > &soln_int, std::array< real, nstate > &soln_bc, std::array< dealii::Tensor< 1, dim, real >, nstate > &soln_grad_bc) const
p0 extrapolation at the boundary
double dynamic_pressure_inf
Non-dimensionalized dynamic pressure* at infinity.
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)
real compute_kinetic_energy_from_primitive_solution(const std::array< real, nstate > &primitive_soln) const
Given primitive variables, returns kinetic energy.
Euler(const Parameters::AllParameters *const parameters_input, const double ref_length, const double gamma_gas, const double mach_inf, const double angle_of_attack, const double side_slip_angle, std::shared_ptr< ManufacturedSolutionFunction< dim, nspecies, real > > manufactured_solution_function=nullptr, const two_point_num_flux_enum two_point_num_flux_type=two_point_num_flux_enum::KG, const bool has_nonzero_diffusion=false, const bool has_nonzero_physical_source=false)
Constructor.
real compute_numerical_entropy_function(const std::array< real, nstate > &conservative_soln) const
Compute numerical entropy function -rho s.
real2 compute_entropy_templated(const std::array< real2, nstate > &conservative_soln) const
Evaluate physical entropy = log(p ^{-}) from pressure and density.
std::array< dealii::Tensor< 1, dim, real2 >, nstate > convert_conservative_gradient_to_primitive_gradient_templated(const std::array< real2, nstate > &conservative_soln, const std::array< dealii::Tensor< 1, dim, real2 >, nstate > &conservative_soln_gradient) const
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
dealii::Tensor< 1, dim, real > compute_mean_velocities(const std::array< real, nstate > &conservative_soln1, const std::array< real, nstate > &convervative_soln2) const
Mean velocities given two sets of conservative solutions.
real2 compute_velocity_squared(const dealii::Tensor< 1, dim, real2 > &velocities) const
Given the velocity vector , returns the dot-product .
virtual 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 override
For post processing purposes, computes all the quantities we write to the VTK files.
const double gam
Constant heat capacity ratio of fluid.
dealii::Tensor< 2, nstate, real > convective_flux_directional_jacobian(const std::array< real, nstate > &conservative_soln, const dealii::Tensor< 1, dim, real > &normal) const
Convective flux Jacobian: .
std::array< dealii::Tensor< 1, dim, real >, nstate > convective_numerical_split_flux_ranocha(const std::array< real, nstate > &conservative_soln1, const std::array< real, nstate > &conservative_soln2) const
Ranocha pressure equilibrium preserving, entropy and energy conserving flux.
void boundary_farfield(std::array< real, nstate > &soln_bc) const
Simple farfield boundary conditions based on freestream values.
const double mach_inf_sqr
real compute_incompressible_kinetic_energy_from_conservative_solution(const std::array< real, nstate > &conservative_soln) const
Given conservative variables, returns incompressible kinetic energy.
void boundary_wall(const dealii::Tensor< 1, dim, real > &normal_int, const std::array< real, nstate > &soln_int, const std::array< dealii::Tensor< 1, dim, real >, nstate > &soln_grad_int, std::array< real, nstate > &soln_bc, std::array< dealii::Tensor< 1, dim, real >, nstate > &soln_grad_bc) const
Wall boundary condition.
std::array< real, nstate > compute_entropy_variables(const std::array< real, nstate > &conservative_soln) const
real2 compute_entropy(const real2 density, const real2 pressure) const
Evaluate physical entropy = log(p ^{-}) from pressure and density.
real compute_mach_number(const std::array< real, nstate > &conservative_soln) const
Given conservative variables, returns Mach number.