找回密码
 注册
Simdroid-非首页
查看: 352|回复: 10

[结构单元] 重新链接结构单元

[复制链接]
发表于 2015-4-10 14:27:17 | 显示全部楼层 |阅读模式 来自 四川成都
; Flac3D 5.0
; 自动链接结构单元,不多解释,用过结构单元应该明白
; w.gang.89@foxmail.com
def relink(begin_link_id)
    dist_tol = 1e-2
    link_id = begin_link_id
    node_num = 0
    node_pnt0 = nd_head
    ; m_pnt = null
    loop while node_pnt0 # null
        ; node_num = node_num + 1
        ; m_pnt1 = get_mem(2)
        ; mem(m_pnt1) = m_pnt
        ; mem(m_pnt1+1) = node_pnt0
        ; m_pnt = m_pnt1
        ; node_pnt0 = nd_next(node_pnt0)
        node_num = node_num + 1
        node_pnt0 = nd_next(node_pnt0)
    endloop

    node_arr = get_array(node_num)
    node_num = 0
    node_pnt0 = nd_head
    loop while node_pnt0 # null
        node_num = node_num + 1
        node_arr(node_num) = node_pnt0
        node_pnt0 = nd_next(node_pnt0)
    endloop

    node_num_minus1 = node_num - 1
    loop ii(1,node_num_minus1)
        node_pnt1 = node_arr(ii)
        node_id1 = nd_id(node_pnt1)
        xxa = nd_pos(node_pnt1,2,1)
        yya = nd_pos(node_pnt1,2,2)
        zza = nd_pos(node_pnt1,2,3)
        ii_plus1 = ii + 1
        loop jj(ii_plus1,node_num)
            node_pnt2 = node_arr(jj)
            node_id2 = nd_id(node_pnt2)
            xxb = nd_pos(node_pnt2,2,1)
            yyb = nd_pos(node_pnt2,2,2)
            zzb = nd_pos(node_pnt2,2,3)
            node_dist = sqrt((xxa-xxb)^2+(yya-yyb)^2+(zza-zzb)^2)
            if node_dist <= dist_tol then
                link_pnt1 = nd_link(node_pnt1)
                link_pnt2 = nd_link(node_pnt2)
                if link_pnt1 = null then
                    link_id = link_id + 1
                    command
                        ; sel set link node_tol=dist_tol
                        sel link id=@link_id @node_id1 target=node tgt_num=@node_id2
                        sel link attach xdir=rigid ydir=rigid zdir=rigid &
                            xrdir=rigid yrdir=rigid zrdir=rigid range id=@link_id
                    endcommand
                else
                    if link_pnt2 = null then
                        link_id = link_id + 1
                        command
                            ; sel set link node_tol=dist_tol
                            sel link id=@link_id @node_id2 target=node tgt_num=@node_id1
                            sel link attach xdir=rigid ydir=rigid zdir=rigid &
                                xrdir=rigid yrdir=rigid zrdir=rigid range id=@link_id
                        endcommand
                    else
                        if lk_type(link_pnt1) = lk_type(link_pnt2) then
                        ; value {1,2} denotes node-to-node or node-to-zone link
                            temp = lk_delete(link_pnt2)
                            link_id = link_id + 1
                            command
                                sel link id=@link_id @node_id2 target = node tgt_num=@node_id1
                                sel link attach xdir=rigid ydir=rigid zdir=rigid &
                                    xrdir=rigid yrdir=rigid zrdir=rigid range id=@link_id
                            endcommand
                        endif
                    endif
                endif
            endif
        endloop
    endloop
    temp = lose_array(node_arr)
end
@relink(10000)



 楼主| 发表于 2015-8-6 16:35:30 | 显示全部楼层 来自 四川成都
Simdroid开发平台
本帖最后由 echowasd 于 2015-8-6 16:43 编辑
涛声依旧2015 发表于 2015-8-6 13:14
有在flac3d3.0中自动创建结构单元链接的例子么,我最近在做基坑支护的过程中想在桩上建立锚杆,桩与锚杆之 ...

我这个是5.0版本的,基于前人版本补充修改的。
5.0下用法示例:

;@install_shell
sel node local xdir=(1,0,0) ydir=(0,1,0) range x 24 24.1
sel node fix lsys range x 24 24.1
sel node fix x yr zr range x 24 24.1
; 开挖西部第一层 z1=40.5, z2=42.5
@excav(40.5,42.5)
@install_cable_w(1)
@relink(30000)
solve
save quarter_excav_w1; end

不需要特殊的设置,安装好结构单元后,直接relink就可以了,程序自动查找同一位置节点并重新链接。
w.gang.89@foxmail.com这个邮箱可以直接加QQ,西南交通大学土木工程学院地下工程系。




回复 不支持

使用道具 举报

发表于 2015-8-4 10:09:07 | 显示全部楼层 来自 河南焦作
flac3d 3.0 能用不  试试看
回复 不支持

使用道具 举报

发表于 2015-8-6 13:14:25 | 显示全部楼层 来自 北京
有在flac3d3.0中自动创建结构单元链接的例子么,我最近在做基坑支护的过程中想在桩上建立锚杆,桩与锚杆之间的链接都是通过查看链接号用笨方法建立的,程序写的很多,感觉自动建立程序挺简洁的,我想你肯定会,盼望你能在百忙之中提供个例子,谢谢。邮箱1650791281@qq.com
回复 不支持

使用道具 举报

发表于 2016-11-17 15:57:36 | 显示全部楼层 来自 河北张家口
好好哦啊后好好好
回复 不支持

使用道具 举报

发表于 2017-1-19 18:49:39 | 显示全部楼层 来自 湖北武汉
这个我使用的时候总是说目标点和原点不够近,怎么回事啊?

点评

把这个数值调大 dist_tol = 1e-2  发表于 2017-1-31 17:32
回复 不支持

使用道具 举报

发表于 2018-1-17 16:49:31 | 显示全部楼层 来自 江苏徐州
thank you master
回复 不支持

使用道具 举报

发表于 2018-5-13 14:17:56 | 显示全部楼层 来自 湖北武汉
感谢分享指导,受益多多
回复 不支持

使用道具 举报

发表于 2018-8-19 15:54:04 | 显示全部楼层 来自 河南三门峡
感谢分享指导
回复 不支持

使用道具 举报

发表于 2021-8-30 16:22:46 | 显示全部楼层 来自 江苏徐州
谢谢楼主,好好学习学习
回复 不支持

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|小黑屋|联系我们|仿真互动网 ( 京ICP备15048925号-7 )

GMT+8, 2024-5-9 13:43 , Processed in 0.047145 second(s), 18 queries , Gzip On, MemCache On.

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表