ayy8999 发表于 2010-4-28 14:55:57

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

程序如下(附我的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
页: [1]
查看完整版本: 请问如下的FISH函数如何修改(总是显示pointer错误)