FLAC3D Theory and Background • Constitutive Models
Undrained Triaxial Tests of Loose Ottawa Sand using CASM
Note
The project file for this example is available to be viewed/run in FLAC3D. The project’s main data files are shown at the end of this example.
The Clay-and-Sand model is used to simulate isotropically consolidated triaxial undrained (CU) tests on loose Ottawa sand. It is well known that very loose sands can collapse and exhibit strain softening during monotonic undrained loading, ultimately reaching a critical (or steady) state. During this type of loading, loose sand reaches a peak resistance and then rapidly softens to a steady state, an essential condition for liquefaction to occur.
The input parameters are based on Yu (1998). The material properties are summarized in the table:
critical-state-1
\(\Gamma\)
0.864
critical-state-2
\(\lambda\)
0.0168
ratio-critical
\(M\)
1.19
pressure-reference
\(p_{ref}\)
100 (kPa)
kappa
\(\kappa\)
0.005
poisson
\(\nu\)
0.3
potential-exponent
\(m\)
2.0
yield-exponent
\(n\)
2.8
Four tests were selected for comparison with CASM, involving samples with initial void ratios of 0.793 and 0.804. These tests were conducted under varying initial mean effective stresses. When applying CASM to simulate the undrained behavior of very loose sand, the reference state parameter \(\xi_R\) can be assumed equal to the initial state parameter of each sample, which implies that the spacing-ratio is varying. This assumption has proven to be highly effective for predicting the undrained behavior of very loose sands.
Test 1
Test 2
Test 3
Test 4
spacing-ratio
\(R\)
15.77
10.13
25.93
49.35
void-initial
\(e_0\)
0.793
0.793
0.804
0.804
stress-initial (kPa)
\(p_0\)
475
348
350
550
This example demonstrates that CASM can predict the development of peak strength at a very small axial strain. Following this peak, the response exhibits pronounced strain softening as axial strain increases, eventually approaching the critical state.
break

Figure 1: Simulation of \(q/p\) vs. axial strain for undrained triaxial tests for \(e_0\) = 0.793 and \(p_0\) = 475 kPa.

Figure 2: Simulation of \(q\) vs. \(p\) for undrained triaxial tests for \(e_0\) = 0.793 and \(p_0\) = 348 kPa.

Figure 3: Simulation of \(q/p\) vs. axial strain for undrained triaxial tests for \(e_0\) = 0.793 and \(p_0\) = 348 kPa.

Figure 4: Simulation of \(q\) vs. \(p\) for undrained triaxial tests for \(e_0\) = 0.793 and \(p_0\) = 475 kPa.

Figure 5: Simulation of \(q/p\) vs. axial strain for undrained triaxial tests for \(e_0\) = 0.805 and \(p_0\) = 350 kPa.

Figure 6: Simulation of \(q\) vs. \(p\) for undrained triaxial tests for \(e_0\) = 0.805 and \(p_0\) = 350 kPa.

Figure 7: Simulation of \(q/p\) vs. axial strain for undrained triaxial tests for \(e_0\) = 0.805 and \(p_0\) = 550 kPa.

Figure 8: Simulation of \(q\) vs. \(p\) for undrained triaxial tests for \(e_0\) = 0.805 and \(p_0\) = 550 kPa.
References
Yu, H.S. CASM: a unified state parameter model for clay and sand. International Journal for Numerical and Analytical Methods in Geomechanics, 22(8), 612-753 (1998).
Data File
main datafile:
program call "undrained_loose1.dat"
program call "undrained_loose2.dat"
program call "undrained_loose3.dat"
program call "undrained_loose4.dat"
program call "check.dat"
undrained_loose1 datafile:
model new
; Undrained Triaxial Compression Test, Loose Sample 1
model large-strain off
zone create brick size 1 1 1
zone cmodel assign clay-and-sand
;
zone property critical-state-1 0.864
zone property critical-state-2 0.0168
zone property pressure-reference 100.0
zone property kappa 0.005
zone property ratio-critical 1.19
zone property yield-exponent 2.8
zone property potential-exponent 2
zone property spacing-ratio 15.77
zone property poisson 0.3
zone property void-initial 0.793
;
[global cell = -475]
zone initialize stress xx [cell] yy [cell] zz [cell]
zone property stress-initial [tensor(cell,cell,cell,0,0,0)]
;
model configure fluid-flow
zone fluid property effective-cutoff -1e20
zone fluid property porosity 0.3 fluid-modulus 6e4
zone fluid property pore-pressure-generation on
;
[global _zvel = -1e-6]
zone face apply velocity-z [_zvel] range position-z 1
zone face apply velocity-x 0 range position-x 0
zone face apply velocity-y 0 range position-y 0
zone face apply velocity-z 0 range position-z 0
zone face apply stress-xx [cell] range position-x 1
zone face apply stress-yy [cell] range position-y 1
;
[global zn = zone.near(0.5,0.5,0.5)]
[global gp = gp.near(1.0,1.0,1.0)]
fish define q1
global pp = zone.pp(zn)
local str = zone.stress(zn)
global q1 = str->xx - str->zz
global p1 = -(str->xx + str->yy + str->zz)/3. - pp
global e1 = -gp.disp.z(gp)*100.
global ev = zone.strain.vol.inc(zn)*100
end
;
fish history name '1' q1
fish history name '2' p1
fish history name '3' e1
fish history name '4' ev
fish history name '5' pp
;
history interval 100
model solve-static cycles 50000
model save "OttawaSand-Loose1-Undrained"
undrained_loose2 datafile:
model new
; Undrained Triaxial Compression Test, Loose Sample 2
model large-strain off
zone create brick size 1 1 1
zone cmodel assign clay-and-sand
;
zone property critical-state-1 0.864
zone property critical-state-2 0.0168
zone property pressure-reference 100.0
zone property kappa 0.005
zone property ratio-critical 1.19
zone property yield-exponent 2.8
zone property potential-exponent 2
zone property spacing-ratio 10.13
zone property poisson 0.3
zone property void-initial 0.793
;
[global cell = -348]
zone initialize stress xx [cell] yy [cell] zz [cell]
zone property stress-initial [tensor(cell,cell,cell,0,0,0)]
;
model configure fluid-flow
zone fluid property effective-cutoff -1e20
zone fluid property porosity 0.3 fluid-modulus 6e4
zone fluid property pore-pressure-generation on
;
[global _zvel = -1e-6]
zone face apply velocity-z [_zvel] range position-z 1
zone face apply velocity-x 0 range position-x 0
zone face apply velocity-y 0 range position-y 0
zone face apply velocity-z 0 range position-z 0
zone face apply stress-xx [cell] range position-x 1
zone face apply stress-yy [cell] range position-y 1
;
[global zn = zone.near(0.5,0.5,0.5)]
[global gp = gp.near(1.0,1.0,1.0)]
fish define q1
global pp = zone.pp(zn)
local str = zone.stress(zn)
global q1 = str->xx - str->zz
global p1 = -(str->xx + str->yy + str->zz)/3. - pp
global e1 = -gp.disp.z(gp)*100.
global ev = zone.strain.vol.inc(zn)*100
end
;
fish history name '1' q1
fish history name '2' p1
fish history name '3' e1
fish history name '4' ev
fish history name '5' pp
;
history interval 100
model solve-static cycles 50000
model save "OttawaSand-Loose2-Undrained"
undrained_loose3 datafile:
model new
; Undrained Triaxial Compression Test, Loose Sample 3
model large-strain off
zone create brick size 1 1 1
zone cmodel assign clay-and-sand
;
zone property critical-state-1 0.864
zone property critical-state-2 0.0168
zone property pressure-reference 100.0
zone property kappa 0.005
zone property ratio-critical 1.19
zone property yield-exponent 2.8
zone property potential-exponent 2
zone property spacing-ratio 25.93
zone property poisson 0.3
zone property void-initial 0.804
;
[global cell = -350]
zone initialize stress xx [cell] yy [cell] zz [cell]
zone property stress-initial [tensor(cell,cell,cell,0,0,0)]
;
model configure fluid-flow
zone fluid property effective-cutoff -1e20
zone fluid property porosity 0.3 fluid-modulus 6e4
zone fluid property pore-pressure-generation on
;
[global _zvel = -1e-6]
zone face apply velocity-z [_zvel] range position-z 1
zone face apply velocity-x 0 range position-x 0
zone face apply velocity-y 0 range position-y 0
zone face apply velocity-z 0 range position-z 0
zone face apply stress-xx [cell] range position-x 1
zone face apply stress-yy [cell] range position-y 1
;
[global zn = zone.near(0.5,0.5,0.5)]
[global gp = gp.near(1.0,1.0,1.0)]
fish define q1
global pp = zone.pp(zn)
local str = zone.stress(zn)
global q1 = str->xx - str->zz
global p1 = -(str->xx + str->yy + str->zz)/3. - pp
global e1 = -gp.disp.z(gp)*100.
global ev = zone.strain.vol.inc(zn)*100
end
;
fish history name '1' q1
fish history name '2' p1
fish history name '3' e1
fish history name '4' ev
fish history name '5' pp
;
history interval 100
model solve-static cycles 50000
model save "OttawaSand-Loose3-Undrained"
undrained_loose4 datafile:
model new
; Undrained Triaxial Compression Test, Loose Sample 4
model large-strain off
zone create brick size 1 1 1
zone cmodel assign clay-and-sand
;
zone property critical-state-1 0.864
zone property critical-state-2 0.0168
zone property pressure-reference 100.0
zone property kappa 0.005
zone property ratio-critical 1.19
zone property yield-exponent 2.8
zone property potential-exponent 2
zone property spacing-ratio 49.35
zone property poisson 0.3
zone property void-initial 0.804
;
[global cell = -550]
zone initialize stress xx [cell] yy [cell] zz [cell]
zone property stress-initial [tensor(cell,cell,cell,0,0,0)]
;
model configure fluid-flow
zone fluid property effective-cutoff -1e20
zone fluid property porosity 0.3 fluid-modulus 6e4
zone fluid property pore-pressure-generation on
;
[global _zvel = -1e-6]
zone face apply velocity-z [_zvel] range position-z 1
zone face apply velocity-x 0 range position-x 0
zone face apply velocity-y 0 range position-y 0
zone face apply velocity-z 0 range position-z 0
zone face apply stress-xx [cell] range position-x 1
zone face apply stress-yy [cell] range position-y 1
;
[global zn = zone.near(0.5,0.5,0.5)]
[global gp = gp.near(1.0,1.0,1.0)]
fish define q1
global pp = zone.pp(zn)
local str = zone.stress(zn)
global q1 = str->xx - str->zz
global p1 = -(str->xx + str->yy + str->zz)/3. - pp
global e1 = -gp.disp.z(gp)*100.
global ev = zone.strain.vol.inc(zn)*100
end
;
fish history name '1' q1
fish history name '2' p1
fish history name '3' e1
fish history name '4' ev
fish history name '5' pp
;
history interval 100
model solve-static cycles 50000
model save "OttawaSand-Loose4-Undrained"
Was this helpful? ... | Itasca Software © 2024, Itasca | Updated: Jun 07, 2025 |