2017-10-08 4 views
1

私はファイルから行列を読むためにルーチンREADを使います。実際には、9つの部分行列を直接抽出します(3×3の大きな表を考えると、各部分行列です)。正確なインデックスは関係ありませんが、各サブマトリックスは約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

呼び出し元のインデックスは、作成した新しいアレイに基づいています。

より良いアプローチは、すべての値を1つの配列に読み込んだ後、個々の部分行列ごとに新しい配列を作成し、配列からデータを取り出すことです。

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

だから、私は各行のために、そうですか?また、私はこのエラーを受け取ります:この文脈ではアスタリスクは無効です(read(91、*)) – Paul

+0

はい、あなたが読んでいても読み込まれていると思われます(91、*)。それ自身で立つ。お役に立てれば :) – GoldenGenova

関連する問題