The Numerical Algorithms Group Ltd Wilkinson House Jordan Hill Road Oxford OX2 8DR infodesk@nag.co.uk Tel: +44 1865 511245 Fax: +44 1865 310139NAG 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:\> HELASymbolen $ 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