FLAC3D Theory and Background • Constitutive Models

Comparison between Mohr-Coulomb Model and Plastic-Hardening model

Note

To view this project in FLAC3D, use the menu command Help ► Examples…. Choose “ConstitutiveModels/ ComparisonPlasticHardening” and select “ComparisonPlasticHardening.prj” to load. The project’s main data files are shown at the end of this example.

This example compares the behavior of the Plastic-Hardening (PH) model and Mohr-Coulomb (MC) model during the triaxial compression. Both models are used in a one-zone triaxial compression test with a constant cell pressure of 100 kPa. The strength parameters (including friction angle, dilation angle, and tension limit) are the same for both models. The \(E_{50}\) stiffness of the PH model is used as Young’s modulus for the MC model and \(E^{ref}_{ur}\) is assumed to be three times the value of \(E^{ref}_{50}\). Material properties for this example are summarized in Table 1. Material parameters not listed in the table are default values.

Table 1: Model Properties for the Triaxial Compression Test

Parameters

PH

MC

\(\phi\) (degrees)

30

30

\(c\) (kPa)

0

0

\(\psi\) (degrees)

10

10

\(E^{ref}_{50}\) (kPa)

2e4

\(E\) (kPa)

2e4

\(\nu\)

0.2

0.2

\(E^{ref}_{ur}\) (kPa)

6e4

\(m\)

0.6

\(R_f\)

0.9

\(p^{ref}\) (kPa)

100

\(\sigma^{ini}_{1 \sim 3}\) (kPa)

-100

Figure 1 shows a plot deviatoric stress versus axial strain for both PH and MC models. It is easy to verify the following from the figure:

  1. The ultimate failure deviatoric stresses (200 kPa) are the same for both models, as expected.

  2. For the pre-failure curve, the PH and MC models are crossing at the half of the failure stress (100 kPa), which is consistent with the concept of \(E_{50}\) stiffness.

  3. The unloading stiffness in the MC model is the same as the loading stiffness (\(E\) in the MC model, or \(E_{50}\) in the PH model), while these stiffnesses are different in the PH model.

../../../../../_images/modelph-comparison.png

Figure 1: Comparison of PH and MC models for a triaxial compression test.

Data Files

TriaxialCompressionPlasticHardening.dat

model new
model large-strain off
;
zone create brick size 1 1 1
zone cmodel assign plastic-hardening
zone property stiffness-50-reference=2.0e4 stiffness-ur-reference=6.0e4 ...
              pressure-reference=100.0 exponent=0.6
zone property friction=30.0 dilation=10.0 cohesion=0.0
zone property stress-1-effective=-100.0 stress-2-effective=-100.0 ...
              stress-3-effective=-100.0
;
zone gridpoint fix velocity-z
zone face apply stress-xx=-100.0 range union position-x 0 position-x 1
zone face apply stress-yy=-100.0 range union position-y 0 position-y 1
zone initialize stress xx -100.0 yy -100.0 zz -100.0
;
fish define hhhq_
    local zp_ = zone.head
    local gp_ = gp.find(8)
    global hhhq_ = zone.stress.xx(zp_) - zone.stress.zz(zp_)
    global hhha_ = -gp.disp.z(gp_)
end
history interval 10
fish history hhhq_
fish history hhha_
;
zone gridpoint initialize velocity-z -2e-6 range position-z 1
model step 10000
zone gridpoint initialize velocity-z  1e-6 range position-z 1
model step  1000
zone gridpoint initialize velocity-z -2e-6 range position-z 1
model step 10000
zone gridpoint initialize velocity-z  1e-6 range position-z 1
model step  1000
zone gridpoint initialize velocity-z -2e-6 range position-z 1
model step 10000
zone gridpoint initialize velocity-z  1e-6 range position-z 1
model step  1000
zone gridpoint initialize velocity-z -2e-6 range position-z 1
model step 20000
;
history export  '1' vs '2' table 'ph_qs_100'
table 'ph_qs_100' export 'ph_qs_100' truncate
;
model save 'ph100'

TriaxialCompressionMohrCoulomb.dat

model new
model large-strain off
;
zone create brick size 1 1 1
zone cmodel assign mohr-coulomb
zone property young=2.0e4 poisson=0.2 friction=30 dilation=10
;
zone gridpoint fix velocity-z
zone face apply stress-xx=-100.0 range union position-x 0 position-x 1
zone face apply stress-yy=-100.0 range union position-y 0 position-y 1
zone initialize stress xx -100.0 yy -100.0 zz -100.0
;
fish define hhhq_
    local zp_ = zone.head
    local gp_ = gp.find(8)
    global hhhq_ = zone.stress.xx(zp_) - zone.stress.zz(zp_)
    global hhha_ = -gp.disp.z(gp_)
end
history interval 10
fish history hhhq_
fish history hhha_
;
zone gridpoint initialize velocity-z -2e-6 range position-z 1
model step 10000
zone gridpoint initialize velocity-z  1e-6 range position-z 1
model step  1000
zone gridpoint initialize velocity-z -2e-6 range position-z 1
model step 10000
zone gridpoint initialize velocity-z  1e-6 range position-z 1
model step  1000
zone gridpoint initialize velocity-z -2e-6 range position-z 1
model step 10000
zone gridpoint initialize velocity-z  1e-6 range position-z 1
model step  1000
zone gridpoint initialize velocity-z -2e-6 range position-z 1
model step 20000
;
history export  '1' vs '2' table 'mc_qs_100'
table 'mc_qs_100' export 'mc_qs_100' truncate
;
model save 'mc100'