https://mooseframework.inl.gov
PorousFlowFullySaturatedDarcyFlow.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  "Darcy flux suitable for models involving a fully-saturated single phase, multi-component "
24  "fluid. No upwinding is used.");
25  return params;
26 }
27 
28 template <bool is_ad>
30  const InputParameters & parameters)
31  : PorousFlowFullySaturatedDarcyBaseTempl<is_ad>(parameters),
32  _mfrac(this->template getGenericMaterialProperty<std::vector<std::vector<Real>>, is_ad>(
33  "PorousFlow_mass_frac_qp")),
34  _dmfrac_dvar(
35  is_ad ? nullptr
36  : &this->template getMaterialProperty<std::vector<std::vector<std::vector<Real>>>>(
37  "dPorousFlow_mass_frac_qp_dvar")),
38  _fluid_component(this->template getParam<unsigned int>("fluid_component"))
39 {
41  this->paramError(
42  "fluid_component",
43  "The Dictator proclaims that the maximum fluid component index in this simulation is ",
45  " whereas you have used ",
47  ". Remember that indexing starts at 0. Happiness equals perfection.");
48 }
49 
50 template <bool is_ad>
53 {
54  const unsigned ph = 0;
55  return _mfrac[_qp][ph][_fluid_component] *
57 }
58 
59 template <bool is_ad>
60 Real
62 {
63  if constexpr (!is_ad)
64  {
65  const unsigned ph = 0;
68  return (*_dmfrac_dvar)[_qp][ph][_fluid_component][pvar] * darcy_mob +
69  _mfrac[_qp][ph][_fluid_component] * ddarcy_mob;
70  }
71  else
72  libmesh_ignore(pvar);
73  return 0.0;
74 }
75 
Moose::GenericType< Real, is_ad > GenericReal
const unsigned int _fluid_component
Fluid component index for this kernel.
virtual GenericReal< is_ad > mobility() const override
Fluid mobility = (density *) 1/viscosity. Virtual so DarcyFlow can multiply by mass frac...
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)
unsigned int numComponents() const
The number of fluid components.
virtual Real dmobility(unsigned int pvar) const
d(mobility)/d(PorousFlow variable pvar) – only used on the non-AD path
virtual GenericReal< is_ad > mobility() const
Fluid mobility = (density *) 1/viscosity. Virtual so DarcyFlow can multiply by mass frac...
void libmesh_ignore(const Args &...)
Darcy advective flux for a fully-saturated, single-phase, single-component fluid. ...
DIE A HORRIBLE DEATH HERE typedef LIBMESH_DEFAULT_SCALAR_TYPE Real
registerMooseObject("PorousFlowApp", PorousFlowFullySaturatedDarcyFlow)
virtual Real dmobility(unsigned int pvar) const override
d(mobility)/d(PorousFlow variable pvar) – only used on the non-AD path
void addClassDescription(const std::string &doc_string)
const PorousFlowDictator & _dictator
PorousFlowDictator UserObject.
Darcy advective flux for a fully-saturated, single-phase, multi-component fluid.
PorousFlowFullySaturatedDarcyFlowTempl(const InputParameters &parameters)
void ErrorVector unsigned int