Suche…


Fortran-Programme

Ein komplettes Fortran-Programm besteht aus einer Reihe unterschiedlicher Programmeinheiten. Programmeinheiten sind:

  • Hauptprogramm
  • Funktion oder Unterprogramm Unterprogramm
  • Modul oder Submodul
  • Blockdatenprogrammeinheit

Das Hauptprogramm und einige Unterprogramme für Prozeduren (Funktionen oder Unterprogramme) können in einer anderen Sprache als Fortran bereitgestellt werden. Zum Beispiel kann ein C-Hauptprogramm eine durch ein Fortran-Funktionsunterprogramm definierte Funktion aufrufen, oder ein Fortran-Hauptprogramm kann eine durch C definierte Prozedur aufrufen.

Diese Fortran-Programmeinheiten können verschiedene Dateien oder eine einzige Datei sein.

Zum Beispiel können wir die zwei Dateien sehen:

prog.90

program main
  use mod
end program main

mod.F90

module mod
end module mod

Und der Compiler (korrekt aufgerufen) kann das Hauptprogramm mit dem Modul verknüpfen.

Die einzelne Datei kann viele Programmeinheiten enthalten

alles.F90

module mod
end module mod

program prog
  use mod
end program prog

function f()
end function f()

In diesem Fall muss jedoch beachtet werden, dass die Funktion f weiterhin eine externe Funktion ist , was das Hauptprogramm und das Modul betrifft. Das Modul ist jedoch für das Hauptprogramm zugänglich.

Die Regeln für den Eingabebereich gelten für jede einzelne Programmeinheit und nicht für die Datei, in der sie enthalten sind. Wenn zum Beispiel jede Bereichseinheit keine implizite Typisierung haben soll, muss die obige Datei als geschrieben werden

module mod
  implicit none
end module mod

program prog
  use mod
  implicit none
end program prog

function f()
  implicit none
  <type> f
end function f

Module und Submodule

Module sind an anderer Stelle dokumentiert .

Compiler erzeugen häufig sogenannte Moduldateien : normalerweise die Datei, die sie enthält

module my_module
end module

führt dazu, dass der Compiler eine Datei namens my_module.mod . In einem solchen Fall muss die Moduldatei sichtbar sein, damit ein Modul für eine Programmeinheit zugänglich ist, bevor diese Programmeinheit verarbeitet wird.

Externe Verfahren

Eine externe Prozedur ist eine Prozedur, die außerhalb einer anderen Programmeinheit oder auf andere Weise als Fortran definiert ist.

Die Funktion ist in einer Datei enthalten

integer function f()
  implicit none
end function f

ist eine externe Funktion.

Für externe Prozeduren kann ihre Existenz unter Verwendung eines Schnittstellenblocks (zur Angabe einer expliziten Schnittstelle) deklariert werden.

program prog
  implicit none
  interface
    integer function f()
  end interface
end program prog

oder durch eine Deklaration, um eine implizite Schnittstelle anzugeben

program prog
  implicit none
  integer, external :: f
end program prog

oder auch

program prog
  implicit none
  integer f
  external f
end program prog

Das external Attribut ist nicht erforderlich:

program prog
  implicit none
  integer i
  integer f
  i = f()   ! f is now an external function
end program prog

Blockieren Sie Datenprogrammeinheiten

Blockdaten-Programmeinheiten sind Programmeinheiten, die Anfangswerte für Objekte in gemeinsamen Blöcken bereitstellen. Diese sind hier bewusst nicht dokumentiert und werden in der Dokumentation historischer Fortran-Funktionen enthalten sein.

Interne Unterprogramme

Eine Programmeinheit, die kein internes Unterprogramm ist, kann andere Programmeinheiten enthalten, die als interne Unterprogramme bezeichnet werden .

program prog
  implicit none
contains
  function f()
  end function f
  subroutine g()
  end subroutine g
end program

Ein solches internes Unterprogramm hat eine Reihe von Funktionen:

  • Es gibt eine Host-Zuordnung zwischen Entitäten im Unterprogramm und dem äußeren Programm
  • implizite Typisierungsregeln werden vererbt ( implicit none ist in f oben f )
  • Interne Unterprogramme verfügen über eine explizite Schnittstelle im Host

Modul-Unterprogramme und externe Unterprogramme können interne Unterprogramme haben, wie z

module mod
  implicit none
contains
  function f()
  contains
    subroutine s()
    end subroutine s
  end function f
end module mod

Quellcodedateien

Eine Quellcodedatei ist eine (in der Regel) Klartextdatei, die vom Compiler verarbeitet werden soll. Eine Quellcodedatei kann bis zu ein Hauptprogramm sowie eine beliebige Anzahl von Modulen und externen Unterprogrammen enthalten. Eine Quellcodedatei kann beispielsweise Folgendes enthalten

module mod1
end module mod1

module mod2
end module mod2

function func1()    ! An external function
end function func1

subroutine sub1()   ! An external subroutine
end subroutine sub1

program prog        ! The main program starts here...
end program prog    ! ... and ends here

function func2()    ! An external function
end function func2

An dieser Stelle sei daran erinnert, dass die externen Unterprogramme zwar in derselben Datei wie die Module und im Hauptprogramm enthalten sind, die externen Unterprogramme jedoch keiner anderen Komponente explizit bekannt sind.

Alternativ können die einzelnen Komponenten auf mehrere Dateien verteilt und sogar zu verschiedenen Zeiten kompiliert werden. In der Compiler-Dokumentation sollte beschrieben werden, wie Sie mehrere Dateien in einem einzigen Programm kombinieren.

Eine einzelne Quellcodedatei kann entweder Quellcode in festem oder freiem Format enthalten: Sie können nicht gemischt werden, obwohl mehrere Dateien, die zur Kompilierzeit kombiniert werden, unterschiedliche Stile aufweisen können.

Um dem Compiler das Quellformular anzugeben, gibt es im Allgemeinen zwei Optionen:

  • Wahl des Dateinamensuffixes
  • Verwendung von Compilerflags

Das Flag für die Kompilierungszeit zur Angabe einer Quelle mit festem oder freiem Format finden Sie in der Dokumentation des Compilers.

Die signifikanten Dateinamensuffixe befinden sich auch in der Dokumentation des Compilers. In der Regel enthält eine Datei mit dem Namen file.f90 eine Freiformquelle, während die Datei file.f eine Quelle mit festem Format enthält.

Die Verwendung des .f90 Suffixes zur Angabe der Freiform-Quelle (die im Fortran 90-Standard eingeführt wurde) veranlasst den Programmierer häufig, das Suffix zu verwenden, um den Sprachstandard anzugeben, dem der Quellcode entspricht. Beispielsweise sehen wir möglicherweise Dateien mit den Suffixen .f03 oder .f08 . Dies sollte generell vermieden werden: Die meisten Quellen von Fortran 2003 entsprechen auch Fortran 77, Fortran 90/5 und Fortran 2008. Außerdem berücksichtigen viele Comiler solche Suffixe nicht automatisch.


Compiler bieten häufig auch einen eingebauten Code-Preprozessor (in der Regel auf Basis von CPP). Wiederum kann ein Flag zur Kompilierungszeit verwendet werden, um anzuzeigen, dass der Präprozessor vor der Kompilierung ausgeführt werden soll, das Suffix der Quellcodedatei kann jedoch auch eine solche Vorverarbeitungsanforderung anzeigen.

Bei Dateisystemen, bei denen die Groß- und Kleinschreibung file.F wird die Datei file.F häufig als eine zu verarbeitende file.F90 mit festem Format und file.F90 als eine zu verarbeitende file.F90 mit freiem Format verstanden. Nach wie vor sollte die Dokumentation des Compilers nach solchen Flags und Dateisuffixen durchsucht werden.



Modified text is an extract of the original Stack Overflow Documentation
Lizenziert unter CC BY-SA 3.0
Nicht angeschlossen an Stack Overflow