https://mooseframework.inl.gov
Loading...
Searching...
No Matches
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
15template <bool is_ad>
18{
20 params.addParam<unsigned int>(
21 "fluid_component", 0, "The index corresponding to the fluid component for this kernel");
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
28template <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
50template <bool is_ad>
53{
54 const unsigned ph = 0;
55 return _mfrac[_qp][ph][_fluid_component] *
57}
58
59template <bool is_ad>
60Real
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
registerMooseObject("PorousFlowApp", PorousFlowFullySaturatedDarcyFlow)
void ErrorVector unsigned int
void addParam(const std::string &name, const std::initializer_list< typename T::value_type > &value, const std::string &doc_string)
void addClassDescription(const std::string &doc_string)
void paramError(const std::string &param, Args... args) const
unsigned int numComponents() const
The number of fluid components.
Darcy advective flux for a fully-saturated, single-phase, single-component fluid.
const PorousFlowDictator & _dictator
PorousFlowDictator UserObject.
virtual GenericReal< is_ad > mobility() const
Fluid mobility = (density *) 1/viscosity. Virtual so DarcyFlow can multiply by mass frac.
virtual Real dmobility(unsigned int pvar) const
d(mobility)/d(PorousFlow variable pvar) – only used on the non-AD path
Darcy advective flux for a fully-saturated, single-phase, multi-component fluid.
virtual GenericReal< is_ad > mobility() const override
Fluid mobility = (density *) 1/viscosity. Virtual so DarcyFlow can multiply by mass frac.
PorousFlowFullySaturatedDarcyFlowTempl(const InputParameters &parameters)
const unsigned int _fluid_component
Fluid component index for this kernel.
virtual Real dmobility(unsigned int pvar) const override
d(mobility)/d(PorousFlow variable pvar) – only used on the non-AD path