LCOV - code coverage report
Current view: top level - src/functormaterials - NSFVFrictionFlowDiodeFunctorMaterial.C (source / functions) Hit Total Coverage
Test: idaholab/moose navier_stokes: ba1ead Lines: 40 41 97.6 %
Date: 2025-08-13 06:50:25 Functions: 6 14 42.9 %
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 "NSFVFrictionFlowDiodeFunctorMaterial.h"
      11             : #include "NS.h"
      12             : #include "SystemBase.h"
      13             : #include "MooseVariableFV.h"
      14             : 
      15             : registerMooseObject("NavierStokesApp", NSFVFrictionFlowDiodeFunctorMaterial);
      16             : registerMooseObjectRenamed("NavierStokesApp",
      17             :                            NSFVFrictionFlowDiodeMaterial,
      18             :                            "08/01/2024 00:00",
      19             :                            NSFVFrictionFlowDiodeFunctorMaterial);
      20             : 
      21             : InputParameters
      22         164 : NSFVFrictionFlowDiodeFunctorMaterial::validParams()
      23             : {
      24         164 :   InputParameters params = FunctorMaterial::validParams();
      25         164 :   params.addClassDescription("Increases the anistropic friction coefficients, linear or quadratic, "
      26             :                              "by K_i * |direction_i| when the diode is turned on with a boolean");
      27         328 :   params.addRequiredParam<RealVectorValue>("direction", "Direction of the diode");
      28         328 :   params.addRequiredRangeCheckedParam<RealVectorValue>("additional_linear_resistance",
      29             :                                                        "additional_linear_resistance >= 0",
      30             :                                                        "Additional linear friction factor");
      31         328 :   params.addRequiredRangeCheckedParam<RealVectorValue>("additional_quadratic_resistance",
      32             :                                                        "additional_quadratic_resistance >= 0",
      33             :                                                        "Additional quadratic friction factor");
      34         328 :   params.addRequiredParam<MooseFunctorName>(
      35             :       "base_linear_friction_coefs", "Name of the base anistropic Darcy/linear friction functor");
      36         328 :   params.addRequiredParam<MooseFunctorName>(
      37             :       "base_quadratic_friction_coefs",
      38             :       "Name of the base anistropic Forchheimer/quadratic friction functor");
      39         328 :   params.addRequiredParam<MooseFunctorName>("sum_linear_friction_name",
      40             :                                             "Name of the additional Darcy/linear friction functor");
      41         328 :   params.addRequiredParam<MooseFunctorName>(
      42             :       "sum_quadratic_friction_name",
      43             :       "Name of the additional Forchheimer/quadratic friction functor");
      44         328 :   params.addRequiredParam<bool>("turn_on_diode", "Whether to add the additional friction");
      45         328 :   params.declareControllable("turn_on_diode");
      46             : 
      47         164 :   return params;
      48           0 : }
      49             : 
      50          88 : NSFVFrictionFlowDiodeFunctorMaterial::NSFVFrictionFlowDiodeFunctorMaterial(
      51          88 :     const InputParameters & params)
      52             :   : FunctorMaterial(params),
      53          88 :     _direction(getParam<RealVectorValue>("direction")),
      54         176 :     _linear_resistance(getParam<RealVectorValue>("additional_linear_resistance")),
      55         176 :     _quadratic_resistance(getParam<RealVectorValue>("additional_quadratic_resistance")),
      56         176 :     _base_linear_friction(getFunctor<ADRealVectorValue>("base_linear_friction_coefs")),
      57         176 :     _base_quadratic_friction(getFunctor<ADRealVectorValue>("base_quadratic_friction_coefs")),
      58         264 :     _diode_on(getParam<bool>("turn_on_diode"))
      59             : {
      60         352 :   addFunctorProperty<ADRealVectorValue>(
      61         176 :       getParam<MooseFunctorName>("sum_linear_friction_name"),
      62     1223190 :       [this](const auto & r, const auto & t) -> ADRealVectorValue
      63             :       {
      64     1223190 :         return {_base_linear_friction(r, t)(0) +
      65     1223190 :                     (_diode_on ? _linear_resistance(0) * std::abs(_direction(0)) : 0),
      66     1223190 :                 _base_linear_friction(r, t)(1) +
      67     1223190 :                     (_diode_on ? _linear_resistance(1) * std::abs(_direction(1)) : 0),
      68     1223190 :                 _base_linear_friction(r, t)(2) +
      69     2446380 :                     (_diode_on ? _linear_resistance(2) * std::abs(_direction(2)) : 0)};
      70             :       });
      71         352 :   addFunctorProperty<ADRealVectorValue>(
      72         176 :       getParam<MooseFunctorName>("sum_quadratic_friction_name"),
      73     1223190 :       [this](const auto & r, const auto & t) -> ADRealVectorValue
      74             :       {
      75     1223190 :         return {_base_quadratic_friction(r, t)(0) +
      76     1223190 :                     (_diode_on ? _quadratic_resistance(0) * std::abs(_direction(0)) : 0),
      77     1223190 :                 _base_quadratic_friction(r, t)(1) +
      78     1223190 :                     (_diode_on ? _quadratic_resistance(1) * std::abs(_direction(1)) : 0),
      79     1223190 :                 _base_quadratic_friction(r, t)(2) +
      80     2446380 :                     (_diode_on ? _quadratic_resistance(2) * std::abs(_direction(2)) : 0)};
      81             :       });
      82         264 : }

Generated by: LCOV version 1.14