Appendix 10. Ordförklaringar
allokerbart fält (allocatable array)
Fältet deklareras som ALLOCATABLE med
en viss typ och en viss rang. Det kan sedan
tilldelas utrymme med ALLOCATE till ett bestämt
omfång, och av-allokeras med DEALLOCATE.
automatiskt fält (automatic array)
Fält i underprogram där aktuellt fält är
lokalt men parametrarna i dimensioneringen finns
med bland de formella argumenten.
SUBROUTINE sub (i, j, k)
REAL, DIMENSION (i, j, k) :: x
fält (array)
Dimensionerad storhet.
fält med antagen dimension
(assumed-size array)
Fältet har en variabel dimension liksom i
Fortran 77 genom att både fältnamn och
aktuell dimension finns med i argumentlistan,
utom den sista dimensionen, vilken ges med en asterisk.
SUBROUTINE sub (a, na1, na2)
REAL, DIMENSION (na1,na2,*) :: a
I Fortran 66 fanns inte begreppet "assumed-size array", men det simulerades
genom att placera siffran "1" där stjärnan "*" är i Fortran 77.
Denna sed bryter mot eventuell
index-kontroll och är naturligtvis förbjuden av moderna kompilatorer,
som NAG Fortran 90 kompilatorn. Många gamla program
utnyttjar fortfarande denna metod att simulera dynamisk minnestilldelining.
fält med antaget mönster
(assumed-shape array)
Fält i subprogram där aktuellt fält ej
är lokalt men har en viss typ och en viss rang.
SUBROUTINE sub (a)
REAL, DIMENSION (:, :, :) :: a
I detta fall kräves ett explicit
gränssnitt i den
anropande programenheten, förutom en explicit
deklaration där av fältet A.
INTERFACE
SUBROUTINE SUB (A)
REAL, DIMENSION (:, :, :) :: A
END SUBROUTINE SUB
END INTERFACE
fältfunktion (array function)
Funktion som opererar på ett fält och returnerar
ett fält eller en skalär, eller opererar på
en skalär och returnerar ett fält.
fältsektion (array section)
Del av ett fält (kan ha rang större än 1).
fältuttryck (array assignment)
Tilldelning av ett helt fält till ett annat är
tillåtet om de båda fälten har samma
mönster
(liksom om uttrycket till höger är skalärt, i vilket
fall alla element i fältet tilldelas skalärens värde).
justerbart fält (adjustable array)
Fältet har en variabel dimension liksom i Fortran 77
genom att både fältnamn och aktuell dimension
finns med i argumentlistan.
SUBROUTINE sub (a, na)
REAL, DIMENSION (na) :: a
ledande
Vid endimensionella fält (vektorer) är den ledande dimensionen
ointressant, vid tvådimensionella fält (matriser)
är den ledande dimensionen den första av de båda
dimensionernas omfång.
Begreppet användes normalt inte vid fält av högre ordning,
men avser då samtliga dimensioners omfång utom den sista.
mönster (shape)
Mönstret för ett fält består av rang
och omfång.
omfång (extent)
Antalet element längs respektive dimension.
rang (rank)
Antalet dimensioner. VARNING: Ej den matematiska rangen.
attribut (attribute)
Vid deklaration av en variabel kallas
tilläggs-egenskaper som PARAMETER,
PUBLIC, PRIVATE, INTENT, DIMENSION,
SAVE, OPTIONAL, POINTER, TARGET,
ALLOCATABLE, EXTERNAL och INTRINSIC
för attribut. Dessa kan även i stället ges som
egna satser.
BLOCK DATA programenhet (BLOCK DATA program unit)
En BLOCK DATA programenhet innehåller
definitioner (begynnelsevärden) som skall användas av de
andra programenheterna. Ersättes nu av det generellare
begreppet modul.
extern (EXTERNAL)
De funktioner och subrutiner som man själv skriver,
eller som ingår i tillämpningsbibliotek. Motsats är inbyggd.
Om externa funktioner eller subrutiner användes som
argument vid anrop av något annat underprogram skall
de deklareras EXTERNAL.
funktion (function)
En programenhet som returnerar ett funktionsvärde
(eventuellt flera, dvs ett fält) i sitt namn och som har ett
antal parametrar. Det är tillåtet med funktioner utan
parametrar (argument), det är likaså tillåtet men ej
tillrådligt att funktionen ändrar värdet på ett
eller flera av argumenten.
generisk (generic)
En generisk funktion kan vara sådan att typen på argumentet
ger samma typ på funktionen. Värdet SIN(1.0D0)
är dessutom noggrannare än det av SIN(1.0). Dessutom
finns inbyggda generiska funktioner, till exempel REAL(),
som kan ha argument av olika typer men alltid returnerar
ett värde av en viss typ. För generiska subrutiner är
det bara argumenten som anpassas.
gränssnitt (interface)
Eftersom de olika programenheterna i ett Fortran-program
behandlas helt självständigt måste all information om
argumenten föras över manuellt. I Fortran 77 skedde
detta med otympliga argumentlistor. I Fortran 90 kan
i stället ett gränssnitt kallat INTERFACE
användas. Detta måste användas vid
- moduler som använder exempelvis egna datatyper,
- anrop med nyckelordsargument eller underförstådda argument
- egna generiska rutiner
- fält med antaget mönster
- fält deklarerade med pekare
- vid definition av ny betydelse hos en OPERATOR
- om avsikt INTENT skall få verkan vid
användning av kompilatorn från NAG
- vid anrop av en fältfunktion med ett fält som resultat
(behövs ej vid inbyggda fältfunktioner)
- användning av subrutiner eller funktioner
som argument (om man använder IMPLICIT NONE)
huvudprogram (main program)
Varje Fortranprogram måste bestå av exakt ett
huvudprogram, samt eventuellt en eller flera subrutiner,
funktioner, moduler och
BLOCK DATA programenheter.
Ett huvudprogram kan inledas med satsen PROGRAM namn,
och avslutas med END eller END PROGRAM
eller END PROGRAM namn.
inbyggd (INTRINSIC)
De funktioner och subrutiner som följer med kompilatorn
kallas inbyggda. De har vissa speciella egenskaper, bland
annat behöver eventuella generiska egenskaper inte
deklareras. I undantagsfall levererar en del leverantörer
ett par av de normalt inbyggda rutinerna som externa.
Motsatsen till inbyggd är extern.
Om inbyggda funktioner eller subrutiner användes som
argument vid anrop av något annat underprogram skall de
deklareras INTRINSIC. Observera skillnaden mellan
inbyggda och interna underprogram.
intern funktion (internal function)
En funktion som är lokal till en viss programenhet, finnes
efter en CONTAINS sats. Alla variabler i den överordnade
programenheten är direkt tillgängliga. En intern funktion
kan ej användas utanför den direkt överordnade
programenheten. Detta kan vara bra för att undvika
namnkonflikter mellan funktioner och subrutiner från olika
bibliotek. Interna funktioner är generellare än
satsfunktioner. En intern funktion kan ej användas som
argument! Det finns även interna subrutiner.
kapslad (nested)
Inuti en DO-slinga kan finnas ytterligare en DO-slinga
(eller flera), inuti en IF...THEN...ELSE...ENDIF-
konstruktion kan finnas ytterligare en eller flera, samt inuti
en CASE-konstruktion kan finnas ytterligare en eller flera.
Det är naturligtvis även möjligt att till exempel ha
en CASE-konstruktion inne i en DO-slinga.
Ibland kallas även ovan nämnda konstruktioner för slingor.
lokal funktion
Sammanfattning av interna funktioner och
satsfunktioner.
modul (module)
En modul innehåller deklarationer (specifikationer) och
definitioner som skall användas av de andra program-
enheterna. Ersätter BLOCK DATA.
programenhet (program unit)
Sammanfattande namn på huvudprogram,
subrutin, funktion,
modul och BLOCK DATA
programenhet.
rekursiv (recursive)
En funktion eller en subrutin som anropar sig själv
kallas rekursiv, och är tillåten från Fortran 90.
resultat-variabel (result variable)
En funktion anropas med sitt funktionsnamn, som vid
återhoppet innehåller funktionsvärdet. Om funktionen
är rekursiv måste dock en speciell resultat-variabel
användas internt inne i funktionen för att lagra
funktionsvärdet (och skilja det från rekursivt anrop).
Utifrån användes fortfarande det "vanliga" funktionsnamnet.
Resultat-variabeln är praktisk vid en fältvärd funktion,
även om denna ej är rekursiv.
satsfunktion (statement function)
En funktion som är lokal till en viss programenhet, finnes
efter deklarationerna och före de exekverbara satserna.
Mycket enkel form, fanns redan i FORTRAN I.
En generellare form är den interna funktionen efter
CONTAINS. En satsfunktion kan ej användas som
argument!
slinga (loop)
Med slinga avses en följd av satser som upprepas, det
vanligaste fallet är en DO-slinga, men det kan även vara
en IF-sats (aritmetisk eller logisk eller mindre vanligt den
fullständiga IF...THEN...ELSE...ENDIF-
konstruktionen) som orsakar ett återhopp med en GOTO-
sats till en tidigare del av programmet. Ibland kallas även
en CASE- eller en IF...THEN...ELSE...ENDIF-
konstruktion för slinga. Explicita och implicita slingor
diskuteras i avsnitt 7.5 samt i ett enkelt
exempel sist i laboration 2.
subrutin (subroutine)
En programenhet som ej returnerar något funktionsvärde
genom sitt namn och som har ett antal parametrar. Det är
tillåtet att subrutinen ändrar värdet på ett eller
flera av argumenten. En subrutin kan dock ha en annan uppgift,
till exempel att läsa in eller skriva ut data. En subrutin till
skillnad från en funktion har ingen typ. Den anropas med
CALL subrutinnamnet, medan en funktion anropas med bara
funktionsnamnet. I båda fallen tillkommer naturligtvis
eventuella argument.
Senast modifierad: 3 maj 1999
boein@nsc.liu.se