Fortran语言中的无限循环

Fortran语言中的无限循环,fortran,infinite-loop,fortran90,Fortran,Infinite Loop,Fortran90,这是我用Fortran 90编写的代码 program final implicit none real, dimension(421,422) :: a real :: temp,factor real, dimension (421) :: soln integer :: i, rmax, pivot, row,n, O,P,COL,k,a_j,n2,a_i,t open(unit=177241,file="input_21.txt",status="o

这是我用Fortran 90编写的代码

program final
   implicit none
   real, dimension(421,422) :: a
   real :: temp,factor
   real, dimension (421) :: soln
   integer :: i, rmax, pivot, row,n, O,P,COL,k,a_j,n2,a_i,t

   open(unit=177241,file="input_21.txt",status="old")
   open(unit=20,file="output.txt",status="unknown")

   do i =1,421
      read (177241,*) (a(i,:))
   end do
   do i = 1,421
      print *,a(i,13)
   end do
   do T=1,421
      n=421
      a_i=n

      n2=422
      a_j=n2

     !pivoting
      do pivot = T,n-1
         print *, 'pivot=',pivot
         rmax = pivot
         do row = pivot,a_i
            if (ABS(a(rmax,pivot)) < ABS(a(row,pivot)) ) then
               rmax=row
            end if
         end do
         if (rmax /= pivot) then
            do k=1, a_j
               temp = a(rmax,k)
               a(rmax,k) = a(pivot,k)
               a(pivot,k) = temp
            end do
         end if      
  !elimination      
         do row = pivot+1, n
            if ( a(pivot,pivot) /= 0 ) then
               factor = (a(row,pivot)) / (a(pivot,pivot))
               print *,'factor=',factor
               do col = 1, n2
                  a(row, col) = a(row,col) - a(pivot,col) * factor
                  print *,'a=',a(row,col)
               end do
            end if
         end do     
      end do
   end do
   !back-substitution
   soln(n2) = 0
   do o=n,1,-1
      do p=n2,o+1,-1
         a(o,n2) = a(o,n2) - soln(p)*a(o,p)
      end do
      soln(o) = a(o,n2) / a(o,o)
   end do        
   do i=1,n
      print *,soln(i)
      write (121,*) soln(i)
   end do
end program final

如何解决此问题?

如果正确缩进,将看到以下循环结构(忽略数学部分):

这不是一个无限循环,您只需将
a(行,列)
打印到屏幕522326280次(如果您将其放入一个文件,我不建议这样做,您的文件夹中将有一个11GB的文件!)。如果您注释掉有关
a
因子的
print
语句,但保留在
pivot
的语句中,则它将在大约3分钟内运行。忽略所有
print
语句,它只需几秒钟即可运行


不用说,您可能不应该在屏幕上放置超过10行的内容。

什么是无限屋顶?你是指无限循环还是无限根?
if ( a(pivot,pivot) /= 0 ) then
   factor = (a(row,pivot)) / (a(pivot,pivot))
   print *,'factor=',factor    
   do col = 1, n2
      a(row, col) = a(row,col) - a(pivot,col) * factor
    do T=1,421
       do pivot=T,420
          do row=pivot+1,421
             do col=1,422
                print *,a
             enddo
          enddo
       enddo
    enddo