21 "fluid_component", 0,
"The index corresponding to the fluid component for this kernel");
22 params.
addParam<
bool>(
"multiply_by_density",
24 "If true, then this Kernel is the fluid mass " 25 "flux. If false, then this Kernel is the " 26 "fluid volume flux (which is common in " 29 "fluid_component, in a single-phase fluid");
38 this->template getGenericMaterialProperty<
std::vector<
std::vector<
Real>>, is_ad>(
39 "PorousFlow_mass_frac_nodal")),
40 _dmass_fractions_dvar(
42 : &this->template getMaterialProperty<
std::vector<
std::vector<
std::vector<
Real>>>>(
43 "dPorousFlow_mass_frac_nodal_dvar")),
44 _fluid_component(this->template getParam<unsigned
int>(
"fluid_component")),
45 _multiply_by_density(this->template getParam<bool>(
"multiply_by_density"))
49 "PorousFlowFullySaturatedAdvectiveFlux should not be used for multi-phase scenarios as " 50 "it does not include relative-permeability effects");
57 if (_multiply_by_density ==
false)
58 return _mass_fractions[nodenum][phase][_fluid_component] / _fluid_viscosity[nodenum][phase];
59 return _mass_fractions[nodenum][phase][_fluid_component] * _fluid_density_node[nodenum][phase] /
60 _fluid_viscosity[nodenum][phase];
71 if (_multiply_by_density ==
false)
72 return (*_dmass_fractions_dvar)[nodenum][phase][_fluid_component][pvar] /
73 _fluid_viscosity[nodenum][phase] -
74 _mass_fractions[nodenum][phase][_fluid_component] *
75 (*_dfluid_viscosity_dvar)[nodenum][phase][pvar] /
76 Utility::pow<2>(_fluid_viscosity[nodenum][phase]);
77 Real dm = (*_dmass_fractions_dvar)[nodenum][phase][_fluid_component][pvar] *
78 _fluid_density_node[nodenum][phase] / _fluid_viscosity[nodenum][phase];
79 dm += _mass_fractions[nodenum][phase][_fluid_component] *
80 (*_dfluid_density_node_dvar)[nodenum][phase][pvar] / _fluid_viscosity[nodenum][phase];
81 dm -= _mass_fractions[nodenum][phase][_fluid_component] * _fluid_density_node[nodenum][phase] *
82 (*_dfluid_viscosity_dvar)[nodenum][phase][pvar] /
83 Utility::pow<2>(_fluid_viscosity[nodenum][phase]);
Moose::GenericType< Real, is_ad > GenericReal
PetscErrorCode PetscOptionItems *PetscErrorCode DM dm
const PorousFlowDictator & _dictator
PorousFlowDictator UserObject.
PorousFlowFullySaturatedAdvectiveFluxTempl(const InputParameters ¶meters)
void libmesh_ignore(const Args &...)
static InputParameters validParams()
unsigned int numPhases() const
The number of fluid phases.
Convective flux of component k in a single-phase fluid.
virtual GenericReal< is_ad > mobility(unsigned nodenum, unsigned phase) const override
The mobility of the fluid.
registerMooseObject("PorousFlowApp", PorousFlowFullySaturatedAdvectiveFlux)
DIE A HORRIBLE DEATH HERE typedef LIBMESH_DEFAULT_SCALAR_TYPE Real
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...
void mooseError(Args &&... args) const
static InputParameters validParams()
void ErrorVector unsigned int