20 MooseEnum poroperm_function(
"kozeny_carman_fd2=0 kozeny_carman_phi0=1 kozeny_carman_A=2",
25 "Function relating porosity and permeability. The options are: kozeny_carman_fd2 = f d^2 " 26 "phi^n/(1-phi)^m (where phi is porosity, f is a scalar constant with typical values " 27 "0.01-0.001, and d is grain size). kozeny_carman_phi0 = k0 (1-phi0)^m/phi0^n * " 28 "phi^n/(1-phi)^m (where phi is porosity, and k0 is the permeability at porosity phi0) " 29 "kozeny_carman_A = A for directly supplying the permeability multiplying factor.");
32 "The permeability scalar value (usually in " 33 "m^2) at the reference porosity, required for " 34 "kozeny_carman_phi0");
36 "A tensor to multiply the calculated scalar " 37 "permeability, in order to obtain anisotropy if " 38 "required. Defaults to isotropic permeability " 41 "phi0",
"phi0 > 0 & phi0 < 1",
"The reference porosity, required for kozeny_carman_phi0");
43 "f",
"f > 0",
"The multiplying factor, required for kozeny_carman_fd2");
45 "d",
"d > 0",
"The grain diameter, required for kozeny_carman_fd2");
47 "A",
"A > 0",
"Kozeny Carman permeability multiplying factor, required for kozeny_carman_A");
48 params.
addClassDescription(
"This Material calculates the permeability tensor from a form of the " 49 "Kozeny-Carman equation based on the spatially constant initial " 50 "permeability and porosity or grain size.");
58 _k0(parameters.isParamValid(
"k0") ? this->template getParam<
Real>(
"k0") : -1),
59 _phi0(parameters.isParamValid(
"phi0") ? this->template getParam<
Real>(
"phi0") : -1),
60 _f(parameters.isParamValid(
"f") ? this->template getParam<
Real>(
"f") : -1),
61 _d(parameters.isParamValid(
"d") ? this->template getParam<
Real>(
"d") : -1),
62 _poroperm_function(this->template getParam<
MooseEnum>(
"poroperm_function")
64 _A(parameters.isParamValid(
"A") ? this->template getParam<
Real>(
"A") : -1)
66 auto checkForInvalidParams =
67 [&](
const std::string & bad_param,
const std::string & poroperm_function)
70 this->paramError(bad_param,
"Not compatible with '" + poroperm_function +
"'.");
77 mooseError(
"You must specify f and d in order to use kozeny_carman_fd2 in " 78 "PorousFlowPermeabilityKozenyCarman");
79 checkForInvalidParams(
"A",
"kozeny_carman_fd2");
80 checkForInvalidParams(
"k0",
"kozeny_carman_fd2");
81 checkForInvalidParams(
"phi0",
"kozeny_carman_fd2");
87 mooseError(
"You must specify k0 and phi0 in order to use kozeny_carman_phi0 in " 88 "PorousFlowPermeabilityKozenyCarman");
89 checkForInvalidParams(
"A",
"kozeny_carman_phi0");
90 checkForInvalidParams(
"f",
"kozeny_carman_phi0");
91 checkForInvalidParams(
"d",
"kozeny_carman_phi0");
96 mooseError(
"You must specify A in order to use kozeny_carman_A in " 97 "PorousFlowPermeabilityKozenyCarman");
98 checkForInvalidParams(
"k0",
"kozeny_carman_A");
99 checkForInvalidParams(
"phi0",
"kozeny_carman_A");
100 checkForInvalidParams(
"f",
"kozeny_carman_A");
101 checkForInvalidParams(
"d",
"kozeny_carman_A");
107 template <
bool is_ad>
PorousFlowPermeabilityKozenyCarmanTempl(const InputParameters ¶meters)
Material designed to provide the permeability tensor which is calculated from porosity using a form o...
static InputParameters validParams()
Base class for material designed to provide the permeability tensor which is calculated from porosity...
void mooseError(Args &&... args)
enum PorousFlowPermeabilityKozenyCarmanTempl::PoropermFunction _poroperm_function
const Real _m
Exponent in k = k_ijk * A * phi^n / (1 - phi)^m.
Real computeA() const override
retrieve constant value for A computed in constructor
TensorValue< Real > RealTensorValue
const Real _f
Multiplying factor in A = f * d^2.
PoropermFunction
Name of porosity-permeability relationship.
static InputParameters validParams()
const Real _phi0
Reference porosity in A = k0 * (1 - phi0)^m / phi0^n.
DIE A HORRIBLE DEATH HERE typedef LIBMESH_DEFAULT_SCALAR_TYPE Real
Real _A
Multiplying factor in k = k_ijk * A * phi^n / (1 - phi)^m.
const Real _k0
Reference scalar permeability in A = k0 * (1 - phi0)^m / phi0^n.
MooseUnits pow(const MooseUnits &, int)
const Real _n
Exponent in k = k_ijk * A * phi^n / (1 - phi)^m.
const Real _d
Grain diameter in A = f * d^2.
registerMooseObject("PorousFlowApp", PorousFlowPermeabilityKozenyCarman)