24小时热门版块排行榜    

查看: 262  |  回复: 1

xk6891

至尊木虫 (著名写手)

[求助] 利用数组转化坐标文件出现问题(已解决)

CODE:
open(17,file=in_filename,status='old')
read(17,*)atomnum
read(17,*)step,stepnum

maxn=max(na,nb,nc)

allocate(label(atomnum))
allocate(coordinate(atomnum,3))
allocate(new_coordi(atomnum,3,maxn))

  do i1=1,atomnum
     read(17,*)label(i1),(coordinate(i1,j1),j1=1,3)
  end do
close(17)

a_count=1
b_count=1
c_count=1
new_atomnum=atomnum*na*nb*nc
open(18,file=out_filename)
write(18,"(10XI3)")new_atomnum
write(18,"(1XA5,5XI6)")step,stepnum

do i1=1,atomnum
do while(a_count.le.na)
   new_coordi(i1,1,a_count)=coordinate(i1,1)+a_count*a
     do while(b_count.le.nb)
     new_coordi(i1,2,b_count)=coordinate(i1,2)+b_count*b
       do while(c_count.le.nc)
       new_coordi(i1,3,c_count)=coordinate(i1,3)+c_count*c
       write(18,"(1XA1,3(F14.6))")label(i1),new_coordi(i1,1,a_count),new_coordi(i1,2,b_count),new_coordi(i1,3,c_count)
       c_count=c_count+1
       end do
     b_count=b_count+1
     end do
   a_count=a_count+1
end do   
end do
close(18)

deallocate(label)
deallocate(coordinate)
deallocate(new_coordi)

用上面的一段代码(部分)去读下面的内容,希望能将坐标扩展一下,结果出现最后的结果,好像第一个do while做完之后就跳出了,外面的几个do循环都没有做。是因为二维数组与三维数组之间的转化么,搞不明白?求大侠指点
CODE:
          28
STEP:           1
C      7.273878      8.481164      4.787954
C      8.285965      2.209745      9.083592
C     10.699671      5.799165      2.790090
C      9.290149      5.432365      7.050378
H      6.812623      8.515214      5.770640
………………………………………………………………

CODE:
          224
STEP:          1
C      7.273878      8.481164      4.787954
C      7.273878      8.481164     13.306053
          224
STEP:          2
C      7.273347      8.482496      4.788510
………………………………………………………………

[ Last edited by 余泽成 on 2011-6-26 at 00:23 ]
回复此楼
人生自古多险阻,勤者自得天酬助。试问否泰何所依,枯藤老枝待新抽。临渊踌躇终迈步,振翅鹏起云霄冲。似是前程甚堪忧,他日振臂揽苍穹。
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

xk6891

至尊木虫 (著名写手)

jjdg: 恭喜 2011-06-25 11:19:08
知道哪里错了
每一次附初值应当放在每一个循环的开头,而不是放在总的开头
CODE:
do i1=1,atomnum
a_count=1
do while(a_count.le.na)
   new_coordi(i1,1,a_count)=coordinate(i1,1)+a_count*a
     b_count=1
     do while(b_count.le.nb)
     new_coordi(i1,2,b_count)=coordinate(i1,2)+b_count*b
       c_count=1
       do while(c_count.le.nc)
       new_coordi(i1,3,c_count)=coordinate(i1,3)+c_count*c
       write(18,"(1XA1,3(F14.6))")label(i1),new_coordi(i1,1,a_count),new_coordi(i1,2,b_count),new_coordi(i1,3,c_count)
       c_count=c_count+1
       end do
     b_count=b_count+1
     end do
   a_count=a_count+1
end do   
end do

人生自古多险阻,勤者自得天酬助。试问否泰何所依,枯藤老枝待新抽。临渊踌躇终迈步,振翅鹏起云霄冲。似是前程甚堪忧,他日振臂揽苍穹。
2楼2011-06-24 21:42:14
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
相关版块跳转 我要订阅楼主 xk6891 的主题更新
信息提示
请填处理意见