www.mooseframework.org
INSMomentumBase.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 "INSMomentumBase.h"
11 #include "Function.h"
12 
13 template <>
14 InputParameters
16 {
17  InputParameters params = validParams<INSBase>();
18 
19  params.addRequiredParam<unsigned>("component", "The velocity component that this is applied to.");
20  params.addParam<bool>(
21  "integrate_p_by_parts", true, "Whether to integrate the pressure term by parts.");
22  params.addParam<bool>(
23  "supg", false, "Whether to perform SUPG stabilization of the momentum residuals");
24  params.addParam<FunctionName>("forcing_func", 0, "The mms forcing function.");
25  return params;
26 }
27 
28 INSMomentumBase::INSMomentumBase(const InputParameters & parameters)
29  : INSBase(parameters),
30  _component(getParam<unsigned>("component")),
31  _integrate_p_by_parts(getParam<bool>("integrate_p_by_parts")),
32  _supg(getParam<bool>("supg")),
33  _ffn(getFunction("forcing_func"))
34 {
35  if (_supg && !_convective_term)
36  mooseError("It doesn't make sense to conduct SUPG stabilization without a convective term.");
37 }
38 
39 Real
41 {
42  Real r = 0;
43 
44  // viscous term
46 
47  // pressure term
49  r += _grad_test[_i][_qp](_component) * weakPressureTerm();
50  else
51  r += _test[_i][_qp] * strongPressureTerm()(_component);
52 
53  // body force term
54  r += _test[_i][_qp] * (gravityTerm()(_component) - _ffn.value(_t, _q_point[_qp]));
55 
56  // convective term
57  if (_convective_term)
58  r += _test[_i][_qp] * convectiveTerm()(_component);
59 
60  if (_supg)
61  r += computeQpPGResidual();
62 
63  return r;
64 }
65 
66 Real
68 {
69  RealVectorValue U(_u_vel[_qp], _v_vel[_qp], _w_vel[_qp]);
70 
71  RealVectorValue convective_term = _convective_term ? convectiveTerm() : RealVectorValue(0, 0, 0);
72  RealVectorValue viscous_term =
74  RealVectorValue transient_term =
75  _transient_term ? timeDerivativeTerm() : RealVectorValue(0, 0, 0);
76 
77  return tau() * U * _grad_test[_i][_qp] *
78  ((convective_term + viscous_term + transient_term + strongPressureTerm() +
79  gravityTerm())(_component)-_ffn.value(_t, _q_point[_qp]));
80 
81  // For GLS as opposed to SUPG stabilization, one would need to modify the test function functional
82  // space to include second derivatives of the Galerkin test functions corresponding to the viscous
83  // term. This would look like:
84  // Real lap_test =
85  // _second_test[_i][_qp](0, 0) + _second_test[_i][_qp](1, 1) + _second_test[_i][_qp](2, 2);
86 
87  // Real pg_viscous_r = -_mu[_qp] * lap_test * tau() *
88  // (convective_term + viscous_term + strongPressureTerm()(_component) +
89  // gravityTerm())(_component);
90 }
91 
92 Real
94 {
95  Real jac = 0;
96 
97  // viscous term
99 
100  // convective term
101  if (_convective_term)
102  jac += _test[_i][_qp] * dConvecDUComp(_component)(_component);
103 
104  if (_supg)
106 
107  return jac;
108 }
109 
110 Real
112 {
113  RealVectorValue U(_u_vel[_qp], _v_vel[_qp], _w_vel[_qp]);
114  RealVectorValue d_U_d_U_comp(0, 0, 0);
115  d_U_d_U_comp(comp) = _phi[_j][_qp];
116 
117  Real convective_term = _convective_term ? convectiveTerm()(_component) : 0;
118  Real d_convective_term_d_u_comp = _convective_term ? dConvecDUComp(comp)(_component) : 0;
119  Real viscous_term =
121  Real d_viscous_term_d_u_comp = _laplace ? dStrongViscDUCompLaplace(comp)(_component)
123  Real transient_term = _transient_term ? timeDerivativeTerm()(_component) : 0;
124  Real d_transient_term_d_u_comp = _transient_term ? dTimeDerivativeDUComp(comp)(_component) : 0;
125 
126  return dTauDUComp(comp) * U * _grad_test[_i][_qp] *
127  (convective_term + viscous_term + strongPressureTerm()(_component) +
128  gravityTerm()(_component) + transient_term - _ffn.value(_t, _q_point[_qp])) +
129  tau() * d_U_d_U_comp * _grad_test[_i][_qp] *
130  (convective_term + viscous_term + strongPressureTerm()(_component) +
131  gravityTerm()(_component) + transient_term - _ffn.value(_t, _q_point[_qp])) +
132  tau() * U * _grad_test[_i][_qp] *
133  (d_convective_term_d_u_comp + d_viscous_term_d_u_comp + d_transient_term_d_u_comp);
134 }
135 
136 Real
138 {
139  Real jac = 0;
140  if (jvar == _u_vel_var_number)
141  {
142  Real convective_term = _convective_term ? _test[_i][_qp] * dConvecDUComp(0)(_component) : 0.;
143  Real viscous_term = computeQpOffDiagJacobianViscousPart(jvar);
144 
145  jac += convective_term + viscous_term;
146 
147  if (_supg)
148  jac += computeQpPGJacobian(0);
149 
150  return jac;
151  }
152  else if (jvar == _v_vel_var_number)
153  {
154  Real convective_term = _convective_term ? _test[_i][_qp] * dConvecDUComp(1)(_component) : 0.;
155  Real viscous_term = computeQpOffDiagJacobianViscousPart(jvar);
156 
157  jac += convective_term + viscous_term;
158 
159  if (_supg)
160  jac += computeQpPGJacobian(1);
161 
162  return jac;
163  }
164  else if (jvar == _w_vel_var_number)
165  {
166  Real convective_term = _convective_term ? _test[_i][_qp] * dConvecDUComp(2)(_component) : 0.;
167  Real viscous_term = computeQpOffDiagJacobianViscousPart(jvar);
168 
169  jac += convective_term + viscous_term;
170 
171  if (_supg)
172  jac += computeQpPGJacobian(2);
173 
174  return jac;
175  }
176 
177  else if (jvar == _p_var_number)
178  {
180  jac += _grad_test[_i][_qp](_component) * dWeakPressureDPressure();
181  else
182  jac += _test[_i][_qp] * dStrongPressureDPressure()(_component);
183 
184  if (_supg)
185  {
186  RealVectorValue U(_u_vel[_qp], _v_vel[_qp], _w_vel[_qp]);
187  jac += tau() * U * _grad_test[_i][_qp] * dStrongPressureDPressure()(_component);
188  }
189 
190  return jac;
191  }
192 
193  else
194  return 0;
195 }
INSBase::gravityTerm
virtual RealVectorValue gravityTerm()
Definition: INSBase.C:238
INSBase::strongPressureTerm
virtual RealVectorValue strongPressureTerm()
Definition: INSBase.C:214
INSMomentumBase::computeQpPGJacobian
virtual Real computeQpPGJacobian(unsigned comp)
Definition: INSMomentumBase.C:111
INSBase::_v_vel
const VariableValue & _v_vel
Definition: INSBase.h:70
INSMomentumBase::computeQpOffDiagJacobianViscousPart
virtual Real computeQpOffDiagJacobianViscousPart(unsigned jvar)=0
INSBase::_convective_term
bool _convective_term
Definition: INSBase.h:109
INSMomentumBase::_component
unsigned _component
Definition: INSMomentumBase.h:43
INSBase::dWeakPressureDPressure
virtual Real dWeakPressureDPressure()
Definition: INSBase.C:232
INSBase::dStrongPressureDPressure
virtual RealVectorValue dStrongPressureDPressure()
Definition: INSBase.C:226
INSMomentumBase::_integrate_p_by_parts
bool _integrate_p_by_parts
Definition: INSMomentumBase.h:44
INSMomentumBase::computeQpResidual
virtual Real computeQpResidual()
Definition: INSMomentumBase.C:40
INSBase::dStrongViscDUCompLaplace
virtual RealVectorValue dStrongViscDUCompLaplace(unsigned comp)
Definition: INSBase.C:134
INSBase::dTimeDerivativeDUComp
virtual RealVectorValue dTimeDerivativeDUComp(unsigned comp)
Definition: INSBase.C:250
INSMomentumBase::INSMomentumBase
INSMomentumBase(const InputParameters &parameters)
Definition: INSMomentumBase.C:28
validParams< INSMomentumBase >
InputParameters validParams< INSMomentumBase >()
Definition: INSMomentumBase.C:15
INSBase::strongViscousTermLaplace
virtual RealVectorValue strongViscousTermLaplace()
Definition: INSBase.C:119
INSBase::strongViscousTermTraction
virtual RealVectorValue strongViscousTermTraction()
Definition: INSBase.C:126
INSMomentumBase.h
INSBase::_p_var_number
unsigned _p_var_number
Definition: INSBase.h:99
INSMomentumBase::computeQpPGResidual
virtual Real computeQpPGResidual()
Definition: INSMomentumBase.C:67
INSBase::tau
virtual Real tau()
Definition: INSBase.C:270
INSBase::_u_vel_var_number
unsigned _u_vel_var_number
Definition: INSBase.h:96
INSMomentumBase::computeQpJacobian
virtual Real computeQpJacobian()
Definition: INSMomentumBase.C:93
validParams< INSBase >
InputParameters validParams< INSBase >()
Definition: INSBase.C:15
INSBase::convectiveTerm
virtual RealVectorValue convectiveTerm()
Definition: INSBase.C:96
INSBase::_v_vel_var_number
unsigned _v_vel_var_number
Definition: INSBase.h:97
INSBase::dConvecDUComp
virtual RealVectorValue dConvecDUComp(unsigned comp)
Definition: INSBase.C:104
INSBase::_u_vel
const VariableValue & _u_vel
Definition: INSBase.h:69
INSBase::weakPressureTerm
virtual Real weakPressureTerm()
Definition: INSBase.C:220
INSBase::_w_vel_var_number
unsigned _w_vel_var_number
Definition: INSBase.h:98
INSMomentumBase::_supg
bool _supg
Definition: INSMomentumBase.h:45
INSBase::dStrongViscDUCompTraction
virtual RealVectorValue dStrongViscDUCompTraction(unsigned comp)
Definition: INSBase.C:143
INSMomentumBase::computeQpResidualViscousPart
virtual Real computeQpResidualViscousPart()=0
INSBase::_laplace
bool _laplace
Definition: INSBase.h:108
INSBase::_w_vel
const VariableValue & _w_vel
Definition: INSBase.h:71
INSMomentumBase::computeQpOffDiagJacobian
virtual Real computeQpOffDiagJacobian(unsigned jvar)
Definition: INSMomentumBase.C:137
INSBase::_transient_term
bool _transient_term
Definition: INSBase.h:110
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
INSMomentumBase::_ffn
const Function & _ffn
Definition: INSMomentumBase.h:46
INSMomentumBase::computeQpJacobianViscousPart
virtual Real computeQpJacobianViscousPart()=0
INSBase::dTauDUComp
virtual Real dTauDUComp(unsigned comp)
Definition: INSBase.C:298