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 : }