Programmieren in Fortran 90/95


  1. FORTRAN 77 nach Fortran 90/95 - Konverter
  2. Will man alten FORTRAN 77 - Quellcode in Fortran 90/95 - Code umwandeln, müssen zumindestens drei Dinge angepasst werden:

    Dann liegt bereits ein Programm vor, das die Kriterien der Fortran 90 "free source form" erfüllt. Ein mittels der obigen Änderungen nur minimal angepasstes Programm lässt sich mit einem Fortran 90 - Compiler übersetzen, weil bei der Normung der Fortran 90/95 - Sprache die Rückwärtskompatibiltät zu FORTRAN 77 eingearbeitet wurde.

    Die beiden letzten notwendigen Anpassungen kann man z.B. bei kleineren Programmen in einem Editor per Hand durchführen. Bei längeren Programmen kann man einfache Konverter zu Hilfe nehmen. Komplexere Konverter setzen neben diesen syntaktischen Änderungen zusätzlich Programmierkonstrukte vom veralteten FORTRAN 77 - Syntax in Fortran 90 - Syntax um, z.B. durch die Umwandlung geschachtelter Schleifen in logische Strukturen, den Einbau Fortran 90 spezifischer moderner neuer und syntaktisch einfacherer Konstrukte und eine Fortran 90 spezifische Datentypdeklaration bis zur Code-Optimierung.

    Folgende FORTRAN 77 - Programme wurden später konvertiert:

    Übersicht über die eingesetzten Konverter und deren Ergebnisse:

    1. convert.f90 (einfacher Freeware-Konverter mit geringfügigem Konversionspotential)
      läßt sich z.B. compilieren mit
      f90 -o f90convert convert.f90 Das erzeugte Executable f90convert wird daraufhin an der Kommandozeile gestartet (RETURN-Taste). Das laufende Programm erwartet die folgenden Eingaben
      1. den Programmnamen ohne die Extension .f
      2. einen /, um die Defaultwerte (3,10,F,F) zu übernehmen oder
      3. die Angabe dieser Werte, wobei die folgenden Default-Werte durch Eingabe eines / übernommen werden können.
      Die erste Zahl bestimmt die Anzahl der Spalten, die bei DO oder IF-Anweisungsblöcken eingerückt werden soll. Die zweite Zahl gibt an, wie oft dies bei geschachtelten Anweisungen maximal getan werden soll. Würde der dritte Wert auf T (für .TRUE.) gesetzt, so werden Leerzeichen bei nicht standardkonformen Deklarationsanweisungen eingefügt bzw. gelöscht. Falls der 3. Wert auf T gesetzt wurde, bewirkt ein T beim 4. Wert, daß nur Interface-Blöcke generiert werden.
      Mit convert.f90 werden neben a. und b. unter anderem angepaßt:
      • Einbau von Leerzeichen nach Schlüsselwörtern
      • CONTINUE am Ende einer DO-Schleife wird durch END DO ersetzt
      • END-Anweisungen werden durch
        END <Art des zu beendenden Unterprogrammteils> <Name des Progammteils>
        beendet.
      Ergebnisse:

    2. to_f90.f90 ( empfehlenswerter Konverter vom Alan J. Miller)
      Compilieren mit f90 -o to_90 convert.f90 Das erzeugte Executable to_f90 wird daraufhin an der Kommandozeile gestartet (RETURN-Taste). Diesmal den Namen des zu konvertierenden FORTRAN 77 - Programms mit der Extension .f eingeben. Nach der erfolgreichen Konvertierung einen weiteren Programmnamen eingeben oder mit ^C to_f90 beenden.

      Features:

      • konvertiert die FORTRAN 77 "fixed source form" in Fortran 90 "free source form"
      • oft wird in DO-Schleifen-Konstrukte die Programmablaufsteuerung über Anweisungsnummern ersetzt durch DO - END DO gegebenfalls ergänzt mit CYCLE und EXIT.
      • arithmetische IF-Anweisungen werden ersetzt durch die IF - THEN -- ELSE -- END IF - Struktur
      • Datentypenvereinbarungen werden mehr dem Fortran 90 Stil entsprechend vorgenommen, bei Unterprogrammen wird die Datentypdeklaration der formalen Parameter mit dem zugehörigen INTENT - Attribut ergänzt.
      • Zusammengehörige Anweisungsblöcke werden eingerückt.

      Ergebnisse:

      • goto.to_f90.f90
      • test.to_f90.f90
      • trapez.to_f90.f90

        Besonders beim letzten Beispiel fällt auf, dass to_f90 im Vergleich zu f90convert den Code sehr viel tiefgehender auf Fortran 90-Syntax umstellt.

         btrzxi> to_f90
        
         Enter name of Fortran source file: trapez.f
        No. of lines read = 58
         REAL FUNCTION TRAPEZ(A,B,F)
         REAL FUNCTION F(X)
         REAL FUNCTION G(X)
               Converting DO-loops, 3-way IFs, & computed GO TOs
               Determining INTENTs of dummy arguments
               Writing file: trapez.f90
                                
        Die Konvertierung gelang im diesem komplexeren Beispiel nicht perfekt:
        f90 trapez.f90 bringt 5 Fehlermeldungen. Zur Behebung muss man jeweils in den Unterprogrammen die Zeile mit IMPLICIT NONE vor die Datentypdeklaration mit dem INTENT-Attribut stellen und in der FUNCTION TRAPEZ ist F ein formaler Unterprogramparameter, der als solcher vor dem hinzugefügten Attribut INTENT(IN) befreit und mit dem Attribut EXTERNAL versehen werden muss.
        ( trapez.to_f90mod.f90)

    3. Vast/77to90
      (kommerzieller FORTRAN77 nach Fortran90 Konverter, proprietär und sehr teuer (Abrechnung nach den zu konvertierenden Code-Zeilen, z.B. 5000 Zeilen für 450 US-Dollar, 10 Prozent Nachlass für wissenschaftliche Institutionen) mit graphischem User-Interface)

Zurück zur Vorlesungsseite


Heidrun.Kolinsky@uni-bayreuth.de
(Dr. Heidrun Kolinsky, Rechenzentrum der Universität Bayreuth, Gebäude NW2, Raum 159, Universitätsstraße 30, D-95440 Bayreuth, Tel. 0921/55-2687)