LCOV - code coverage report
Current view: top level - src/kernels - ConvectedMeshPSPG.C (source / functions) Hit Total Coverage
Test: idaholab/moose fsi: #31405 (292dce) with base fef103 Lines: 58 67 86.6 %
Date: 2025-09-04 07:53:22 Functions: 9 9 100.0 %
Legend: Lines: hit not hit

          Line data    Source code
       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             : 
      12             : registerMooseObject("FsiApp", ConvectedMeshPSPG);
      13             : 
      14             : InputParameters
      15          41 : ConvectedMeshPSPG::validParams()
      16             : {
      17          41 :   InputParameters params = INSBase::validParams();
      18          41 :   params.addClassDescription(
      19             :       "Corrects the convective derivative for situations in which the fluid mesh is dynamic.");
      20          82 :   params.addRequiredCoupledVar("disp_x", "The x displacement");
      21          82 :   params.addCoupledVar("disp_y", "The y displacement");
      22          82 :   params.addCoupledVar("disp_z", "The z displacement");
      23          82 :   params.addParam<MaterialPropertyName>("rho_name", "rho", "The name of the density");
      24          41 :   return params;
      25           0 : }
      26             : 
      27          22 : ConvectedMeshPSPG::ConvectedMeshPSPG(const InputParameters & parameters)
      28             :   : INSBase(parameters),
      29          22 :     _disp_x_dot(coupledDot("disp_x")),
      30          22 :     _d_disp_x_dot(coupledDotDu("disp_x")),
      31          22 :     _disp_x_id(coupled("disp_x")),
      32          44 :     _disp_y_dot(isCoupled("disp_y") ? coupledDot("disp_y") : _zero),
      33          44 :     _d_disp_y_dot(isCoupled("disp_y") ? coupledDotDu("disp_y") : _zero),
      34          22 :     _disp_y_id(coupled("disp_y")),
      35          22 :     _disp_z_dot(isCoupled("disp_z") ? coupledDot("disp_z") : _zero),
      36          22 :     _d_disp_z_dot(isCoupled("disp_z") ? coupledDotDu("disp_z") : _zero),
      37          22 :     _disp_z_id(coupled("disp_z")),
      38          66 :     _rho(getMaterialProperty<Real>("rho_name"))
      39             : {
      40          22 : }
      41             : 
      42             : RealVectorValue
      43     3923360 : ConvectedMeshPSPG::strongResidual()
      44             : {
      45             :   const auto minus_rho_ddisp_dt =
      46     3923360 :       -_rho[_qp] * RealVectorValue(_disp_x_dot[_qp], _disp_y_dot[_qp], _disp_z_dot[_qp]);
      47     3923360 :   return RealVectorValue(minus_rho_ddisp_dt * _grad_u_vel[_qp],
      48     3923360 :                          minus_rho_ddisp_dt * _grad_v_vel[_qp],
      49     3923360 :                          minus_rho_ddisp_dt * _grad_w_vel[_qp]);
      50             : }
      51             : 
      52             : RealVectorValue
      53     2069760 : ConvectedMeshPSPG::dStrongResidualDDisp(const unsigned short component)
      54             : {
      55     6209280 :   const auto & ddisp_dot = [&]() -> const VariableValue &
      56             :   {
      57     2069760 :     switch (component)
      58             :     {
      59     1034880 :       case 0:
      60     1034880 :         return _d_disp_x_dot;
      61     1034880 :       case 1:
      62     1034880 :         return _d_disp_y_dot;
      63           0 :       case 2:
      64           0 :         return _d_disp_z_dot;
      65           0 :       default:
      66           0 :         mooseError("Invalid component");
      67             :     }
      68     2069760 :   }();
      69             : 
      70             :   // Only non-zero component will be from 'component'
      71             :   RealVectorValue ddisp_dt;
      72     2069760 :   ddisp_dt(component) = _phi[_j][_qp] * ddisp_dot[_qp];
      73             : 
      74     2069760 :   const auto minus_rho_ddisp_dt = -_rho[_qp] * ddisp_dt;
      75     2069760 :   return RealVectorValue(minus_rho_ddisp_dt * _grad_u_vel[_qp],
      76     2069760 :                          minus_rho_ddisp_dt * _grad_v_vel[_qp],
      77     2069760 :                          minus_rho_ddisp_dt * _grad_w_vel[_qp]);
      78             : }
      79             : 
      80             : RealVectorValue
      81     2069760 : ConvectedMeshPSPG::dStrongResidualDVel(const unsigned short component)
      82             : {
      83             :   const auto minus_rho_ddisp_dt =
      84     2069760 :       -_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     2069760 :   ret(component) = minus_rho_ddisp_dt * _grad_phi[_j][_qp];
      89     2069760 :   return ret;
      90             : }
      91             : 
      92             : Real
      93     1853600 : ConvectedMeshPSPG::computeQpResidual()
      94             : {
      95     1853600 :   return -tau() / _rho[_qp] * _grad_test[_i][_qp] * strongResidual();
      96             : }
      97             : 
      98             : Real
      99     1034880 : ConvectedMeshPSPG::computeQpJacobian()
     100             : {
     101             :   // No derivative with respect to pressure
     102     1034880 :   return 0;
     103             : }
     104             : 
     105             : Real
     106     4139520 : ConvectedMeshPSPG::computeQpOffDiagJacobian(unsigned int jvar)
     107             : {
     108             :   mooseAssert(jvar != _var.number(), "Making sure I understand how old hand-coded Jacobians work.");
     109             : 
     110     4139520 :   if (jvar == _disp_x_id)
     111     1034880 :     return -tau() / _rho[_qp] * _grad_test[_i][_qp] * dStrongResidualDDisp(0);
     112     3104640 :   else if (jvar == _disp_y_id)
     113     1034880 :     return -tau() / _rho[_qp] * _grad_test[_i][_qp] * dStrongResidualDDisp(1);
     114     2069760 :   else if (jvar == _disp_z_id)
     115           0 :     return -tau() / _rho[_qp] * _grad_test[_i][_qp] * dStrongResidualDDisp(2);
     116     2069760 :   else if (jvar == _u_vel_var_number)
     117     2069760 :     return -dTauDUComp(0) / _rho[_qp] * _grad_test[_i][_qp] * strongResidual() -
     118     1034880 :            tau() / _rho[_qp] * _grad_test[_i][_qp] * dStrongResidualDVel(0);
     119     1034880 :   else if (jvar == _v_vel_var_number)
     120     2069760 :     return -dTauDUComp(1) / _rho[_qp] * _grad_test[_i][_qp] * strongResidual() -
     121     1034880 :            tau() / _rho[_qp] * _grad_test[_i][_qp] * dStrongResidualDVel(1);
     122           0 :   else if (jvar == _w_vel_var_number)
     123           0 :     return -dTauDUComp(2) / _rho[_qp] * _grad_test[_i][_qp] * strongResidual() -
     124           0 :            tau() / _rho[_qp] * _grad_test[_i][_qp] * dStrongResidualDVel(2);
     125             :   else
     126             :     return 0.0;
     127             : }

Generated by: LCOV version 1.14