Fortran Coder

do循环

查看数: 4050 | 评论数: 4 | 收藏 0
关灯 | 提示:支持键盘翻页<-左 右->
    组图打开中,请稍候......
发布时间: 2022-1-21 18:01

正文摘要:

各位老师,大家好! 我想请教一个问题 enddo循环结束后,后面写啥都不执行了,我的do循环是读取文件5中的内容,然后输入到9,但是我在enddo后面的内容是往文件6中写的,其他语句写在do循环之前就能执行,真的不知道 ...

回复

fcode 发表于 2022-1-22 17:28:41
read(5,"(a)")jj
改为:
read(5,"(a)",ioStat=zz)jj
if(zz/=0)exit

如果你不加任何判断,5号文件读取结束时,程序接着读取,就会出错。后面的代码自然无法执行。
HeISeTH 发表于 2022-1-22 01:18:05
楚香饭 发表于 2022-1-21 20:31
代码看不全,所以逻辑也不好分析。
不保密的话,把全部代码给出来。

我就是像从文件5中摘取出来一些东西,然后进行统计,再写入6中,但是我在进行完      write(9,500)i,atomtyp,q,x,y,z


endif
endif

enddo
这一步后,我想再写点命令就运行不了了,只有把write(22,*)'1','    1000cddd'放在do

read(5,"(a)")jj
if(index(jj,"ATOM") > 0) then
i=i+1
read(jj(32:),"(a)")kk的前面才能运行,请老师赐教这是为啥呢
HeISeTH 发表于 2022-1-22 01:14:46
楚香饭 发表于 2022-1-21 20:31
代码看不全,所以逻辑也不好分析。
不保密的话,把全部代码给出来。
[Fortran] 纯文本查看 复制代码
001program PDBtodata
002 
003 
004implicit none
005 
006character chr1*6,chr2*2,chr3*6,chr4*4,chr5*8,header*80,atmnam*8,ww*200,xx*80,cc*80,&
007vv*80,nn*80,sss*100
008  character elmname*3,tt*5
009  character filename*12,kk*50,jj*200
010character*10 bb(3)
011  integer i,j,atomtypes,atomtyp,atomser,natom,nf,R,zz,o,gg,mm,n(9),ntype,ios
012  integer:: date_time(8)
013  real(kind=8) a,b,c,xlo,xhi,ylo,yhi,zlo,zhi,alpha,beta,gamma,&
014  xy,xz,yz,charge,mass(1:7),lx,ly,lz,x,y,z,q,qq,ff
015real(kind=8), parameter :: pi=3.1415926
016 
017write(*,*)'filename: '
018  read(*,*)filename
019open(5,file=filename,status='old')
020   open(6,file='105.data')
021    open(7,file='data')
022open(8,file='da2222ta')
023open(9,file='da333333ta')
024open(15,file='dqa')
025open(20,file='fort.7',status='old')
026 
027write(6,*)
028 
029 
030   xlo=0.0
031   ylo=0.0
032   zlo=0.0
033   mass=0.0
034   atomtyp=0
035   q=0.0
036 
037read(5,*)
038read(5,*)
039read(5,*)chr3,a,b,c,alpha,beta,gamma,chr4
040alpha=(alpha/180.0)*Pi
041        beta=(beta/180.0)*Pi
042        gamma=(gamma/180.0)*Pi
043        lx=a
044        xy=b*dcos(gamma)
045        xz=c*dcos(beta)
046        ly=dsqrt(b*b-xy*xy)
047        yz=(b*c*dcos(alpha)-xy*xz)/ly
048        lz=dsqrt(c*c-xz*xz-yz*yz)
049        xhi=lx
050        yhi=ly
051        zhi=lz
052write(6,*)'1','    1000cddd'
053        write(6,*)xlo,xhi,'xlo xhi'
054        write(6,*)ylo,yhi,'ylo yhi'
055        write(6,*)zlo,zhi,'zlo zhi'
056        write(6,*)
057        write(6,*)xy,xz,yz,'xy xz yz'
058        write(6,*)
059mass(1)=12.011150
060        mass(2)=1.007970
061        mass(3)=15.999400
062        mass(4)=14.006700
063        mass(7)=26.981539
064        write(6,*)'Masses'
065        write(6,*)
066        do i=1,6
067 
068read(5,*)
069 
070enddo
071write(6,*)'1','    1000cddd'
072do
073 
074read(5,"(a)")jj
075if(index(jj,"ATOM") > 0) then
076i=i+1
077read(jj(32:),"(a)")kk
078kk=adjustl(kk)
079 
080read(kk,*)x,y,z,ff,charge,elmname
081 
082if (index(elmname,"C") > 0)   then
083           atomtyp=1
084            
085         else if (index(elmname,"H") > 0) then
086           atomtyp=2
087          
088         else if (index(elmname,"O") > 0) then
089           atomtyp=3
090 
091         else if (index(elmname,"N") > 0) then
092 
093         else if (index(elmname,"Al") > 0) then
094           atomtyp=5
095 
096 
097 
098 
099         write(9,500)i,atomtyp,q,x,y,z
100 
101 
102endif
103endif
104 
105enddo
106 
107 
108 
109 
110200 FORMAT(I6,A8)
111300 FORMAT(I6,A12)
112500 FORMAT(I6,I3,F9.6,3F15.9)
113 
114close(5)
115close(6)
116 
117if(.true.) then
118open(22,file='105.data')
119write(22,*)'1','    1000cddd'
120 
121endif
122 
123 
124end


楚香饭 发表于 2022-1-21 20:31:51
代码看不全,所以逻辑也不好分析。
不保密的话,把全部代码给出来。

捐赠本站|Archiver|关于我们 About Us|小黑屋|Fcode ( 京ICP备18005632-2号 )

GMT+8, 2025-5-5 13:06

Powered by Discuz! X3.4

© 2013-2025 Comsenz Inc.

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