www.mooseframework.org
PorousFlowAdvectiveFlux.C
Go to the documentation of this file.
1 //* This file is part of the MOOSE framework
2 //* https://www.mooseframework.org
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 
13 
14 template <>
15 InputParameters
17 {
18  InputParameters params = validParams<PorousFlowDarcyBase>();
19  params.addParam<unsigned int>(
20  "fluid_component", 0, "The index corresponding to the fluid component for this kernel");
21  params.addClassDescription(
22  "Fully-upwinded advective flux of the component given by fluid_component");
23  return params;
24 }
25 
26 PorousFlowAdvectiveFlux::PorousFlowAdvectiveFlux(const InputParameters & parameters)
27  : PorousFlowDarcyBase(parameters),
28  _mass_fractions(
29  getMaterialProperty<std::vector<std::vector<Real>>>("PorousFlow_mass_frac_nodal")),
30  _dmass_fractions_dvar(getMaterialProperty<std::vector<std::vector<std::vector<Real>>>>(
31  "dPorousFlow_mass_frac_nodal_dvar")),
32  _relative_permeability(
33  getMaterialProperty<std::vector<Real>>("PorousFlow_relative_permeability_nodal")),
34  _drelative_permeability_dvar(getMaterialProperty<std::vector<std::vector<Real>>>(
35  "dPorousFlow_relative_permeability_nodal_dvar")),
36  _fluid_component(getParam<unsigned int>("fluid_component"))
37 {
38 }
39 
40 Real
41 PorousFlowAdvectiveFlux::mobility(unsigned nodenum, unsigned phase) const
42 {
43  return _mass_fractions[nodenum][phase][_fluid_component] * _fluid_density_node[nodenum][phase] *
44  _relative_permeability[nodenum][phase] / _fluid_viscosity[nodenum][phase];
45 }
46 
47 Real
48 PorousFlowAdvectiveFlux::dmobility(unsigned nodenum, unsigned phase, unsigned pvar) const
49 {
50  Real dm = _dmass_fractions_dvar[nodenum][phase][_fluid_component][pvar] *
51  _fluid_density_node[nodenum][phase] * _relative_permeability[nodenum][phase] /
52  _fluid_viscosity[nodenum][phase];
53  dm += _mass_fractions[nodenum][phase][_fluid_component] *
54  _dfluid_density_node_dvar[nodenum][phase][pvar] * _relative_permeability[nodenum][phase] /
55  _fluid_viscosity[nodenum][phase];
56  dm += _mass_fractions[nodenum][phase][_fluid_component] * _fluid_density_node[nodenum][phase] *
57  _drelative_permeability_dvar[nodenum][phase][pvar] / _fluid_viscosity[nodenum][phase];
58  dm -= _mass_fractions[nodenum][phase][_fluid_component] * _fluid_density_node[nodenum][phase] *
59  _relative_permeability[nodenum][phase] * _dfluid_viscosity_dvar[nodenum][phase][pvar] /
60  std::pow(_fluid_viscosity[nodenum][phase], 2);
61  return dm;
62 }
PorousFlowAdvectiveFlux::_fluid_component
const unsigned int _fluid_component
Index of the fluid component that this kernel acts on.
Definition: PorousFlowAdvectiveFlux.h:46
PorousFlowAdvectiveFlux.h
PorousFlowDarcyBase::_fluid_viscosity
const MaterialProperty< std::vector< Real > > & _fluid_viscosity
Viscosity of each component in each phase.
Definition: PorousFlowDarcyBase.h:108
pow
ExpressionBuilder::EBTerm pow(const ExpressionBuilder::EBTerm &left, T exponent)
Definition: ExpressionBuilder.h:673
PorousFlowDarcyBase::_fluid_density_node
const MaterialProperty< std::vector< Real > > & _fluid_density_node
Fluid density for each phase (at the node)
Definition: PorousFlowDarcyBase.h:96
validParams< PorousFlowDarcyBase >
InputParameters validParams< PorousFlowDarcyBase >()
Definition: PorousFlowDarcyBase.C:21
PorousFlowAdvectiveFlux::_dmass_fractions_dvar
const MaterialProperty< std::vector< std::vector< std::vector< Real > > > > & _dmass_fractions_dvar
Derivative of the mass fraction of each component in each phase wrt PorousFlow variables.
Definition: PorousFlowAdvectiveFlux.h:37
PorousFlowAdvectiveFlux::dmobility
virtual Real dmobility(unsigned nodenum, unsigned phase, unsigned pvar) const override
The derivative of mobility with respect to PorousFlow variable pvar.
Definition: PorousFlowAdvectiveFlux.C:48
PorousFlowDarcyBase::_dfluid_viscosity_dvar
const MaterialProperty< std::vector< std::vector< Real > > > & _dfluid_viscosity_dvar
Derivative of the fluid viscosity for each phase wrt PorousFlow variables.
Definition: PorousFlowDarcyBase.h:111
PorousFlowDarcyBase::_dfluid_density_node_dvar
const MaterialProperty< std::vector< std::vector< Real > > > & _dfluid_density_node_dvar
Derivative of the fluid density for each phase wrt PorousFlow variables (at the node)
Definition: PorousFlowDarcyBase.h:99
PorousFlowAdvectiveFlux::_relative_permeability
const MaterialProperty< std::vector< Real > > & _relative_permeability
Relative permeability of each phase.
Definition: PorousFlowAdvectiveFlux.h:40
PorousFlowAdvectiveFlux::_drelative_permeability_dvar
const MaterialProperty< std::vector< std::vector< Real > > > & _drelative_permeability_dvar
Derivative of relative permeability of each phase wrt PorousFlow variables.
Definition: PorousFlowAdvectiveFlux.h:43
PorousFlowAdvectiveFlux::PorousFlowAdvectiveFlux
PorousFlowAdvectiveFlux(const InputParameters &parameters)
Definition: PorousFlowAdvectiveFlux.C:26
validParams< PorousFlowAdvectiveFlux >
InputParameters validParams< PorousFlowAdvectiveFlux >()
Definition: PorousFlowAdvectiveFlux.C:16
PorousFlowDarcyBase
Darcy advective flux.
Definition: PorousFlowDarcyBase.h:28
PorousFlowAdvectiveFlux::_mass_fractions
const MaterialProperty< std::vector< std::vector< Real > > > & _mass_fractions
Mass fraction of each component in each phase.
Definition: PorousFlowAdvectiveFlux.h:34
PorousFlowAdvectiveFlux::mobility
virtual Real mobility(unsigned nodenum, unsigned phase) const override
The mobility of the fluid.
Definition: PorousFlowAdvectiveFlux.C:41
PorousFlowAdvectiveFlux
Convective flux of component k in fluid phase alpha.
Definition: PorousFlowAdvectiveFlux.h:24
registerMooseObject
registerMooseObject("PorousFlowApp", PorousFlowAdvectiveFlux)