Lärobok i Fortran 95 (PDF)

Download Lärobok i Fortran 95 (PDF)

Post on 05-Jan-2017

220 views

Category:

Documents

4 download

Embed Size (px)

TRANSCRIPT

<ul><li><p>Lrobok i Fortran 95</p><p>c Bo Einarsson1</p><p>22 oktober 2016</p><p>1Matematiska institutionen, Linkpings Universitet, 581 83 LINKPING</p></li><li><p>2</p></li><li><p>Innehll</p><p>Lista ver tabeller vii</p><p>Frord 1</p><p>1 Ett frsta program i Fortran 95 31.1 Inledning . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31.2 Programlistningen fr programmet KAHAN . . . . . . . . . . . . . 31.3 Krning av programmet KAHAN . . . . . . . . . . . . . . . . . . . 4</p><p>2 Grunder i Fortran 95 62.1 Tillgngliga tecken vid skrivning av program i Fortran 95 . . . . 62.2 Variabler . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 72.3 Deklaration av variabler . . . . . . . . . . . . . . . . . . . . . . . 82.4 Tilldelningar och berkningar . . . . . . . . . . . . . . . . . . . . 92.5 Inbyggda matematiska funktioner . . . . . . . . . . . . . . . . . . 102.6 Kommentarer . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 112.7 Enkel in- och utmatning . . . . . . . . . . . . . . . . . . . . . . . 112.8 Vektorer . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 132.9 Enkla slingor (DO) . . . . . . . . . . . . . . . . . . . . . . . . . . 142.10 Nya slingan (FOR ALL) . . . . . . . . . . . . . . . . . . . . . . . . 172.11 Alternativsatser (IF och CASE) . . . . . . . . . . . . . . . . . . . 182.12 Variabler med startvrden (DATA) . . . . . . . . . . . . . . . . . . 202.13 Konstanter (PARAMETER) . . . . . . . . . . . . . . . . . . . . . . . 212.14 Funktioner . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 212.15 Subrutiner . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 242.16 Prioritetsregler . . . . . . . . . . . . . . . . . . . . . . . . . . . . 262.17 Sammanfattning . . . . . . . . . . . . . . . . . . . . . . . . . . . 27</p><p>3 Flt 283.1 verfring av flt med Fortran 77 . . . . . . . . . . . . . . . . . 30</p><p>3.1.1 Fix dimensionering . . . . . . . . . . . . . . . . . . . . . . 303.1.2 Variabel dimensionering i subrutinen med justerbart flt . 313.1.3 Frenklad variabel dimensionering i subrutinen . . . . . . 313.1.4 Variabel verdimensionering i subrutinen . . . . . . . . 323.1.5 verdimensionering i huvudprogrammet . . . . . . . . . 33</p><p>3.2 verfring av flt med Fortran 90 . . . . . . . . . . . . . . . . . 353.2.1 Automatiskt flt . . . . . . . . . . . . . . . . . . . . . . . 353.2.2 Antaget mnster hos ett flt . . . . . . . . . . . . . . . . 35</p><p>i</p></li><li><p>ii INNEHLL</p><p>3.3 Dynamisk minneshantering . . . . . . . . . . . . . . . . . . . . . 363.3.1 Allokerbart flt . . . . . . . . . . . . . . . . . . . . . . . . 363.3.2 Allokering av flt med pekare . . . . . . . . . . . . . . . . 37</p><p>3.4 Fltoperationer . . . . . . . . . . . . . . . . . . . . . . . . . . . . 393.4.1 Enkla fltoperationer . . . . . . . . . . . . . . . . . . . . . 40</p><p>4 Funktioner och subrutiner 424.1 Inbyggda funktioner och subrutiner . . . . . . . . . . . . . . . . . 42</p><p>4.1.1 Funktioner . . . . . . . . . . . . . . . . . . . . . . . . . . 424.1.2 Subrutiner . . . . . . . . . . . . . . . . . . . . . . . . . . 43</p><p>4.2 Externa funktioner . . . . . . . . . . . . . . . . . . . . . . . . . . 434.2.1 Funktioner . . . . . . . . . . . . . . . . . . . . . . . . . . 43</p><p>Funktioner som argument . . . . . . . . . . . . . . . . . . 43Funktioner utan argument . . . . . . . . . . . . . . . . . . 45Rekursiva funktioner . . . . . . . . . . . . . . . . . . . . . 45Fltvrda funktioner . . . . . . . . . . . . . . . . . . . . . 47Avsikten hos olika funktionsargument . . . . . . . . . . . 48Frivilliga argument och argument utnyttjande nyckelord . 49Generiska funktioner . . . . . . . . . . . . . . . . . . . . . 51</p><p>4.2.2 Subrutiner . . . . . . . . . . . . . . . . . . . . . . . . . . 534.3 Lokala funktioner . . . . . . . . . . . . . . . . . . . . . . . . . . . 53</p><p>4.3.1 Satsfunktioner . . . . . . . . . . . . . . . . . . . . . . . . 534.3.2 Interna funktioner och subrutiner . . . . . . . . . . . . . . 54</p><p>5 Text (CHARACTER) 565.1 Nutida texthantering . . . . . . . . . . . . . . . . . . . . . . . . . 565.2 Inbyggda funktioner . . . . . . . . . . . . . . . . . . . . . . . . . 575.3 Forntida texthantering . . . . . . . . . . . . . . . . . . . . . . . . 595.4 Ngra in- och utmatningsproblem . . . . . . . . . . . . . . . . . . 605.5 Textstrngar med variabel lngd . . . . . . . . . . . . . . . . . . 60</p><p>6 Avancerad in- och utmatning (FORMAT) 616.1 Formatstyrd utmatning . . . . . . . . . . . . . . . . . . . . . . . 626.2 Styrtecken . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 636.3 Liststyrd utmatning . . . . . . . . . . . . . . . . . . . . . . . . . 646.4 Oformaterad utmatning . . . . . . . . . . . . . . . . . . . . . . . 646.5 Formaterad utmatning av flt . . . . . . . . . . . . . . . . . . . . 656.6 Avancerad inmatning . . . . . . . . . . . . . . . . . . . . . . . . . 67</p><p>6.6.1 Formatstyrd inmatning . . . . . . . . . . . . . . . . . . . 676.6.2 Liststyrd inmatning . . . . . . . . . . . . . . . . . . . . . 68</p><p>6.7 Diverse in- och utmatning . . . . . . . . . . . . . . . . . . . . . . 69</p><p>7 Filer 727.1 Externa filer . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 72</p><p>7.1.1 Vanliga filer . . . . . . . . . . . . . . . . . . . . . . . . . . 73Kommandot OPEN . . . . . . . . . . . . . . . . . . . . . . 73Kommandot INQUIRE fr filer och filnamn . . . . . . . . . 75Kommandot INQUIRE fr list-lngd . . . . . . . . . . . . . 77</p><p>7.1.2 Direktaccess-filer . . . . . . . . . . . . . . . . . . . . . . . 777.2 Interna filer . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 79</p></li><li><p>INNEHLL iii</p><p>8 Formen hos ett Fortran-program 828.1 Fix form . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 828.2 Fri form . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 828.3 Fortsttningsrader . . . . . . . . . . . . . . . . . . . . . . . . . . 838.4 Kommentarer . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 848.5 Gemensam form . . . . . . . . . . . . . . . . . . . . . . . . . . . 84</p><p>9 Ytterligare datatyper 869.1 Komplexa tal (COMPLEX) . . . . . . . . . . . . . . . . . . . . . . . 869.2 Dubbel precision (DOUBLE PRECISION) . . . . . . . . . . . . . . . 879.3 Det nya precisionsbegreppet . . . . . . . . . . . . . . . . . . . . . 899.4 Olika precision eller slag (KIND) . . . . . . . . . . . . . . . . . . . 909.5 Flera precisioner med kompileringskommandon . . . . . . . . . . 919.6 Flera precisioner p en gng . . . . . . . . . . . . . . . . . . . . . 929.7 Egna datatyper . . . . . . . . . . . . . . . . . . . . . . . . . . . . 94</p><p>10 Avancerade subrutiner och funktioner 9610.1 Avsikt (INTENT) . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9610.2 Grnssnitt (INTERFACE) . . . . . . . . . . . . . . . . . . . . . . . 9710.3 Satsfunktioner . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9710.4 Interna funktioner . . . . . . . . . . . . . . . . . . . . . . . . . . 9810.5 De nya inbyggda funktionerna . . . . . . . . . . . . . . . . . . . . 9810.6 Rekursiva funktioner . . . . . . . . . . . . . . . . . . . . . . . . . 9810.7 Underfrstdda argument . . . . . . . . . . . . . . . . . . . . . . 98</p><p>11 Pekare 10011.1 Enkla pekare . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10111.2 Pekare och flt . . . . . . . . . . . . . . . . . . . . . . . . . . . . 102</p><p>12 Diverse begrepp frn Fortran 77 10412.1 COMMON . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10412.2 EQUIVALENCE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10712.3 SAVE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 108</p><p>13 Program-uppbyggnad 10913.1 Huvudprogram . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11013.2 Subrutiner . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11013.3 Funktioner . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11113.4 Moduler . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 111</p><p>13.4.1 Enkelt exempel p modul . . . . . . . . . . . . . . . . . . 11113.4.2 Intervallaritmetik . . . . . . . . . . . . . . . . . . . . . . . 11313.4.3 Modul fr standardparametrar . . . . . . . . . . . . . . . 11513.4.4 Diverse om moduler . . . . . . . . . . . . . . . . . . . . . 116</p><p>13.5 BLOCK DATA programenheter . . . . . . . . . . . . . . . . . . . . . 11613.6 INCLUDE satsen . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11713.7 Ordningen mellan satser . . . . . . . . . . . . . . . . . . . . . . . 117</p></li><li><p>iv INNEHLL</p><p>14 Inkompatibilitetsproblem 11914.1 Inkompatibilitet mellan olika Fortran 90 implementationer . . . . 11914.2 Skillnad i behandling av logiska variabler . . . . . . . . . . . . . 12014.3 Sm saker av stor betydelse . . . . . . . . . . . . . . . . . . . . . 12014.4 Undertryckning av radframmatning . . . . . . . . . . . . . . . . . 12014.5 Varierande system fr matriser . . . . . . . . . . . . . . . . . . . 12114.6 Deklarationer . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12114.7 Bakt- och framtkompatibilitet . . . . . . . . . . . . . . . . . . 121</p><p>14.7.1 Borttaget ur Fortran 95 . . . . . . . . . . . . . . . . . . . 12214.7.2 Borttaget ur Fortran 2003 . . . . . . . . . . . . . . . . . . 12314.7.3 Frldrade begrepp . . . . . . . . . . . . . . . . . . . . . 123</p><p>14.8 Skillnader mellan olika Fortran-standarder . . . . . . . . . . . . . 12314.9 Systemparametrar . . . . . . . . . . . . . . . . . . . . . . . . . . 125</p><p>14.9.1 Vanliga IEEE 754 system . . . . . . . . . . . . . . . . . . 12514.9.2 SGI 3000 . . . . . . . . . . . . . . . . . . . . . . . . . . . 126</p><p>15 Felskning 12815.1 Datafldesanalys . . . . . . . . . . . . . . . . . . . . . . . . . . . 12815.2 Avlusare . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13115.3 Felskningstips . . . . . . . . . . . . . . . . . . . . . . . . . . . . 132</p><p>15.3.1 Fel som visar sig vid kompileringen . . . . . . . . . . . . . 13215.3.2 Fel som visar sig vid exekveringen . . . . . . . . . . . . . 13315.3.3 Fel som visar sig i resultatet . . . . . . . . . . . . . . . . . 13315.3.4 Fel som inte visar sig . . . . . . . . . . . . . . . . . . . . . 133</p><p>15.4 Underligheter i sprket Fortran 95 . . . . . . . . . . . . . . . . . 134</p><p>16 Optimering 13516.1 Slingor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13616.2 Utmatning av hela flt . . . . . . . . . . . . . . . . . . . . . . . . 14016.3 Formaterat eller oformaterat? . . . . . . . . . . . . . . . . . . . . 143</p><p>17 Fortran 2003 14517.1 Nya egenskaper . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14517.2 Val av decimalpunkt eller decimalkomma . . . . . . . . . . . . . 14617.3 Samverkan med sprket C . . . . . . . . . . . . . . . . . . . . . . 147</p><p>17.3.1 Anvndning av ett Fortran underprogram frn C . . . . . 14817.3.2 Anvndning frn Fortran av en C-matris . . . . . . . . . . 15017.3.3 Anvndning av Fortran COMMON i ett C-program . . . . . . 15117.3.4 Andra metoder fr att blanda Fortran och C . . . . . . . 153</p><p>17.4 Std fr IEEE 754 . . . . . . . . . . . . . . . . . . . . . . . . . . 153</p><p>18 Fortran 2008 15518.1 Nya egenskaper i Fortran 2008 . . . . . . . . . . . . . . . . . . . 155</p><p>A Nyheterna i kommande Fortran 156A.1 Eventuella egenskaper i nsta version . . . . . . . . . . . . . . . . 156</p></li><li><p>INNEHLL v</p><p>B Sammanstllning ver Fortran 77 satser 158B.1 Deklarationer av programenheter . . . . . . . . . . . . . . . . . . 158B.2 Deklarationer av variabler . . . . . . . . . . . . . . . . . . . . . . 158B.3 Ytterligare specifikationer . . . . . . . . . . . . . . . . . . . . . . 159B.4 Exekverbara hoppsatser . . . . . . . . . . . . . . . . . . . . . . . 159B.5 Exekverbara andra satser . . . . . . . . . . . . . . . . . . . . . . 160B.6 In/utmatningssatser . . . . . . . . . . . . . . . . . . . . . . . . . 161B.7 Anropssatser . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 161B.8 FORMAT-bokstverna . . . . . . . . . . . . . . . . . . . . . . . . 161</p><p>B.8.1 Behandling av tecken och blanka . . . . . . . . . . . . . . 162B.8.2 Skalning av variabler . . . . . . . . . . . . . . . . . . . . . 162B.8.3 Tillgg i Fortran 90 betrffande FORMAT . . . . . . . . . . 163B.8.4 Tillgg i Fortran 95 betrffande minimalt flt . . . . . . . 163</p><p>C De nya satserna i Fortran 95 164C.1 Kllkoden . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 164C.2 Alternativa representationer . . . . . . . . . . . . . . . . . . . . . 164C.3 Specifikationer . . . . . . . . . . . . . . . . . . . . . . . . . . . . 165C.4 Villkorssatser . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 165C.5 DO-slinga . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 166C.6 Programenheter . . . . . . . . . . . . . . . . . . . . . . . . . . . . 167C.7 Textstrngsvariabler . . . . . . . . . . . . . . . . . . . . . . . . . 167C.8 Inmatning . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 168C.9 Vektor- och matrishantering . . . . . . . . . . . . . . . . . . . . . 168C.10 Dynamisk minneshantering . . . . . . . . . . . . . . . . . . . . . 169C.11 Inbyggda funktioner . . . . . . . . . . . . . . . . . . . . . . . . . 170C.12 Egna datatyper . . . . . . . . . . . . . . . . . . . . . . . . . . . . 170C.13 Moduler . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 170C.14 Datatypen bit . . . . . . . . . . . . . . . . . . . . . . . . . . . . 171C.15 Pekare . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 171C.16 Egna utvidgningar . . . . . . . . . . . . . . . . . . . . . . . . . . 171</p><p>D Genomgng av hela sprket Fortran 95 172D.1 Teckenkombinationer . . . . . . . . . . . . . . . . . . . . . . . . . 172D.2 Datatyper . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 173D.3 Deklarationer . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 173D.4 Initieringar . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 174D.5 Implicita deklarationer . . . . . . . . . . . . . . . . . . . . . . . . 175D.6 Speciella specifikationer . . . . . . . . . . . . . . . . . . . . . . . 175D.7 Allokeringssatser . . . . . . . . . . . . . . . . . . . . . . . . . . . 176D.8 Tilldelningar . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 177D.9 Exekveringskontroll . . . . . . . . . . . . . . . . . . . . . . . . . . 177D.10 Programenheter . . . . . . . . . . . . . . . . . . . . . . . . . . . . 182D.11 In- och utmatning . . . . . . . . . . . . . . . . . . . . . . . . . . 186</p><p>E Inbyggda funktioner och subrutiner 187E.1 Funktion som undersker om ett visst argument finns . . . . . . 187E.2 Numeriska funktioner . . . . . . . . . . . . . . . . . . . . . . . . 187E.3 Matematiska funktioner . . . . . . . . . . . . . . . . . . . . . . . 190E.4 Textstrngsfunktioner . . . . . . . . . . . . . . . . . . . . . . . . 192</p></li><li><p>vi INNEHLL</p><p>E.5 Textstrngsfunktion fr frfrgan . . . . . . . . . . . . . . . . . . 193E.6 Slagsfunktioner . . . . . . . . . . . . . . . . . . . . . . . . . . . . 193E.7 Logisk funktion . . . . . . . . . . . . . . . . . . . . . . . . . . . . 194E.8 Numeriska frfrgningsfunktioner . . . . . . . . . . . . . . . . . . 194E.9 Bitfrfrgningsfunktion . . . . . . . . . . . . . . . . . . . . . . . 194E.10 Bitmanipuleringsfunk...</p></li></ul>

Recommended

View more >