www.mooseframework.org
PoroFullSatMaterial.C
Go to the documentation of this file.
1 /****************************************************************/
2 /* MOOSE - Multiphysics Object Oriented Simulation Environment */
3 /* */
4 /* All contents are licensed under LGPL V2.1 */
5 /* See LICENSE for full restrictions */
6 /****************************************************************/
7 
8 #include "PoroFullSatMaterial.h"
9 
10 template <>
11 InputParameters
13 {
14  InputParameters params = validParams<Material>();
15 
16  params.addRequiredParam<Real>(
17  "porosity0",
18  "The porosity of the material when porepressure and volumetric strain are zero. Eg, 0.1");
19  params.addRequiredRangeCheckedParam<Real>("biot_coefficient",
20  "biot_coefficient>=0 & biot_coefficient<=1",
21  "The Biot coefficient. Eg, 0.9");
22  params.addRequiredRangeCheckedParam<Real>(
23  "solid_bulk_compliance",
24  "solid_bulk_compliance>=0",
25  "The solid bulk compliance (the reciprocal of the solid bulk modulus)");
26  params.addRequiredRangeCheckedParam<Real>(
27  "fluid_bulk_compliance",
28  "fluid_bulk_compliance>=0",
29  "The fluid bulk compliance (the reciprocal of the fluid bulk modulus)");
30  params.addRequiredCoupledVar("porepressure", "The porepressure");
31  params.addRequiredCoupledVar(
32  "displacements",
33  "The displacements appropriate for the simulation geometry and coordinate system");
34  params.addParam<bool>("constant_porosity", false, "Set the porosity equal to porosity0 always");
35  params.addClassDescription("This Material is designed to calculate and store all the quantities "
36  "needed for the fluid-flow part of poromechanics, assuming a "
37  "fully-saturated, single-phase fluid with constant bulk modulus");
38  return params;
39 }
40 
41 PoroFullSatMaterial::PoroFullSatMaterial(const InputParameters & parameters)
42  : DerivativeMaterialInterface<Material>(parameters),
43 
44  _phi0(getParam<Real>("porosity0")),
45  _alpha(getParam<Real>("biot_coefficient")),
46  _one_over_K(getParam<Real>("solid_bulk_compliance")),
47  _one_over_Kf(getParam<Real>("fluid_bulk_compliance")),
48  _constant_porosity(getParam<bool>("constant_porosity")),
49 
50  _porepressure(coupledValue("porepressure")),
51  _porepressure_name(getVar("porepressure", 0)->name()),
52 
53  _ndisp(coupledComponents("displacements")),
54  _grad_disp(_ndisp),
55 
56  _vol_strain(declareProperty<Real>("volumetric_strain")),
57 
58  _biot_coefficient(declareProperty<Real>("biot_coefficient")),
59 
60  _porosity(declareProperty<Real>("porosity")),
61  _dporosity_dP(declarePropertyDerivative<Real>("porosity", _porepressure_name)),
62  _dporosity_dep(declarePropertyDerivative<Real>("porosity", "volumetric_strain")),
63 
64  _one_over_biot_modulus(declareProperty<Real>("one_over_biot_modulus")),
65  _done_over_biot_modulus_dP(
66  declarePropertyDerivative<Real>("one_over_biot_modulus", _porepressure_name)),
67  _done_over_biot_modulus_dep(
68  declarePropertyDerivative<Real>("one_over_biot_modulus", "volumetric_strain"))
69 {
70  for (unsigned int i = 0; i < _ndisp; ++i)
71  _grad_disp[i] = &coupledGradient("displacements", i);
72 }
73 
74 void
76 {
77  _vol_strain[_qp] = 0.0;
78 }
79 
80 void
82 {
84 
85  _vol_strain[_qp] = 0;
86  for (unsigned i = 0; i < _ndisp; ++i)
87  _vol_strain[_qp] += (*_grad_disp[i])[_qp](i); // cartesian coordinates?
88 
90  {
91  _porosity[_qp] = _phi0;
92  _dporosity_dP[_qp] = 0;
93  _dporosity_dep[_qp] = 0;
94 
96  (1 - _alpha) * (_alpha - _porosity[_qp]) * _one_over_K + _porosity[_qp] * _one_over_Kf;
99  }
100  else
101  {
102  _porosity[_qp] = _alpha +
103  (_phi0 - _alpha) * std::exp(-(1 - _alpha) * _one_over_K * _porepressure[_qp] -
104  _vol_strain[_qp]);
105  _dporosity_dP[_qp] =
106  (_phi0 - _alpha) * (_alpha - 1) * _one_over_K *
107  std::exp(-(1 - _alpha) * _one_over_K * _porepressure[_qp] - _vol_strain[_qp]);
108  _dporosity_dep[_qp] =
109  -(_phi0 - _alpha) *
110  std::exp(-(1 - _alpha) * _one_over_K * _porepressure[_qp] - _vol_strain[_qp]);
111 
113  (1 - _alpha) * (_alpha - _porosity[_qp]) * _one_over_K + _porosity[_qp] * _one_over_Kf;
115  -(1 - _alpha) * _dporosity_dP[_qp] * _one_over_K + _dporosity_dP[_qp] * _one_over_Kf;
117  -(1 - _alpha) * _dporosity_dep[_qp] * _one_over_K + _dporosity_dep[_qp] * _one_over_Kf;
118  }
119 }
virtual void initQpStatefulProperties()
unsigned int _ndisp
number of displacement variables supplied
Real _one_over_K
1/K, where K is the solid bulk modulus. Usually 1/K = C_iijj, where C is the compliance matrix: strai...
virtual void computeQpProperties()
MaterialProperty< Real > & _one_over_biot_modulus
1/M, where M is the Biot modulus
bool _constant_porosity
whether to use constant porosity (set _porosity = _phi0 always)
MaterialProperty< Real > & _biot_coefficient
Biot coefficient.
MaterialProperty< Real > & _done_over_biot_modulus_dep
d(1/M)/d(volumetric_strain)
Real _alpha
Biot coefficient.
std::vector< const VariableGradient * > _grad_disp
grad(displacement)
const VariableValue & _porepressure
porepressure variable
Real _one_over_Kf
1/Kf, where Kf is the fluid bulk modulus.
MaterialProperty< Real > & _vol_strain
volumetric strain = strain_ii
Real _phi0
porosity at zero porepressure and volumetric strain
MaterialProperty< Real > & _porosity
porosity
MaterialProperty< Real > & _dporosity_dep
d(porosity)/d(volumetric_strain)
InputParameters validParams< PoroFullSatMaterial >()
MaterialProperty< Real > & _dporosity_dP
d(porosity)/d(porepressure)
MaterialProperty< Real > & _done_over_biot_modulus_dP
d(1/M)/d(porepressure)
PoroFullSatMaterial(const InputParameters &parameters)