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

[命令/FISH] 请问如下的FISH函数如何修改(总是显示pointer错误)

[复制链接]
发表于 2010-4-28 14:55:57 | 显示全部楼层 |阅读模式 来自 华中科技大学紫菘公寓
程序如下(附我的QQ369195101,希望有前辈可以指导下,十分头疼,我是新手)
def set_list
     ver_head=null
     i_pnt=i_head
      loop while i_pnt#null
        node_pnt=i_node_head(i_pnt)
loop while node_pnt#null
   z_pos=in_pos(node_pnt,3)
   ver_pnt=ver_head
section
      if ver_head=null then
       new=get_mem(5)
        mem(new)=ver_head
         ver_head=new
        mem(new+2)=z_pos
        mem(new+4)=gp_near(0,0,z_pos)
         hnew=get_mem(2)
         mem(hnew+1)=node_pnt
          mem(new+1)=hnew
          mem(hnew)=null
            exit section
       endif
loop while ver_pnt#null
ver_pnt_n=mem(ver_pnt)
if abs(mem(ver_pnt+2)-z_pos)<0.1 then
knew=get_mem(2)
mem(knew+1)=node_pnt
mem(knew)=mem(ver_pnt+1)
mem(ver_pnt+1)=knew
exit section
end_if
if ver_pnt=ver_head then
if z_pos>mem(ver_pnt+2) then
new=get_mem(5)
mem(new)=ver_head
ver_head=new
mem(new+2)=z_pos
mem(new+4)=gp_near(0,0,z_pos)
hnew=get_mem(2)
mem(hnew+1)=node_pnt
mem(new+1)=knew
mem(hnew)=null
exit section
end_if
end_if
if ver_pnt_n=null then
new=get_mem(5)
mem(new)=null
mem(ver pnt)=new
mem(new+2)=z_pos
mem(new+4)=gp_near(0,0,z_pos)
knew=get_mem(2)
mem(hnew+1)=node_pnt
mem(new+1)=null
exit section
end_if
if z_pos<mem(ver_pnt+2) then
if z_pos>mem(ver_pnt_n+2) then
new=get_mem(5)
mem(new)=ver_pnt_n
mem(ver pnt)=new
mem(new+2)=z_pos
mem(new+4)=gp_near(0,0,z_pos)
hnew=get_mem(2)
mem(hnew+1)=node_pnt
mem(new+1)=hnew
mem(hnew)=null
exit section
end_if
end_if
ver_pnt=ver_pnt_n
end_loop
end_section
node_pnt=in_next(node_pnt)
end_loop
i_pnt=i_next(i_pnt)
end_loop
ver_pnt=ver_head
z_up=mem(ver_pnt+2)
loop while ver_pnt#null
ver_pnt_n=mem(ver_pnt)
if ver_pnt_n#null tjen
z_down=mem(ver_pnt_n+2)
else
z_down=mem(ver_pnt+2)
end_if
mem(ver_pnt+3)=0.5*(z_up-z_down)
z_up=mem(ver_pnt+2)
ver_pnt=ver_pnt_n
end_loop
end
set_list

;(注明:就是这个位置的问题,本来资料上写的程序是带有set_list,但是每次执行到这里就显示pointer arithmatic on memory pointers only,什么意思啊?如何修改才行?附:只是竖向及水平荷载作用下混凝土桩基计算的fish函数。

另外,我删掉这一行就没有这个问题

def gen_curve
while_stepping
if step-100*int(step/100)=0 then
tot_reac=0.
vcount=0
ver_pnt=ver_head
loop while ve_pnt#null
vcount=vcount+1
hor_pnt=mem(ver_pnt+1)
hor_for=0.
hcount=0
loop while hor_pnt#null
node_pnt=mem(hor_pnt+1)
hcount=hcount+1
area=in_area(node_pnt)
hor_nor=in_nstr(node_pnt)
hor_she=in_sstr(node_pnt,1)
t_zone=in_ztarget(node_pnt)
t_face=in_ftarget(node_pnt)
t_gp1=z_facegp(t_zone,t_face,1)
t_gp2=z_facegp(t_zone,t_face,2)
t_gp3=z_facegp(t_zone,t_face,3)
dx1=gp_xpos(t_gp2)-gp_xpos(t_gp1)
dy1=gp_ypos(t_gp2)-gp_ypos(t_gp1)
dz1=gp_zpos(t_gp2)-gp_zpos(t_gp1)
dx2=gp_xpos(t_gp3)-gp_xpos(t_gp1)
dy2=gp_ypos(t_gp3)-gp_ypos(t_gp1)
dz2=gp_zpos(t_gp3)-gp_zpos(t_gp1)
dxn=dy1*dz2-dz1*dy2
dyn=dz1*dx2-dx1*dz2
dzn=dx1*dy2-dy1*dx2
dn=sqrt(dxn*dxn+dyn*dyn+dzn*dzn)
dxn=dxn/dn
hor_nor=hor_nor*dxn
hor_for=hor_for+(hor_nor+hor-she)*area
hor_pnt=mem(hor_pnt)
end_loop
gp_pile=mem(ver_pnt+4)
hor_dis=gp_xdisp(gp_pile)
tot_reac=tot_reac+hor_for
table(vcount,hor_dis)=hor_for/mem(ver_pnt+3)
ver_pnt=mem(ver_pnt)
end_loop
end_if
end
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Simapps系列直播

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

GMT+8, 2024-9-25 20:27 , Processed in 0.041464 second(s), 13 queries , Gzip On, MemCache On.

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

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