Statischer Druck (Aufgabe 3) Projektübung Klimamodellierung (05-3034) – A. Paul Literatur • Open University, Oceanography Course Team (1989), Ocean Circulation, pp. 40. – Sections 3.3.1, Pressure Gradients in the Ocean • Der statische Druck p in einer bestimmiten Tiefe z ist die Gewichtskraft, die die Wassersäule auf eine Flächeneinheit ausübt: statischer Druck in der Tiefe z p Masse des darüber liegenden Wassers g . • g: Schwerebeschleunigung • Ist r die Dichte des Meerwassers, dann kann man schreiben: p Volumen des darüber liegenden Wassers r g . • Für den statischen Druck auf eine Flächeneinheit: p r gz . • Mit dem Ursprung der z-Achse an der Meeresoberfläche und positiv nach oben, negativ nach unten: p r gz . • Dies ist die statische Grundgleichung. • Die statische Grundgleichung gilt nur in dieser Form, wenn die Dichte r von der Tiefe unabhängig ist. z 0 Dichte als konstant angenommen oder gemittelt Der Druck p in der Tiefe z ist einfach: Nach Open University Abb. 3.9b p r gz . Druck p • Gewöhnlich verändert sich die Dichte r mit der Tiefe. z 0 Dichte verändert sich stetig mit der Tiefe Schicht der Dicke dz trägt den Druck dp bei Der Druck p in der Tiefe z ist die Summe (S) aller Drücke dp: Nach Open University Abb. 3.9a Druck p p dp g r dz . • Horizontale Druckgradienten setzen den Ozean in Bewegung. Horizontale B A q Dz Dx in allen Tiefen z Dichte als konstant angenommen Nach Open University Abb. 3.10 horizontale Druckgradientenkraft r g tan q . pA r gz . pB r g z Dz . Primzahlen (Aufgabe 2) Projektübung Klimamodellierung (05-3034) – A. Paul Hinweise • Fortran-Tutorial: http://www.fortran.de.vu/ • Die folgenden Folien enthalten alle Bausteine für die Lösung der Aufgabe 2 (Bestimmung der Primzahlen zwischen 2 und N) Aufbau eines Hauptprogramms • Ein Hauptprogramm besteht aus Anweisungen und Kommentaren. – Anweisungen (statements) unterteilt man in: • ausführbare (exectutable) Anweisungen • nichtausführbare (nonexecutable) Anweisungen – Kommentarzeilen beginnen mit “!” Nach: Wehnes, Harald, Strukturierte Programmierung in FORTRAN 77, München 1985. • Reihenfolge der Anweisungen – Einleiten mit PROGRAM-Anweisung – Vereinbarungsteil: Konstanten und Variablen vereinbaren – Aktionsteil – Abschließen mit END PROGRAM-Anweisung • Konstanten (constants) sind Größen, deren Werte während des Programmablaufs nicht verändert werden können. • Variablen können während der Programmausführung verschiedene Werte annehmen. • Man sollte alle Größen durch explizite Typanweisungen vereinbaren. Die Anweisung IMPLICIT NONE erlaubt es, Abweichungen von dieser Regel festzustellen. PROGRAM primzahlen IMPLICIT NONE ! Konstantenvereinbarungen ! Variablenvereinbarungen ! Ausführbare Anweisungen END PROGRAM primzahlen • INTEGER: ganze Zahlen – im Arbeitsspeicher des Computers ohne Dezimalteil abgelegt • REAL: reelle Zahlen – in Gleitpunktdarstellung (mit Mantisse und Exponent) gespeichert • CHARACTER(LEN=n): Zeichenkette der Länge n – darf n Zeichen enthalten Konstantenvereinbarungen ! Konstanten ! output = Dateinummer (unit) für ! Ausgabe ! n = obere Schranke ! für Primzahlsuche INTEGER, PARAMETER :: output=7,n=100000 Die Dateinummern 5 und 6 sind für die Konsole und den Bildschirm reserviert. Variablenvereinbarungen ! Variablen ! i,j = Schleifenvariablen ! m = Zahl der Schleifendurchläufe ! a = Feld (Vektor) mit Primzahlen ! fname = Dateiname INTEGER :: i,j,m INTEGER, DIMENSION(2:n) :: a CHARACTER(LEN=20) :: fname Öffnen und Schließen einer Datei ! Lege die Ausgabedatei an ! und ordne ihr eine Dateinummer zu fname = "primes2.dat" OPEN(UNIT=output,FILE=fname, STATUS="REPLACE") ! Schließe die Ausgabedatei CLOSE (UNIT=output) Weitere ausführbare Anweisungen • "Man schreibe alle Zahlen von 2 bis N auf." ! Initialisierung ! - Definiere ein Feld a ! mit den Elementen 2 bis n. ! - Setze zunächst alle Elemente ! auf 1 (= Primzahl) a(2:n) = 1 • "Ist n2 größer als N, so stoppe man den Prozess." ! ! ! m Setze die Zahl der Schleifendurchläufe auf die ganze Zahl, die der Quadratwurzel aus n am nächsten kommt. = NINT(SQRT(REAL(n))) Schleifen und Verzweigungen • "Man rahme die Zahl 2 ein und streiche dann jede zweite Zahl.„ • "Ist i die erste nicht gestrichene Zahl, so rahme man i ein und streiche dann jede i-te Zahl." DO i=2,m IF (a(i) == 1) THEN j = i + i DO IF (j > n) EXIT a(j) = 0 j = j + i END DO END IF END DO ! m = Zahl der Schleifendurchläufe ! "die erste nicht gestrichene Zahl" ! "streiche dann jede i-te Zahl" ! setze auf 0 (= keine Primzahl) Ausgabe in eine Datei • „Alle eingerahmten bzw. nicht gestrichenen Zahlen sind Primzahlen.“ ! Schreibe die Primzahlen in die Ausgabedatei DO i=2,n IF (a(i) == 1) WRITE (UNIT=output,FMT=*) i END DO