https://mooseframework.inl.gov
NSFVFrictionFlowDiodeFunctorMaterial.C
Go to the documentation of this file.
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 
11 #include "NS.h"
12 #include "SystemBase.h"
13 #include "MooseVariableFV.h"
14 
16 registerMooseObjectRenamed("NavierStokesApp",
17  NSFVFrictionFlowDiodeMaterial,
18  "08/01/2024 00:00",
20 
23 {
25  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  params.addRequiredParam<RealVectorValue>("direction", "Direction of the diode");
28  params.addRequiredRangeCheckedParam<RealVectorValue>("additional_linear_resistance",
29  "additional_linear_resistance >= 0",
30  "Additional linear friction factor");
31  params.addRequiredRangeCheckedParam<RealVectorValue>("additional_quadratic_resistance",
32  "additional_quadratic_resistance >= 0",
33  "Additional quadratic friction factor");
34  params.addRequiredParam<MooseFunctorName>(
35  "base_linear_friction_coefs", "Name of the base anistropic Darcy/linear friction functor");
36  params.addRequiredParam<MooseFunctorName>(
37  "base_quadratic_friction_coefs",
38  "Name of the base anistropic Forchheimer/quadratic friction functor");
39  params.addRequiredParam<MooseFunctorName>("sum_linear_friction_name",
40  "Name of the additional Darcy/linear friction functor");
41  params.addRequiredParam<MooseFunctorName>(
42  "sum_quadratic_friction_name",
43  "Name of the additional Forchheimer/quadratic friction functor");
44  params.addRequiredParam<bool>("turn_on_diode", "Whether to add the additional friction");
45  params.declareControllable("turn_on_diode");
46 
47  return params;
48 }
49 
51  const InputParameters & params)
52  : FunctorMaterial(params),
53  _direction(getParam<RealVectorValue>("direction")),
54  _linear_resistance(getParam<RealVectorValue>("additional_linear_resistance")),
55  _quadratic_resistance(getParam<RealVectorValue>("additional_quadratic_resistance")),
56  _base_linear_friction(getFunctor<ADRealVectorValue>("base_linear_friction_coefs")),
57  _base_quadratic_friction(getFunctor<ADRealVectorValue>("base_quadratic_friction_coefs")),
58  _diode_on(getParam<bool>("turn_on_diode"))
59 {
60  addFunctorProperty<ADRealVectorValue>(
61  getParam<MooseFunctorName>("sum_linear_friction_name"),
62  [this](const auto & r, const auto & t) -> ADRealVectorValue
63  {
64  return {_base_linear_friction(r, t)(0) +
65  (_diode_on ? _linear_resistance(0) * std::abs(_direction(0)) : 0),
66  _base_linear_friction(r, t)(1) +
67  (_diode_on ? _linear_resistance(1) * std::abs(_direction(1)) : 0),
68  _base_linear_friction(r, t)(2) +
69  (_diode_on ? _linear_resistance(2) * std::abs(_direction(2)) : 0)};
70  });
71  addFunctorProperty<ADRealVectorValue>(
72  getParam<MooseFunctorName>("sum_quadratic_friction_name"),
73  [this](const auto & r, const auto & t) -> ADRealVectorValue
74  {
75  return {_base_quadratic_friction(r, t)(0) +
76  (_diode_on ? _quadratic_resistance(0) * std::abs(_direction(0)) : 0),
77  _base_quadratic_friction(r, t)(1) +
78  (_diode_on ? _quadratic_resistance(1) * std::abs(_direction(1)) : 0),
79  _base_quadratic_friction(r, t)(2) +
80  (_diode_on ? _quadratic_resistance(2) * std::abs(_direction(2)) : 0)};
81  });
82 }
NSFVFrictionFlowDiodeFunctorMaterial(const InputParameters &parameters)
void addRequiredRangeCheckedParam(const std::string &name, const std::string &parsed_function, const std::string &doc_string)
static InputParameters validParams()
const RealVectorValue _direction
Direction of the diode.
const bool & _diode_on
Whether the diode is active or not.
Adds an anisotropic friction linear or quadratic terms to a region, that can be turned on or off usin...
const Moose::Functor< ADRealVectorValue > & _base_quadratic_friction
Base quadratic friction coefficient, from the correlation for the porous media friction.
const RealVectorValue _linear_resistance
Magnitude of the additional linear resistance.
void addRequiredParam(const std::string &name, const std::string &doc_string)
registerMooseObjectRenamed("NavierStokesApp", NSFVFrictionFlowDiodeMaterial, "08/01/2024 00:00", NSFVFrictionFlowDiodeFunctorMaterial)
const RealVectorValue _quadratic_resistance
Magnitude of the additional quadratic resistance.
void addClassDescription(const std::string &doc_string)
void declareControllable(const std::string &name, std::set< ExecFlagType > execute_flags={})
registerMooseObject("NavierStokesApp", NSFVFrictionFlowDiodeFunctorMaterial)
const Moose::Functor< ADRealVectorValue > & _base_linear_friction
Base linear friction coefficient, from the correlation for the porous media friction.