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