https://mooseframework.inl.gov
PorousFlowHystereticCapillaryPressure.h
Go to the documentation of this file.
1 //* This file is part of the MOOSE framework
2 //* https://mooseframework.inl.gov
3 //*
4 //* All rights reserved, see COPYRIGHT for full restrictions
5 //* https://github.com/idaholab/moose/blob/master/COPYRIGHT
6 //*
7 //* Licensed under LGPL 2.1, please see LICENSE for details
8 //* https://www.gnu.org/licenses/lgpl-2.1.html
9 
10 #pragma once
11 
12 #include "PorousFlowVariableBase.h"
13 #include "PorousFlowConstants.h"
14 #include "PorousFlowVanGenuchten.h"
15 
21 {
22 public:
24 
26 
27 protected:
28  virtual void initQpStatefulProperties() override;
29  virtual void computeQpProperties() override;
30 
36  Real landSat(Real slDel) const;
37 
45  void computeTurningPointInfo(unsigned tp_num, Real tp_sat, Real tp_pc);
46 
52  Real capillaryPressureQp(Real sat) const;
53 
58  Real dcapillaryPressureQp(Real sat) const;
59 
64  Real d2capillaryPressureQp(Real sat) const;
65 
71  Real liquidSaturationQp(Real pc) const;
72 
77  Real dliquidSaturationQp(Real pc) const;
78 
83  Real d2liquidSaturationQp(Real pc) const;
84 
86  const Real _alpha_d;
88  const Real _alpha_w;
90  const Real _n_d;
92  const Real _n_w;
94  const Real _s_l_min;
96  const Real _s_lr;
98  const Real _s_gr_max;
100  const Real _pc_max;
106  const Real _s_low_d;
112  const Real _s_low_w;
120  const Real _s_high;
122  const Real _pc_high;
127 
130 
133 
137 
140 
143 
146 
149 
153 
157 
160 
161 private:
166  Real firstOrderWettingPc(Real sat) const;
167 
172  Real dfirstOrderWettingPc(Real sat) const;
173 
178  Real d2firstOrderWettingPc(Real sat) const;
179 
184  Real secondOrderDryingPc(Real sat) const;
185 
190  Real dsecondOrderDryingPc(Real sat) const;
191 
196  Real d2secondOrderDryingPc(Real sat) const;
197 
202  Real firstOrderWettingSat(Real pc) const;
203 
208  Real dfirstOrderWettingSat(Real pc) const;
209 
214  Real d2firstOrderWettingSat(Real pc) const;
215 
220  Real secondOrderDryingSat(Real pc) const;
221 
226  Real dsecondOrderDryingSat(Real pc) const;
227 
232  Real d2secondOrderDryingSat(Real pc) const;
233 };
const MaterialProperty< Real > & _pc_older
Older value of capillary pressure.
const Real _s_gr_max
Residual gas saturation: 1 - _s_gr_max is the maximum saturation for which the van Genuchten expressi...
MaterialProperty< std::array< PorousFlowVanGenuchten::LowCapillaryPressureExtension, PorousFlowConstants::MAX_HYSTERESIS_ORDER > > & _w_low_ext_tps
Nodal or quadpoint values of the low extension of the wetting curve defined by _s_gr_tps.
MaterialProperty< std::array< PorousFlowVanGenuchten::HighCapillaryPressureExtension, PorousFlowConstants::MAX_HYSTERESIS_ORDER > > & _w_high_ext_tps
Nodal or quadpoint values of the high extension of the wetting curve defined by _s_gr_tps.
const Real _dpc_low_w
d(Pc)/dS on the primary wetting curve at S = _s_low_w
const PorousFlowVanGenuchten::LowCapillaryPressureExtension::ExtensionStrategy _low_ext_type
Type of low-saturation extension.
const MaterialProperty< unsigned > & _hys_order
Hysteresis order, as computed by PorousFlowHysteresisOrder.
const Real _high_ratio
The high-saturation extension to the wetting will commence at _high_ratio * (1 - _s_gr_del) ...
const PorousFlowVanGenuchten::LowCapillaryPressureExtension _low_ext_w
Parameters involved in the low-saturation extension of the primary wetting curve. ...
const Real _pc_max
Maximum capillary pressure: for Pc above this value, a "lower" extension will be used.
Parameters associated with the extension of the hysteretic wetting capillary pressure function to hig...
const PorousFlowVanGenuchten::HighCapillaryPressureExtension _high_ext
Parameters involved in the high-saturation extension of the primary wetting curve.
const Real _s_lr
Liquid saturation below which the liquid relative permeability is zero.
const PorousFlowVanGenuchten::HighCapillaryPressureExtension::ExtensionStrategy _high_ext_type
Type of high-saturation extension of the wetting curves.
void computeTurningPointInfo(unsigned tp_num, Real tp_sat, Real tp_pc)
Compute all relevant quantities at the given turning point.
const Real _alpha_d
van Genuchten alpha parameter for the primary drying curve
const Real _s_high
Saturation at the point of high-saturation extension.
const Real _n_d
van Genuchten n parameter for the primary drying curve
PorousFlowHystereticCapillaryPressure(const InputParameters &parameters)
constexpr unsigned MAX_HYSTERESIS_ORDER
const MaterialProperty< std::array< Real, PorousFlowConstants::MAX_HYSTERESIS_ORDER > > & _hys_sat_tps
Saturation values at the turning points, as computed by PorousFlowHysteresisOrder.
Parameters associated with the extension of the hysteretic capillary pressure function to low saturat...
const Real _s_low_d
Saturation on the primary drying curve where low-saturation extension commences.
const Real _pc_high
Pc at the point of high-saturation extension.
Base class for thermophysical variable materials, which assemble materials for primary variables such...
const Real _alpha_w
van Genuchten alpha parameter for the primary wetting curve
Base material designed to calculate and store quantities relevant for hysteretic capillary pressure c...
MaterialProperty< std::array< Real, PorousFlowConstants::MAX_HYSTERESIS_ORDER > > & _pc_tps
Nodal or quadpoint values of Pc at the turning points.
const Real _n_w
van Genuchten n parameter for the primary wetting curve
const Real _dpc_high
d(Pc)/d(S) at the point of high-saturation extension
const Real _dpc_low_d
d(Pc)/dS on the primary drying curve at S = _s_low_d
DIE A HORRIBLE DEATH HERE typedef LIBMESH_DEFAULT_SCALAR_TYPE Real
const PorousFlowVanGenuchten::LowCapillaryPressureExtension _low_ext_d
Parameters involved in the low-saturation extension of the primary drying curve.
const Real _s_low_w
Saturation on the primary wetting curve where low-saturation extension commences. ...
MaterialProperty< std::array< Real, PorousFlowConstants::MAX_HYSTERESIS_ORDER > > & _s_gr_tps
Computed nodal or quadpoint values of S_gr_Del, ie, the Land expression, at the turning points...
MaterialProperty< std::array< Real, PorousFlowConstants::MAX_HYSTERESIS_ORDER > > & _s_w_tps
Computed nodal or quadpoint values of liquid saturation on the wetting curve defined by _s_gr_del...
const Real _s_l_min
Minimum liquid saturation for which the van Genuchten expression is valid (Pc(_s_l_min) = infinity) ...
MaterialProperty< std::array< Real, PorousFlowConstants::MAX_HYSTERESIS_ORDER > > & _s_d_tps
Computed nodal or quadpoint values of saturation on the drying curve at _pc_tps.
const MaterialProperty< unsigned > & _hys_order_old
Old value of hysteresis order, as computed by PorousFlowHysteresisOrder.