首页/文章/ 详情

位移差?应力差?利用fish语言实现结果文件间运算。

10月前浏览6417
在使用FLAC3D计算完成后,有时需要对两个sav文件进行操作,以获得两个结果文件间的孔隙压力差云图、位移差云图以及应力差云图等。由于FLAC在restore结果文件时会自动清空当前内存里的所有fish变量,因此无法直接实现采用fish函数提取变量值再相减的思路。为解决这一问题,需要将第一次提取的变量值写出到本地文件,restore第二个结果文件后,再读入本地文件并执行相关操作,操作时可选用array,table以及map存储并写出文件。本文基于以上思路,使用array完成两个结果文件间的孔隙压力差云图。

======案例演示======

案例模型为20*20*20的立方体,分组情况见图1。首先对整个模型施加初始孔压1e3,保存结果为a.f3sav,孔压云图见图2;然后将a组的孔压归零,b组孔压固定为1e3,保存结果为b.f3sav,孔压云图见图3。案例演示的目的是得到结果a减去结果b的孔隙压力差云图,结果见图4。

图1 模型分组

图2 结果a的孔压云图

图3 结果b的孔压云图

图4 孔隙压力差云图
命令流如下:





























































;建立模型并储存结果文件model newzone create brick size 20 20 20 group 'a'zone group 'b' range position-x 5 15 position-z 5 15zone gridpoint initialize pore-pressure 1e3 model save 'a'zone gridpoint initialize pore-pressure 0 range group 'a'model save 'b';设置文件读写参数&获取数组所需sizemodel restore 'a.f3sav'fish def setup    io_read = 0     io_write = 1    io_ascii = 1    arr_size = gp.numend@setup;提取结果a中的孔隙压力值并写出到文件fish def pp_out    array id1(arr_size)    array pp1(arr_size)    n = 0    loop foreach gp1 gp.list        n = n+1        id1(n) = gp.id(gp1)        pp1(n) = gp.pp(gp1)    endloop    status = file.open('id_list',io_write,io_acsii)    status = file.write(id1,string(arr_size))    status = file.close    status = file.open('pp_list',io_write,io_acsii)    status = file.write(pp1,string(arr_size))    status = file.closeend@pp_out;设置文件读写参数&获取数组所需sizemodel restore 'b.f3sav'fish def setup    io_read = 0    io_write = 1    io_ascii = 1    arr_size = gp.numend@setup;读取结果a的孔隙压力值并与结果b的孔隙压力值相减fish def pp_minus    array id(arr_size)    array pp(arr_size)    status = file.open('id_list',io_read,io_acsii)    status = file.read(id,arr_size)    status = file.close    status = file.open('pp_list',io_read,io_acsii)    status = file.read(pp,arr_size)    status = file.close    loop i(1,arr_size)        gp = gp.find(id(i))        gp.pp(gp) = pp(i) - gp.pp(gp)    endloopend@pp_minusmodel save 'c'
注:命令流中文件读写参数的含义请自行查阅help文件。

======总结======

进行结果文件间的操作时,需要将前一个结果文件的数据写出到本地文件,以避免清空。进行文件的写出操作时,可采用array/table/map,写出文件的格式可以为txt/csv等,也可以像本文一样不指定后缀。应注意的是,采用csv格式存储时,会有存储行数的上限值,据反馈为104万行,本文命令流已通过800W+行数据检验,且10秒内完成孔压相减。读者可在此框架内进行修改,完成不同结果文件间不同变量的加减乘除操作。
来源:FLAC3D小技巧
UMFLAC3D
著作权归作者所有,欢迎分享,未经许可,不得转载
首次发布时间:2023-12-26
最近编辑:10月前
FLAC3D小技巧
硕士 专注FLAC3D中的小技巧分享...
获赞 35粉丝 205文章 40课程 0
点赞
收藏
未登录
还没有评论
课程
培训
服务
行家
VIP会员 学习 福利任务 兑换礼品
下载APP
联系我们
帮助与反馈