www.mooseframework.org
NSSUPGEnergy.C
Go to the documentation of this file.
1 /****************************************************************/
2 /* MOOSE - Multiphysics Object Oriented Simulation Environment */
3 /* */
4 /* All contents are licensed under LGPL V2.1 */
5 /* See LICENSE for full restrictions */
6 /****************************************************************/
7 #include "NSSUPGEnergy.h"
8 
9 // FluidProperties includes
11 
12 template <>
13 InputParameters
15 {
16  InputParameters params = validParams<NSSUPGBase>();
17  params.addClassDescription(
18  "Compute residual and Jacobian terms form the SUPG terms in the energy equation.");
19  return params;
20 }
21 
22 NSSUPGEnergy::NSSUPGEnergy(const InputParameters & parameters) : NSSUPGBase(parameters) {}
23 
24 Real
26 {
27  // See "Component SUPG contributions" section of notes for details.
28 
29  // Values to be summed up and returned
30  Real mass_term = 0.0;
31  Real mom_term = 0.0;
32  Real energy_term = 0.0;
33 
34  // Ratio of specific heats
35  const Real gam = _fp.gamma();
36 
37  // Velocity vector
38  RealVectorValue vel(_u_vel[_qp], _v_vel[_qp], _w_vel[_qp]);
39 
40  // Velocity vector magnitude squared
41  Real velmag2 = vel.norm_sq();
42 
43  // Velocity vector, dotted with the test function gradient
44  Real U_grad_phi = vel * _grad_test[_i][_qp];
45 
46  // Vector object of momentum equation strong residuals
47  RealVectorValue Ru(
48  _strong_residuals[_qp][1], _strong_residuals[_qp][2], _strong_residuals[_qp][3]);
49 
50  // 1.) The mass-residual term:
51  Real mass_coeff = (0.5 * (gam - 1.0) * velmag2 - _enthalpy[_qp]) * U_grad_phi;
52 
53  mass_term = _tauc[_qp] * mass_coeff * _strong_residuals[_qp][0];
54 
55  // 2.) The momentum-residual term:
56  Real mom_term1 = _enthalpy[_qp] * (_grad_test[_i][_qp] * Ru);
57  Real mom_term2 = (1.0 - gam) * U_grad_phi * (vel * Ru);
58 
59  mom_term = _taum[_qp] * (mom_term1 + mom_term2);
60 
61  // 3.) The energy-residual term:
62  energy_term = _taue[_qp] * gam * U_grad_phi * _strong_residuals[_qp][4];
63 
64  // For printing purposes only
65  Real result = mass_term + mom_term + energy_term;
66  // Moose::out << "result[" << _qp << "]=" << result << std::endl;
67 
68  return result;
69 }
70 
71 Real
73 {
74  // This is the energy equation, so pass the on-diagonal variable number.
76 }
77 
78 Real
80 {
81  return computeJacobianHelper(jvar);
82 }
83 
84 Real
86 {
87  if (isNSVariable(var))
88  {
89  // Convert the Moose numbering to canonical NS variable numbering.
90  unsigned mapped_var_number = mapVarNumber(var);
91 
92  // Convenience vars
93 
94  // Velocity vector
95  RealVectorValue vel(_u_vel[_qp], _v_vel[_qp], _w_vel[_qp]);
96 
97  // Velocity vector magnitude squared
98  Real velmag2 = vel.norm_sq();
99 
100  // Ratio of specific heats
101  const Real gam = _fp.gamma();
102 
103  // Shortcuts for shape function gradients at current qp.
104  RealVectorValue grad_test_i = _grad_test[_i][_qp];
105  RealVectorValue grad_phi_j = _grad_phi[_j][_qp];
106 
107  // ...
108 
109  // 1.) taum- and taue-proportional terms present for any variable:
110 
111  //
112  // Art. Diffusion matrix for taum-proportional term = (diag(H) + (1-gam)*S) * A_{ell}
113  //
114  RealTensorValue mom_mat;
115  mom_mat(0, 0) = mom_mat(1, 1) = mom_mat(2, 2) = _enthalpy[_qp]; // (diag(H)
116  mom_mat += (1. - gam) * _calC[_qp][0] * _calC[_qp][0].transpose(); // + (1-gam)*S)
117  mom_mat = mom_mat * _calA[_qp][mapped_var_number]; // * A_{ell}
118  Real mom_term = _taum[_qp] * grad_test_i * (mom_mat * grad_phi_j);
119 
120  //
121  // Art. Diffusion matrix for taue-proportinal term = gam * E_{ell},
122  // where E_{ell} = C_k * E_{k ell} for any k, summation over k *not* implied.
123  //
124  RealTensorValue ene_mat = gam * _calC[_qp][0] * _calE[_qp][0][mapped_var_number];
125  Real ene_term = _taue[_qp] * grad_test_i * (ene_mat * grad_phi_j);
126 
127  // 2.) Terms only present if the variable is one of the momentums
128  Real mass_term = 0.;
129 
130  switch (mapped_var_number)
131  {
132  case 1:
133  case 2:
134  case 3:
135  {
136  // Variable for zero-based indexing into local matrices and vectors.
137  unsigned m_local = mapped_var_number - 1;
138 
139  //
140  // Art. Diffusion matrix for tauc-proportional term = (0.5*(gam-1.)*velmag2 - H)*C_m
141  //
142  RealTensorValue mass_mat =
143  (0.5 * (gam - 1.) * velmag2 - _enthalpy[_qp]) * _calC[_qp][m_local];
144  mass_term = _tauc[_qp] * grad_test_i * (mass_mat * grad_phi_j);
145 
146  // Don't even need to break, no other cases to fall through to...
147  break;
148  }
149  }
150 
151  // Sum up values and return
152  return mass_term + mom_term + ene_term;
153  }
154  else
155  return 0.0;
156 }
const IdealGasFluidProperties & _fp
Definition: NSKernel.h:63
const VariableValue & _w_vel
Definition: NSKernel.h:36
InputParameters validParams< NSSUPGBase >()
Definition: NSSUPGBase.C:17
InputParameters validParams< NSSUPGEnergy >()
Definition: NSSUPGEnergy.C:14
NSSUPGEnergy(const InputParameters &parameters)
Definition: NSSUPGEnergy.C:22
Real computeJacobianHelper(unsigned var)
Definition: NSSUPGEnergy.C:85
virtual Real computeQpJacobian()
Definition: NSSUPGEnergy.C:72
virtual Real computeQpResidual()
Definition: NSSUPGEnergy.C:25
const MaterialProperty< std::vector< RealTensorValue > > & _calC
Definition: NSSUPGBase.h:45
virtual Real computeQpOffDiagJacobian(unsigned int jvar)
Definition: NSSUPGEnergy.C:79
bool isNSVariable(unsigned var)
Helper functions for mapping Moose variable numberings into the "canonical" numbering for the compres...
Definition: NSKernel.C:76
const MaterialProperty< Real > & _taum
Definition: NSSUPGBase.h:37
unsigned _rhoE_var_number
Definition: NSKernel.h:56
const VariableValue & _u_vel
Definition: NSKernel.h:34
virtual Real gamma(Real v=0., Real u=0.) const override
Compute the ratio of specific heats.
const MaterialProperty< std::vector< RealTensorValue > > & _calA
Definition: NSSUPGBase.h:42
const VariableValue & _v_vel
Definition: NSKernel.h:35
const MaterialProperty< std::vector< Real > > & _strong_residuals
Definition: NSSUPGBase.h:39
const MaterialProperty< Real > & _tauc
Definition: NSSUPGBase.h:36
const VariableValue & _enthalpy
Definition: NSSUPGBase.h:69
This class acts as a base class for stabilization kernels.
Definition: NSSUPGBase.h:23
const MaterialProperty< std::vector< std::vector< RealTensorValue > > > & _calE
Definition: NSSUPGBase.h:48
unsigned mapVarNumber(unsigned var)
Definition: NSKernel.C:86
const MaterialProperty< Real > & _taue
Definition: NSSUPGBase.h:38