www.mooseframework.org
Public Types | Public Member Functions | Static Public Member Functions | Protected Member Functions | Protected Attributes | List of all members
PorousFlowPorosityExponentialBase Class Referenceabstract

Base class Material designed to provide the porosity. More...

#include <PorousFlowPorosityExponentialBase.h>

Inheritance diagram for PorousFlowPorosityExponentialBase:
[legend]

Public Types

typedef DerivativeMaterialPropertyNameInterface::SymbolName SymbolName
 

Public Member Functions

 PorousFlowPorosityExponentialBase (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 Member Functions

virtual void initQpStatefulProperties () override
 
virtual void computeQpProperties () override
 
virtual Real atNegInfinityQp () const =0
 Returns "a" at the quadpoint (porosity = a + (b - a) * exp(decay)) More...
 
virtual Real datNegInfinityQp (unsigned pvar) const =0
 d(a)/d(PorousFlow variable pvar) More...
 
virtual Real atZeroQp () const =0
 Returns "b" at the quadpoint (porosity = a + (b - a) * exp(decay)) More...
 
virtual Real datZeroQp (unsigned pvar) const =0
 d(a)/d(PorousFlow variable pvar) More...
 
virtual Real decayQp () const =0
 Returns "decay" at the quadpoint (porosity = a + (b - a) * exp(decay)) More...
 
virtual Real ddecayQp_dvar (unsigned pvar) const =0
 d(decay)/d(PorousFlow variable pvar) More...
 
virtual RealGradient ddecayQp_dgradvar (unsigned pvar) const =0
 d(decay)/d(grad(PorousFlow variable pvar)) More...
 

Protected Attributes

const bool _strain_at_nearest_qp
 When calculating nodal porosity, use the strain at the nearest quadpoint to the node. More...
 
const bool _ensure_positive
 for decayQp() > 0, porosity can be negative when using porosity = a + (b - a) * exp(decay). More...
 
GenericMaterialProperty< Real, is_ad > & _porosity
 Computed porosity at the nodes or quadpoints. More...
 
MaterialProperty< std::vector< Real > > *const _dporosity_dvar
 d(porosity)/d(PorousFlow variable) More...
 
MaterialProperty< std::vector< RealGradient > > *const _dporosity_dgradvar
 d(porosity)/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

Base class Material designed to provide the porosity.

In this class porosity = a + (b - a) * exp(decay) where a = atNegInfinityQp() b = atZeroQp() decay = decayQp() Since this expression can become negative for decay > 0, if ensure_positive = true then for decay > 0 the following expression is used instead: porosity = a + (b - a) * exp(c * (1 - Exp(- decay / c))) where c = log(a/(b-a)) This latter expression is C1 continuous at decay=0 with the former expression. It is monotonically decreasing with "decay" and is positive.

Definition at line 31 of file PorousFlowPorosityExponentialBase.h.

Constructor & Destructor Documentation

◆ PorousFlowPorosityExponentialBase()

PorousFlowPorosityExponentialBase::PorousFlowPorosityExponentialBase ( const InputParameters parameters)

Definition at line 34 of file PorousFlowPorosityExponentialBase.C.

36  : PorousFlowPorosityBase(parameters),
37  _strain_at_nearest_qp(getParam<bool>("strain_at_nearest_qp")),
38  _ensure_positive(getParam<bool>("ensure_positive"))
39 {
40 }
const bool _ensure_positive
for decayQp() > 0, porosity can be negative when using porosity = a + (b - a) * exp(decay).
const bool _strain_at_nearest_qp
When calculating nodal porosity, use the strain at the nearest quadpoint to the node.
PorousFlowPorosityBaseTempl< false > PorousFlowPorosityBase

Member Function Documentation

◆ atNegInfinityQp()

virtual Real PorousFlowPorosityExponentialBase::atNegInfinityQp ( ) const
protectedpure virtual

Returns "a" at the quadpoint (porosity = a + (b - a) * exp(decay))

Implemented in PorousFlowPorosity.

Referenced by computeQpProperties(), and initQpStatefulProperties().

◆ atZeroQp()

virtual Real PorousFlowPorosityExponentialBase::atZeroQp ( ) const
protectedpure virtual

Returns "b" at the quadpoint (porosity = a + (b - a) * exp(decay))

Implemented in PorousFlowPorosity.

Referenced by computeQpProperties(), and initQpStatefulProperties().

◆ computeQpProperties()

void PorousFlowPorosityExponentialBase::computeQpProperties ( )
overrideprotectedvirtual

Reimplemented in PorousFlowPorosityHMBiotModulus.

Definition at line 61 of file PorousFlowPorosityExponentialBase.C.

62 {
63  const Real a = atNegInfinityQp();
64  const Real b = atZeroQp();
65  const Real decay = decayQp();
66  Real exp_term = 1.0; // set appropriately below
67 
68  Real deriv = 0.0; // = d(porosity)/d(decay)
69  if (decay <= 0.0 || !_ensure_positive)
70  {
71  exp_term = std::exp(decay);
72  _porosity[_qp] = a + (b - a) * exp_term;
73  deriv = _porosity[_qp] - a;
74  }
75  else
76  {
77  const Real c = std::log(a / (a - b));
78  const Real expx = std::exp(-decay / c);
79  // note that at decay = 0, we have expx = 1, so porosity = a + b - a = b
80  // and at decay = infinity, expx = 0, so porosity = a + (b - a) * a / (a - b) = 0
81  exp_term = std::exp(c * (1.0 - expx));
82  _porosity[_qp] = a + (b - a) * exp_term;
83  deriv = (_porosity[_qp] - a) * expx;
84  }
85 
86  (*_dporosity_dvar)[_qp].resize(_num_var);
87  (*_dporosity_dgradvar)[_qp].resize(_num_var);
88  for (unsigned int v = 0; v < _num_var; ++v)
89  {
90  (*_dporosity_dvar)[_qp][v] = ddecayQp_dvar(v) * deriv;
91  (*_dporosity_dgradvar)[_qp][v] = ddecayQp_dgradvar(v) * deriv;
92 
93  const Real da = datNegInfinityQp(v);
94  const Real db = datZeroQp(v);
95  (*_dporosity_dvar)[_qp][v] += da * (1 - exp_term) + db * exp_term;
96 
97  if (!(decay <= 0.0 || !_ensure_positive))
98  {
99  const Real c = std::log(a / (a - b));
100  const Real expx = std::exp(-decay / c);
101  const Real dc = (a - b) * (da * b / a - db) / std::pow(a, 2);
102  (*_dporosity_dvar)[_qp][v] += (b - a) * exp_term * dc * (1 - expx - expx / c);
103  }
104  }
105 }
const bool _ensure_positive
for decayQp() > 0, porosity can be negative when using porosity = a + (b - a) * exp(decay).
virtual Real atZeroQp() const =0
Returns "b" at the quadpoint (porosity = a + (b - a) * exp(decay))
const GeochemicalDatabaseReader db("database/moose_testdb.json", true, true, false)
Real deriv(unsigned n, unsigned alpha, unsigned beta, Real x)
virtual Real datZeroQp(unsigned pvar) const =0
d(a)/d(PorousFlow variable pvar)
virtual Real decayQp() const =0
Returns "decay" at the quadpoint (porosity = a + (b - a) * exp(decay))
const unsigned int _num_var
Number of PorousFlow variables.
virtual Real atNegInfinityQp() const =0
Returns "a" at the quadpoint (porosity = a + (b - a) * exp(decay))
virtual RealGradient ddecayQp_dgradvar(unsigned pvar) const =0
d(decay)/d(grad(PorousFlow variable pvar))
GenericMaterialProperty< Real, is_ad > & _porosity
Computed porosity at the nodes or quadpoints.
DIE A HORRIBLE DEATH HERE typedef LIBMESH_DEFAULT_SCALAR_TYPE Real
static const std::string v
Definition: NS.h:82
virtual Real datNegInfinityQp(unsigned pvar) const =0
d(a)/d(PorousFlow variable pvar)
virtual Real ddecayQp_dvar(unsigned pvar) const =0
d(decay)/d(PorousFlow variable pvar)
MooseUnits pow(const MooseUnits &, int)

◆ datNegInfinityQp()

virtual Real PorousFlowPorosityExponentialBase::datNegInfinityQp ( unsigned  pvar) const
protectedpure virtual

d(a)/d(PorousFlow variable pvar)

Implemented in PorousFlowPorosity.

Referenced by computeQpProperties().

◆ datZeroQp()

virtual Real PorousFlowPorosityExponentialBase::datZeroQp ( unsigned  pvar) const
protectedpure virtual

d(a)/d(PorousFlow variable pvar)

Implemented in PorousFlowPorosity.

Referenced by computeQpProperties().

◆ ddecayQp_dgradvar()

virtual RealGradient PorousFlowPorosityExponentialBase::ddecayQp_dgradvar ( unsigned  pvar) const
protectedpure virtual

d(decay)/d(grad(PorousFlow variable pvar))

Implemented in PorousFlowPorosity.

Referenced by computeQpProperties().

◆ ddecayQp_dvar()

virtual Real PorousFlowPorosityExponentialBase::ddecayQp_dvar ( unsigned  pvar) const
protectedpure virtual

d(decay)/d(PorousFlow variable pvar)

Implemented in PorousFlowPorosity.

Referenced by computeQpProperties().

◆ decayQp()

virtual Real PorousFlowPorosityExponentialBase::decayQp ( ) const
protectedpure virtual

Returns "decay" at the quadpoint (porosity = a + (b - a) * exp(decay))

Implemented in PorousFlowPorosity.

Referenced by computeQpProperties(), and initQpStatefulProperties().

◆ initQpStatefulProperties()

void PorousFlowPorosityExponentialBase::initQpStatefulProperties ( )
overrideprotectedvirtual

Definition at line 43 of file PorousFlowPorosityExponentialBase.C.

44 {
45  const Real a = atNegInfinityQp();
46  const Real b = atZeroQp();
47  mooseAssert(a > b, "PorousFlowPorosityExponentialBase a must be larger than b");
48  const Real decay = decayQp();
49 
50  if (decay <= 0.0 || !_ensure_positive)
51  _porosity[_qp] = a + (b - a) * std::exp(decay);
52  else
53  {
54  const Real c = std::log(a / (a - b));
55  const Real expx = std::exp(-decay / c);
56  _porosity[_qp] = a + (b - a) * std::exp(c * (1.0 - expx));
57  }
58 }
const bool _ensure_positive
for decayQp() > 0, porosity can be negative when using porosity = a + (b - a) * exp(decay).
virtual Real atZeroQp() const =0
Returns "b" at the quadpoint (porosity = a + (b - a) * exp(decay))
virtual Real decayQp() const =0
Returns "decay" at the quadpoint (porosity = a + (b - a) * exp(decay))
virtual Real atNegInfinityQp() const =0
Returns "a" at the quadpoint (porosity = a + (b - a) * exp(decay))
GenericMaterialProperty< Real, is_ad > & _porosity
Computed porosity at the nodes or quadpoints.
DIE A HORRIBLE DEATH HERE typedef LIBMESH_DEFAULT_SCALAR_TYPE Real

◆ validParams()

InputParameters PorousFlowPorosityExponentialBase::validParams ( )
static

Definition at line 13 of file PorousFlowPorosityExponentialBase.C.

Referenced by PorousFlowPorosity::validParams().

14 {
16  params.addParam<bool>("strain_at_nearest_qp",
17  false,
18  "When calculating nodal porosity that depends on strain, use the strain at "
19  "the nearest quadpoint. This adds a small extra computational burden, and "
20  "is not necessary for simulations involving only linear lagrange elements. "
21  " If you set this to true, you will also want to set the same parameter to "
22  "true for related Kernels and Materials");
23  params.addParam<bool>("ensure_positive",
24  true,
25  "Modify the usual exponential relationships that "
26  "governs porosity so that porosity is always "
27  "positive");
28  params.addClassDescription("Base class Material for porosity that is computed via an exponential "
29  "relationship with coupled variables (strain, porepressure, "
30  "temperature, chemistry)");
31  return params;
32 }
void addParam(const std::string &name, const std::initializer_list< typename T::value_type > &value, const std::string &doc_string)
static InputParameters validParams()
void addClassDescription(const std::string &doc_string)

Member Data Documentation

◆ _dporosity_dgradvar

template<bool is_ad>
MaterialProperty<std::vector<RealGradient> >* const PorousFlowPorosityBaseTempl< is_ad >::_dporosity_dgradvar
protectedinherited

d(porosity)/d(grad PorousFlow variable)

Definition at line 33 of file PorousFlowPorosityBase.h.

Referenced by PorousFlowPorosityLinear::computeQpProperties(), and PorousFlowPorosityHMBiotModulus::computeQpProperties().

◆ _dporosity_dvar

template<bool is_ad>
MaterialProperty<std::vector<Real> >* const PorousFlowPorosityBaseTempl< is_ad >::_dporosity_dvar
protectedinherited

d(porosity)/d(PorousFlow variable)

Definition at line 30 of file PorousFlowPorosityBase.h.

Referenced by PorousFlowPorosityLinear::computeQpProperties(), and PorousFlowPorosityHMBiotModulus::computeQpProperties().

◆ _ensure_positive

const bool PorousFlowPorosityExponentialBase::_ensure_positive
protected

for decayQp() > 0, porosity can be negative when using porosity = a + (b - a) * exp(decay).

This expression is modified if ensure_positive = true to read porosity = a + (b - a) * exp(c * (1 - Exp(- decay / c))) where c = log(a/(b-a))

Definition at line 73 of file PorousFlowPorosityExponentialBase.h.

Referenced by computeQpProperties(), and initQpStatefulProperties().

◆ _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

◆ _porosity

template<bool is_ad>
GenericMaterialProperty<Real, is_ad>& PorousFlowPorosityBaseTempl< is_ad >::_porosity
protectedinherited

◆ _strain_at_nearest_qp

const bool PorousFlowPorosityExponentialBase::_strain_at_nearest_qp
protected

When calculating nodal porosity, use the strain at the nearest quadpoint to the node.

Definition at line 64 of file PorousFlowPorosityExponentialBase.h.

Referenced by PorousFlowPorosityHMBiotModulus::computeQpProperties(), PorousFlowPorosity::ddecayQp_dgradvar(), and PorousFlowPorosity::decayQp().


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