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.
% f90 kod1.f90 kod2.foch om man har ett helt program som skall ges ett exekveringsnamn
% f90 -o program program.f90Under 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 /lgoVid 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
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)
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