https://mooseframework.inl.gov
Public Types | Public Member Functions | Static Public Member Functions | Protected Member Functions | Protected Attributes | List of all members
PorousFlowRelativePermeabilityBaseTempl< is_ad > Class Template Referenceabstract

Base class for PorousFlow relative permeability materials. More...

#include <PorousFlowRelativePermeabilityBase.h>

Inheritance diagram for PorousFlowRelativePermeabilityBaseTempl< is_ad >:
[legend]

Public Types

typedef DerivativeMaterialPropertyNameInterface::SymbolName SymbolName
 

Public Member Functions

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

Static Public Member Functions

static InputParameters validParams ()
 

Protected Member Functions

virtual void computeQpProperties () override
 
virtual GenericReal< is_ad > effectiveSaturation (GenericReal< is_ad > saturation) const
 Effective saturation of fluid phase. More...
 
virtual GenericReal< is_ad > relativePermeability (GenericReal< is_ad > seff) const =0
 Relative permeability equation (must be overriden in derived class) More...
 
virtual Real dRelativePermeability (Real seff) const =0
 Derivative of relative permeability with respect to effective saturation. More...
 

Protected Attributes

const Real _scaling
 Relative permeability is multiplied by this quantity. More...
 
const GenericMaterialProperty< std::vector< Real >, is_ad > & _saturation
 Saturation material property. More...
 
GenericMaterialProperty< Real, is_ad > & _relative_permeability
 Relative permeability material property. More...
 
MaterialProperty< Real > *const _drelative_permeability_ds
 Derivative of relative permeability wrt phase saturation. More...
 
const Real _s_res
 Residual saturation of specified phase. More...
 
const Real _sum_s_res
 Sum of residual saturations over all phases. More...
 
const Real _dseff_ds
 Derivative of effective saturation with respect to saturation. More...
 
const unsigned int _phase_num
 Phase number of fluid. More...
 
const std::string _phase
 Stringified fluid phase number. More...
 

Detailed Description

template<bool is_ad>
class PorousFlowRelativePermeabilityBaseTempl< is_ad >

Base class for PorousFlow relative permeability materials.

All materials that derive from this class must override relativePermeability() and dRelativePermeability()

Definition at line 20 of file PorousFlowRelativePermeabilityBase.h.

Constructor & Destructor Documentation

◆ PorousFlowRelativePermeabilityBaseTempl()

Definition at line 36 of file PorousFlowRelativePermeabilityBase.C.

38  : PorousFlowMaterialBase(parameters),
39  _scaling(getParam<Real>("scaling")),
41  _nodal_material
42  ? getGenericMaterialProperty<std::vector<Real>, is_ad>("PorousFlow_saturation_nodal")
43  : getGenericMaterialProperty<std::vector<Real>, is_ad>("PorousFlow_saturation_qp")),
45  _nodal_material
46  ? declareGenericProperty<Real, is_ad>("PorousFlow_relative_permeability_nodal" + _phase)
47  : declareGenericProperty<Real, is_ad>("PorousFlow_relative_permeability_qp" + _phase)),
49  is_ad ? nullptr
50  : _nodal_material
51  ? &declarePropertyDerivative<Real>("PorousFlow_relative_permeability_nodal" + _phase,
52  _saturation_variable_name)
53  : &declarePropertyDerivative<Real>("PorousFlow_relative_permeability_qp" + _phase,
54  _saturation_variable_name)),
55  _s_res(getParam<Real>("s_res")),
56  _sum_s_res(getParam<Real>("sum_s_res")),
57  _dseff_ds(1.0 / (1.0 - _sum_s_res))
58 {
59  if (_sum_s_res < _s_res)
60  mooseError("Sum of residual saturations sum_s_res cannot be smaller than s_res in ", name());
61 }
const GenericMaterialProperty< std::vector< Real >, is_ad > & _saturation
Saturation material property.
MaterialProperty< Real > *const _drelative_permeability_ds
Derivative of relative permeability wrt phase saturation.
void mooseError(Args &&... args)
const Real _sum_s_res
Sum of residual saturations over all phases.
PorousFlowMaterialBase(const InputParameters &parameters)
const Real _scaling
Relative permeability is multiplied by this quantity.
const Real _s_res
Residual saturation of specified phase.
const std::string name
Definition: Setup.h:20
const std::string _phase
Stringified fluid phase number.
const Real _dseff_ds
Derivative of effective saturation with respect to saturation.
GenericMaterialProperty< Real, is_ad > & _relative_permeability
Relative permeability material property.

Member Function Documentation

◆ computeQpProperties()

template<bool is_ad>
void PorousFlowRelativePermeabilityBaseTempl< is_ad >::computeQpProperties ( )
overrideprotectedvirtual

Definition at line 65 of file PorousFlowRelativePermeabilityBase.C.

66 {
67  // Effective saturation
69  GenericReal<is_ad> relperm;
70  Real drelperm;
71 
72  if (seff < 0.0)
73  {
74  // Relative permeability is 0 for saturation less than residual
75  relperm = 0.0;
76  drelperm = 0.0;
77  }
78  else if (seff >= 0.0 && seff <= 1)
79  {
80  relperm = relativePermeability(seff);
82  }
83  else // seff > 1
84  {
85  // Relative permeability is 1 when fully saturated
86  relperm = 1.0;
87  drelperm = 0.0;
88  }
89 
90  _relative_permeability[_qp] = relperm * _scaling;
91 
92  if (!is_ad)
93  (*_drelative_permeability_ds)[_qp] = drelperm * _dseff_ds * _scaling;
94 }
virtual Real dRelativePermeability(Real seff) const =0
Derivative of relative permeability with respect to effective saturation.
Moose::GenericType< Real, is_ad > GenericReal
const GenericMaterialProperty< std::vector< Real >, is_ad > & _saturation
Saturation material property.
virtual GenericReal< is_ad > relativePermeability(GenericReal< is_ad > seff) const =0
Relative permeability equation (must be overriden in derived class)
auto raw_value(const Eigen::Map< T > &in)
const Real _scaling
Relative permeability is multiplied by this quantity.
const unsigned int _phase_num
Phase number of fluid.
virtual GenericReal< is_ad > effectiveSaturation(GenericReal< is_ad > saturation) const
Effective saturation of fluid phase.
DIE A HORRIBLE DEATH HERE typedef LIBMESH_DEFAULT_SCALAR_TYPE Real
const Real _dseff_ds
Derivative of effective saturation with respect to saturation.
GenericMaterialProperty< Real, is_ad > & _relative_permeability
Relative permeability material property.

◆ dRelativePermeability()

template<bool is_ad>
virtual Real PorousFlowRelativePermeabilityBaseTempl< is_ad >::dRelativePermeability ( Real  seff) const
protectedpure virtual

Derivative of relative permeability with respect to effective saturation.

Parameters
seffeffective saturation
Returns
derivative of relative permeability wrt effective saturation

Implemented in PorousFlowRelativePermeabilityVGTempl< is_ad >, PorousFlowRelativePermeabilityCoreyTempl< is_ad >, PorousFlowRelativePermeabilityBCTempl< is_ad >, PorousFlowRelativePermeabilityBWTempl< is_ad >, PorousFlowRelativePermeabilityFLACTempl< is_ad >, and PorousFlowRelativePermeabilityConstTempl< is_ad >.

◆ effectiveSaturation()

template<bool is_ad>
GenericReal< is_ad > PorousFlowRelativePermeabilityBaseTempl< is_ad >::effectiveSaturation ( GenericReal< is_ad >  saturation) const
protectedvirtual

Effective saturation of fluid phase.

Parameters
saturationtrue saturation
Returns
effective saturation

Definition at line 98 of file PorousFlowRelativePermeabilityBase.C.

100 {
101  return (saturation - _s_res) / (1.0 - _sum_s_res);
102 }
const Real _sum_s_res
Sum of residual saturations over all phases.
const Real _s_res
Residual saturation of specified phase.

◆ relativePermeability()

template<bool is_ad>
virtual GenericReal<is_ad> PorousFlowRelativePermeabilityBaseTempl< is_ad >::relativePermeability ( GenericReal< is_ad >  seff) const
protectedpure virtual

◆ validParams()

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

Definition at line 14 of file PorousFlowRelativePermeabilityBase.C.

Referenced by PorousFlowRelativePermeabilityConstTempl< is_ad >::validParams(), PorousFlowRelativePermeabilityBWTempl< is_ad >::validParams(), PorousFlowRelativePermeabilityFLACTempl< is_ad >::validParams(), PorousFlowRelativePermeabilityBCTempl< is_ad >::validParams(), PorousFlowRelativePermeabilityCoreyTempl< is_ad >::validParams(), and PorousFlowRelativePermeabilityVGTempl< is_ad >::validParams().

15 {
17  params.addRangeCheckedParam<Real>(
18  "scaling", 1.0, "scaling>=0", "Relative permeability is multiplied by this factor");
19  params.addRangeCheckedParam<Real>(
20  "s_res",
21  0,
22  "s_res >= 0 & s_res < 1",
23  "The residual saturation of the phase j. Must be between 0 and 1");
24  params.addRangeCheckedParam<Real>(
25  "sum_s_res",
26  0,
27  "sum_s_res >= 0 & sum_s_res < 1",
28  "Sum of residual saturations over all phases. Must be between 0 and 1");
29  params.addPrivateParam<std::string>("pf_material_type", "relative_permeability");
30  params.addPrivateParam<bool>("is_ad", is_ad);
31  params.addClassDescription("Base class for PorousFlow relative permeability materials");
32  return params;
33 }
static InputParameters validParams()
void addPrivateParam(const std::string &name, const T &value)
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)

Member Data Documentation

◆ _drelative_permeability_ds

template<bool is_ad>
MaterialProperty<Real>* const PorousFlowRelativePermeabilityBaseTempl< is_ad >::_drelative_permeability_ds
protected

Derivative of relative permeability wrt phase saturation.

Definition at line 61 of file PorousFlowRelativePermeabilityBase.h.

◆ _dseff_ds

template<bool is_ad>
const Real PorousFlowRelativePermeabilityBaseTempl< is_ad >::_dseff_ds
protected

Derivative of effective saturation with respect to saturation.

Definition at line 70 of file PorousFlowRelativePermeabilityBase.h.

◆ _phase

const std::string PorousFlowMaterialBase::_phase
protectedinherited

Stringified fluid phase number.

Definition at line 34 of file PorousFlowMaterialBase.h.

◆ _phase_num

const unsigned int PorousFlowMaterialBase::_phase_num
protectedinherited

◆ _relative_permeability

template<bool is_ad>
GenericMaterialProperty<Real, is_ad>& PorousFlowRelativePermeabilityBaseTempl< is_ad >::_relative_permeability
protected

Relative permeability material property.

Definition at line 58 of file PorousFlowRelativePermeabilityBase.h.

◆ _s_res

template<bool is_ad>
const Real PorousFlowRelativePermeabilityBaseTempl< is_ad >::_s_res
protected

◆ _saturation

template<bool is_ad>
const GenericMaterialProperty<std::vector<Real>, is_ad>& PorousFlowRelativePermeabilityBaseTempl< is_ad >::_saturation
protected

Saturation material property.

Definition at line 55 of file PorousFlowRelativePermeabilityBase.h.

◆ _scaling

template<bool is_ad>
const Real PorousFlowRelativePermeabilityBaseTempl< is_ad >::_scaling
protected

Relative permeability is multiplied by this quantity.

Definition at line 52 of file PorousFlowRelativePermeabilityBase.h.

◆ _sum_s_res

template<bool is_ad>
const Real PorousFlowRelativePermeabilityBaseTempl< is_ad >::_sum_s_res
protected

Sum of residual saturations over all phases.

Definition at line 67 of file PorousFlowRelativePermeabilityBase.h.

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


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