Funktionszeigerarrays in Fortran

9

Ich kann Funktionszeiger in Fortran 90 mit Code wie

erstellen %Vor%

und verwenden Sie dann f als Argument für eine andere Funktion / Subroutine. Was aber, wenn ich ein Array von Funktionszeigern möchte? In C würde ich einfach

machen %Vor%

um ein Array von Funktionen zu erstellen, die double zurückgeben und ein ganzzahliges Argument verwenden. Ich habe es am offensichtlichsten versucht,

%Vor%

aber gfortran lässt mich nicht EXTERNAL und DIMENSION mischen. Gibt es eine Möglichkeit zu tun, was ich will? (Der Kontext dafür ist ein Programm zum Lösen eines Systems von Differentialgleichungen, so dass ich die Gleichungen eingeben könnte, ohne eine Million Parameter in meinen Subroutinen zu haben.)

    
Eduardo Dobay 26.03.2010, 03:59
quelle

1 Antwort

13

Die Deklaration "real, external: f" macht "f" nicht wirklich zu einem vollständigen Zeiger, da Sie die Prozedur, auf die es zeigt, nicht ändern können - es erlaubt Ihnen, diese einzelne Funktion an eine andere Routine zu übergeben ., Also brauchen Sie auch das "Zeiger" -Attribut. Es gibt Beispiele auf Seite 267 von "Fortran 95/2003 erklärt" von Metcalf, Reid & amp; Cohen - eine Google-Suche nach "Fortran-Prozedur-Zeiger" wird diese Seite aufrufen. Ein einfaches Beispiel in Ihrer Nähe ist "real, external, pointer :: f_ptr". Alternativ: "procedure (f), Zeiger :: f_ptr". Dies ist ein Feature von Fortran 2003 - Ссылка und Ссылка listet partielle Unterstützung in gfortran auf, am besten mit 4.5. Ich bin mir nicht sicher, ob "Dimension" direkt erlaubt ist, aber Sie können einem Zeiger eine Prozedur zuweisen, die viel Flexibilität bietet. Sie können den Zeiger auch in einen abgeleiteten Typ einfügen, der zu einem Array gemacht werden könnte.

Bearbeiten: Hier ist ein Codebeispiel, das mit gfortran 4.5 funktioniert: Edit 2: Zeile auskommentiert per Kommentar unten.

%Vor%     
M. S. B. 26.03.2010, 04:43
quelle