https://mooseframework.inl.gov
Loading...
Searching...
No Matches
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
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 "Fully-upwinded advective flux of the component given by fluid_component");
24 return params;
25}
26
27template <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
56template <bool is_ad>
58PorousFlowAdvectiveFluxTempl<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
64template <bool is_ad>
65Real
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
PetscErrorCode PetscOptionItems *PetscErrorCode DM dm
registerMooseObject("PorousFlowApp", PorousFlowAdvectiveFlux)
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
Convective flux of component k in fluid phase alpha.
static InputParameters validParams()
const unsigned int _fluid_component
Index of the fluid component that this kernel acts on.
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.
PorousFlowAdvectiveFluxTempl(const InputParameters &parameters)
virtual GenericReal< is_ad > mobility(unsigned nodenum, unsigned phase) const override
The mobility of the fluid.
Darcy advective flux.
const PorousFlowDictator & _dictator
PorousFlowDictator UserObject.
static InputParameters validParams()
unsigned int numComponents() const
The number of fluid components.