www.mooseframework.org
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 Member Functions

 PorousFlowPorosityExponentialBase (const InputParameters &parameters)
 

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 atZeroQp () const =0
 Returns "b" at the quadpoint (porosity = a + (b - a) * exp(decay)) 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(porous-flow variable pvar) More...
 
virtual RealGradient ddecayQp_dgradvar (unsigned pvar) const =0
 d(decay)/d(grad(porous-flow 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...
 
MaterialProperty< Real > & _porosity
 computed porosity at the nodes or quadpoints More...
 
MaterialProperty< std::vector< Real > > & _dporosity_dvar
 d(porosity)/d(PorousFlow variable) More...
 
MaterialProperty< std::vector< RealGradient > > & _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 36 of file PorousFlowPorosityExponentialBase.h.

Constructor & Destructor Documentation

PorousFlowPorosityExponentialBase::PorousFlowPorosityExponentialBase ( const InputParameters &  parameters)

Definition at line 33 of file PorousFlowPorosityExponentialBase.C.

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

Member Function Documentation

virtual Real PorousFlowPorosityExponentialBase::atNegInfinityQp ( ) const
protectedpure virtual

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

Implemented in PorousFlowPorosityTHM, PorousFlowPorosityHM, and PorousFlowPorosityTM.

Referenced by computeQpProperties(), and initQpStatefulProperties().

virtual Real PorousFlowPorosityExponentialBase::atZeroQp ( ) const
protectedpure virtual

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

Implemented in PorousFlowPorosityTHM, PorousFlowPorosityHM, and PorousFlowPorosityTM.

Referenced by computeQpProperties(), and initQpStatefulProperties().

void PorousFlowPorosityExponentialBase::computeQpProperties ( )
overrideprotectedvirtual

Reimplemented in PorousFlowPorosityHMBiotModulus.

Definition at line 60 of file PorousFlowPorosityExponentialBase.C.

61 {
62  const Real a = atNegInfinityQp();
63  const Real b = atZeroQp();
64  const Real decay = decayQp();
65 
66  Real deriv = 0.0; // = d(porosity)/d(decay)
67  if (decay <= 0.0 || !_ensure_positive)
68  {
69  _porosity[_qp] = a + (b - a) * std::exp(decay);
70  deriv = _porosity[_qp] - a;
71  }
72  else
73  {
74  const Real c = std::log(a / (a - b));
75  const Real expx = std::exp(-decay / c);
76  // note that at decay = 0, we have expx = 1, so porosity = a + b - a = b
77  // and at decay = infinity, expx = 0, so porosity = a + (b - a) * a / (a - b) = 0
78  _porosity[_qp] = a + (b - a) * std::exp(c * (1.0 - expx));
79  deriv = (_porosity[_qp] - a) * expx;
80  }
81 
82  _dporosity_dvar[_qp].resize(_num_var);
83  _dporosity_dgradvar[_qp].resize(_num_var);
84  for (unsigned int v = 0; v < _num_var; ++v)
85  {
86  _dporosity_dvar[_qp][v] = ddecayQp_dvar(v) * deriv;
87  _dporosity_dgradvar[_qp][v] = ddecayQp_dgradvar(v) * deriv;
88  }
89 }
const bool _ensure_positive
for decayQp() > 0, porosity can be negative when using porosity = a + (b - a) * exp(decay).
virtual Real atNegInfinityQp() const =0
Returns "a" at the quadpoint (porosity = a + (b - a) * exp(decay))
MaterialProperty< std::vector< Real > > & _dporosity_dvar
d(porosity)/d(PorousFlow variable)
MaterialProperty< std::vector< RealGradient > > & _dporosity_dgradvar
d(porosity)/d(grad PorousFlow variable)
virtual Real decayQp() const =0
Returns "decay" at the quadpoint (porosity = a + (b - a) * exp(decay))
MaterialProperty< Real > & _porosity
computed porosity at the nodes or quadpoints
virtual Real ddecayQp_dvar(unsigned pvar) const =0
d(decay)/d(porous-flow variable pvar)
const unsigned int _num_var
Number of PorousFlow variables.
virtual RealGradient ddecayQp_dgradvar(unsigned pvar) const =0
d(decay)/d(grad(porous-flow variable pvar))
virtual Real atZeroQp() const =0
Returns "b" at the quadpoint (porosity = a + (b - a) * exp(decay))
virtual RealGradient PorousFlowPorosityExponentialBase::ddecayQp_dgradvar ( unsigned  pvar) const
protectedpure virtual

d(decay)/d(grad(porous-flow variable pvar))

Implemented in PorousFlowPorosityTHM, PorousFlowPorosityHM, and PorousFlowPorosityTM.

Referenced by computeQpProperties().

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

d(decay)/d(porous-flow variable pvar)

Implemented in PorousFlowPorosityTHM, PorousFlowPorosityHM, and PorousFlowPorosityTM.

Referenced by computeQpProperties().

virtual Real PorousFlowPorosityExponentialBase::decayQp ( ) const
protectedpure virtual

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

Implemented in PorousFlowPorosityTHM, PorousFlowPorosityHM, and PorousFlowPorosityTM.

Referenced by computeQpProperties(), and initQpStatefulProperties().

void PorousFlowPorosityExponentialBase::initQpStatefulProperties ( )
overrideprotectedvirtual

Definition at line 42 of file PorousFlowPorosityExponentialBase.C.

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

Member Data Documentation

MaterialProperty<std::vector<RealGradient> >& PorousFlowPorosityBase::_dporosity_dgradvar
protectedinherited
MaterialProperty<std::vector<Real> >& PorousFlowPorosityBase::_dporosity_dvar
protectedinherited
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 70 of file PorousFlowPorosityExponentialBase.h.

Referenced by computeQpProperties(), and initQpStatefulProperties().

const unsigned int PorousFlowMaterialVectorBase::_num_components
protectedinherited
const unsigned int PorousFlowMaterialVectorBase::_num_phases
protectedinherited
const unsigned int PorousFlowMaterialVectorBase::_num_var
protectedinherited
MaterialProperty<Real>& PorousFlowPorosityBase::_porosity
protectedinherited
const bool PorousFlowPorosityExponentialBase::_strain_at_nearest_qp
protected

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