www.mooseframework.org
Q2PSaturationDiffusion.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 "Q2PSaturationDiffusion.h"
11 
13 
14 template <>
15 InputParameters
17 {
18  InputParameters params = validParams<Kernel>();
19  params.addRequiredParam<UserObjectName>(
20  "fluid_density",
21  "A RichardsDensity UserObject that defines the fluid density as a function of pressure.");
22  params.addRequiredParam<UserObjectName>(
23  "fluid_relperm",
24  "A RichardsRelPerm UserObject that defines the fluid relative permeability "
25  "as a function of water saturation (eg RichardsRelPermPower)");
26  params.addRequiredCoupledVar("porepressure_variable",
27  "The variable representing the porepressure");
28  params.addRequiredParam<Real>("fluid_viscosity", "The fluid dynamic viscosity");
29  params.addRequiredParam<Real>("diffusivity", "Diffusivity as a function of S");
30  params.addClassDescription("Diffusion part of the Flux according to Darcy-Richards flow. The "
31  "Variable of this Kernel must be the saturation.");
32  return params;
33 }
34 
35 Q2PSaturationDiffusion::Q2PSaturationDiffusion(const InputParameters & parameters)
36  : Kernel(parameters),
37  _density(getUserObject<RichardsDensity>("fluid_density")),
38  _relperm(getUserObject<RichardsRelPerm>("fluid_relperm")),
39  _pp(coupledValue("porepressure_variable")),
40  _pp_var_num(coupled("porepressure_variable")),
41  _viscosity(getParam<Real>("fluid_viscosity")),
42  _permeability(getMaterialProperty<RealTensorValue>("permeability")),
43  _diffusivity(getParam<Real>("diffusivity"))
44 {
45 }
46 
47 Real
49 {
50  Real coef = _diffusivity * _relperm.relperm(_u[_qp]) * _density.density(_pp[_qp]) / _viscosity;
51  return coef * _grad_test[_i][_qp] * (_permeability[_qp] * _grad_u[_qp]);
52 }
53 
54 Real
56 {
57  Real coef = _diffusivity * _relperm.relperm(_u[_qp]) * _density.density(_pp[_qp]) / _viscosity;
58  Real coefp = _diffusivity * _relperm.drelperm(_u[_qp]) * _density.density(_pp[_qp]) / _viscosity;
59  return coefp * _phi[_j][_qp] * _grad_test[_i][_qp] * (_permeability[_qp] * _grad_u[_qp]) +
60  coef * _grad_test[_i][_qp] * (_permeability[_qp] * _grad_phi[_j][_qp]);
61 }
62 
63 Real
65 {
66  if (jvar != _pp_var_num)
67  return 0.0;
68  Real coefp = _diffusivity * _relperm.relperm(_u[_qp]) * _density.ddensity(_pp[_qp]) / _viscosity;
69  return coefp * _phi[_j][_qp] * (_grad_test[_i][_qp] * (_permeability[_qp] * _grad_u[_qp]));
70 }
Q2PSaturationDiffusion::Q2PSaturationDiffusion
Q2PSaturationDiffusion(const InputParameters &parameters)
Definition: Q2PSaturationDiffusion.C:35
RichardsRelPerm
Base class for Richards relative permeability classes that provide relative permeability as a functio...
Definition: RichardsRelPerm.h:23
Q2PSaturationDiffusion::_pp
const VariableValue & _pp
porepressure at the quadpoints
Definition: Q2PSaturationDiffusion.h:47
RichardsRelPerm::relperm
virtual Real relperm(Real seff) const =0
relative permeability as a function of effective saturation This must be over-ridden in your derived ...
Q2PSaturationDiffusion::_relperm
const RichardsRelPerm & _relperm
water relative permeability
Definition: Q2PSaturationDiffusion.h:44
validParams< Q2PSaturationDiffusion >
InputParameters validParams< Q2PSaturationDiffusion >()
Definition: Q2PSaturationDiffusion.C:16
Q2PSaturationDiffusion::_viscosity
Real _viscosity
fluid viscosity
Definition: Q2PSaturationDiffusion.h:53
Q2PSaturationDiffusion::computeQpJacobian
virtual Real computeQpJacobian()
Definition: Q2PSaturationDiffusion.C:55
RichardsDensity::density
virtual Real density(Real p) const =0
fluid density as a function of porepressure This must be over-ridden in derived classes to provide an...
Q2PSaturationDiffusion::computeQpResidual
virtual Real computeQpResidual()
Definition: Q2PSaturationDiffusion.C:48
Q2PSaturationDiffusion::_pp_var_num
unsigned int _pp_var_num
variable number of the porepressure variable
Definition: Q2PSaturationDiffusion.h:50
Q2PSaturationDiffusion.h
Q2PSaturationDiffusion::_density
const RichardsDensity & _density
water density
Definition: Q2PSaturationDiffusion.h:41
RichardsDensity
Base class for fluid density as a function of porepressure The functions density, ddensity and d2dens...
Definition: RichardsDensity.h:24
Q2PSaturationDiffusion::_diffusivity
Real _diffusivity
Definition: Q2PSaturationDiffusion.h:58
RichardsDensity::ddensity
virtual Real ddensity(Real p) const =0
derivative of fluid density wrt porepressure This must be over-ridden in derived classes to provide a...
Q2PSaturationDiffusion
Diffusive Kernel that models nonzero capillary pressure in Q2P models The Variable of this Kernel sho...
Definition: Q2PSaturationDiffusion.h:28
RichardsRelPerm::drelperm
virtual Real drelperm(Real seff) const =0
derivative of relative permeability wrt effective saturation This must be over-ridden in your derived...
Q2PSaturationDiffusion::computeQpOffDiagJacobian
virtual Real computeQpOffDiagJacobian(unsigned int jvar)
Definition: Q2PSaturationDiffusion.C:64
registerMooseObject
registerMooseObject("RichardsApp", Q2PSaturationDiffusion)
Q2PSaturationDiffusion::_permeability
const MaterialProperty< RealTensorValue > & _permeability
permeability
Definition: Q2PSaturationDiffusion.h:56