Appendix 10. Ordförklaringar

A 10.1 Fält

  • 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.

    A 10.2 Övrigt

  • 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
    1. moduler som använder exempelvis egna datatyper,
    2. anrop med nyckelordsargument eller underförstådda argument
    3. egna generiska rutiner
    4. fält med antaget mönster
    5. fält deklarerade med pekare
    6. vid definition av ny betydelse hos en OPERATOR
    7. om avsikt INTENT skall få verkan vid användning av kompilatorn från NAG
    8. vid anrop av en fältfunktion med ett fält som resultat (behövs ej vid inbyggda fältfunktioner)
    9. 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.

    Hög-Prestanda Fortran Innehåll Parameteröverföring


    Senast modifierad: 3 maj 1999
    boein@nsc.liu.se