www.mooseframework.org
NSSUPGMomentum.C
Go to the documentation of this file.
1 //* This file is part of the MOOSE framework
2 //* https://www.mooseframework.org
3 //*
4 //* All rights reserved, see COPYRIGHT for full restrictions
5 //* https://github.com/idaholab/moose/blob/master/COPYRIGHT
6 //*
7 //* Licensed under LGPL 2.1, please see LICENSE for details
8 //* https://www.gnu.org/licenses/lgpl-2.1.html
9 
10 #include "NSSUPGMomentum.h"
11 
12 // FluidProperties includes
14 
15 registerMooseObject("NavierStokesApp", NSSUPGMomentum);
16 
17 template <>
18 InputParameters
20 {
21  InputParameters params = validParams<NSSUPGBase>();
22  params.addClassDescription(
23  "Compute residual and Jacobian terms form the SUPG terms in the momentum equation.");
24  params.addRequiredParam<unsigned int>("component", "");
25  return params;
26 }
27 
28 NSSUPGMomentum::NSSUPGMomentum(const InputParameters & parameters)
29  : NSSUPGBase(parameters), _component(getParam<unsigned>("component"))
30 {
31 }
32 
33 Real
35 {
36  // See "Component SUPG contributions" section of notes for details.
37 
38  // Values to be summed up and returned
39  Real mass_term = 0.0;
40  Real mom_term = 0.0;
41  Real energy_term = 0.0;
42 
43  // Velocity vector
44  RealVectorValue vel(_u_vel[_qp], _v_vel[_qp], _w_vel[_qp]);
45 
46  // Velocity vector magnitude squared
47  Real velmag2 = vel.norm_sq();
48 
49  // Ratio of specific heats
50  const Real gam = _fp.gamma();
51 
52  // Velocity vector, dotted with the test function gradient
53  Real U_grad_phi = vel * _grad_test[_i][_qp];
54 
55  // _component'th entry of test function gradient
56  Real dphi_dxk = _grad_test[_i][_qp](_component);
57 
58  // Vector object of momentum equation strong residuals
59  RealVectorValue Ru(
60  _strong_residuals[_qp][1], _strong_residuals[_qp][2], _strong_residuals[_qp][3]);
61 
62  // 1.) The mass-residual term:
63  Real mass_coeff = 0.5 * (gam - 1.0) * velmag2 * dphi_dxk - vel(_component) * U_grad_phi;
64 
65  mass_term = _tauc[_qp] * mass_coeff * _strong_residuals[_qp][0];
66  // Moose::out << "mass_term[" << _qp << "]=" << mass_term << std::endl;
67 
68  // 2.) The momentum-residual term:
69  Real mom_term1 =
70  U_grad_phi *
71  _strong_residuals[_qp][_component + 1]; // <- momentum indices are 1,2,3, _component is 0,1,2
72  Real mom_term2 = (1. - gam) * dphi_dxk * (vel * Ru);
73  Real mom_term3 = vel(_component) * (_grad_test[_i][_qp] * Ru);
74 
75  mom_term = _taum[_qp] * (mom_term1 + mom_term2 + mom_term3);
76  // Moose::out << "mom_term[" << _qp << "]=" << mom_term << std::endl;
77 
78  // 3.) The energy-residual term:
79  energy_term = _taue[_qp] * (gam - 1.0) * dphi_dxk * _strong_residuals[_qp][4];
80 
81  // For printing purposes only
82  Real result = mass_term + mom_term + energy_term;
83 
84  return result;
85 }
86 
87 Real
89 {
90  // Set variable number for the computeJacobianHelper() function based on the
91  // _component and the knowledge that this is the on-diagonal entry.
92  unsigned int var_number[3] = {_rhou_var_number, _rhov_var_number, _rhow_var_number};
93 
94  // Call the common computeJacobianHelper() function
95  return computeJacobianHelper(var_number[_component]);
96 }
97 
98 Real
100 {
101  return computeJacobianHelper(jvar);
102 }
103 
104 Real
106 {
107  if (isNSVariable(var))
108  {
109  // Convert the Moose numbering to canonical NS variable numbering.
110  unsigned mapped_var_number = mapVarNumber(var);
111 
112  // Convenience vars
113 
114  // Velocity vector
115  RealVectorValue vel(_u_vel[_qp], _v_vel[_qp], _w_vel[_qp]);
116 
117  // Velocity vector magnitude squared
118  Real velmag2 = vel.norm_sq();
119 
120  // Ratio of specific heats
121  const Real gam = _fp.gamma();
122 
123  // Shortcuts for shape function gradients at current qp.
124  RealVectorValue grad_test_i = _grad_test[_i][_qp];
125  RealVectorValue grad_phi_j = _grad_phi[_j][_qp];
126 
127  // ...
128 
129  // 1.) taum- and taue-proportional terms present for any variable:
130 
131  //
132  // Art. Diffusion matrix for taum-proportional term = ( C_k + (1-gam)*C_k^T + diag(u_k) ) *
133  // calA_{ell}
134  //
135  RealTensorValue mom_mat;
136  mom_mat(0, 0) = mom_mat(1, 1) = mom_mat(2, 2) = vel(_component); // (diag(u_k)
137  mom_mat += _calC[_qp][_component]; // + C_k
138  mom_mat += (1.0 - gam) * _calC[_qp][_component].transpose(); // + (1-gam)*C_k^T)
139  mom_mat = mom_mat * _calA[_qp][mapped_var_number]; // * calA_{ell}
140  Real mom_term =
141  _taum[_qp] * grad_test_i * (mom_mat * grad_phi_j); // taum * grad(phi_i) * (M*grad(phi_j))
142 
143  //
144  // Art. Diffusion matrix for taue-proportional term = (gam-1) * calE_km
145  //
146  RealTensorValue ene_mat = (gam - 1) * _calE[_qp][_component][mapped_var_number];
147  Real ene_term =
148  _taue[_qp] * grad_test_i * (ene_mat * grad_phi_j); // taue * grad(phi_i) * (M*grad(phi_j))
149 
150  // 2.) Terms only present if the variable is one of the momentums
151  Real mass_term = 0.0;
152 
153  switch (mapped_var_number)
154  {
155  case 1:
156  case 2:
157  case 3:
158  {
159  // Variable for zero-based indexing into local matrices and vectors.
160  unsigned m_local = mapped_var_number - 1;
161 
162  //
163  // Art. Diffusion matrix for tauc-proportional term = 0.5*(gam - 1.0)*velmag2*D_km -
164  // vel(_component)*C_m
165  //
166  RealTensorValue mass_mat;
167  mass_mat(_component, m_local) = 0.5 * (gam - 1.0) * velmag2; // 0.5*(gam - 1.0)*velmag2*D_km
168  mass_mat -= vel(_component) * _calC[_qp][m_local]; // vel(_component)*C_m
169  mass_term = _tauc[_qp] * grad_test_i *
170  (mass_mat * grad_phi_j); // tauc * grad(phi_i) * (M*grad(phi_j))
171  }
172  // Nothing else to do if we are not a momentum...
173  }
174 
175  // Sum up values and return
176  return mass_term + mom_term + ene_term;
177  }
178  else
179  return 0.0;
180 }
NSSUPGMomentum::computeQpJacobian
virtual Real computeQpJacobian()
Definition: NSSUPGMomentum.C:88
NSSUPGMomentum.h
NSKernel::isNSVariable
bool isNSVariable(unsigned var)
Helper functions for mapping Moose variable numberings into the "canonical" numbering for the compres...
Definition: NSKernel.C:78
IdealGasFluidProperties.h
NSKernel::_rhou_var_number
unsigned _rhou_var_number
Definition: NSKernel.h:55
NSSUPGBase::_calE
const MaterialProperty< std::vector< std::vector< RealTensorValue > > > & _calE
Definition: NSSUPGBase.h:50
NSSUPGBase::_taum
const MaterialProperty< Real > & _taum
Definition: NSSUPGBase.h:39
validParams< NSSUPGBase >
InputParameters validParams< NSSUPGBase >()
Definition: NSSUPGBase.C:19
NSSUPGBase::_calA
const MaterialProperty< std::vector< RealTensorValue > > & _calA
Definition: NSSUPGBase.h:44
IdealGasFluidProperties::gamma
virtual Real gamma() const
Definition: IdealGasFluidProperties.h:117
NSSUPGMomentum::computeQpResidual
virtual Real computeQpResidual()
Definition: NSSUPGMomentum.C:34
NSSUPGMomentum::computeQpOffDiagJacobian
virtual Real computeQpOffDiagJacobian(unsigned int jvar)
Definition: NSSUPGMomentum.C:99
NSSUPGBase
This class acts as a base class for stabilization kernels.
Definition: NSSUPGBase.h:25
NSKernel::_rhow_var_number
unsigned _rhow_var_number
Definition: NSKernel.h:57
NSKernel::_rhov_var_number
unsigned _rhov_var_number
Definition: NSKernel.h:56
NSKernel::_v_vel
const VariableValue & _v_vel
Definition: NSKernel.h:37
NSSUPGMomentum::NSSUPGMomentum
NSSUPGMomentum(const InputParameters &parameters)
Definition: NSSUPGMomentum.C:28
NSKernel::_u_vel
const VariableValue & _u_vel
Definition: NSKernel.h:36
NSSUPGMomentum
Compute residual and Jacobian terms form the SUPG terms in the momentum equation.
Definition: NSSUPGMomentum.h:24
NSSUPGBase::_calC
const MaterialProperty< std::vector< RealTensorValue > > & _calC
Definition: NSSUPGBase.h:47
NSSUPGBase::_strong_residuals
const MaterialProperty< std::vector< Real > > & _strong_residuals
Definition: NSSUPGBase.h:41
NSSUPGMomentum::_component
unsigned int _component
Definition: NSSUPGMomentum.h:37
NSSUPGMomentum::computeJacobianHelper
Real computeJacobianHelper(unsigned int var)
Definition: NSSUPGMomentum.C:105
registerMooseObject
registerMooseObject("NavierStokesApp", NSSUPGMomentum)
NSKernel::_w_vel
const VariableValue & _w_vel
Definition: NSKernel.h:38
NSKernel::_fp
const IdealGasFluidProperties & _fp
Definition: NSKernel.h:65
validParams< NSSUPGMomentum >
InputParameters validParams< NSSUPGMomentum >()
Definition: NSSUPGMomentum.C:19
NSSUPGBase::_taue
const MaterialProperty< Real > & _taue
Definition: NSSUPGBase.h:40
NSSUPGBase::_tauc
const MaterialProperty< Real > & _tauc
Definition: NSSUPGBase.h:38
NSKernel::mapVarNumber
unsigned mapVarNumber(unsigned var)
Definition: NSKernel.C:88