首页/文章/ 详情

FLAC3D 6.0内部施加荷载(二)

11月前浏览1254
摘要:为了在模型内部施加荷载,FLAC 3D 6.0建议先对上部模型赋予null本构,然后使用zone face apply命令施加荷载,最后再对上部模型赋予非空本构。但对模型赋予null本构时会清空计算结果,因此此法只适用于未经过计算的模型。为解决这一问题,本文提出了一种针对计算后模型的内部荷载施加方法。


1. 方法思路

本方法的实现思路如下:

(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'

图1 模型图

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 _getGpForce    count = 0    loop foreach gpnt gp.list        if gp.isgroup(gpnt,'load') = 1 then            count += 1            ;此处所施加力与重力方向一致            ;采用gp.force.app.z()会计入所有z方向施加的力,包括重力            ;因此,此处force=总施加力-重力            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

2.4 读取本地文件并施加网格节点力

重新载入'ini.f3sav',建立两个数组idlist与forcelist,数组的大小与table ‘1'的尺寸一致;打开并读入上一步得到的idlist与flist文件,将其分别写入数组idlist与forcelist中;最后遍历读取数组idlist与forcelist中的数据,将其赋予给符合条件的网格点。





















model restore 'ini.f3savfish 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    endloopend@_applyIn

图3 运行结果

来源:FLAC3D小技巧
FLAC3D
著作权归作者所有,欢迎分享,未经许可,不得转载
首次发布时间:2023-12-26
最近编辑:11月前
FLAC3D小技巧
硕士 专注FLAC3D中的小技巧分享...
获赞 36粉丝 209文章 40课程 0
点赞
收藏
未登录
2条评论
zwk
签名征集中
3月前
博主太好了
回复
李大兰
签名征集中
5月前
up主您好,您写的案例和解析非常详细,对我受益匪浅。感谢分享
回复
课程
培训
服务
行家
VIP会员 学习 福利任务 兑换礼品
下载APP
联系我们
帮助与反馈