24小时热门版块排行榜    

CyRhmU.jpeg
南方科技大学公共卫生及应急管理学院2025级博士研究生招生报考通知
查看: 306  |  回复: 3
当前主题已经存档。

jutun

铜虫 (初入文坛)

[交流] 【求助】程序出错,寻求高手指点

我编了一个子程序,在一系列坐标点pp(np,mp)其中np是粒子的标号1,2,3......,mp代表x,y,z方向,想删除20个任意标号的坐标点,并且删除后把标号重新排列,我编的程序如下:

      INTEGER ITF,i1,j1,j2,j3
      DOUBLE PRECISION x1,PP_temp(MP,ND)
        DO  75 i1 =NL+1 , NP
   PP_temp(i1,X) = PP(i1,X)
        PP_temp(i1,Y) = PP(i1,Y)
        PP_temp(i1,Z) = PP(i1,Z)
        PP(i1,X)=0
        PP(i1,Y)=0
        PP(i1,Z)=0
75    continue

      
     CALL RANDOM_seed()
       do 610 j1=1,20
   
call random_number(x1)
ITF=NINT(x1*(NP-NL-1))+NL+1
print*,itf
       NP=NP-1
        do 76 j2=NL+1,ITF-1
          PP(j2, x) = PP_temp(j2,x)
  PP(j2, y) = PP_temp(j2,y)
  PP(j2, z) = PP_temp(j2,z)
76   continue
   do 77 j3=ITF,NP
  PP(j3, x) = PP_temp(j3+1,x)
  PP(j3, y) = PP_temp(j3+1,y)
  PP(j3, z) = PP_temp(j3+1,z)
   77 continue
610    continue
ITF是产生的随机编号,在NL+1~NP之间
程序的语法好像没有错误,估计是逻辑不对,请虫友帮忙看看错在哪里了?我真挺着急的,万分感谢了!
回复此楼
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

老虎大王

木虫 (著名写手)

★ ★ ★ ★ ★
jutun(金币+5,VIP+0):恩,我明白了,能不能再指点一下,该如何修改啊? 5-11 17:02
do 76 j2=NL+1,ITF-1
          PP(j2, x) = PP_temp(j2,x)
  PP(j2, y) = PP_temp(j2,y)
  PP(j2, z) = PP_temp(j2,z)
76   continue
   do 77 j3=ITF,NP
  PP(j3, x) = PP_temp(j3+1,x)
  PP(j3, y) = PP_temp(j3+1,y)
  PP(j3, z) = PP_temp(j3+1,z)
   77 continue
610    continue


问题出在这里。你每一次都从PP_temp这个数组出发来更新PP数组,但是PP_temp并没有更新。

比如,你的PP_temp数组(我们简化一下,假设它是个1维数组),比如,第一个数是1,第二个数是2,第三个数是3。。。第N个数是n。现在:
1. 第一次,j1=1时,假设随机数是5,就是删除第五个数,那么按你的程序,执行过后,在你的PP数组里,应有:
第一个数是1,第二个数是2,第三个数是3,第四个数是4,第五个数是6,第六个数是7。。。。。。但你的PP_TEMP数组没有变化。

2. 第二次,j1=2时,假设随机数是3,就是再删除第三个数,那么按你的程序,执行过后,在你的PP数组里,应有:
第一个数是1,第二个数是2,第三个数是4,第四个数是5,第五个数是6。。。。

问题来了吧。。呵呵。

[ Last edited by 老虎大王 on 2009-5-11 at 15:14 ]
2楼2009-05-11 15:12:33
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

老虎大王

木虫 (著名写手)

所以你搞个PP_temp数组,是画蛇添足,反而不对,造成了你无论循环多少次,都只有最近的一次更新有效。
3楼2009-05-11 15:17:32
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

老虎大王

木虫 (著名写手)

★ ★ ★ ★
kuhailangyu(金币+4,VIP+0):大王果然厉害,辛苦了! 5-11 22:06
修改方法:
1。PP数组不要清零。
2.  直接更新PP,即:pp(i,x)=pp(i+1,x )。。。。
4楼2009-05-11 20:12:16
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
相关版块跳转 我要订阅楼主 jutun 的主题更新
普通表情 高级回复(可上传附件)
信息提示
请填处理意见