本人刚刚接触Fortran代码,想将图片红框中所有1的那一部分对应E的最小值获得,然后所有2对应E的最小值获得,3对应E的最小值……以此类推,然后将对应最小值那一行输出到文件中,比如:3个红色框的部分,将它们最小值获得后写入文件中变成:
Step number 39 scan point 1 E= -571.251770020
Step number 5 scan point 2 E= -571.252807617
Step number 4 scan point 3 E= -571.253234863
……
这个代码是我自己尝试写的,不过问题还没解决,只解决了红框中那一列中有多少个数。还望各位有什么思路或者代码修改不吝惜赐教,谢谢。
[Fortran] 纯文本查看 复制代码 program takeminenergy
implicit none
integer i,j,num,num1,num2,lines,k,num4
integer,allocatable::x(:),y(:)
real,allocatable::z(:),minz(:),minumz(:)
open(12,file='result.txt')!输入文件
open(13,file='a.txt') !输出文件
open(14,file='b.txt') !输出文件
num1=1
num2=0
write(*,*) 'How many lines:' !读取文件有多少行
read(*,*) lines
allocate (x(lines))
allocate (y(lines))
allocate (minz(lines))
allocate (minumz(lines))
do i=1,lines
read(12,"(12x,I4,12x,I6)") x(i),y(i)
if (y(i)== num1) then
num2=num2+1
else if (y(i) /= num1) then
y(num1)=num2
num1=num1+1
num2=1
end if
end do
write(*,*) num1
do j=1,num1
write(13,"(I6)") y(j) !获取数字相同那一列有多少个,比如全是数字1的共有39个
end do
close(13)
close(12)
open(13,file='a.txt')
open(12,file='result.txt')
open(15,file='c.txt') !输出文件
do j=1,num1
read(13,"(I6)") num4
write(*,*) num4
do k=1,num4
read(12,"(38x,f16.9)") z(k)
write(15,*)z(k)
end do
minz=minval(z)
write(14,"(f16.9)") minz
deallocate(z)
end do
end
|