Download as pdf or txt
Download as pdf or txt
You are on page 1of 10

MOOSE Framework - PoroMechanics http://mooseframework.org/wiki/PhysicsModules/...

PoroMechanics  PoroMechanics (/wiki/PhysicsModules/TensorMechanics/TensorMechanicsBasics/PoroMechanics/)


PoroMechanics is the theory that describes the coupling of porous flow with solid mechanics.

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).

V , an arbitrary volume of the porous material


Vf , the porevolume within volume V . If the porous material is fully saturated then Vf is the volume of fluid within volume V .

ϕ = 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.

bi , the components of a force-density, for example, the gravitational acceleration.


Eijkl , components of the elasticity tensor. In linear elasticity σijeff = Eijkl ϵkl . Eijkl is often called the "drained" elasticity tensor.

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/...

elsewhere in poromechanics formulae. It is quite common to use 1/K g = 0.


gi , components of gravitational acceleration, pointing downwards. Eg, usually g = (0, 0, −9.8).
kij , components of the permeability tensor.
krel , the relative permeability. It is usually a function of fluid saturation, with krel = 0 for S = 0, and krel = 1 for S = 1.
μ, the fluid dynamic viscosity.
M , the Biot modulus. 1/M = (1 − α)(α − ϕ)/K + ϕ/K f. The quantity 1/M is sometimes called the "storativity" in literature.

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:

σijeff = Eijkl ϵkl .

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 − α)(α − ϕ) ∂Pf ∂ϵii


= + (α − ϕ) .
∂t K ∂t ∂t
This equation may be solved in closed form:

α−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/...

Motivations, Explanations and Derivations

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,

Δϵij = Cijkl (σijtot + αδij ΔPf ) .


−1
Taking the trace of this equation, and using V ΔV = Δϵii yields
ΔV
= δij Cijkl (σijtot + αδij ΔPf ) .
V
A similar equation can be formed for the change in porevolume:

Δ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 ϕ ϕ

Using the expression for ΔV /V yields

ΔVf = V αΔϵii + V δij δkl Cijkl (1 − α)(α − ϕ)ΔPf

Now Δϕ = V −1 ΔVf − Vf V −2 ΔV , so using the definition of K yields


∂ϕ ∂ϵii (1 − α)(α − ϕ) ∂Pf
= (α − ϕ) + ,
∂t ∂t K ∂t
as required.

A note on the fluid equations


∂ϵii
The time-derivative part of the fluid equations contains a term ϕρS . This terms is present because the time-derivative is expressing the change in fluid mass in a volume V :
∂t


∫ ϕρ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/...

Undrained bulk modulus:

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 + ν)

Kernels, Materials and Actions

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

This Kernel implements the term


\begin{equation}
\frac{1}{M}\frac{\partial P_{\mathrm{f}}}{\partial t} + \alpha \frac{\partial \epsilon_{ii}}{\partial t}
\end{equation}
This is the LHS of the fully-saturated single-phase equation, above. The Kernel needs the displacement variables to be specified so that it can
```puppet
[Kernels]
[./poro_timederiv]
type = PoroFullSatTimeDerivative
variable = porepressure
disp_x = disp_x
disp_y = disp_y
disp_z = disp_z
[../]
[./darcy_flow]
type = CoefDiffusion
variable = porepressure
coef = 1.5
[../]
...
[]

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/...

The test suite


The following tests indicate that the MOOSE implementation of the above physics is correct. They are part of MOOSE's test suite.

Jacobian of PoroMechanicsCoupling Kernel.


This is tested using PETSc's snes type = test.

Volumetric expansion due to increasing porepressure


The porepressure within a fully-saturated sample is increased:

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.

Undrained oedometer test


A cubic single-element fully-saturated sample has roller BCs applied to its sides and bottom. All the sample's boundaries are impermeable. A constant downwards (normal) velocity, vz ,
is applied to its top, and the rise in porepressure and effective stress is observed. (Here z denotes the direction normal to the top face.) There is no fluid flow in the single element.

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

MOOSE produces these results correctly.

Porepressure generation of a confined sample


A single-element fully-saturated sample is constrained on all sides and its boundaries are impermeable. Fluid is pumped into the sample via a volumetric source (ie m3 /s per cubic
meter), and the rise in porepressure is observed.

Denoting the strength of the source by s (units are s−1 ), the expected result is

Pf = Mst

σijeff = 0 .

MOOSE produces these results correctly.

Porepressure generation of an unconfined sample


A single-element fully-saturated sample is constrained on all sides, except its top. All its boundaries are impermeable. Fluid is pumped into the sample via a volumetric source (ie m3 /s
per cubic meter), and the rise in the top surface, the porepressure, and the stress are observed.

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

MOOSE produces these results correctly.

Unconsolidated undrained test


7 of 10 27-11-2015 08:40
MOOSE Framework - PoroMechanics http://mooseframework.org/wiki/PhysicsModules/...

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

ϵ00 + ϵ11 + ϵ22 = −P tot /K u ,

Pf = BP tot ,

σ22 = −P tot + αPf .

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.

Terzaghi consolidation of a drained medium


A saturated sample sits in a bath of water. It is constrained on its sides and bottom. Its sides and bottom are also impermeable. Initially it is unstressed (σ ij = 0 = Pf , at t = 0). A
normal stress, q, is applied to the sample's top. The sample compresses instantaneously due to the instantaneous application of q, and then slowly compresses further as water is
squeezed out from the sample's top surface.

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.

Mandel's consolidation of a drained medium


A sample's dimensions are −a ≤ x ≤ a and −b ≤ y ≤ b, and it is in plane strain (no z displacement). It is squashed with constant
normal force by impermeable, frictionless plattens on its top and bottom surfaces (at y= ±b). Fluid is allowed to leak out from its sides (at
x = ±a), but all other surfaces are impermeable. This is called Mandel's problem. The interesting feature of this problem (apart from that it
can be solved analytically) is that the porepressure in the sample's center actually increases for a short time after application of the force.
This is because the leakage of the fluid from the sample's sides causes an apparent softening of the material near those sides. This means
stress concentrates towards the sample's center which causes an increase in porepressure. Of course, eventually the fluid totally drains from (/static/media/wiki/images
the sample, and the porepressure is zero. As the fluid drains from the sample's sides the plattens move slowly towards each other. /329/c0980473daf65559936017f0b294b84c
/terzaghi_p.png)
The solution for porepressure and displacements is given in: AHD Cheng and E Detournay "A direct boundary element method for plane
Comparison of expected results
strain poroelasticity" International Journal of Numerical and Analytical Methods in Geomechanics 12 (1988) 551-572. The solution involves and MOOSE results for the
rather lengthy infinite series, so I will not write it here. Terzaghi consolidation problem.

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.

Poroelastic response of a borehole


A fully-saturated medium contains a fluid with a homogeneous porepressure, but an anisitropic insitu stress. A infinitely-long borehole
(/static/media/wiki/images

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)

Comparison of expected results


The solution in Laplace space is found in E Detournay and AHD Cheng "Poroelastic response of a borehole in a non-hydrostatic stress field".
and MOOSE results for the
International Journal of Rock Mechanics and Mining Sciences and Geo mechanics Abstracts 25 (1988) 171-182. In the small-time limit, the
Terzaghi consolidation problem.
Laplace transforms may be performed. There is one typo in the paper. Equation (A4)'s final term should be −(a/r)√(4ct/(a2 π)), and
not +(a/r)√(4ct/(a2 π)).

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)

Porepressure in Mandel's problem.


Note the initial rise in porepressure
at the centre of the sample. The
sample's size was a = 1 in this
case.

(/static/media/wiki/images
/329/f09e41e1a1cb26fcb54d3f0ef2402b82
/borehole_setup.png)

Setup of the poroelastic response


of a borehole.

(/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)

The porepressure at two times


along the line y = 0 in the
poroelastic borehole problem.

(/static/media/wiki/images
/329/115653b185b8f3bebc9d1051205d918f
/borehole_s.png)

The radial displacement at two


times along the line y = 0 in the
poroelastic borehole problem.

(/static/media/wiki/images
/329/af91c9c413c0ded10d272397ebdf7f1a
/borehole_t.png)

The tangential stress at two times


along the line y = 0 in the
poroelastic borehole problem

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

You might also like