[P]arallel [Hi]gh-order [Li]brary for [P]DEs  Latest
Parallel High-Order Library for PDEs through hp-adaptive Discontinuous Galerkin methods
mhd.h
1 #ifndef __MHD__
2 #define __MHD__
3 
4 #include <deal.II/base/tensor.h>
5 #include "physics.h"
6 #include "parameters/parameters_manufactured_solution.h"
7 
8 namespace PHiLiP {
9 namespace Physics {
10 
12 
76 template <int dim, int nstate, typename real>
77 class MHD : public PhysicsBase <dim, nstate, real>
78 {
79 protected:
80  // For overloading the virtual functions defined in PhysicsBase
89 public:
91  MHD(
92  const Parameters::AllParameters *const parameters_input,
93  const double gamma_gas,
94  const dealii::Tensor<2,3,double> input_diffusion_tensor = Parameters::ManufacturedSolutionParam::get_default_diffusion_tensor(),
96  const bool has_nonzero_diffusion = false,
97  const bool has_nonzero_physical_source = false)
98  : PhysicsBase<dim,nstate,real>(parameters_input, has_nonzero_diffusion, has_nonzero_physical_source, input_diffusion_tensor, manufactured_solution_function)
99  , gam(gamma_gas)
100  , gamm1(gam-1.0)
101  {
102  static_assert(nstate==8, "Physics::MHD() should be created with nstate=8");
103 
104  };
105 
107  const double gam;
109  const double gamm1;
110 
111  // double mach_inf_sqr = 1;
112 
113  //std::array<real,nstate> manufactured_solution (const dealii::Point<dim,double> &pos) const;
114 
116  std::array<dealii::Tensor<1,dim,real>,nstate> convective_flux (
117  const std::array<real,nstate> &conservative_soln) const;
118 
120  std::array<real,nstate> convective_normal_flux (const std::array<real,nstate> &conservative_soln, const dealii::Tensor<1,dim,real> &normal) const;
121 
123  dealii::Tensor<2,nstate,real> convective_flux_directional_jacobian (
124  const std::array<real,nstate> &conservative_soln,
125  const dealii::Tensor<1,dim,real> &normal) const;
126 
128  std::array<real,nstate> convective_eigenvalues (
129  const std::array<real,nstate> &/*conservative_soln*/,
130  const dealii::Tensor<1,dim,real> &/*normal*/) const;
131 
133  real max_convective_eigenvalue (const std::array<real,nstate> &soln) const;
134 
136  real max_viscous_eigenvalue (const std::array<real,nstate> &soln) const;
137 
139  std::array<dealii::Tensor<1,dim,real>,nstate> dissipative_flux (
140  const std::array<real,nstate> &conservative_soln,
141  const std::array<dealii::Tensor<1,dim,real>,nstate> &solution_gradient,
142  const dealii::types::global_dof_index cell_index) const;
143 
145  std::array<dealii::Tensor<1,dim,real>,nstate> dissipative_flux (
146  const std::array<real,nstate> &conservative_soln,
147  const std::array<dealii::Tensor<1,dim,real>,nstate> &solution_gradient) const;
148 
150  std::array<real,nstate> source_term (
151  const dealii::Point<dim,real> &pos,
152  const std::array<real,nstate> &conservative_soln,
153  const real current_time,
154  const dealii::types::global_dof_index cell_index) const;
155 
157  std::array<real,nstate> source_term (
158  const dealii::Point<dim,real> &pos,
159  const std::array<real,nstate> &conservative_soln,
160  const real current_time) const;
161 
166  std::array<real,nstate> convert_conservative_to_primitive ( const std::array<real,nstate> &conservative_soln ) const;
167 
172  std::array<real,nstate> convert_primitive_to_conservative ( const std::array<real,nstate> &primitive_soln ) const;
173 
175  real compute_pressure ( const std::array<real,nstate> &conservative_soln ) const;
176 
178  real compute_magnetic_energy (const std::array<real,nstate> &conservative_soln) const;
179 
181  real compute_pressure_from_enthalpy ( const std::array<real,nstate> &conservative_soln ) const;
182 
184  real compute_specific_enthalpy ( const std::array<real,nstate> &conservative_soln, const real pressure) const;
185 
187  real compute_sound ( const std::array<real,nstate> &conservative_soln ) const;
189  real compute_sound ( const real density, const real pressure ) const;
190 
192  dealii::Tensor<1,dim,real> compute_velocities ( const std::array<real,nstate> &conservative_soln ) const;
194  real compute_velocity_squared ( const dealii::Tensor<1,dim,real> &velocities ) const;
195 
197  dealii::Tensor<1,dim,real> extract_velocities_from_primitive ( const std::array<real,nstate> &primitive_soln ) const;
199  real compute_total_energy ( const std::array<real,nstate> &primitive_soln ) const;
200 
202 
207  real compute_entropy_measure ( const std::array<real,nstate> &conservative_soln ) const;
208 
210  real compute_mach_number ( const std::array<real,nstate> &conservative_soln ) const;
211 
213  real compute_dimensional_temperature ( const std::array<real,nstate> &primitive_soln ) const;
214 
216 
217  real compute_temperature ( const std::array<real,nstate> &primitive_soln ) const;
218 
220 
221  real compute_density_from_pressure_temperature ( const real pressure, const real temperature ) const;
222 
224 
225  real compute_temperature_from_density_pressure ( const real density, const real pressure ) const;
226 
228  std::array<real,nstate> compute_entropy_variables (
229  const std::array<real,nstate> &conservative_soln) const;
230 
233  const std::array<real,nstate> &entropy_var) const;
234 
236 
239  const std::array<real,nstate> &conservative_soln1,
240  const std::array<real,nstate> &convervative_soln2) const;
241 
243 
246  const std::array<real,nstate> &conservative_soln1,
247  const std::array<real,nstate> &convervative_soln2) const;
248 
250 
252  dealii::Tensor<1,dim,real> compute_mean_velocities(
253  const std::array<real,nstate> &conservative_soln1,
254  const std::array<real,nstate> &convervative_soln2) const;
255 
257 
260  const std::array<real,nstate> &conservative_soln1,
261  const std::array<real,nstate> &convervative_soln2) const;
262 
264  void boundary_face_values (
265  const int /*boundary_type*/,
266  const dealii::Point<dim, real> &/*pos*/,
267  const dealii::Tensor<1,dim,real> &/*normal*/,
268  const std::array<real,nstate> &/*soln_int*/,
269  const std::array<dealii::Tensor<1,dim,real>,nstate> &/*soln_grad_int*/,
270  std::array<real,nstate> &/*soln_bc*/,
271  std::array<dealii::Tensor<1,dim,real>,nstate> &/*soln_grad_bc*/) const;
272 
273 // void boundary_face_values (
274 // const int /*boundary_type*/,
275 // const dealii::Point<dim, real> &/*pos*/,
276 // const dealii::Tensor<1,dim,real> &/*normal*/,
277 // const std::array<real,nstate> &/*soln_int*/,
278 // const std::array<dealii::Tensor<1,dim,real>,nstate> &/*soln_grad_int*/,
279 // std::array<real,nstate> &/*soln_bc*/,
280 // std::array<dealii::Tensor<1,dim,real>,nstate> &/*soln_grad_bc*/) const;
281 //
282 // virtual dealii::Vector<double> post_compute_derived_quantities_vector (
283 // const dealii::Vector<double> &uh,
284 // const std::vector<dealii::Tensor<1,dim> > &duh,
285 // const std::vector<dealii::Tensor<2,dim> > &dduh,
286 // const dealii::Tensor<1,dim> &normals,
287 // const dealii::Point<dim> &evaluation_points) const;
288 // virtual std::vector<std::string> post_get_names () const;
289 // virtual std::vector<dealii::DataComponentInterpretation::DataComponentInterpretation> post_get_data_component_interpretation () const;
290 // virtual dealii::UpdateFlags post_get_needed_update_flags () const;
291 protected:
292 
293 
294 };
295 
296 } // Physics namespace
297 } // PHiLiP namespace
298 
299 #endif
300 
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.
Definition: mhd.cpp:261
real max_convective_eigenvalue(const std::array< real, nstate > &soln) const
Maximum convective eigenvalue.
Definition: mhd.cpp:441
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...
Definition: mhd.cpp:164
std::array< real, nstate > convert_primitive_to_conservative(const std::array< real, nstate > &primitive_soln) const
Definition: mhd.cpp:61
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.
Definition: mhd.cpp:339
const bool has_nonzero_diffusion
Flag to signal that diffusion term is non-zero.
Definition: physics.h:59
Base class from which Advection, Diffusion, ConvectionDiffusion, and Euler is derived.
Definition: physics.h:34
Manufactured solution used for grid studies to check convergence orders.
MHD(const Parameters::AllParameters *const parameters_input, const double gamma_gas, const dealii::Tensor< 2, 3, double > input_diffusion_tensor=Parameters::ManufacturedSolutionParam::get_default_diffusion_tensor(), std::shared_ptr< ManufacturedSolutionFunction< dim, real > > manufactured_solution_function=nullptr, const bool has_nonzero_diffusion=false, const bool has_nonzero_physical_source=false)
Constructor.
Definition: mhd.h:91
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...
Definition: mhd.cpp:171
real compute_pressure(const std::array< real, nstate > &conservative_soln) const
Evaluate pressure from conservative variables.
Definition: mhd.cpp:180
const double gamm1
Gamma-1.0 used often.
Definition: mhd.h:109
Files for the baseline physics.
Definition: ADTypes.hpp:10
real compute_magnetic_energy(const std::array< real, nstate > &conservative_soln) const
Evaluate Magnetic Energy.
Definition: mhd.cpp:248
std::array< real, nstate > convert_conservative_to_primitive(const std::array< real, nstate > &conservative_soln) const
Definition: mhd.cpp:42
Main parameter class that contains the various other sub-parameter classes.
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: .
Definition: mhd.cpp:377
static dealii::Tensor< 2, 3, double > get_default_diffusion_tensor()
gets the default diffusion tensor
real compute_entropy_measure(const std::array< real, nstate > &conservative_soln) const
Evaluate entropy from conservative variables.
Definition: mhd.cpp:123
real compute_velocity_squared(const dealii::Tensor< 1, dim, real > &velocities) const
Given the velocity vector , returns the dot-product .
Definition: mhd.cpp:89
dealii::Tensor< 1, dim, real > compute_velocities(const std::array< real, nstate > &conservative_soln) const
Evaluate velocities from conservative variables.
Definition: mhd.cpp:79
dealii::Tensor< 1, dim, real > extract_velocities_from_primitive(const std::array< real, nstate > &primitive_soln) const
Given primitive variables, returns velocities.
Definition: mhd.cpp:98
real compute_sound(const std::array< real, nstate > &conservative_soln) const
Evaluate speed of sound from conservative variables.
Definition: mhd.cpp:210
const bool has_nonzero_physical_source
Flag to signal that physical source term is non-zero.
Definition: physics.h:62
real max_viscous_eigenvalue(const std::array< real, nstate > &soln) const
Maximum viscous eigenvalue.
Definition: mhd.cpp:464
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.
Definition: mhd.cpp:495
real compute_mean_specific_energy(const std::array< real, nstate > &conservative_soln1, const std::array< real, nstate > &convervative_soln2) const
Mean specific energy given two sets of conservative solutions.
Definition: mhd.cpp:294
std::array< real, nstate > convective_eigenvalues(const std::array< real, nstate > &, const dealii::Tensor< 1, dim, real > &) const
Spectral radius of convective term Jacobian is &#39;c&#39;.
Definition: mhd.cpp:422
real compute_specific_enthalpy(const std::array< real, nstate > &conservative_soln, const real pressure) const
Evaluate pressure from conservative variables.
Definition: mhd.cpp:134
const double gam
Constant heat capacity ratio of air.
Definition: mhd.h:104
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.
Definition: mhd.cpp:471
real compute_temperature(const std::array< real, nstate > &primitive_soln) const
Given primitive variables, returns NON-DIMENSIONALIZED temperature using free-stream non-dimensionali...
Definition: mhd.cpp:155
real compute_total_energy(const std::array< real, nstate > &primitive_soln) const
Given primitive variables, returns total energy.
Definition: mhd.cpp:109
std::array< real, nstate > compute_entropy_variables(const std::array< real, nstate > &conservative_soln) const
Computes the entropy variables.
Definition: mhd.cpp:329
real compute_dimensional_temperature(const std::array< real, nstate > &primitive_soln) const
Given primitive variables, returns DIMENSIONALIZED temperature using the equation of state...
Definition: mhd.cpp:145
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.
Definition: mhd.cpp:279
Magnetohydrodynamics (MHD) equations. Derived from PhysicsBase.
Definition: mhd.h:77
std::shared_ptr< ManufacturedSolutionFunction< dim, real > > manufactured_solution_function
Manufactured solution function.
Definition: physics.h:71
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.
Definition: mhd.cpp:15
real compute_pressure_from_enthalpy(const std::array< real, nstate > &conservative_soln) const
Evaluate pressure from conservative variables.
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.
Definition: mhd.cpp:269
real compute_mach_number(const std::array< real, nstate > &conservative_soln) const
Given conservative variables, returns Mach number.
Definition: mhd.cpp:237
std::array< real, nstate > convective_normal_flux(const std::array< real, nstate > &conservative_soln, const dealii::Tensor< 1, dim, real > &normal) const
Convective flux: .
Definition: mhd.cpp:349
std::array< dealii::Tensor< 1, dim, real >, nstate > convective_flux(const std::array< real, nstate > &conservative_soln) const
Convective flux: .
Definition: mhd.cpp:303