大概這個樣子。只是需要手工輸入軌道號(這樣可能靈活一些),每次輸入一個軌道序號,回車,輸入 0 則結(jié)束整個程序……CODE: program ei
real, dimension(:,:), allocatable :: px,ppx
character(len=256) :: line
character(len=40) :: fm
integer :: nrow, ncol, i, j, k, ios
open(unit=12, file='eigenvector.out', status='old')
open(unit=13, file='2px.out', status='new')
do
read(12,'(a)', iostat=ios) line
if (ios /= 0) exit
if (index(line,'EIGENVALUES') /= 0) then
nrow=0
ncol=0
do
read(12,'(a)', iostat=ios) line
if (ios /= 0) exit
if (line(1:4) == ' ') exit
ncol=ncol+1
if (index(line, '2PX') /= 0) nrow=nrow+1
end do
exit
end if
end do
!write (*,*) nrow, ncol
rewind (12)
allocate(px(nrow,ncol),ppx(nrow,ncol))
i=0
j=0
do
read(12,'(a)', iostat=ios) line
if (ios /= 0) exit
if (i == nrow) then
i=0
j=j+n
end if
if (index(line, '2PX') /= 0) then
line = line(21:)
! write(*,*) trim(line)
i=i+1
n = len_trim(line)/10
write(fm,'(a,i0,a)') '(', n, 'f10.5)'
! write(*,*) j
read(line,fm) px(i,(j+1):(j+n))
end if
end do
k=0
do
write(*,*) 'please input a number between 1 and ', nrow, 'end the program by 0.'
read(*,*) i
if(i==0) exit
k=k+1
ppx(:,k) = px(:,i)
end do
!write(*,*) k/5, mod(k,5)
if (k>=5) then
do j=1,k/5
do i=1,nrow
write(13,'(5f10.5)') ppx(i,(j-1)*5+1:j*5)
end do
write(13,*)
end do
end if
if (mod(k,5) /=0) then
write(fm,'(a,i0,a)') '(', mod(k,5), 'f10.5)'
do i=1,nrow
write(13, fm) ppx(i,(k/5*5+1):k)
end do
end if
end program ei