15. Programbibliotek

15.1 Användning av bibliotek i Fortran 90

De båda viktigaste numeriska programbiblioteken i Fortran 90 är Båda dessa leverantörer erbjuder dels en modifierad version av biblioteket i Fortran 77 omkompilerat i Fortran 90, dels ett fullständigt nytt bibliotek utnyttjande alla de nya möjligheterna i Fortran 90. Dessa senare använder det nya språkets möjligheter i förvånansvärt stor omfattning. Användningen skiljer sig därför något från vad den gamle IMSL eller NAG användaren kanske väntat sig.

En förväntad ändring är naturligtvis att de nya möjligheterna för fält, med bland annat dynamisk minnesallokering, utnyttjas i Fortran 90 bibliotek, varför man nu slipper att i användarprogram reservera lagringsutrymme för lokala arbetsareor i biblioteksrutinerna, liksom att anrop med fält som argument har förenklats.

En mer överaskande nyhet är att biblioteken gärna utnyttjar moduler. Så är exempelvis biblioteket fl90 från NAG gjort på ett sådant sätt att man vid användning av en rutin i en viss grupp måste inkludera tillhörande "gruppmodul", som innehåller definitioner som svarar mot just den gruppen. På detta sätt undviker man dels att behöva göra egna definitioner, dels att få in en massa definitioner som inte användes i användarprogrammet. En naturlig användning av moduler är däremot när man inför operationer på nya datatyper.

Det är mycket viktigt med en utförlig dokumentation av både de enskilda biblioteksrutinerna (som direkt skall anropas av användarprogrammet) och av bibliotekets hela programstruktur (speciellt nu när Fortran programmerare fortfarande är relativt oerfarna i Fortran 90, och det ännu inte finns några etablerade traditioner hur programmen skall skrivas).

NAG har två inledningar i sin dokumentation av fl90, en "Essential Introduction" för den som är erfaren i Fortran 90, och en "Tutorial" för den som är erfaren i Fortran 77 men bara kan grunderna i Fortran 90. Denna "Tutorial" är ganska arbetsam att studera, men behöver bara studeras i begränsad omfattning av användaren, det räcker nämligen med de båda första kapitlen samt det (eller de) kapitel som behandlar den tillämpning som skall ske. Stor möda har lagts på att förbättra användarens gränssnitt gentemot biblioteksrutinerna, speciellt så har argumentlistorna kortats ned, strukturer (av NAG definierade datatyper) utnyttjas för säker kommunikation mellan programenheter, generiska gränssnitt utnyttjas för att förenkla dokumentationen, samt ytterligare kontroller har lagts in vid både kompilering och exekvering.

Visual Numerics kallar sitt nya bibliotek IMSL Fortran 90 MP Library, och har bland annat inkluderat gränssnitt (INTERFACE) för alla IMSL Fortran 90 och Fortran 77 anropsbara subrutiner. Förutom det som NAG gjort har Visual Numerics även introducerat flera nya punktsymboler, till exempel .x. för matrismultiplikation, i stället för funktionen MATMUL.

15.2 Användning av bibliotek i Fortran 77

Ett problem med Fortran 90 är att det ännu inte finns så många program eller programbibliotek i det "nya" språket.

Man tvingas därför ibland, i avvaktan på installation av bibliotek i Fortran 90, att utnyttja "gamla" programbibliotek, vanligtvis i Fortran 77. Detta kan ske på två sätt.

15.2.1 Metod 1.

Den enklaste metoden är att kompilera om aktuella Fortran 77 rutiner med Fortran 90 kompilatorn utnyttjande fix form. Detta bör gå eftersom Fortran 77 är en äkta delmängd av Fortran 90. Problemet är att biblioteksförfattaren kanske inte alltid har följt standarden. NAG anger speciellt att datatypen DOUBLE PRECISION COMPLEX eller COMPLEX*16 ej finns i standarden, men väl i många implementationer av Fortran 77. Motsvarande kod måste därför modifieras. Att konvertera COMPLEX*16 i utvidgad Fortran 77 till COMPLEX(KIND=AP) i Fortran 90 är dock enkelt, jämför avsnitten 10.3, 10.4 och 14.4.3.

Vidare så är eventuell tilldelning av binära, oktala eller hexadecimala konstanter standardiserad först i och med Fortran 90.

Notera vidare att den mycket vanliga beteckningen REAL*8 för DOUBLE PRECISION ej är tillåten i Fortran 90, men NAG har faktiskt i sin kompilator lagt in den som ett tillägg.

15.2.2 Metod 2.

Den andra metoden är att länka Fortran 77-biblioteket med Fortran 90 programmet. Ett praktiskt problem var att NAG:s Fortran 90 system f90 under version 1.1 saknade stöd för länkning av bibliotek, varför man först måste kompilera med
        f90 -c
och sedan länka med cc. Notera att NAG:s kompilator på UNIX-system först översätter Fortran 90 till C, för att sedan utnyttja befintlig C-kompilator för översättning till exekverbar kod. Vid denna senare länkning måste man se till att de bibliotek som hör till Fortran 90, och inte bara de som hör till C, kommer med. NAG rekommenderade följande kommandon
        f90 -c test.f
        cc test.o -lnag -o a.out /usr/local/lib/f90/f90rt0.o \
                /usr/local/lib/f90/libf90.a -lI77 -lF77 -lm
vilka fungerade på Sun OS 4.1.2 sedan jag tagit bort -lI77 eftersom detta bibliotek ej fanns på mitt system.

Under version 2 är tillvaron mycket enklare, eftersom stöd för länkning numera finns. Det gäller då bara att se till att erforderliga Fortran 77 bibliotek länkas in. På Sun ger man kommandot

        f90 test.f -lnag -lF77 
medan man på DEC ULTRIX (MIPS) ger kommandot
        f90 test.f -lnag -lfor -lutil -li -lots
Förutom ovan nämnda problem tillkommer att Fortran tillåter rutinnamn som argument, vilket behandlas olika i NAG:s Fortran 90 kompilator, baserad på översättning till C, och i existerande Fortran 77 kompilatorer. Risk finns därför för länkningsfel.

På Sun under OS 4.1.2 erhölls dessutom fel resultat om man utnyttjade funktioner i enkel precision från bibliotek kompilerade under Fortran 77, eftersom aktuellt (traditionellt) C system konverterade sådana anrop till dubbel precision. NAG har åtgärdat detta fel i version 2.1 av sin kompilator.

Metoden kan således användas då varken komplexa argument i dubbel precision eller rutinnamn användes som argument.

Det är ytterst väsentligt att få med alla aktuella bibliotek i länkningen, såsom de matematiska biblioteken i såväl Fortran 77, Fortran 90 som C. Biblioteken måste dessutom oftast ges i rätt ordning.

Program-uppbyggnad Innehåll Inkompatibilitetsproblem


Senast modifierad: 31 augusti 2000
boein@nsc.liu.se