Array-wertige Funktion

Ich bin neu auf dem Gebiet der Fortran-Programmierung und nachdem ich einige Programme getestet habe, habe ich bereits ein Gefühl dafür, wie man Programme schreibt. Jetzt habe ich mich an einem etwas härteren Programm versucht und bin auf ein Problem gestoßen, das ich selbst nicht lösen konnte. Ich habe bereits über das Problem gegoogelt, aber ich konnte keine angemessene Antwort finden ... Also dachte ich, vielleicht gibt es ein oder zwei Fortran-Programmierer, die mir bei der Lösung dieses Problems behilflich sein können.

Das Programm ist sehr einfach, es multipliziert nur zwei Matrizen miteinander. Ich habe versucht, eine Funktion zu schreiben, die die Aufgabe ausführt und die Ergebnismatrix an den Aufrufer zurückgibt. Um das Programm etwas dynamischer zu gestalten, habe ich dynamische Arrays verwendet, in denen der Benutzer die Dimension angeben kann, die die Matrizen haben sollen. Das Programm sieht so aus:

program matrixMul
implicit none
integer, parameter :: ikind=selected_int_kind(18)
integer(kind=ikind), allocatable, dimension(:,:) :: m1, m2, result, mulMatrix
integer :: rows, cols, i, j

print *, 'Please enter the number of rows the matrix should have: '
read *, rows

print *, 'Please enter the number of columns the matrix should have: '
read *, cols

!allocate sufficient memory
allocate(m1(rows, cols), m2(cols, rows))

!fill matrixes with numbers entered by the user
call fillMatrix(m1, rows, cols)
call fillMatrix(m2, cols, rows)

result = mulMatrix(m1, m2, rows, cols)

!prints the result matrix to the screen
call printMatrix(result, rows, cols)

!deallocate memory
deallocate(m1, m2, mulMatrix, result)
end program matrixMul

Wo die Funktion, die die eigentliche Multiplikation durchführt, so aussieht:

function mulMatrix(m1, m2, r, c) result(mulMat)
implicit none
integer, parameter :: ikind=selected_int_kind(18)
integer(kind=ikind), dimension(r, c) :: m1
integer(kind=ikind), dimension(c, r) :: m2
integer(kind=ikind), allocatable, dimension(:,:) :: mulMat
integer r, c, i, j, k

allocate(mulMat(r,r))

!code which performs calculation is omitted

end function mulMatrix

Mein Compiler meldet den folgenden Fehler:

Fehler: Der Array-Index bei (1) ist ein Array mit Rang 2

Für mich scheint es, als würde der Compiler die Variable mulMatrix wie ein gewöhnliches Array behandeln und sich deshalb darüber beschweren, weil ich sie verwende, da sie vier Dimensionen haben würde, was nicht der Fall ist. Aber wie kann ich den Compiler veranlassen, diese Variable als Funktionsaufruf mit vier Parametern anstelle eines Array-Zugriffs zu betrachten? Jede Hilfe wäre dankbar.

Antworten auf die Frage(1)

Ihre Antwort auf die Frage