Excavation relaxation by incrementally reducing reaction forces


I believe the “solve relax” function in FLAC3D carries out stiffness reduction until the zone is null.

Previously a fish function was made available for UDEC and 3DEC, which instead “zonked” excavations, by incrementally reducing the reaction forces on the excavation boundaries when applied through the "block gridpoint apply reaction… " command.

Is a similar “zonk” function, which applies stress reduction to the excavation faces, rather than stiffness reduction of the excavation core available for FLAC3D?


1 Like

Hello, The zone relax command reduces stiffness, stresses and densities of the zone. Currently, this is only available in FLAC3D with plans to add this functionality to other codes in the future. The “zonk” function is sufficient, but lacks when trying to keep spurious inertial effects in check. Here is more information regarding zone relax.

1 Like

I just quickly made a small example:

; A simple example to manually relax by gradually reducing the reactions
model new
model large-strain off

zone create radial-cylinder size 1 1 50 50 ratio 1 1 1 1.1 point 1 20 0 0 …
point 2 0 0.2 0 point 3 0 0 20 dimension 1 1 1 1 group “Rock” fill on group “Excavation”
zone reflect normal -1 0 0 origin 0 0 0
zone reflect normal 0 0 -1 origin 0 0 0
zone face skin

zone cmodel assign mohr-coulomb
zone property density 2 bulk 5e8 shear 3e8 friction 30 cohesion 2000

zone face apply vel-z 0 range group “bottom” or “top”
zone face apply vel-x 0 range group “west” or “east”
zone face apply vel-y 0 range group “north” or “south”

zone initialize stress xx -8 yy -10 zz -12
model solve

; so far the model should be in equilibrium
; now start relaxation
zone cmodel assign null range group “Excavation”
zone face group “Wall” range group “Excavation” group “Rock”

zone gridpoint fix velocity (0,0,0) range group “Wall”
model cycle 1 ; A must to calculate the reactions

; read reactions and store them
[global gpWall = list(gp.list)(gp.isGroup(::gp.list,“Wall”))]
fish operator get_reactions(gp)
gp.extra(gp,1) = gp.force.unbal(gp)

[global starting_step = mech.step]
[global relaxation_steps = 5000] ; set how many steps to relax

fish define relaxation_factor
local fac = 1.0 - float(mech.step() - starting_step)/float(relaxation_steps)
if fac > 0.0 then
relaxation_factor = fac
relaxation_factor = 0.0

fish define do_relaxation
loop foreach local gp gpWall
gp.force.load(gp) = -gp.extra(gp,1)*relaxation_factor

zone gridpoint free velocity range group “Wall”
model solve cycle [relaxation_steps] fish-call -1 do_relaxation
model solve convergence 1
model save “done”