Professional Documents
Culture Documents
Mandel Terzaghi Moose
Mandel Terzaghi Moose
Notation
The notation used in this article is defined below. For more explanation, see the documentation for standard TensorMechanics and the PorousFlow module (Richards equation).
xi , coordinate. TensorMechanics is set up for 3D simulations, although the material in this article holds for any number of dimensions. A derivative with respect to xi is denoted by
∇i .
t, time. A dot denotes a derivative with respect to t.
ui , the components of displacement.
vi = dui /dt, the components of velocity.
ϵij , components of strain: ϵij = (∇i uj + ∇j ui )/2. The equations below may be generalised to large strains in the usual TensorMechanics way (see the TensorMechanics
articles).
ϕ = Vf /V , the porosity of the material. This is a Material property, and it evolves with changes in stress and porepressure.
S , the fluid saturation. For a single-phase fluid, there is just one saturation. However, for a multi-phase fluid each phase has a saturation, and ∑phases Sphases = 1. In the
single-phase case, the term "fully saturated" means S = 1, and this is a common situation in poromechanics.
Pf , the poro-mechanics porepressure. For a single-phase fluid, Pf is just the fluid's porepressure. However, for multi-phase fluid, it is standard to use
Pf = ∑phases Sphase Pphase , where S and P are the saturations and pressures of the phase.
ρ, the mass density of a fluid. For the single-phase situation, there will be just one ρ, while for the multi-phase situation each phase has a separate density. The mass density is
usually a function of the fluid's porepressure.
K f , the bulk modulus of the fluid. It is common in poromechanics with a single-phase fluid to assume the fluid has a constant bulk modulus, K f , so that ρ = ρ0 exp(Pf /K f ).
This assumption may be used in the poromechanics Kernels and Materials, or a more general form may be used.
ρmat , the mass density of the material, also called the "undrained density" in poromechanics literature. This includes the density of the "dry" material (without the fluid), and the
density of the fluid: ρ mat = (1 − ϕ)ρ dry + ϕρ fluid. Here (1 − ϕ)ρ dry is the "drained" density of the media, i.e., the density in the absence of any fluid. The ρ fluid density is of
the fluid, e.g. ∑ phases Sphase ρ phase .
σ tot , the total stress. An externally applied mechanical force will create a nonzero σ tot , and conversely, resolving σijtot into forces yields the forces on nodes in the finite-element
mesh.
α, the Biot coefficient. This obeys 0 ≤ α ≤ 1. For a multi-phase, the Biot coefficient is often chosen to be α = 1. The Biot coefficient is interpreted physically by the following. If,
by pumping fluid into a porous material, the porepressure is increased by ΔPf , and at the same time a mechanical external force applies an incremental pressure equaling αΔPf ,
then the volume of the porous solid remains static. (During this process, the porevolume will change, however, as quantified below.)
σ eff , the effective stress. σijeff = σijtot + αδij Pf . Effective stress, and not total stress, enters into the equations of linear elasticity. Effective stress, and not total stress, enters into
the the equations of plasticity. Therefore, MOOSE uses effective stress, and not total stress, internally. If you need to input or output total stress, you must subtract αδij Pf from
MOOSE's stress.
Cijkl , components of the compliance tensor. In linear elasticity ϵij = Cijkl σijeff . Cijkl is often called the "drained" compliance tensor.
eff
K , the solid bulk modulus. K is often called the "drained" bulk modulus. If ϵij = Cijkl σkl , then 1/K = δij δkl Cijkl . It is common in poroelasticity to introduce the "grain bulk
modulus", which is 1/K g = (1 − α)/K and describes the compressibility of individual grains of the pororous material, and this quantity appears in the Biot Modulus M , and
1 of 10 27-11-2015 08:40
MOOSE Framework - PoroMechanics http://mooseframework.org/wiki/PhysicsModules/...
Equations
In a Section below, some of the following equations are motivated, derived and explained. Here the equations are simply enumerated with little discussion.
Mechanical Equations
Conservation of linear momentum reads
∂vj
∇i σijeff − α∇j Pf + ρmat bj = ρmat .
∂t
Notice that this is exactly the usual TensorMechanics equation, but it has been expressed in terms of effective stress instead of total stress. Conservation of angular momentum reads
σijeff = σjieff , and the conservation of energy equation is unimportant here. The constitutive law is:
These equations are very similar to standard solid mechanics, and may be obviously generalised to large strains, and plasticity, with the important observation that only the effective
stress, σ eff , enters the constitutive law, plasticity, insitu stresses, etc, and not the total stress. The only exception to this rule is that when applying Neumann BCs for the displacement
variables, the total stress is being specified.
Evolution of Porosity
The porosity evolves according to
α−1
ϕ = α − C exp[ Pf − ϵii ] .
K
Fluid Equations
For a single, unsaturated fluid:
= ∇i [
∂ ∂ϵii ρkij krel
ϕρS + ϕρS (∇j Pf − ρgj )] + SourceDensity .
∂t ∂t μ
For a multi-phase fluid, each phase, ph, obeys an equation similar to the single-phase case:
= ∇i [
ph,rel
∂ ∂ϵii ρph kij k
ϕρph S ph + ϕρph S ph (∇j P ph − ρph gj )] + SourceDensityph .
∂t ∂t μph
Poromechanics is commonly used with a fully-saturated (S = 1), single-phase fluid that has constant bulk modulus, and in this case, the fluid equation reads:
Pf + αϵ˙ii = ∇i [
1 ˙ kij
(∇j Pf − ρ0 gj )]
M μ
This has been derived from the single-phase equation, above, by using the evolution equation for porosity. The whole equation has been divided by ρ , as is customary, and only ρ 0
appears in the gravitational term, as is also customary. Note that the residual for this equation will often be much smaller than the ones for displacement, since M is often much larger
than stress. Therefore, judicious use of MOOSE's "scaling" parameter is necessary to obtain accurate results.
2 of 10 27-11-2015 08:40
MOOSE Framework - PoroMechanics http://mooseframework.org/wiki/PhysicsModules/...
Evolution of porosity
The evolution of porosity is fundamental to the coupling between flow and solid mechanics. Denote the change of a quantity, q, by Δq. Recall that the porosity is defined by
ϕ = Vf /V , and that, by definition of the effective stress,
ΔVf
= Aij (σijtot + Bδij ΔPf ) .
Vf
It is not too difficult, using the Betti-Maxwell reciprocal theorem, to establish that Aij = αCijkl δkl /ϕ, and that B = 1 + ϕ − ϕ/α. Substituting these into the RHS of the above
equation, and rearranging yields,
ΔVf α δ δ C
tot + αδ ΔP ] + ij kl ijkl (1 − α)(α − ϕ)ΔP
= δij Cijkl [Δσkl kl f f
Vf ϕ ϕ
∂
∫ ϕρS .
∂t V
When taking the derivative through the integral, it must be remembered that V is changing. This change results in the aforementioned term.
Miscellaneous formulae
3 of 10 27-11-2015 08:40
MOOSE Framework - PoroMechanics http://mooseframework.org/wiki/PhysicsModules/...
K u = K + α2 M .
Skempton coefficient:
Ku − K
B= .
αK u
αM
B= .
Ku
Drained Poisson's ratio:
3K − 2G
ν= .
6K + 2G
Undrained Poisson's ratio:
3K u − 2G
νu = .
6K u + 2G
Drained bulk modulus and shear modulus in terms of undrained Young and Poisson, and vice versa:
E E 9KG 3K − 2G
K= and G = vice versa E = and ν = .
3(1 − 2ν) 2(1 + ν) 3K + G 6K + 2G
Drained bulk modulus and shear modulus in terms of Lame parameters (λ and G ), and vice versa:
2G 2G
K =λ+ and G = G vice versa λ = K − and G = G .
3 3
Young and Poisson in terms of Lame parameters (λ and G ), and vice versa:
G(3λ + 2G) λ Eν E
E= and ν = vice versa λ = and G = .
λ+G 2(λ + G) (1 + ν)(1 − 2ν) 2(1 + ν)
PoroMechanicsCoupling Kernel
This Kernel implements the term
−αPf ∇i ψ .
Here α is the Biot Coefficient, which must be provided by a Material (for instance a GenericConstantMaterial with biot_coefficient being a prop_name, or PoroFullSatMaterial), Pf is the
pore pressure (the name of which needs to be specified in the input file), and ψ is a test function. Therefore, this Kernel may be added to the StressDivergenceTensor Kernel to obtain
eff
the expression ∇i σ ij − α∇j Pf . The Kernels section of a typical input file looks like:
4 of 10 27-11-2015 08:40
MOOSE Framework - PoroMechanics http://mooseframework.org/wiki/PhysicsModules/...
[Kernels]
[./grad_stress_x]
type = StressDivergenceTensors
disp_x = disp_x
disp_y = disp_y
disp_z = disp_z
variable = disp_x
component = 0
[../]
[./grad_stress_y]
type = StressDivergenceTensors
disp_x = disp_x
disp_y = disp_y
disp_z = disp_z
variable = disp_y
component = 1
[../]
[./grad_stress_z]
type = StressDivergenceTensors
disp_x = disp_x
disp_y = disp_y
disp_z = disp_z
variable = disp_z
component = 2
[../]
[./poro_x]
type = PoroMechanicsCoupling
variable = disp_x
porepressure = porepressure
component = 0
[../]
[./poro_y]
type = PoroMechanicsCoupling
variable = disp_y
porepressure = porepressure
component = 1
[../]
[./poro_z]
type = PoroMechanicsCoupling
variable = disp_z
porepressure = porepressure
component = 2
[../]
...
[]
PoroMechanics Action
The PoroMechanics Action is a shorthand for the 6 Kernels written above (the 3 StressDivergenceTensor and 3 PoroMechanicsCoupling Kernels). Hence the above Kernel block may be
replaced by
5 of 10 27-11-2015 08:40
MOOSE Framework - PoroMechanics http://mooseframework.org/wiki/PhysicsModules/...
[Kernels]
[./PoroMechanics]
disp_x = disp_x
disp_y = disp_y
disp_z = disp_z
porepressure = porepressure
[../]
...
[]
```puppet
This is assuming your Variables are named disp_x, disp_y, disp_z and porepressure.
### PoroFullSatTimeDerivative
Note that because M ≫ |σ| and M ≫ Pf in many simulations, it is appropriate to set MOOSE's scaling parameter to ensure the residual for Pf is approximately as large as the
residual for the displacement, for instance:
[Variables]
[./porepressure]
scaling = 1E3
[../]
...
[]
PoroFullSatMaterial Material
This Material calculates porosity, Biot Modulus and volumetric strain rate, and their derivatives for use in Kernels, as well as the Biot coefficient. These are used in simulations involving
a fully-saturated single-phase fluid. Many parameters are required: a typical use is:
[Materials]
[./poro_material]
type = PoroFullSatMaterial
disp_x = disp_x
disp_y = disp_y
disp_z = disp_z
porepressure = porepressure
porosity0 = 0.1
biot_coefficient = 0.6
solid_bulk_compliance = 0.25
fluid_bulk_compliance = 0.125
[../]
...
[]
Here porosity0 is the porosity at zero volumetric strain and zero porepressure.
6 of 10 27-11-2015 08:40
MOOSE Framework - PoroMechanics http://mooseframework.org/wiki/PhysicsModules/...
Pf = t .
Zero mechanical pressure is applied to the sample's exterior, so that no Neumann BCs are needed on the sample. No fluid flow occurs since the porepressure is increased uniformly
throughout the sample, so only the only Kernels needed are the StressDivergenceTensors and the PoroMechanicsCoupling.
eff
The effective stresses should then evolve as σ ij = αtδij , and the volumetric strain ϵ00 + ϵ11 + ϵ22 = αt/K . MOOSE produces this result correctly.
Jacobian of PoroFullSatTimeDerivative
This is tested using PETSc's snes type = test.
Under these conditions, and denoting the height (z length) of the sample by L:
Pf = −αM vz t/L .
eff
σxx = (K − 23 G)vz t/L .
eff = (K + 4 G)v t/L .
σzz 3 z
Denoting the strength of the source by s (units are s−1 ), the expected result is
Pf = Mst
σijeff = 0 .
Denoting the strength of the source by s (units are s−1 ), the expected result is
αMst
ϵzz = .
K + 4G/3 + α2 M
Pf = M(st − αϵzz ) .
eff
σxx = (K − 2G/3)ϵzz .
eff = (K + 4G/3)ϵ .
σzz zz
A single-element fully-saturated sample has impermeable boundaries. The sample is squeezed by a uniform mechanical pressure, and the rise in porepressure is observed.
tot
Denoting the mechanical pressure by P , the expected results are
Pf = BP tot ,
The mechanical pressure is applied using Neumann BCs for the displacement variables, since recall that these set the total stress, not the effective stress. MOOSE produces the
expected results correctly.
This is a classic test. See, for example, Section 2.2 of the online manuscript: Arnold Verruijt "Theory and Problems of Poroelasticity" Delft University of Technology 2013. But note that
the "sigma" in that paper is the negative of the stress in TensorMechanics. Denote the sample's height (z-length) by h. Define
αqM
p0 = .
S(K + 4G/3) + α2 M
This is the porepressure that results from the instantaneous application of q: MOOSE calculates this correctly. The solution for porepressure is
) exp(−(2n − 1)2 π 2
4p0 ∞ (−1)n−1 (2n − 1)πz
).
ct
Pf = ∑ cos(
π n=1 2n − 1 2h 4h2
In this equation, c is the "consolidation coefficient": c = k(K + 4G/3)M/(K + 4G/3 + α2 M), where the permeability tensor is kij = diag(k, k, k). The so-called degree-
of-consolidation is defined by
uz − u0z
U= 0
,
u∞
z − uz
where u z is the vertical displacement of the top surface (downwards is positive), and u 0z is the instantaneous displacement due to the instantaneous application of q, and u ∞
z is the
final displacement. This has solution
8 ∞ 1
).
ct
U =1− ∑ exp(−(2n − 1)2 π 2
π 2 n=1 (2n − 1)2 4h2
MOOSE produces the expected results correctly, as may be seen from the Figures.
As is common in the literature, this is simulated by considering the quarter-sample, 0 ≤ x ≤ a and 0 ≤ y ≤ b, with impermeable, roller
BCs at x = 0 and y = 0 and y = b. Porepressure is fixed at zero on x = a. Porepressure and displacement are initialised to zero. Then
the top (y = b) is moved downwards with prescribed velocity, so that the total force that is induced by this downwards velocity is fixed. The
velocity is worked out by solving Mandel's problem analytically, and the total force is monitored in the simulation to check that it indeed
remains constant.
8 of 10 27-11-2015 08:40
MOOSE Framework - PoroMechanics http://mooseframework.org/wiki/PhysicsModules/...
aligned with the z axis is instanteously excavated. The borehole boundary is stress-free and allowed to freely drain. This problem is analysed /329/940d8ccb17a7ed91a3f10d7b2e728ed0
using plane-strain conditions (no z displacement). /terzaghi_u.png)
Because realistic parameters are chosen (the drained bulk modulus, the shear modulus, and the fluid bulk modulus are of order GPa, while
the stresses and porepressures are of order MPa) the residual for porepressure is much smaller than the residuals for the displacements.
Therefore to ensure an accurate solution, a large scaling parameter must be chosen for the porepressure, as mentioned above. Also note
that MOOSE's insitu stresses are effective stresses, not total stresses, but the solution in the above paper is expressed in terms of total
stresses.
MOOSE produces the expected results, as shown in the figures. These figures were generated for borehole radius a = 1, initial
porepressure 1MPa, insitu σ xx = −2MPa, insitu σyy = −4MPa. The initial increase of porepressure at radius greater than around 1.01m
is because the fluid drains from the wall causing the region immediately next to the wall to apparently soften, and stress then transfers to the
sample away from the wall, in a similar way to Mandel's problem. In real-life scenarios, fracture can therefore initiate inside the material, and
propagate towards the borehole wall. In the comparison of the total stress, the effect of the finite-element discretisation can be seen: since
(/static/media/wiki/images
stress is a CONSTANT MONOMIAL in this problem, it is constant within each element: nevertheless, good agreement is still obtained. /329/3d3ac8739e29bcd294bbdabaaa252252
The test suite contains two versions of this problem. The "lowres" is run as part of the test harness, while the "highres" version is marked as /mandel_setup.png)
"heavy". The figures show the results from the "highres" version. The setup of Mandel's problem.
(/static/media/wiki/images
/329/cd023e7f7961ee4f925991c2178d8d5a
/mandel_result.png)
(/static/media/wiki/images
/329/f09e41e1a1cb26fcb54d3f0ef2402b82
/borehole_setup.png)
(/static/media/wiki/images
9 of 10 27-11-2015 08:40
MOOSE Framework - PoroMechanics http://mooseframework.org/wiki/PhysicsModules/...
/329/38a97f83b3a1e2c17c73a0e5f3104c3c
/borehole_p.png)
(/static/media/wiki/images
/329/115653b185b8f3bebc9d1051205d918f
/borehole_s.png)
(/static/media/wiki/images
/329/af91c9c413c0ded10d272397ebdf7f1a
/borehole_t.png)
Getting Started Blog (/blog/) Wiki (/wiki/) GitHub About (/about/) Contact (/contact/)
(/getting-started/) (https://github.com
/idaholab/moose)
Tweet #mooseframework
10 of 10 27-11-2015 08:40