Applying Multiple Block Relax/Block Gridpoint Reaction Boundary Conditions

When constructing an excavation in multiple stages, I’d like to apply a relaxation factor to each excavation stage to simulate delay for support installation.

Its noted from the 3DEC manual ‘there can only be one relax condition active at a time. If a second block relax command is given, the applied forces from the previous block relax command are removed.’

When I apply a second ‘block relax’ command for the next excavation stage the boundary reaction on the previous stage is removed. I tried alternatively applying a ‘block gridpoint apply reaction’ command to the previous excavation stage to keep the boundary reaction in place but it appears only a single boundary reaction condition can be maintained in the model at any one time.

Is there any way around this?

yes - you are correct. You can only do one BLOCK RELAX at a time. This is kind of tricky to resolve. I’ll see if we can add multiple relax conditions to 3DEC.

In the short term, you would have to store existing applied forces and then re-apply them after giving the second BLOCK RELAX command. See example below:

model new
block create tunnel block-radial 5 length 0 5 block-axial 5

block join

block zone gen edge 1

block zone cmodel assign el
block zone prop dens 2000 bulk 1e9 shear 0.6e9

block insitu stress -10e6 -10e6 -10e6 0 0 0

block gridpoint apply vel-y 0 range pos-y 0
block gridpoint apply vel-y 0 range pos-y 5
block gridpoint apply vel 0 0 0 range pos-x -5
block gridpoint apply vel 0 0 0 range pos-x 5
block gridpoint apply vel 0 0 0 range pos-z -5
block gridpoint apply vel 0 0 0 range pos-z 5

model large-strain off
model solve

block group 'tunnel' range cyl end-1 0 0 0 end-2 0 5 0 rad 1

; take histories at top of tunnel
block hide range group 'tunnel'
block his disp pos 0,0.5,1
block his disp pos 0,1.5,1
block his disp pos 0,2.5,1
block his disp pos 0,3.5,1
block his disp pos 0,4.5,1
block hide off

; gradually excavate first stage
block relax min 0.2 linear 1000 range group 'tunnel' pos-y 0 2
model cyc 1500

model save 'exc-1'

; how do we do the second stage?

; store existing applied forces
; first find nodes on the surface
block gridpoint group 'surface1' range group 'relax'

fish def store_reaction
  loop foreach gp block.gp.list
    if block.gp.group(gp) = 'surface1'
       block.gp.extra(gp) = block.gp.force.app(gp)
    end_if
  end_loop
end
[store_reaction]

; now apply next stage relax condition
block relax min 0.2 linear 1000 range group 'tunnel' pos-y 2 4

; add back previous forces
fish def add_reaction
  loop foreach gp block.gp.list
    if block.gp.group(gp) = 'surface1'
      block.gp.force.app(gp) += block.gp.extra(gp)
    end_if
  end_loop
end
[add_reaction]

model cyc 1500

Thanks so much for this. Exactly what I was after!