www.mooseframework.org
INSMass.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 "INSMass.h"
11 #include "Function.h"
12 
13 registerMooseObject("NavierStokesApp", INSMass);
14 
15 template <>
16 InputParameters
18 {
19  InputParameters params = validParams<INSBase>();
20 
21  params.addClassDescription("This class computes the mass equation residual and Jacobian "
22  "contributions for the incompressible Navier-Stokes momentum "
23  "equation.");
24  params.addParam<bool>(
25  "pspg", false, "Whether to perform PSPG stabilization of the mass equation");
26  params.addParam<FunctionName>("x_vel_forcing_func", 0, "The x-velocity mms forcing function.");
27  params.addParam<FunctionName>("y_vel_forcing_func", 0, "The y-velocity mms forcing function.");
28  params.addParam<FunctionName>("z_vel_forcing_func", 0, "The z-velocity mms forcing function.");
29  return params;
30 }
31 
32 INSMass::INSMass(const InputParameters & parameters)
33  : INSBase(parameters),
34  _pspg(getParam<bool>("pspg")),
35  _x_ffn(getFunction("x_vel_forcing_func")),
36  _y_ffn(getFunction("y_vel_forcing_func")),
37  _z_ffn(getFunction("z_vel_forcing_func"))
38 
39 {
40 }
41 
42 Real
44 {
45  // (div u) * q
46  // Note: we (arbitrarily) multiply this term by -1 so that it matches the -p(div v)
47  // term in the momentum equation. Not sure if that is really important?
48  Real r = -(_grad_u_vel[_qp](0) + _grad_v_vel[_qp](1) + _grad_w_vel[_qp](2)) * _test[_i][_qp];
49 
50  if (_pspg)
51  r += computeQpPGResidual();
52 
53  return r;
54 }
55 
56 Real
58 {
59  RealVectorValue viscous_term =
61  RealVectorValue transient_term =
62  _transient_term ? timeDerivativeTerm() : RealVectorValue(0, 0, 0);
63  RealVectorValue convective_term = _convective_term ? convectiveTerm() : RealVectorValue(0, 0, 0);
64  Real r = -1. / _rho[_qp] * tau() * _grad_test[_i][_qp] *
65  (strongPressureTerm() + gravityTerm() + viscous_term + convective_term + transient_term -
66  RealVectorValue(_x_ffn.value(_t, _q_point[_qp]),
67  _y_ffn.value(_t, _q_point[_qp]),
68  _z_ffn.value(_t, _q_point[_qp])));
69 
70  return r;
71 }
72 
73 Real
75 {
76  // Derivative wrt to p is zero
77  Real r = 0;
78 
79  // Unless we are doing GLS stabilization
80  if (_pspg)
81  r += computeQpPGJacobian();
82 
83  return r;
84 }
85 
86 Real
88 {
89  return -1. / _rho[_qp] * tau() * _grad_test[_i][_qp] * dStrongPressureDPressure();
90 }
91 
92 Real
94 {
95  if (jvar == _u_vel_var_number)
96  {
97  Real jac = -_grad_phi[_j][_qp](0) * _test[_i][_qp];
98  if (_pspg)
100  return jac;
101  }
102 
103  else if (jvar == _v_vel_var_number)
104  {
105  Real jac = -_grad_phi[_j][_qp](1) * _test[_i][_qp];
106  if (_pspg)
107  jac += computeQpPGOffDiagJacobian(1);
108  return jac;
109  }
110 
111  else if (jvar == _w_vel_var_number)
112  {
113  Real jac = -_grad_phi[_j][_qp](2) * _test[_i][_qp];
114  if (_pspg)
115  jac += computeQpPGOffDiagJacobian(2);
116  return jac;
117  }
118 
119  else
120  return 0.0;
121 }
122 
123 Real
125 {
126  RealVectorValue convective_term = _convective_term ? convectiveTerm() : RealVectorValue(0, 0, 0);
127  RealVectorValue d_convective_term_d_u_comp =
128  _convective_term ? dConvecDUComp(comp) : RealVectorValue(0, 0, 0);
129  RealVectorValue viscous_term =
131  RealVectorValue d_viscous_term_d_u_comp =
133  RealVectorValue transient_term =
134  _transient_term ? timeDerivativeTerm() : RealVectorValue(0, 0, 0);
135  RealVectorValue d_transient_term_d_u_comp =
136  _transient_term ? dTimeDerivativeDUComp(comp) : RealVectorValue(0, 0, 0);
137 
138  return -1. / _rho[_qp] * tau() * _grad_test[_i][_qp] *
139  (d_convective_term_d_u_comp + d_viscous_term_d_u_comp + d_transient_term_d_u_comp) -
140  1. / _rho[_qp] * dTauDUComp(comp) * _grad_test[_i][_qp] *
141  (convective_term + viscous_term + transient_term + strongPressureTerm() +
142  gravityTerm() - RealVectorValue(_x_ffn.value(_t, _q_point[_qp]),
143  _y_ffn.value(_t, _q_point[_qp]),
144  _z_ffn.value(_t, _q_point[_qp])));
145 }
INSBase::gravityTerm
virtual RealVectorValue gravityTerm()
Definition: INSBase.C:238
INSBase::strongPressureTerm
virtual RealVectorValue strongPressureTerm()
Definition: INSBase.C:214
INSMass::INSMass
INSMass(const InputParameters &parameters)
Definition: INSMass.C:32
INSMass::_z_ffn
const Function & _z_ffn
Definition: INSMass.h:44
INSBase::_convective_term
bool _convective_term
Definition: INSBase.h:109
INSBase::dStrongPressureDPressure
virtual RealVectorValue dStrongPressureDPressure()
Definition: INSBase.C:226
INSBase::dStrongViscDUCompLaplace
virtual RealVectorValue dStrongViscDUCompLaplace(unsigned comp)
Definition: INSBase.C:134
INSBase::dTimeDerivativeDUComp
virtual RealVectorValue dTimeDerivativeDUComp(unsigned comp)
Definition: INSBase.C:250
INSMass::computeQpPGOffDiagJacobian
virtual Real computeQpPGOffDiagJacobian(unsigned comp)
Definition: INSMass.C:124
INSBase::strongViscousTermLaplace
virtual RealVectorValue strongViscousTermLaplace()
Definition: INSBase.C:119
INSBase::strongViscousTermTraction
virtual RealVectorValue strongViscousTermTraction()
Definition: INSBase.C:126
INSMass::computeQpResidual
virtual Real computeQpResidual()
Definition: INSMass.C:43
INSMass::computeQpPGJacobian
virtual Real computeQpPGJacobian()
Definition: INSMass.C:87
INSBase::tau
virtual Real tau()
Definition: INSBase.C:270
INSBase::_u_vel_var_number
unsigned _u_vel_var_number
Definition: INSBase.h:96
INSMass.h
INSMass
This class computes the mass equation residual and Jacobian contributions for the incompressible Navi...
Definition: INSMass.h:25
INSBase::_grad_w_vel
const VariableGradient & _grad_w_vel
Definition: INSBase.h:77
validParams< INSBase >
InputParameters validParams< INSBase >()
Definition: INSBase.C:15
INSBase::convectiveTerm
virtual RealVectorValue convectiveTerm()
Definition: INSBase.C:96
INSMass::computeQpOffDiagJacobian
virtual Real computeQpOffDiagJacobian(unsigned jvar)
Definition: INSMass.C:93
INSBase::_v_vel_var_number
unsigned _v_vel_var_number
Definition: INSBase.h:97
INSBase::_rho
const MaterialProperty< Real > & _rho
Definition: INSBase.h:105
INSBase::dConvecDUComp
virtual RealVectorValue dConvecDUComp(unsigned comp)
Definition: INSBase.C:104
INSMass::computeQpJacobian
virtual Real computeQpJacobian()
Definition: INSMass.C:74
INSBase::_grad_u_vel
const VariableGradient & _grad_u_vel
Definition: INSBase.h:75
registerMooseObject
registerMooseObject("NavierStokesApp", INSMass)
INSBase::_w_vel_var_number
unsigned _w_vel_var_number
Definition: INSBase.h:98
INSMass::_pspg
bool _pspg
Definition: INSMass.h:41
INSBase::dStrongViscDUCompTraction
virtual RealVectorValue dStrongViscDUCompTraction(unsigned comp)
Definition: INSBase.C:143
INSBase::_grad_v_vel
const VariableGradient & _grad_v_vel
Definition: INSBase.h:76
INSBase::_laplace
bool _laplace
Definition: INSBase.h:108
INSMass::computeQpPGResidual
virtual Real computeQpPGResidual()
Definition: INSMass.C:57
INSMass::_x_ffn
const Function & _x_ffn
Definition: INSMass.h:42
INSBase::_transient_term
bool _transient_term
Definition: INSBase.h:110
INSMass::_y_ffn
const Function & _y_ffn
Definition: INSMass.h:43
validParams< INSMass >
InputParameters validParams< INSMass >()
Definition: INSMass.C:17
INSBase
This class computes strong and weak components of the INS governing equations.
Definition: INSBase.h:24
INSBase::timeDerivativeTerm
virtual RealVectorValue timeDerivativeTerm()
Definition: INSBase.C:244
INSBase::dTauDUComp
virtual Real dTauDUComp(unsigned comp)
Definition: INSBase.C:298