Matrix Fortran中使用字符串连接的列式矩阵SIGSEGV
我试图读取流场快照的一列(uvw叠加,约24k个),并将多个快照(保存到单个.dat文件中,如发布的代码所示)组合到一个矩阵中(列是时间步的速度,I=1 first timestep,etc),以便在SVD/POD中使用。我在这里学习了一些教程,并将格式设置下来(我想),但是现在我遇到了这个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
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!