https://mooseframework.inl.gov
Public Types | Public Member Functions | Static Public Member Functions | Protected Member Functions | Protected Attributes | List of all members
PorousFlowPorosityLinear Class Reference

Material designed to provide the porosity in PorousFlow simulations porosity_ref + P_coeff * (P - P_ref) + T_coeff * (T - T_ref) + epv_coeff * (epv - epv_ref), where P is the effective porepressure, T is the temperature and epv is the volumetric strain. More...

#include <PorousFlowPorosityLinear.h>

Inheritance diagram for PorousFlowPorosityLinear:
[legend]

Public Types

typedef DerivativeMaterialPropertyNameInterface::SymbolName SymbolName
 

Public Member Functions

 PorousFlowPorosityLinear (const InputParameters &parameters)
 
virtual void initialSetup () override
 
const GenericMaterialProperty< U, is_ad > & getDefaultMaterialProperty (const std::string &name)
 
const GenericMaterialProperty< U, is_ad > & getDefaultMaterialPropertyByName (const std::string &name)
 
void validateDerivativeMaterialPropertyBase (const std::string &base)
 
const MaterialPropertyName derivativePropertyName (const MaterialPropertyName &base, const std::vector< SymbolName > &c) const
 
const MaterialPropertyName derivativePropertyNameFirst (const MaterialPropertyName &base, const SymbolName &c1) const
 
const MaterialPropertyName derivativePropertyNameSecond (const MaterialPropertyName &base, const SymbolName &c1, const SymbolName &c2) const
 
const MaterialPropertyName derivativePropertyNameThird (const MaterialPropertyName &base, const SymbolName &c1, const SymbolName &c2, const SymbolName &c3) const
 
GenericMaterialProperty< U, is_ad > & declarePropertyDerivative (const std::string &base, const std::vector< VariableName > &c)
 
GenericMaterialProperty< U, is_ad > & declarePropertyDerivative (const std::string &base, const std::vector< SymbolName > &c)
 
GenericMaterialProperty< U, is_ad > & declarePropertyDerivative (const std::string &base, const SymbolName &c1, const SymbolName &c2="", const SymbolName &c3="")
 
GenericMaterialProperty< U, is_ad > & declarePropertyDerivative (const std::string &base, const std::vector< VariableName > &c)
 
GenericMaterialProperty< U, is_ad > & declarePropertyDerivative (const std::string &base, const std::vector< SymbolName > &c)
 
GenericMaterialProperty< U, is_ad > & declarePropertyDerivative (const std::string &base, const SymbolName &c1, const SymbolName &c2="", const SymbolName &c3="")
 
const GenericMaterialProperty< U, is_ad > & getMaterialPropertyDerivative (const std::string &base, const std::vector< VariableName > &c)
 
const GenericMaterialProperty< U, is_ad > & getMaterialPropertyDerivative (const std::string &base, const std::vector< SymbolName > &c)
 
const GenericMaterialProperty< U, is_ad > & getMaterialPropertyDerivative (const std::string &base, const SymbolName &c1, const SymbolName &c2="", const SymbolName &c3="")
 
const GenericMaterialProperty< U, is_ad > & getMaterialPropertyDerivative (const std::string &base, const SymbolName &c1, unsigned int v2, unsigned int v3=libMesh::invalid_uint)
 
const GenericMaterialProperty< U, is_ad > & getMaterialPropertyDerivative (const std::string &base, unsigned int v1, unsigned int v2=libMesh::invalid_uint, unsigned int v3=libMesh::invalid_uint)
 
const GenericMaterialProperty< U, is_ad > & getMaterialPropertyDerivative (const std::string &base, const std::vector< VariableName > &c)
 
const GenericMaterialProperty< U, is_ad > & getMaterialPropertyDerivative (const std::string &base, const std::vector< SymbolName > &c)
 
const GenericMaterialProperty< U, is_ad > & getMaterialPropertyDerivative (const std::string &base, const SymbolName &c1, const SymbolName &c2="", const SymbolName &c3="")
 
const GenericMaterialProperty< U, is_ad > & getMaterialPropertyDerivative (const std::string &base, const SymbolName &c1, unsigned int v2, unsigned int v3=libMesh::invalid_uint)
 
const GenericMaterialProperty< U, is_ad > & getMaterialPropertyDerivative (const std::string &base, unsigned int v1, unsigned int v2=libMesh::invalid_uint, unsigned int v3=libMesh::invalid_uint)
 
const GenericMaterialProperty< U, is_ad > & getMaterialPropertyDerivativeByName (const MaterialPropertyName &base, const std::vector< VariableName > &c)
 
const GenericMaterialProperty< U, is_ad > & getMaterialPropertyDerivativeByName (const MaterialPropertyName &base, const std::vector< SymbolName > &c)
 
const GenericMaterialProperty< U, is_ad > & getMaterialPropertyDerivativeByName (const MaterialPropertyName &base, const SymbolName &c1, const SymbolName &c2="", const SymbolName &c3="")
 
const GenericMaterialProperty< U, is_ad > & getMaterialPropertyDerivativeByName (const MaterialPropertyName &base, const std::vector< VariableName > &c)
 
const GenericMaterialProperty< U, is_ad > & getMaterialPropertyDerivativeByName (const MaterialPropertyName &base, const std::vector< SymbolName > &c)
 
const GenericMaterialProperty< U, is_ad > & getMaterialPropertyDerivativeByName (const MaterialPropertyName &base, const SymbolName &c1, const SymbolName &c2="", const SymbolName &c3="")
 
void validateCoupling (const MaterialPropertyName &base, const std::vector< VariableName > &c, bool validate_aux=true)
 
void validateCoupling (const MaterialPropertyName &base, const VariableName &c1="", const VariableName &c2="", const VariableName &c3="")
 
void validateCoupling (const MaterialPropertyName &base, const std::vector< VariableName > &c, bool validate_aux=true)
 
void validateCoupling (const MaterialPropertyName &base, const VariableName &c1="", const VariableName &c2="", const VariableName &c3="")
 
void validateNonlinearCoupling (const MaterialPropertyName &base, const VariableName &c1="", const VariableName &c2="", const VariableName &c3="")
 
void validateNonlinearCoupling (const MaterialPropertyName &base, const VariableName &c1="", const VariableName &c2="", const VariableName &c3="")
 
const MaterialPropertyName propertyName (const MaterialPropertyName &base, const std::vector< SymbolName > &c) const
 
const MaterialPropertyName propertyName (const MaterialPropertyName &base, const std::vector< SymbolName > &c) const
 
const MaterialPropertyName propertyNameFirst (const MaterialPropertyName &base, const SymbolName &c1) const
 
const MaterialPropertyName propertyNameFirst (const MaterialPropertyName &base, const SymbolName &c1) const
 
const MaterialPropertyName propertyNameSecond (const MaterialPropertyName &base, const SymbolName &c1, const SymbolName &c2) const
 
const MaterialPropertyName propertyNameSecond (const MaterialPropertyName &base, const SymbolName &c1, const SymbolName &c2) const
 
const MaterialPropertyName propertyNameThird (const MaterialPropertyName &base, const SymbolName &c1, const SymbolName &c2, const SymbolName &c3) const
 
const MaterialPropertyName propertyNameThird (const MaterialPropertyName &base, const SymbolName &c1, const SymbolName &c2, const SymbolName &c3) const
 

Static Public Member Functions

static InputParameters validParams ()
 

Protected Member Functions

virtual void initQpStatefulProperties () override
 
virtual void computeQpProperties () override
 

Protected Attributes

const bool _strain_at_nearest_qp
 When calculating nodal porosity, use the strain at the nearest quadpoint to the node. More...
 
const Real _porosity_min
 If the linear relationship produces porosity < _porosity_min, then porosity is set to _porosity_min. More...
 
const VariableValue_phi_ref
 Porosity at reference porepressure, temperature and volumetric strain. More...
 
const VariableValue_P_ref
 Reference effective porepressure. More...
 
const VariableValue_T_ref
 Reference temperature. More...
 
const VariableValue_epv_ref
 Reference volumetric strain. More...
 
const Real _P_coeff
 coefficient of effective porepressure More...
 
const Real _T_coeff
 coefficient of temperature More...
 
const Real _epv_coeff
 coefficient of volumetric strain More...
 
const bool _uses_volstrain
 whether epv_coeff has been set More...
 
const OptionalMaterialProperty< Real > & _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 OptionalMaterialProperty< std::vector< RealGradient > > & _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 bool _uses_pf
 whether P_coeff has been set More...
 
const OptionalMaterialProperty< Real > & _pf_nodal
 Effective porepressure at the quadpoints or nodes. More...
 
const OptionalMaterialProperty< Real > & _pf_qp
 
const MaterialProperty< Real > * _pf
 
const OptionalMaterialProperty< std::vector< Real > > & _dpf_dvar_nodal
 d(effective porepressure)/(d porflow variable) More...
 
const OptionalMaterialProperty< std::vector< Real > > & _dpf_dvar_qp
 
const MaterialProperty< std::vector< Real > > * _dpf_dvar
 
const bool _uses_T
 whether T_coeff has been set More...
 
const OptionalMaterialProperty< Real > & _temperature_nodal
 Temperature at the quadpoints or nodes. More...
 
const OptionalMaterialProperty< Real > & _temperature_qp
 
const MaterialProperty< Real > * _temperature
 
const OptionalMaterialProperty< std::vector< Real > > & _dtemperature_dvar_nodal
 d(temperature)/(d porflow variable) More...
 
const OptionalMaterialProperty< std::vector< Real > > & _dtemperature_dvar_qp
 
const MaterialProperty< std::vector< Real > > * _dtemperature_dvar
 
const Real _zero_modifier
 If the linear relationship produces porosity < _porosity_min, then porosity is set to _porosity_min. This means the derivatives of it will be zero. However, this gives poor NR convergence, so the derivatives are set to _zero_modifier * (values that are relevant for porosity_min) to hint to the NR that porosity is not always constant. 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

Material designed to provide the porosity in PorousFlow simulations porosity_ref + P_coeff * (P - P_ref) + T_coeff * (T - T_ref) + epv_coeff * (epv - epv_ref), where P is the effective porepressure, T is the temperature and epv is the volumetric strain.

Definition at line 19 of file PorousFlowPorosityLinear.h.

Constructor & Destructor Documentation

◆ PorousFlowPorosityLinear()

PorousFlowPorosityLinear::PorousFlowPorosityLinear ( const InputParameters parameters)

Definition at line 68 of file PorousFlowPorosityLinear.C.

69  : PorousFlowPorosityBase(parameters),
70  _strain_at_nearest_qp(getParam<bool>("strain_at_nearest_qp")),
71  _porosity_min(getParam<Real>("porosity_min")),
72  _phi_ref(coupledValue("porosity_ref")),
73  _P_ref(_nodal_material ? coupledDofValues("P_ref") : coupledValue("P_ref")),
74  _T_ref(_nodal_material ? coupledDofValues("T_ref") : coupledValue("T_ref")),
75  _epv_ref(coupledValue("epv_ref")),
76  _P_coeff(getParam<Real>("P_coeff")),
77  _T_coeff(getParam<Real>("T_coeff")),
78  _epv_coeff(getParam<Real>("epv_coeff")),
79 
80  _uses_volstrain(parameters.isParamSetByUser("epv_coeff") && _epv_coeff != 0.0),
81  _vol_strain_qp(getOptionalMaterialProperty<Real>("PorousFlow_total_volumetric_strain_qp")),
82  _dvol_strain_qp_dvar(getOptionalMaterialProperty<std::vector<RealGradient>>(
83  "dPorousFlow_total_volumetric_strain_qp_dvar")),
84 
85  _uses_pf(parameters.isParamSetByUser("P_coeff") && _P_coeff != 0.0),
86  _pf_nodal(getOptionalMaterialProperty<Real>("PorousFlow_effective_fluid_pressure_nodal")),
87  _pf_qp(getOptionalMaterialProperty<Real>("PorousFlow_effective_fluid_pressure_qp")),
88  _dpf_dvar_nodal(getOptionalMaterialProperty<std::vector<Real>>(
89  "dPorousFlow_effective_fluid_pressure_nodal_dvar")),
90  _dpf_dvar_qp(getOptionalMaterialProperty<std::vector<Real>>(
91  "dPorousFlow_effective_fluid_pressure_qp_dvar")),
92 
93  _uses_T(parameters.isParamSetByUser("T_coeff") && _T_coeff != 0.0),
94  _temperature_nodal(getOptionalMaterialProperty<Real>("PorousFlow_temperature_nodal")),
95  _temperature_qp(getOptionalMaterialProperty<Real>("PorousFlow_temperature_qp")),
97  getOptionalMaterialProperty<std::vector<Real>>("dPorousFlow_temperature_nodal_dvar")),
99  getOptionalMaterialProperty<std::vector<Real>>("dPorousFlow_temperature_qp_dvar")),
100  _zero_modifier(getParam<Real>("zero_modifier"))
101 {
102 }
const bool _strain_at_nearest_qp
When calculating nodal porosity, use the strain at the nearest quadpoint to the node.
const OptionalMaterialProperty< Real > & _temperature_nodal
Temperature at the quadpoints or nodes.
const VariableValue & _T_ref
Reference temperature.
const OptionalMaterialProperty< std::vector< Real > > & _dpf_dvar_nodal
d(effective porepressure)/(d porflow variable)
const Real _P_coeff
coefficient of effective porepressure
const Real _T_coeff
coefficient of temperature
const VariableValue & _epv_ref
Reference volumetric strain.
const OptionalMaterialProperty< Real > & _vol_strain_qp
Strain (first const means we never want to dereference and change the value, second means we&#39;ll alway...
const OptionalMaterialProperty< std::vector< Real > > & _dtemperature_dvar_qp
const OptionalMaterialProperty< Real > & _pf_qp
const bool _uses_pf
whether P_coeff has been set
const OptionalMaterialProperty< std::vector< Real > > & _dpf_dvar_qp
const bool _uses_T
whether T_coeff has been set
const Real _epv_coeff
coefficient of volumetric strain
const bool _uses_volstrain
whether epv_coeff has been set
const Real _porosity_min
If the linear relationship produces porosity < _porosity_min, then porosity is set to _porosity_min...
bool isParamSetByUser(const std::string &name) const
const Real _zero_modifier
If the linear relationship produces porosity < _porosity_min, then porosity is set to _porosity_min...
const VariableValue & _P_ref
Reference effective porepressure.
const VariableValue & _phi_ref
Porosity at reference porepressure, temperature and volumetric strain.
const OptionalMaterialProperty< Real > & _pf_nodal
Effective porepressure at the quadpoints or nodes.
const OptionalMaterialProperty< std::vector< Real > > & _dtemperature_dvar_nodal
d(temperature)/(d porflow variable)
PorousFlowPorosityBaseTempl< false > PorousFlowPorosityBase
const OptionalMaterialProperty< std::vector< RealGradient > > & _dvol_strain_qp_dvar
d(strain)/(dvar) (first const means we never want to dereference and change the value, second means we&#39;ll always be pointing to the same address after initialization (like a reference))
const OptionalMaterialProperty< Real > & _temperature_qp

Member Function Documentation

◆ computeQpProperties()

void PorousFlowPorosityLinear::computeQpProperties ( )
overrideprotectedvirtual

Definition at line 138 of file PorousFlowPorosityLinear.C.

139 {
140  // note the [0] below: _phi_ref is a constant monomial and we use [0] regardless of
141  // _nodal_material
142  Real porosity = _phi_ref[0];
143  if (_uses_pf)
144  porosity += _P_coeff * ((*_pf)[_qp] - _P_ref[_qp]);
145  if (_uses_T)
146  porosity += _T_coeff * ((*_temperature)[_qp] - _T_ref[_qp]);
147  if (_uses_volstrain)
148  {
149  // Note that in the following _strain[_qp] is evaluated at q quadpoint
150  // So _porosity_nodal[_qp], which should be the nodal value of porosity
151  // actually uses the strain at a quadpoint. This
152  // is OK for LINEAR elements, as strain is constant over the element anyway.
153  const unsigned qp_to_use =
154  (_nodal_material && (_bnd || _strain_at_nearest_qp) ? nearestQP(_qp) : _qp);
155  porosity += _epv_coeff * (_vol_strain_qp[qp_to_use] - _epv_ref[0]);
156  }
157 
158  if (porosity < _porosity_min)
159  _porosity[_qp] = _porosity_min;
160  else
161  _porosity[_qp] = porosity;
162 
163  (*_dporosity_dvar)[_qp].resize(_num_var);
164  (*_dporosity_dgradvar)[_qp].resize(_num_var);
165  for (unsigned int pvar = 0; pvar < _num_var; ++pvar)
166  {
167  Real deriv = 0.0;
168  if (_uses_pf)
169  deriv += _P_coeff * (*_dpf_dvar)[_qp][pvar];
170  if (_uses_T)
171  deriv += _T_coeff * (*_dtemperature_dvar)[_qp][pvar];
172  if (porosity < _porosity_min)
173  (*_dporosity_dvar)[_qp][pvar] = _zero_modifier * deriv;
174  else
175  (*_dporosity_dvar)[_qp][pvar] = deriv;
176 
177  RealGradient deriv_grad(0.0, 0.0, 0.0);
178  if (_uses_volstrain)
179  {
180  const unsigned qp_to_use =
181  (_nodal_material && (_bnd || _strain_at_nearest_qp) ? nearestQP(_qp) : _qp);
182  deriv_grad += _epv_coeff * _dvol_strain_qp_dvar[qp_to_use][pvar];
183  }
184  if (porosity < _porosity_min)
185  (*_dporosity_dgradvar)[_qp][pvar] = _zero_modifier * deriv_grad;
186  else
187  (*_dporosity_dgradvar)[_qp][pvar] = deriv_grad;
188  }
189 }
const bool _strain_at_nearest_qp
When calculating nodal porosity, use the strain at the nearest quadpoint to the node.
const VariableValue & _T_ref
Reference temperature.
MaterialProperty< std::vector< RealGradient > > *const _dporosity_dgradvar
d(porosity)/d(grad PorousFlow variable)
const Real _P_coeff
coefficient of effective porepressure
const Real _T_coeff
coefficient of temperature
const VariableValue & _epv_ref
Reference volumetric strain.
const OptionalMaterialProperty< Real > & _vol_strain_qp
Strain (first const means we never want to dereference and change the value, second means we&#39;ll alway...
static const std::string porosity
Definition: NS.h:104
Real deriv(unsigned n, unsigned alpha, unsigned beta, Real x)
const bool _uses_pf
whether P_coeff has been set
const unsigned int _num_var
Number of PorousFlow variables.
const bool _uses_T
whether T_coeff has been set
const Real _epv_coeff
coefficient of volumetric strain
const bool _uses_volstrain
whether epv_coeff has been set
MaterialProperty< std::vector< Real > > *const _dporosity_dvar
d(porosity)/d(PorousFlow variable)
const Real _porosity_min
If the linear relationship produces porosity < _porosity_min, then porosity is set to _porosity_min...
GenericMaterialProperty< Real, is_ad > & _porosity
Computed porosity at the nodes or quadpoints.
DIE A HORRIBLE DEATH HERE typedef LIBMESH_DEFAULT_SCALAR_TYPE Real
const Real _zero_modifier
If the linear relationship produces porosity < _porosity_min, then porosity is set to _porosity_min...
const VariableValue & _P_ref
Reference effective porepressure.
const VariableValue & _phi_ref
Porosity at reference porepressure, temperature and volumetric strain.
const OptionalMaterialProperty< std::vector< RealGradient > > & _dvol_strain_qp_dvar
d(strain)/(dvar) (first const means we never want to dereference and change the value, second means we&#39;ll always be pointing to the same address after initialization (like a reference))

◆ initialSetup()

void PorousFlowPorosityLinear::initialSetup ( )
overridevirtual

Definition at line 105 of file PorousFlowPorosityLinear.C.

106 {
107  _pf = _nodal_material ? _pf_nodal.get() : _pf_qp.get();
108  _dpf_dvar = _nodal_material ? _dpf_dvar_nodal.get() : _dpf_dvar_qp.get();
109  if (!(_pf && _dpf_dvar) && _uses_pf)
110  {
111  mooseError("PorousFlowPorosityLinear: When P_coeff is given you must have an effective fluid "
112  "pressure Material");
113  }
114 
115  _temperature = _nodal_material ? _temperature_nodal.get() : _temperature_qp.get();
117  _nodal_material ? _dtemperature_dvar_nodal.get() : _dtemperature_dvar_qp.get();
118  if (!_temperature && _uses_T)
119  mooseError(
120  "PorousFlowPorosityLinear: When T_coeff is given you must have a temperature Material");
121 
123  mooseError("PorousFlowPorosityLinear: When epv_coeff is given you must have a "
124  "volumetric-strain Material");
125 
126  PorousFlowPorosityBase::initialSetup();
127 }
const OptionalMaterialProperty< Real > & _temperature_nodal
Temperature at the quadpoints or nodes.
void mooseError(Args &&... args)
const OptionalMaterialProperty< std::vector< Real > > & _dpf_dvar_nodal
d(effective porepressure)/(d porflow variable)
const OptionalMaterialProperty< Real > & _vol_strain_qp
Strain (first const means we never want to dereference and change the value, second means we&#39;ll alway...
const MaterialProperty< std::vector< Real > > * _dtemperature_dvar
const OptionalMaterialProperty< std::vector< Real > > & _dtemperature_dvar_qp
const OptionalMaterialProperty< Real > & _pf_qp
const bool _uses_pf
whether P_coeff has been set
const OptionalMaterialProperty< std::vector< Real > > & _dpf_dvar_qp
const MaterialProperty< Real > * _temperature
const bool _uses_T
whether T_coeff has been set
const bool _uses_volstrain
whether epv_coeff has been set
const MaterialProperty< std::vector< Real > > * _dpf_dvar
const OptionalMaterialProperty< Real > & _pf_nodal
Effective porepressure at the quadpoints or nodes.
const OptionalMaterialProperty< std::vector< Real > > & _dtemperature_dvar_nodal
d(temperature)/(d porflow variable)
const OptionalMaterialProperty< std::vector< RealGradient > > & _dvol_strain_qp_dvar
d(strain)/(dvar) (first const means we never want to dereference and change the value, second means we&#39;ll always be pointing to the same address after initialization (like a reference))
const MaterialProperty< Real > * _pf
const OptionalMaterialProperty< Real > & _temperature_qp

◆ initQpStatefulProperties()

void PorousFlowPorosityLinear::initQpStatefulProperties ( )
overrideprotectedvirtual

Definition at line 130 of file PorousFlowPorosityLinear.C.

131 {
132  _porosity[_qp] = _phi_ref[0];
133  (*_dporosity_dvar)[_qp].assign(_num_var, 0.0);
134  (*_dporosity_dgradvar)[_qp].assign(_num_var, 0.0);
135 }
const unsigned int _num_var
Number of PorousFlow variables.
GenericMaterialProperty< Real, is_ad > & _porosity
Computed porosity at the nodes or quadpoints.
const VariableValue & _phi_ref
Porosity at reference porepressure, temperature and volumetric strain.

◆ validParams()

InputParameters PorousFlowPorosityLinear::validParams ( )
static

Definition at line 15 of file PorousFlowPorosityLinear.C.

16 {
18  params.addParam<bool>("strain_at_nearest_qp",
19  false,
20  "When calculating nodal porosity that depends on strain, use the strain at "
21  "the nearest quadpoint. This adds a small extra computational burden, and "
22  "is not necessary for simulations involving only linear lagrange elements. "
23  " If you set this to true, you will also want to set the same parameter to "
24  "true for related Kernels and Materials");
25  params.addRequiredCoupledVar(
26  "porosity_ref",
27  "The porosity at reference effective porepressure, temperature and volumetric strain. This "
28  "must be a real number or a constant monomial variable (not a linear lagrange or other type "
29  "of variable)");
30  params.addCoupledVar(
31  "P_ref",
32  0.0,
33  "The reference effective porepressure. This should usually be a linear-lagrange variable");
34  params.addCoupledVar(
35  "T_ref",
36  0.0,
37  "The reference temperature. This should usually be a linear-lagrange variable");
38  params.addCoupledVar("epv_ref",
39  0.0,
40  "The reference volumetric strain. This must be a real number or a constant "
41  "monomial variable (not a linear lagrange or other type of variable)");
42  params.addParam<Real>("P_coeff", 0.0, "Effective porepressure coefficient");
43  params.addParam<Real>("T_coeff", 0.0, "Temperature coefficient");
44  params.addParam<Real>("epv_coeff", 0.0, "Volumetric-strain coefficient");
45  params.addRangeCheckedParam<Real>(
46  "porosity_min",
47  0.0,
48  "porosity_min >= 0",
49  "Minimum allowed value of the porosity: if the linear relationship gives "
50  "values less than this value, then porosity is set to this value instead");
51  params.addParam<Real>(
52  "zero_modifier",
53  1E-3,
54  "If the linear relationship produces porosity < porosity_min, then porosity is set "
55  "porosity_min. This means the derivatives of it will be zero. However, these zero "
56  "derivatives often result in poor NR convergence, so the derivatives are set to "
57  "_zero_modifier * (values that are relevant for min porosity) to hint to the NR that "
58  "porosity is not always constant");
59  params.addParamNamesToGroup("zero_modifier", "Advanced");
60  params.addClassDescription(
61  "This Material calculates the porosity in PorousFlow simulations using the relationship "
62  "porosity_ref + P_coeff * (P - P_ref) + T_coeff * (T - T_ref) + epv_coeff * (epv - epv_ref), "
63  "where P is the effective porepressure, T is the temperature and epv is the volumetric "
64  "strain");
65  return params;
66 }
void addParam(const std::string &name, const std::initializer_list< typename T::value_type > &value, const std::string &doc_string)
static InputParameters validParams()
void addCoupledVar(const std::string &name, const std::string &doc_string)
void addRequiredCoupledVar(const std::string &name, const std::string &doc_string)
DIE A HORRIBLE DEATH HERE typedef LIBMESH_DEFAULT_SCALAR_TYPE Real
void addClassDescription(const std::string &doc_string)
void addRangeCheckedParam(const std::string &name, const T &value, const std::string &parsed_function, const std::string &doc_string)
void addParamNamesToGroup(const std::string &space_delim_names, const std::string group_name)

Member Data Documentation

◆ _dpf_dvar

const MaterialProperty<std::vector<Real> >* PorousFlowPorosityLinear::_dpf_dvar
protected

Definition at line 79 of file PorousFlowPorosityLinear.h.

Referenced by initialSetup().

◆ _dpf_dvar_nodal

const OptionalMaterialProperty<std::vector<Real> >& PorousFlowPorosityLinear::_dpf_dvar_nodal
protected

d(effective porepressure)/(d porflow variable)

Definition at line 77 of file PorousFlowPorosityLinear.h.

Referenced by initialSetup().

◆ _dpf_dvar_qp

const OptionalMaterialProperty<std::vector<Real> >& PorousFlowPorosityLinear::_dpf_dvar_qp
protected

Definition at line 78 of file PorousFlowPorosityLinear.h.

Referenced by initialSetup().

◆ _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 computeQpProperties(), and PorousFlowPorosityHMBiotModulus::computeQpProperties().

◆ _dporosity_dvar

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

d(porosity)/d(PorousFlow variable)

Definition at line 30 of file PorousFlowPorosityBase.h.

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

◆ _dtemperature_dvar

const MaterialProperty<std::vector<Real> >* PorousFlowPorosityLinear::_dtemperature_dvar
protected

Definition at line 92 of file PorousFlowPorosityLinear.h.

Referenced by initialSetup().

◆ _dtemperature_dvar_nodal

const OptionalMaterialProperty<std::vector<Real> >& PorousFlowPorosityLinear::_dtemperature_dvar_nodal
protected

d(temperature)/(d porflow variable)

Definition at line 90 of file PorousFlowPorosityLinear.h.

Referenced by initialSetup().

◆ _dtemperature_dvar_qp

const OptionalMaterialProperty<std::vector<Real> >& PorousFlowPorosityLinear::_dtemperature_dvar_qp
protected

Definition at line 91 of file PorousFlowPorosityLinear.h.

Referenced by initialSetup().

◆ _dvol_strain_qp_dvar

const OptionalMaterialProperty<std::vector<RealGradient> >& PorousFlowPorosityLinear::_dvol_strain_qp_dvar
protected

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 66 of file PorousFlowPorosityLinear.h.

Referenced by computeQpProperties(), and initialSetup().

◆ _epv_coeff

const Real PorousFlowPorosityLinear::_epv_coeff
protected

coefficient of volumetric strain

Definition at line 57 of file PorousFlowPorosityLinear.h.

Referenced by computeQpProperties().

◆ _epv_ref

const VariableValue& PorousFlowPorosityLinear::_epv_ref
protected

Reference volumetric strain.

Definition at line 48 of file PorousFlowPorosityLinear.h.

Referenced by computeQpProperties().

◆ _num_components

const unsigned int PorousFlowMaterialVectorBase::_num_components
protectedinherited

◆ _num_phases

const unsigned int PorousFlowMaterialVectorBase::_num_phases
protectedinherited

◆ _num_var

const unsigned int PorousFlowMaterialVectorBase::_num_var
protectedinherited

◆ _P_coeff

const Real PorousFlowPorosityLinear::_P_coeff
protected

coefficient of effective porepressure

Definition at line 51 of file PorousFlowPorosityLinear.h.

Referenced by computeQpProperties().

◆ _P_ref

const VariableValue& PorousFlowPorosityLinear::_P_ref
protected

Reference effective porepressure.

Definition at line 42 of file PorousFlowPorosityLinear.h.

Referenced by computeQpProperties().

◆ _pf

const MaterialProperty<Real>* PorousFlowPorosityLinear::_pf
protected

Definition at line 74 of file PorousFlowPorosityLinear.h.

Referenced by initialSetup().

◆ _pf_nodal

const OptionalMaterialProperty<Real>& PorousFlowPorosityLinear::_pf_nodal
protected

Effective porepressure at the quadpoints or nodes.

Definition at line 72 of file PorousFlowPorosityLinear.h.

Referenced by initialSetup().

◆ _pf_qp

const OptionalMaterialProperty<Real>& PorousFlowPorosityLinear::_pf_qp
protected

Definition at line 73 of file PorousFlowPorosityLinear.h.

Referenced by initialSetup().

◆ _phi_ref

const VariableValue& PorousFlowPorosityLinear::_phi_ref
protected

Porosity at reference porepressure, temperature and volumetric strain.

Definition at line 39 of file PorousFlowPorosityLinear.h.

Referenced by computeQpProperties(), and initQpStatefulProperties().

◆ _porosity

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

◆ _porosity_min

const Real PorousFlowPorosityLinear::_porosity_min
protected

If the linear relationship produces porosity < _porosity_min, then porosity is set to _porosity_min.

Definition at line 36 of file PorousFlowPorosityLinear.h.

Referenced by computeQpProperties().

◆ _strain_at_nearest_qp

const bool PorousFlowPorosityLinear::_strain_at_nearest_qp
protected

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

Definition at line 33 of file PorousFlowPorosityLinear.h.

Referenced by computeQpProperties().

◆ _T_coeff

const Real PorousFlowPorosityLinear::_T_coeff
protected

coefficient of temperature

Definition at line 54 of file PorousFlowPorosityLinear.h.

Referenced by computeQpProperties().

◆ _T_ref

const VariableValue& PorousFlowPorosityLinear::_T_ref
protected

Reference temperature.

Definition at line 45 of file PorousFlowPorosityLinear.h.

Referenced by computeQpProperties().

◆ _temperature

const MaterialProperty<Real>* PorousFlowPorosityLinear::_temperature
protected

Definition at line 87 of file PorousFlowPorosityLinear.h.

Referenced by initialSetup().

◆ _temperature_nodal

const OptionalMaterialProperty<Real>& PorousFlowPorosityLinear::_temperature_nodal
protected

Temperature at the quadpoints or nodes.

Definition at line 85 of file PorousFlowPorosityLinear.h.

Referenced by initialSetup().

◆ _temperature_qp

const OptionalMaterialProperty<Real>& PorousFlowPorosityLinear::_temperature_qp
protected

Definition at line 86 of file PorousFlowPorosityLinear.h.

Referenced by initialSetup().

◆ _uses_pf

const bool PorousFlowPorosityLinear::_uses_pf
protected

whether P_coeff has been set

Definition at line 69 of file PorousFlowPorosityLinear.h.

Referenced by computeQpProperties(), and initialSetup().

◆ _uses_T

const bool PorousFlowPorosityLinear::_uses_T
protected

whether T_coeff has been set

Definition at line 82 of file PorousFlowPorosityLinear.h.

Referenced by computeQpProperties(), and initialSetup().

◆ _uses_volstrain

const bool PorousFlowPorosityLinear::_uses_volstrain
protected

whether epv_coeff has been set

Definition at line 60 of file PorousFlowPorosityLinear.h.

Referenced by computeQpProperties(), and initialSetup().

◆ _vol_strain_qp

const OptionalMaterialProperty<Real>& PorousFlowPorosityLinear::_vol_strain_qp
protected

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 63 of file PorousFlowPorosityLinear.h.

Referenced by computeQpProperties(), and initialSetup().

◆ _zero_modifier

const Real PorousFlowPorosityLinear::_zero_modifier
protected

If the linear relationship produces porosity < _porosity_min, then porosity is set to _porosity_min. This means the derivatives of it will be zero. However, this gives poor NR convergence, so the derivatives are set to _zero_modifier * (values that are relevant for porosity_min) to hint to the NR that porosity is not always constant.

Definition at line 95 of file PorousFlowPorosityLinear.h.

Referenced by computeQpProperties().


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