Appendix 6. NAG:s Fortran 95

A 6.1 NAGware Fortran 95 kompilator

        The Numerical Algorithms Group Ltd
        Wilkinson House
        Jordan Hill Road
        Oxford OX2 8DR

        infodesk@nag.co.uk      Tel: +44 1865 511245
                                Fax: +44 1865 310139
NAG erbjuder ett Fortran 90/95 system som uppför sig helt som en kompilator men som i själva verket översätter till C (detta senare gäller dock ej PC versionen). Kompilatorn är nu i version 4.0 under UNIX och finns även under MS-DOS. Båda fungerar bra och innehåller en mer utvidgad felkontroll än tidigare versioner, både under kompilering och exekvering. För tidiga erfarenheter se artikeln A First Encounter with f90 av Michael Metcalf i Fortran Forum, Vol 11, nummer 1, sid 24 - 32, mars 1992. CERN hade då 80 000 rader kod som fungerade under NAG:s Fortran 90 kompilator, version 1.1. Bra service erhålles från NAG Response Centre med elektronisk post. Systemet finns för bland andra Apollo Domain, DEC Station Ultrix, DEC VAX/VMS, Hewlett Packard 9000, IBM 6000 och IBM PC, NeXT, Parsytec, Silicon Graphics, samt Sun SPARC och Sun 3. För IBM PC (MS-DOS) finns förutom det fullständiga systemet även en billig studentversion.

NAG erbjuder även en fullständig Fortran 95 kompilator.

A 6.2 Körning med NAG:s kompilator

Man kör Fortran 90 ungefär som Fortran 77. De vanliga UNIX-kommandona är om källkoden kod1.f90 är i den nya fria formen och källkoden kod2.f är i den gamla fixa formen
        % f90 kod1.f90 kod2.f
och om man har ett helt program som skall ges ett exekveringsnamn
        % f90 -o program program.f90
Under MS-DOS är kompileringskommandot däremot FTN90 och källkoden är *.F90 för den nya fria formen och *.FOR för den gamla fixa formen. För att få omedelbar exekvering lägger man till /LGO.
        C:\> ftn90 program.f90 /lgo
Vid användning av flera programenheter i olika filer bör man först separatkompilera exempelvis filerna DEL1.F90 och DEL2.F90 och man får då de båda objektfilerna DEL1.OBJ och DEL2.OBJ, för att sedan länka dessa med LINK77 och därvid skapa den exekverbara modulen HELA.EXE.
        C:\> LINK77
        $LOAD DEL1
        $LOAD DEL2
        $FILE HELA.EXE
        C:\>
        C:\> HELA
Symbolen $ ovan genereras automatiskt av länkaren.

För ytterligare information om f90 under UNIX rekommenderas manualkommandot man f90. Jag listar här de viktigaste tilläggen till kompileringskommandot:

 -c       Enbart kompilering (ej länkning)
 -C       Indexkontroll
 -fixed   Gamla formen av källkod
 -free    Nya formen av källkod
 -f77     Anropskonvention konsekvent med UNIX f77
 -g       Genererar information för interaktiv
          avlusning (inkompatibelt med -O)
 -Ilista  Fortran 90 söker automatiskt efter
          moduler i aktuell filkatalog,
          eventuella filkataloger i I-listan,
          samt /usr/local/lib/f90.
 -l       Länkning av bibliotek
 -o       Namnsätter det färdiga programmet
 -O       Optimerar (inkompatibelt med -g)
 -pg      Genererar exekveringsprofil
          (användes av gprof på Sun och IBM 
          respektive prof på DEC och SGI)
 -P       Kontrollerar referenser till pekare.
 -S       Producerar källkod i språket C
 -time    Rapportera exekveringstiden för de olika
          kompileringsfaserna
 -v       Kommenterar hur kompileringen fortskrider
 -version Ger kompilatorns versionsnummer
 -w       Undertrycker varningar

A 6.3 Underligheter i NAG:s kompilator

Anledningen till att dessa utvidgningar till standard Fortran 90 gjorts av NAG är att underlätta övergången till Fortran 90 från de vanligaste dialekterna av Fortran 77.

Nedan följer en lista på de utvidgade deklarationerna med deras motsvarigheter i standard Fortran 90, men utnyttjande de slag, eller KIND-parametrar, som NAG valt.

        REAL*4      REAL(KIND=1)
        REAL*8      REAL(KIND=2)
        COMPLEX*8   COMPLEX(KIND=1)
        COMPLEX*16  COMPLEX(KIND=2)
        LOGICAL*1   LOGICAL(KIND=1)
        LOGICAL*4   LOGICAL(KIND=2)
        INTEGER*1   INTEGER(KIND=1)
        INTEGER*2   INTEGER(KIND=2)
        INTEGER*4   INTEGER(KIND=3)

A 6.4 Systemparametrar

Körning med NAG:s kompilator på DEC Station Ultrix, Sun SPARC och IBM PC (MS-DOS) ger i samtliga fall följande parametrar för logiska variabler, heltal, flyttal och komplexa tal, dvs samma värden eftersom samtliga arkitekturer är baserade på IEEE-754. Jämför de numeriska förfrågningsfunktionerna i Appendix 5.8. En ändring skedde för logiska variabler i Release 2.1.

Som synes använder NAG siffrorna 1, 2 och 3 som KIND-nummer. För att förbättra kompatibiliteten med andra leverantörer har NAG nu infört ett nytt kompileringstillägg -kind. Om man använder -kind=byte gäller således antalet bytes som KIND-nummer, om man inte anger något eller -kind=sequential gäller NAG:s egna system.

LOGICAL              Default        byte        word
  KIND number =            2           1           2
  KIND number =            3           1           3 (från 2.1)

INTEGER              Default        int8       int16       int32
  KIND number =            3           1           2           3
       digits =           31           7          15          31
        radix =            2           2           2           2
        range =            9           2           4           9
         huge =   2147483647         127       32767  2147483647
     bit_size =           32           8          16          32

REAL                    Default         single         double
  KIND number =               1              1              2
       digits =              24             24             53
  maxexponent =             128            128           1024
  minexponent =            -125           -125          -1021
    precision =               6              6             15
        radix =               2              2              2
        range =              37             37            307
      epsilon =  0.11920929E-06 0.11920929E-06 0.22204460E-15
         tiny =  0.11754944E-37 0.11754944E-37 0.22250739-307
         huge =  0.34028235E+39 0.34028235E+39 0.17976931+309

COMPLEX                 Default         single         double
  KIND number =               1              1              2
    precision =               6              6             15
        range =              37             37            307 

Inbyggda funktioner och subrutiner Innehåll Andra Fortran 90/95 system


Senast modifierad: 6 juli 2000
boein@nsc.liu.se