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

Material designed to form a std::vector<std::vector> of mass fractions from the individual mass fraction variables. More...

#include <PorousFlowMassFraction.h>

Inheritance diagram for PorousFlowMassFractionTempl< is_ad >:
[legend]

Public Types

typedef DerivativeMaterialPropertyNameInterface::SymbolName SymbolName
 

Public Member Functions

 PorousFlowMassFractionTempl (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 initQpStatefulProperties () override
 
virtual void computeQpProperties () override
 
void build_mass_frac (unsigned int qp)
 Builds the mass-fraction variable matrix at the quad point. More...
 

Protected Attributes

GenericMaterialProperty< std::vector< std::vector< Real > >, is_ad > & _mass_frac
 Mass fraction matrix at quadpoint or nodes. More...
 
GenericMaterialProperty< std::vector< std::vector< RealGradient > >, is_ad > *const _grad_mass_frac
 Gradient of the mass fraction matrix at the quad points. More...
 
MaterialProperty< std::vector< std::vector< std::vector< Real > > > > *const _dmass_frac_dvar
 Derivative of the mass fraction matrix with respect to the porous flow variables. More...
 
const unsigned int _num_passed_mf_vars
 Number of mass-fraction variables provided by the user This needs to be num_phases*(_num_components - 1), since the mass fraction of the final component in each phase is determined as 1 - sum{components}(mass fraction of all other components in the phase) More...
 
std::vector< unsigned int_mf_vars_num
 The variable number of the mass-fraction variables. More...
 
std::vector< const GenericVariableValue< is_ad > * > _mf_vars
 The mass-fraction variables. More...
 
std::vector< const GenericVariableGradient< is_ad > * > _grad_mf_vars
 The gradient of the mass-fraction variables. 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

template<bool is_ad>
class PorousFlowMassFractionTempl< is_ad >

Material designed to form a std::vector<std::vector> of mass fractions from the individual mass fraction variables.

Definition at line 19 of file PorousFlowMassFraction.h.

Constructor & Destructor Documentation

◆ PorousFlowMassFractionTempl()

template<bool is_ad>
PorousFlowMassFractionTempl< is_ad >::PorousFlowMassFractionTempl ( const InputParameters parameters)

Definition at line 35 of file PorousFlowMassFraction.C.

36  : PorousFlowMaterialVectorBase(parameters),
37  _mass_frac(_nodal_material ? declareGenericProperty<std::vector<std::vector<Real>>, is_ad>(
38  "PorousFlow_mass_frac_nodal")
39  : declareGenericProperty<std::vector<std::vector<Real>>, is_ad>(
40  "PorousFlow_mass_frac_qp")),
41  _grad_mass_frac(_nodal_material
42  ? nullptr
43  : &declareGenericProperty<std::vector<std::vector<RealGradient>>, is_ad>(
44  "PorousFlow_grad_mass_frac_qp")),
45  _dmass_frac_dvar(is_ad ? nullptr
46  : _nodal_material
47  ? &declareProperty<std::vector<std::vector<std::vector<Real>>>>(
48  "dPorousFlow_mass_frac_nodal_dvar")
49  : &declareProperty<std::vector<std::vector<std::vector<Real>>>>(
50  "dPorousFlow_mass_frac_qp_dvar")),
51  _num_passed_mf_vars(isParamValid("mass_fraction_vars") ? coupledComponents("mass_fraction_vars")
52  : 0)
53 {
54  if (_num_phases < 1 || _num_components < 1)
55  mooseError("PorousFlowMassFraction: The Dictator proclaims that the number of phases is ",
57  " and the number of components is ",
59  ", and stipulates that you should not use PorousFlowMassFraction in this case");
60 
62  paramError("mass_fraction_vars",
63  "This value must be equal to the Dictator's num_phases (",
65  ") multiplied by num_components-1 (",
66  _num_components - 1,
67  ")");
68 
72  for (unsigned i = 0; i < _num_passed_mf_vars; ++i)
73  {
74  // If mass_fraction_vars are elemental AuxVariables (or constants), we want to use
75  // coupledGenericValue() rather than coupledGenericDofValue()
76  const bool is_nodal =
77  isCoupled("mass_fraction_vars") ? getFieldVar("mass_fraction_vars", i)->isNodal() : false;
78 
79  _mf_vars_num[i] = coupled("mass_fraction_vars", i);
80  _mf_vars[i] =
81  (_nodal_material && is_nodal ? &coupledGenericDofValue<is_ad>("mass_fraction_vars", i)
82  : &coupledGenericValue<is_ad>("mass_fraction_vars", i));
83  _grad_mf_vars[i] = &coupledGenericGradient<is_ad>("mass_fraction_vars", i);
84  }
85 }
const unsigned int _num_phases
Number of phases.
MaterialProperty< std::vector< std::vector< std::vector< Real > > > > *const _dmass_frac_dvar
Derivative of the mass fraction matrix with respect to the porous flow variables. ...
void mooseError(Args &&... args)
const unsigned int _num_passed_mf_vars
Number of mass-fraction variables provided by the user This needs to be num_phases*(_num_components -...
std::vector< unsigned int > _mf_vars_num
The variable number of the mass-fraction variables.
const unsigned int _num_components
Number of fluid components.
GenericMaterialProperty< std::vector< std::vector< RealGradient > >, is_ad > *const _grad_mass_frac
Gradient of the mass fraction matrix at the quad points.
GenericMaterialProperty< std::vector< std::vector< Real > >, is_ad > & _mass_frac
Mass fraction matrix at quadpoint or nodes.
std::vector< const GenericVariableGradient< is_ad > * > _grad_mf_vars
The gradient of the mass-fraction variables.
PorousFlowMaterialVectorBase(const InputParameters &parameters)
std::vector< const GenericVariableValue< is_ad > * > _mf_vars
The mass-fraction variables.

Member Function Documentation

◆ build_mass_frac()

template<bool is_ad>
void PorousFlowMassFractionTempl< is_ad >::build_mass_frac ( unsigned int  qp)
protected

Builds the mass-fraction variable matrix at the quad point.

Parameters
qpthe quad point

◆ computeQpProperties()

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

Reimplemented in PorousFlowMassFractionAqueousEquilibriumChemistry.

Definition at line 98 of file PorousFlowMassFraction.C.

Referenced by PorousFlowMassFractionAqueousEquilibriumChemistry::computeQpProperties().

99 {
100  // size all properties correctly
101  _mass_frac[_qp].resize(_num_phases);
102 
103  if (!is_ad)
104  (*_dmass_frac_dvar)[_qp].resize(_num_phases);
105 
106  if (!_nodal_material)
107  (*_grad_mass_frac)[_qp].resize(_num_phases);
108 
109  for (unsigned int ph = 0; ph < _num_phases; ++ph)
110  {
111  _mass_frac[_qp][ph].resize(_num_components);
112 
113  if (!is_ad)
114  {
115  (*_dmass_frac_dvar)[_qp][ph].resize(_num_components);
116  for (unsigned int comp = 0; comp < _num_components; ++comp)
117  (*_dmass_frac_dvar)[_qp][ph][comp].assign(_num_var, 0.0);
118  }
119 
120  if (!_nodal_material)
121  (*_grad_mass_frac)[_qp][ph].resize(_num_components);
122  }
123 
124  // compute the values and derivatives
125  unsigned int i = 0;
126  for (unsigned int ph = 0; ph < _num_phases; ++ph)
127  {
128  GenericReal<is_ad> total_mass_frac = 0;
129 
130  if (!_nodal_material)
131  (*_grad_mass_frac)[_qp][ph][_num_components - 1] = 0.0;
132 
133  for (unsigned int comp = 0; comp < _num_components - 1; ++comp)
134  {
135  _mass_frac[_qp][ph][comp] = (*_mf_vars[i])[_qp];
136  total_mass_frac += _mass_frac[_qp][ph][comp];
137 
138  if (!_nodal_material)
139  {
140  (*_grad_mass_frac)[_qp][ph][comp] = (*_grad_mf_vars[i])[_qp];
141  (*_grad_mass_frac)[_qp][ph][_num_components - 1] -= (*_grad_mf_vars[i])[_qp];
142  }
143 
144  if (!is_ad && _dictator.isPorousFlowVariable(_mf_vars_num[i]))
145  {
146  // _mf_vars[i] is a PorousFlow variable
147  const unsigned int pf_var_num = _dictator.porousFlowVariableNum(_mf_vars_num[i]);
148  (*_dmass_frac_dvar)[_qp][ph][comp][pf_var_num] = 1.0;
149  (*_dmass_frac_dvar)[_qp][ph][_num_components - 1][pf_var_num] = -1.0;
150  }
151  i++;
152  }
153 
154  _mass_frac[_qp][ph][_num_components - 1] = 1.0 - total_mass_frac;
155  }
156 }
Moose::GenericType< Real, is_ad > GenericReal
const unsigned int _num_phases
Number of phases.
MaterialProperty< std::vector< std::vector< std::vector< Real > > > > *const _dmass_frac_dvar
Derivative of the mass fraction matrix with respect to the porous flow variables. ...
std::vector< unsigned int > _mf_vars_num
The variable number of the mass-fraction variables.
const unsigned int _num_components
Number of fluid components.
GenericMaterialProperty< std::vector< std::vector< Real > >, is_ad > & _mass_frac
Mass fraction matrix at quadpoint or nodes.
std::vector< const GenericVariableGradient< is_ad > * > _grad_mf_vars
The gradient of the mass-fraction variables.
const unsigned int _num_var
Number of PorousFlow variables.
std::vector< const GenericVariableValue< is_ad > * > _mf_vars
The mass-fraction variables.

◆ initQpStatefulProperties()

template<bool is_ad>
void PorousFlowMassFractionTempl< is_ad >::initQpStatefulProperties ( )
overrideprotectedvirtual

Reimplemented in PorousFlowMassFractionAqueousEquilibriumChemistry.

Definition at line 89 of file PorousFlowMassFraction.C.

90 {
91  // all we need to do is compute _mass_frac for _nodal_materials
92  // but the following avoids code duplication
94 }
virtual void computeQpProperties() override

◆ validParams()

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

Definition at line 17 of file PorousFlowMassFraction.C.

18 {
20  params.addCoupledVar(
21  "mass_fraction_vars",
22  "List of variables that represent the mass fractions. Format is 'f_ph0^c0 "
23  "f_ph0^c1 f_ph0^c2 ... f_ph0^c(N-2) f_ph1^c0 f_ph1^c1 fph1^c2 ... "
24  "fph1^c(N-2) ... fphP^c0 f_phP^c1 fphP^c2 ... fphP^c(N-2)' where "
25  "N=num_components and P=num_phases, and it is assumed that "
26  "f_ph^c(N-1)=1-sum(f_ph^c,{c,0,N-2}) so that f_ph^c(N-1) need not be given. If no "
27  "variables are provided then num_phases=1=num_components.");
28  params.addPrivateParam<std::string>("pf_material_type", "mass_fraction");
29  params.addClassDescription("This Material forms a std::vector<std::vector ...> of mass-fractions "
30  "out of the individual mass fractions");
31  return params;
32 }
void addPrivateParam(const std::string &name, const T &value)
void addCoupledVar(const std::string &name, const std::string &doc_string)
void addClassDescription(const std::string &doc_string)

Member Data Documentation

◆ _dmass_frac_dvar

template<bool is_ad>
MaterialProperty<std::vector<std::vector<std::vector<Real> > > >* const PorousFlowMassFractionTempl< is_ad >::_dmass_frac_dvar
protected

Derivative of the mass fraction matrix with respect to the porous flow variables.

Definition at line 34 of file PorousFlowMassFraction.h.

Referenced by PorousFlowMassFractionAqueousEquilibriumChemistry::computeQpProperties().

◆ _grad_mass_frac

template<bool is_ad>
GenericMaterialProperty<std::vector<std::vector<RealGradient> >, is_ad>* const PorousFlowMassFractionTempl< is_ad >::_grad_mass_frac
protected

Gradient of the mass fraction matrix at the quad points.

Definition at line 31 of file PorousFlowMassFraction.h.

Referenced by PorousFlowMassFractionAqueousEquilibriumChemistry::computeQpProperties().

◆ _grad_mf_vars

template<bool is_ad>
std::vector<const GenericVariableGradient<is_ad> *> PorousFlowMassFractionTempl< is_ad >::_grad_mf_vars
protected

◆ _mass_frac

template<bool is_ad>
GenericMaterialProperty<std::vector<std::vector<Real> >, is_ad>& PorousFlowMassFractionTempl< is_ad >::_mass_frac
protected

Mass fraction matrix at quadpoint or nodes.

Definition at line 28 of file PorousFlowMassFraction.h.

Referenced by PorousFlowMassFractionAqueousEquilibriumChemistry::computeQpProperties().

◆ _mf_vars

template<bool is_ad>
std::vector<const GenericVariableValue<is_ad> *> PorousFlowMassFractionTempl< is_ad >::_mf_vars
protected

◆ _mf_vars_num

template<bool is_ad>
std::vector<unsigned int> PorousFlowMassFractionTempl< is_ad >::_mf_vars_num
protected

◆ _num_components

const unsigned int PorousFlowMaterialVectorBase::_num_components
protectedinherited

◆ _num_passed_mf_vars

template<bool is_ad>
const unsigned int PorousFlowMassFractionTempl< is_ad >::_num_passed_mf_vars
protected

Number of mass-fraction variables provided by the user This needs to be num_phases*(_num_components - 1), since the mass fraction of the final component in each phase is determined as 1 - sum{components}(mass fraction of all other components in the phase)

Definition at line 51 of file PorousFlowMassFraction.h.

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

◆ _num_phases

const unsigned int PorousFlowMaterialVectorBase::_num_phases
protectedinherited

◆ _num_var

const unsigned int PorousFlowMaterialVectorBase::_num_var
protectedinherited

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