2017-10-08 71 views
1

我使用例程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语句中的索引是我目标矩阵中的位置还是来自我正在阅读的文件中的位置。

回答

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 

这当然取决于你以后要用数据做什么。

+0

所以,我是为每一行,对吗? (91,*)) – Paul

+0

是的,无论您在阅读什么内容,都应该阅读(91,*)。阅读(91,*)不会阅读独立。希望这可以帮助 :) – GoldenGenova