[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 nspecies, int nstate, typename real>
77 class MHD : public PhysicsBase <dim, nspecies, nstate, real>
78 {
79 protected:
80  // For overloading the virtual functions defined in PhysicsBase
90 public:
92  MHD(
93  const Parameters::AllParameters *const parameters_input,
94  const double gamma_gas,
95  const dealii::Tensor<2,3,double> input_diffusion_tensor = Parameters::ManufacturedSolutionParam::get_default_diffusion_tensor(),
97  const bool has_nonzero_diffusion = false,
98  const bool has_nonzero_physical_source = false)
99  : PhysicsBase<dim,nspecies,nstate,real>(parameters_input, has_nonzero_diffusion, has_nonzero_physical_source, input_diffusion_tensor, manufactured_solution_function)
100  , gam(gamma_gas)
101  , gamm1(gam-1.0)
102  {
103  static_assert(nstate==8, "Physics::MHD() should be created with nstate=8");
104 
105  };
106 
108  const double gam;
110  const double gamm1;
111 
112  // double mach_inf_sqr = 1;
113 
114  //std::array<real,nstate> manufactured_solution (const dealii::Point<dim,double> &pos) const;
115 
117  std::array<dealii::Tensor<1,dim,real>,nstate> convective_flux (
118  const std::array<real,nstate> &conservative_soln) const;
119 
121  std::array<real,nstate> convective_normal_flux (const std::array<real,nstate> &conservative_soln, const dealii::Tensor<1,dim,real> &normal) const;
122 
124  dealii::Tensor<2,nstate,real> convective_flux_directional_jacobian (
125  const std::array<real,nstate> &conservative_soln,
126  const dealii::Tensor<1,dim,real> &normal) const;
127 
129  std::array<real,nstate> convective_eigenvalues (
130  const std::array<real,nstate> &/*conservative_soln*/,
131  const dealii::Tensor<1,dim,real> &/*normal*/) const;
132 
134  real max_convective_eigenvalue (const std::array<real,nstate> &soln) const;
135 
137  real max_viscous_eigenvalue (const std::array<real,nstate> &soln) const;
138 
140  std::array<dealii::Tensor<1,dim,real>,nstate> dissipative_flux (
141  const std::array<real,nstate> &conservative_soln,
142  const std::array<dealii::Tensor<1,dim,real>,nstate> &solution_gradient,
143  const dealii::types::global_dof_index cell_index) const;
144 
146  std::array<dealii::Tensor<1,dim,real>,nstate> dissipative_flux (
147  const std::array<real,nstate> &conservative_soln,
148  const std::array<dealii::Tensor<1,dim,real>,nstate> &solution_gradient) const;
149 
151  std::array<real,nstate> source_term (
152  const dealii::Point<dim,real> &pos,
153  const std::array<real,nstate> &conservative_soln,
154  const real current_time,
155  const dealii::types::global_dof_index cell_index) const;
156 
158  std::array<real,nstate> source_term (
159  const dealii::Point<dim,real> &pos,
160  const std::array<real,nstate> &conservative_soln,
161  const real current_time) const;
162 
167  std::array<real,nstate> convert_conservative_to_primitive ( const std::array<real,nstate> &conservative_soln ) const;
168 
173  std::array<real,nstate> convert_primitive_to_conservative ( const std::array<real,nstate> &primitive_soln ) const;
174 
176  std::array<dealii::Tensor<1,dim,real>,nstate>
178  const std::array<real,nstate> &conservative_soln,
179  const std::array<dealii::Tensor<1,dim,real>,nstate> &conservative_soln_gradient) const;
180 
182  std::array<dealii::Tensor<1,dim,real>,nstate>
184  const std::array<real,nstate> &primitive_soln,
185  const std::array<dealii::Tensor<1,dim,real>,nstate> &primitive_soln_gradient) const;
186 
188  real compute_pressure ( const std::array<real,nstate> &conservative_soln ) const;
189 
191  real compute_magnetic_energy (const std::array<real,nstate> &conservative_soln) const;
192 
194  real compute_pressure_from_enthalpy ( const std::array<real,nstate> &conservative_soln ) const;
195 
197  real compute_specific_enthalpy ( const std::array<real,nstate> &conservative_soln, const real pressure) const;
198 
200  real compute_sound ( const std::array<real,nstate> &conservative_soln ) const;
202  real compute_sound ( const real density, const real pressure ) const;
203 
205  dealii::Tensor<1,dim,real> compute_velocities ( const std::array<real,nstate> &conservative_soln ) const;
207  real compute_velocity_squared ( const dealii::Tensor<1,dim,real> &velocities ) const;
208 
210  dealii::Tensor<1,dim,real> extract_velocities_from_primitive ( const std::array<real,nstate> &primitive_soln ) const;
212  real compute_total_energy ( const std::array<real,nstate> &primitive_soln ) const;
213 
215 
220  real compute_entropy_measure ( const std::array<real,nstate> &conservative_soln ) const;
221 
223  real compute_mach_number ( const std::array<real,nstate> &conservative_soln ) const;
224 
226  real compute_dimensional_temperature ( const std::array<real,nstate> &primitive_soln ) const;
227 
229 
230  real compute_temperature ( const std::array<real,nstate> &primitive_soln ) const;
231 
233 
234  real compute_density_from_pressure_temperature ( const real pressure, const real temperature ) const;
235 
237 
238  real compute_temperature_from_density_pressure ( const real density, const real pressure ) const;
239 
241  std::array<real,nstate> compute_entropy_variables (
242  const std::array<real,nstate> &conservative_soln) const;
243 
246  const std::array<real,nstate> &entropy_var) const;
247 
249 
252  const std::array<real,nstate> &conservative_soln1,
253  const std::array<real,nstate> &convervative_soln2) const;
254 
256 
259  const std::array<real,nstate> &conservative_soln1,
260  const std::array<real,nstate> &convervative_soln2) const;
261 
263 
265  dealii::Tensor<1,dim,real> compute_mean_velocities(
266  const std::array<real,nstate> &conservative_soln1,
267  const std::array<real,nstate> &convervative_soln2) const;
268 
270 
273  const std::array<real,nstate> &conservative_soln1,
274  const std::array<real,nstate> &convervative_soln2) const;
275 
277  void boundary_face_values (
278  const int /*boundary_type*/,
279  const dealii::Point<dim, real> &/*pos*/,
280  const dealii::Tensor<1,dim,real> &/*normal*/,
281  const std::array<real,nstate> &/*soln_int*/,
282  const std::array<dealii::Tensor<1,dim,real>,nstate> &/*soln_grad_int*/,
283  std::array<real,nstate> &/*soln_bc*/,
284  std::array<dealii::Tensor<1,dim,real>,nstate> &/*soln_grad_bc*/) const;
285 
286 // void boundary_face_values (
287 // const int /*boundary_type*/,
288 // const dealii::Point<dim, real> &/*pos*/,
289 // const dealii::Tensor<1,dim,real> &/*normal*/,
290 // const std::array<real,nstate> &/*soln_int*/,
291 // const std::array<dealii::Tensor<1,dim,real>,nstate> &/*soln_grad_int*/,
292 // std::array<real,nstate> &/*soln_bc*/,
293 // std::array<dealii::Tensor<1,dim,real>,nstate> &/*soln_grad_bc*/) const;
294 //
295 // virtual dealii::Vector<double> post_compute_derived_quantities_vector (
296 // const dealii::Vector<double> &uh,
297 // const std::vector<dealii::Tensor<1,dim> > &duh,
298 // const std::vector<dealii::Tensor<2,dim> > &dduh,
299 // const dealii::Tensor<1,dim> &normals,
300 // const dealii::Point<dim> &evaluation_points) const;
301 // virtual std::vector<std::string> post_get_names () const;
302 // virtual std::vector<dealii::DataComponentInterpretation::DataComponentInterpretation> post_get_data_component_interpretation () const;
303 // virtual dealii::UpdateFlags post_get_needed_update_flags () const;
304 protected:
305 
306 
307 };
308 
309 } // Physics namespace
310 } // PHiLiP namespace
311 
312 #endif
313 
dealii::Tensor< 1, dim, real > compute_velocities(const std::array< real, nstate > &conservative_soln) const
Evaluate velocities from conservative variables.
Definition: mhd.cpp:100
std::array< real, nstate > convert_conservative_to_primitive(const std::array< real, nstate > &conservative_soln) const
Definition: mhd.cpp:42
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:192
real compute_velocity_squared(const dealii::Tensor< 1, dim, real > &velocities) const
Given the velocity vector , returns the dot-product .
Definition: mhd.cpp:110
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
std::array< real, nstate > compute_entropy_variables(const std::array< real, nstate > &conservative_soln) const
Computes the entropy variables.
Definition: mhd.cpp:350
Manufactured solution used for grid studies to check convergence orders.
Files for the baseline physics.
Definition: ADTypes.hpp:10
const bool has_nonzero_physical_source
Flag to signal that physical source term is non-zero.
Definition: physics.h:62
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:300
std::shared_ptr< ManufacturedSolutionFunction< dim, nspecies, real > > manufactured_solution_function
Manufactured solution function.
Definition: physics.h:71
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:176
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:282
Main parameter class that contains the various other sub-parameter classes.
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
Definition: mhd.cpp:91
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:290
real max_viscous_eigenvalue(const std::array< real, nstate > &soln) const
Maximum viscous eigenvalue.
Definition: mhd.cpp:485
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
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, nspecies, real > > manufactured_solution_function=nullptr, const bool has_nonzero_diffusion=false, const bool has_nonzero_physical_source=false)
Constructor.
Definition: mhd.h:92
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:516
static dealii::Tensor< 2, 3, double > get_default_diffusion_tensor()
gets the default diffusion tensor
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:166
const double gamm1
Gamma-1.0 used often.
Definition: mhd.h:110
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:360
real compute_pressure_from_enthalpy(const std::array< real, nstate > &conservative_soln) const
Evaluate pressure from conservative variables.
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:398
real compute_magnetic_energy(const std::array< real, nstate > &conservative_soln) const
Evaluate Magnetic Energy.
Definition: mhd.cpp:269
std::array< dealii::Tensor< 1, dim, real >, nstate > convective_flux(const std::array< real, nstate > &conservative_soln) const
Convective flux: .
Definition: mhd.cpp:324
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:443
real max_convective_eigenvalue(const std::array< real, nstate > &soln) const
Maximum convective eigenvalue.
Definition: mhd.cpp:462
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:370
real compute_pressure(const std::array< real, nstate > &conservative_soln) const
Evaluate pressure from conservative variables.
Definition: mhd.cpp:201
real compute_specific_enthalpy(const std::array< real, nstate > &conservative_soln, const real pressure) const
Evaluate pressure from conservative variables.
Definition: mhd.cpp:155
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:315
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:492
real compute_total_energy(const std::array< real, nstate > &primitive_soln) const
Given primitive variables, returns total energy.
Definition: mhd.cpp:130
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:119
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
Definition: mhd.cpp:79
Magnetohydrodynamics (MHD) equations. Derived from PhysicsBase.
Definition: mhd.h:77
const double gam
Constant heat capacity ratio of air.
Definition: mhd.h:105
std::array< real, nstate > convert_primitive_to_conservative(const std::array< real, nstate > &primitive_soln) const
Definition: mhd.cpp:61
real compute_mach_number(const std::array< real, nstate > &conservative_soln) const
Given conservative variables, returns Mach number.
Definition: mhd.cpp:258
real compute_entropy_measure(const std::array< real, nstate > &conservative_soln) const
Evaluate entropy from conservative variables.
Definition: mhd.cpp:144
real compute_sound(const std::array< real, nstate > &conservative_soln) const
Evaluate speed of sound from conservative variables.
Definition: mhd.cpp:231
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:185