37 _m(this->template getParam<Real>(
"m")),
38 _n(this->template getParam<Real>(
"n")),
39 _k_anisotropy(parameters.isParamValid(
"k_anisotropy")
40 ? this->template getParam<RealTensorValue>(
"k_anisotropy")
41 : RealTensorValue(1.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 1.0)),
42 _porosity_qp(this->template getGenericMaterialProperty<Real, is_ad>(
"PorousFlow_porosity_qp")),
43 _dporosity_qp_dvar(is_ad ? nullptr
44 : &this->template getMaterialProperty<
std::vector<Real>>(
45 "dPorousFlow_porosity_qp_dvar")),
46 _dporosity_qp_dgradvar(is_ad ? nullptr
47 : &this->template getMaterialProperty<
std::vector<RealGradient>>(
48 "dPorousFlow_porosity_qp_dgradvar"))
51 _dictator.usePermDerivs(
true);
61 _permeability_qp[_qp] =
62 _k_anisotropy *
A *
pow(_porosity_qp[_qp], _n) /
pow(1.0 - _porosity_qp[_qp], _m);
66 (*_dpermeability_qp_dvar)[_qp].resize(_num_var, RealTensorValue());
67 for (
unsigned int v = 0;
v < _num_var; ++
v)
68 (*_dpermeability_qp_dvar)[_qp][
v] = (*_dporosity_qp_dvar)[_qp][
v] * _permeability_qp[_qp] *
69 (_n / _porosity_qp[_qp] + _m / (1.0 - _porosity_qp[_qp]));
71 (*_dpermeability_qp_dgradvar)[_qp].resize(LIBMESH_DIM);
74 (*_dpermeability_qp_dgradvar)[_qp][i].resize(_num_var, RealTensorValue());
75 for (
unsigned int v = 0;
v < _num_var; ++
v)
76 (*_dpermeability_qp_dgradvar)[_qp][i][
v] =
77 (*_dporosity_qp_dgradvar)[_qp][
v](i) * _permeability_qp[_qp] *
78 (_n / _porosity_qp[_qp] + _m / (1.0 - _porosity_qp[_qp]));