为了对计算后模型施加内部荷载,作者先前提出了“导来到去”的旧方法:
旧方法:
呱太Gekota,公 众号:FLAC3D小技巧FLAC3D 6.0内部施加荷载(二)
(1)在初始计算前,利用fish函数变量在内部面施加一个大小为0的面力,进行初始计算,方法如下:
<help文件建议方法>
呱太Gekota,公 众号:FLAC3D小技巧FLAC3D 6.0内部施加荷载与面荷载换算规则
2. 代码
model new
zone create brick size 6 6 6 group '2'
zone group '1' range position-z 0 3
zone split
zone face group 'load' internal range group '1' group '2'
zone cmodel assign null range group '2'
fish def _load
load = 0
end
@_load
zone face apply stress-normal -1.0 fish @load range group 'load'
zone cmodel assign elastic
zone property bulk 1e9 shear 5e8 density 1800
zone face skin
zone face apply velocity-normal 0 range group 'west' or 'east'
zone face apply velocity-normal 0 range group 'south' or 'north'
zone face apply velocity-normal 0 range group 'bottom'
model gravity 9.81
model solve
model save 'ini-1'
fish def _loadChange
load = 1e6
end
@_loadChange
model solve
model save 'final-1'
2.2 旧方法
model new
zone create brick size 6 6 6 group '1'
zone group '2' range position-z 3 6
zone split
zone cmodel assign elastic
zone property bulk 1e9 shear 5e8 dens 1800
zone face skin
zone face apply velocity-normal 0 range group 'South' or 'North'
zone face apply velocity-normal 0 range group 'West' or 'East'
zone face apply velocity-normal 0 range group 'Bottom'
model gravity 9.81
model solve
model save 'ini.f3sav'
model restore 'ini-2.f3sav
zone face group 'load' internal range group '1' group '2'
zone cmodel assign null range group '2'
zone face apply stress-normal -1e6 range group 'load'
model cycle 0
fish def _getGpForce
count = 0
loop foreach gpnt gp.list
if gp.isgroup(gpnt,'load') = 1 then
count += 1
force = gp.force.app.z(gpnt) - global.gravity.z()*gp.mass.gravity(gpnt)
table.x(1,count) = gp.id(gpnt)
table.y(1,count) = force
endif
endloop
arr_size = table.size(1)
idlist = array.create(arr_size)
flist = array.create(arr_size)
loop i(1,arr_size)
idlist(i) = table.x(1,i)
flist(i) = table.y(1,i)
endloop
oo = file.open('idlist',1,1)
oo = file.write(idlist,arr_size)
oo = file.close()
oo = file.open('flist',1,1)
oo = file.write(flist,arr_size)
oo = file.close()
end
@_getGpForce
model restore 'ini.f3sav
fish def _applyIn
array idlist(169)
array forcelist(169)
oo = file.open('idlist',0,1)
oo = file.read(idlist,169)
oo = file.close()
oo = file.open('flist',0,1)
oo = file.read(forcelist,169)
oo = file.close()
loop i(1,169)
gpnt = gp.find(idlist(i))
gpid = gp.id(gpnt)
force = int(forcelist(i))
command
zone gridpoint fix force-applied-z @force range id @gpid
endcommand
endloop
end
@_applyIn
model solve
model save 'final-2'
图1(a) 初始位移场(旧方法)
图1(b) 初始位移场(新方法)
图2(a) 初始zz应力(旧方法)
图2(b) 初始zz应力(新方法)
3.2 荷载施加阶段结果对比
图3(a) 位移场(旧方法)
图3(b) 位移场(新方法)
图4(a) zz应力(旧方法)
图4(b) zz应力(新方法)
图5(a) 荷载矢量(旧方法)
图5(b) 荷载矢量(新方法)