2017-10-08 3 views
1

J'utilise la routine READ pour lire une matrice à partir d'un fichier. En fait, j'en extrait directement 9 sous-matrices (pensez à une grande table 3x3, chacune étant une sous-matrice). Les indices exacts n'ont pas d'importance, mais chaque sous-matrice est environ NY_INTxNY_INT, de sorte que toute la matrice du fichier est 3NY_INTx3NY_INT.Indices lors de la lecture de la matrice à partir du fichier

 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 

Ce code est-il correct? Il me semble que je n'utilise pas correctement les boucles.

Je ne comprends pas si les index dans les instructions READ sont les positions dans ma matrice de destination ou celles du fichier que je suis en train de lire.

Répondre

0

Les index que vous appelez sont basés sur le nouveau tableau que vous avez créé.

Une meilleure approche consisterait à lire toutes les valeurs dans un tableau, puis à créer un nouveau tableau pour chaque sous-matrice, en extrayant les données du tableau.

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 

Cela dépend bien sûr de ce que vous essayez de faire avec les données par la suite.

+0

Donc, je suis pour chaque ligne, non? En outre, j'obtiens cette erreur: un astérisque est invalide dans ce contexte (read (91, *)) – Paul

+0

Oui, il est supposé être lu (91, *), quoi que vous lisiez. Read (91, *) does not rester seul. J'espère que cela t'aides :) – GoldenGenova