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 76 : NSFVFrictionFlowDiodeFunctorMaterial::validParams() 23 : { 24 76 : InputParameters params = FunctorMaterial::validParams(); 25 76 : 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 152 : params.addRequiredParam<RealVectorValue>("direction", "Direction of the diode"); 28 152 : params.addRequiredRangeCheckedParam<RealVectorValue>("additional_linear_resistance", 29 : "additional_linear_resistance >= 0", 30 : "Additional linear friction factor"); 31 152 : params.addRequiredRangeCheckedParam<RealVectorValue>("additional_quadratic_resistance", 32 : "additional_quadratic_resistance >= 0", 33 : "Additional quadratic friction factor"); 34 152 : params.addRequiredParam<MooseFunctorName>( 35 : "base_linear_friction_coefs", "Name of the base anistropic Darcy/linear friction functor"); 36 152 : params.addRequiredParam<MooseFunctorName>( 37 : "base_quadratic_friction_coefs", 38 : "Name of the base anistropic Forchheimer/quadratic friction functor"); 39 152 : params.addRequiredParam<MooseFunctorName>("sum_linear_friction_name", 40 : "Name of the additional Darcy/linear friction functor"); 41 152 : params.addRequiredParam<MooseFunctorName>( 42 : "sum_quadratic_friction_name", 43 : "Name of the additional Forchheimer/quadratic friction functor"); 44 152 : params.addRequiredParam<bool>("turn_on_diode", "Whether to add the additional friction"); 45 152 : params.declareControllable("turn_on_diode"); 46 : 47 76 : return params; 48 0 : } 49 : 50 40 : NSFVFrictionFlowDiodeFunctorMaterial::NSFVFrictionFlowDiodeFunctorMaterial( 51 40 : const InputParameters & params) 52 : : FunctorMaterial(params), 53 40 : _direction(getParam<RealVectorValue>("direction")), 54 80 : _linear_resistance(getParam<RealVectorValue>("additional_linear_resistance")), 55 80 : _quadratic_resistance(getParam<RealVectorValue>("additional_quadratic_resistance")), 56 80 : _base_linear_friction(getFunctor<ADRealVectorValue>("base_linear_friction_coefs")), 57 80 : _base_quadratic_friction(getFunctor<ADRealVectorValue>("base_quadratic_friction_coefs")), 58 120 : _diode_on(getParam<bool>("turn_on_diode")) 59 : { 60 160 : addFunctorProperty<ADRealVectorValue>( 61 80 : getParam<MooseFunctorName>("sum_linear_friction_name"), 62 818820 : [this](const auto & r, const auto & t) -> ADRealVectorValue 63 : { 64 818820 : return {_base_linear_friction(r, t)(0) + 65 818820 : (_diode_on ? _linear_resistance(0) * std::abs(_direction(0)) : 0), 66 818820 : _base_linear_friction(r, t)(1) + 67 818820 : (_diode_on ? _linear_resistance(1) * std::abs(_direction(1)) : 0), 68 818820 : _base_linear_friction(r, t)(2) + 69 1637640 : (_diode_on ? _linear_resistance(2) * std::abs(_direction(2)) : 0)}; 70 : }); 71 160 : addFunctorProperty<ADRealVectorValue>( 72 80 : getParam<MooseFunctorName>("sum_quadratic_friction_name"), 73 818820 : [this](const auto & r, const auto & t) -> ADRealVectorValue 74 : { 75 818820 : return {_base_quadratic_friction(r, t)(0) + 76 818820 : (_diode_on ? _quadratic_resistance(0) * std::abs(_direction(0)) : 0), 77 818820 : _base_quadratic_friction(r, t)(1) + 78 818820 : (_diode_on ? _quadratic_resistance(1) * std::abs(_direction(1)) : 0), 79 818820 : _base_quadratic_friction(r, t)(2) + 80 1637640 : (_diode_on ? _quadratic_resistance(2) * std::abs(_direction(2)) : 0)}; 81 : }); 82 120 : }