L3 Fortran 95 - Compiler Compiler Aufruf Fortran 95 unter UNIX (z.b. Linux): Der Programmtext stehe in den Dateien (files): meinfixed.f MeinFree.f90 (MeinFree.f95) Die Endung.f steht für das veraltete fixed format. Erzeugen eines ausführbaren Objektes (executable): a.out (Compile+Link) f95 MeinFree.f90 oder f95 meinfixed.f Das Executable soll a.exe heissen: f95 MeinFree.f90 -o a.exe Separates Kompilieren (compile) und Linken (link): f95 -c MeinFree.f90 es entsteht MeinFree.o (nicht ausführbar!) Das Object-file MeinFree.o enthält viele Dinge wie z.b die mathematischen Funktionen (Sinus,..) nicht. Dazu bedarf es des Linkens: f95 MeinFree.f90 -o a.exe Man sieht: f95 ist intelligent. Es merkt ob Programm(e) oder Objekt(e) vorliegt. Dies gilt übrigens auch für Fortran (95) Compiler allgemein, auch wenn sie nicht f95 heissen (ifort, pgf90) 1
L3 Fortran 95 - Compiler Verschiedene Compiler für Fortran 95 Es gibt Programme, die Fortran-Programme umschreiben (eventuell verschönern) Beispiel: fixed in free-format konvertieren. Stand SS 2005: Unter Linux gibt es den NAG-f95 kostengünstig beim LRZ. Der Intel Fortran 95 Compiler ifort (ifc) darf nichtkommerziell kostenfrei (zuhause) genutzt werden. Auf den Rechneren des Leibnitz Rechenzentrums ist ein Fortran 90 Compiler der Portland-Group standardmässig installiert, Compileraufruf pgf90. Unter UNIX erhält man informationen über die verfügbaren Optionen mit dem Kommando man also z.b man f95 Von Compaq gab es das education donation program für das Visual Fortran unter Windows. Dies war eine komfortable Entwicklungsumgebung (mit interaktiver Hilfe), die jetzt (teuer) von HP vertrieben wird. Nicht ganz so elegant, ist die Enwicklungsumgebung von Salford unter www.silverfrost.com 2
(Standard-) Datentypen (1) INTEGER (ganze Zahlen) VOREINSTELLUNG: Variablen und Konstanten die mit IJKLMN (ijklm) beginnen Literale: -32768-0 1000 +12345 7 007 32-bit (üblich): 2 10 9..2 10 9 INTEGER Arithmetik!!! IntegerArithmetik.f90 REAL (Gleitpunktzahl) reelle Zahlen, einfache Genauigkeit VOREINSTELLUNG: implizit alles ausser INTEGER (A-H,O-Z) Lierale: 1. 0.1.1 -.1 5.67E-8 1E12 32-bit: ca. 7 Dezimalstellen gemischte Arithmetik MixedIntegerReal.f90 15/7*3. /= 15./7*3.! 15/(7*3.) /= 15/(7/3.) DOUBLE PRECISION (Gleitpunktzahl) reelle Zahlen, höhere Genauigkeit (sonst wie REAL) Literale: 5.67D-8, 1D12 ca. doppelt so viele Dezimalstellen DoubleInitialisierung.f90 3
(Standard-) Datentypen (2) COMPLEX Real- und Imaginärteil sind Gleitpunktzahlen Literale: (2., 176.824) (1E-11, 5) (0, 0.) (-1E1, 1DO) Zuweisung mit CMPLX: z=cmplx(x,y)! z=x+i*y LOGICAL Literale:.TRUE..FALSE. CHARACTER (Zeichenketten) Eingegrenzt mit " oder PARAMETER (unveränderbare Konstanten) REAL, PARAMETER :: Pi=3.14151 COMPLEX, PARAMETER :: imag1=(0.,1.)! CMPLX leider nicht erlaubt Nur einfache (also keine Felder) Datentypen INTEGER und REAL sind vordefiniert. Sie müssen nicht (unbedingt) deklariert werden. Eine Deklaration überschreibt natürlich die Voreinstellung REAL :: iso, integer, kilometer, GleitZahl INTEGER :: GanzeZahl! ist als INTEGER d e k l a r i e r t 4
Normalfall : REAL Die beiden Formeln für den Dampfdruck: E s = 6.107 10 7.5t 237+t E s = 6.107 exp( 19.83t 273+t ) sollen verglichen werden.! Magnus-formel f"ur Dampfdruck! = N"aherung f"r Clausius Clepeyron-Gleichung! aus F.M"oller: Einf"uhrung in die Meteorologie! Seite 129 (Druckfehler? 237->273) PROGRAM MoellerS129 PRINT*,"Gib positive Temperatur in Celsius ein:" READ*, t E_Magnus=6.107*10**((7.5*t)/(237.+t)) E=6.107*EXP(19.83*t/(273.+t)) PRINT*,"Dampfdruck (mb) nach H.G.Magnus: ",E_Magnus PRINT*,"Dampfdruck (mb) nach Moeller : ",E END PROGRAM MoellerS129 5
Programmierstil: Zwischenvariablen!--------------------------------------------------------------! Magnus-formel f"ur Dampfdruck! = N"aherung f"r Clausius Clepeyron-Gleichung! aus F.M"oller: Einf"uhrung in die Meteorologie! Seite 129 PROGRAM MoellerS129! 2. Version REAL :: nenner,t,exponent, zaehler! Deklaration PRINT*,"Gib positive Temperatur in Celsius ein:" READ*, t zaehler=7.5*t; nenner=237.+t exponent=zaehler/nenner! nenner ist real E_Magnus = 6.107 * 10.**exponent E=6.107*EXP(19.83*t/(273.+t)) PRINT*,"Dampfdruck (mb) nach H.G. Magnus: ",E_Magnus PRINT*,"Dampfdruck (mb) nach Moeller : ",E END PROGRAM MoellerS129 6
Hausaufgabe: Simulation gedämpfter Schwingungen Der zeitliche Verlauf des Stromes I soll entsprechend dem Flussdiagramm berechnet werden. Die Schleife kann z.b mit DO WHILE(t < tmax)...... ENDDO realisiert werden. Wählen Sie t max = 10 s. Bemerkung: µ = 10 6, Anfangswert Q=0.1, das C bedeuted Coulomb (1C=1F 1V), nicht zu verwechseln mit der Kapazität C=200µF Start C L R Herleitung: I, Q, R, L, dt auf Startwert setzen di:= (Q/C+R*I)*dt/L I:=I+dI Q:=Q+I*dt Startwerte: R=200 Ω C=200 µ F L=500 H dt=0.1 s U=500V=>Q=0.1 C I=0 A U c + U R =U L => Q/C+R*I= L*dI/dt => di= (Q/C+R*I)/L*dt t:=t+dt Ausgabe: t, I t < t max ja Ende Zusatzaufgabe 1: Die analytische Lösung für I ist: β = R 2L I = A 0 exp( βt)(β sin(ωt + α 0 ) ω cos(ωt + α 0 )) ω = 1 LC Q 0 β2 A 0 = α 0 = arctan( ω 1 R2 C β ) 4L Drucken sie die analytische Lösung (gegen die numerische). Zusatzaufgabe 2: Zeichnen Sie I als Funktion der Zeit mit einer Graphiksoftware (die etwas liefert was man versenden kann). 7