KratosMultiphysics
KRATOS Multiphysics (Kratos) is a framework for building parallel, multi-disciplinary simulation software, aiming at modularity, extensibility, and high performance. Kratos is written in C++, and counts with an extensive Python interface.
shock_capturing_physics_based_process.h
Go to the documentation of this file.
1 // | / |
2 // ' / __| _` | __| _ \ __|
3 // . \ | ( | | ( |\__ `
4 // _|\_\_| \__,_|\__|\___/ ____/
5 // Multi-Physics
6 //
7 // License: BSD License
8 // Kratos default license: kratos/license.txt
9 //
10 // Main author: Ruben Zorrilla
11 //
12 
13 #if !defined(KRATOS_SHOCK_CAPTURING_UTILITIES_H_INCLUDED)
14 #define KRATOS_SHOCK_CAPTURING_UTILITIES_H_INCLUDED
15 
16 // System includes
17 #include <string>
18 #include <iostream>
19 
20 // External includes
21 
22 // Project includes
23 #include "containers/model.h"
24 #include "includes/define.h"
25 #include "includes/model_part.h"
26 #include "processes/process.h"
29 
30 // Application includes
33 
34 namespace Kratos
35 {
38 
41 
45 
49 
53 
57 
58 class KRATOS_API(FLUID_DYNAMICS_APPLICATION) ShockCapturingPhysicsBasedProcess : public Process
59 {
60 public:
61 
64 
66  typedef Process BaseType;
67 
69  typedef std::function<std::tuple<double, double, Matrix>(Geometry<Node> &rGeometry)> ElementMetricFunctionType;
70 
73  {
74  double Vol;
85  };
86 
89  {
90  double Vol;
101  };
102 
105 
109 
112  Model& rModel,
113  Parameters rParameters)
114  : ShockCapturingPhysicsBasedProcess(rModel.GetModelPart(rParameters["model_part_name"].GetString()), rParameters) {};
115 
118  ModelPart& rModelPart,
119  Parameters rParameters)
120  : Process()
121  , mrModelPart(rModelPart)
122  {
123  ValidateAndAssignParameters(rParameters);
124  };
125 
128 
132 
133 
137 
138  void Execute() override;
139 
140  void ExecuteInitialize() override;
141 
142  void ExecuteInitializeSolutionStep() override;
143 
144  int Check() override;
145 
146  const Parameters GetDefaultParameters() const override;
147 
151 
152 
156 
157 
161 
163  std::string Info() const override
164  {
165  std::stringstream buffer;
166  buffer << "ShockCapturingPhysicsBasedProcess";
167  return buffer.str();
168  }
169 
171  void PrintInfo(std::ostream &rOStream) const override { rOStream << "ShockCapturingPhysicsBasedProcess"; }
172 
174  void PrintData(std::ostream &rOStream) const override {}
175 
179 
180 
182 private:
185 
186 
190 
191  ModelPart& mrModelPart;
192 
193  bool mUpdateNodalArea;
194  bool mShockSensor;
195  bool mShearSensor;
196  bool mThermalSensor;
197  bool mThermallyCoupledFormulation;
198  double mArtBulkViscosityConstant = 0.0;
199  double mFarFieldPrandtlNumber = 0.0;
200  double mArtConductivityConstant = 0.0;
201  double mArtDynViscosityConstant = 0.0;
202 
206 
207 
211 
212  void ValidateAndAssignParameters(Parameters &rParameters);
213 
219  void CalculatePhysicsBasedShockCapturing();
220 
231  template<std::size_t TDim, std::size_t TNumNodes, class TTLSContainerType>
232  void CalculatePhysicsBasedShockCapturingElementContribution(
233  Element &rElement,
234  TTLSContainerType &rShockCapturingTLS)
235  {
236  auto &r_geom = rElement.GetGeometry();
237  const unsigned int n_nodes = r_geom.PointsNumber();
238 
239  // Initialize artificial magnitudes values
240  if (mShockSensor) {rElement.GetValue(ARTIFICIAL_BULK_VISCOSITY) = 0.0;}
241  if (mShearSensor) {rElement.GetValue(ARTIFICIAL_DYNAMIC_VISCOSITY) = 0.0;}
242  if (mThermalSensor || mShockSensor) {rElement.GetValue(ARTIFICIAL_CONDUCTIVITY) = 0.0;} // Note that conductivity is modified in both sensors
243 
244  // Get TLS values geometry values
245  double& r_vol = rShockCapturingTLS.Vol;
246  auto& r_DN_DX = rShockCapturingTLS.DN_DX;
247  auto& r_N = rShockCapturingTLS.N;
248  auto& r_metric_tensor = rShockCapturingTLS.MetricTensor;
249  auto& r_inv_metric_tensor = rShockCapturingTLS.InverseMetricTensor;
250 
251  // Calculate geometry data
252  GeometryUtils::CalculateGeometryData(r_geom, r_DN_DX, r_N, r_vol);
253 
254  // Calculate the geometry metric
255  double h_ref, metric_tensor_inf, metric_tensor_sup;
257  r_geom,
258  r_metric_tensor,
259  h_ref,
260  metric_tensor_inf,
261  metric_tensor_sup);
262 
263  // Inverse metric tensor calculation
264  double aux_det;
265  MathUtils<double>::InvertMatrix(r_metric_tensor, r_inv_metric_tensor, aux_det);
266 
267  // Get fluid physical properties
268  const auto& r_prop = rElement.GetProperties();
269  const double c_v = r_prop.GetValue(SPECIFIC_HEAT);
270  const double gamma = r_prop.GetValue(HEAT_CAPACITY_RATIO);
271 
272  // Set auxiliary constants
273  const double k = 1.0; // Polynomial order of the numerical simulation
274  const double eps = std::numeric_limits<double>::epsilon(); // Small constant to avoid division by 0
275 
276  // Calculate the midpoint values
277  double midpoint_rho, formulation_midpoint_temp;
278  auto& r_midpoint_v = rShockCapturingTLS.MidpointVelocity;
279  if (mThermallyCoupledFormulation) {
280  // Get required midpoint values
281  double midpoint_temp;
282  FluidCalculationUtilities::EvaluateInPoint(r_geom, r_N, std::tie(r_midpoint_v, VELOCITY), std::tie(midpoint_rho, DENSITY), std::tie(midpoint_temp, TEMPERATURE));
283  // If the formulation is thermally coupled, the temperature for the stagnation temperature is the midpoint value
284  formulation_midpoint_temp = midpoint_temp;
285  } else {
286  // Get required midpoint values
287  double midpoint_p;
288  FluidCalculationUtilities::EvaluateInPoint(r_geom, r_N, std::tie(r_midpoint_v, VELOCITY), std::tie(midpoint_p, PRESSURE), std::tie(midpoint_rho, DENSITY));
289  // If the formulation is not energy coupled, the temperature for the stagnation temperature it's calculated by the state equation with the midpoint values
290  formulation_midpoint_temp = midpoint_p / (midpoint_rho * (gamma - 1.0) * c_v);
291  }
292 
293  // Calculate common values
294  const double v_norm_pow = SquaredArrayNorm(r_midpoint_v);
295  const double stagnation_temp = formulation_midpoint_temp + 0.5 * inner_prod(r_midpoint_v,r_midpoint_v)/(gamma * c_v);
296  const double critical_temp = stagnation_temp * (2.0 / (gamma + 1.0));
297  const double c_star = std::sqrt(gamma * (gamma - 1.0) * c_v * critical_temp); // Critical speed of sound
298  const double ref_mom_norm = midpoint_rho * std::sqrt(v_norm_pow + std::pow(c_star, 2));
299 
300  // Shock sensor values
301  if (mShockSensor) {
302  // Calculate the required differential operators
303  double div_v, mach;
304  auto& r_grad_rho = rShockCapturingTLS.DensityGradient;
305  auto& r_rot_v = rShockCapturingTLS.VelocityRotational;
306  CalculateShockSensorValues<TDim,TNumNodes>(r_geom, r_N, r_DN_DX, mach, div_v, r_grad_rho, r_rot_v);
307 
308  // Characteristic element size along the direction of the density gradient
309  const double h_beta = h_ref * norm_2(r_grad_rho) / std::sqrt(CalculateProjectedInverseMetricElementSize(r_inv_metric_tensor, r_grad_rho) + eps);
310 
311  // Dilatation sensor (activates in shock waves)
312  // Critical speed of sound might be zero if zero initial condition is prescribed (i.e. thermally uncoupled framework)
313  const double s_omega = c_star > 0.0 ? -h_beta * div_v / (k * c_star) : 0.0;
314 
315  // Vorticity sensor (vanishes in vorticity dominated regions)
316  const double div_v_pow = std::pow(div_v, 2);
317  const double rot_v_norm_pow = SquaredArrayNorm(r_rot_v);
318  const double s_w = div_v_pow / (div_v_pow + rot_v_norm_pow + eps);
319 
320  // Calculate limited shock sensor
321  const double s_beta_0 = 0.01;
322  const double s_beta_max = 2.0 / std::sqrt(std::pow(gamma, 2) - 1.0);
323  const double s_beta = s_omega * s_w;
324  const double s_beta_hat = SmoothedLimitingFunction(s_beta, s_beta_0, s_beta_max);
325  rElement.GetValue(SHOCK_SENSOR) = s_beta_hat;
326 
327  // Calculate elemental artificial bulk viscosity
328  const double elem_b_star = (mArtBulkViscosityConstant * h_beta / k) * ref_mom_norm * s_beta_hat;
329  rElement.GetValue(ARTIFICIAL_BULK_VISCOSITY) = elem_b_star;
330 
331  // Calculate elemental artificial conductivity (dilatancy)
332  // Note that this is only required if the formulation is thermally coupled
333  if (mThermallyCoupledFormulation) {
334  const double Pr_beta_min = 0.9;
335  const double alpha_pr_beta = 2.0;
336  const double mach_threshold = 3.0;
337  double ArtPrandtlNumber_beta;
338  if (mFarFieldPrandtlNumber < std::numeric_limits<double>::epsilon()) {
339  ArtPrandtlNumber_beta = Pr_beta_min * (1.0 + std::exp(-2.0 * alpha_pr_beta * (mach - mach_threshold)));
340  } else {
341  ArtPrandtlNumber_beta = mFarFieldPrandtlNumber;
342  }
343  const double elem_k1_star = (gamma * c_v / ArtPrandtlNumber_beta) * elem_b_star;
344  rElement.GetValue(ARTIFICIAL_CONDUCTIVITY) += elem_k1_star;
345  }
346  }
347 
348  if (mThermalSensor || mShearSensor) {
349  // Calculate Jacobian matrix (non-required for the shock sensor)
350  Matrix mid_pt_jacobian; //FIXME: We should use a bounded matrix in here
351  r_geom.Jacobian(mid_pt_jacobian, 0, GeometryData::IntegrationMethod::GI_GAUSS_1);
352 
353  // Thermal sensor values
354  if (mThermalSensor) {
355  // Calculate temperature gradients
356  auto& r_grad_temp = rShockCapturingTLS.TemperatureGradient;
357  auto& r_grad_temp_local = rShockCapturingTLS.TemperatureLocalGradient;
358  CalculateTemperatureGradients(r_geom, r_DN_DX, mid_pt_jacobian, r_grad_temp, r_grad_temp_local);
359 
360  // Characteristic element size along the direction of the temperature gradient
361  const double h_kappa = h_ref * norm_2(r_grad_temp) / std::sqrt(CalculateProjectedInverseMetricElementSize(r_inv_metric_tensor, r_grad_temp) + eps);
362 
363  // Thermal sensor (detect thermal gradients that are larger than possible with the grid resolution)
364  const double s_kappa_0 = 1.0;
365  const double s_kappa_max = 2.0;
366  const double s_kappa = h_ref * norm_2(r_grad_temp_local) / k / stagnation_temp;
367  const double s_kappa_hat = SmoothedLimitingFunction(s_kappa, s_kappa_0, s_kappa_max);
368  rElement.GetValue(THERMAL_SENSOR) = s_kappa_hat;
369 
370  // Calculate elemental artificial conductivity (thermal sensor)
371  const double elem_k2_star = (gamma * c_v) * (mArtConductivityConstant * h_kappa / k) * ref_mom_norm * s_kappa_hat;
372  rElement.GetValue(ARTIFICIAL_CONDUCTIVITY) += elem_k2_star;
373  }
374 
375  // Shear sensor values
376  if (mShearSensor) {
377  // Calculate shear sensor values
378  double r_c;
379  auto& r_local_shear_grad_v = rShockCapturingTLS.VelocityShearLocalGradient;
380  CalculateShearSensorValues(r_geom, r_N, r_DN_DX, mid_pt_jacobian, r_local_shear_grad_v, r_c);
381  BoundedMatrix<double,TDim,TDim> eigen_vect_mat, eigen_val_mat;
382  MathUtils<double>::GaussSeidelEigenSystem(r_local_shear_grad_v, eigen_vect_mat, eigen_val_mat);
383  double shear_spect_norm = 0.0;
384  for (unsigned int d = 0; d < eigen_val_mat.size1(); ++d) {
385  if (eigen_val_mat(d, d) > shear_spect_norm) {
386  shear_spect_norm = eigen_val_mat(d, d);
387  }
388  }
389  shear_spect_norm = std::sqrt(shear_spect_norm);
390 
391  // Characteristic element size for the shear sensor
392  const double h_mu = h_ref * metric_tensor_inf;
393 
394  // Shear sensor (detect velocity gradients that are larger than possible with the grid resolution)
395  const double isentropic_max_vel = std::sqrt(v_norm_pow + (2.0 / (gamma - 1.0)) * std::pow(r_c, 2));
396  const double s_mu_0 = 1.0;
397  const double s_mu_max = 2.0;
398  const double s_mu = h_ref * shear_spect_norm / isentropic_max_vel / k;
399  const double s_mu_hat = SmoothedLimitingFunction(s_mu, s_mu_0, s_mu_max);
400  rElement.GetValue(SHEAR_SENSOR) = s_mu_hat;
401 
402  // Calculate elemental artificial dynamic viscosity
403  const double elem_mu_star = (mArtDynViscosityConstant * h_mu / k) * ref_mom_norm * s_mu_hat;
404  rElement.GetValue(ARTIFICIAL_DYNAMIC_VISCOSITY) = elem_mu_star;
405  }
406  }
407 
408  // Project the shock capturing magnitudes to the nodes
409  const double aux_weight = r_vol / static_cast<double>(n_nodes);
410  for (unsigned int i_node = 0; i_node < n_nodes; ++i_node) {
411  auto &r_node = r_geom[i_node];
412  if (mShockSensor) {AtomicAdd(r_node.GetValue(ARTIFICIAL_BULK_VISCOSITY), aux_weight * rElement.GetValue(ARTIFICIAL_BULK_VISCOSITY));}
413  if (mShearSensor) {AtomicAdd(r_node.GetValue(ARTIFICIAL_DYNAMIC_VISCOSITY), aux_weight * rElement.GetValue(ARTIFICIAL_DYNAMIC_VISCOSITY));}
414  if (mShockSensor || mThermalSensor) {AtomicAdd(r_node.GetValue(ARTIFICIAL_CONDUCTIVITY), aux_weight * rElement.GetValue(ARTIFICIAL_CONDUCTIVITY));}
415  }
416  }
417 
424  inline double SquaredArrayNorm(const array_1d<double,3>& rArray)
425  {
426  return rArray[0]*rArray[0] + rArray[1]*rArray[1] + rArray[2]*rArray[2];
427  }
428 
438  double LimitingFunction(
439  const double s,
440  const double s_0,
441  const double s_max,
442  const double s_min = 0.0);
443 
452  double SmoothedLimitingFunction(
453  const double s,
454  const double s_0,
455  const double s_max);
456 
463  double SmoothedMaxFunction(const double s);
464 
471  double SmoothedMinFunction(const double s);
472 
481  double CalculateProjectedInverseMetricElementSize(
482  const Matrix& rInverseMetricTensor,
483  const array_1d<double,3>& rScalarGradient);
484 
498  template<std::size_t TDim, std::size_t TNumNodes>
499  void KRATOS_API(FLUID_DYNAMICS_APPLICATION) CalculateShockSensorValues(
500  const Geometry<Node>& rGeometry,
501  const array_1d<double,TNumNodes>& rN,
502  const BoundedMatrix<double,TNumNodes,TDim>& rDN_DX,
503  double& rMachNumber,
504  double& rVelocityDivergence,
505  array_1d<double,3>& rDensityGradient,
506  array_1d<double,3>& rVelocityRotational);
507 
519  template<std::size_t TDim, std::size_t TNumNodes>
520  void KRATOS_API(FLUID_DYNAMICS_APPLICATION) CalculateTemperatureGradients(
521  const Geometry<Node>& rGeometry,
522  const BoundedMatrix<double,TNumNodes,TDim>& rDN_DX,
523  const Matrix& rJacobianMatrix,
524  array_1d<double,3>& rTemperatureGradient,
525  array_1d<double,3>& rTemperatureLocalGradient);
526 
539  template<std::size_t TDim, std::size_t TNumNodes>
540  void KRATOS_API(FLUID_DYNAMICS_APPLICATION) CalculateShearSensorValues(
541  const Geometry<Node>& rGeometry,
542  const array_1d<double,TNumNodes>& rN,
543  const BoundedMatrix<double,TNumNodes,TDim>& rDN_DX,
544  const Matrix& rJacobianMatrix,
545  BoundedMatrix<double,TDim,TDim>& rLocalVelocityShearGradient,
546  double& rSoundVelocity);
547 
551 
552 
556 
557 
561 
563  ShockCapturingPhysicsBasedProcess& operator=(ShockCapturingPhysicsBasedProcess const& rOther);
564 
566  ShockCapturingPhysicsBasedProcess(ShockCapturingPhysicsBasedProcess const& rOther);
567 
569 
570 }; // Class ShockCapturingPhysicsBasedProcess
571 
575 
576 
580 
582 inline std::ostream& operator << (
583  std::ostream& rOStream,
584  const ShockCapturingPhysicsBasedProcess& rThis);
585 
587 
589 
590 } // namespace Kratos.
591 
592 #endif // KRATOS_SHOCK_CAPTURING_UTILITIES_H_INCLUDED defined
PeriodicInterfaceProcess & operator=(const PeriodicInterfaceProcess &)=delete
void ExecuteInitialize() override
Definition: periodic_interface_process.hpp:37
Base class for all Elements.
Definition: element.h:60
PropertiesType & GetProperties()
Definition: element.h:1024
TVariableType::Type & GetValue(const TVariableType &rThisVariable)
Definition: geometrical_object.h:248
GeometryType & GetGeometry()
Returns the reference of the geometry.
Definition: geometrical_object.h:158
Geometry base class.
Definition: geometry.h:71
static void CalculateMetricTensorDimensionless(const GeometryType &rGeometry, BoundedMatrix< double, TDim, TDim > &rMetricTensorDimensionless, double &rReferenceElementSize, double &rMetricInfimum, double &rMetricSupremum)
Calculate the metric tensor of a given geometry This function calculates the metric tensor and its da...
Definition: geometry_metric_calculator.cpp:117
static void CalculateGeometryData(const GeometryType &rGeometry, BoundedMatrix< double, 4, 3 > &rDN_DX, array_1d< double, 4 > &rN, double &rVolume)
This function is designed to compute the shape function derivatives, shape functions and volume in 3D...
Definition: geometry_utilities.h:176
Definition: amatrix_interface.h:41
static BoundedMatrix< double, TDim, TDim > InvertMatrix(const BoundedMatrix< double, TDim, TDim > &rInputMatrix, double &rInputMatrixDet, const double Tolerance=ZeroTolerance)
Calculates the inverse of a 2x2, 3x3 and 4x4 matrices (using bounded matrix for performance)
Definition: math_utils.h:197
static bool GaussSeidelEigenSystem(const TMatrixType1 &rA, TMatrixType2 &rEigenVectorsMatrix, TMatrixType2 &rEigenValuesMatrix, const double Tolerance=1.0e-18, const SizeType MaxIterations=20)
Calculates the eigenvectors and eigenvalues of given symmetric matrix.
Definition: math_utils.h:1587
This class aims to manage different model parts across multi-physics simulations.
Definition: model.h:60
This class aims to manage meshes for multi-physics simulations.
Definition: model_part.h:77
This class provides to Kratos a data structure for I/O based on the standard of JSON.
Definition: kratos_parameters.h:59
The base class for all processes in Kratos.
Definition: process.h:49
TVariableType::Type & GetValue(const TVariableType &rVariable)
Definition: properties.h:228
Definition: shock_capturing_physics_based_process.h:59
std::function< std::tuple< double, double, Matrix >Geometry< Node > &rGeometry)> ElementMetricFunctionType
Type for the metric calculation function.
Definition: shock_capturing_physics_based_process.h:69
~ShockCapturingPhysicsBasedProcess()
Destructor.
Definition: shock_capturing_physics_based_process.h:127
void PrintInfo(std::ostream &rOStream) const override
Print information about this object.
Definition: shock_capturing_physics_based_process.h:171
Process BaseType
The base process type.
Definition: shock_capturing_physics_based_process.h:66
ShockCapturingPhysicsBasedProcess(Model &rModel, Parameters rParameters)
Constructor with model.
Definition: shock_capturing_physics_based_process.h:111
void PrintData(std::ostream &rOStream) const override
Print object's data.
Definition: shock_capturing_physics_based_process.h:174
ShockCapturingPhysicsBasedProcess(ModelPart &rModelPart, Parameters rParameters)
Constructor with model part.
Definition: shock_capturing_physics_based_process.h:117
std::string Info() const override
Turn back information as a string.
Definition: shock_capturing_physics_based_process.h:163
KRATOS_CLASS_POINTER_DEFINITION(ShockCapturingPhysicsBasedProcess)
Pointer definition of ShockCapturingPhysicsBasedProcess.
static void EvaluateInPoint(const GeometryType &rGeometry, const Vector &rShapeFunction, const int Step, const TRefVariableValuePairArgs &... rValueVariablePairs)
Evaluates given list of variable pairs at gauss point locations at step.
Definition: fluid_calculation_utilities.h:75
#define KRATOS_API(...)
Definition: kratos_export_api.h:40
REF: G. R. Cowper, GAUSSIAN QUADRATURE FORMULAS FOR TRIANGLES.
Definition: mesh_condition.cpp:21
TExpressionType::data_type norm_2(AMatrix::MatrixExpression< TExpressionType, TCategory > const &TheExpression)
Definition: amatrix_interface.h:625
void AtomicAdd(TDataType &target, const TDataType &value)
Definition: atomic_utilities.h:55
Internals::Matrix< double, AMatrix::dynamic, AMatrix::dynamic > Matrix
Definition: amatrix_interface.h:470
TExpression1Type::data_type inner_prod(AMatrix::MatrixExpression< TExpression1Type, TCategory1 > const &First, AMatrix::MatrixExpression< TExpression2Type, TCategory2 > const &Second)
Definition: amatrix_interface.h:592
std::ostream & operator<<(std::ostream &rOStream, const LinearMasterSlaveConstraint &rThis)
output stream function
Definition: linear_master_slave_constraint.h:432
div_v
Definition: generate_convection_diffusion_explicit_element.py:150
int n_nodes
Definition: generate_total_lagrangian_mixed_volumetric_strain_element.py:15
float gamma
Definition: generate_two_fluid_navier_stokes.py:131
int d
Definition: ode_solve.py:397
int k
Definition: quadrature.py:595
Type for the 2D (linear triangle) TLS geometry data.
Definition: shock_capturing_physics_based_process.h:73
array_1d< double, 3 > VelocityRotational
Definition: shock_capturing_physics_based_process.h:81
BoundedMatrix< double, 2, 2 > InverseMetricTensor
Definition: shock_capturing_physics_based_process.h:78
BoundedMatrix< double, 3, 2 > DN_DX
Definition: shock_capturing_physics_based_process.h:76
array_1d< double, 3 > DensityGradient
Definition: shock_capturing_physics_based_process.h:80
BoundedMatrix< double, 2, 2 > MetricTensor
Definition: shock_capturing_physics_based_process.h:77
array_1d< double, 3 > TemperatureGradient
Definition: shock_capturing_physics_based_process.h:82
array_1d< double, 3 > N
Definition: shock_capturing_physics_based_process.h:75
double Vol
Definition: shock_capturing_physics_based_process.h:74
array_1d< double, 3 > TemperatureLocalGradient
Definition: shock_capturing_physics_based_process.h:83
array_1d< double, 3 > MidpointVelocity
Definition: shock_capturing_physics_based_process.h:79
BoundedMatrix< double, 2, 2 > VelocityShearLocalGradient
Definition: shock_capturing_physics_based_process.h:84
Type for the 3D (linear tetrahedra) TLS geometry data.
Definition: shock_capturing_physics_based_process.h:89
BoundedMatrix< double, 3, 3 > MetricTensor
Definition: shock_capturing_physics_based_process.h:93
array_1d< double, 3 > TemperatureLocalGradient
Definition: shock_capturing_physics_based_process.h:99
array_1d< double, 3 > MidpointVelocity
Definition: shock_capturing_physics_based_process.h:95
BoundedMatrix< double, 4, 3 > DN_DX
Definition: shock_capturing_physics_based_process.h:92
BoundedMatrix< double, 3, 3 > VelocityShearLocalGradient
Definition: shock_capturing_physics_based_process.h:100
array_1d< double, 3 > DensityGradient
Definition: shock_capturing_physics_based_process.h:96
array_1d< double, 3 > VelocityRotational
Definition: shock_capturing_physics_based_process.h:97
double Vol
Definition: shock_capturing_physics_based_process.h:90
array_1d< double, 3 > TemperatureGradient
Definition: shock_capturing_physics_based_process.h:98
BoundedMatrix< double, 3, 3 > InverseMetricTensor
Definition: shock_capturing_physics_based_process.h:94
array_1d< double, 4 > N
Definition: shock_capturing_physics_based_process.h:91