Example: UCS Test on a Fractured Sample

Problem Statement

Note

The project file for this example is available to be viewed/run in in FLAC2D.[1]. The project’s main data files are shown at the end of this example.

This example demonstrates the methodology for generating a Discrete Fracture Network (DFN) in a FLAC2D model and its effect on the strength of a rock mass. The tested rock block is 10 x 10 m and is loaded by applying a constant velocity to the top and bottom gridpoints. The axial strength of the sample at different levels of confinement is examnined and a failure envelope is generated. Rock and joint properties are are shown in Table 1. Note that even though we are explicitly considering the fractures in this model, we are not modeling all fractures that exist in the rock. The the rock itself (between the fractures) is still modeled as a Hoek-Brown material to account for micro-fractures and their effect on rock mass strength.

Table 1: Rock and Joint Properties

Property

Value

Rock Density

2700 kg/m3

Rock Young’s Modulus

5 GPa

Rock Poisson’s Ratio

0.22

Rock GSI

70

Rock intact strength

100 MPa

Rock \(m_i\)

20

Joint Normal Stiffness

20 GPa/m

Joint Shear Stiffness

2 GPa/m

Joint Friction

30 degrees

Joint Cohesion

0.1 MPa

Joint Tension

0.01 MPa

Model Building

The model is built using i Sketch as described below.

  • Create a new Sketch Set. Draw a box from -5,-5 to 5,5.

  • Select the Fracture Wizard tool. Under Domain, select Closed Polygon, slick the Select button and click inside of the square you just drew. For Dip and Position, leave the default selections (Uniform).

  • For Size, set the limits to Min = 0.5 and Max = 25. Set the Distribution to Power Law with an exponment of 3. The power-law size distribution is described here: Power-law distribution in a log-log diagram..

  • For Generation Criterion, let’s assume that we have a core log where we have measured the number of fractures per meter. The sample is 10 m long and the average number of fractures per meter is 2. Select the option for Fracture Frequency (P10) and enter a frequency of 2. Then for the Scanline Begin enter -5,0 and for Scanline End enter 5,0. The dialog should appear as shown.

../../../../../_images/dfnf2d-fig1.png
  • You can click Preview to see the fractures before generating. To actually create the nodes and edges in Sketch, click OK. The model should appear as shown below. Note that the Fracture edges are automatically assigned a group name “DFN-1” in slot “dfn”. This will be useful later when we create joints.

../../../../../_images/dfnf2d-fig2.png
  • In the zoning menu, select Auto Size and set Zone Length to 0.2. Set the minimum number of zones per edge to 2. This is necessary to properly separate the faces when we turn the Fracture edges into joints.

../../../../../_images/dfnf2d-fig3.png
  • Mesh all Polygons. You will see warnings about bad zones. This is common with random fracture networks due to intersecting joints of similar orientations creating very narrow wedges. The model will still run with these bad zones.

  • Create the zones and save the state. The model will appear as shown. Note that only portions of the model that are completely separated from each other are assigned different group names, so the majority of the model appears as one color, even though it is filled with edges.

../../../../../_images/dfnf2d-fig4.png

Figure 4: Zoned model.

Unconfined Compression Test

Create a data file and add a command to restore the model created in Sketch. Next you will want to skin the model using the command zone face skin. This automatically assigns group names to the faces on the outside of the model. This could also be done by clicking a button in the Model Pane. It is important that this step be performed before separating all the faces to make joints, otherwise all of the new faces will also be automatically be assigned group names.

To create the joints, use the commands below:

zone joint configure
zone joint create by-slot 'dfn' separate distinct-geometry

This automatically separates all of the faces with a group name assigned in slot “dfn”. A special keyword distinct-geometry is required because the fractures have a non-manifold topology (think of a T-junction). This is not required for separation when each joint is distinct (i.e. not intersecting).

Specify rock and joint properties as in Table 1. Some FISH is now used to record the axial stress and strain as shown in ucs.dat. Finally velocity boundary conditions are applied to the top and bottom of the sample to cause compression

Results

The stress-strain curve for this model is shown in Figure 5. The peak strength is approximately 4.7 MPa. Using equations here (Hoek-Brown Model), the unconfined strength for this Hoek-Brown material with no fractures is 18.8 MPa. Therefore it is clear that the fractures are weakening the rock mass. In addition, the fractures cause the rock to behave in a ductile manner. The addition of many fractures causes the rock mass to behave more like a granular assembly than a competent rock.

Displacements are shown in Figure 6. The effect of the fractures is evident. The states of slip on the fractures are shown in Figure 7. It is clear that most of the fractures are failing, or have failed in the past.

../../../../../_images/dfnf2d-ss.png

Figure 5: Axial stress versus axial strain for the UCS test.

../../../../../_images/dfnf2d-disp.png

Figure 6: Gridpoint displacements.

../../../../../_images/dfnf2d-joints.png

Figure 7: Fracture shear displacements.

Data Files

ucs.dat

program call 'sketch'

zone face skin

zone joint configure
zone joint create by-slot 'dfn' separate distinct-geometry

zone cmodel assign hoek-brown
zone property density 2700 young 5e9 poisson 0.22
zone property constant-sci 100e6 geological-strength-index 70 constant-mi 20

; specify a large tension so program will use HB tension (s*sci/mb)
zone property tension 1e6

contact property stiffness-normal 20e9 stiffness-shear 2e9
contact property friction 30 cohesion 0.1e6 tension 0.01e6

; setup nodes for computing stress and strain
[top_nodes = gp.list(gp.isgroup(::gp.list,'Top'))]
[bottom_nodes = gp.list(gp.isgroup(::gp.list,'Bottom'))]
[top_sensor = gp.near(0,5)]
[bottom_sensor = gp.near(0,-5)]

; compute stress and strain and store peak stress
; compression positive and stress in MPa
fish define syy
  local syy_ = list.sum(gp.force.unbal(::top_nodes)->y)
  syy_ -= list.sum(gp.force.unbal(::bottom_nodes)->y)
  ; Area = 10x2.  Change to MPa
  syy_ *= 1e-6/20.0
  
  ; strain = (change in length) / length
  eyy = -(gp.disp(top_sensor)->y - gp.disp(bottom_sensor)->y)/10.0
  return syy_
end

; take histories
fish history name 'syy' syy
fish history name 'eyy' eyy

; now load it

; initialize velocity gradient to speed up loading
;zone gridpoint initialize velocity-y 0 gradient 0 [-1e-7/5]
zone face apply velocity-y -1e-6 range group 'top'
zone face apply velocity-y 1e-6 range group 'bottom'

model cycle 30000

model save 'unconfined'

Endnote