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

This Matrial evolves porosity so that the PorousFlow equations match the standard equations of poroelasticity theory with a constant BiotModulus. More...

#include <PorousFlowPorosityHMBiotModulus.h>

Inheritance diagram for PorousFlowPorosityHMBiotModulus:
[legend]

Public Member Functions

 PorousFlowPorosityHMBiotModulus (const InputParameters &parameters)
 

Protected Member Functions

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

Protected Attributes

const MaterialProperty< Real > & _porosity_old
 old value of porosity More...
 
const Real _biot_modulus
 constant biot modulus More...
 
const Real _fluid_bulk_modulus
 constant fluid bulk modulus More...
 
const MaterialProperty< Real > & _pf_old
 old value of effective fluid pressure More...
 
const MaterialProperty< Real > & _vol_strain_qp_old
 old value of total volumetric strain More...
 
const MaterialProperty< Real > & _vol_strain_rate_qp
 volumetric strain rate More...
 
const MaterialProperty< std::vector< RealGradient > > & _dvol_strain_rate_qp_dvar
 d(volumetric strain rate)/d(PorousFlow variable) More...
 
const VariableValue & _phi0
 porosity at zero strain and zero porepressure More...
 
const Real _biot
 biot coefficient More...
 
const Real _solid_bulk
 drained bulk modulus of the porous skeleton More...
 
const Real _coeff
 short-hand number (biot-1)/solid_bulk More...
 
const VariableValue & _p_reference
 reference porepressure More...
 
const unsigned int _ndisp
 number of displacement variables More...
 
std::vector< unsigned int > _disp_var_num
 variable number of the displacements variables More...
 
const MaterialProperty< Real > & _vol_strain_qp
 strain More...
 
const MaterialProperty< std::vector< RealGradient > > & _dvol_strain_qp_dvar
 d(strain)/(dvar) More...
 
const MaterialProperty< Real > & _pf
 effective porepressure More...
 
const MaterialProperty< std::vector< Real > > & _dpf_dvar
 d(effective porepressure)/(d porflow variable) More...
 
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

This Matrial evolves porosity so that the PorousFlow equations match the standard equations of poroelasticity theory with a constant BiotModulus.

Even though a constant BiotModulus is not strictly correct, many analytical solutions of poroelasticity theory assume this, so PorousFlowPorosityHMBiotModulus is useful for comparing with those solutions. Otherwise it shouldn't generally be used because PorousFlowPorosityHM is physically more correct.

Definition at line 28 of file PorousFlowPorosityHMBiotModulus.h.

Constructor & Destructor Documentation

PorousFlowPorosityHMBiotModulus::PorousFlowPorosityHMBiotModulus ( const InputParameters &  parameters)

Definition at line 30 of file PorousFlowPorosityHMBiotModulus.C.

31  : PorousFlowPorosityHM(parameters),
32  _porosity_old(_nodal_material ? getMaterialPropertyOld<Real>("PorousFlow_porosity_nodal")
33  : getMaterialPropertyOld<Real>("PorousFlow_porosity_qp")),
34  _biot_modulus(getParam<Real>("constant_biot_modulus")),
35  _fluid_bulk_modulus(getParam<Real>("constant_fluid_bulk_modulus")),
36  _pf_old(_nodal_material
37  ? getMaterialPropertyOld<Real>("PorousFlow_effective_fluid_pressure_nodal")
38  : getMaterialPropertyOld<Real>("PorousFlow_effective_fluid_pressure_qp")),
39  _vol_strain_qp_old(getMaterialPropertyOld<Real>("PorousFlow_total_volumetric_strain_qp")),
40  _vol_strain_rate_qp(getMaterialProperty<Real>("PorousFlow_volumetric_strain_rate_qp")),
41  _dvol_strain_rate_qp_dvar(getMaterialProperty<std::vector<RealGradient>>(
42  "dPorousFlow_volumetric_strain_rate_qp_dvar"))
43 {
44 }
const MaterialProperty< Real > & _porosity_old
old value of porosity
const MaterialProperty< Real > & _pf_old
old value of effective fluid pressure
const Real _fluid_bulk_modulus
constant fluid bulk modulus
const MaterialProperty< Real > & _vol_strain_qp_old
old value of total volumetric strain
const MaterialProperty< std::vector< RealGradient > > & _dvol_strain_rate_qp_dvar
d(volumetric strain rate)/d(PorousFlow variable)
const MaterialProperty< Real > & _vol_strain_rate_qp
volumetric strain rate
const Real _biot_modulus
constant biot modulus
PorousFlowPorosityHM(const InputParameters &parameters)

Member Function Documentation

Real PorousFlowPorosityHM::atNegInfinityQp ( ) const
overrideprotectedvirtualinherited

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

Implements PorousFlowPorosityExponentialBase.

Definition at line 60 of file PorousFlowPorosityHM.C.

61 {
62  return _biot;
63 }
const Real _biot
biot coefficient
Real PorousFlowPorosityHM::atZeroQp ( ) const
overrideprotectedvirtualinherited

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

Implements PorousFlowPorosityExponentialBase.

Definition at line 66 of file PorousFlowPorosityHM.C.

67 {
68  return _phi0[_qp];
69 }
const VariableValue & _phi0
porosity at zero strain and zero porepressure
void PorousFlowPorosityHMBiotModulus::computeQpProperties ( )
overrideprotectedvirtual

Reimplemented from PorousFlowPorosityExponentialBase.

Definition at line 47 of file PorousFlowPorosityHMBiotModulus.C.

48 {
49  // Note that in the following _strain[_qp] is evaluated at q quadpoint
50  // So _porosity_nodal[_qp], which should be the nodal value of porosity
51  // actually uses the strain at a quadpoint. This
52  // is OK for LINEAR elements, as strain is constant over the element anyway.
53 
54  const unsigned qp_to_use =
55  (_nodal_material && (_bnd || _strain_at_nearest_qp) ? nearestQP(_qp) : _qp);
56 
57  const Real denom = 1.0 + _vol_strain_rate_qp[qp_to_use] * _dt;
58  _porosity[_qp] =
59  (_porosity_old[_qp] * std::exp(-(_pf[_qp] - _pf_old[_qp]) / _fluid_bulk_modulus) +
60  (_pf[_qp] - _pf_old[_qp]) / _biot_modulus +
61  _biot * (_vol_strain_qp[qp_to_use] - _vol_strain_qp_old[qp_to_use])) /
62  denom;
63 
64  _dporosity_dvar[_qp].resize(_num_var);
65  for (unsigned int v = 0; v < _num_var; ++v)
66  _dporosity_dvar[_qp][v] =
67  _dpf_dvar[_qp][v] *
68  (-_porosity_old[_qp] * std::exp(-(_pf[_qp] - _pf_old[_qp]) / _fluid_bulk_modulus) /
70  1.0 / _biot_modulus) /
71  denom;
72 
73  _dporosity_dgradvar[_qp].resize(_num_var);
74  for (unsigned int v = 0; v < _num_var; ++v)
75  _dporosity_dgradvar[_qp][v] =
76  _biot * _dvol_strain_qp_dvar[qp_to_use][v] / denom -
77  _porosity[_qp] / denom * _dvol_strain_rate_qp_dvar[qp_to_use][v] * _dt;
78 }
const MaterialProperty< Real > & _porosity_old
old value of porosity
const MaterialProperty< Real > & _pf_old
old value of effective fluid pressure
const bool _strain_at_nearest_qp
When calculating nodal porosity, use the strain at the nearest quadpoint to the node.
MaterialProperty< std::vector< Real > > & _dporosity_dvar
d(porosity)/d(PorousFlow variable)
MaterialProperty< std::vector< RealGradient > > & _dporosity_dgradvar
d(porosity)/d(grad PorousFlow variable)
const Real _fluid_bulk_modulus
constant fluid bulk modulus
const MaterialProperty< Real > & _vol_strain_qp_old
old value of total volumetric strain
const MaterialProperty< std::vector< Real > > & _dpf_dvar
d(effective porepressure)/(d porflow variable)
const MaterialProperty< std::vector< RealGradient > > & _dvol_strain_rate_qp_dvar
d(volumetric strain rate)/d(PorousFlow variable)
MaterialProperty< Real > & _porosity
computed porosity at the nodes or quadpoints
const unsigned int _num_var
Number of PorousFlow variables.
const MaterialProperty< Real > & _vol_strain_rate_qp
volumetric strain rate
const Real _biot
biot coefficient
const MaterialProperty< std::vector< RealGradient > > & _dvol_strain_qp_dvar
d(strain)/(dvar)
const MaterialProperty< Real > & _vol_strain_qp
strain
const Real _biot_modulus
constant biot modulus
const MaterialProperty< Real > & _pf
effective porepressure
RealGradient PorousFlowPorosityHM::ddecayQp_dgradvar ( unsigned  pvar) const
overrideprotectedvirtualinherited

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

Implements PorousFlowPorosityExponentialBase.

Definition at line 91 of file PorousFlowPorosityHM.C.

92 {
93  const unsigned qp_to_use =
94  (_nodal_material && (_bnd || _strain_at_nearest_qp) ? nearestQP(_qp) : _qp);
95  return -_dvol_strain_qp_dvar[qp_to_use][pvar];
96 }
const bool _strain_at_nearest_qp
When calculating nodal porosity, use the strain at the nearest quadpoint to the node.
const MaterialProperty< std::vector< RealGradient > > & _dvol_strain_qp_dvar
d(strain)/(dvar)
Real PorousFlowPorosityHM::ddecayQp_dvar ( unsigned  pvar) const
overrideprotectedvirtualinherited

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

Implements PorousFlowPorosityExponentialBase.

Definition at line 85 of file PorousFlowPorosityHM.C.

86 {
87  return _coeff * _dpf_dvar[_qp][pvar];
88 }
const MaterialProperty< std::vector< Real > > & _dpf_dvar
d(effective porepressure)/(d porflow variable)
const Real _coeff
short-hand number (biot-1)/solid_bulk
Real PorousFlowPorosityHM::decayQp ( ) const
overrideprotectedvirtualinherited

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

Implements PorousFlowPorosityExponentialBase.

Definition at line 72 of file PorousFlowPorosityHM.C.

73 {
74  // Note that in the following _strain[_qp] is evaluated at q quadpoint
75  // So _porosity_nodal[_qp], which should be the nodal value of porosity
76  // actually uses the strain at a quadpoint. This
77  // is OK for LINEAR elements, as strain is constant over the element anyway.
78  const unsigned qp_to_use =
79  (_nodal_material && (_bnd || _strain_at_nearest_qp) ? nearestQP(_qp) : _qp);
80 
81  return -_vol_strain_qp[qp_to_use] + _coeff * (_pf[_qp] - _p_reference[_qp]);
82 }
const bool _strain_at_nearest_qp
When calculating nodal porosity, use the strain at the nearest quadpoint to the node.
const VariableValue & _p_reference
reference porepressure
const Real _coeff
short-hand number (biot-1)/solid_bulk
const MaterialProperty< Real > & _vol_strain_qp
strain
const MaterialProperty< Real > & _pf
effective porepressure
void PorousFlowPorosityExponentialBase::initQpStatefulProperties ( )
overrideprotectedvirtualinherited

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

const Real PorousFlowPorosityHM::_biot
protectedinherited

biot coefficient

Definition at line 40 of file PorousFlowPorosityHM.h.

Referenced by PorousFlowPorosityHM::atNegInfinityQp(), and computeQpProperties().

const Real PorousFlowPorosityHMBiotModulus::_biot_modulus
protected

constant biot modulus

Definition at line 40 of file PorousFlowPorosityHMBiotModulus.h.

Referenced by computeQpProperties().

const Real PorousFlowPorosityHM::_coeff
protectedinherited

short-hand number (biot-1)/solid_bulk

Definition at line 46 of file PorousFlowPorosityHM.h.

Referenced by PorousFlowPorosityHM::ddecayQp_dvar(), and PorousFlowPorosityHM::decayQp().

std::vector<unsigned int> PorousFlowPorosityHM::_disp_var_num
protectedinherited

variable number of the displacements variables

Definition at line 55 of file PorousFlowPorosityHM.h.

Referenced by PorousFlowPorosityHM::PorousFlowPorosityHM().

const MaterialProperty<std::vector<Real> >& PorousFlowPorosityHM::_dpf_dvar
protectedinherited

d(effective porepressure)/(d porflow variable)

Definition at line 67 of file PorousFlowPorosityHM.h.

Referenced by computeQpProperties(), and PorousFlowPorosityHM::ddecayQp_dvar().

MaterialProperty<std::vector<RealGradient> >& PorousFlowPorosityBase::_dporosity_dgradvar
protectedinherited
MaterialProperty<std::vector<Real> >& PorousFlowPorosityBase::_dporosity_dvar
protectedinherited
const MaterialProperty<std::vector<RealGradient> >& PorousFlowPorosityHM::_dvol_strain_qp_dvar
protectedinherited

d(strain)/(dvar)

Definition at line 61 of file PorousFlowPorosityHM.h.

Referenced by computeQpProperties(), and PorousFlowPorosityHM::ddecayQp_dgradvar().

const MaterialProperty<std::vector<RealGradient> >& PorousFlowPorosityHMBiotModulus::_dvol_strain_rate_qp_dvar
protected

d(volumetric strain rate)/d(PorousFlow variable)

Definition at line 55 of file PorousFlowPorosityHMBiotModulus.h.

Referenced by computeQpProperties().

const bool PorousFlowPorosityExponentialBase::_ensure_positive
protectedinherited

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 PorousFlowPorosityExponentialBase::computeQpProperties(), and PorousFlowPorosityExponentialBase::initQpStatefulProperties().

const Real PorousFlowPorosityHMBiotModulus::_fluid_bulk_modulus
protected

constant fluid bulk modulus

Definition at line 43 of file PorousFlowPorosityHMBiotModulus.h.

Referenced by computeQpProperties().

const unsigned int PorousFlowPorosityHM::_ndisp
protectedinherited

number of displacement variables

Definition at line 52 of file PorousFlowPorosityHM.h.

Referenced by PorousFlowPorosityHM::PorousFlowPorosityHM().

const unsigned int PorousFlowMaterialVectorBase::_num_components
protectedinherited
const unsigned int PorousFlowMaterialVectorBase::_num_phases
protectedinherited
const unsigned int PorousFlowMaterialVectorBase::_num_var
protectedinherited
const VariableValue& PorousFlowPorosityHM::_p_reference
protectedinherited

reference porepressure

Definition at line 49 of file PorousFlowPorosityHM.h.

Referenced by PorousFlowPorosityHM::decayQp().

const MaterialProperty<Real>& PorousFlowPorosityHM::_pf
protectedinherited

effective porepressure

Definition at line 64 of file PorousFlowPorosityHM.h.

Referenced by computeQpProperties(), and PorousFlowPorosityHM::decayQp().

const MaterialProperty<Real>& PorousFlowPorosityHMBiotModulus::_pf_old
protected

old value of effective fluid pressure

Definition at line 46 of file PorousFlowPorosityHMBiotModulus.h.

Referenced by computeQpProperties().

const VariableValue& PorousFlowPorosityHM::_phi0
protectedinherited

porosity at zero strain and zero porepressure

Definition at line 37 of file PorousFlowPorosityHM.h.

Referenced by PorousFlowPorosityHM::atZeroQp().

MaterialProperty<Real>& PorousFlowPorosityBase::_porosity
protectedinherited
const MaterialProperty<Real>& PorousFlowPorosityHMBiotModulus::_porosity_old
protected

old value of porosity

Definition at line 37 of file PorousFlowPorosityHMBiotModulus.h.

Referenced by computeQpProperties().

const Real PorousFlowPorosityHM::_solid_bulk
protectedinherited

drained bulk modulus of the porous skeleton

Definition at line 43 of file PorousFlowPorosityHM.h.

const bool PorousFlowPorosityExponentialBase::_strain_at_nearest_qp
protectedinherited
const MaterialProperty<Real>& PorousFlowPorosityHM::_vol_strain_qp
protectedinherited

strain

Definition at line 58 of file PorousFlowPorosityHM.h.

Referenced by computeQpProperties(), and PorousFlowPorosityHM::decayQp().

const MaterialProperty<Real>& PorousFlowPorosityHMBiotModulus::_vol_strain_qp_old
protected

old value of total volumetric strain

Definition at line 49 of file PorousFlowPorosityHMBiotModulus.h.

Referenced by computeQpProperties().

const MaterialProperty<Real>& PorousFlowPorosityHMBiotModulus::_vol_strain_rate_qp
protected

volumetric strain rate

Definition at line 52 of file PorousFlowPorosityHMBiotModulus.h.

Referenced by computeQpProperties().


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