18 "A tensor to multiply the calculated scalar " 19 "permeability, in order to obtain anisotropy if " 20 "required. Defaults to isotropic permeability " 25 "Base class for material that calculates the permeability tensor from a form of the " 26 "Kozeny-Carman equation, " 27 "k = k_ijk * A * phi^n / (1 - phi)^m, where k_ijk is a tensor providing the anisotropy, phi " 28 "is porosity, n and m are positive scalar constants. Method for computing A is given in the " 37 _m(this->template getParam<
Real>(
"m")),
38 _n(this->template getParam<
Real>(
"n")),
39 _k_anisotropy(parameters.isParamValid(
"k_anisotropy")
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
48 "dPorousFlow_porosity_qp_dgradvar"))
51 _dictator.usePermDerivs(
true);
59 _permeability_qp[_qp] =
60 _k_anisotropy *
A *
std::pow(_porosity_qp[_qp], _n) /
std::pow(1.0 - _porosity_qp[_qp], _m);
65 for (
unsigned int v = 0;
v < _num_var; ++
v)
66 (*_dpermeability_qp_dvar)[_qp][
v] = (*_dporosity_qp_dvar)[_qp][
v] * _permeability_qp[_qp] *
67 (_n / _porosity_qp[_qp] + _m / (1.0 - _porosity_qp[_qp]));
69 (*_dpermeability_qp_dgradvar)[_qp].resize(LIBMESH_DIM);
72 (*_dpermeability_qp_dgradvar)[_qp][i].resize(_num_var,
RealTensorValue());
73 for (
unsigned int v = 0;
v < _num_var; ++
v)
74 (*_dpermeability_qp_dgradvar)[_qp][i][
v] =
75 (*_dporosity_qp_dgradvar)[_qp][
v](i) * _permeability_qp[_qp] *
76 (_n / _porosity_qp[_qp] + _m / (1.0 - _porosity_qp[_qp]));
static InputParameters validParams()
Base class for material designed to provide the permeability tensor which is calculated from porosity...
PorousFlowPermeabilityKozenyCarmanBaseTempl(const InputParameters ¶meters)
static InputParameters validParams()
static constexpr std::size_t dim
Base class Material designed to provide the permeability tensor.
TensorValue< Real > RealTensorValue
void computeQpProperties() override
DIE A HORRIBLE DEATH HERE typedef LIBMESH_DEFAULT_SCALAR_TYPE Real
static const std::string v
IntRange< T > make_range(T beg, T end)
MooseUnits pow(const MooseUnits &, int)