Pore Pressure and Effective Stress


Fluid in pores or cracks of a geological material may have some pressure that is greater than zero. In this manual we use the term pore pressure even though it is recognized that in rocks, there may not be pores in the traditional sense, but rather small cracks containing fluid. A positive pore pressure produces an effective stress that is less compressive than the total stress. It is this effective stress that is used to detect failure in a plastic material (or potential failure in an elastic solid). The effective normal stress on a contact is also used to determine whether or not a joint fails (in tension or shear). Therefore the effect of pore pressures is critically important in 3DEC modeling.


In a saturated material, stress is carried partially by the solid portion and partially by the pore water. The total stress carried by both components is the total stress. The component carried by the solid portion only is the effective stress. The Terzaghi definition of effective stress is:

\[\sigma'_{ij} = \sigma_{ij} + p \delta_{ij}\]

where \(\sigma_{ij}\) is the total stress, \(p\) is the pore pressure and \(\delta_{ij}\) is the Kronecker delta.

It is also possible to define the effective stress using the Biot theory (Biot 1956) but this is not currently implemented in 3DEC.

Similarly, the effective normal stress on a joint is given by:

\[\sigma'_n = \sigma_n + p\]

where \(\sigma_n\) is the total normal stress.

Pore Pressure in 3DEC

Pore pressures can be present in a 3DEC model even without flow calculations turned on. If the command model configure matrixflow has not been given, then a fluid-flow analysis cannot be performed, but it is still possible to assign pore pressure at gridpoints. In this calculation mode, pore pressures do not change, but failure, which is controlled by the effective-stress state, may be induced when plastic constitutive models are used. In this mode, fluid properties such as porosity and permeability are not required, nor are fluid boundary conditions.

A pore-pressure distribution can be specified at gridpoints, with the block gridpoint initialize pore-pressure command, block insitu pore-pressure command, or with the block water table command. The block insitu pore-pressure command and block water table commanda also assign pressures to the joint contacts.

If the block water table command is used, a hydrostatic pore-pressure distribution is calculated automatically by the code, below the given water table level. In this case, the fluid density (block fluid property density) and gravity (model gravity) must also be specified.

In both cases, zone pore pressures are calculated by averaging from the gridpoint values and are used to derive effective stresses for use in the constitutive models. In this calculation mode, the fluid presence is not automatically accounted for in the calculation of body forces: wet and dry medium densities must be assigned by the user, below and above the water level, accordingly.

Note also that total stresses in the zones are not adjusted when pore pressures change. So, raising or lowering the water table in an elastic material with no joints has no effect (the pore pressures are only used in the calculation of possible failure). However, when joints are present, the pore pressure exerts a normal force at each subcontact so that displacement will be observed on joints when pore pressures change. The magnitude of this force can be found using the block.subcontact.force.pp FISH function.

The commands block gridpoint list pore-pressure and block zone list pore-pressure print gridpoint and zone pore pressures, respectively. block contact list pore-pressure prints the subcontact pore pressures and fluid forces.

A simple example is given below.

A Note on Using the block water table Command

When the block water table command is given, any existing water table that currently exists is not deleted. This means that gridpoints below the new water table will be assigned new pore pressures, and gridpoints above the new water table but below any existing water tables will retain non-zero pore pressures. Therefore, if you wish to simulate the lowering of a water table, three steps are required.

  1. Delete the existing water table using the command block water table clear.
  2. Reset gridpoint pore pressures to zero using the command block gridpoint initialize pore-pressure 0.
  3. Create the new water table with the block water table command.

Note that the pore pressures in the subcontacts are automatically set to zero when a water table command is given, so it is not necessary to manually set these to zero.

No Flow Example

A simple 10-m cubic brick is created with a horizontal joint through the middle. The model is brought to equilibrium under gravity loading with no pore pressure. A water table is then raised to the surface, inducing pore pressures throughout the model. It is then solved again. You can see in Figure 1 that pore pressure increases with depth and that the top block displaces upward in response to the changing pore pressure. This is because pressure change on the joint causes upward forces to be applied. There is no movement of the bottom block since changing pore pressures have no effect on displacement of unjointed elastic material when the fluid flow configuration is off.

Note that for a material with non-zero porosity, you should change the density to account for saturation change when the water table is raised by using the following relationship:

\[\rho = \rho_d +n \rho_f\]

Where \(\rho_d\) is the density of the dry matrix, \(\rho_f\) is the density of the fluid, and \(n\) is the porosity.


Figure 1: Pore pressures and displacements in the no flow model.

Data File

model new
model random 10000
model large-strain off
; create brick
block create brick 0 10 0 10 0 10
; add horizontal joint
block cut joint-set origin 0 0 5 dip 0 dip-direction 0
; zone
block zone generate edgelength 2.
; material properties
block zone cmodel assign elastic
block zone property density 2650 bulk 1e10 shear 7e9 

block contact jmodel assign mohr
block contact property stiffness-normal 1e11 stiffness-shear 1e11 
; boundary conditions
block gridpoint apply velocity 0 0 0 range position-z 0
block gridpoint apply velocity-x 0 range position-x 0
block gridpoint apply velocity-x 0 range position-x 10
block gridpoint apply velocity-y 0 range position-y 0
block gridpoint apply velocity-y 0 range position-y 10

; gravity
model gravity 0 0 -10
; solve - no fluid
model solve ratio 1e-7
block gridpoint initialize displacement 0 0 0
; now raise water table to surface
block fluid property density 1000.0
block water plane origin 0 0 10 normal 0 0 1
model solve