www.mooseframework.org
RichardsMassChange.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 
10 #include "RichardsMassChange.h"
11 
12 // MOOSE includes
13 #include "Material.h"
14 #include "MooseVariable.h"
15 
16 // C++ includes
17 #include <iostream>
18 
20 
21 template <>
22 InputParameters
24 {
25  InputParameters params = validParams<TimeDerivative>();
26  params.addParam<bool>("use_supg",
27  false,
28  "True for using SUPG in this kernel, false otherwise. "
29  "This has no effect if the material does not use SUPG.");
30  params.addRequiredParam<UserObjectName>(
31  "richardsVarNames_UO", "The UserObject that holds the list of Richards variable names.");
32  return params;
33 }
34 
35 RichardsMassChange::RichardsMassChange(const InputParameters & parameters)
36  : TimeDerivative(parameters),
37  _richards_name_UO(getUserObject<RichardsVarNames>("richardsVarNames_UO")),
38  _pvar(_richards_name_UO.richards_var_num(_var.number())),
39 
40  _use_supg(getParam<bool>("use_supg")),
41 
42  _mass(getMaterialProperty<std::vector<Real>>("mass")),
43  _dmass(getMaterialProperty<std::vector<std::vector<Real>>>("dmass")),
44  _mass_old(getMaterialProperty<std::vector<Real>>("mass_old")),
45 
46  _tauvel_SUPG(getMaterialProperty<std::vector<RealVectorValue>>("tauvel_SUPG")),
47  _dtauvel_SUPG_dgradv(
48  getMaterialProperty<std::vector<std::vector<RealTensorValue>>>("dtauvel_SUPG_dgradv")),
49  _dtauvel_SUPG_dv(
50  getMaterialProperty<std::vector<std::vector<RealVectorValue>>>("dtauvel_SUPG_dv"))
51 {
52 }
53 
54 Real
56 {
57  Real test_fcn = _test[_i][_qp];
58  if (_use_supg)
59  test_fcn += _tauvel_SUPG[_qp][_pvar] * _grad_test[_i][_qp];
60  return test_fcn * (_mass[_qp][_pvar] - _mass_old[_qp][_pvar]) / _dt;
61 }
62 
63 Real
64 RichardsMassChange::computeQpJac(unsigned int wrt_num)
65 {
66  Real mass = _mass[_qp][_pvar];
67  Real mass_old = _mass_old[_qp][_pvar];
68  Real mass_prime = _phi[_j][_qp] * _dmass[_qp][_pvar][wrt_num];
69 
70  Real test_fcn = _test[_i][_qp];
71  Real test_fcn_prime = 0;
72 
73  if (_use_supg)
74  {
75  test_fcn += _tauvel_SUPG[_qp][_pvar] * _grad_test[_i][_qp];
76  test_fcn_prime +=
77  _grad_phi[_j][_qp] * (_dtauvel_SUPG_dgradv[_qp][_pvar][wrt_num] * _grad_test[_i][_qp]) +
78  _phi[_j][_qp] * _dtauvel_SUPG_dv[_qp][_pvar][wrt_num] * _grad_test[_i][_qp];
79  }
80  return (test_fcn * mass_prime + test_fcn_prime * (mass - mass_old)) / _dt;
81 }
82 
83 Real
85 {
86  return computeQpJac(_pvar);
87 }
88 
89 Real
91 {
93  return 0.0;
94  unsigned int dvar = _richards_name_UO.richards_var_num(jvar);
95  return computeQpJac(dvar);
96 }
validParams< RichardsMassChange >
InputParameters validParams< RichardsMassChange >()
Definition: RichardsMassChange.C:23
RichardsMassChange::_dtauvel_SUPG_dv
const MaterialProperty< std::vector< std::vector< RealVectorValue > > > & _dtauvel_SUPG_dv
deriv of tau_SUPG wrt variable
Definition: RichardsMassChange.h:68
RichardsVarNames::richards_var_num
unsigned int richards_var_num(unsigned int moose_var_num) const
the richards variable number
Definition: RichardsVarNames.C:99
RichardsMassChange::_dtauvel_SUPG_dgradv
const MaterialProperty< std::vector< std::vector< RealTensorValue > > > & _dtauvel_SUPG_dgradv
derivative of tau_SUPG wrt grad(variable)
Definition: RichardsMassChange.h:65
RichardsMassChange::_dmass
const MaterialProperty< std::vector< std::vector< Real > > > & _dmass
d(fluid mass_i)/d(var_j)
Definition: RichardsMassChange.h:56
RichardsVarNames
This holds maps between pressure_var or pressure_var, sat_var used in RichardsMaterial and kernels,...
Definition: RichardsVarNames.h:25
RichardsMassChange
Kernel = (mass - mass_old)/dt where mass = porosity*density*saturation This is used for the time deri...
Definition: RichardsMassChange.h:27
RichardsMassChange::_pvar
unsigned int _pvar
the Richards variable number eg, if richards name = 'pwater pgas poil', and this kernel is for pgas,...
Definition: RichardsMassChange.h:47
RichardsMassChange::_mass_old
const MaterialProperty< std::vector< Real > > & _mass_old
old value of fluid mass (or fluid masses in multiphase) at quadpoints
Definition: RichardsMassChange.h:59
RichardsMassChange::_use_supg
bool _use_supg
whether to use SUPG for this kernel (not recommended)
Definition: RichardsMassChange.h:50
RichardsMassChange::computeQpJacobian
virtual Real computeQpJacobian()
Definition: RichardsMassChange.C:84
RichardsMassChange::computeQpJac
Real computeQpJac(unsigned int wrt_num)
Derivative of residual with respect to wrt_num Richards variable This is used by both computeQpJacobi...
Definition: RichardsMassChange.C:64
RichardsMassChange::_tauvel_SUPG
const MaterialProperty< std::vector< RealVectorValue > > & _tauvel_SUPG
tau_SUPG
Definition: RichardsMassChange.h:62
RichardsMassChange::computeQpOffDiagJacobian
virtual Real computeQpOffDiagJacobian(unsigned int jvar)
Definition: RichardsMassChange.C:90
RichardsMassChange::RichardsMassChange
RichardsMassChange(const InputParameters &parameters)
Definition: RichardsMassChange.C:35
RichardsMassChange::_richards_name_UO
const RichardsVarNames & _richards_name_UO
holds info on the Richards variables
Definition: RichardsMassChange.h:40
registerMooseObject
registerMooseObject("RichardsApp", RichardsMassChange)
RichardsMassChange.h
RichardsMassChange::computeQpResidual
virtual Real computeQpResidual()
Definition: RichardsMassChange.C:55
RichardsVarNames::not_richards_var
bool not_richards_var(unsigned int moose_var_num) const
returns true if moose_var_num is not a richards var
Definition: RichardsVarNames.C:109
RichardsMassChange::_mass
const MaterialProperty< std::vector< Real > > & _mass
fluid mass (or fluid masses in multiphase) at quadpoints
Definition: RichardsMassChange.h:53