www.mooseframework.org
PorousFlowBasicAdvection.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<Kernel>();
19  params.addRequiredParam<UserObjectName>(
20  "PorousFlowDictator", "The UserObject that holds the list of PorousFlow variable names.");
21  params.addParam<unsigned int>("phase", 0, "Use the Darcy velocity of this fluid phase");
22  params.addClassDescription(
23  "Advective flux of a Variable using the Darcy velocity of the fluid phase");
24  return params;
25 }
26 
27 PorousFlowBasicAdvection::PorousFlowBasicAdvection(const InputParameters & parameters)
28  : Kernel(parameters),
29  _dictator(getUserObject<PorousFlowDictator>("PorousFlowDictator")),
30  _ph(getParam<unsigned int>("phase")),
31  _darcy_velocity(
32  getMaterialProperty<std::vector<RealVectorValue>>("PorousFlow_darcy_velocity_qp")),
33  _ddarcy_velocity_dvar(getMaterialProperty<std::vector<std::vector<RealVectorValue>>>(
34  "dPorousFlow_darcy_velocity_qp_dvar")),
35  _ddarcy_velocity_dgradvar(
36  getMaterialProperty<std::vector<std::vector<std::vector<RealVectorValue>>>>(
37  "dPorousFlow_darcy_velocity_qp_dgradvar"))
38 {
39  if (_ph >= _dictator.numPhases())
40  paramError("phase",
41  "The Dictator proclaims that the maximum phase index in this simulation is ",
42  _dictator.numPhases() - 1,
43  " whereas you have used ",
44  _ph,
45  ". Remember that indexing starts at 0. The Dictator is watching you, to "
46  "ensure your wellbeing.");
47 }
48 
49 Real
51 {
52  return -_grad_test[_i][_qp] * _darcy_velocity[_qp][_ph] * _u[_qp];
53 }
54 
55 Real
57 {
58  const Real result = -_grad_test[_i][_qp] * _darcy_velocity[_qp][_ph] * _phi[_j][_qp];
59  return result + computeQpOffDiagJacobian(_var.number());
60 }
61 
62 Real
64 {
66  return 0.0;
67 
68  const unsigned pvar = _dictator.porousFlowVariableNum(jvar);
69  Real result =
70  -_grad_test[_i][_qp] * _ddarcy_velocity_dvar[_qp][_ph][pvar] * _phi[_j][_qp] * _u[_qp];
71  for (unsigned j = 0; j < LIBMESH_DIM; ++j)
72  result -= _grad_test[_i][_qp] *
73  (_ddarcy_velocity_dgradvar[_qp][_ph][j][pvar] * _grad_phi[_j][_qp](j)) * _u[_qp];
74 
75  return result;
76 }
PorousFlowBasicAdvection
Kernel = grad(test) * darcy_velocity * u.
Definition: PorousFlowBasicAdvection.h:23
PorousFlowBasicAdvection.h
PorousFlowBasicAdvection::_ddarcy_velocity_dgradvar
const MaterialProperty< std::vector< std::vector< std::vector< RealVectorValue > > > > & _ddarcy_velocity_dgradvar
_ddarcy_velocity_dgradvar[_qp][ph][j][v](k) = d(k^th component of the Darcy velocity of phase ph)/d(j...
Definition: PorousFlowBasicAdvection.h:54
validParams< PorousFlowBasicAdvection >
InputParameters validParams< PorousFlowBasicAdvection >()
Definition: PorousFlowBasicAdvection.C:16
PorousFlowBasicAdvection::computeQpResidual
virtual Real computeQpResidual() override
Definition: PorousFlowBasicAdvection.C:50
PorousFlowDictator::notPorousFlowVariable
bool notPorousFlowVariable(unsigned int moose_var_num) const
Returns true if moose_var_num is not a porous flow variabe.
Definition: PorousFlowDictator.C:161
PorousFlowBasicAdvection::_ddarcy_velocity_dvar
const MaterialProperty< std::vector< std::vector< RealVectorValue > > > & _ddarcy_velocity_dvar
_ddarcy_velocity_dvar[_qp][ph][v](j) = d(j^th component of the Darcy velocity of phase ph)/d(PorousFl...
Definition: PorousFlowBasicAdvection.h:46
PorousFlowBasicAdvection::_dictator
const PorousFlowDictator & _dictator
Holds info on the Porous Flow variables.
Definition: PorousFlowBasicAdvection.h:34
PorousFlowBasicAdvection::_ph
const unsigned _ph
Phase of Darcy velocity.
Definition: PorousFlowBasicAdvection.h:37
PorousFlowDictator::porousFlowVariableNum
unsigned int porousFlowVariableNum(unsigned int moose_var_num) const
The PorousFlow variable number.
Definition: PorousFlowDictator.C:135
PorousFlowBasicAdvection::_darcy_velocity
const MaterialProperty< std::vector< RealVectorValue > > & _darcy_velocity
_darcy_velocity[_qp][ph](j) = j^th component of the Darcy velocity of phase ph
Definition: PorousFlowBasicAdvection.h:40
PorousFlowDictator
This holds maps between the nonlinear variables used in a PorousFlow simulation and the variable numb...
Definition: PorousFlowDictator.h:71
PorousFlowDictator::numPhases
unsigned int numPhases() const
The number of fluid phases.
Definition: PorousFlowDictator.C:105
PorousFlowBasicAdvection::PorousFlowBasicAdvection
PorousFlowBasicAdvection(const InputParameters &parameters)
Definition: PorousFlowBasicAdvection.C:27
PorousFlowBasicAdvection::computeQpJacobian
virtual Real computeQpJacobian() override
Definition: PorousFlowBasicAdvection.C:56
registerMooseObject
registerMooseObject("PorousFlowApp", PorousFlowBasicAdvection)
PorousFlowBasicAdvection::computeQpOffDiagJacobian
virtual Real computeQpOffDiagJacobian(unsigned int jvar) override
Definition: PorousFlowBasicAdvection.C:63