Matrix Fortran中使用字符串连接的列式矩阵SIGSEGV

Matrix Fortran中使用字符串连接的列式矩阵SIGSEGV,matrix,fortran,string-concatenation,segmentation-fault,Matrix,Fortran,String Concatenation,Segmentation Fault,我试图读取流场快照的一列(uvw叠加,约24k个),并将多个快照(保存到单个.dat文件中,如发布的代码所示)组合到一个矩阵中(列是时间步的速度,I=1 first timestep,etc),以便在SVD/POD中使用。我在这里学习了一些教程,并将格式设置下来(我想),但是现在我遇到了这个sigsegv错误。非常感谢您的任何意见。谢谢 program matrix2 ! Creates rectangular matrix by adding column

我试图读取流场快照的一列(uvw叠加,约24k个),并将多个快照(保存到单个.dat文件中,如发布的代码所示)组合到一个矩阵中(列是时间步的速度,I=1 first timestep,etc),以便在SVD/POD中使用。我在这里学习了一些教程,并将格式设置下来(我想),但是现在我遇到了这个sigsegv错误。非常感谢您的任何意见。谢谢

       program matrix2       
!      Creates rectangular matrix by adding columns of individual
!      Timesteps for use in Singular Value Decomposition (in MatLAB)

!      Allocate
       double precision, dimension(:,:), allocatable :: POD
       integer, parameter :: tend = 700
       integer, parameter :: length = 23925
       character(:), allocatable :: fn, fm
       integer :: it, idt
       character(len=5) :: t, dt
       character(len=10) :: fmt
       character(len=40) :: fmm

!      Create format discriptors
       fmt = '(i5.5)'
       fmm = '(a19,i5.5,a4)'

!      Create data file to save matrix
       fn = 'POD_Data_Matrix.dat'
       open(unit=1,file=fn,status='unknown',form='formatted')

!      Loop to open column files and write data
       do j = 1,tend

!      Open corresponding column file, add to POD matrix
!      and close every timestep column
!      Convert integer to string using internal file
         it=00001
         idt=00001
         write(t,fmt) it
         write(dt,fmt) idt
         fm = 'U-Matrix-Column-Eq-'//trim(t)//'.dat'
         open(unit=11,file=fm,status='unknown',form='formatted')  
         do i = 0,length
           read (11,*) POD(j,i)
         enddo
         close(11)
         it = it + idt
       enddo

!      Write and close final POD matrix
       write(1,*) POD(j,i)
       close(1)

!      Deallocate
!       deallocate(POD)
!       deallocate(fn,fm)
       endprogram

POD
声明为可分配的,但在READ语句中尝试定义之前从未分配它。也许您忘记了在读取循环之前使用类似于分配(POD(tend,length))的
来分配它?

使用可分配的延迟长度字符意味着您的代码需要Fortran 2003。该代码使用了许多其他需要Fortran 90+的语言功能。这里没有太多Fortran 77!