new
; ------------------------------------------------------------------------
; Excavation near a concrete wall, quarter symmetry
; There are 5 soil layers in the model (1 is the top, 5 is the bottom)
; The thickness of the layers is approximate (it depends on the grid
; resolution)
; The initial water table falls within layer 3 (it may be at the top
; of layer 3) - this is for stress initialization
; ------------------------------------------------------------------------
config fluid
def setup
; ************************************************************************
; --- quantities that can be changed by the user ---
; ************************************************************************
; (geometry)
_xexcav = 84.143/2. ; half length of excavation [m]
_yexcav = 36.566/2. ; half width of excavation [m]
_twall = 1.07 ; wall thickness [m]
_dwall = 26.5 ; wall depth, fsd (fsd=from surface, down)[m]
_soldier = 2.250 ; spacing c/c between soldier beams [m]
_dwater = 10.5 ; depth of initial water level, fsd [m]
;
_excav1 = 3.5 ; depth of excavation stage 1, fsd [m]
_excav2 = 8. ; 2
_excav3 = 13. ; 3
_excav4 = 17.5 ; 4
_excav5 = 23.5 ; final excavation depth, fsd [m]
;
_thick1 = 3.0 ; thickness of soil layer 1 (top)
_thick2 = 7.0 ; thickness of soil layer 2
_thick3 = 10.0 ; thickness of soil layer 3
_thick4 = 5.0 ; thickness of soil layer 4
; (layer 5 goes from base of layer 4 to base
; of model)
;
_xextens = _xexcav * 2. ; length of model xextension, beyond wall [m]
_yextens = _yexcav * 2. ; length of model yextension, beyond wall [m]
_zextens = _excav5 * 1. ; length of model z, beyond wall [m]
; (number of zones: z direction)
nzt = 13 ; on final excavation height
nzm = 2 ; between bottom of wall and final excavation
nzb = 6 ; below bottom of wall
; (number of zones: x direction)
nxl = 12 ; excavation
nw = 2 ; wall (>=2)
nxr = 12 ; extension
; (number of zones: y direction)
nyl = 5 ; excavation
nyr = 5 ; extension
; (number of segments for soldier beam)
_nseg = nzt
; (properties)
_grav = -9.81 ; gravity [m/s?2]
_fdens = 1e3 ; water density [kg/m?3]
_k0 = 0.6 ; k0
_dens1 = 1830. ; density of layer 1 (top)
_dens2 = 2000. ; 2
_dens3 = 2050. ; 3
_dens4 = 2100. ; 4
_dens5 = 2250. ; 5
_poro1 = 0.18 ; porosity of layer 1
_poro2 = 0.18 ; 2
_poro3 = 0.13 ; 3
_poro4 = 0.15 ; 4
_poro5 = 0.05 ; 5
; ************************************************************************
; --- derived quantities (do not change) ---
; (geometry)
if _dwall < _excav5 then
toto=out('*** wall must be longer than excavation depth in this setup')
command
stop
end_command
end_if
_height = _dwall + _zextens
_z1 = _zextens
_z2 = _height - _excav5
_z3 = _height
;
_x1 = _xexcav
_x2 = _x1 + _twall
_x3 = _x2 + _xextens
;
_y1 = _yexcav
_y2 = _y1 + _twall
_y3 = _y2 + _yextens
;
_zl1 = _height - _thick1
_zl2 = _zl1 - _thick2
_zl3 = _zl2 - _thick3
_zl4 = _zl3 - _thick4
;
nzs = int(nzt * _dwater/_excav5) ; # zones between surface and wt
nzs = max(1,nzs)
nzss = nzt - nzs ; # zones between wt and exc.bot.
;
_zexc1 = _height - _excav1
_zexc2 = _height - _excav2
_zexc3 = _height - _excav3
_zexc4 = _height - _excav4
_zexc5 = _z2
_drain1 = _zexc1 - 1.0 ; drain 1m below excavation
_drain2 = _zexc2 - 1.0
_drain3 = _zexc3 - 1.0
_drain4 = _zexc4 - 1.0
_drain5 = _zexc5 - 1.0
;
_wt = _height - _dwater ; height of initial water table
_eps = 0.1*_twall/float(nw) ; define 'small' dimension
_meps = -_eps
_wtp = _wt + _eps
_wtm = _wt - _eps
_x1p = _x1 + _eps
_x1m = _x1 - _eps
_y1p = _y1 + _eps
_y1m = _y1 - _eps
_x2p = _x2 + _eps
_x2m = _x2 - _eps
_y2p = _y2 + _eps
_y2m = _y2 - _eps
_x3p = _x3 + _eps
_x3m = _x3 - _eps
_y3p = _y3 + _eps
_y3m = _y3 - _eps
_wtplus1zone = _wt + (_height-_wt)/float(nzs)
_ppbot = _fdens * abs(_grav) * _wt ; initial pp, base of model
_gradpp = -_fdens * abs(_grav) ; initial pp gradient
; (properties)
_mobil = _perm/(_fdens*abs(_grav))
_zini = _height
_zfin = _zexc1
_stage = 0
end
setup
; --- model generation ---
; the origin of axes is at the base of the model, on the symmetry planes
; the model has 4 horizontal slices:
; between surface and initial water table,
; between water table and base of final excavation,
; between base of final excavation and base of wall,
; below base of wall
; It has 3 vertical slices in the x-direction, and 3 in the y-direction,
; the middle vertical slices correspond to the walls.
; We build the model in vertical slices, going in the y-direction.
; --- first vertical slice (excavation) ---
gen zone brick P0 0 0 0 P1 _x1 0 0 P2 0 _y1 0 P3 0 0 _z1 &
size nxl nyl nzb rat 1 1 0.9
gen zone brick P0 0 0 _z1 P1 _x1 0 _z1 P2 0 _y1 _z1 P3 0 0 _z2 &
size nxl nyl nzm rat 1 1 1
gen zone brick P0 0 0 _z2 P1 _x1 0 _z2 P2 0 _y1 _z2 P3 0 0 _wt &
size nxl nyl nzss rat 1 1 1
gen zone brick P0 0 0 _wt P1 _x1 0 _wt P2 0 _y1 _wt P3 0 0 _z3 &
size nxl nyl nzs rat 1 1 1
;
gen zone brick P0 _x1 0 0 P1 _x2 0 0 P2 _x1 _y1 0 P3 _x1 0 _z1 &
size nw nyl nzb rat 1 1 0.9
gen zone brick P0 _x1 0 _z1 P1 _x2 0 _z1 P2 _x1 _y1 _z1 P3 _x1 0 _z2 &
size nw nyl nzm rat 1 1 1
gen zone brick P0 _x1 0 _z2 P1 _x2 0 _z2 P2 _x1 _y1 _z2 P3 _x1 0 _wt &
size nw nyl nzss rat 1 1 1
gen zone brick P0 _x1 0 _wt P1 _x2 0 _wt P2 _x1 _y1 _wt P3 _x1 0 _z3 &
size nw nyl nzs rat 1 1 1
;
gen zone brick P0 _x2 0 0 P1 _x3 0 0 P2 _x2 _y1 0 P3 _x2 0 _z1 &
size nxr nyl nzb rat 1 1 0.9
gen zone brick P0 _x2 0 _z1 P1 _x3 0 _z1 P2 _x2 _y1 _z1 P3 _x2 0 _z2 &
size nxr nyl nzm rat 1 1 1
gen zone brick P0 _x2 0 _z2 P1 _x3 0 _z2 P2 _x2 _y1 _z2 P3 _x2 0 _wt &
size nxr nyl nzss rat 1 1 1
gen zone brick P0 _x2 0 _wt P1 _x3 0 _wt P2 _x2 _y1 _wt P3 _x2 0 _z3 &
size nxr nyl nzs rat 1 1 1
; --- second vertical slice (wall) ---
gen zone brick P0 0 _y1 0 P1 _x1 _y1 0 P2 0 _y2 0 P3 0 _y1 _z1 &
size nxl nw nzb rat 1 1 0.9
gen zone brick P0 0 _y1 _z1 P1 _x1 _y1 _z1 P2 0 _y2 _z1 P3 0 _y1 _z2 &
size nxl nw nzm rat 1 1 1
gen zone brick P0 0 _y1 _z2 P1 _x1 _y1 _z2 P2 0 _y2 _z2 P3 0 _y1 _wt &
size nxl nw nzss rat 1 1 1
gen zone brick P0 0 _y1 _wt P1 _x1 _y1 _wt P2 0 _y2 _wt P3 0 _y1 _z3 &
size nxl nw nzs rat 1 1 1
;
gen zone brick P0 _x1 _y1 0 P1 _x2 _y1 0 P2 _x1 _y2 0 P3 _x1 _y1 _z1 &
size nw nw nzb rat 1 1 0.9
gen zone bric P0 _x1 _y1 _z1 P1 _x2 _y1 _z1 P2 _x1 _y2 _z1 P3 _x1 _y1 _z2 &
size nw nw nzm rat 1 1 1
gen zone bric P0 _x1 _y1 _z2 P1 _x2 _y1 _z2 P2 _x1 _y2 _z2 P3 _x1 _y1 _wt &
size nw nw nzss rat 1 1 1
gen zone bric P0 _x1 _y1 _wt P1 _x2 _y1 _wt P2 _x1 _y2 _wt P3 _x1 _y1 _z3 &
size nw nw nzs rat 1 1 1
;
gen zone brick P0 _x2 _y1 0 P1 _x3 _y1 0 P2 _x2 _y2 0 P3 _x2 _y1 _z1 &
size nxr nw nzb rat 1 1 0.9
gen zone bric P0 _x2 _y1 _z1 P1 _x3 _y1 _z1 P2 _x2 _y2 _z1 P3 _x2 _y1 _z2 &
size nxr nw nzm rat 1 1 1
gen zone bric P0 _x2 _y1 _z2 P1 _x3 _y1 _z2 P2 _x2 _y2 _z2 P3 _x2 _y1 _wt &
size nxr nw nzss rat 1 1 1
gen zone bric P0 _x2 _y1 _wt P1 _x3 _y1 _wt P2 _x2 _y2 _wt P3 _x2 _y1 _z3 &
size nxr nw nzs rat 1 1 1
; --- third vertical slice (extension) ---
gen zone brick P0 0 _y2 0 P1 _x1 _y2 0 P2 0 _y3 0 P3 0 _y2 _z1 &
size nxl nyr nzb rat 1 1 0.9
gen zone brick P0 0 _y2 _z1 P1 _x1 _y2 _z1 P2 0 _y3 _z1 P3 0 _y2 _z2 &
size nxl nyr nzm rat 1 1 1
gen zone brick P0 0 _y2 _z2 P1 _x1 _y2 _z2 P2 0 _y3 _z2 P3 0 _y2 _wt &
size nxl nyr nzss rat 1 1 1
gen zone brick P0 0 _y2 _wt P1 _x1 _y2 _wt P2 0 _y3 _wt P3 0 _y2 _z3 &
size nxl nyr nzs rat 1 1 1
;
gen zone brick P0 _x1 _y2 0 P1 _x2 _y2 0 P2 _x1 _y3 0 P3 _x1 _y2 _z1 &
size nw nyr nzb rat 1 1 0.9
gen zone bric P0 _x1 _y2 _z1 P1 _x2 _y2 _z1 P2 _x1 _y3 _z1 P3 _x1 _y2 _z2 &
size nw nyr nzm rat 1 1 1
gen zone bric P0 _x1 _y2 _z2 P1 _x2 _y2 _z2 P2 _x1 _y3 _z2 P3 _x1 _y2 _wt &
size nw nyr nzss rat 1 1 1
gen zone bric P0 _x1 _y2 _wt P1 _x2 _y2 _wt P2 _x1 _y3 _wt P3 _x1 _y2 _z3 &
size nw nyr nzs rat 1 1 1
;
gen zone brick P0 _x2 _y2 0 P1 _x3 _y2 0 P2 _x2 _y3 0 P3 _x2 _y2 _z1 &
size nxr nyr nzb rat 1 1 0.9
gen zone bric P0 _x2 _y2 _z1 P1 _x3 _y2 _z1 P2 _x2 _y3 _z1 P3 _x2 _y2 _z2 &
size nxr nyr nzm rat 1 1 1
gen zone bric P0 _x2 _y2 _z2 P1 _x3 _y2 _z2 P2 _x2 _y3 _z2 P3 _x2 _y2 _wt &
size nxr nyr nzss rat 1 1 1
gen zone bric P0 _x2 _y2 _wt P1 _x3 _y2 _wt P2 _x2 _y3 _wt P3 _x2 _y2 _z3 &
size nxr nyr nzs rat 1 1 1
gen merge _eps
; --- group ---
group soil1 range z _zl1 _height
group soil2 range z _zl2 _zl1
group soil3 range z _zl3 _zl2
group soil4 range z _zl4 _zl3
group soil5 range z 0 _zl4
; --- fluid flow model ---
model fl_iso
prop perm=1e-7 poro=_poro1 range group soil1 ; top
prop perm=1e-7 poro=_poro2 range group soil2
prop perm=1e-7 poro=_poro3 range group soil3
prop perm=1e-7 poro=_poro4 range group soil4
prop perm=1e-7 poro=_poro5 range group soil5 ; bottom
ini fdens=_fdens
ini fmod=2e8 ftens=-1e-3
ini pp _ppbot grad 0 0 _gradpp range z 0 _wt
ini sat 0 range z _wtp _z3
fix pp 0 range z _wtm _wtp
; --- mechanical model ---
model mohr
prop bulk 25e6 shear 11.6e6 fric 26 cohesion 25e3 dil 0 tension 1e10 &
density _dens1 range group soil1
prop bulk 81.9e6 shear 37.8e6 fric 34 cohesion 0 dil 2 tension 1e10 &
density _dens2 range group soil2
prop bulk 147e6 shear 68e6 fric 38 cohesion 0 dil 5 tension 1e10 &
density _dens3 range group soil3
prop bulk 333e6 shear 154e6 fric 42 cohesion 350e3 dil 5 tension 1e10 &
density _dens4 range group soil4
prop bulk 833e6 shear 625e6 fric 45 cohesion 1.5e7 dil 0 tension 1e10 &
density _dens5 range group soil5
def ini_szz
; --- layer 1 is dry ---
_grad = -_dens1*_grav ; (a positive value)
_szzl = -_grad*(_height - _zl1)
_szz0 = -_grad*_height ; (value at the origin)
command
ini szz add _szz0 grad 0 0 _grad range z _zl1 _height
ini szz add _szzl range z 0 _zl1
end_command
; --- layer 2 is dry ---
_grad = -_dens2*_grav ; (a positive value)
_szzl = -_grad*(_zl1 - _zl2)
_szz0 = -_grad*_zl1
command
ini szz add _szz0 grad 0 0 _grad range z _zl2 _zl1
ini szz add _szzl range z 0 _zl2
end_command
; --- layer 3 is dry at the top, saturated at the bottom ---
; (top)
_grad = -_dens3*_grav ; (a positive value)
_szzl = -_grad*(_zl2 - _wt)
_szz0 = -_grad*_zl2
command
ini szz add _szz0 grad 0 0 _grad range z _wt _zl2
ini szz add _szzl range z 0 _wt
end_command
; (zone above the water table has saturation 0.5)
_grad = -(0.5*_poro3*_fdens)*_grav
_szzl = -_grad*(_wtplus1zone-_wt)
_szz0 = _szzl/2.
command
ini szz add _szz0 range z _wt _wtplus1zone
ini szz add _szzl range z 0 _wt
end_command
; (bottom)
_grad = -(_dens3+_poro3*_fdens)*_grav ; (a positive value)
_szzl = -_grad*(_wt - _zl3)
_szz0 = -_grad*_wt
command
ini szz add _szz0 grad 0 0 _grad range z _zl3 _wt
ini szz add _szzl range z 0 _zl3
end_command
; --- layer 4 is saturated ---
_grad = -(_dens4+_poro4*_fdens)*_grav ; (a positive value)
_szzl = -_grad*(_zl3 - _zl4)
_szz0 = -_grad*_zl3
command
ini szz add _szz0 grad 0 0 _grad range z _zl4 _zl3
ini szz add _szzl range z 0 _zl4
end_command
; --- layer 5 is saturated ---
_grad = -(_dens5+_poro5*_fdens)*_grav ; (a positive value)
_szz0 = -_grad*_zl4
command
ini szz add _szz0 grad 0 0 _grad range z 0 _zl4
end_command
end
ini_szz
def ini_conf
pnt = zone_head
loop while pnt # null
val = _k0*z_szz(pnt)+(_k0-1.)*z_pp(pnt)
z_sxx(pnt) = val
z_syy(pnt) = val
pnt=z_next(pnt)
end_loop
end
ini_conf
fix x range x _meps _eps ; plane of symmetry
fix y range y _meps _eps ; plane of symmetry
fix x y z range z _meps _eps ; base
fix x y z range x _x3m _x3p ; far x
fix x y z range y _y3m _y3p ; far y
; --- setting ---
set gravity 0 0 _grav
set mech ratio 1e-4
set fluid ratio 1e-4
; --- check initial conditions ---
solve
save inidis0.sav
; --- concrete wall installation ---
; (wall is impermeable)
group wall range x _x1 _x2 y 0 _y2 z _z1 _z3
group wall range x 0 _x1 y _y1 _y2 z _z1 _z3
prop poro 0 range group wall
ini pp 0 range group wall
model fl_null range group wall
;
ini fmod 0
set flow off mech on
solve
prop density 2500 range group wall
prop young 2.5e10 poisson 0.4 frict 45 cohes 4e6 tens 2e6 range group wall
his gp zdis _x1 0 _z2
hist unbal
solve
prop tens 0.0
prop tens 2e6 range group wall
solve
save inidis.sav
ini xdis 0 ydis 0 zdis 0
his reset
; (wall has reinforcement)
call TieGeom.fis
soldier_pile
sel beam prop emod=2.05e11 nu=0.3
sel beam prop XCArea=1.44e-2 XCIz=875e-6 XCIy=875e-6 XCJ=0.0
solve
save ini.sav
; --- histories ---
; <--(add histories)
his unbal
his gp pp 0 _ys _z1
his gp pp _xs 0 _z1
his gp pp _xs _ys _z1
his gp zdis 0 0 _z2
his gp xdis _x1 0 _z2
his gp xdis _x1 0 _z3
his gp ydis 0 _y1 _z2
his gp ydis 0 _y1 _z3
his sel beamsel moment my end1 cid=1
his sel beamsel force fz end1 cid=1
his sel beamsel moment my end1 cid=3
his sel beamsel force fz end1 cid=3
his sel beamsel moment my end1 cid=5
his sel beamsel force fz end1 cid=5
his sel beamsel moment my end1 cid=7
his sel beamsel force fz end1 cid=7
his sel beamsel moment my end1 cid=9
his sel beamsel force fz end1 cid=9
; --- fish function to excavate in increments ---
; input: _zini initial elevation
; _zfin final elevation
; -----------------------------------------------
def _excavate
_stage = _stage + 1
_step = (_z3-_z2)/float(nzt)
_nsteps= int((_zini-_zfin)/_step)
if _nsteps*_step < _zini-_zfin then ;<--(look: remove to excavate 'less')
_nsteps = _nsteps + 1
end_if
_zbot = _zini
loop _istep (1,_nsteps)
_zbot = _zbot - _step
oo=out(' excavation stage '+string(_stage))
oo=out{' : step '+string(_istep)+' out of '+string(_nsteps))
oo=out(' zbot = '+string(_zbot)+' zfin = '+string(_zfin))
oo=out(' step = '+string(_step))
command
; pause
mod null range x 0 _x1 y 0 _y1 z _zbot _z3
set fluid off mech on
ini fmod 0
solve
end_command
end_loop
end
; --------------------------
; - EXCAVATION STAGE 1 -
; --------------------------
; --- above water level (_drain1 > _wt), no need to drain ---
fix pp 0 range x _x2m _x3 z _wtm _wtp
fix pp 0 range x 0 _x2 y _y2m _y3 z _wtm _wtp
;
fix pp 0 range x 0 _x1p y 0 _y1p z _wtm _wtp
; --- excavate in stages ---
set _zini=_height _zfin=_zexc1
_excavate
save Aexcavate1.sav
; --- first level of tie-backs ---
set _tielevel = 1
_createTie
; cable 1 - tieback1 section closest to the beam
; cable 2 - tieback1 section furthest from the beam
sel cable id 1 prop emod 2.05e11 gr_coh 0.0 gr_fric 0.0 gr_k 0.0
sel cable id 1 ycomp 1.0e5 ytens 15.34e5 xcarea 5.54e-3
sel cable id 2 prop emod 2.05e11 gr_coh 1.5e10 gr_fric 25.0 gr_per 0.264
sel cable id 2 gr_k 0.56e9 ycomp 1.0e5 ytens 15.34e5 xcarea 5.54e-3
;
hist sel cable force cid 604
hist sel cable force cid 605
;
; apply a tensile force on the break in the tiebacks
; (the first level of tiebacks)
_appTieLoad
plot create grid_disp
plot set cent 61.89,27.32,19.89
plot set rot 25 0 60
plot set dist 379.9
plot add contour disp outline on
plot add hist 20 21
plot show
set mech ratio 1e-5
solve
; close the gap in the tiebacks on level 1
_closeTie
solve
sel cable id 2 prop gr_coh 1.5e5
solve
save Astage1.sav
; --------------------------
; - EXCAVATION STAGE 2 -
; --------------------------
; --- above water level (_drain2 > _wt), no need to drain ---
; --- excavate in stages ---
set _zini=_zbot _zfin=_zexc2
_excavate
; --- second level of tie-backs ---
set _tielevel = 2
_createTie
sel cable id 3 prop emod 2.05e11 gr_coh 0.0 gr_fric 0.0 gr_k 0.0
sel cable id 3 ycomp 1.0e5 ytens 15.34e5 xcarea 5.54e-3
sel cable id 4 prop emod 2.05e11 gr_coh 1.5e10 gr_fric 25.0 gr_per 0.264
sel cable id 4 gr_k 0.56e9 ycomp 1.0e5 ytens 15.34e5 xcarea 5.54e-3
;
hist sel cable force cid 1036
hist sel cable force cid 1037
;
_appTieLoad
solve
_closeTie
solve
sel cable id 4 prop gr_coh 1.5e5
solve
save Astage2.sav
; --------------------------
; - EXCAVATION STAGE 3 -
; --------------------------
; --- drain 1m below base of excavation ---
group drain3 range x 0 _x1 y 0 _y1 z _drain3 _z3
; (flow first)
set fluid on mech off
fix pp 0 range group drain3
model fl_null range group drain3
ini fmod 20
ini fmod 2 range x _x1 _x2
ini fmod 2 range y _y1 _y2
solve
save App3.sav
; (mech next)
set fluid off mech on
ini fmod 0
solve
save App3m.sav
; --- excavate in stages ---
set _zini=_zbot _zfin=_zexc3
_excavate
save Aexcav3.sav
; --- third level of tie-backs ---
set _tielevel = 3
_createTie
sel cable id 5 prop emod 2.05e11 gr_coh 0.0 gr_fric 0.0 gr_k 0.0
sel cable id 5 ycomp 1.0e5 ytens 15.34e5 xcarea 5.54e-3
sel cable id 6 prop emod 2.05e11 gr_coh 1.5e10 gr_fric 25.0 gr_per 0.264
sel cable id 6 gr_k 0.56e9 ycomp 1.0e5 ytens 15.34e5 xcarea 5.54e-3
;
hist sel cable force cid 1468
hist sel cable force cid 1469
;
_appTieLoad
solve
_closeTie
solve
sel cable id 6 prop gr_coh 1.5e5
solve
save Astage3.sav
; --------------------------
; - EXCAVATION STAGE 4 -
; --------------------------
; --- drain 1m below base of excavation ---
group drain4 range x 0 _x1 y 0 _y1 z _drain4 _z3
; (flow first)
set fluid on mech off
fix pp 0 range group drain4
mo fl_null range group drain4
ini fmod 20
ini fmod 2 range x _x1 _x2
ini fmod 2 range y _y1 _y2
solve
save App4.sav
; (mech next)
set fluid off mech on
ini fmod 0
solve
save App4m.sav
; --- excavate in stages ---
set _zini=_zbot _zfin=_zexc4
_excavate
save Aexcav4.sav
; --- fourth level of tie-backs ---
set _tielevel = 4
_createTie
sel cable id 7 prop emod 2.05e11 gr_coh 0.0 gr_fric 0.0 gr_k 0.0
sel cable id 7 ycomp 1.0e5 ytens 15.34e5 xcarea 5.54e-3
sel cable id 8 prop emod 2.05e11 gr_coh 1.5e10 gr_fric 25.0 gr_per 0.264
sel cable id 8 gr_k 0.56e9 ycomp 1.0e5 ytens 15.34e5 xcarea 5.54e-3
;
hist sel cable force cid 1900
hist sel cable force cid 1901
;
_appTieLoad
solve
_closeTie
solve
sel cable id 8 prop gr_coh 1.5e5
solve
save Astage4.sav
; --------------------------
; - FINAL EXCAVATION STAGE -
; --------------------------
; --- drain 1m below base of excavation ---
group drain5 range x 0 _x1 y 0 _y1 z _drain5 _z3
; (flow first)
set fluid on mech off
fix pp 0 range group drain5
mo fl_null range group drain5
ini fmod 20
ini fmod 2 range x _x1 _x2
ini fmod 2 range y _y1 _y2
solve
save App5.sav
; (mech next)
set fluid off mech on
ini fmod 0
solve
save App5m.sav
; --- excavate in stages ---
set _zini=_zbot _zfin=_zexc5
_excavate
save Astage5.sav
ret
这是tiegeom.fis
def _setuptie
; 每个壁最大50根桩(梁结构)
array _xwndptr(50, 12) ; x方向壁梁构件的结点数组
array _ywndptr(50, 12) ; y方向壁梁构件的结点数组
end
_setuptie
def _tievars
; _bdist1,2,3,4 = 从梁的顶部至第1,2,3,4根锚杆的距离
_len = _zb1 - _zb0
_bdist1 = _len * 0.104
_bdist2 = _len * 0.274
_bdist3 = _len * 0.462
_bdist4 = _len * 0.651
caseof _tielevel
case 1
_tslope = -0.466 ; slope of tieback
_length1 = 9.674 ; distance from beam to break in tieback
_length2 = 9.897 ; distance from beam to other side of break in tieback
_lengthtot = 21.897 ; total length of tieback
_tload = 800000 ; pretension force
_tsegs1 = 5 ; number of tieback segments in section next to beam
_tsegs2 = 10 ; number of tieback segments in section away from beam
case 2
_tslope = -0.465 ; slope of tieback
_length1 = 7.468 ; distance from beam to break in tieback
_length2 = 7.692 ; distance from beam to other side of break in tieback
_lengthtot = 19.691 ; total length of tieback
_tload = 900000 ; pretension force
_tsegs1 = 5 ; number of tieback segments in section next to beam
_tsegs2 = 10 ; number of tieback segments in section away from beam
case 3
_tslope = -0.464 ; slope of tieback
_length1 = 4.964 ; distance from beam to break in tieback
_length2 = 5.188 ; distance from beam to other side of break in tieback
_lengthtot = 17.187 ; total length of tieback
_tload = 1150000 ; pretension force
_tsegs1 = 5 ; number of tieback segments in section next to beam
_tsegs2 = 10 ; number of tieback segments in section away from beam
case 4
_tslope = -0.471 ; slope of tieback
_length1 = 2.174 ; distance from beam to break in tieback
_length2 = 2.398 ; distance from beam to other side of break in tieback
_lengthtot = 14.398 ; total length of tieback
_tload = 1150000 ; pretension force
_tsegs1 = 5 ; number of tieback segments in section next to beam
_tsegs2 = 10 ; number of tieback segments in section away from beam
endcase
_toffset = (_tielevel-1)*3 ; offset into node arrays
end
def _createBeam
command
sel beam begin=(_xb0, _yb0, _zb0) end=(_xb1, _yb1, _zb1) nseg = _nseg
end_command
_tievars
; find the nodes on the beam that will join with the tiebacks
if _xwall = 1 then
_ztemp = _zb1 - _bdist1
_xwndptr(_setnum, 1) = nd_near(_xb0, _yb0, _ztemp)
_ztemp = _zb1 - _bdist2
_xwndptr(_setnum, 4) = nd_near(_xb0, _yb0, _ztemp)
_ztemp = _zb1 - _bdist3
_xwndptr(_setnum, 7) = nd_near(_xb0, _yb0, _ztemp)
_ztemp = _zb1 - _bdist4
_xwndptr(_setnum, 10) = nd_near(_xb0, _yb0, _ztemp)
else
_ztemp = _zb1 - _bdist1
_ywndptr(_setnum, 1) = nd_near(_xb0, _yb0, _ztemp)
_ztemp = _zb1 - _bdist2
_ywndptr(_setnum, 4) = nd_near(_xb0, _yb0, _ztemp)
_ztemp = _zb1 - _bdist3
_ywndptr(_setnum, 7) = nd_near(_xb0, _yb0, _ztemp)
_ztemp = _zb1 - _bdist4
_ywndptr(_setnum, 10) = nd_near(_xb0, _yb0, _ztemp)
end_if
end
; (wall has reinforcement)
def soldier_pile
; coords of beam bottom and top respectively
; (_xb0, _yb0, _zb0) (_xb1, _yb1, _zb1)
; --- (x-wall) ---
_xs = (_x1+_x2)/2.
_xb0 = _xs
_xb1 = _xs
_yb0 = _soldier/2.
_yb1 = _yb0
_zb0 = _z1
_zb1 = _z3
_setnum = 0
_xwall = 1
loop while _yb0 < _y1
_setnum = _setnum + 1
_createBeam
_yb0 = _yb0 + _soldier
_yb1 = _yb0
end_loop
_maxXSets = _setnum
; --- (y-wall) ---
_xwall = 0
_setnum = 0
_xb0 = _soldier/2.
_xb1 = _xb0
_ys = (_y1+_y2)/2.
_yb0 = _ys
_yb1 = _ys
loop while _xb0 < _x1 ; <--(look: use _x2 for beam in corner)
_setnum = _setnum + 1
_createBeam
_xb0 = _xb0 + _soldier
_xb1 = _xb0
end_loop
_maxYSets = _setnum
end
; Create the top tieback on a beam, x-wall
def _createTieX
; get the node where the tieback joins the beam
_nd = _xwndptr(_setnum, 1+_toffset)
_xt0 = nd_pos(_nd, 2, 1)
_yt0 = nd_pos(_nd, 2, 2)
_zt0 = nd_pos(_nd, 2, 3)
_len = sqrt(_tslope? + 1)
; delta distances to the break in the tieback and end of tieback
_delx1 = _length1 / _len
_delx2 = _length2 / _len
_delx3 = _lengthtot / _len
_delz1 = _length1 * _tslope / _len
_delz2 = _length2 * _tslope / _len
_delz3 = _lengthtot * _tslope / _len
_transx = 20000.0
_xlo = 10000.0
_xhi = 30000.0
_xt0 = _xt0 + _transx
_yt0 = _yt0
_zt0 = _zt0
_xt3 = _xt0 + _delx3
_yt3 = _yt0
_zt3 = _zt0 + _delz3
_xt2 = _xt0 + _delx2
_yt2 = _yt0
_zt2 = _zt0 + _delz2
_xt1 = _xt0 + _delx1
_yt1 = _yt0
_zt1 = _zt0 + _delz1
_cabid2 = _tielevel * 2
_cabid1 = _cabid2 - 1
command
sel cab id _cabid2 beg=(_xt3,_yt3,_zt3) end=(_xt2,_yt2,_zt2) nseg = _tsegs2
sel cab id _cabid1 beg=(_xt1,_yt1,_zt1) end=(_xt0,_yt0,_zt0) nseg = _tsegs1
end_command
; find the nodes on the tieback where the break occurs for the pretension
_xwndptr(_setnum, 2+_toffset) = nd_near(_xt1, _yt1, _zt1)
_xwndptr(_setnum, 3+_toffset) = nd_near(_xt2, _yt2, _zt2)
_ndtie = nd_near(_xt0, _yt0, _zt0)
_ndtieid = nd_id(_ndtie)
_ndbeamid = nd_id(_xwndptr(_setnum,1+_toffset))
_transx = -_transx
command
sel node init xpos add _transx range x _xlo _xhi
end_command
_createTieLink
end
; Create the top tieback on a beam, y-wall
def _createTieY
; get the node where the tieback joins the beam
_nd = _ywndptr(_setnum, 1+_toffset)
_xt0 = nd_pos(_nd, 2, 1)
_yt0 = nd_pos(_nd, 2, 2)
_zt0 = nd_pos(_nd, 2, 3)
_len = sqrt(_tslope? + 1)
; delta distances to the break in the tieback and end of tieback
_dely1 = _length1 / _len
_dely2 = _length2 / _len
_dely3 = _lengthtot / _len
_delz1 = _length1 * _tslope / _len
_delz2 = _length2 * _tslope / _len
_delz3 = _lengthtot * _tslope / _len
_transx = 20000.0
_xlo = 10000.0
_xhi = 30000.0
_xt0 = _xt0 + _transx
_yt0 = _yt0
_zt0 = _zt0
_xt3 = _xt0
_yt3 = _yt0 + _dely3
_zt3 = _zt0 + _delz3
_xt2 = _xt0
_yt2 = _yt0 + _dely2
_zt2 = _zt0 + _delz2
_xt1 = _xt0
_yt1 = _yt0 + _dely1
_zt1 = _zt0 + _delz1
command
sel cab id 2 beg=(_xt3,_yt3,_zt3) end=(_xt2,_yt2,_zt2) nseg = _tsegs2
sel cab id 1 beg=(_xt1,_yt1,_zt1) end=(_xt0,_yt0,_zt0) nseg = _tsegs1
end_command
; find the nodes on the tieback where the break occurs for the pretension
_ywndptr(_setnum, 2+_toffset) = nd_near(_xt1, _yt1, _zt1)
_ywndptr(_setnum, 3+_toffset) = nd_near(_xt2, _yt2, _zt2)
_ndtie = nd_near(_xt0, _yt0, _zt0)
_ndtieid = nd_id(_ndtie)
_ndbeamid = nd_id(_ywndptr(_setnum,1+_toffset))
_transx = -_transx
command
sel node init xpos add _transx range x _xlo _xhi
end_command
_createTieLink
end
def _createTieLink
; rigidly link the tieback node to the beam
; first delete the link on _ndtie
_lp = lk_head
section
loop while _lp # null
_lnext = lk_next(_lp)
if lk_node(_lp) = _ndtie then
ii = lk_delete(_lp)
exit section
endif
_lp = _lnext
end_loop
end_section
command
sel link _ndtieid target node tgt_num _ndbeamid
end_command
_lkptr = nd_link(_ndtie)
_lkid = lk_id(_lkptr)
command
sel link attach xdir rigid range id _lkid
sel link attach ydir rigid range id _lkid
sel link attach zdir rigid range id _lkid
end_command
end
def _createTie
_tievars
; --- (x-wall) ---
_yb0 = _soldier/2.
_zb0 = _z1
_zb1 = _z3
_setnum = 0
loop while _yb0 < _y1
_setnum = _setnum + 1
_createTieX
_yb0 = _yb0 + _soldier
end_loop
; --- (y-wall) ---
_setnum = 0
_xb0 = _soldier/2.
_ys = (_y1+_y2)/2.
_yb0 = _ys
loop while _xb0 < _x1 ; <--(look: use _x2 for beam in corner)
_setnum = _setnum + 1
_createTieY
_xb0 = _xb0 + _soldier
end_loop
end
; apply a tensile force at the break in the tiebacks
; (the first level of tiebacks)
def _appTieLoad
; loop through each tieback
loop ii(1, _maxXSets)
; get the nodes to apply loads to
_nd1 = _xwndptr(ii, 2+_toffset)
_nd2 = _xwndptr(ii, 3+_toffset)
_ndid1 = nd_id(_nd1)
_ndid2 = nd_id(_nd2)
_ntload = -_tload
command
sel node apply force _ntload 0 0 system local range id _ndid1
sel node apply force _tload 0 0 system local range id _ndid2
end_command
end_loop
loop ii(1, _maxYSets)
; get the nodes to apply loads to
_nd1 = _ywndptr(ii, 2+_toffset)
_nd2 = _ywndptr(ii, 3+_toffset)
_ndid1 = nd_id(_nd1)
_ndid2 = nd_id(_nd2)
command
sel node apply force _ntload 0 0 system local range id _ndid1
sel node apply force _tload 0 0 system local range id _ndid2
end_command
end_loop
end
; close the gap in the upper level tiebacks
def _closeTie
_cabid1 = (_tielevel * 2) - 1
; loop through each tieback
loop ii(1, _maxXSets)
_nd1 = _xwndptr(ii, 2+_toffset)
_nd2 = _xwndptr(ii, 3+_toffset)
_ndid1 = nd_id(_nd1)
_ndid2 = nd_id(_nd2)
command
sel cablesel id _cabid1 nodes _ndid2 _ndid1
sel node apply remove force range id _ndid1
sel node apply remove force range id _ndid2
end_command
end_loop
loop ii(1, _maxYSets)
; get the nodes to apply loads to
_nd1 = _ywndptr(ii, 2+_toffset)
_nd2 = _ywndptr(ii, 3+_toffset)
_ndid1 = nd_id(_nd1)
_ndid2 = nd_id(_nd2)
command
sel cablesel id _cabid1 nodes _ndid2 _ndid1
sel node apply remove force range id _ndid1
sel node apply remove force range id _ndid2
end_command
end_loop
end
运行至打第一排锚杆软件报错: must specify [begin]
求高人指点