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

typedef DerivativeMaterialPropertyNameInterface::SymbolName SymbolName
 

Public Member Functions

 PorousFlowPorosityHMBiotModulus (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 computeQpProperties () override
 
virtual Real atNegInfinityQp () const override
 Returns "a" at the quadpoint (porosity = a + (b - a) * exp(decay)) More...
 
virtual Real datNegInfinityQp (unsigned pvar) const override
 d(a)/d(PorousFlow variable pvar) More...
 
virtual Real atZeroQp () const override
 Returns "b" at the quadpoint (porosity = a + (b - a) * exp(decay)) More...
 
virtual Real datZeroQp (unsigned pvar) const override
 d(a)/d(PorousFlow variable pvar) 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(PorousFlow variable pvar) More...
 
virtual RealGradient ddecayQp_dgradvar (unsigned pvar) const override
 d(decay)/d(grad(PorousFlow 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 bool _mechanical
 Porosity is a function of volumetric strain. More...
 
const bool _fluid
 Porosity is a function of effective porepressure. More...
 
const bool _thermal
 Porosity is a function of temperature. More...
 
const bool _chemical
 Porosity is a function of chemistry. More...
 
const VariableValue_phi0
 Porosity at zero strain and zero porepressure and zero temperature. More...
 
const Real _biot
 Biot coefficient. More...
 
const Real _exp_coeff
 Thermal expansion coefficient of the solid porous skeleton. 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_t_reference
 Reference temperature. More...
 
const VariableValue_p_reference
 Reference porepressure. More...
 
const unsigned _num_c_ref
 Number of reference mineral concentrations provided by user. More...
 
std::vector< const VariableValue * > _c_reference
 Reference mineral concentrations. More...
 
const unsigned _num_initial_c
 Number of reference mineral concentrations provided by user. More...
 
std::vector< const VariableValue * > _initial_c
 Reference mineral concentrations. More...
 
std::vector< Real_c_weights
 Weights for the mineral concentrations. More...
 
const MaterialProperty< Real > *const _vol_strain_qp
 Strain (first const means we never want to dereference and change the value, second means we'll always be pointing to the same address after initialization (like a reference)) More...
 
const MaterialProperty< std::vector< RealGradient > > *const _dvol_strain_qp_dvar
 d(strain)/(dvar) (first const means we never want to dereference and change the value, second means we'll always be pointing to the same address after initialization (like a reference)) More...
 
const MaterialProperty< Real > *const _pf
 Effective porepressure at the quadpoints or nodes. More...
 
const MaterialProperty< std::vector< Real > > *const _dpf_dvar
 d(effective porepressure)/(d porflow variable) More...
 
const MaterialProperty< Real > *const _temperature
 Temperature at the quadpoints or nodes. More...
 
const MaterialProperty< std::vector< Real > > *const _dtemperature_dvar
 d(temperature)/(d porflow variable) More...
 
const MaterialProperty< std::vector< Real > > *const _mineral_conc_old
 Old value of mineral concentration at the quadpoints or nodes. More...
 
const MaterialProperty< std::vector< Real > > *const _reaction_rate
 Reaction rate of mineralisation. More...
 
const MaterialProperty< std::vector< std::vector< Real > > > *const _dreaction_rate_dvar
 d(reaction_rate_conc)/d(porflow variable) More...
 
const unsigned int _aq_ph
 Aqueous phase number. More...
 
const MaterialProperty< std::vector< Real > > *const _saturation
 Saturation. More...
 
const MaterialProperty< std::vector< std::vector< Real > > > *const _dsaturation_dvar
 d(saturation)/d(PorousFlow var) 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...
 
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

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 PorousFlowPorosity is physically more correct.

Definition at line 23 of file PorousFlowPorosityHMBiotModulus.h.

Constructor & Destructor Documentation

◆ PorousFlowPorosityHMBiotModulus()

PorousFlowPorosityHMBiotModulus::PorousFlowPorosityHMBiotModulus ( const InputParameters parameters)

Definition at line 35 of file PorousFlowPorosityHMBiotModulus.C.

36  : PorousFlowPorosity(parameters),
37  _porosity_old(_nodal_material ? getMaterialPropertyOld<Real>("PorousFlow_porosity_nodal")
38  : getMaterialPropertyOld<Real>("PorousFlow_porosity_qp")),
39  _biot_modulus(getParam<Real>("constant_biot_modulus")),
40  _fluid_bulk_modulus(getParam<Real>("constant_fluid_bulk_modulus")),
41  _pf_old(_nodal_material
42  ? getMaterialPropertyOld<Real>("PorousFlow_effective_fluid_pressure_nodal")
43  : getMaterialPropertyOld<Real>("PorousFlow_effective_fluid_pressure_qp")),
44  _vol_strain_qp_old(getMaterialPropertyOld<Real>("PorousFlow_total_volumetric_strain_qp")),
45  _vol_strain_rate_qp(getMaterialProperty<Real>("PorousFlow_volumetric_strain_rate_qp")),
46  _dvol_strain_rate_qp_dvar(getMaterialProperty<std::vector<RealGradient>>(
47  "dPorousFlow_volumetric_strain_rate_qp_dvar"))
48 {
49 }
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.
PorousFlowPorosity(const InputParameters &parameters)
const Real _biot_modulus
Constant biot modulus.

Member Function Documentation

◆ atNegInfinityQp()

Real PorousFlowPorosity::atNegInfinityQp ( ) const
overrideprotectedvirtualinherited

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

Implements PorousFlowPorosityExponentialBase.

Definition at line 183 of file PorousFlowPorosity.C.

184 {
185  /*
186  *
187  * Note the use of the OLD value of porosity here.
188  * This strategy, which breaks the cyclic dependency between porosity
189  * and mineral concentration, is used in
190  * Kernel: PorousFlowPreDis
191  * Material: PorousFlowPorosity
192  * Material: PorousFlowAqueousPreDisChemistry
193  * Material: PorousFlowAqueousPreDisMineral
194  *
195  */
196  Real result = _biot;
197  if (_chemical)
198  {
199  if (_t_step == 0 && !_app.isRestarting())
200  for (unsigned i = 0; i < _num_c_ref; ++i)
201  result -= _c_weights[i] * (*_initial_c[i])[_qp];
202  else
203  for (unsigned i = 0; i < _num_c_ref; ++i)
204  result -= _c_weights[i] * ((*_mineral_conc_old)[_qp][i] + _dt * (*_porosity_old)[_qp] *
205  (*_saturation)[_qp][_aq_ph] *
206  (*_reaction_rate)[_qp][i]);
207  }
208  return result;
209 }
const Real _biot
Biot coefficient.
const MaterialProperty< std::vector< Real > > *const _mineral_conc_old
Old value of mineral concentration at the quadpoints or nodes.
std::vector< Real > _c_weights
Weights for the mineral concentrations.
const bool _chemical
Porosity is a function of chemistry.
const unsigned _num_c_ref
Number of reference mineral concentrations provided by user.
const unsigned int _aq_ph
Aqueous phase number.
std::vector< const VariableValue * > _initial_c
Reference mineral concentrations.
DIE A HORRIBLE DEATH HERE typedef LIBMESH_DEFAULT_SCALAR_TYPE Real

◆ atZeroQp()

Real PorousFlowPorosity::atZeroQp ( ) const
overrideprotectedvirtualinherited

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

Implements PorousFlowPorosityExponentialBase.

Definition at line 224 of file PorousFlowPorosity.C.

225 {
226  // note the [0] below: _phi0 is a constant monomial and we use [0] regardless of _nodal_material
227  Real result = _phi0[0];
228  if (_chemical)
229  {
230  if (_t_step == 0 && !_app.isRestarting())
231  for (unsigned i = 0; i < _num_c_ref; ++i)
232  result -= _c_weights[i] * ((*_initial_c[i])[_qp] - (*_c_reference[i])[_qp]);
233  else
234  for (unsigned i = 0; i < _num_c_ref; ++i)
235  result -= _c_weights[i] * ((*_mineral_conc_old)[_qp][i] +
236  _dt * (*_porosity_old)[_qp] * (*_saturation)[_qp][_aq_ph] *
237  (*_reaction_rate)[_qp][i] -
238  (*_c_reference[i])[_qp]);
239  }
240  return result;
241 }
const VariableValue & _phi0
Porosity at zero strain and zero porepressure and zero temperature.
const MaterialProperty< std::vector< Real > > *const _mineral_conc_old
Old value of mineral concentration at the quadpoints or nodes.
std::vector< Real > _c_weights
Weights for the mineral concentrations.
const bool _chemical
Porosity is a function of chemistry.
const unsigned _num_c_ref
Number of reference mineral concentrations provided by user.
const unsigned int _aq_ph
Aqueous phase number.
std::vector< const VariableValue * > _initial_c
Reference mineral concentrations.
std::vector< const VariableValue * > _c_reference
Reference mineral concentrations.
DIE A HORRIBLE DEATH HERE typedef LIBMESH_DEFAULT_SCALAR_TYPE Real

◆ computeQpProperties()

void PorousFlowPorosityHMBiotModulus::computeQpProperties ( )
overrideprotectedvirtual

Reimplemented from PorousFlowPorosityExponentialBase.

Definition at line 52 of file PorousFlowPorosityHMBiotModulus.C.

53 {
54  // Note that in the following _strain[_qp] is evaluated at q quadpoint
55  // So _porosity_nodal[_qp], which should be the nodal value of porosity
56  // actually uses the strain at a quadpoint. This
57  // is OK for LINEAR elements, as strain is constant over the element anyway.
58 
59  const unsigned qp_to_use =
60  (_nodal_material && (_bnd || _strain_at_nearest_qp) ? nearestQP(_qp) : _qp);
61 
62  const Real denom = (1.0 + _vol_strain_rate_qp[qp_to_use] * _dt + _vol_strain_qp_old[qp_to_use]);
63  const Real s_p = _porosity_old[_qp] * (1 + _vol_strain_qp_old[qp_to_use]);
64  _porosity[_qp] = (s_p * std::exp(-((*_pf)[_qp] - _pf_old[_qp]) / _fluid_bulk_modulus) +
65  ((*_pf)[_qp] - _pf_old[_qp]) / _biot_modulus +
66  _biot * ((*_vol_strain_qp)[qp_to_use] - _vol_strain_qp_old[qp_to_use])) /
67  denom;
68 
69  (*_dporosity_dvar)[_qp].resize(_num_var);
70  for (unsigned int v = 0; v < _num_var; ++v)
71  (*_dporosity_dvar)[_qp][v] =
72  (*_dpf_dvar)[_qp][v] *
73  (-s_p * std::exp(-((*_pf)[_qp] - _pf_old[_qp]) / _fluid_bulk_modulus) /
75  1.0 / _biot_modulus) /
76  denom;
77 
78  (*_dporosity_dgradvar)[_qp].resize(_num_var);
79  for (unsigned int v = 0; v < _num_var; ++v)
80  (*_dporosity_dgradvar)[_qp][v] =
81  _biot * (*_dvol_strain_qp_dvar)[qp_to_use][v] / denom -
82  _porosity[_qp] / denom * _dvol_strain_rate_qp_dvar[qp_to_use][v] * _dt;
83 }
const MaterialProperty< Real > & _porosity_old
Old value of porosity.
const Real _biot
Biot coefficient.
const MaterialProperty< Real > & _pf_old
Old value of effective fluid pressure.
MaterialProperty< std::vector< RealGradient > > *const _dporosity_dgradvar
d(porosity)/d(grad PorousFlow variable)
const bool _strain_at_nearest_qp
When calculating nodal porosity, use the strain at the nearest quadpoint to the node.
const Real _fluid_bulk_modulus
Constant fluid bulk modulus.
const MaterialProperty< Real > *const _pf
Effective porepressure at the quadpoints or nodes.
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 unsigned int _num_var
Number of PorousFlow variables.
const MaterialProperty< Real > & _vol_strain_rate_qp
Volumetric strain rate.
MaterialProperty< std::vector< Real > > *const _dporosity_dvar
d(porosity)/d(PorousFlow variable)
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
const Real _biot_modulus
Constant biot modulus.
const MaterialProperty< Real > *const _vol_strain_qp
Strain (first const means we never want to dereference and change the value, second means we&#39;ll alway...

◆ datNegInfinityQp()

Real PorousFlowPorosity::datNegInfinityQp ( unsigned  pvar) const
overrideprotectedvirtualinherited

d(a)/d(PorousFlow variable pvar)

Implements PorousFlowPorosityExponentialBase.

Definition at line 212 of file PorousFlowPorosity.C.

213 {
214  Real result = 0.0;
215  if (_chemical && (_t_step >= 1 || _app.isRestarting()))
216  for (unsigned i = 0; i < _num_c_ref; ++i)
217  result -= _c_weights[i] * _dt * (*_porosity_old)[_qp] *
218  ((*_saturation)[_qp][_aq_ph] * (*_dreaction_rate_dvar)[_qp][i][pvar] +
219  (*_dsaturation_dvar)[_qp][_aq_ph][pvar] * (*_reaction_rate)[_qp][i]);
220  return result;
221 }
std::vector< Real > _c_weights
Weights for the mineral concentrations.
const bool _chemical
Porosity is a function of chemistry.
const unsigned _num_c_ref
Number of reference mineral concentrations provided by user.
const MaterialProperty< Real > *const _porosity_old
Old value of porosity.
const unsigned int _aq_ph
Aqueous phase number.
DIE A HORRIBLE DEATH HERE typedef LIBMESH_DEFAULT_SCALAR_TYPE Real

◆ datZeroQp()

Real PorousFlowPorosity::datZeroQp ( unsigned  pvar) const
overrideprotectedvirtualinherited

d(a)/d(PorousFlow variable pvar)

Implements PorousFlowPorosityExponentialBase.

Definition at line 244 of file PorousFlowPorosity.C.

245 {
246  Real result = 0.0;
247  if (_chemical && (_t_step >= 1 || _app.isRestarting()))
248  for (unsigned i = 0; i < _num_c_ref; ++i)
249  result -= _c_weights[i] * _dt * (*_porosity_old)[_qp] *
250  ((*_saturation)[_qp][_aq_ph] * (*_dreaction_rate_dvar)[_qp][i][pvar] +
251  (*_dsaturation_dvar)[_qp][_aq_ph][pvar] * (*_reaction_rate)[_qp][i]);
252  return result;
253 }
std::vector< Real > _c_weights
Weights for the mineral concentrations.
const bool _chemical
Porosity is a function of chemistry.
const unsigned _num_c_ref
Number of reference mineral concentrations provided by user.
const MaterialProperty< Real > *const _porosity_old
Old value of porosity.
const unsigned int _aq_ph
Aqueous phase number.
DIE A HORRIBLE DEATH HERE typedef LIBMESH_DEFAULT_SCALAR_TYPE Real

◆ ddecayQp_dgradvar()

RealGradient PorousFlowPorosity::ddecayQp_dgradvar ( unsigned  pvar) const
overrideprotectedvirtualinherited

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

Implements PorousFlowPorosityExponentialBase.

Definition at line 295 of file PorousFlowPorosity.C.

296 {
297  RealGradient result(0.0, 0.0, 0.0);
298  if (_mechanical)
299  {
300  const unsigned qp_to_use =
301  (_nodal_material && (_bnd || _strain_at_nearest_qp) ? nearestQP(_qp) : _qp);
302  result += -(*_dvol_strain_qp_dvar)[qp_to_use][pvar];
303  }
304  return result;
305 }
const bool _strain_at_nearest_qp
When calculating nodal porosity, use the strain at the nearest quadpoint to the node.
const bool _mechanical
Porosity is a function of volumetric strain.

◆ ddecayQp_dvar()

Real PorousFlowPorosity::ddecayQp_dvar ( unsigned  pvar) const
overrideprotectedvirtualinherited

d(decay)/d(PorousFlow variable pvar)

Implements PorousFlowPorosityExponentialBase.

Definition at line 281 of file PorousFlowPorosity.C.

282 {
283  Real result = 0.0;
284 
285  if (_thermal)
286  result += _exp_coeff * (*_dtemperature_dvar)[_qp][pvar];
287 
288  if (_fluid)
289  result += _coeff * (*_dpf_dvar)[_qp][pvar];
290 
291  return result;
292 }
const Real _coeff
Short-hand number (biot-1)/solid_bulk.
const bool _thermal
Porosity is a function of temperature.
const Real _exp_coeff
Thermal expansion coefficient of the solid porous skeleton.
const bool _fluid
Porosity is a function of effective porepressure.
DIE A HORRIBLE DEATH HERE typedef LIBMESH_DEFAULT_SCALAR_TYPE Real

◆ decayQp()

Real PorousFlowPorosity::decayQp ( ) const
overrideprotectedvirtualinherited

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

Implements PorousFlowPorosityExponentialBase.

Definition at line 256 of file PorousFlowPorosity.C.

257 {
258  Real result = 0.0;
259 
260  if (_thermal)
261  result += _exp_coeff * ((*_temperature)[_qp] - _t_reference[_qp]);
262 
263  if (_fluid)
264  result += _coeff * ((*_pf)[_qp] - _p_reference[_qp]);
265 
266  if (_mechanical)
267  {
268  // Note that in the following _strain[_qp] is evaluated at q quadpoint
269  // So _porosity_nodal[_qp], which should be the nodal value of porosity
270  // actually uses the strain at a quadpoint. This
271  // is OK for LINEAR elements, as strain is constant over the element anyway.
272  const unsigned qp_to_use =
273  (_nodal_material && (_bnd || _strain_at_nearest_qp) ? nearestQP(_qp) : _qp);
274  result += -(*_vol_strain_qp)[qp_to_use];
275  }
276 
277  return result;
278 }
const Real _coeff
Short-hand number (biot-1)/solid_bulk.
const VariableValue & _t_reference
Reference temperature.
const bool _strain_at_nearest_qp
When calculating nodal porosity, use the strain at the nearest quadpoint to the node.
const bool _thermal
Porosity is a function of temperature.
const Real _exp_coeff
Thermal expansion coefficient of the solid porous skeleton.
const VariableValue & _p_reference
Reference porepressure.
const bool _fluid
Porosity is a function of effective porepressure.
DIE A HORRIBLE DEATH HERE typedef LIBMESH_DEFAULT_SCALAR_TYPE Real
const bool _mechanical
Porosity is a function of volumetric strain.

◆ initQpStatefulProperties()

void PorousFlowPorosityExponentialBase::initQpStatefulProperties ( )
overrideprotectedvirtualinherited

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 PorousFlowPorosityHMBiotModulus::validParams ( )
static

Definition at line 16 of file PorousFlowPorosityHMBiotModulus.C.

17 {
19  params.set<bool>("mechanical") = true;
20  params.set<bool>("fluid") = true;
21  params.addRequiredRangeCheckedParam<Real>("constant_biot_modulus",
22  "constant_biot_modulus>0",
23  "Biot modulus, which is constant for this Material");
25  "constant_fluid_bulk_modulus",
26  "constant_fluid_bulk_modulus>0",
27  "Fluid bulk modulus, which is constant for this Material");
28  params.addClassDescription(
29  "This Material calculates the porosity for hydro-mechanical simulations, assuming that the "
30  "Biot modulus and the fluid bulk modulus are both constant. This is useful for comparing "
31  "with solutions from poroelasticity theory, but is less accurate than PorousFlowPorosity");
32  return params;
33 }
void addRequiredRangeCheckedParam(const std::string &name, const std::string &parsed_function, const std::string &doc_string)
T & set(const std::string &name, bool quiet_mode=false)
DIE A HORRIBLE DEATH HERE typedef LIBMESH_DEFAULT_SCALAR_TYPE Real
void addClassDescription(const std::string &doc_string)
static InputParameters validParams()

Member Data Documentation

◆ _aq_ph

const unsigned int PorousFlowPorosity::_aq_ph
protectedinherited

◆ _biot

const Real PorousFlowPorosity::_biot
protectedinherited

Biot coefficient.

Definition at line 52 of file PorousFlowPorosity.h.

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

◆ _biot_modulus

const Real PorousFlowPorosityHMBiotModulus::_biot_modulus
protected

Constant biot modulus.

Definition at line 37 of file PorousFlowPorosityHMBiotModulus.h.

Referenced by computeQpProperties().

◆ _c_reference

std::vector<const VariableValue *> PorousFlowPorosity::_c_reference
protectedinherited

Reference mineral concentrations.

Definition at line 73 of file PorousFlowPorosity.h.

Referenced by PorousFlowPorosity::atZeroQp(), and PorousFlowPorosity::PorousFlowPorosity().

◆ _c_weights

std::vector<Real> PorousFlowPorosity::_c_weights
protectedinherited

◆ _chemical

const bool PorousFlowPorosity::_chemical
protectedinherited

◆ _coeff

const Real PorousFlowPorosity::_coeff
protectedinherited

Short-hand number (biot-1)/solid_bulk.

Definition at line 61 of file PorousFlowPorosity.h.

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

◆ _dpf_dvar

const MaterialProperty<std::vector<Real> >* const PorousFlowPorosity::_dpf_dvar
protectedinherited

d(effective porepressure)/(d porflow variable)

Definition at line 97 of file PorousFlowPorosity.h.

◆ _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 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 computeQpProperties().

◆ _dreaction_rate_dvar

const MaterialProperty<std::vector<std::vector<Real> > >* const PorousFlowPorosity::_dreaction_rate_dvar
protectedinherited

d(reaction_rate_conc)/d(porflow variable)

Definition at line 112 of file PorousFlowPorosity.h.

◆ _dsaturation_dvar

const MaterialProperty<std::vector<std::vector<Real> > >* const PorousFlowPorosity::_dsaturation_dvar
protectedinherited

d(saturation)/d(PorousFlow var)

Definition at line 121 of file PorousFlowPorosity.h.

◆ _dtemperature_dvar

const MaterialProperty<std::vector<Real> >* const PorousFlowPorosity::_dtemperature_dvar
protectedinherited

d(temperature)/(d porflow variable)

Definition at line 103 of file PorousFlowPorosity.h.

◆ _dvol_strain_qp_dvar

const MaterialProperty<std::vector<RealGradient> >* const PorousFlowPorosity::_dvol_strain_qp_dvar
protectedinherited

d(strain)/(dvar) (first const means we never want to dereference and change the value, second means we'll always be pointing to the same address after initialization (like a reference))

Definition at line 91 of file PorousFlowPorosity.h.

◆ _dvol_strain_rate_qp_dvar

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

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

Definition at line 52 of file PorousFlowPorosityHMBiotModulus.h.

Referenced by computeQpProperties().

◆ _ensure_positive

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 73 of file PorousFlowPorosityExponentialBase.h.

Referenced by PorousFlowPorosityExponentialBase::computeQpProperties(), and PorousFlowPorosityExponentialBase::initQpStatefulProperties().

◆ _exp_coeff

const Real PorousFlowPorosity::_exp_coeff
protectedinherited

Thermal expansion coefficient of the solid porous skeleton.

Definition at line 55 of file PorousFlowPorosity.h.

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

◆ _fluid

const bool PorousFlowPorosity::_fluid
protectedinherited

Porosity is a function of effective porepressure.

Definition at line 40 of file PorousFlowPorosity.h.

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

◆ _fluid_bulk_modulus

const Real PorousFlowPorosityHMBiotModulus::_fluid_bulk_modulus
protected

Constant fluid bulk modulus.

Definition at line 40 of file PorousFlowPorosityHMBiotModulus.h.

Referenced by computeQpProperties().

◆ _initial_c

std::vector<const VariableValue *> PorousFlowPorosity::_initial_c
protectedinherited

Reference mineral concentrations.

Definition at line 79 of file PorousFlowPorosity.h.

Referenced by PorousFlowPorosity::atNegInfinityQp(), PorousFlowPorosity::atZeroQp(), and PorousFlowPorosity::PorousFlowPorosity().

◆ _mechanical

const bool PorousFlowPorosity::_mechanical
protectedinherited

Porosity is a function of volumetric strain.

Definition at line 37 of file PorousFlowPorosity.h.

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

◆ _mineral_conc_old

const MaterialProperty<std::vector<Real> >* const PorousFlowPorosity::_mineral_conc_old
protectedinherited

Old value of mineral concentration at the quadpoints or nodes.

Definition at line 106 of file PorousFlowPorosity.h.

Referenced by PorousFlowPorosity::atNegInfinityQp(), and PorousFlowPorosity::atZeroQp().

◆ _num_c_ref

const unsigned PorousFlowPorosity::_num_c_ref
protectedinherited

◆ _num_components

const unsigned int PorousFlowMaterialVectorBase::_num_components
protectedinherited

◆ _num_initial_c

const unsigned PorousFlowPorosity::_num_initial_c
protectedinherited

Number of reference mineral concentrations provided by user.

Definition at line 76 of file PorousFlowPorosity.h.

Referenced by PorousFlowPorosity::PorousFlowPorosity().

◆ _num_phases

const unsigned int PorousFlowMaterialVectorBase::_num_phases
protectedinherited

◆ _num_var

const unsigned int PorousFlowMaterialVectorBase::_num_var
protectedinherited

◆ _p_reference

const VariableValue& PorousFlowPorosity::_p_reference
protectedinherited

Reference porepressure.

Definition at line 67 of file PorousFlowPorosity.h.

Referenced by PorousFlowPorosity::decayQp().

◆ _pf

const MaterialProperty<Real>* const PorousFlowPorosity::_pf
protectedinherited

Effective porepressure at the quadpoints or nodes.

Definition at line 94 of file PorousFlowPorosity.h.

Referenced by computeQpProperties().

◆ _pf_old

const MaterialProperty<Real>& PorousFlowPorosityHMBiotModulus::_pf_old
protected

Old value of effective fluid pressure.

Definition at line 43 of file PorousFlowPorosityHMBiotModulus.h.

Referenced by computeQpProperties().

◆ _phi0

const VariableValue& PorousFlowPorosity::_phi0
protectedinherited

Porosity at zero strain and zero porepressure and zero temperature.

Definition at line 49 of file PorousFlowPorosity.h.

Referenced by PorousFlowPorosity::atZeroQp().

◆ _porosity

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

◆ _porosity_old

const MaterialProperty<Real>& PorousFlowPorosityHMBiotModulus::_porosity_old
protected

Old value of porosity.

Definition at line 34 of file PorousFlowPorosityHMBiotModulus.h.

Referenced by computeQpProperties().

◆ _reaction_rate

const MaterialProperty<std::vector<Real> >* const PorousFlowPorosity::_reaction_rate
protectedinherited

Reaction rate of mineralisation.

Definition at line 109 of file PorousFlowPorosity.h.

◆ _saturation

const MaterialProperty<std::vector<Real> >* const PorousFlowPorosity::_saturation
protectedinherited

Saturation.

Definition at line 118 of file PorousFlowPorosity.h.

◆ _solid_bulk

const Real PorousFlowPorosity::_solid_bulk
protectedinherited

Drained bulk modulus of the porous skeleton.

Definition at line 58 of file PorousFlowPorosity.h.

◆ _strain_at_nearest_qp

const bool PorousFlowPorosityExponentialBase::_strain_at_nearest_qp
protectedinherited

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

Definition at line 64 of file PorousFlowPorosityExponentialBase.h.

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

◆ _t_reference

const VariableValue& PorousFlowPorosity::_t_reference
protectedinherited

Reference temperature.

Definition at line 64 of file PorousFlowPorosity.h.

Referenced by PorousFlowPorosity::decayQp().

◆ _temperature

const MaterialProperty<Real>* const PorousFlowPorosity::_temperature
protectedinherited

Temperature at the quadpoints or nodes.

Definition at line 100 of file PorousFlowPorosity.h.

◆ _thermal

const bool PorousFlowPorosity::_thermal
protectedinherited

Porosity is a function of temperature.

Definition at line 43 of file PorousFlowPorosity.h.

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

◆ _vol_strain_qp

const MaterialProperty<Real>* const PorousFlowPorosity::_vol_strain_qp
protectedinherited

Strain (first const means we never want to dereference and change the value, second means we'll always be pointing to the same address after initialization (like a reference))

Definition at line 88 of file PorousFlowPorosity.h.

Referenced by computeQpProperties().

◆ _vol_strain_qp_old

const MaterialProperty<Real>& PorousFlowPorosityHMBiotModulus::_vol_strain_qp_old
protected

Old value of total volumetric strain.

Definition at line 46 of file PorousFlowPorosityHMBiotModulus.h.

Referenced by computeQpProperties().

◆ _vol_strain_rate_qp

const MaterialProperty<Real>& PorousFlowPorosityHMBiotModulus::_vol_strain_rate_qp
protected

Volumetric strain rate.

Definition at line 49 of file PorousFlowPorosityHMBiotModulus.h.

Referenced by computeQpProperties().


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