Go to the documentation of this file.
19 MooseEnum poroperm_function(
"log_k ln_k exp_k",
"exp_k");
20 params.addParam<MooseEnum>(
"poroperm_function",
22 "Form of the function relating porosity and permeability. The options "
23 "are: log_k (log k = A phi + B); ln_k (ln k = A phi + B); exp_k (k = "
24 "B exp(A phi)); where k is permeability, phi is porosity, A and B are "
25 "empirical constants.");
26 params.addParam<RealTensorValue>(
"k_anisotropy",
27 "A tensor to multiply the calculated scalar "
28 "permeability, in order to obtain anisotropy if "
29 "required. Defaults to isotropic permeability "
31 params.addRequiredParam<Real>(
"A",
"Empirical constant; see poroperm_function.");
32 params.addRequiredParam<Real>(
"B",
"Empirical constant; see poroperm_function.");
33 params.addClassDescription(
34 "This Material calculates the permeability tensor from an exponential function of porosity: "
35 "k = k_ijk * BB exp(AA phi), where k_ijk is a tensor providing the anisotropy, phi is "
36 "porosity, and AA and BB are empirical constants. The user can provide input for the "
37 "function expressed in ln k, log k or exponential forms (see poroperm_function).");
42 const InputParameters & parameters)
44 _A(getParam<Real>(
"A")),
45 _B(getParam<Real>(
"B")),
46 _k_anisotropy(parameters.isParamValid(
"k_anisotropy")
47 ? getParam<RealTensorValue>(
"k_anisotropy")
48 : RealTensorValue(1.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 1.0)),
49 _porosity_qp(getMaterialProperty<Real>(
"PorousFlow_porosity_qp")),
50 _dporosity_qp_dvar(getMaterialProperty<std::vector<Real>>(
"dPorousFlow_porosity_qp_dvar")),
51 _dporosity_qp_dgradvar(
52 getMaterialProperty<std::vector<
RealGradient>>(
"dPorousFlow_porosity_qp_dgradvar")),
53 _poroperm_function(getParam<MooseEnum>(
"poroperm_function").getEnum<
PoropermFunction>())
58 _AA =
_A * std::log(10.0);
74 _dictator.usePermDerivs(
true);
83 for (
unsigned int v = 0; v <
_num_var; ++v)
87 for (
unsigned i = 0; i < LIBMESH_DIM; ++i)
90 for (
unsigned int v = 0; v <
_num_var; ++v)
const Real _B
Empirical constant B.
PoropermFunction
Name of porosity-permeability relationship.
Base class Material designed to provide the permeability tensor.
Material designed to provide the permeability tensor which is calculated from porosity using the equa...
MaterialProperty< std::vector< RealTensorValue > > & _dpermeability_qp_dvar
d(quadpoint permeability)/d(PorousFlow variable)
ExpressionBuilder::EBTerm pow(const ExpressionBuilder::EBTerm &left, T exponent)
VectorValue< Real > RealGradient
InputParameters validParams< PorousFlowPermeabilityExponential >()
Real _AA
Empirical constant AA in k = k_ijk * BB * exp(AA * phi)
const Real _A
Empirical constant A.
const RealTensorValue _k_anisotropy
Tensor multiplier k_ijk in k = k_ijk * A * phi^n / (1 - phi)^m.
void computeQpProperties() override
MaterialProperty< RealTensorValue > & _permeability_qp
Quadpoint permeability.
InputParameters validParams< PorousFlowPermeabilityBase >()
PorousFlowPermeabilityExponential(const InputParameters ¶meters)
const unsigned int _num_var
Number of PorousFlow variables.
MaterialProperty< std::vector< std::vector< RealTensorValue > > > & _dpermeability_qp_dgradvar
d(quadpoint permeability)/d(grad(PorousFlow variable))
const MaterialProperty< std::vector< Real > > & _dporosity_qp_dvar
d(quadpoint porosity)/d(PorousFlow variable)
Real _BB
Empirical constant BB in k = k_ijk * BB * exp(AA * phi)
enum PorousFlowPermeabilityExponential::PoropermFunction _poroperm_function
registerMooseObject("PorousFlowApp", PorousFlowPermeabilityExponential)
const MaterialProperty< Real > & _porosity_qp
Quadpoint porosity.
const MaterialProperty< std::vector< RealGradient > > & _dporosity_qp_dgradvar
d(quadpoint porosity)/d(grad(PorousFlow variable))