本方法的实现思路如下:
(1)复 制要施加内部荷载的结果文件;
(2)在复 制的结果文件中按照摘要中提到的方法施加内部荷载;
(3)获取目标网格点上所施加的力并写出到本地文件;
(4)读取本地文件,采用zone gridpoint fix施加对应网格点上的力。
本文主要代码均在以前出过专题介绍,详见:
施加内部荷载
呱太Gekota,公 众号:FLAC3D小技巧FLAC3D 6.0内部施加荷载与面荷载换算规则
写出本地文件并读入
呱太Gekota,公 众号:FLAC3D小技巧位移差?应力差?利用fish语言实现结果文件间运算。
2. 代码
2.1 准备结果文件
建立一个6*6*6的立方体,模型在z方向分为两个组,分别为'1'和'2',对模型赋予本构模型予参数、添加边界条件后计算自重应力场,将结果文件存为‘ini.f3sav'。计算完成后,复 制'ini.f3sav’文件并重命名为‘ini-2.f3sav'。
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'
2.2 施加内部荷载
在分组'1'与分组'2'之间建立一个名为'load’的面分组,并在该分组上施加大小为-1e6的法向应力。
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
图2 内部节点力效果图
2.3 获取网格点节点力并写出
首先对网格点进行局部遍历,将'load'面上网格点的ID、荷载分别写入table '1'的x、y列中;然后获取table '1'的尺寸(用笔记录该变量的值,在第四步中有用)并创建两个与之大小一致的数组idlist与flist,分别将table '1'的x、y列写入数组idlist与flist中;最后分别将数组idlist、flist中的数据写入本地文件idlist、flist中。
fish def _getGpForce
count = 0
loop foreach gpnt gp.list
if gp.isgroup(gpnt,'load') = 1 then
count += 1
;此处所施加力与重力方向一致
;采用gp.force.app.z()会计入所有z方向施加的力,包括重力
总施加力-重力 =
force = gp.force.app.z(gpnt) - global.gravity.z()*gp.mass.gravity(gpnt)
gp.id(gpnt) =
force =
endif
endloop
arr_size = table.size(1)
idlist = array.create(arr_size)
flist = array.create(arr_size)
loop i(1,arr_size)
table.x(1,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
2.4 读取本地文件并施加网格节点力
重新载入'ini.f3sav',建立两个数组idlist与forcelist,数组的大小与table ‘1'的尺寸一致;打开并读入上一步得到的idlist与flist文件,将其分别写入数组idlist与forcelist中;最后遍历读取数组idlist与forcelist中的数据,将其赋予给符合条件的网格点。
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
图3 运行结果