Fortran-90-rank mismatch in dem Versuch zu extrahieren, die einen Vektor aus einem array

In meinem Fortran 90 code, ich habe das folgende array (genannt array) von ganzen zahlen:

 1     2     3     4     5     6     7     8     9    10
11    12    13    14    15    16    17    18    19    20
21    22    23    24    25    26    27    28    29    30
31    32    33    34    35    36    37    38    39    40

Möchte ich extrahieren Sie die erste Spalte ein, und speichern Sie es in einem vier-element-Vektor genannt Zeit. Ich habe den folgenden code:

PROGRAM test
  IMPLICIT NONE
  INTEGER, PARAMETER :: numrows=4, numcols=10
  INTEGER :: i, j, k
  INTEGER, DIMENSION(:,:), ALLOCATABLE :: array, time

  ALLOCATE(array(numrows,numcols))
  ALLOCATE(time(numrows))

  k=1
  DO i=1,numrows
    DO j=1,numcols
      array(i,j)=k
      k=k+1
    END DO
  END DO

  DO i=1,numrows
    WRITE(*,"(100(3X,I3))") (array(i,j), j=1,numcols)
  END DO

  time=array(:,1)
END PROGRAM test

Aber, bekomme ich die folgende Fehlermeldung (beim kompilieren in gfortran):

test.f90:8.15:

  ALLOCATE(time(numrows))
               1
Error: Rank mismatch in array reference at (1) (1/2)
test.f90:22.2:

  time=array(:,1)
  1
Error: Incompatible ranks 2 and 1 in assignment at (1)

Warum ist das der Fall? Die Fehlermeldung scheint darauf hinzudeuten, dass das array array(:,1) ist der Rang 2 nicht Rang 1. Gibt es irgendeine Möglichkeit, dass ich konvertieren array(:,1) auf ein array von Rang 1? Brauche ich RESHAPE irgendwie squeeze-array? Oder ist das problem, dass durch die Verwendung array(:,1) ich bin Angabe eines Spalten-Vektor, eher als ein zeilenvektor? Ich danke Ihnen sehr für Ihre Zeit.

InformationsquelleAutor Andrew | 2011-08-03
Schreibe einen Kommentar