https://mooseframework.inl.gov
Public Types | Public Member Functions | Static Public Member Functions | Protected Types | Protected Member Functions | Protected Attributes | List of all members
PorousFlowPermeabilityExponentialTempl< is_ad > Class Template Reference

Material designed to provide the permeability tensor which is calculated from porosity using the equation: permeability = k_ijk * k, with k = BB * exp(AA * phi) where k_ijk is a tensor providing the anisotropy, phi is porosity, and A and B are empirical constants. More...

#include <PorousFlowPermeabilityExponential.h>

Inheritance diagram for PorousFlowPermeabilityExponentialTempl< is_ad >:
[legend]

Public Types

typedef DerivativeMaterialPropertyNameInterface::SymbolName SymbolName
 

Public Member Functions

 PorousFlowPermeabilityExponentialTempl (const InputParameters &parameters)
 
const GenericMaterialProperty< U, is_ad > & getDefaultMaterialProperty (const std::string &name)
 
const GenericMaterialProperty< U, is_ad > & getDefaultMaterialPropertyByName (const std::string &name)
 
void validateDerivativeMaterialPropertyBase (const std::string &base)
 
const MaterialPropertyName derivativePropertyName (const MaterialPropertyName &base, const std::vector< SymbolName > &c) const
 
const MaterialPropertyName derivativePropertyNameFirst (const MaterialPropertyName &base, const SymbolName &c1) const
 
const MaterialPropertyName derivativePropertyNameSecond (const MaterialPropertyName &base, const SymbolName &c1, const SymbolName &c2) const
 
const MaterialPropertyName derivativePropertyNameThird (const MaterialPropertyName &base, const SymbolName &c1, const SymbolName &c2, const SymbolName &c3) const
 
GenericMaterialProperty< U, is_ad > & declarePropertyDerivative (const std::string &base, const std::vector< VariableName > &c)
 
GenericMaterialProperty< U, is_ad > & declarePropertyDerivative (const std::string &base, const std::vector< SymbolName > &c)
 
GenericMaterialProperty< U, is_ad > & declarePropertyDerivative (const std::string &base, const SymbolName &c1, const SymbolName &c2="", const SymbolName &c3="")
 
GenericMaterialProperty< U, is_ad > & declarePropertyDerivative (const std::string &base, const std::vector< VariableName > &c)
 
GenericMaterialProperty< U, is_ad > & declarePropertyDerivative (const std::string &base, const std::vector< SymbolName > &c)
 
GenericMaterialProperty< U, is_ad > & declarePropertyDerivative (const std::string &base, const SymbolName &c1, const SymbolName &c2="", const SymbolName &c3="")
 
const GenericMaterialProperty< U, is_ad > & getMaterialPropertyDerivative (const std::string &base, const std::vector< VariableName > &c)
 
const GenericMaterialProperty< U, is_ad > & getMaterialPropertyDerivative (const std::string &base, const std::vector< SymbolName > &c)
 
const GenericMaterialProperty< U, is_ad > & getMaterialPropertyDerivative (const std::string &base, const SymbolName &c1, const SymbolName &c2="", const SymbolName &c3="")
 
const GenericMaterialProperty< U, is_ad > & getMaterialPropertyDerivative (const std::string &base, const SymbolName &c1, unsigned int v2, unsigned int v3=libMesh::invalid_uint)
 
const GenericMaterialProperty< U, is_ad > & getMaterialPropertyDerivative (const std::string &base, unsigned int v1, unsigned int v2=libMesh::invalid_uint, unsigned int v3=libMesh::invalid_uint)
 
const GenericMaterialProperty< U, is_ad > & getMaterialPropertyDerivative (const std::string &base, const std::vector< VariableName > &c)
 
const GenericMaterialProperty< U, is_ad > & getMaterialPropertyDerivative (const std::string &base, const std::vector< SymbolName > &c)
 
const GenericMaterialProperty< U, is_ad > & getMaterialPropertyDerivative (const std::string &base, const SymbolName &c1, const SymbolName &c2="", const SymbolName &c3="")
 
const GenericMaterialProperty< U, is_ad > & getMaterialPropertyDerivative (const std::string &base, const SymbolName &c1, unsigned int v2, unsigned int v3=libMesh::invalid_uint)
 
const GenericMaterialProperty< U, is_ad > & getMaterialPropertyDerivative (const std::string &base, unsigned int v1, unsigned int v2=libMesh::invalid_uint, unsigned int v3=libMesh::invalid_uint)
 
const GenericMaterialProperty< U, is_ad > & getMaterialPropertyDerivativeByName (const MaterialPropertyName &base, const std::vector< VariableName > &c)
 
const GenericMaterialProperty< U, is_ad > & getMaterialPropertyDerivativeByName (const MaterialPropertyName &base, const std::vector< SymbolName > &c)
 
const GenericMaterialProperty< U, is_ad > & getMaterialPropertyDerivativeByName (const MaterialPropertyName &base, const SymbolName &c1, const SymbolName &c2="", const SymbolName &c3="")
 
const GenericMaterialProperty< U, is_ad > & getMaterialPropertyDerivativeByName (const MaterialPropertyName &base, const std::vector< VariableName > &c)
 
const GenericMaterialProperty< U, is_ad > & getMaterialPropertyDerivativeByName (const MaterialPropertyName &base, const std::vector< SymbolName > &c)
 
const GenericMaterialProperty< U, is_ad > & getMaterialPropertyDerivativeByName (const MaterialPropertyName &base, const SymbolName &c1, const SymbolName &c2="", const SymbolName &c3="")
 
void validateCoupling (const MaterialPropertyName &base, const std::vector< VariableName > &c, bool validate_aux=true)
 
void validateCoupling (const MaterialPropertyName &base, const VariableName &c1="", const VariableName &c2="", const VariableName &c3="")
 
void validateCoupling (const MaterialPropertyName &base, const std::vector< VariableName > &c, bool validate_aux=true)
 
void validateCoupling (const MaterialPropertyName &base, const VariableName &c1="", const VariableName &c2="", const VariableName &c3="")
 
void validateNonlinearCoupling (const MaterialPropertyName &base, const VariableName &c1="", const VariableName &c2="", const VariableName &c3="")
 
void validateNonlinearCoupling (const MaterialPropertyName &base, const VariableName &c1="", const VariableName &c2="", const VariableName &c3="")
 
const MaterialPropertyName propertyName (const MaterialPropertyName &base, const std::vector< SymbolName > &c) const
 
const MaterialPropertyName propertyName (const MaterialPropertyName &base, const std::vector< SymbolName > &c) const
 
const MaterialPropertyName propertyNameFirst (const MaterialPropertyName &base, const SymbolName &c1) const
 
const MaterialPropertyName propertyNameFirst (const MaterialPropertyName &base, const SymbolName &c1) const
 
const MaterialPropertyName propertyNameSecond (const MaterialPropertyName &base, const SymbolName &c1, const SymbolName &c2) const
 
const MaterialPropertyName propertyNameSecond (const MaterialPropertyName &base, const SymbolName &c1, const SymbolName &c2) const
 
const MaterialPropertyName propertyNameThird (const MaterialPropertyName &base, const SymbolName &c1, const SymbolName &c2, const SymbolName &c3) const
 
const MaterialPropertyName propertyNameThird (const MaterialPropertyName &base, const SymbolName &c1, const SymbolName &c2, const SymbolName &c3) const
 

Static Public Member Functions

static InputParameters validParams ()
 

Protected Types

enum  PoropermFunction { PoropermFunction::log_k, PoropermFunction::ln_k, PoropermFunction::exp_k }
 Name of porosity-permeability relationship. More...
 

Protected Member Functions

void computeQpProperties () override
 

Protected Attributes

const Real _A
 Empirical constant A. More...
 
const Real _B
 Empirical constant B. More...
 
const RealTensorValue _k_anisotropy
 Tensor multiplier k_ijk in k = k_ijk * A * phi^n / (1 - phi)^m. More...
 
const GenericMaterialProperty< Real, is_ad > & _porosity_qp
 Quadpoint porosity. More...
 
const MaterialProperty< std::vector< Real > > *const _dporosity_qp_dvar
 d(quadpoint porosity)/d(PorousFlow variable) More...
 
const MaterialProperty< std::vector< RealGradient > > *const _dporosity_qp_dgradvar
 d(quadpoint porosity)/d(grad(PorousFlow variable)) More...
 
enum PorousFlowPermeabilityExponentialTempl::PoropermFunction _poroperm_function
 
Real _AA
 Empirical constant AA in k = k_ijk * BB * exp(AA * phi) More...
 
Real _BB
 Empirical constant BB in k = k_ijk * BB * exp(AA * phi) More...
 
 usingPorousFlowPermeabilityBaseMembers
 
GenericMaterialProperty< RealTensorValue, is_ad > & _permeability_qp
 Quadpoint permeability. More...
 
MaterialProperty< std::vector< RealTensorValue > > *const _dpermeability_qp_dvar
 d(quadpoint permeability)/d(PorousFlow variable) More...
 
MaterialProperty< std::vector< std::vector< RealTensorValue > > > *const _dpermeability_qp_dgradvar
 d(quadpoint permeability)/d(grad(PorousFlow variable)) More...
 
const unsigned int _num_phases
 Number of phases. More...
 
const unsigned int _num_components
 Number of fluid components. More...
 
const unsigned int _num_var
 Number of PorousFlow variables. More...
 

Detailed Description

template<bool is_ad>
class PorousFlowPermeabilityExponentialTempl< is_ad >

Material designed to provide the permeability tensor which is calculated from porosity using the equation: permeability = k_ijk * k, with k = BB * exp(AA * phi) where k_ijk is a tensor providing the anisotropy, phi is porosity, and A and B are empirical constants.

The user can provide input for the equation expressed in any of the following 3 forms: log k = A * phi + B ln k = A * phi + B k = B * exp(A * phi) A and B are then converted to AA and BB.

Definition at line 28 of file PorousFlowPermeabilityExponential.h.

Member Enumeration Documentation

◆ PoropermFunction

template<bool is_ad>
enum PorousFlowPermeabilityExponentialTempl::PoropermFunction
strongprotected

Name of porosity-permeability relationship.

Enumerator
log_k 
ln_k 
exp_k 

Definition at line 57 of file PorousFlowPermeabilityExponential.h.

57 { log_k, ln_k, exp_k } _poroperm_function;
enum PorousFlowPermeabilityExponentialTempl::PoropermFunction _poroperm_function

Constructor & Destructor Documentation

◆ PorousFlowPermeabilityExponentialTempl()

Definition at line 43 of file PorousFlowPermeabilityExponential.C.

46  _A(this->template getParam<Real>("A")),
47  _B(this->template getParam<Real>("B")),
48  _k_anisotropy(parameters.isParamValid("k_anisotropy")
49  ? this->template getParam<RealTensorValue>("k_anisotropy")
50  : RealTensorValue(1.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 1.0)),
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
56  : &this->template getMaterialProperty<std::vector<RealGradient>>(
57  "dPorousFlow_porosity_qp_dgradvar")),
58  _poroperm_function(this->template getParam<MooseEnum>("poroperm_function")
59  .template getEnum<PoropermFunction>())
60 {
61  switch (_poroperm_function)
62  {
64  _AA = _A * std::log(10.0);
65  _BB = std::pow(10.0, _B);
66  break;
67 
69  _AA = _A;
70  _BB = std::exp(_B);
71  break;
72 
74  _AA = _A;
75  _BB = _B;
76  break;
77  }
78 
79  // Make sure that derivatives are included in the Jacobian calculations
80  _dictator.usePermDerivs(true);
81 }
Real _AA
Empirical constant AA in k = k_ijk * BB * exp(AA * phi)
Real _BB
Empirical constant BB in k = k_ijk * BB * exp(AA * phi)
Base class Material designed to provide the permeability tensor.
enum PorousFlowPermeabilityExponentialTempl::PoropermFunction _poroperm_function
TensorValue< Real > RealTensorValue
const RealTensorValue _k_anisotropy
Tensor multiplier k_ijk in k = k_ijk * A * phi^n / (1 - phi)^m.
const MaterialProperty< std::vector< Real > > *const _dporosity_qp_dvar
d(quadpoint porosity)/d(PorousFlow variable)
const MaterialProperty< std::vector< RealGradient > > *const _dporosity_qp_dgradvar
d(quadpoint porosity)/d(grad(PorousFlow variable))
const GenericMaterialProperty< Real, is_ad > & _porosity_qp
Quadpoint porosity.
MooseUnits pow(const MooseUnits &, int)
bool isParamValid(const std::string &name) const

Member Function Documentation

◆ computeQpProperties()

template<bool is_ad>
void PorousFlowPermeabilityExponentialTempl< is_ad >::computeQpProperties ( )
overrideprotected

Definition at line 85 of file PorousFlowPermeabilityExponential.C.

86 {
87  _permeability_qp[_qp] = _k_anisotropy * _BB * std::exp(_porosity_qp[_qp] * _AA);
88 
89  if constexpr (!is_ad)
90  {
91  (*_dpermeability_qp_dvar)[_qp].resize(_num_var, RealTensorValue());
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];
95 
96  (*_dpermeability_qp_dgradvar)[_qp].resize(LIBMESH_DIM);
97  for (const auto i : make_range(Moose::dim))
98  {
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);
103  }
104  }
105 }
Real _AA
Empirical constant AA in k = k_ijk * BB * exp(AA * phi)
Real _BB
Empirical constant BB in k = k_ijk * BB * exp(AA * phi)
static constexpr std::size_t dim
TensorValue< Real > RealTensorValue
const unsigned int _num_var
Number of PorousFlow variables.
MaterialProperty< std::vector< RealTensorValue > > *const _dpermeability_qp_dvar
d(quadpoint permeability)/d(PorousFlow variable)
MaterialProperty< std::vector< std::vector< RealTensorValue > > > *const _dpermeability_qp_dgradvar
d(quadpoint permeability)/d(grad(PorousFlow variable))
GenericMaterialProperty< RealTensorValue, is_ad > & _permeability_qp
Quadpoint permeability.
static const std::string v
Definition: NS.h:84
const RealTensorValue _k_anisotropy
Tensor multiplier k_ijk in k = k_ijk * A * phi^n / (1 - phi)^m.
IntRange< T > make_range(T beg, T end)
const GenericMaterialProperty< Real, is_ad > & _porosity_qp
Quadpoint porosity.

◆ validParams()

template<bool is_ad>
InputParameters PorousFlowPermeabilityExponentialTempl< is_ad >::validParams ( )
static

Definition at line 17 of file PorousFlowPermeabilityExponential.C.

18 {
20  MooseEnum poroperm_function("log_k ln_k exp_k", "exp_k");
21  params.addParam<MooseEnum>("poroperm_function",
22  poroperm_function,
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.");
27  params.addParam<RealTensorValue>("k_anisotropy",
28  "A tensor to multiply the calculated scalar "
29  "permeability, in order to obtain anisotropy if "
30  "required. Defaults to isotropic permeability "
31  "if not specified.");
32  params.addRequiredParam<Real>("A", "Empirical constant; see poroperm_function.");
33  params.addRequiredParam<Real>("B", "Empirical constant; see poroperm_function.");
34  params.addClassDescription(
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).");
39  return params;
40 }
void addParam(const std::string &name, const std::initializer_list< typename T::value_type > &value, const std::string &doc_string)
void addRequiredParam(const std::string &name, const std::string &doc_string)
TensorValue< Real > RealTensorValue
DIE A HORRIBLE DEATH HERE typedef LIBMESH_DEFAULT_SCALAR_TYPE Real
void addClassDescription(const std::string &doc_string)

Member Data Documentation

◆ _A

template<bool is_ad>
const Real PorousFlowPermeabilityExponentialTempl< is_ad >::_A
protected

◆ _AA

template<bool is_ad>
Real PorousFlowPermeabilityExponentialTempl< is_ad >::_AA
protected

Empirical constant AA in k = k_ijk * BB * exp(AA * phi)

Definition at line 60 of file PorousFlowPermeabilityExponential.h.

Referenced by PorousFlowPermeabilityExponentialTempl< is_ad >::PorousFlowPermeabilityExponentialTempl().

◆ _B

template<bool is_ad>
const Real PorousFlowPermeabilityExponentialTempl< is_ad >::_B
protected

◆ _BB

template<bool is_ad>
Real PorousFlowPermeabilityExponentialTempl< is_ad >::_BB
protected

Empirical constant BB in k = k_ijk * BB * exp(AA * phi)

Definition at line 63 of file PorousFlowPermeabilityExponential.h.

Referenced by PorousFlowPermeabilityExponentialTempl< is_ad >::PorousFlowPermeabilityExponentialTempl().

◆ _dpermeability_qp_dgradvar

template<bool is_ad>
MaterialProperty<std::vector<std::vector<RealTensorValue> > >* const PorousFlowPermeabilityBaseTempl< is_ad >::_dpermeability_qp_dgradvar
protectedinherited

d(quadpoint permeability)/d(grad(PorousFlow variable))

Definition at line 33 of file PorousFlowPermeabilityBase.h.

◆ _dpermeability_qp_dvar

template<bool is_ad>
MaterialProperty<std::vector<RealTensorValue> >* const PorousFlowPermeabilityBaseTempl< is_ad >::_dpermeability_qp_dvar
protectedinherited

d(quadpoint permeability)/d(PorousFlow variable)

Definition at line 30 of file PorousFlowPermeabilityBase.h.

◆ _dporosity_qp_dgradvar

template<bool is_ad>
const MaterialProperty<std::vector<RealGradient> >* const PorousFlowPermeabilityExponentialTempl< is_ad >::_dporosity_qp_dgradvar
protected

d(quadpoint porosity)/d(grad(PorousFlow variable))

Definition at line 54 of file PorousFlowPermeabilityExponential.h.

◆ _dporosity_qp_dvar

template<bool is_ad>
const MaterialProperty<std::vector<Real> >* const PorousFlowPermeabilityExponentialTempl< is_ad >::_dporosity_qp_dvar
protected

d(quadpoint porosity)/d(PorousFlow variable)

Definition at line 51 of file PorousFlowPermeabilityExponential.h.

◆ _k_anisotropy

template<bool is_ad>
const RealTensorValue PorousFlowPermeabilityExponentialTempl< is_ad >::_k_anisotropy
protected

Tensor multiplier k_ijk in k = k_ijk * A * phi^n / (1 - phi)^m.

Definition at line 45 of file PorousFlowPermeabilityExponential.h.

◆ _num_components

const unsigned int PorousFlowMaterialVectorBase::_num_components
protectedinherited

◆ _num_phases

const unsigned int PorousFlowMaterialVectorBase::_num_phases
protectedinherited

◆ _num_var

const unsigned int PorousFlowMaterialVectorBase::_num_var
protectedinherited

◆ _permeability_qp

template<bool is_ad>
GenericMaterialProperty<RealTensorValue, is_ad>& PorousFlowPermeabilityBaseTempl< is_ad >::_permeability_qp
protectedinherited

Quadpoint permeability.

Definition at line 27 of file PorousFlowPermeabilityBase.h.

◆ _poroperm_function

template<bool is_ad>
enum PorousFlowPermeabilityExponentialTempl::PoropermFunction PorousFlowPermeabilityExponentialTempl< is_ad >::_poroperm_function
protected

◆ _porosity_qp

template<bool is_ad>
const GenericMaterialProperty<Real, is_ad>& PorousFlowPermeabilityExponentialTempl< is_ad >::_porosity_qp
protected

Quadpoint porosity.

Definition at line 48 of file PorousFlowPermeabilityExponential.h.

◆ usingPorousFlowPermeabilityBaseMembers

template<bool is_ad>
PorousFlowPermeabilityExponentialTempl< is_ad >::usingPorousFlowPermeabilityBaseMembers
protected

Definition at line 65 of file PorousFlowPermeabilityExponential.h.


The documentation for this class was generated from the following files: