www.mooseframework.org
RichardsMaterial.h
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 #pragma once
11 
12 #include "Material.h"
13 
14 #include "RichardsVarNames.h"
15 #include "RichardsDensity.h"
16 #include "RichardsRelPerm.h"
17 #include "RichardsSeff.h"
18 #include "RichardsSat.h"
19 #include "RichardsSUPG.h"
20 
21 // Forward Declarations
22 class RichardsMaterial;
23 
24 template <>
25 InputParameters validParams<RichardsMaterial>();
26 
27 class RichardsMaterial : public Material
28 {
29 public:
30  RichardsMaterial(const InputParameters & parameters);
31 
32 protected:
35 
37  const VariableValue & _por_change;
38  const VariableValue & _por_change_old;
39 
41  RealTensorValue _material_perm;
42 
44  RealVectorValue _material_gravity;
45 
47  MaterialProperty<Real> & _porosity_old;
48  MaterialProperty<Real> & _porosity;
49  MaterialProperty<RealTensorValue> & _permeability;
50  MaterialProperty<RealVectorValue> & _gravity;
51 
54  unsigned int _num_p;
55 
56  std::vector<const RichardsRelPerm *> _material_relperm_UO;
57  std::vector<const RichardsSeff *> _material_seff_UO;
58  std::vector<const RichardsSat *> _material_sat_UO;
59  std::vector<const RichardsDensity *> _material_density_UO;
60  std::vector<const RichardsSUPG *> _material_SUPG_UO;
61 
62  std::vector<const VariableValue *> _perm_change;
63 
64  virtual void computeProperties();
65 
73  void computePandSeff();
74 
81  void computeDerivedQuantities(unsigned int qp);
82 
88  void compute2ndDerivedQuantities(unsigned int qp);
89 
95  void zeroSUPG(unsigned int qp);
96 
98  void computeSUPG();
99 
100 private:
103 
104  std::vector<Real> _material_viscosity;
105 
107  MaterialProperty<std::vector<Real>> & _pp_old;
108 
110  MaterialProperty<std::vector<Real>> & _pp;
111 
113  MaterialProperty<std::vector<std::vector<Real>>> & _dpp_dv;
114 
116  MaterialProperty<std::vector<std::vector<std::vector<Real>>>> & _d2pp_dv;
117 
119  MaterialProperty<std::vector<Real>> & _viscosity;
120 
122  MaterialProperty<std::vector<Real>> & _density_old;
123 
125  MaterialProperty<std::vector<Real>> & _density;
126 
128  MaterialProperty<std::vector<std::vector<Real>>> & _ddensity_dv;
129 
131  MaterialProperty<std::vector<Real>> & _seff_old;
132 
134  MaterialProperty<std::vector<Real>> & _seff; // effective saturation
135 
137  MaterialProperty<std::vector<std::vector<Real>>> & _dseff_dv; // d(seff)/dp
138 
140  MaterialProperty<std::vector<std::vector<std::vector<Real>>>> & _d2seff_dv;
141 
143  MaterialProperty<std::vector<Real>> & _sat_old;
144 
146  MaterialProperty<std::vector<Real>> & _sat;
147 
149  MaterialProperty<std::vector<std::vector<Real>>> & _dsat_dv;
150 
152  MaterialProperty<std::vector<Real>> & _rel_perm;
153 
155  MaterialProperty<std::vector<std::vector<Real>>> & _drel_perm_dv;
156 
158  MaterialProperty<std::vector<Real>> & _mass_old;
159 
161  MaterialProperty<std::vector<Real>> & _mass;
162 
164  MaterialProperty<std::vector<std::vector<Real>>> & _dmass;
165 
167  MaterialProperty<std::vector<RealVectorValue>> & _flux_no_mob;
168 
170  MaterialProperty<std::vector<std::vector<RealVectorValue>>> & _dflux_no_mob_dv;
171 
173  MaterialProperty<std::vector<std::vector<RealTensorValue>>> & _dflux_no_mob_dgradv;
174 
176  MaterialProperty<std::vector<RealVectorValue>> & _flux;
177 
179  MaterialProperty<std::vector<std::vector<RealVectorValue>>> & _dflux_dv;
180 
182  MaterialProperty<std::vector<std::vector<RealTensorValue>>> & _dflux_dgradv;
183 
185  MaterialProperty<std::vector<std::vector<std::vector<RealVectorValue>>>> & _d2flux_dvdv;
186 
188  MaterialProperty<std::vector<std::vector<std::vector<RealTensorValue>>>> & _d2flux_dgradvdv;
189 
191  MaterialProperty<std::vector<std::vector<std::vector<RealTensorValue>>>> & _d2flux_dvdgradv;
192 
193  MaterialProperty<std::vector<RealVectorValue>> & _tauvel_SUPG; // tauSUPG * velSUPG
194  MaterialProperty<std::vector<std::vector<RealTensorValue>>> &
195  _dtauvel_SUPG_dgradp; // d (_tauvel_SUPG_i)/d(_grad_variable_j)
196  MaterialProperty<std::vector<std::vector<RealVectorValue>>> &
197  _dtauvel_SUPG_dp; // d (_tauvel_SUPG_i)/d(variable_j)
198 
200  std::vector<std::vector<std::vector<Real>>> _d2density;
201 
203  std::vector<std::vector<std::vector<Real>>> _d2rel_perm_dv;
204 
205  std::vector<const VariableValue *> _pressure_vals;
206  std::vector<const VariableValue *> _pressure_old_vals;
207  std::vector<const VariableGradient *> _grad_p;
208 
216  void zero2ndDerivedQuantities(unsigned int qp);
217 };
218 
RichardsMaterial::_d2density
std::vector< std::vector< std::vector< Real > > > _d2density
d^2(density)/dp_j/dP_k - used in various derivative calculations
Definition: RichardsMaterial.h:200
RichardsMaterial::_flux
MaterialProperty< std::vector< RealVectorValue > > & _flux
fluid flux (a vector of fluxes for multicomponent)
Definition: RichardsMaterial.h:176
RichardsMaterial::zeroSUPG
void zeroSUPG(unsigned int qp)
Assigns and zeroes the MaterialProperties associated with SUPG.
Definition: RichardsMaterial.C:468
RichardsMaterial::_d2flux_dgradvdv
MaterialProperty< std::vector< std::vector< std::vector< RealTensorValue > > > > & _d2flux_dgradvdv
d^2(Richards flux_i)/d(grad(variable_j))/d(variable_k), here flux_i is the i_th flux,...
Definition: RichardsMaterial.h:188
RichardsMaterial::_material_perm
RealTensorValue _material_perm
permeability as entered by the user
Definition: RichardsMaterial.h:41
RichardsMaterial::_porosity_old
MaterialProperty< Real > & _porosity_old
material properties
Definition: RichardsMaterial.h:47
RichardsMaterial::_trace_perm
Real _trace_perm
trace of permeability tensor
Definition: RichardsMaterial.h:102
RichardsMaterial::computeProperties
virtual void computeProperties()
Definition: RichardsMaterial.C:575
RichardsMaterial::_dtauvel_SUPG_dp
MaterialProperty< std::vector< std::vector< RealVectorValue > > > & _dtauvel_SUPG_dp
Definition: RichardsMaterial.h:197
RichardsMaterial::computePandSeff
void computePandSeff()
computes the quadpoint values of the porepressure(s) and effective saturation(s), and their derivativ...
Definition: RichardsMaterial.C:211
RichardsMaterial::_dflux_dv
MaterialProperty< std::vector< std::vector< RealVectorValue > > > & _dflux_dv
d(Richards flux_i)/d(variable_j), here flux_i is the i_th flux, which is itself a RealVectorValue
Definition: RichardsMaterial.h:179
RichardsMaterial::_d2flux_dvdv
MaterialProperty< std::vector< std::vector< std::vector< RealVectorValue > > > > & _d2flux_dvdv
d^2(Richards flux_i)/d(variable_j)/d(variable_k), here flux_i is the i_th flux, which is itself a Rea...
Definition: RichardsMaterial.h:185
RichardsMaterial::_material_SUPG_UO
std::vector< const RichardsSUPG * > _material_SUPG_UO
Definition: RichardsMaterial.h:60
RichardsMaterial::computeDerivedQuantities
void computeDerivedQuantities(unsigned int qp)
Computes the "derived" quantities — those that depend on porepressure(s) and effective saturation(s) ...
Definition: RichardsMaterial.C:270
RichardsMaterial::_material_sat_UO
std::vector< const RichardsSat * > _material_sat_UO
Definition: RichardsMaterial.h:58
RichardsMaterial::_dflux_no_mob_dv
MaterialProperty< std::vector< std::vector< RealVectorValue > > > & _dflux_no_mob_dv
d(_flux_no_mob_i)/d(variable_j)
Definition: RichardsMaterial.h:170
RichardsVarNames
This holds maps between pressure_var or pressure_var, sat_var used in RichardsMaterial and kernels,...
Definition: RichardsVarNames.h:25
RichardsMaterial::_dseff_dv
MaterialProperty< std::vector< std::vector< Real > > > & _dseff_dv
d(Seff_i)/d(variable_j)
Definition: RichardsMaterial.h:137
RichardsMaterial::_seff
MaterialProperty< std::vector< Real > > & _seff
effective saturation (vector of effective saturations in case of multiphase)
Definition: RichardsMaterial.h:134
RichardsMaterial::computeSUPG
void computeSUPG()
Computes the tauvel_SUPG and its derivatives.
Definition: RichardsMaterial.C:481
RichardsMaterial::_permeability
MaterialProperty< RealTensorValue > & _permeability
Definition: RichardsMaterial.h:49
RichardsSat.h
RichardsMaterial::_dflux_no_mob_dgradv
MaterialProperty< std::vector< std::vector< RealTensorValue > > > & _dflux_no_mob_dgradv
d(_flux_no_mob_i)/d(grad(variable_j))
Definition: RichardsMaterial.h:173
RichardsMaterial::_material_relperm_UO
std::vector< const RichardsRelPerm * > _material_relperm_UO
Definition: RichardsMaterial.h:56
RichardsMaterial::_d2rel_perm_dv
std::vector< std::vector< std::vector< Real > > > _d2rel_perm_dv
d^2(relperm_i)/dP_j/dP_k - used in various derivative calculations
Definition: RichardsMaterial.h:203
RichardsMaterial::_d2seff_dv
MaterialProperty< std::vector< std::vector< std::vector< Real > > > > & _d2seff_dv
d^2(Seff_i)/d(variable_j)/d(variable_k)
Definition: RichardsMaterial.h:140
RichardsMaterial::_num_p
unsigned int _num_p
Definition: RichardsMaterial.h:54
RichardsMaterial::_drel_perm_dv
MaterialProperty< std::vector< std::vector< Real > > > & _drel_perm_dv
d(relperm_i)/d(variable_j)
Definition: RichardsMaterial.h:155
RichardsMaterial::_dsat_dv
MaterialProperty< std::vector< std::vector< Real > > > & _dsat_dv
d(saturation_i)/d(variable_j)
Definition: RichardsMaterial.h:149
RichardsMaterial::_flux_no_mob
MaterialProperty< std::vector< RealVectorValue > > & _flux_no_mob
permeability*(grad(P) - density*gravity) (a vector of these for multicomponent)
Definition: RichardsMaterial.h:167
RichardsMaterial::_pressure_vals
std::vector< const VariableValue * > _pressure_vals
Definition: RichardsMaterial.h:205
RichardsMaterial::_viscosity
MaterialProperty< std::vector< Real > > & _viscosity
fluid viscosity (or viscosities in the multiphase case)
Definition: RichardsMaterial.h:119
RichardsVarNames.h
RichardsMaterial::_dtauvel_SUPG_dgradp
MaterialProperty< std::vector< std::vector< RealTensorValue > > > & _dtauvel_SUPG_dgradp
Definition: RichardsMaterial.h:195
RichardsMaterial::_sat
MaterialProperty< std::vector< Real > > & _sat
saturation (vector of saturations in case of multiphase)
Definition: RichardsMaterial.h:146
RichardsMaterial::_seff_old
MaterialProperty< std::vector< Real > > & _seff_old
old effective saturation
Definition: RichardsMaterial.h:131
validParams< RichardsMaterial >
InputParameters validParams< RichardsMaterial >()
Definition: RichardsMaterial.C:22
RichardsMaterial::_material_gravity
RealVectorValue _material_gravity
gravity as entered by user
Definition: RichardsMaterial.h:44
RichardsMaterial::_dpp_dv
MaterialProperty< std::vector< std::vector< Real > > > & _dpp_dv
d(porepressure_i)/d(variable_j)
Definition: RichardsMaterial.h:113
RichardsMaterial::_perm_change
std::vector< const VariableValue * > _perm_change
Definition: RichardsMaterial.h:62
RichardsMaterial::_grad_p
std::vector< const VariableGradient * > _grad_p
Definition: RichardsMaterial.h:207
RichardsMaterial::_density
MaterialProperty< std::vector< Real > > & _density
fluid density (or densities for multiphase problems)
Definition: RichardsMaterial.h:125
RichardsMaterial::_porosity
MaterialProperty< Real > & _porosity
Definition: RichardsMaterial.h:48
RichardsMaterial::_mass
MaterialProperty< std::vector< Real > > & _mass
fluid mass (a vector of masses for multicomponent)
Definition: RichardsMaterial.h:161
RichardsMaterial::_d2pp_dv
MaterialProperty< std::vector< std::vector< std::vector< Real > > > > & _d2pp_dv
d^2(porepressure_i)/d(variable_j)/d(variable_k)
Definition: RichardsMaterial.h:116
RichardsSeff.h
RichardsMaterial::_por_change
const VariableValue & _por_change
porosity changes. if not entered they default to zero
Definition: RichardsMaterial.h:37
RichardsMaterial::_dflux_dgradv
MaterialProperty< std::vector< std::vector< RealTensorValue > > > & _dflux_dgradv
d(Richards flux_i)/d(grad(variable_j)), here flux_i is the i_th flux, which is itself a RealVectorVal...
Definition: RichardsMaterial.h:182
RichardsMaterial::_material_viscosity
std::vector< Real > _material_viscosity
Definition: RichardsMaterial.h:104
RichardsMaterial::_rel_perm
MaterialProperty< std::vector< Real > > & _rel_perm
relative permeability (vector of relative permeabilities in case of multiphase)
Definition: RichardsMaterial.h:152
RichardsMaterial::_dmass
MaterialProperty< std::vector< std::vector< Real > > > & _dmass
d(fluid mass_i)/dP_j (a vector of masses for multicomponent)
Definition: RichardsMaterial.h:164
RichardsMaterial::_por_change_old
const VariableValue & _por_change_old
Definition: RichardsMaterial.h:38
RichardsMaterial::_gravity
MaterialProperty< RealVectorValue > & _gravity
Definition: RichardsMaterial.h:50
RichardsMaterial::_tauvel_SUPG
MaterialProperty< std::vector< RealVectorValue > > & _tauvel_SUPG
Definition: RichardsMaterial.h:193
RichardsRelPerm.h
RichardsMaterial::_d2flux_dvdgradv
MaterialProperty< std::vector< std::vector< std::vector< RealTensorValue > > > > & _d2flux_dvdgradv
d^2(Richards flux_i)/d(variable_j)/d(grad(variable_k)), here flux_i is the i_th flux,...
Definition: RichardsMaterial.h:191
RichardsMaterial::_ddensity_dv
MaterialProperty< std::vector< std::vector< Real > > > & _ddensity_dv
d(density_i)/d(variable_j)
Definition: RichardsMaterial.h:128
RichardsMaterial::_material_density_UO
std::vector< const RichardsDensity * > _material_density_UO
Definition: RichardsMaterial.h:59
RichardsDensity.h
RichardsMaterial::_mass_old
MaterialProperty< std::vector< Real > > & _mass_old
old value of fluid mass (a vector of masses for multicomponent)
Definition: RichardsMaterial.h:158
RichardsMaterial::zero2ndDerivedQuantities
void zero2ndDerivedQuantities(unsigned int qp)
Zeroes 2nd derivatives of the flux.
Definition: RichardsMaterial.C:371
RichardsMaterial::_sat_old
MaterialProperty< std::vector< Real > > & _sat_old
old saturation
Definition: RichardsMaterial.h:143
RichardsMaterial::_material_seff_UO
std::vector< const RichardsSeff * > _material_seff_UO
Definition: RichardsMaterial.h:57
RichardsMaterial::_pp
MaterialProperty< std::vector< Real > > & _pp
porepressure(s)
Definition: RichardsMaterial.h:110
RichardsMaterial::_pressure_old_vals
std::vector< const VariableValue * > _pressure_old_vals
Definition: RichardsMaterial.h:206
RichardsMaterial::_pp_old
MaterialProperty< std::vector< Real > > & _pp_old
old values of porepressure(s)
Definition: RichardsMaterial.h:107
RichardsMaterial::_material_por
Real _material_por
porosity as entered by the user
Definition: RichardsMaterial.h:34
RichardsMaterial::compute2ndDerivedQuantities
void compute2ndDerivedQuantities(unsigned int qp)
Computes 2nd derivatives of the flux.
Definition: RichardsMaterial.C:392
RichardsMaterial
Definition: RichardsMaterial.h:27
RichardsMaterial::_density_old
MaterialProperty< std::vector< Real > > & _density_old
old fluid density (or densities for multiphase problems)
Definition: RichardsMaterial.h:122
RichardsMaterial::RichardsMaterial
RichardsMaterial(const InputParameters &parameters)
Definition: RichardsMaterial.C:67
RichardsMaterial::_richards_name_UO
const RichardsVarNames & _richards_name_UO
The variable names userobject for the Richards variables.
Definition: RichardsMaterial.h:53
RichardsSUPG.h