Go to the documentation of this file.
17 params.addParam<
bool>(
"strain_at_nearest_qp",
19 "When calculating nodal porosity that depends on strain, use the strain at "
20 "the nearest quadpoint. This adds a small extra computational burden, and "
21 "is not necessary for simulations involving only linear lagrange elements. "
22 " If you set this to true, you will also want to set the same parameter to "
23 "true for related Kernels and Materials");
24 params.addParam<
bool>(
"ensure_positive",
26 "Modify the usual exponential relationships that "
27 "governs porosity so that porosity is always "
29 params.addClassDescription(
"Base class Material for porosity that is computed via an exponential "
30 "relationship with coupled variables (strain, porepressure, "
31 "temperature, chemistry)");
36 const InputParameters & parameters)
38 _strain_at_nearest_qp(getParam<bool>(
"strain_at_nearest_qp")),
39 _ensure_positive(getParam<bool>(
"ensure_positive"))
48 mooseAssert(a > b,
"PorousFlowPorosityExponentialBase a must be larger than b");
52 _porosity[_qp] = a + (b - a) * std::exp(decay);
55 const Real c = std::log(a / (a - b));
56 const Real expx = std::exp(-decay / c);
57 _porosity[_qp] = a + (b - a) * std::exp(c * (1.0 - expx));
72 exp_term = std::exp(decay);
78 const Real c = std::log(a / (a - b));
79 const Real expx = std::exp(-decay / c);
82 exp_term = std::exp(c * (1.0 - expx));
89 for (
unsigned int v = 0; v <
_num_var; ++v)
100 const Real c = std::log(a / (a - b));
101 const Real expx = std::exp(-decay / c);
102 const Real dc = (a - b) * (da * b / a - db) /
std::pow(a, 2);
103 _dporosity_dvar[_qp][v] += (b - a) * exp_term * dc * (1 - expx - expx / c);
PorousFlowPorosityExponentialBase(const InputParameters ¶meters)
virtual Real atZeroQp() const =0
Returns "b" at the quadpoint (porosity = a + (b - a) * exp(decay))
virtual void initQpStatefulProperties() override
virtual Real datNegInfinityQp(unsigned pvar) const =0
d(a)/d(PorousFlow variable pvar)
virtual void computeQpProperties() override
InputParameters validParams< PorousFlowPorosityBase >()
ExpressionBuilder::EBTerm pow(const ExpressionBuilder::EBTerm &left, T exponent)
MaterialProperty< Real > & _porosity
Computed porosity at the nodes or quadpoints.
MaterialProperty< std::vector< Real > > & _dporosity_dvar
d(porosity)/d(PorousFlow variable)
virtual Real atNegInfinityQp() const =0
Returns "a" at the quadpoint (porosity = a + (b - a) * exp(decay))
virtual Real datZeroQp(unsigned pvar) const =0
d(a)/d(PorousFlow variable pvar)
Base class Material designed to provide the porosity.
const bool _ensure_positive
for decayQp() > 0, porosity can be negative when using porosity = a + (b - a) * exp(decay).
InputParameters validParams< PorousFlowPorosityExponentialBase >()
virtual Real decayQp() const =0
Returns "decay" at the quadpoint (porosity = a + (b - a) * exp(decay))
const unsigned int _num_var
Number of PorousFlow variables.
virtual RealGradient ddecayQp_dgradvar(unsigned pvar) const =0
d(decay)/d(grad(PorousFlow variable pvar))
virtual Real ddecayQp_dvar(unsigned pvar) const =0
d(decay)/d(PorousFlow variable pvar)
MaterialProperty< std::vector< RealGradient > > & _dporosity_dgradvar
d(porosity)/d(grad PorousFlow variable)