LCOV - code coverage report
Current view: top level - src/kernels - ConvectedMesh.C (source / functions) Hit Total Coverage
Test: idaholab/moose fsi: #31405 (292dce) with base fef103 Lines: 68 75 90.7 %
Date: 2025-09-04 07:53:22 Functions: 7 7 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 "ConvectedMesh.h"
      11             : 
      12             : registerMooseObject("FsiApp", ConvectedMesh);
      13             : 
      14             : InputParameters
      15          82 : ConvectedMesh::validParams()
      16             : {
      17          82 :   InputParameters params = INSBase::validParams();
      18          82 :   params.addClassDescription(
      19             :       "Corrects the convective derivative for situations in which the fluid mesh is dynamic.");
      20         164 :   params.addRequiredCoupledVar("disp_x", "The x displacement");
      21         164 :   params.addCoupledVar("disp_y", "The y displacement");
      22         164 :   params.addCoupledVar("disp_z", "The z displacement");
      23         164 :   params.addParam<MaterialPropertyName>("rho_name", "rho", "The name of the density");
      24         164 :   params.addParam<bool>(
      25         164 :       "supg", false, "Whether to perform SUPG stabilization of the momentum residuals");
      26          82 :   return params;
      27           0 : }
      28             : 
      29          44 : ConvectedMesh::ConvectedMesh(const InputParameters & parameters)
      30             :   : INSBase(parameters),
      31          44 :     _disp_x_dot(coupledDot("disp_x")),
      32          44 :     _d_disp_x_dot(coupledDotDu("disp_x")),
      33          44 :     _disp_x_id(coupled("disp_x")),
      34          88 :     _disp_y_dot(isCoupled("disp_y") ? coupledDot("disp_y") : _zero),
      35          88 :     _d_disp_y_dot(isCoupled("disp_y") ? coupledDotDu("disp_y") : _zero),
      36          44 :     _disp_y_id(coupled("disp_y")),
      37          44 :     _disp_z_dot(isCoupled("disp_z") ? coupledDot("disp_z") : _zero),
      38          44 :     _d_disp_z_dot(isCoupled("disp_z") ? coupledDotDu("disp_z") : _zero),
      39          44 :     _disp_z_id(coupled("disp_z")),
      40          88 :     _rho(getMaterialProperty<Real>("rho_name")),
      41         132 :     _supg(getParam<bool>("supg"))
      42             : {
      43          44 :   if (_var.number() == _u_vel_var_number)
      44          22 :     _component = 0;
      45          22 :   else if (_var.number() == _v_vel_var_number)
      46          22 :     _component = 1;
      47           0 :   else if (_var.number() == _w_vel_var_number)
      48           0 :     _component = 2;
      49             :   else
      50           0 :     paramError("variable", "The variable must match one of the velocity variables.");
      51          44 : }
      52             : 
      53             : Real
      54     7846720 : ConvectedMesh::strongResidual()
      55             : {
      56     7846720 :   return -_rho[_qp] * RealVectorValue(_disp_x_dot[_qp], _disp_y_dot[_qp], _disp_z_dot[_qp]) *
      57     7846720 :          _grad_u[_qp];
      58             : }
      59             : 
      60             : Real
      61     3707200 : ConvectedMesh::computeQpResidual()
      62             : {
      63     3707200 :   auto test = _test[_i][_qp];
      64     3707200 :   const auto U = relativeVelocity();
      65     3707200 :   if (_supg)
      66     3707200 :     test += tau() * _grad_test[_i][_qp] * U;
      67     3707200 :   return test * strongResidual();
      68             : }
      69             : 
      70             : Real
      71     4139520 : ConvectedMesh::computePGVelocityJacobian(const unsigned short component)
      72             : {
      73     4139520 :   const auto U = relativeVelocity();
      74     4139520 :   return strongResidual() * ((dTauDUComp(component) * _grad_test[_i][_qp] * U) +
      75     4139520 :                              (tau() * _grad_test[_i][_qp](component) * _phi[_j][_qp]));
      76             : }
      77             : 
      78             : Real
      79     2069760 : ConvectedMesh::computeQpJacobian()
      80             : {
      81     2069760 :   auto test = _test[_i][_qp];
      82     2069760 :   const auto U = relativeVelocity();
      83     2069760 :   if (_supg)
      84     2069760 :     test += tau() * _grad_test[_i][_qp] * U;
      85     2069760 :   auto jac = test * -_rho[_qp] *
      86     2069760 :              RealVectorValue(_disp_x_dot[_qp], _disp_y_dot[_qp], _disp_z_dot[_qp]) *
      87     2069760 :              _grad_phi[_j][_qp];
      88     2069760 :   if (_supg)
      89     2069760 :     jac += computePGVelocityJacobian(_component);
      90             : 
      91     2069760 :   return jac;
      92             : }
      93             : 
      94             : Real
      95     8279040 : ConvectedMesh::computeQpOffDiagJacobian(unsigned int jvar)
      96             : {
      97             :   mooseAssert(jvar != _var.number(), "Making sure I understand how old hand-coded Jacobians work.");
      98             : 
      99     8279040 :   auto test = _test[_i][_qp];
     100     8279040 :   const auto U = relativeVelocity();
     101     8279040 :   if (_supg)
     102     8279040 :     test += tau() * _grad_test[_i][_qp] * U;
     103             : 
     104     8279040 :   if (jvar == _disp_x_id)
     105     2069760 :     return test * -_rho[_qp] * _phi[_j][_qp] * _d_disp_x_dot[_qp] * _grad_u[_qp](0);
     106     6209280 :   else if (jvar == _disp_y_id)
     107     2069760 :     return test * -_rho[_qp] * _phi[_j][_qp] * _d_disp_y_dot[_qp] * _grad_u[_qp](1);
     108     4139520 :   else if (jvar == _disp_z_id)
     109           0 :     return test * -_rho[_qp] * _phi[_j][_qp] * _d_disp_z_dot[_qp] * _grad_u[_qp](2);
     110     4139520 :   else if (jvar == _u_vel_var_number)
     111             :   {
     112     1034880 :     if (_supg)
     113     1034880 :       return computePGVelocityJacobian(0);
     114             :     else
     115             :       return 0;
     116             :   }
     117     3104640 :   else if (jvar == _v_vel_var_number)
     118             :   {
     119     1034880 :     if (_supg)
     120     1034880 :       return computePGVelocityJacobian(1);
     121             :     else
     122             :       return 0;
     123             :   }
     124     2069760 :   else if (jvar == _w_vel_var_number)
     125             :   {
     126           0 :     if (_supg)
     127           0 :       return computePGVelocityJacobian(2);
     128             :     else
     129             :       return 0;
     130             :   }
     131             :   else
     132             :     return 0.0;
     133             : }

Generated by: LCOV version 1.14