https://mooseframework.inl.gov
Loading...
Searching...
No Matches
ConvectedMeshPSPG.C
Go to the documentation of this file.
1//* This file is part of the MOOSE framework
2//* https://mooseframework.inl.gov
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 "ConvectedMeshPSPG.h"
11
13
16{
19 "Corrects the convective derivative for situations in which the fluid mesh is dynamic.");
20 params.addRequiredCoupledVar("disp_x", "The x displacement");
21 params.addCoupledVar("disp_y", "The y displacement");
22 params.addCoupledVar("disp_z", "The z displacement");
23 params.addParam<MaterialPropertyName>("rho_name", "rho", "The name of the density");
24 return params;
25}
26
28 : INSBase(parameters),
29 _disp_x_dot(coupledDot("disp_x")),
30 _d_disp_x_dot(coupledDotDu("disp_x")),
31 _disp_x_id(coupled("disp_x")),
32 _disp_y_dot(isCoupled("disp_y") ? coupledDot("disp_y") : _zero),
33 _d_disp_y_dot(isCoupled("disp_y") ? coupledDotDu("disp_y") : _zero),
34 _disp_y_id(coupled("disp_y")),
35 _disp_z_dot(isCoupled("disp_z") ? coupledDot("disp_z") : _zero),
36 _d_disp_z_dot(isCoupled("disp_z") ? coupledDotDu("disp_z") : _zero),
37 _disp_z_id(coupled("disp_z")),
38 _rho(getMaterialProperty<Real>("rho_name"))
39{
40}
41
42RealVectorValue
44{
45 const auto minus_rho_ddisp_dt =
46 -_rho[_qp] * RealVectorValue(_disp_x_dot[_qp], _disp_y_dot[_qp], _disp_z_dot[_qp]);
47 return RealVectorValue(minus_rho_ddisp_dt * _grad_u_vel[_qp],
48 minus_rho_ddisp_dt * _grad_v_vel[_qp],
49 minus_rho_ddisp_dt * _grad_w_vel[_qp]);
50}
51
52RealVectorValue
53ConvectedMeshPSPG::dStrongResidualDDisp(const unsigned short component)
54{
55 const auto & ddisp_dot = [&]() -> const VariableValue &
56 {
57 switch (component)
58 {
59 case 0:
60 return _d_disp_x_dot;
61 case 1:
62 return _d_disp_y_dot;
63 case 2:
64 return _d_disp_z_dot;
65 default:
66 mooseError("Invalid component");
67 }
68 }();
69
70 // Only non-zero component will be from 'component'
71 RealVectorValue ddisp_dt;
72 ddisp_dt(component) = _phi[_j][_qp] * ddisp_dot[_qp];
73
74 const auto minus_rho_ddisp_dt = -_rho[_qp] * ddisp_dt;
75 return RealVectorValue(minus_rho_ddisp_dt * _grad_u_vel[_qp],
76 minus_rho_ddisp_dt * _grad_v_vel[_qp],
77 minus_rho_ddisp_dt * _grad_w_vel[_qp]);
78}
79
80RealVectorValue
81ConvectedMeshPSPG::dStrongResidualDVel(const unsigned short component)
82{
83 const auto minus_rho_ddisp_dt =
84 -_rho[_qp] * RealVectorValue(_disp_x_dot[_qp], _disp_y_dot[_qp], _disp_z_dot[_qp]);
85
86 // Only non-zero component will be from 'component'
87 RealVectorValue ret;
88 ret(component) = minus_rho_ddisp_dt * _grad_phi[_j][_qp];
89 return ret;
90}
91
92Real
97
98Real
100{
101 // No derivative with respect to pressure
102 return 0;
103}
104
105Real
107{
108 mooseAssert(jvar != _var.number(), "Making sure I understand how old hand-coded Jacobians work.");
109
110 if (jvar == _disp_x_id)
111 return -tau() / _rho[_qp] * _grad_test[_i][_qp] * dStrongResidualDDisp(0);
112 else if (jvar == _disp_y_id)
113 return -tau() / _rho[_qp] * _grad_test[_i][_qp] * dStrongResidualDDisp(1);
114 else if (jvar == _disp_z_id)
115 return -tau() / _rho[_qp] * _grad_test[_i][_qp] * dStrongResidualDDisp(2);
116 else if (jvar == _u_vel_var_number)
117 return -dTauDUComp(0) / _rho[_qp] * _grad_test[_i][_qp] * strongResidual() -
119 else if (jvar == _v_vel_var_number)
120 return -dTauDUComp(1) / _rho[_qp] * _grad_test[_i][_qp] * strongResidual() -
122 else if (jvar == _w_vel_var_number)
123 return -dTauDUComp(2) / _rho[_qp] * _grad_test[_i][_qp] * strongResidual() -
125 else
126 return 0.0;
127}
registerMooseObject("FsiApp", ConvectedMeshPSPG)
Computes residual and Jacobian contributions for the PSPG stabilization term for mesh advection.
const VariableValue & _disp_x_dot
virtual Real computeQpResidual() override
const VariableValue & _d_disp_x_dot
RealVectorValue dStrongResidualDVel(unsigned short component)
const unsigned int _disp_z_id
static InputParameters validParams()
virtual Real computeQpOffDiagJacobian(unsigned int jvar) override
virtual Real computeQpJacobian() override
const VariableValue & _d_disp_y_dot
ConvectedMeshPSPG(const InputParameters &parameters)
RealVectorValue dStrongResidualDDisp(unsigned short component)
const unsigned int _disp_x_id
RealVectorValue strongResidual()
Compute the strong residual, e.g.
const VariableValue & _disp_z_dot
const VariableValue & _d_disp_z_dot
const MaterialProperty< Real > & _rho
const unsigned int _disp_y_id
const VariableValue & _disp_y_dot
This class computes strong and weak components of the INS governing equations.
Definition INSBase.h:19
const VariableGradient & _grad_w_vel
Definition INSBase.h:106
virtual Real tau()
Definition INSBase.C:321
const VariableGradient & _grad_u_vel
Definition INSBase.h:104
unsigned _w_vel_var_number
Definition INSBase.h:127
static InputParameters validParams()
Definition INSBase.C:15
const VariableGradient & _grad_v_vel
Definition INSBase.h:105
virtual Real dTauDUComp(unsigned comp)
Definition INSBase.C:349
unsigned _v_vel_var_number
Definition INSBase.h:126
unsigned _u_vel_var_number
Definition INSBase.h:125
void addRequiredCoupledVar(const std::string &name, const std::string &doc_string)
void addParam(const std::string &name, const std::initializer_list< typename T::value_type > &value, const std::string &doc_string)
void addClassDescription(const std::string &doc_string)
void addCoupledVar(const std::string &name, const std::string &doc_string)
unsigned int _qp
unsigned int _j
unsigned int _i
MooseVariable & _var
const VariablePhiValue & _phi
const VariablePhiGradient & _grad_phi
const VariableTestGradient & _grad_test
void mooseError(Args &&... args) const
unsigned int number() const
VariableValueTempl< false > VariableValue