首页/文章/ 详情

FLAC3D6.0各类指针获取详解

11月前浏览1161
摘要:本文对FLAC3D6.0中涉及到的各类型指针获取进行了详细介绍。

1. 计算模型

建立一个6*6*6的立方体作为本次讲解的模型。




;generate modelmodel newzone create brick size 6 6 6

图1 计算模型

阅读本文后续内容前,请务必熟悉遍历相关知识,如不熟悉,可阅读下文:

FLAC3D6.0遍历详解

呱太Gekota,公 众号:FLAC3D小技巧FLAC3D 6.0新手向——遍历详解

2. 各类指针获取

2.1 单元指针
单元指针的获取方式有三种,在之前的文章里也有提到过,分别是:1)已知单元ID号;2)已知单元大致坐标;3)遍历模型逐个获取单元指针。代码如下:












;zone pointerfish def _getZonePointer    ;已知单元ID 指针名 = zone.find(单元ID)    z1 = zone.find(1)    ;已知单元坐标 指针名 = zone.near(x,y,z) 自动获取距该坐标处最近的单元指针    z2 = zone.near(3,3,3)    ;遍历单元    loop foreach z3 zone.list        zID = zone.id(z3)    endloopend@_getZonePointer
2.2 网格点指针
网格点指针的获取方式有三种,与单元指针情况一样。代码如下:









;gridpoint pointerfish def _getGridpointPointer    gp1 = gp.find(1)    gp2 = gp.near(3,3,3)    loop foreach gp3 gp.list        GpID = gp.id(gp3)    endloopend@_getGridpointPointer
2.3 接触面指针
2.3.1 接触面指针
接触面指针所指的对象是整个接触面。譬如我在模型的左、右面分别建立一个接触面,则此时模型中能获取两个接触面指针,分别对应于接触面“interface1”、“interface2“。
接触面指针的获取方式有两种:1)获取特定接触面的指针;2)遍历获取每个接触面的指针。代码如下:













zone face skinzone interface 'interface1' create by-face range group 'west'zone interface 'interface2' create by-face range group 'east'fish def _getInterfacePointer  ;遍历模型中的接触面,有几个接触面就循环几次,count起计数作用    count = 0    loop foreach int1 interface.list        count += 1    endloop    ;获取接触面“interface2”的指针    int2 = interface.find('interface2')end@_getInterfacePointer
2.3.2 接触面单元指针
接触面单元指针所指的对象是某个接触面中的元素,即组成该接触面的三角形单元。

图3 接触面单元
接触面单元指针可通过遍历的方式获取,需要特别注意的是遍历接触面单元时必须通过接触面指针指定是对哪一个接触面的单元进行遍历。代码如下:








fish def _getInterfaceElementPointer    count = 0      ;获取接触面'interface2'(该接触面指针已由上文代码获取)的接触面单元指针    loop foreach intE interface.elem.list(int2)        count += 1    endloopend@_getInterfaceElementPointer
2.3.3 接触面节点指针
接触面节点指针所指的对象是某个接触面中接触面单元的节点,即组成该接触面的三角形单元的顶点。
接触面节点指针的获取方式有两种:1)已知节点ID号;2)通过遍历的方式获取。需要特别注意的是获取接触面节点指针时均必须通过接触面指针指定是对哪一个接触面的单元进行相关操作。代码如下:









fish def _getInterfaceNodePoint    intN1 = interface.node.find(int2,1)    ;遍历获取获取接触面'interface2'的节点指针 intN2    count = 0     loop foreach intN2 interface.node.list(int2)        count += 1    endloopend@_getInterfaceNodePoint
2.4 结构单元指针
首先建立三个不同类型的结构单元,代码如下:



structure beam create by-line (0,3,3) (6,3,3) seg 6 id 1 group 'b'structure cable create by-line (0,3,0) (6,3,0) seg 6 id 2 group 'c'structure shell create by-face id 3 group 's' range group 'top' 
2.4.1 结构单元节点指针
结构单元节点指针的获取方式有三种,与单元指针情况一样。代码如下:











fish def _getStrucNodePointer    ;已知节点ID    n1 = struct.node.find(1)    ;已知节点位置,软件自动搜寻距该位置最近的节点并获取指针    n2 = struct.node.near(3,3,6)    ;遍历获取模型中的所有结构单元节点指针    loop foreach n3 struct.node.list        NodeID = struct.node.id(n3)    endloopend@_getStrucNodePointer
2.4.2 结构单元节点指针
结构单元指针的获取方式有三种,与单元指针情况一样。代码如下:















fish def _getStructElemPointer    ;已知结构单元ID号    SE1 = struct.find(1)    ;已知结构单元位置    SE2 = struct.near(3,3,6)    ;遍历获取,可以用一个if语句来获取特定类型的结构单元指针    ;还可以再嵌套一个if语句,通过筛选结构单元分组等特征获取特定类型、特定分组的结构单元指针    count = 0    loop foreach SE3 struct.list        if struct.type(SE3) = 'shell'            count += 1        endif    endloopend@_getStructElemPointer
2.5 table指针
table指针的获取方式有两种:1)已知table名;2)使用fish函数建立table自动获取指针。代码如下:










;建立一个名为“table1”的tabletable 'table1' label 'test' fish def _getTablePointer    ;已知table名    t1 = table.find('table1')    ;采用table。create()函数自动获取    t2 = table.create('table2')    t3 = table.create(3)end@_getTablePointer
2.6 array指针
array指针克使用fish函数建立数组自动获取指针。代码如下:




fish def _getArrayPointer    a1 = array.create(10)end@_getArrayPointer
3. 指针类型监控
在编写fish语言时,可以在右侧实时查看指针类型,如图4所示,如果软件在dat文件截面没有该界面,可通过图5所示按钮进行设置。

图4 指针类型监控

图5 fish symbols显示设置



来源:FLAC3D小技巧
FLAC3D
著作权归作者所有,欢迎分享,未经许可,不得转载
首次发布时间:2023-12-26
最近编辑:11月前
FLAC3D小技巧
硕士 专注FLAC3D中的小技巧分享...
获赞 36粉丝 209文章 40课程 0
点赞
收藏
未登录
还没有评论
课程
培训
服务
行家
VIP会员 学习 福利任务 兑换礼品
下载APP
联系我们
帮助与反馈