https://mooseframework.inl.gov
Loading...
Searching...
No Matches
Public Types | Public Member Functions | Static Public Member Functions | Protected Member Functions | Protected Attributes | Private Member Functions | Private Attributes | List of all members
PorousFlowPorosityTempl< is_ad > Class Template Reference

Material designed to provide the porosity in PorousFlow simulations chemistry + biot + (phi0 - reference_chemistry - biot) * exp(-vol_strain. More...

#include <PorousFlowPorosity.h>

Inheritance diagram for PorousFlowPorosityTempl< is_ad >:
[legend]

Public Types

typedef DerivativeMaterialPropertyNameInterface::SymbolName SymbolName
 

Public Member Functions

 PorousFlowPorosityTempl (const InputParameters &parameters)
 
const GenericMaterialProperty< U, is_ad > & getDefaultMaterialProperty (const std::string &name)
 
const GenericMaterialProperty< U, is_ad > & getDefaultMaterialPropertyByName (const std::string &name)
 
Moose::Kokkos::MaterialProperty< U, dimension > declareKokkosPropertyDerivative (const std::string &base, const std::vector< SymbolName > &c)
 
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="")
 
Moose::Kokkos::MaterialProperty< U, dimension > getKokkosMaterialPropertyDerivative (const std::string &base, const std::vector< SymbolName > &c)
 
Moose::Kokkos::MaterialProperty< U, dimension > getKokkosMaterialPropertyDerivative (const std::string &base, const SymbolName &c1)
 
Moose::Kokkos::MaterialProperty< U, dimension > getKokkosMaterialPropertyDerivative (const std::string &base, const std::vector< SymbolName > &c)
 
Moose::Kokkos::MaterialProperty< U, dimension > getKokkosMaterialPropertyDerivative (const std::string &base, const SymbolName &c1)
 
Moose::Kokkos::MaterialProperty< U, dimension > getKokkosMaterialPropertyDerivativeByName (const MaterialPropertyName &base, const std::vector< SymbolName > &c)
 
Moose::Kokkos::MaterialProperty< U, dimension > getKokkosMaterialPropertyDerivativeByName (const MaterialPropertyName &base, const std::vector< SymbolName > &c)
 
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 GenericReal< is_ad > atNegInfinityQp () const override
 Returns "a" at the quadpoint (porosity = a + (b - a) * exp(decay))
 
virtual Real datNegInfinityQp (unsigned pvar) const override
 d(a)/d(PorousFlow variable pvar)
 
virtual GenericReal< is_ad > atZeroQp () const override
 Returns "b" at the quadpoint (porosity = a + (b - a) * exp(decay))
 
virtual Real datZeroQp (unsigned pvar) const override
 d(b)/d(PorousFlow variable pvar)
 
virtual GenericReal< is_ad > decayQp () const override
 Returns "decay" at the quadpoint (porosity = a + (b - a) * exp(decay))
 
virtual Real ddecayQp_dvar (unsigned pvar) const override
 d(decay)/d(PorousFlow variable pvar)
 
virtual RealGradient ddecayQp_dgradvar (unsigned pvar) const override
 d(decay)/d(grad(PorousFlow variable pvar))
 
virtual void initQpStatefulProperties () override
 
virtual void computeQpProperties () override
 
void applyPorosityMin ()
 If _porosity[_qp] < porosity_min, set _porosity[_qp] = porosity_min and multiply the derivatives of porosity by _zero_modifier (the derivative material properties for non-AD objects, and the AD derivatives for AD objects).
 

Protected Attributes

const bool _mechanical
 Porosity is a function of volumetric strain.
 
const bool _fluid
 Porosity is a function of effective porepressure.
 
const bool _thermal
 Porosity is a function of temperature.
 
const bool _chemical
 Porosity is a function of chemistry.
 
const VariableValue & _phi0
 Porosity at zero strain and zero porepressure and zero temperature.
 
const Real _biot
 Biot coefficient.
 
const Real _exp_coeff
 Thermal expansion coefficient of the solid porous skeleton.
 
const Moose::Functor< Real > * _solid_bulk
 Drained bulk modulus of the porous skeleton (as a functor; can be variable, function, etc.) Only used if _fluid is True.
 
const Real _coeff
 Short-hand number (biot-1). Please note: this variable is not yet divided by solid_bulk.
 
const VariableValue & _t_reference
 Reference temperature.
 
const VariableValue & _p_reference
 Reference porepressure.
 
const unsigned _num_c_ref
 Number of reference mineral concentrations provided by user.
 
std::vector< const VariableValue * > _c_reference
 Reference mineral concentrations.
 
const unsigned _num_initial_c
 Number of reference mineral concentrations provided by user.
 
std::vector< const VariableValue * > _initial_c
 Reference mineral concentrations.
 
std::vector< Real > _c_weights
 Weights for the mineral concentrations.
 
const MaterialProperty< Real > *const _porosity_old
 Old value of porosity.
 
const GenericMaterialProperty< Real, is_ad > *const _vol_strain_qp
 Strain.
 
const MaterialProperty< std::vector< RealGradient > > *const _dvol_strain_qp_dvar
 d(strain)/(dvar)
 
const GenericMaterialProperty< Real, is_ad > *const _pf
 Effective porepressure at the quadpoints or nodes.
 
const MaterialProperty< std::vector< Real > > *const _dpf_dvar
 d(effective porepressure)/(d porflow variable)
 
const GenericMaterialProperty< Real, is_ad > *const _temperature
 Temperature at the quadpoints or nodes.
 
const MaterialProperty< std::vector< Real > > *const _dtemperature_dvar
 d(temperature)/(d porflow variable)
 
const MaterialProperty< std::vector< Real > > *const _mineral_conc_old
 Old value of mineral concentration at the quadpoints or nodes.
 
const MaterialProperty< std::vector< Real > > *const _reaction_rate
 Reaction rate of mineralisation.
 
const MaterialProperty< std::vector< std::vector< Real > > > *const _dreaction_rate_dvar
 d(reaction_rate_conc)/d(porflow variable)
 
const unsigned int _aq_ph
 Aqueous phase number.
 
const MaterialProperty< std::vector< Real > > *const _saturation
 Saturation.
 
const MaterialProperty< std::vector< std::vector< Real > > > *const _dsaturation_dvar
 d(saturation)/d(PorousFlow var)
 
 usingPorousFlowPorosityExponentialBaseMembers
 
const bool _strain_at_nearest_qp
 When calculating nodal porosity, use the strain at the nearest quadpoint to the node.
 
const bool _ensure_positive
 for decayQp() > 0, porosity can be negative when using porosity = a + (b - a) * exp(decay).
 
 usingPorousFlowPorosityBaseMembers
 
GenericMaterialProperty< Real, is_ad > & _porosity
 Computed porosity at the nodes or quadpoints.
 
MaterialProperty< std::vector< Real > > *const _dporosity_dvar
 d(porosity)/d(PorousFlow variable)
 
MaterialProperty< std::vector< RealGradient > > *const _dporosity_dgradvar
 d(porosity)/d(grad PorousFlow variable)
 
const Real _porosity_min
 Minimum allowed porosity (default zero, so porosity is never negative)
 
const Real _zero_modifier
 When the porosity_min floor is active, the porosity derivatives are multiplied by this.
 
const unsigned int _num_phases
 Number of phases.
 
const unsigned int _num_components
 Number of fluid components.
 
const unsigned int _num_var
 Number of PorousFlow variables.
 

Private Member Functions

bool haveMaterialProperty (const std::string &prop_name)
 
std::vector< VariableName > buildVariableVector (const VariableName &c1, const VariableName &c2, const VariableName &c3)
 
void validateCouplingHelper (const MaterialPropertyName &base, const std::vector< VariableName > &c, const System &system, std::vector< VariableName > &missing)
 
bool isNotObjectVariable (const VariableName &name)
 

Private Attributes

FEProblemBase & _dmi_fe_problem
 

Detailed Description

template<bool is_ad>
class PorousFlowPorosityTempl< is_ad >

Material designed to provide the porosity in PorousFlow simulations chemistry + biot + (phi0 - reference_chemistry - biot) * exp(-vol_strain.

Definition at line 21 of file PorousFlowPorosity.h.

Constructor & Destructor Documentation

◆ PorousFlowPorosityTempl()

template<bool is_ad>
PorousFlowPorosityTempl< is_ad >::PorousFlowPorosityTempl ( const InputParameters &  parameters)

Definition at line 64 of file PorousFlowPorosity.C.

66
67 _mechanical(this->template getParam<bool>("mechanical")),
68 _fluid(this->template getParam<bool>("fluid")),
69 _thermal(this->template getParam<bool>("thermal")),
70 _chemical(this->template getParam<bool>("chemical")),
71 _phi0(coupledValue("porosity_zero")),
72 _biot(this->template getParam<Real>("biot_coefficient")),
73 _exp_coeff(this->isParamValid("thermal_expansion_coeff")
74 ? this->template getParam<Real>("thermal_expansion_coeff")
75 : 0.0),
76 _solid_bulk(this->isParamValid("solid_bulk") ? &(this->template getFunctor<Real>("solid_bulk"))
77 : nullptr),
78 _coeff(this->isParamValid("biot_coefficient_prime")
79 ? (this->template getParam<Real>("biot_coefficient_prime") - 1.0)
80 : (_biot - 1.0)),
81
82 _t_reference(nodalOrQpValue("reference_temperature")),
83 _p_reference(nodalOrQpValue("reference_porepressure")),
84 _num_c_ref(coupledComponents("reference_chemistry")),
86 _num_initial_c(coupledComponents("initial_mineral_concentrations")),
88 _c_weights(this->isParamValid("chemical_weights")
89 ? this->template getParam<std::vector<Real>>("chemical_weights")
90 : std::vector<Real>(_num_c_ref, 1.0)),
91
93 _chemical ? (_nodal_material
94 ? &this->template getMaterialPropertyOld<Real>("PorousFlow_porosity_nodal")
95 : &this->template getMaterialPropertyOld<Real>("PorousFlow_porosity_qp"))
96 : nullptr),
97 _vol_strain_qp(_mechanical ? &this->template getGenericMaterialProperty<Real, is_ad>(
98 "PorousFlow_total_volumetric_strain_qp")
99 : nullptr),
101 ? &this->template getMaterialProperty<std::vector<RealGradient>>(
102 "dPorousFlow_total_volumetric_strain_qp_dvar")
103 : nullptr),
104
105 _pf(_fluid ? (_nodal_material ? &this->template getGenericMaterialProperty<Real, is_ad>(
106 "PorousFlow_effective_fluid_pressure_nodal")
107 : &this->template getGenericMaterialProperty<Real, is_ad>(
108 "PorousFlow_effective_fluid_pressure_qp"))
109 : nullptr),
110 _dpf_dvar((_fluid && !is_ad)
111 ? (_nodal_material ? &this->template getMaterialProperty<std::vector<Real>>(
112 "dPorousFlow_effective_fluid_pressure_nodal_dvar")
113 : &this->template getMaterialProperty<std::vector<Real>>(
114 "dPorousFlow_effective_fluid_pressure_qp_dvar"))
115 : nullptr),
116
118 ? (_nodal_material ? &this->template getGenericMaterialProperty<Real, is_ad>(
119 "PorousFlow_temperature_nodal")
120 : &this->template getGenericMaterialProperty<Real, is_ad>(
121 "PorousFlow_temperature_qp"))
122 : nullptr),
123 _dtemperature_dvar((_thermal && !is_ad)
124 ? (_nodal_material
125 ? &this->template getMaterialProperty<std::vector<Real>>(
126 "dPorousFlow_temperature_nodal_dvar")
127 : &this->template getMaterialProperty<std::vector<Real>>(
128 "dPorousFlow_temperature_qp_dvar"))
129 : nullptr),
130
131 _mineral_conc_old(_chemical ? (_nodal_material
132 ? &this->template getMaterialPropertyOld<std::vector<Real>>(
133 "PorousFlow_mineral_concentration_nodal")
134 : &this->template getMaterialPropertyOld<std::vector<Real>>(
135 "PorousFlow_mineral_concentration_qp"))
136 : nullptr),
138 ? (_nodal_material ? &this->template getMaterialProperty<std::vector<Real>>(
139 "PorousFlow_mineral_reaction_rate_nodal")
140 : &this->template getMaterialProperty<std::vector<Real>>(
141 "PorousFlow_mineral_reaction_rate_qp"))
142 : nullptr),
144 _chemical ? (_nodal_material
145 ? &this->template getMaterialProperty<std::vector<std::vector<Real>>>(
146 "dPorousFlow_mineral_reaction_rate_nodal_dvar")
147 : &this->template getMaterialProperty<std::vector<std::vector<Real>>>(
148 "dPorousFlow_mineral_reaction_rate_qp_dvar"))
149 : nullptr),
150 _aq_ph(_dictator.aqueousPhaseNumber()),
152 ? (_nodal_material ? &this->template getMaterialProperty<std::vector<Real>>(
153 "PorousFlow_saturation_nodal")
154 : &this->template getMaterialProperty<std::vector<Real>>(
155 "PorousFlow_saturation_qp"))
156 : nullptr),
158 _chemical ? (_nodal_material
159 ? &this->template getMaterialProperty<std::vector<std::vector<Real>>>(
160 "dPorousFlow_saturation_nodal_dvar")
161 : &this->template getMaterialProperty<std::vector<std::vector<Real>>>(
162 "dPorousFlow_saturation_qp_dvar"))
163 : nullptr)
164{
165 // PorousFlowAqueousPreDisChemistry and PorousFlowAqueousPreDisMineral are not templated on is_ad,
166 // so the mineral concentration and reaction rate consumed below exist only as non-AD properties
167 if constexpr (is_ad)
168 if (_chemical)
169 this->mooseError(
170 "ADPorousFlowPorosity does not support chemical=true: the aqueous "
171 "precipitation/dissolution materials are not AD. Use the non-AD PorousFlowPorosity for "
172 "chemistry-coupled porosity");
173
174 if (_thermal && !this->isParamValid("thermal_expansion_coeff"))
175 this->mooseError(
176 "PorousFlowPorosity: When thermal=true you must provide a thermal_expansion_coeff");
177 if (_fluid && !_solid_bulk)
178 this->mooseError("PorousFlowPorosity: When fluid=true you must provide a solid_bulk");
179 if (_chemical && _num_c_ref != _dictator.numAqueousKinetic())
180 this->mooseError(
181 "PorousFlowPorosity: When chemical=true you must provide the reference_chemistry "
182 "values. The Dictator proclaims there should be ",
183 _dictator.numAqueousKinetic(),
184 " of these");
185 if (_chemical && _num_initial_c != _dictator.numAqueousKinetic())
186 this->mooseError("PorousFlowPorosity: When chemical=true you must provide the "
187 "initial_mineral_concentrations. "
188 "The Dictator proclaims there should be ",
189 _dictator.numAqueousKinetic(),
190 " of these");
191 if (_chemical && _c_weights.size() != _dictator.numAqueousKinetic())
192 this->mooseError(
193 "PorousFlowPorosity: When chemical=true you must provde the correct number of "
194 "chemical_weights (which the Dictator knows is ",
195 _dictator.numAqueousKinetic(),
196 ") or do not provide any chemical_weights and use the default value of 1 for each mineral");
197
198 for (unsigned i = 0; i < _num_c_ref; ++i)
199 {
200 _c_reference[i] = &nodalOrQpValue("reference_chemistry", i);
201 _initial_c[i] = &nodalOrQpValue("initial_mineral_concentrations", i);
202 }
203}
void mooseError(Args &&... args)
Base class Material designed to provide the porosity.
const Real _exp_coeff
Thermal expansion coefficient of the solid porous skeleton.
const MaterialProperty< Real > *const _porosity_old
Old value of porosity.
const MaterialProperty< std::vector< Real > > *const _saturation
Saturation.
const bool _chemical
Porosity is a function of chemistry.
const VariableValue & _phi0
Porosity at zero strain and zero porepressure and zero temperature.
const bool _mechanical
Porosity is a function of volumetric strain.
const GenericMaterialProperty< Real, is_ad > *const _vol_strain_qp
Strain.
const Real _coeff
Short-hand number (biot-1). Please note: this variable is not yet divided by solid_bulk.
const MaterialProperty< std::vector< Real > > *const _dtemperature_dvar
d(temperature)/(d porflow variable)
const Real _biot
Biot coefficient.
const unsigned _num_c_ref
Number of reference mineral concentrations provided by user.
const bool _fluid
Porosity is a function of effective porepressure.
const bool _thermal
Porosity is a function of temperature.
std::vector< Real > _c_weights
Weights for the mineral concentrations.
const unsigned _num_initial_c
Number of reference mineral concentrations provided by user.
const VariableValue & _p_reference
Reference porepressure.
const MaterialProperty< std::vector< Real > > *const _dpf_dvar
d(effective porepressure)/(d porflow variable)
const GenericMaterialProperty< Real, is_ad > *const _pf
Effective porepressure at the quadpoints or nodes.
const MaterialProperty< std::vector< Real > > *const _mineral_conc_old
Old value of mineral concentration at the quadpoints or nodes.
const MaterialProperty< std::vector< std::vector< Real > > > *const _dreaction_rate_dvar
d(reaction_rate_conc)/d(porflow variable)
std::vector< const VariableValue * > _c_reference
Reference mineral concentrations.
const VariableValue & _t_reference
Reference temperature.
const Moose::Functor< Real > * _solid_bulk
Drained bulk modulus of the porous skeleton (as a functor; can be variable, function,...
const unsigned int _aq_ph
Aqueous phase number.
const MaterialProperty< std::vector< Real > > *const _reaction_rate
Reaction rate of mineralisation.
const GenericMaterialProperty< Real, is_ad > *const _temperature
Temperature at the quadpoints or nodes.
const MaterialProperty< std::vector< RealGradient > > *const _dvol_strain_qp_dvar
d(strain)/(dvar)
const MaterialProperty< std::vector< std::vector< Real > > > *const _dsaturation_dvar
d(saturation)/d(PorousFlow var)
std::vector< const VariableValue * > _initial_c
Reference mineral concentrations.
RealVectorValue RealGradient
DIE A HORRIBLE DEATH HERE typedef LIBMESH_DEFAULT_SCALAR_TYPE Real

Member Function Documentation

◆ applyPorosityMin()

template<bool is_ad>
void PorousFlowPorosityBaseTempl< is_ad >::applyPorosityMin ( )
protectedinherited

If _porosity[_qp] < porosity_min, set _porosity[_qp] = porosity_min and multiply the derivatives of porosity by _zero_modifier (the derivative material properties for non-AD objects, and the AD derivatives for AD objects).

Otherwise do nothing. Derived classes call this at the end of computeQpProperties(), after the unfloored porosity and its derivatives have been computed.

Definition at line 58 of file PorousFlowPorosityBase.C.

59{
61 return;
62
63 if constexpr (!is_ad)
64 {
66 for (unsigned int v = 0; v < _num_var; ++v)
67 {
68 (*_dporosity_dvar)[_qp][v] *= _zero_modifier;
69 (*_dporosity_dgradvar)[_qp][v] *= _zero_modifier;
70 }
71 }
72 else
73 {
74 // The AD path carries its derivatives inside the value and has no derivative material
75 // properties, so the value and the derivatives are softened separately. Assigning
76 // _porosity_min to the ADReal would instead discard the derivatives entirely.
77 _porosity[_qp].value() = _porosity_min;
78 _porosity[_qp].derivatives() *= _zero_modifier;
79 }
80}
const double v
const unsigned int _num_var
Number of PorousFlow variables.
const Real _zero_modifier
When the porosity_min floor is active, the porosity derivatives are multiplied by this.
const Real _porosity_min
Minimum allowed porosity (default zero, so porosity is never negative)
GenericMaterialProperty< Real, is_ad > & _porosity
Computed porosity at the nodes or quadpoints.
auto raw_value(const Eigen::Map< T > &in)

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

◆ atNegInfinityQp()

template<bool is_ad>
GenericReal< is_ad > PorousFlowPorosityTempl< is_ad >::atNegInfinityQp ( ) const
overrideprotectedvirtual

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

Implements PorousFlowPorosityExponentialBaseTempl< is_ad >.

Definition at line 207 of file PorousFlowPorosity.C.

208{
209 /*
210 *
211 * Note the use of the OLD value of porosity here.
212 * This strategy, which breaks the cyclic dependency between porosity
213 * and mineral concentration, is used in
214 * Kernel: PorousFlowPreDis
215 * Material: PorousFlowPorosity
216 * Material: PorousFlowAqueousPreDisChemistry
217 * Material: PorousFlowAqueousPreDisMineral
218 *
219 */
220 GenericReal<is_ad> result = _biot;
221 if (_chemical)
222 {
223 if (_t_step == 0 && !_app.isRestarting())
224 for (unsigned i = 0; i < _num_c_ref; ++i)
225 result -= _c_weights[i] * (*_initial_c[i])[_qp];
226 else
227 for (unsigned i = 0; i < _num_c_ref; ++i)
228 result -= _c_weights[i] * ((*_mineral_conc_old)[_qp][i] + _dt * (*_porosity_old)[_qp] *
229 (*_saturation)[_qp][_aq_ph] *
230 (*_reaction_rate)[_qp][i]);
231 }
232 return result;
233}
Moose::GenericType< Real, is_ad > GenericReal

◆ atZeroQp()

template<bool is_ad>
GenericReal< is_ad > PorousFlowPorosityTempl< is_ad >::atZeroQp ( ) const
overrideprotectedvirtual

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

Implements PorousFlowPorosityExponentialBaseTempl< is_ad >.

Definition at line 250 of file PorousFlowPorosity.C.

251{
252 // note the [0] below: _phi0 is a constant monomial and we use [0] regardless of _nodal_material
253 GenericReal<is_ad> result = _phi0[0];
254 if (_chemical)
255 {
256 if (_t_step == 0 && !_app.isRestarting())
257 for (unsigned i = 0; i < _num_c_ref; ++i)
258 result -= _c_weights[i] * ((*_initial_c[i])[_qp] - (*_c_reference[i])[_qp]);
259 else
260 for (unsigned i = 0; i < _num_c_ref; ++i)
261 result -= _c_weights[i] * ((*_mineral_conc_old)[_qp][i] +
262 _dt * (*_porosity_old)[_qp] * (*_saturation)[_qp][_aq_ph] *
263 (*_reaction_rate)[_qp][i] -
264 (*_c_reference[i])[_qp]);
265 }
266 return result;
267}

◆ computeQpProperties()

template<bool is_ad>
void PorousFlowPorosityExponentialBaseTempl< is_ad >::computeQpProperties ( )
overrideprotectedvirtualinherited

Reimplemented in PorousFlowPorosityHMBiotModulus.

Definition at line 81 of file PorousFlowPorosityExponentialBase.C.

82{
83 // Unqualified calls so ADL finds the MetaPhysicL overloads for the AD (DualNumber) instantiation
84 using std::exp;
85 using std::log;
86 using std::pow;
87
90 const GenericReal<is_ad> decay = decayQp();
91 GenericReal<is_ad> exp_term = 1.0; // set appropriately below
92
93 if (decay <= 0.0 || !_ensure_positive)
94 {
95 exp_term = exp(decay);
96 _porosity[_qp] = a + (b - a) * exp_term;
97 }
98 else
99 {
100 const GenericReal<is_ad> c = log(a / (a - b));
101 // note that at decay = 0, we have expx = 1, so porosity = a + b - a = b
102 // and at decay = infinity, expx = 0, so porosity = a + (b - a) * a / (a - b) = 0
103 const GenericReal<is_ad> expx = exp(-decay / c);
104 exp_term = exp(c * (1.0 - expx));
105 _porosity[_qp] = a + (b - a) * exp_term;
106 }
107
108 if constexpr (!is_ad)
109 {
110 // The AD path carries the derivatives with respect to the PorousFlow variables inside the AD
111 // porosity value, so only the non-AD path builds these derivative material properties.
112 Real deriv = 0.0; // = d(porosity)/d(decay)
113 if (decay <= 0.0 || !_ensure_positive)
114 deriv = _porosity[_qp] - a;
115 else
116 {
117 const Real c = log(a / (a - b));
118 const Real expx = exp(-decay / c);
119 deriv = (_porosity[_qp] - a) * expx;
120 }
121
122 (*_dporosity_dvar)[_qp].resize(_num_var);
123 (*_dporosity_dgradvar)[_qp].resize(_num_var);
124 for (unsigned int v = 0; v < _num_var; ++v)
125 {
126 (*_dporosity_dvar)[_qp][v] = ddecayQp_dvar(v) * deriv;
127 (*_dporosity_dgradvar)[_qp][v] = ddecayQp_dgradvar(v) * deriv;
128
129 const Real da = datNegInfinityQp(v);
130 const Real db = datZeroQp(v);
131 (*_dporosity_dvar)[_qp][v] += da * (1 - exp_term) + db * exp_term;
132
133 if (!(decay <= 0.0 || !_ensure_positive))
134 {
135 const Real c = log(a / (a - b));
136 const Real expx = exp(-decay / c);
137 const Real dc = (a - b) * (da * b / a - db) / Utility::pow<2>(a);
138 (*_dporosity_dvar)[_qp][v] += (b - a) * exp_term * dc * (1 - expx - expx / c);
139 }
140 }
141 }
142
143 // Apply the porosity floor last, after the unfloored derivatives above have been
144 // formed (see PorousFlowPorosityBaseTempl::applyPorosityMin)
146}
const GeochemicalDatabaseReader db("database/moose_testdb.json", true, true, false)
void applyPorosityMin()
If _porosity[_qp] < porosity_min, set _porosity[_qp] = porosity_min and multiply the derivatives of p...
virtual GenericReal< is_ad > atNegInfinityQp() const =0
Returns "a" at the quadpoint (porosity = a + (b - a) * exp(decay))
virtual GenericReal< is_ad > decayQp() const =0
Returns "decay" at the quadpoint (porosity = a + (b - a) * exp(decay))
virtual GenericReal< is_ad > atZeroQp() const =0
Returns "b" at the quadpoint (porosity = a + (b - a) * exp(decay))
virtual RealGradient ddecayQp_dgradvar(unsigned pvar) const =0
d(decay)/d(grad(PorousFlow variable pvar))
virtual Real datZeroQp(unsigned pvar) const =0
d(b)/d(PorousFlow variable pvar)
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)
const bool _ensure_positive
for decayQp() > 0, porosity can be negative when using porosity = a + (b - a) * exp(decay).
auto exp(const T &)
auto log(const T &)
Real deriv(unsigned n, unsigned alpha, unsigned beta, Real x)

◆ datNegInfinityQp()

template<bool is_ad>
Real PorousFlowPorosityTempl< is_ad >::datNegInfinityQp ( unsigned  pvar) const
overrideprotectedvirtual

d(a)/d(PorousFlow variable pvar)

Implements PorousFlowPorosityExponentialBaseTempl< is_ad >.

Definition at line 237 of file PorousFlowPorosity.C.

238{
239 Real result = 0.0;
240 if (_chemical && (_t_step >= 1 || _app.isRestarting()))
241 for (unsigned i = 0; i < _num_c_ref; ++i)
242 result -= _c_weights[i] * _dt * (*_porosity_old)[_qp] *
243 ((*_saturation)[_qp][_aq_ph] * (*_dreaction_rate_dvar)[_qp][i][pvar] +
244 (*_dsaturation_dvar)[_qp][_aq_ph][pvar] * (*_reaction_rate)[_qp][i]);
245 return result;
246}

◆ datZeroQp()

template<bool is_ad>
Real PorousFlowPorosityTempl< is_ad >::datZeroQp ( unsigned  pvar) const
overrideprotectedvirtual

d(b)/d(PorousFlow variable pvar)

Implements PorousFlowPorosityExponentialBaseTempl< is_ad >.

Definition at line 271 of file PorousFlowPorosity.C.

272{
273 Real result = 0.0;
274 if (_chemical && (_t_step >= 1 || _app.isRestarting()))
275 for (unsigned i = 0; i < _num_c_ref; ++i)
276 result -= _c_weights[i] * _dt * (*_porosity_old)[_qp] *
277 ((*_saturation)[_qp][_aq_ph] * (*_dreaction_rate_dvar)[_qp][i][pvar] +
278 (*_dsaturation_dvar)[_qp][_aq_ph][pvar] * (*_reaction_rate)[_qp][i]);
279 return result;
280}

◆ ddecayQp_dgradvar()

template<bool is_ad>
RealGradient PorousFlowPorosityTempl< is_ad >::ddecayQp_dgradvar ( unsigned  pvar) const
overrideprotectedvirtual

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

Implements PorousFlowPorosityExponentialBaseTempl< is_ad >.

Definition at line 375 of file PorousFlowPorosity.C.

376{
377 RealGradient result(0.0, 0.0, 0.0);
378 if (_mechanical)
379 {
380 const unsigned qp_to_use =
381 (_nodal_material && (_bnd || _strain_at_nearest_qp) ? nearestQP(_qp) : _qp);
382 result += -(*_dvol_strain_qp_dvar)[qp_to_use][pvar];
383 }
384 return result;
385}
const bool _strain_at_nearest_qp
When calculating nodal porosity, use the strain at the nearest quadpoint to the node.

◆ ddecayQp_dvar()

template<bool is_ad>
Real PorousFlowPorosityTempl< is_ad >::ddecayQp_dvar ( unsigned  pvar) const
overrideprotectedvirtual

d(decay)/d(PorousFlow variable pvar)

Implements PorousFlowPorosityExponentialBaseTempl< is_ad >.

Definition at line 335 of file PorousFlowPorosity.C.

336{
337 Real result = 0.0;
338
339 if (_thermal)
340 result += _exp_coeff * (*_dtemperature_dvar)[_qp][pvar];
341
342 if (_fluid)
343 {
344 Real solid_bulk;
345 // Using Qp 0 can leverage the functor caching
346 // TODO: Find a way to effectively use subdomain-constant-ness
347 unsigned int qp_used = (_constant_option == Material::ConstantTypeEnum::NONE) ? _qp : 0;
348 if (_nodal_material)
349 {
350 const std::set<SubdomainID> subdomain_set = {_current_elem->subdomain_id()};
351 const Moose::NodeArg space_arg = {_current_elem->node_ptr(qp_used), &subdomain_set};
352 solid_bulk = (*_solid_bulk)(space_arg, Moose::currentState());
353 }
354 else if (_bnd)
355 {
356 const Moose::ElemSideQpArg space_arg = {
357 _current_elem, _current_side, qp_used, _qrule, _q_point[qp_used]};
358 solid_bulk = (*_solid_bulk)(space_arg, Moose::currentState());
359 }
360 else
361 {
362 const Moose::ElemQpArg space_arg = {_current_elem, qp_used, _qrule, _q_point[qp_used]};
363 solid_bulk = (*_solid_bulk)(space_arg, Moose::currentState());
364 }
365 if (solid_bulk <= 0)
366 this->mooseError("PorousFlowPorosity: solid_bulk must be larger than Zero.");
367 result += _coeff / solid_bulk * (*_dpf_dvar)[_qp][pvar];
368 }
369
370 return result;
371}
StateArg currentState()

◆ decayQp()

template<bool is_ad>
GenericReal< is_ad > PorousFlowPorosityTempl< is_ad >::decayQp ( ) const
overrideprotectedvirtual

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

Implements PorousFlowPorosityExponentialBaseTempl< is_ad >.

Definition at line 284 of file PorousFlowPorosity.C.

285{
286 GenericReal<is_ad> result = 0.0;
287
288 if (_thermal)
289 result += _exp_coeff * ((*_temperature)[_qp] - _t_reference[_qp]);
290
291 if (_fluid)
292 {
293 Real solid_bulk;
294 // Using Qp 0 can leverage the functor caching
295 // TODO: Find a way to effectively use subdomain-constant-ness
296 unsigned int qp_used = (_constant_option == Material::ConstantTypeEnum::NONE) ? _qp : 0;
297 if (_nodal_material)
298 {
299 const std::set<SubdomainID> subdomain_set = {_current_elem->subdomain_id()};
300 const Moose::NodeArg space_arg = {_current_elem->node_ptr(qp_used), &subdomain_set};
301 solid_bulk = (*_solid_bulk)(space_arg, Moose::currentState());
302 }
303 else if (_bnd)
304 {
305 const Moose::ElemSideQpArg space_arg = {
306 _current_elem, _current_side, qp_used, _qrule, _q_point[qp_used]};
307 solid_bulk = (*_solid_bulk)(space_arg, Moose::currentState());
308 }
309 else
310 {
311 const Moose::ElemQpArg space_arg = {_current_elem, qp_used, _qrule, _q_point[qp_used]};
312 solid_bulk = (*_solid_bulk)(space_arg, Moose::currentState());
313 }
314 if (solid_bulk <= 0)
315 this->mooseError("PorousFlowPorosity: solid_bulk must be larger than Zero");
316 result += _coeff / solid_bulk * ((*_pf)[_qp] - _p_reference[_qp]);
317 }
318
319 if (_mechanical)
320 {
321 // Note that in the following _strain[_qp] is evaluated at q quadpoint
322 // So _porosity_nodal[_qp], which should be the nodal value of porosity
323 // actually uses the strain at a quadpoint. This
324 // is OK for LINEAR elements, as strain is constant over the element anyway.
325 const unsigned qp_to_use =
326 (_nodal_material && (_bnd || _strain_at_nearest_qp) ? nearestQP(_qp) : _qp);
327 result += -(*_vol_strain_qp)[qp_to_use];
328 }
329
330 return result;
331}

◆ initQpStatefulProperties()

template<bool is_ad>
void PorousFlowPorosityExponentialBaseTempl< is_ad >::initQpStatefulProperties ( )
overrideprotectedvirtualinherited

Definition at line 55 of file PorousFlowPorosityExponentialBase.C.

56{
57 // Unqualified calls so ADL finds the MetaPhysicL overloads for the AD (DualNumber) instantiation
58 using std::exp;
59 using std::log;
60
63 mooseAssert(a > b, "PorousFlowPorosityExponentialBase a must be larger than b");
64 const GenericReal<is_ad> decay = decayQp();
65
66 if (decay <= 0.0 || !_ensure_positive)
67 _porosity[_qp] = a + (b - a) * exp(decay);
68 else
69 {
70 const GenericReal<is_ad> c = log(a / (a - b));
71 const GenericReal<is_ad> expx = exp(-decay / c);
72 _porosity[_qp] = a + (b - a) * exp(c * (1.0 - expx));
73 }
74
75 if (_porosity[_qp] < _porosity_min)
77}

◆ validParams()

template<bool is_ad>
InputParameters PorousFlowPorosityTempl< is_ad >::validParams ( )
static

Definition at line 17 of file PorousFlowPorosity.C.

18{
20 params.addParam<bool>(
21 "mechanical", false, "If true, porosity will be a function of total volumetric strain");
22 params.addParam<bool>(
23 "fluid", false, "If true, porosity will be a function of effective porepressure");
24 params.addParam<bool>("thermal", false, "If true, porosity will be a function of temperature");
25 params.addParam<bool>("chemical", false, "If true, porosity will be a function of precipitate");
26 params.addRequiredCoupledVar("porosity_zero",
27 "The porosity at zero volumetric strain and "
28 "reference temperature and reference effective "
29 "porepressure and reference chemistry. This must be a real number "
30 "or a constant monomial variable (not a linear lagrange or other "
31 "type of variable)");
32 params.addParam<Real>("thermal_expansion_coeff",
33 "Volumetric thermal expansion coefficient of the drained porous solid "
34 "skeleton (only used if thermal=true)");
36 "biot_coefficient", 1, "biot_coefficient>=0 & biot_coefficient<=1", "Biot coefficient");
37 params.addParam<Real>("biot_coefficient_prime",
38 "Biot coefficient that appears in the term (biot_coefficient_prime - 1) * "
39 "(P - reference_porepressure) / solid_bulk. If not provided, this "
40 "defaults to the standard biot_coefficient");
41 params.addParam<MooseFunctorName>(
42 "solid_bulk", "Bulk modulus of the drained porous solid skeleton (only used if fluid=true)");
43 params.addCoupledVar(
44 "reference_temperature", 0.0, "Reference temperature (only used if thermal=true)");
45 params.addCoupledVar(
46 "reference_porepressure", 0.0, "Reference porepressure (only used if fluid=true)");
47 params.addCoupledVar("reference_chemistry",
48 "Reference values of the solid mineral concentrations "
49 "(m^3(precipitate)/m^3(porous material)), entered as "
50 "a vector (one value per mineral). (Only used if chemical=true)");
51 params.addCoupledVar(
52 "initial_mineral_concentrations",
53 "Initial mineral concentrations (m^3(precipitate)/m^3(porous material)), entered as "
54 "a vector (one value per mineral). (Only used if chemical=true)");
55 params.addParam<std::vector<Real>>("chemical_weights",
56 "When chemical=true, porosity is a linear combination of the "
57 "solid mineral concentrations multiplied by these weights. "
58 "Default=1 for all minerals.");
59 params.addClassDescription("This Material calculates the porosity PorousFlow simulations");
60 return params;
61}
void addRequiredCoupledVar(const std::string &name, const std::string &doc_string)
void addParam(const std::string &name, const std::initializer_list< typename T::value_type > &value, const std::string &doc_string)
void addClassDescription(const std::string &doc_string)
void addCoupledVar(const std::string &name, const std::string &doc_string)
void addRangeCheckedParam(const std::string &name, const T &value, const std::string &parsed_function, const std::string &doc_string)

Referenced by PorousFlowPorosityHMBiotModulus::validParams().

Member Data Documentation

◆ _aq_ph

template<bool is_ad>
const unsigned int PorousFlowPorosityTempl< is_ad >::_aq_ph
protected

Aqueous phase number.

Definition at line 117 of file PorousFlowPorosity.h.

◆ _biot

template<bool is_ad>
const Real PorousFlowPorosityTempl< is_ad >::_biot
protected

Biot coefficient.

Definition at line 53 of file PorousFlowPorosity.h.

Referenced by PorousFlowPorosityHMBiotModulus::computeQpProperties().

◆ _c_reference

template<bool is_ad>
std::vector<const VariableValue *> PorousFlowPorosityTempl< is_ad >::_c_reference
protected

Reference mineral concentrations.

Definition at line 75 of file PorousFlowPorosity.h.

Referenced by PorousFlowPorosityTempl< is_ad >::PorousFlowPorosityTempl().

◆ _c_weights

template<bool is_ad>
std::vector<Real> PorousFlowPorosityTempl< is_ad >::_c_weights
protected

Weights for the mineral concentrations.

Definition at line 84 of file PorousFlowPorosity.h.

Referenced by PorousFlowPorosityTempl< is_ad >::PorousFlowPorosityTempl().

◆ _chemical

template<bool is_ad>
const bool PorousFlowPorosityTempl< is_ad >::_chemical
protected

Porosity is a function of chemistry.

Definition at line 47 of file PorousFlowPorosity.h.

Referenced by PorousFlowPorosityTempl< is_ad >::PorousFlowPorosityTempl().

◆ _coeff

template<bool is_ad>
const Real PorousFlowPorosityTempl< is_ad >::_coeff
protected

Short-hand number (biot-1). Please note: this variable is not yet divided by solid_bulk.

Definition at line 63 of file PorousFlowPorosity.h.

◆ _dpf_dvar

template<bool is_ad>
const MaterialProperty<std::vector<Real> >* const PorousFlowPorosityTempl< is_ad >::_dpf_dvar
protected

d(effective porepressure)/(d porflow variable)

Definition at line 99 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 42 of file PorousFlowPorosityBase.h.

Referenced by PorousFlowPorosityHMBiotModulus::computeQpProperties().

◆ _dporosity_dvar

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

◆ _dreaction_rate_dvar

template<bool is_ad>
const MaterialProperty<std::vector<std::vector<Real> > >* const PorousFlowPorosityTempl< is_ad >::_dreaction_rate_dvar
protected

d(reaction_rate_conc)/d(porflow variable)

Definition at line 114 of file PorousFlowPorosity.h.

◆ _dsaturation_dvar

template<bool is_ad>
const MaterialProperty<std::vector<std::vector<Real> > >* const PorousFlowPorosityTempl< is_ad >::_dsaturation_dvar
protected

d(saturation)/d(PorousFlow var)

Definition at line 123 of file PorousFlowPorosity.h.

◆ _dtemperature_dvar

template<bool is_ad>
const MaterialProperty<std::vector<Real> >* const PorousFlowPorosityTempl< is_ad >::_dtemperature_dvar
protected

d(temperature)/(d porflow variable)

Definition at line 105 of file PorousFlowPorosity.h.

◆ _dvol_strain_qp_dvar

template<bool is_ad>
const MaterialProperty<std::vector<RealGradient> >* const PorousFlowPorosityTempl< is_ad >::_dvol_strain_qp_dvar
protected

d(strain)/(dvar)

Definition at line 93 of file PorousFlowPorosity.h.

◆ _ensure_positive

template<bool is_ad>
const bool PorousFlowPorosityExponentialBaseTempl< is_ad >::_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 74 of file PorousFlowPorosityExponentialBase.h.

◆ _exp_coeff

template<bool is_ad>
const Real PorousFlowPorosityTempl< is_ad >::_exp_coeff
protected

Thermal expansion coefficient of the solid porous skeleton.

Definition at line 56 of file PorousFlowPorosity.h.

◆ _fluid

template<bool is_ad>
const bool PorousFlowPorosityTempl< is_ad >::_fluid
protected

Porosity is a function of effective porepressure.

Definition at line 41 of file PorousFlowPorosity.h.

Referenced by PorousFlowPorosityTempl< is_ad >::PorousFlowPorosityTempl().

◆ _initial_c

template<bool is_ad>
std::vector<const VariableValue *> PorousFlowPorosityTempl< is_ad >::_initial_c
protected

Reference mineral concentrations.

Definition at line 81 of file PorousFlowPorosity.h.

Referenced by PorousFlowPorosityTempl< is_ad >::PorousFlowPorosityTempl().

◆ _mechanical

template<bool is_ad>
const bool PorousFlowPorosityTempl< is_ad >::_mechanical
protected

Porosity is a function of volumetric strain.

Definition at line 38 of file PorousFlowPorosity.h.

◆ _mineral_conc_old

template<bool is_ad>
const MaterialProperty<std::vector<Real> >* const PorousFlowPorosityTempl< is_ad >::_mineral_conc_old
protected

Old value of mineral concentration at the quadpoints or nodes.

Definition at line 108 of file PorousFlowPorosity.h.

◆ _num_c_ref

template<bool is_ad>
const unsigned PorousFlowPorosityTempl< is_ad >::_num_c_ref
protected

Number of reference mineral concentrations provided by user.

Definition at line 72 of file PorousFlowPorosity.h.

Referenced by PorousFlowPorosityTempl< is_ad >::PorousFlowPorosityTempl().

◆ _num_components

const unsigned int PorousFlowMaterialVectorBase::_num_components
protectedinherited

◆ _num_initial_c

template<bool is_ad>
const unsigned PorousFlowPorosityTempl< is_ad >::_num_initial_c
protected

Number of reference mineral concentrations provided by user.

Definition at line 78 of file PorousFlowPorosity.h.

Referenced by PorousFlowPorosityTempl< is_ad >::PorousFlowPorosityTempl().

◆ _num_phases

const unsigned int PorousFlowMaterialVectorBase::_num_phases
protectedinherited

◆ _num_var

const unsigned int PorousFlowMaterialVectorBase::_num_var
protectedinherited

◆ _p_reference

template<bool is_ad>
const VariableValue& PorousFlowPorosityTempl< is_ad >::_p_reference
protected

Reference porepressure.

Definition at line 69 of file PorousFlowPorosity.h.

◆ _pf

template<bool is_ad>
const GenericMaterialProperty<Real, is_ad>* const PorousFlowPorosityTempl< is_ad >::_pf
protected

Effective porepressure at the quadpoints or nodes.

Definition at line 96 of file PorousFlowPorosity.h.

Referenced by PorousFlowPorosityHMBiotModulus::computeQpProperties().

◆ _phi0

template<bool is_ad>
const VariableValue& PorousFlowPorosityTempl< is_ad >::_phi0
protected

Porosity at zero strain and zero porepressure and zero temperature.

Definition at line 50 of file PorousFlowPorosity.h.

◆ _porosity

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

◆ _porosity_min

template<bool is_ad>
const Real PorousFlowPorosityBaseTempl< is_ad >::_porosity_min
protectedinherited

Minimum allowed porosity (default zero, so porosity is never negative)

Definition at line 45 of file PorousFlowPorosityBase.h.

◆ _porosity_old

template<bool is_ad>
const MaterialProperty<Real>* const PorousFlowPorosityTempl< is_ad >::_porosity_old
protected

Old value of porosity.

Definition at line 87 of file PorousFlowPorosity.h.

◆ _reaction_rate

template<bool is_ad>
const MaterialProperty<std::vector<Real> >* const PorousFlowPorosityTempl< is_ad >::_reaction_rate
protected

Reaction rate of mineralisation.

Definition at line 111 of file PorousFlowPorosity.h.

◆ _saturation

template<bool is_ad>
const MaterialProperty<std::vector<Real> >* const PorousFlowPorosityTempl< is_ad >::_saturation
protected

Saturation.

Definition at line 120 of file PorousFlowPorosity.h.

◆ _solid_bulk

template<bool is_ad>
const Moose::Functor<Real>* PorousFlowPorosityTempl< is_ad >::_solid_bulk
protected

Drained bulk modulus of the porous skeleton (as a functor; can be variable, function, etc.) Only used if _fluid is True.

Definition at line 60 of file PorousFlowPorosity.h.

Referenced by PorousFlowPorosityTempl< is_ad >::PorousFlowPorosityTempl().

◆ _strain_at_nearest_qp

template<bool is_ad>
const bool PorousFlowPorosityExponentialBaseTempl< is_ad >::_strain_at_nearest_qp
protectedinherited

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

Definition at line 65 of file PorousFlowPorosityExponentialBase.h.

Referenced by PorousFlowPorosityHMBiotModulus::computeQpProperties().

◆ _t_reference

template<bool is_ad>
const VariableValue& PorousFlowPorosityTempl< is_ad >::_t_reference
protected

Reference temperature.

Definition at line 66 of file PorousFlowPorosity.h.

◆ _temperature

template<bool is_ad>
const GenericMaterialProperty<Real, is_ad>* const PorousFlowPorosityTempl< is_ad >::_temperature
protected

Temperature at the quadpoints or nodes.

Definition at line 102 of file PorousFlowPorosity.h.

◆ _thermal

template<bool is_ad>
const bool PorousFlowPorosityTempl< is_ad >::_thermal
protected

Porosity is a function of temperature.

Definition at line 44 of file PorousFlowPorosity.h.

Referenced by PorousFlowPorosityTempl< is_ad >::PorousFlowPorosityTempl().

◆ _vol_strain_qp

template<bool is_ad>
const GenericMaterialProperty<Real, is_ad>* const PorousFlowPorosityTempl< is_ad >::_vol_strain_qp
protected

Strain.

Definition at line 90 of file PorousFlowPorosity.h.

Referenced by PorousFlowPorosityHMBiotModulus::computeQpProperties().

◆ _zero_modifier

template<bool is_ad>
const Real PorousFlowPorosityBaseTempl< is_ad >::_zero_modifier
protectedinherited

When the porosity_min floor is active, the porosity derivatives are multiplied by this.

Definition at line 48 of file PorousFlowPorosityBase.h.

◆ usingPorousFlowPorosityBaseMembers

template<bool is_ad>
PorousFlowPorosityExponentialBaseTempl< is_ad >::usingPorousFlowPorosityBaseMembers
protectedinherited

Definition at line 76 of file PorousFlowPorosityExponentialBase.h.

◆ usingPorousFlowPorosityExponentialBaseMembers

template<bool is_ad>
PorousFlowPorosityTempl< is_ad >::usingPorousFlowPorosityExponentialBaseMembers
protected

Definition at line 125 of file PorousFlowPorosity.h.


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