ganze Zahl

Werbung
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
Herunterladen