本方法的实现思路如下:
(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 newzone create brick size 6 6 6 group '1'zone group '2' range position-z 3 6zone splitzone cmodel assign elasticzone property bulk 1e9 shear 5e8 dens 1800zone face skinzone 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.81model solvemodel save 'ini.f3sav'

2.2 施加内部荷载
在分组'1'与分组'2'之间建立一个名为'load’的面分组,并在该分组上施加大小为-1e6的法向应力。
model restore 'ini-2.f3savzone 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 _getGpForcecount = 0loop foreach gpnt gp.listif gp.isgroup(gpnt,'load') = 1 thencount += 1;此处所施加力与重力方向一致;采用gp.force.app.z()会计入所有z方向施加的力,包括重力=总施加力-重力force = gp.force.app.z(gpnt) - global.gravity.z()*gp.mass.gravity(gpnt)= gp.id(gpnt)= forceendifendlooparr_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)endloopoo = 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.f3savfish def _applyInarray 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))commandzone gridpoint fix force-applied-z @force range id @gpidendcommandendloopend@_applyIn

图3 运行结果