2013-04-08 104 views
0

我想讀取一個流場快照(uvw堆疊,~24k他們)的一列,並組裝多個快照(它們保存到一個單獨的.dat文件,作爲在代碼中可以看到)在SVD/POD中用於矩陣(列是時間步長的速度,i = 1第一時間步等)。我在這裏跟着一些教程,並得到了格式化(我認爲),但現在我卡住了,因爲我得到這個sigsegv錯誤。任何輸入都非常感謝。謝謝!SIGSEGV for Column-wise矩陣在Fortran中使用字符串連接

 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 
+0

使用可分配的延遲長度字符表示您的代碼需要Fortran 2003.該代碼使用許多其他需要Fortran 90+的語言功能。這裏沒有太多的Fortran 77! – IanH 2013-04-08 04:29:07

回答

0

POD被聲明爲可分配,但從來沒有在READ語句試圖定義之前分配。也許你忘了在閱讀循環之前用ALLOCATE(POD(tend,length))之類的東西分配它?