20 MooseEnum poroperm_function(
"log_k ln_k exp_k",
"exp_k");
23 "Form of the function relating porosity and permeability. The options " 24 "are: log_k (log k = A phi + B); ln_k (ln k = A phi + B); exp_k (k = " 25 "B exp(A phi)); where k is permeability, phi is porosity, A and B are " 26 "empirical constants.");
28 "A tensor to multiply the calculated scalar " 29 "permeability, in order to obtain anisotropy if " 30 "required. Defaults to isotropic permeability " 35 "This Material calculates the permeability tensor from an exponential function of porosity: " 36 "k = k_ijk * BB exp(AA phi), where k_ijk is a tensor providing the anisotropy, phi is " 37 "porosity, and AA and BB are empirical constants. The user can provide input for the " 38 "function expressed in ln k, log k or exponential forms (see poroperm_function).");
46 _A(this->template getParam<
Real>(
"A")),
47 _B(this->template getParam<
Real>(
"B")),
48 _k_anisotropy(parameters.isParamValid(
"k_anisotropy")
51 _porosity_qp(this->template getGenericMaterialProperty<
Real, is_ad>(
"PorousFlow_porosity_qp")),
52 _dporosity_qp_dvar(is_ad ? nullptr
53 : &this->template getMaterialProperty<
std::vector<
Real>>(
54 "dPorousFlow_porosity_qp_dvar")),
55 _dporosity_qp_dgradvar(is_ad ? nullptr
57 "dPorousFlow_porosity_qp_dgradvar")),
58 _poroperm_function(this->template getParam<
MooseEnum>(
"poroperm_function")
64 _AA =
_A * std::log(10.0);
80 _dictator.usePermDerivs(
true);
87 _permeability_qp[_qp] = _k_anisotropy * _BB * std::exp(_porosity_qp[_qp] * _AA);
92 for (
unsigned int v = 0;
v < _num_var; ++
v)
93 (*_dpermeability_qp_dvar)[_qp][
v] =
94 _AA * _permeability_qp[_qp] * (*_dporosity_qp_dvar)[_qp][
v];
96 (*_dpermeability_qp_dgradvar)[_qp].resize(LIBMESH_DIM);
99 (*_dpermeability_qp_dgradvar)[_qp][i].resize(_num_var,
RealTensorValue());
100 for (
unsigned int v = 0;
v < _num_var; ++
v)
101 (*_dpermeability_qp_dgradvar)[_qp][i][
v] =
102 _AA * _permeability_qp[_qp] * (*_dporosity_qp_dgradvar)[_qp][
v](i);
Material designed to provide the permeability tensor which is calculated from porosity using the equa...
Real _AA
Empirical constant AA in k = k_ijk * BB * exp(AA * phi)
registerMooseObject("PorousFlowApp", PorousFlowPermeabilityExponential)
const Real _A
Empirical constant A.
static InputParameters validParams()
Real _BB
Empirical constant BB in k = k_ijk * BB * exp(AA * phi)
static constexpr std::size_t dim
Base class Material designed to provide the permeability tensor.
PorousFlowPermeabilityExponentialTempl(const InputParameters ¶meters)
enum PorousFlowPermeabilityExponentialTempl::PoropermFunction _poroperm_function
TensorValue< Real > RealTensorValue
const Real _B
Empirical constant B.
DIE A HORRIBLE DEATH HERE typedef LIBMESH_DEFAULT_SCALAR_TYPE Real
static const std::string v
IntRange< T > make_range(T beg, T end)
static InputParameters validParams()
MooseUnits pow(const MooseUnits &, int)
void computeQpProperties() override
PoropermFunction
Name of porosity-permeability relationship.