https://mooseframework.inl.gov
Loading...
Searching...
No Matches
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
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),
78 (_diode_on ? _quadratic_resistance(1) * std::abs(_direction(1)) : 0),
80 (_diode_on ? _quadratic_resistance(2) * std::abs(_direction(2)) : 0)};
81 });
82}
registerMooseObject("NavierStokesApp", NSFVFrictionFlowDiodeFunctorMaterial)
registerMooseObjectRenamed("NavierStokesApp", NSFVFrictionFlowDiodeMaterial, "08/01/2024 00:00", NSFVFrictionFlowDiodeFunctorMaterial)
static InputParameters validParams()
void declareControllable(const std::string &name, std::set< ExecFlagType > execute_flags={})
void addRequiredRangeCheckedParam(const std::string &name, const std::string &parsed_function, const std::string &doc_string)
void addRequiredParam(const std::string &name, const std::string &doc_string)
void addClassDescription(const std::string &doc_string)
Adds an anisotropic friction linear or quadratic terms to a region, that can be turned on or off usin...
const bool & _diode_on
Whether the diode is active or not.
const RealVectorValue _linear_resistance
Magnitude of the additional linear resistance.
NSFVFrictionFlowDiodeFunctorMaterial(const InputParameters &parameters)
const RealVectorValue _quadratic_resistance
Magnitude of the additional quadratic resistance.
const RealVectorValue _direction
Direction of the diode.
const Moose::Functor< ADRealVectorValue > & _base_linear_friction
Base linear friction coefficient, from the correlation for the porous media friction.
const Moose::Functor< ADRealVectorValue > & _base_quadratic_friction
Base quadratic friction coefficient, from the correlation for the porous media friction.