www.mooseframework.org
Public Member Functions | Protected Types | Protected Member Functions | Protected Attributes | List of all members
PorousFlowPermeabilityKozenyCarman Class Reference

Material designed to provide the permeability tensor which is calculated from porosity using a form of the Kozeny-Carman equation (e.g. More...

#include <PorousFlowPermeabilityKozenyCarman.h>

Inheritance diagram for PorousFlowPermeabilityKozenyCarman:
[legend]

Public Member Functions

 PorousFlowPermeabilityKozenyCarman (const InputParameters &parameters)
 

Protected Types

enum  PoropermFunction { PoropermFunction::kozeny_carman_fd2, PoropermFunction::kozeny_carman_phi0 }
 Name of porosity-permeability relationship. More...
 

Protected Member Functions

void computeQpProperties () override
 

Protected Attributes

const Real _k0
 Reference scalar permeability in A = k0 * (1 - phi0)^m / phi0^n. More...
 
const Real _phi0
 Reference porosity in A = k0 * (1 - phi0)^m / phi0^n. More...
 
const Real _f
 Multiplying factor in A = f * d^2. More...
 
const Real _d
 Grain diameter in A = f * d^2. More...
 
const Real _m
 Exponent in k = k_ijk * A * phi^n / (1 - phi)^m. More...
 
const Real _n
 Exponent in k = k_ijk * A * phi^n / (1 - phi)^m. More...
 
const RealTensorValue _k_anisotropy
 Tensor multiplier k_ijk in k = k_ijk * A * phi^n / (1 - phi)^m. More...
 
const MaterialProperty< Real > & _porosity_qp
 quadpoint porosity More...
 
const MaterialProperty< std::vector< Real > > & _dporosity_qp_dvar
 d(quadpoint porosity)/d(PorousFlow variable) More...
 
const MaterialProperty< std::vector< RealGradient > > & _dporosity_qp_dgradvar
 d(quadpoint porosity)/d(grad(PorousFlow variable)) More...
 
enum PorousFlowPermeabilityKozenyCarman::PoropermFunction _poroperm_function
 
Real _A
 Multiplying factor in k = k_ijk * A * phi^n / (1 - phi)^m. More...
 
MaterialProperty< RealTensorValue > & _permeability_qp
 quadpoint permeability More...
 
MaterialProperty< std::vector< RealTensorValue > > & _dpermeability_qp_dvar
 d(quadpoint permeability)/d(PorousFlow variable) More...
 
MaterialProperty< std::vector< std::vector< RealTensorValue > > > & _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

Material designed to provide the permeability tensor which is calculated from porosity using a form of the Kozeny-Carman equation (e.g.

Oelkers 1996: Reviews in Mineralogy v. 34, p. 131-192): k = k_ijk * A * phi^n / (1 - phi)^m where k_ijk is a tensor providing the anisotropy, phi is porosity, n and m are positive scalar constants and A is given in one of the following forms: A = k0 * (1 - phi0)^m / phi0^n where k0 and phi0 are a reference permeability and porosity, or A = f * d^2 where f is a scalar constant and d is grain diameter.

Definition at line 33 of file PorousFlowPermeabilityKozenyCarman.h.

Member Enumeration Documentation

Name of porosity-permeability relationship.

Enumerator
kozeny_carman_fd2 
kozeny_carman_phi0 

Definition at line 72 of file PorousFlowPermeabilityKozenyCarman.h.

72 { kozeny_carman_fd2, kozeny_carman_phi0 } _poroperm_function;
enum PorousFlowPermeabilityKozenyCarman::PoropermFunction _poroperm_function

Constructor & Destructor Documentation

PorousFlowPermeabilityKozenyCarman::PorousFlowPermeabilityKozenyCarman ( const InputParameters &  parameters)

Definition at line 50 of file PorousFlowPermeabilityKozenyCarman.C.

52  : PorousFlowPermeabilityBase(parameters),
53  _k0(parameters.isParamValid("k0") ? getParam<Real>("k0") : -1),
54  _phi0(parameters.isParamValid("phi0") ? getParam<Real>("phi0") : -1),
55  _f(parameters.isParamValid("f") ? getParam<Real>("f") : -1),
56  _d(parameters.isParamValid("d") ? getParam<Real>("d") : -1),
57  _m(getParam<Real>("m")),
58  _n(getParam<Real>("n")),
59  _k_anisotropy(parameters.isParamValid("k_anisotropy")
60  ? getParam<RealTensorValue>("k_anisotropy")
61  : RealTensorValue(1.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 1.0)),
62  _porosity_qp(getMaterialProperty<Real>("PorousFlow_porosity_qp")),
63  _dporosity_qp_dvar(getMaterialProperty<std::vector<Real>>("dPorousFlow_porosity_qp_dvar")),
65  getMaterialProperty<std::vector<RealGradient>>("dPorousFlow_porosity_qp_dgradvar")),
66  _poroperm_function(getParam<MooseEnum>("poroperm_function").getEnum<PoropermFunction>())
67 {
68  switch (_poroperm_function)
69  {
71  if (!(parameters.isParamValid("f") && parameters.isParamValid("d")))
72  mooseError("You must specify f and d in order to use kozeny_carman_fd2 in "
73  "PorousFlowPermeabilityKozenyCarman");
74  _A = _f * _d * _d;
75  break;
76 
78  if (!(parameters.isParamValid("k0") && parameters.isParamValid("phi0")))
79  mooseError("You must specify k0 and phi0 in order to use kozeny_carman_phi0 in "
80  "PorousFlowPermeabilityKozenyCarman");
81  _A = _k0 * std::pow(1.0 - _phi0, _m) / std::pow(_phi0, _n);
82  break;
83  }
84 }
const Real _k0
Reference scalar permeability in A = k0 * (1 - phi0)^m / phi0^n.
Real _A
Multiplying factor in k = k_ijk * A * phi^n / (1 - phi)^m.
const Real _phi0
Reference porosity in A = k0 * (1 - phi0)^m / phi0^n.
const MaterialProperty< Real > & _porosity_qp
quadpoint porosity
const MaterialProperty< std::vector< RealGradient > > & _dporosity_qp_dgradvar
d(quadpoint porosity)/d(grad(PorousFlow variable))
const RealTensorValue _k_anisotropy
Tensor multiplier k_ijk in k = k_ijk * A * phi^n / (1 - phi)^m.
const Real _f
Multiplying factor in A = f * d^2.
PorousFlowPermeabilityBase(const InputParameters &parameters)
ExpressionBuilder::EBTerm pow(const ExpressionBuilder::EBTerm &left, T exponent)
const Real _d
Grain diameter in A = f * d^2.
PoropermFunction
Name of porosity-permeability relationship.
const Real _n
Exponent in k = k_ijk * A * phi^n / (1 - phi)^m.
enum PorousFlowPermeabilityKozenyCarman::PoropermFunction _poroperm_function
const MaterialProperty< std::vector< Real > > & _dporosity_qp_dvar
d(quadpoint porosity)/d(PorousFlow variable)
const Real _m
Exponent in k = k_ijk * A * phi^n / (1 - phi)^m.

Member Function Documentation

void PorousFlowPermeabilityKozenyCarman::computeQpProperties ( )
overrideprotected

Definition at line 87 of file PorousFlowPermeabilityKozenyCarman.C.

88 {
89  _permeability_qp[_qp] =
90  _k_anisotropy * _A * std::pow(_porosity_qp[_qp], _n) / std::pow(1.0 - _porosity_qp[_qp], _m);
91 
92  _dpermeability_qp_dvar[_qp].resize(_num_var, RealTensorValue());
93  for (unsigned int v = 0; v < _num_var; ++v)
95  (_n / _porosity_qp[_qp] + _m / (1.0 - _porosity_qp[_qp]));
96 
97  _dpermeability_qp_dgradvar[_qp].resize(LIBMESH_DIM);
98  for (unsigned i = 0; i < LIBMESH_DIM; ++i)
99  {
100  _dpermeability_qp_dgradvar[_qp][i].resize(_num_var, RealTensorValue());
101  for (unsigned int v = 0; v < _num_var; ++v)
102  _dpermeability_qp_dgradvar[_qp][i][v] =
103  _dporosity_qp_dgradvar[_qp][v](i) * _permeability_qp[_qp] *
104  (_n / _porosity_qp[_qp] + _m / (1.0 - _porosity_qp[_qp]));
105  }
106 }
Real _A
Multiplying factor in k = k_ijk * A * phi^n / (1 - phi)^m.
MaterialProperty< std::vector< std::vector< RealTensorValue > > > & _dpermeability_qp_dgradvar
d(quadpoint permeability)/d(grad(PorousFlow variable))
const MaterialProperty< Real > & _porosity_qp
quadpoint porosity
const MaterialProperty< std::vector< RealGradient > > & _dporosity_qp_dgradvar
d(quadpoint porosity)/d(grad(PorousFlow variable))
const RealTensorValue _k_anisotropy
Tensor multiplier k_ijk in k = k_ijk * A * phi^n / (1 - phi)^m.
const unsigned int _num_var
Number of PorousFlow variables.
ExpressionBuilder::EBTerm pow(const ExpressionBuilder::EBTerm &left, T exponent)
MaterialProperty< std::vector< RealTensorValue > > & _dpermeability_qp_dvar
d(quadpoint permeability)/d(PorousFlow variable)
const Real _n
Exponent in k = k_ijk * A * phi^n / (1 - phi)^m.
MaterialProperty< RealTensorValue > & _permeability_qp
quadpoint permeability
const MaterialProperty< std::vector< Real > > & _dporosity_qp_dvar
d(quadpoint porosity)/d(PorousFlow variable)
const Real _m
Exponent in k = k_ijk * A * phi^n / (1 - phi)^m.

Member Data Documentation

Real PorousFlowPermeabilityKozenyCarman::_A
protected

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

Definition at line 75 of file PorousFlowPermeabilityKozenyCarman.h.

Referenced by computeQpProperties(), and PorousFlowPermeabilityKozenyCarman().

const Real PorousFlowPermeabilityKozenyCarman::_d
protected

Grain diameter in A = f * d^2.

Definition at line 51 of file PorousFlowPermeabilityKozenyCarman.h.

Referenced by PorousFlowPermeabilityKozenyCarman().

MaterialProperty<std::vector<std::vector<RealTensorValue> > >& PorousFlowPermeabilityBase::_dpermeability_qp_dgradvar
protectedinherited
MaterialProperty<std::vector<RealTensorValue> >& PorousFlowPermeabilityBase::_dpermeability_qp_dvar
protectedinherited
const MaterialProperty<std::vector<RealGradient> >& PorousFlowPermeabilityKozenyCarman::_dporosity_qp_dgradvar
protected

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

Definition at line 69 of file PorousFlowPermeabilityKozenyCarman.h.

Referenced by computeQpProperties().

const MaterialProperty<std::vector<Real> >& PorousFlowPermeabilityKozenyCarman::_dporosity_qp_dvar
protected

d(quadpoint porosity)/d(PorousFlow variable)

Definition at line 66 of file PorousFlowPermeabilityKozenyCarman.h.

Referenced by computeQpProperties().

const Real PorousFlowPermeabilityKozenyCarman::_f
protected

Multiplying factor in A = f * d^2.

Definition at line 48 of file PorousFlowPermeabilityKozenyCarman.h.

Referenced by PorousFlowPermeabilityKozenyCarman().

const Real PorousFlowPermeabilityKozenyCarman::_k0
protected

Reference scalar permeability in A = k0 * (1 - phi0)^m / phi0^n.

Definition at line 42 of file PorousFlowPermeabilityKozenyCarman.h.

Referenced by PorousFlowPermeabilityKozenyCarman().

const RealTensorValue PorousFlowPermeabilityKozenyCarman::_k_anisotropy
protected

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

Definition at line 60 of file PorousFlowPermeabilityKozenyCarman.h.

Referenced by computeQpProperties().

const Real PorousFlowPermeabilityKozenyCarman::_m
protected

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

Definition at line 54 of file PorousFlowPermeabilityKozenyCarman.h.

Referenced by computeQpProperties(), and PorousFlowPermeabilityKozenyCarman().

const Real PorousFlowPermeabilityKozenyCarman::_n
protected

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

Definition at line 57 of file PorousFlowPermeabilityKozenyCarman.h.

Referenced by computeQpProperties(), and PorousFlowPermeabilityKozenyCarman().

const unsigned int PorousFlowMaterialVectorBase::_num_components
protectedinherited
const unsigned int PorousFlowMaterialVectorBase::_num_phases
protectedinherited
const unsigned int PorousFlowMaterialVectorBase::_num_var
protectedinherited
MaterialProperty<RealTensorValue>& PorousFlowPermeabilityBase::_permeability_qp
protectedinherited
const Real PorousFlowPermeabilityKozenyCarman::_phi0
protected

Reference porosity in A = k0 * (1 - phi0)^m / phi0^n.

Definition at line 45 of file PorousFlowPermeabilityKozenyCarman.h.

Referenced by PorousFlowPermeabilityKozenyCarman().

enum PorousFlowPermeabilityKozenyCarman::PoropermFunction PorousFlowPermeabilityKozenyCarman::_poroperm_function
protected
const MaterialProperty<Real>& PorousFlowPermeabilityKozenyCarman::_porosity_qp
protected

quadpoint porosity

Definition at line 63 of file PorousFlowPermeabilityKozenyCarman.h.

Referenced by computeQpProperties().


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