11 #include "MooseMesh.h"
19 InputParameters params = validParams<Kernel>();
21 params.addClassDescription(
"This class computes the 'split' momentum equation residual.");
23 params.addRequiredCoupledVar(
"u",
"x-velocity");
24 params.addCoupledVar(
"v",
"y-velocity");
25 params.addCoupledVar(
"w",
"z-velocity");
27 params.addRequiredCoupledVar(
"a1",
"x-acceleration");
28 params.addCoupledVar(
"a2",
"y-acceleration");
29 params.addCoupledVar(
"a3",
"z-acceleration");
32 params.addRequiredParam<RealVectorValue>(
"gravity",
"Direction of the gravity vector");
33 params.addRequiredParam<
unsigned>(
35 "0,1,2 depending on if we are solving the x,y,z component of the momentum equation");
38 params.addParam<MaterialPropertyName>(
"mu_name",
"mu",
"The name of the dynamic viscosity");
39 params.addParam<MaterialPropertyName>(
"rho_name",
"rho",
"The name of the density");
48 _u_vel(coupledValue(
"u")),
49 _v_vel(_mesh.dimension() >= 2 ? coupledValue(
"v") : _zero),
50 _w_vel(_mesh.dimension() == 3 ? coupledValue(
"w") : _zero),
52 _a1(coupledValue(
"a1")),
53 _a2(_mesh.dimension() >= 2 ? coupledValue(
"a2") : _zero),
54 _a3(_mesh.dimension() == 3 ? coupledValue(
"a3") : _zero),
57 _grad_u_vel(coupledGradient(
"u")),
58 _grad_v_vel(_mesh.dimension() >= 2 ? coupledGradient(
"v") : _grad_zero),
59 _grad_w_vel(_mesh.dimension() == 3 ? coupledGradient(
"w") : _grad_zero),
62 _u_vel_var_number(coupled(
"u")),
63 _v_vel_var_number(_mesh.dimension() >= 2 ? coupled(
"v") :
libMesh::invalid_uint),
64 _w_vel_var_number(_mesh.dimension() == 3 ? coupled(
"w") :
libMesh::invalid_uint),
66 _a1_var_number(coupled(
"a1")),
67 _a2_var_number(_mesh.dimension() >= 2 ? coupled(
"a2") :
libMesh::invalid_uint),
68 _a3_var_number(_mesh.dimension() == 3 ? coupled(
"a3") :
libMesh::invalid_uint),
71 _gravity(getParam<RealVectorValue>(
"gravity")),
72 _component(getParam<unsigned>(
"component")),
75 _mu(getMaterialProperty<Real>(
"mu_name")),
76 _rho(getMaterialProperty<Real>(
"rho_name"))
84 RealVectorValue a(
_a1[_qp],
_a2[_qp],
_a3[_qp]);
112 RealTensorValue grad_test;
113 for (
unsigned k = 0; k < 3; ++k)
114 grad_test(
_component, k) = _grad_test[_i][_qp](k);
121 Real symmetric_part = a(
_component) * _test[_i][_qp];
125 Real convective_part = (grad_U * U) * test;
128 Real viscous_part = (
_mu[_qp] /
_rho[_qp]) * tau.contract(grad_test);
130 return symmetric_part + convective_part + viscous_part;
138 return _phi[_j][_qp] * _test[_i][_qp];
147 RealTensorValue dtau;
150 unsigned vel_index = 99;
156 dtau(0, 0) = 2. * _grad_phi[_j][_qp](0);
157 dtau(0, 1) = _grad_phi[_j][_qp](1);
158 dtau(0, 2) = _grad_phi[_j][_qp](2);
159 dtau(1, 0) = _grad_phi[_j][_qp](1);
160 dtau(2, 0) = _grad_phi[_j][_qp](2);
165 dtau(0, 1) = _grad_phi[_j][_qp](0);
166 dtau(1, 0) = _grad_phi[_j][_qp](0);
167 dtau(1, 1) = 2. * _grad_phi[_j][_qp](1);
168 dtau(1, 2) = _grad_phi[_j][_qp](2);
169 dtau(2, 1) = _grad_phi[_j][_qp](2);
175 _grad_phi[_j][_qp](0);
177 _grad_phi[_j][_qp](1);
178 dtau(2, 0) = _grad_phi[_j][_qp](0);
179 dtau(2, 1) = _grad_phi[_j][_qp](1);
180 dtau(2, 2) = 2. * _grad_phi[_j][_qp](2);
184 RealVectorValue test;
191 RealTensorValue grad_test;
192 for (
unsigned k = 0; k < 3; ++k)
193 grad_test(
_component, k) = _grad_test[_i][_qp](k);
196 RealVectorValue convective_jac = _phi[_j][_qp] * RealVectorValue(
_grad_u_vel[_qp](vel_index),
201 convective_jac(vel_index) += U * _grad_phi[_j][_qp];
202 Real convective_part = convective_jac * test;
205 Real viscous_part = (
_mu[_qp] /
_rho[_qp]) * dtau.contract(grad_test);
208 return convective_part + viscous_part;