LCOV - code coverage report
Current view: top level - src/bcs - INSFEFluidEnergyDirichletBC.C (source / functions) Hit Total Coverage
Test: idaholab/moose navier_stokes: 9fc4b0 Lines: 39 42 92.9 %
Date: 2025-08-14 10:14:56 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 "INSFEFluidEnergyDirichletBC.h"
      11             : 
      12             : registerMooseObject("NavierStokesApp", INSFEFluidEnergyDirichletBC);
      13             : registerMooseObjectRenamed("NavierStokesApp",
      14             :                            MDFluidEnergyDirichletBC,
      15             :                            "02/01/2024 00:00",
      16             :                            INSFEFluidEnergyDirichletBC);
      17             : 
      18             : InputParameters
      19          76 : INSFEFluidEnergyDirichletBC::validParams()
      20             : {
      21          76 :   InputParameters params = NodalBC::validParams();
      22             : 
      23          76 :   params.addClassDescription(
      24             :       "Imposes a Dirichlet condition on temperature at inlets. Is not applied at outlets");
      25         152 :   params.addRequiredCoupledVar("u", "velocity in x-direction");
      26         152 :   params.addCoupledVar("v", "velocity in y-direction"); // required in 2D/3D
      27         152 :   params.addCoupledVar("w", "velocity in z-direction"); // required in 3D
      28             : 
      29         152 :   params.addParam<FunctionName>("v_fn", "Velocity function with time at the boundary");
      30             : 
      31         152 :   params.addParam<Real>("T_scale", 1.0, "Coefficient to multiply the temperature with");
      32         152 :   params.addParam<FunctionName>("T_fn", "A function that describes the temperature");
      33         152 :   params.addCoupledVar("T_scalar", "A scalar value is multiplied by the temperature");
      34             : 
      35         152 :   params.addRequiredParam<VectorValue<Real>>("out_norm", "out norm of the boundary");
      36             : 
      37          76 :   return params;
      38           0 : }
      39             : 
      40          38 : INSFEFluidEnergyDirichletBC::INSFEFluidEnergyDirichletBC(const InputParameters & parameters)
      41             :   : NodalBC(parameters),
      42          38 :     _out_norm(getParam<VectorValue<Real>>("out_norm")),
      43          38 :     _u_vel(coupledValueOld("u")),
      44          38 :     _v_vel(_mesh.dimension() >= 2 ? coupledValueOld("v") : _zero),
      45          38 :     _w_vel(_mesh.dimension() == 3 ? coupledValueOld("w") : _zero),
      46          76 :     _T_scale(getParam<Real>("T_scale")),
      47          95 :     _T_scalar(isParamValid("T_scalar") ? coupledScalarValue("T_scalar") : _zero),
      48          76 :     _has_vbc(isParamValid("v_fn")),
      49          38 :     _velocity_fn(_has_vbc ? &getFunction("v_fn") : NULL),
      50         133 :     _T_fn(isParamValid("T_fn") ? &getFunction("T_fn") : NULL)
      51             : {
      52         114 :   if (isParamValid("T_scalar") == isParamValid("T_fn"))
      53           0 :     mooseError("Please provide one and only one of 'T_scalar' and 'T_fn'");
      54          38 : }
      55             : 
      56             : bool
      57      165595 : INSFEFluidEnergyDirichletBC::isInlet() const
      58             : {
      59      165595 :   RealVectorValue vec_vel(_u_vel[0], _v_vel[0], _w_vel[0]);
      60             : 
      61             :   Real v_bc = 0.0;
      62      165595 :   if (_has_vbc)
      63           0 :     v_bc = -_velocity_fn->value(_t, *_current_node);
      64             :   else
      65             :     v_bc = vec_vel * _out_norm;
      66             : 
      67      165595 :   if (v_bc < 0.) // Inlet
      68             :     return true;
      69             :   else
      70       61205 :     return false;
      71             : }
      72             : 
      73             : bool
      74      116590 : INSFEFluidEnergyDirichletBC::shouldApply() const
      75             : {
      76      116590 :   return isInlet();
      77             : }
      78             : 
      79             : Real
      80       45815 : INSFEFluidEnergyDirichletBC::computeQpResidual()
      81             : {
      82       45815 :   if (isInlet())
      83             :   {
      84       91630 :     Real T_bc = isParamValid("T_scalar") ? _T_scalar[0] : _T_fn->value(_t, *_current_node);
      85       45815 :     return _u[_qp] - _T_scale * T_bc;
      86             :   }
      87             :   else
      88             :     return 0.0;
      89             : }
      90             : 
      91             : Real
      92        3190 : INSFEFluidEnergyDirichletBC::computeQpJacobian()
      93             : {
      94        3190 :   return isInlet() ? 1.0 : 0.0;
      95             : }
      96             : 
      97             : Real
      98        6380 : INSFEFluidEnergyDirichletBC::computeQpOffDiagJacobian(unsigned int /*jvar*/)
      99             : {
     100        6380 :   return 0.0;
     101             : }

Generated by: LCOV version 1.14