【问题标题】:SIGSEGV for Column-wise matrix using string concatenation in Fortran在 Fortran 中使用字符串连接的 SIGSEGV 列矩阵
【发布时间】:2013-04-08 02:39:57
【问题描述】:

我正在尝试读取流场快照的一列(uvw 堆叠,其中约 24k)并将多个快照(保存到单独的 .dat 文件中,如发布的代码中所示)组合成一个矩阵(列是时间步长的速度,i=1 第一时间步长等)用于 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

【问题讨论】:

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

标签: matrix fortran string-concatenation segmentation-fault


【解决方案1】:

POD 被声明为可分配的,但它从未在 READ 语句中尝试定义之前分配。也许你忘了在阅读循环之前用ALLOCATE(POD(tend,length)) 之类的东西分配它?

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-01-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-26
    • 1970-01-01
    相关资源
    最近更新 更多