从文件中读取矩阵时的指数

时间:2017-10-08 23:06:37

标签: fortran

我使用例程READ从文件中读取矩阵。实际上,我直接提取了9个子矩阵(想想一个大的3x3表,每个都是一个子矩阵)。确切的索引并不重要,但每个子矩阵都是NY_INTxNY_INT约,因此文件中的整个矩阵是3NY_INTx3NY_INT。

      OPEN (91,file= 'inf/matrix_re.dat',form='formatted',status='old')   
      OPEN (92,file= 'inf/matrix_im.dat',form='formatted',status='old')   
c   
       do i=0,NY_INT-1
           READ(91,*) k11real(i,0:NY_INT-1)
       READ(92,*) k11imag(i,0:NY_INT-1)
       end do
c
       do i=0,NY_INT
           READ(91,*) k12real(i,NY_INT+1:2*NY_INT+1)
       READ(92,*) k12imag(i,NY_INT+1:2*NY_INT+1)
       end do
c
       do i=0,NY_INT-1
           READ(91,*) k13real(i,2*NY_INT+2:3*NY_INT+1)
           READ(92,*) k13imag(i,2*NY_INT+2:3*NY_INT+1)
       end do
C
C
       do i=NY_INT+1,2*NY_INT+1
           READ(91,*) k21real(i,0:NY_INT-1)
           READ(92,*) k21imag(i,0:NY_INT-1)
       end do
c
       do i=NY_INT+1,2*NY_INT+1
           READ(91,*) k22real(i,NY_INT+1:2*NY_INT+1)
           READ(92,*) k22imag(i,NY_INT+1:2*NY_INT+1)
       end do
c
       do i=NY_INT+1,2*NY_INT+1
           READ(91,*) k23real(i,2*NY_INT+2:3*NY_INT+1)
           READ(92,*) k23imag(i,2*NY_INT+2:3*NY_INT+1)
       end do
C
C
       do i=2*NY_INT+2,3*NY_INT+1
           READ(91,*) k31real(i,0:NY_INT-1)
           READ(92,*) k31imag(i,0:NY_INT-1)
       end do
c
       do i=2*NY_INT+2,3*NY_INT+1
           READ(91,*) k32real(i,NY_INT+1:2*NY_INT+1)
           READ(92,*) k32imag(i,NY_INT+1:2*NY_INT+1)
       end do
c
       do i=2*NY_INT+2,3*NY_INT+1
           READ(91,*) k33real(i,2*NY_INT+2:3*NY_INT+1)
           READ(92,*) k33imag(i,2*NY_INT+2:3*NY_INT+1)
       end do
c

这段代码对吗?在我看来,我没有正确使用循环。

我不明白READ语句中的索引是我目标矩阵中的位置还是我正在阅读的文件中的位置。

1 个答案:

答案 0 :(得分:0)

您调用的索引基于您创建的新数组。

更好的方法是将所有值读入一个数组,然后为每个单独的子矩阵创建一个新数组,从数组中获取数据。

OPEN (91,file= 'inf/matrix_re.dat',form='formatted',status='old') 
do i = 1, length of all values  
    new_array = read(91, *)
enddo

do i = 1, length of all values
    sub_matrix_1 = new_array[]
    sub_matrix_2 = new_array[] 
    etc..
enddo

当然,这取决于您之后尝试对数据做什么。