https://mooseframework.inl.gov
PorousFlowAdvectiveFlux.C
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 
11 
14 
15 template <bool is_ad>
18 {
20  params.addParam<unsigned int>(
21  "fluid_component", 0, "The index corresponding to the fluid component for this kernel");
22  params.addClassDescription(
23  "Fully-upwinded advective flux of the component given by fluid_component");
24  return params;
25 }
26 
27 template <bool is_ad>
29  const InputParameters & parameters)
30  : PorousFlowDarcyBaseTempl<is_ad>(parameters),
31  _mass_fractions(
32  this->template getGenericMaterialProperty<std::vector<std::vector<Real>>, is_ad>(
33  "PorousFlow_mass_frac_nodal")),
34  _dmass_fractions_dvar(
35  is_ad ? nullptr
36  : &this->template getMaterialProperty<std::vector<std::vector<std::vector<Real>>>>(
37  "dPorousFlow_mass_frac_nodal_dvar")),
38  _relative_permeability(this->template getGenericMaterialProperty<std::vector<Real>, is_ad>(
39  "PorousFlow_relative_permeability_nodal")),
40  _drelative_permeability_dvar(
41  is_ad ? nullptr
42  : &this->template getMaterialProperty<std::vector<std::vector<Real>>>(
43  "dPorousFlow_relative_permeability_nodal_dvar")),
44  _fluid_component(this->template getParam<unsigned int>("fluid_component"))
45 {
47  this->paramError(
48  "fluid_component",
49  "The Dictator proclaims that the maximum fluid component index in this simulation is ",
51  " whereas you have used ",
53  ". Remember that indexing starts at 0. The Dictator does not take such mistakes lightly.");
54 }
55 
56 template <bool is_ad>
58 PorousFlowAdvectiveFluxTempl<is_ad>::mobility(unsigned nodenum, unsigned phase) const
59 {
60  return _mass_fractions[nodenum][phase][_fluid_component] * _fluid_density_node[nodenum][phase] *
61  _relative_permeability[nodenum][phase] / _fluid_viscosity[nodenum][phase];
62 }
63 
64 template <bool is_ad>
65 Real
67  unsigned phase,
68  unsigned pvar) const
69 {
70  if constexpr (!is_ad)
71  {
72  Real dm = (*_dmass_fractions_dvar)[nodenum][phase][_fluid_component][pvar] *
73  _fluid_density_node[nodenum][phase] * _relative_permeability[nodenum][phase] /
74  _fluid_viscosity[nodenum][phase];
75  dm += _mass_fractions[nodenum][phase][_fluid_component] *
76  (*_dfluid_density_node_dvar)[nodenum][phase][pvar] *
77  _relative_permeability[nodenum][phase] / _fluid_viscosity[nodenum][phase];
78  dm += _mass_fractions[nodenum][phase][_fluid_component] * _fluid_density_node[nodenum][phase] *
79  (*_drelative_permeability_dvar)[nodenum][phase][pvar] / _fluid_viscosity[nodenum][phase];
80  dm -= _mass_fractions[nodenum][phase][_fluid_component] * _fluid_density_node[nodenum][phase] *
81  _relative_permeability[nodenum][phase] * (*_dfluid_viscosity_dvar)[nodenum][phase][pvar] /
82  std::pow(_fluid_viscosity[nodenum][phase], 2);
83  return dm;
84  }
85  else
86  libmesh_ignore(nodenum, phase, pvar);
87  return 0.0;
88 }
89 
Moose::GenericType< Real, is_ad > GenericReal
void paramError(const std::string &param, Args... args) const
void addParam(const std::string &name, const std::initializer_list< typename T::value_type > &value, const std::string &doc_string)
virtual GenericReal< is_ad > mobility(unsigned nodenum, unsigned phase) const override
The mobility of the fluid.
unsigned int numComponents() const
The number of fluid components.
PetscErrorCode PetscOptionItems *PetscErrorCode DM dm
Convective flux of component k in fluid phase alpha.
registerMooseObject("PorousFlowApp", PorousFlowAdvectiveFlux)
Darcy advective flux.
const PorousFlowDictator & _dictator
PorousFlowDictator UserObject.
static InputParameters validParams()
void libmesh_ignore(const Args &...)
PorousFlowAdvectiveFluxTempl(const InputParameters &parameters)
virtual Real dmobility(unsigned nodenum, unsigned phase, unsigned pvar) const override
The derivative of mobility with respect to PorousFlow variable pvar – non-AD path only...
static InputParameters validParams()
DIE A HORRIBLE DEATH HERE typedef LIBMESH_DEFAULT_SCALAR_TYPE Real
void addClassDescription(const std::string &doc_string)
MooseUnits pow(const MooseUnits &, int)
void ErrorVector unsigned int
const unsigned int _fluid_component
Index of the fluid component that this kernel acts on.