ycding 发表于 2007-11-12 01:48:10

请大家帮我看看我的fish合并link子程序错在哪里

这是一个基坑开挖算例,水平梁板支撑用shell单元,立柱和立柱桩用pile单元,下面 的子程序是自动建立相同位置处立柱与梁板间的link,假定为刚接。但在运行是出错不知何故,请大家帮忙看看。

ycding 发表于 2007-11-12 01:50:23

附子程序

ycding 发表于 2007-11-12 01:53:04

;合并相同位置link子程序
def merge_link
        pnt1=nd_head
        id_pnt1=nd_id(pnt1)
        loop while pnt1 # null
                nodenext=nd_next(pnt1)
                xx1=nd_pos(pnt1,2,1)
                yy1=nd_pos(pnt1,2,2)
                zz1=nd_pos(pnt1,2,3)
                pnt2=nd_near(xx1,yy1,zz1)
                id_pnt2=nd_id(pnt2)
                xx2=nd_pos(pnt2,2,1)
                yy2=nd_pos(pnt2,2,2)
                zz2=nd_pos(pnt2,2,3)
                node_dist=sqrt((xx1-xx2)^2+(yy1-yy2)^2+(zz1-zz2)^2)
                dist_tol=1e-3
                if node_dist < dist_tol then
                        pnt_link1=nd_link(pnt1)
                        pnt_link2=nd_link(pnt2)
                                if pnt_link1 # null then
                                        ii=lk_delete(pnt_link1)
                                endif
                                if pnt_link2 # null then
                                        jj=lk_delete(pnt_link2)
                                endif
                                command
                                        sel link id_pnt1 target=node tgt_num=id_pnt2
                                        sel link attach xdir=rigid ydir=rigid zdir=rigid &
                                                                                                        xrdir=rigid yrdir=rigid zrdir=rigid
                                endcommand
                endif
                pnt1=nodenext
        endloop
end
merge_link

minhrac 发表于 2008-6-15 22:14:06

请问楼主,上述问题有没有解决,错误出在哪?

弹芯 发表于 2008-6-25 15:51:50

楼主显身啊!

弹芯 发表于 2008-6-25 15:54:38

呼唤楼主啊.....

ycding 发表于 2008-7-14 12:18:10

问题早已解决,问题还是出在循环上。

minhrac 发表于 2008-7-16 14:55:43

楼主能不能把正确的贴上来,想学习一下,先谢谢了

ycding 发表于 2008-7-16 15:17:58

正确的子程序,大家用的时候如果要改变约束条件(如刚接、铰接),适当改一下就可以了。

;----------------------------建立水平支撑与立柱桩交点处节点间的刚性link----------------------
def merge_link
node_num=0
node_pnt1 = nd_head
loop while node_pnt1 # null;寻找总节点数,注:不能自己任生成node,程序缺省的方式为连续生成无不连续
node_num = node_num+1
node_pnt1 = nd_next(node_pnt1)
endloop
node_num_minus1 = node_num-1
link_id=30000
loop ii (1,node_num_minus1)
node_pnt1 = nd_find(ii)
xx1 = nd_pos(node_pnt1,2,1)
yy1 = nd_pos(node_pnt1,2,2)
zz1 = nd_pos(node_pnt1,2,3)
ii_plus1 = ii+1
loop jj (ii_plus1,node_num)
   node_pnt2 = nd_find(jj)
   xx2 = nd_pos(node_pnt2,2,1)
   yy2 = nd_pos(node_pnt2,2,2)
   zz2 = nd_pos(node_pnt2,2,3)
   node_dist = sqrt((xx1-xx2)^2+(yy1-yy2)^2+(zz1-zz2)^2)
   dist_tol = 1e-3
   if node_dist < dist_tol then
    link_pnt1 = nd_link(node_pnt1)
    link_pnt2 = nd_link(node_pnt2)
    if link_pnt1 # null then
   temp1 = lk_delete(link_pnt1)
    endif
    if link_pnt2 # null then
   temp2 = lk_delete(link_pnt2)
    endif
    link_id = link_id+1
    command   ;生成新link(6自由度全固结) ,大的node的id作为target node,小的node的id作为source node,需注意不同情况下的灵活调整
   sel set link node_tol=dist_tol
   sel link id=link_id ii target = node tgt_num = jj;指定link的ID
   ;sel linkii target = node tgt_num = jj   ;不指定link的id,自动生成
   sel linkattach xdir=rigid ydir=rigid zdir=rigid xrdir=rigid yrdir=rigid zrdir=rigid range id=link_id    ;要改变约束条件,修改此句
    endcommand
   endif
endloop
endloop
end
merge_link

rivergreen 发表于 2009-3-2 19:43:25

为什么运行到 sel link node_tol=dist_tol的时候 显式 Extraneous material呢?搞不明白,望楼主指教一下!

wangjia107 发表于 2015-7-21 14:19:27

这个语句会把结构单元与实体单元之间的链接也删除吗

herculis 发表于 2017-1-19 19:03:15

这个怎么显示指针错误啊?
页: [1]
查看完整版本: 请大家帮我看看我的fish合并link子程序错在哪里