Cyclic Undrained DSS Tests with P2PSand Model

Note

To view this project in FLAC3D, use the menu command Help ‣ Examples…. The main data files used are shown at the end of this example. The remaining data files can be found in the project.

One-zone numerical tests of undrained cyclic direct simple shear (DSS) loading responses are performed. All these tests are starting from an initial effective vertical stress (\(\sigma^{\prime}_{v0}\)) along z-axis at 100 kPa (around 1 atm), \(K_0=0.5\), and zero initial static shear stresses. All parameters are with the default parameters except the initial relative densities are different. Pore-pressure in the zone is allowed for building-up. The out-of-plane (alone y-axis) strains are restricted. The degrees-of freedom at the zone top are attached so that all grid points at the top have the same displacements to satisfy the DSS conditions. The gridpoints at the zone top are velocity-controlled. Once the shear stress (\(\tau\)) amplitude reaches a certain value (\(CSR \times \sigma^{\prime}_{v0}\)), the velocities of gridpoints at the zone top will be reverted. In this example, the parameter study is performed by a Python-based master file.

The numerical results of undrained cyclic DSS loading responses with the relative density at \(D_r\) = 0.3, 0.5 and 0.7, are illustrated in Figure 1, 2 and 3, to represent relative loose, median dense and dense sands, respectively. In each of the figures, the top sub-figure is plotting \(\sigma^{\prime}_v/\sigma^{\prime}_{v0}\) versus \(\tau_{xz}/\sigma^{\prime}_{v0}\), the center sub-figure is plotting \(\sigma^{\prime}_v/\sigma^{\prime}_{v0}\) versus \(\gamma\), and the bottom sub-figure is plotting \(R_u\) versus \(\gamma\). All illustrated responses reach about \(\gamma = 3\%\) (S.A.) shear strain with the fitted CSR values at approximately 15 cycles. The shear stress - shear strain responses illustrate shear strain progresses even after the excess pore pressure ratio (\(R_u\)) reaches 99%.

For relatively loose sands as shown in Figure 1, the shear strain increases to a very small value at the first several cycles. After dilatancy surface has been hit, the shear strain dramatically increases to around 3% \(\sigma^{\prime}_v\) is close to 0, and \(R_u\) is close to 1, merely after a couple of extra cycles. For relative dense sands as shown in Figure 3, the shear strain increases approximately in each cycle, rather than just the last few cycles as seen in the relatively loose sands. The median dense sands (Figure 2) presents intermediate behaviors as expected.

../../../../../_images/dss-cyc-ud-dr-30.png

Figure 1: Undrained cyclic DSS loading response for \(D_r\) = 0.3.

../../../../../_images/dss-cyc-ud-dr-50.png

Figure 2: Undrained cyclic DSS loading response for \(D_r\) = 0.5.

../../../../../_images/dss-cyc-ud-dr-70.png

Figure 3: Undrained cyclic DSS loading response for \(D_r\) = 0.7.

The trend of the simulated results for sands from loose to dense state is consistent to the general observations: At the same other conditions, a denser sand have a higher CSR value. As the relative density is increasing, the deformation mode is transferring from liquefaction flow to cyclic mobility. Stress-strain loops for loose sands contain flat segments, a phenomenon term as “neutral phase”, where little or small shear stiffness develops during deformation; stress-strain loops for dense sands have no-zero sloping segments indicating significantly higher shear resistance.

The results by P2PSand model are compared with the empirical curves by Youd et al (2001) and Idriss and Bounlanger (2008) in Figure 4. The relation of \((N_1)_{60} = 46D_r^2\) is used.

../../../../../_images/crrvsn160.png

Figure 4: CRR vs. \((N_1)_{60}\).

Data File

CyclicUndrainedDirectSimpleShear.dat

model reset
; Parameters
program call 'input' suppress
; Mesh
zone create brick size (1,1,1)
; Mechanical
model configure dynamic
model large-strain off
zone cmodel assign p2psand
zone initialize stress xx [-Sv0*K0] yy [-Sv0*K0] zz [-Sv0]
;;; material properties
zone property density [rho_d] pressure-reference [Patm] factor-cut 0.01 
;;; input equivalent relative-density-initial corresponding to field condition
zone property relative-density-initial [dr0]
;;; or directly input (N1)60 in field condition
;zone property n-1-60 [46.0*dr0*dr0]
;;; initial conditions
;;; initial stresses should be input as properties when p2psand model
;;; is first assigned
fish operator ini_stress(z, modelname)
    if zone.model(z) == modelname then 
        zone.prop(z,'stress-initial') = zone.stress.effective(z)
    endif
end
[ini_stress(::zone.list, 'p2psand')]
;;; boundary conditions
zone gridpoint fix velocity-y
zone gridpoint fix velocity range position-z 0
zone attach gridpointid 4 to-gridpointid 8 snap off
zone attach gridpointid 6 to-gridpointid 8 snap off
zone attach gridpointid 7 to-gridpointid 8 snap off
zone face apply stress-zz [-Sv0] range position-z 1.0
zone gridpoint fix velocity-x [rate] range position-z 1
;
zone dynamic damping rayleigh 0.002 1
; fluid
model configure fluid-flow
zone fluid property porosity [poro] fluid-density [dw]
zone fluid property fluid-modulus [Kw]
zone fluid property pore-pressure-generation on
;
[global z1 = zone.find(1)]
[global gp1 = gp.near(1,1,1)]
fish define ssx
    local pp1 = zone.pp(z1)
    global sxx = zone.stress.xx(z1) + pp1
    global syy = zone.stress.yy(z1) + pp1
    global szz = zone.stress.zz(z1) + pp1
    global sxz = zone.stress.xz(z1)
    global rup = (p0 + (sxx+syy+szz)/3.0)/p0
    global ssx = gp.disp.x(gp1)
end
;
history interval 25
model history dynamic time-total
fish history ssx
fish history sxz
fish history szz
fish history rup
;
;
[global zf = gp.list(gp.pos(::gp.list)->z==1)]
fish operator cyclic(gp)
    if zone.stress(z1)->xz > csr*Sv0 then
        gp.vel(gp)->x = -rate
    else if zone.stress(z1)->xz < -csr*Sv0 then
        gp.vel(gp)->x = rate
    endif
end
;
model dynamic timestep fix 4.0e-5
model solve-dynamic time-total 2000 ...
    fish-halt [math.abs(gp.disp(gp1)->x) > ssv] ...
    fish-call -100 [cyclic(::zf)]
    
history export '1' '2' '3' '4' '5' file [txtfile] truncate
model save [savefile]