Vorlesungsfolien

Transcrição

Vorlesungsfolien
Wissenschaftliches Programmieren
Bálint Aradi
http://www.bccms.uni-bremen.de/cms/people/b_aradi/
1. Einführung, lokale Rechnerumgebung, Editor, Compiler
Allgemeines
Wissenschaftliches Programmieren = Umsetzung numerischer Algorithmen in
eine Programmiersprache, um wissenschaftliche Probleme zu lösen.
●
Modell aufstellen
●
Numerischen Algorithmus auswählen
●
●
Grobe Programmstruktur planen
Schnittstellen (interfaces) festlegen
●
Programmieren
●
Testen
●
Dokumentieren
●
Weiterenwickeln, wiederverwenden
Korrektheit
Numerische Stabilität
Genaue Diskretisierung
(Fehlerabschätzung!)
Flexibilität
Effizienz (Geschwindigkeit, Speicher)
Einige berühmte numerische Katastrophen:
http://www.ima.umn.edu/~arnold/disasters/disasters.html
S
B
S
C
C
C
M
Bremen Center for
Computational Materials Science
Wissenschaftliches Programmieren, SS2015 (1/2)
http://www.bccms.uni-bremen.de
Thematik
●
Einführung, lokale Rechnerumgebung, Editor, Compiler
●
Grundlegende Datentypen, if-Abfrage, Schleifen
●
Arrays, dynamische Speicherallokierung
●
Input/Output (stdin/stdout, externe Dateien)
●
Unterprogramme, Funktionen, Rekursion, Module, „data hiding“
●
Linken von Objektdateien, Abhängigkeiten, Makefiles
●
Zusammengesetzte Typen (derived types), Überladen von Funktionen
●
Versionsverwaltung
●
Testen von Programmen
●
Verwendung externer Bibliotheken (BLAS, LAPACK)
●
Schnittstellendokumentation, Quellcodedokumentation
●
Codeoptimierung (profiling), Fehlersuche (debugging)
●
Paralleles Programmieren
S
B
S
C
C
C
M
Bremen Center for
Computational Materials Science
Wissenschaftliches Programmieren, SS2015 (1/3)
http://www.bccms.uni-bremen.de
Literatur
Verwendete Literatur:
●
Modern Fortran explained (M. Metcalf, J. Reid, M. Cohen, Oxford Univ. Press, 2012)
●
Writing Scientific Software (S. Olilveira, D. Stewart, Cambridge Univ. Press, 2006)
●
Numerical recipes (W. H. Press et al., Cambridge Univ. Press, 2007)
Nur für die numerischen Algorithmen, auf keinen Fall um Fortran zu erlernen!
Fortran 95/2003 for scientists and engineers (S. J. Chapman, McGraw Hill, 2007)
●
●
Fortran 90 Vorlesung an der Universität Bayreuth
http://www.rz.uni-bayreuth.de/lehre/fortran
90/
Vorlesungsfolien von der Webseite der Veranstaltung herunterladbar:
http://www.bccms.uni-bremen.de/cms/people/b_aradi/wissen_progr/download
●
Dokumentation der verwendeten Tools im Internet
●
Newsgroups (z.B. comp.lang.fortran, stackoverflow)
S
B
S
C
C
C
M
Bremen Center for
Computational Materials Science
Wissenschaftliches Programmieren, SS2015 (1/4)
http://www.bccms.uni-bremen.de
Organisatorsiches
Ablauf:
●
ca. 45-60 Minuten Vorlesung
●
2 Stunden anschließende Übung
●
Nacharbeitung zu Hause (Übungen bauen aufeinander auf!)
Vergabe von Kreditpunkten:
Wissenschaftliches Programmierprojekt (jeweils 2 Personen)
●
B
Projektspezifikation in der 10. Vorlesungswoche
●
Modularer Aufbau
●
Makefile
●
Benutzung externer Bibliotheken
●
Dokumentation (Quellcode, Schnittstellen, Benutzerdokumentation)
●
Tests
●
Abgegeben wird ein Repository (mit Versionsgeschichte)!
●
Auswertungsgespräch
2 Wochen nach der Abgabe
S
S
C
C
C
M
Bremen Center for
Computational Materials Science
Wissenschaftliches Programmieren, SS2015 (1/5)
http://www.bccms.uni-bremen.de
Warum Fortran?
Vorteile:
●
Compilierte Sprache (Geschwindigkeit bei wissenschaftlichen Projekten oft kritisch)
●
Wird für wissenschaftliche Programmierprojekte immer noch bevorzugt eingesetzt
●
Multidimensionale Arrays sind Bestandteil der Sprache, Arraynotation sehr effizient
●
Komplexe Zahl intrinsischer Datentyp
●
Schnell erlernbar
Nachteile:
●
Community nicht so groß, wie z.B. bei C oder C++
●
Compilerentwicklung entsprechend langsam
●
●
vernünftige Fortran 2003 Compiler erst jetzt (2013) zugänglich, Fortran 2008?
Tools (IDE, Debugger, etc) nicht so ausgereift wie in anderen Sprachen
Ein Paar nützliche Sprachelemente fehlen:
●
●
B
Templates,
mehrfache Vererbung oder Java-Interfaces
S
S
C
C
C
M
Bremen Center for
Computational Materials Science
Wissenschaftliches Programmieren, SS2015 (1/6)
http://www.bccms.uni-bremen.de
Warum Fortran?
Interessante Diskussion über Fortran:
●
Petition to retire Fortran:
http://www.fortranstatement.com/cgi-bin/petition.pl
Antwort (NASA-Mitarbeiter): http://www.fortranstatement.com/Site/responses.html
S
B
S
C
C
C
M
Bremen Center for
Computational Materials Science
Wissenschaftliches Programmieren, SS2015 (1/7)
http://www.bccms.uni-bremen.de
Geschichte von Fortran
●
●
Urzeiten der Computer: oktale Kodierung, später Assembler
Entwurf: 1953, John. W. Backus, IBM
Fortran = FORmula TRANslation
(erste jemals tatsächlich realisierte höhere Programmiersprache!)
●
Erstes lauffähiges Fortranprogramm: 1954
●
Frühere Versionen: Fortran I, Fortran II, Fortran-66 (1. standardisierte Sprache)
●
●
●
Fortran-77 (1978)
Unterprogramme, Schleifen, if-Abfragen etc. /Lochkartenformat!/
Fortran 90 (1991)
Freies Quellcodeformat, Zusammengesetzte Typen
Fortran 95 (1997)
Kleine Korrekturen des Fortran-90-Standards
Fortran 2003 (2004)
Unterstützt objektorientiertes Programmieren, C-Interkompatibilität
●
Fortran 2008 (2009)
S Programmieren via Coarrays
Paralleles
●
B
S
C
C
C
M
Bremen Center for
Computational Materials Science
●
Fortran 201X (?)
Verbesserte C-Kompatibilität
Wissenschaftliches Programmieren, SS2015 (1/8)
http://www.bccms.uni-bremen.de
Warum Linux?
Vorteile:
●
Die meisten wissenschaftliche Simulationen in Unix-Umgebung (Queue-System)
●
Sehr nützliche (meistens nicht graphische) Tools (grep, sed, awk, etc..)
●
Kostenlos
●
Community-Unterstützung exzelent
Nachteile:
●
Graphische Tools nicht immer so benutzerfreundlich wie unter Windows.
S
B
S
C
C
C
M
Bremen Center for
Computational Materials Science
Wissenschaftliches Programmieren, SS2015 (1/9)
http://www.bccms.uni-bremen.de
Unix / Linux / Kubuntu Crashkurs
Graphischer Dateimanager
K/Favorites/File Manager
●
●
●
Eigene Dateien in sog.
Home-Verzeichnis
Kopieren, Umbenennen, etc. wie
unter Windows (Drag & Drop)
●
●
Dateien in Baum stukturiert
(Verzeichnisbaum)
In KDE4 (Windowmanager) gibt es mit den Standardeinstellungen keinen Doppelklick!
Einfach Klicken: Datei ausführen / Wechseln ins Verzeichnis
Datei wird über + (-) Zeichen links oben selektiert (deselektiert)
S
B
S
C
C
C
M
Bremen Center for
Computational Materials Science
Kann aber unter
K/System Setting/Keyboard & Mouse/Mouse
umgestellt werden
Wissenschaftliches Programmieren, SS2015 (1/10)
http://www.bccms.uni-bremen.de
Unix / Linux / Kubuntu Crashkurs
●
Wir werden meistens im Kommandofenster arbeiten und Befehle eintippen.
K / Applications / System / Terminal
●
Home-Verzeichnis: /home/poolXY/USERNAME (/home/pool02/wp102)
●
Home-Verzeichnis kann in den Unix-Befehlen mit ~ (Tilde) abgekürzt werden
S
B
S
C
C
C
M
Bremen Center for
Computational Materials Science
Wissenschaftliches Programmieren, SS2015 (1/11)
http://www.bccms.uni-bremen.de
Unix / Linux / Kubuntu Crashkurs
Einige Unix-Befehle:
pwd
Aktuelles Verzeichnis angeben (print working directory)
ls
Dateien im aktuellen Verzeichnis auflisten (liSt)
cd dir
Ins Verzeichnis dir wechseln (change directory)
cd ..
Eine Verzeichnisebene höher wechseln
cp source dest
Eine Kopie von source nach dest anlegen (copy)
mv source dest
Die Datei source zu dest umbenennen (move)
rm file
Die Datei file löschen (remove)
rmdir dir
Das leere Verzeichnis dir löschen (remove directory)
man command
Beschreibung von command (manual) z.B.: man cp
(Blättern: Leerzeichen, Zurück: b, Ausstieg: q)
S
B
S
C
C
C
M
Bremen Center for
Computational Materials Science
Wissenschaftliches Programmieren, SS2015 (1/12)
http://www.bccms.uni-bremen.de
Unix / Linux / Kubuntu Crashkurs
Bemerkungen:
●
Befehl wird ausgeführt, wenn [ENTER] gedrückt wird
●
Dateityp wird bei ls durch Farbe angezeigt:
Normale Dateien: weiß
Verzeichnisse:
●
blau
Unix ist ein Betriebssystem für Leute, die wissen was sie tun:
Löschen und Überschreiben sind unwiderruflich!
S
B
S
C
C
C
M
Bitte zuerst DENKEN und dann
[ENTER] drücken
Bremen Center for
Computational Materials Science
Wissenschaftliches Programmieren, SS2015 (1/13)
http://www.bccms.uni-bremen.de
Ihr persönliches Linux/Unix
●
Ihr Account hier im BCCMS-Poolraum (Sie können sich nur von hier einloggen!)
Windows-User:
● Sie können (sollten!) Linux/Unix an Ihrem Laptop ausprobieren:
●
●
●
●
Live-ISO Image von der Webseite der Veranstaltung herunterladen
Mit dem Programm „UNETBOOTIN“ können Sie mit diesem Image einen
bootbaren USB-Stick erstellen. Stellen Sie dabei ein Paar MB (z.B. 50) für
den Dateibereich ein, der zwischen Reboots erhalten werden soll:
Space used to preserve files across reboots
Booten Sie Ihr Laptop vom USB-Stick
Sie können selbstverständlich Linux auch dauerhaft (neben Windows)
installieren. (Distribution: egal, wir benutzen hier Kubuntu).
Mac-User:
Sie haben schon Unix (BSD) auf Ihrem Laptop. Versuchen Sie die
Programme, die wir hier verwenden, zu installieren.
●
S
B
S
C
C
C
M
Bremen Center for
Computational Materials Science
Wissenschaftliches Programmieren, SS2015 (1/14)
http://www.bccms.uni-bremen.de
Emacs 23
●
Textdateien (Quellcode unserer Programme) werden wir mit dem Editor
Emacs erstellen und bearbeiten
K / Development / Text Editor (GNU Emacs 23)
Menüs
Texteingabe
Statuszeile
Kommandozeile (minibuffer)
S
B
S
C
C
C
M
Bremen Center for
Computational Materials Science
Wissenschaftliches Programmieren, SS2015 (1/15)
http://www.bccms.uni-bremen.de
Emacs 23
Neue Datei erstellen: File / Visit New File …
●
Verzeichnis auswählen
Dateinamen eingeben
Datei erzeugen
●
●
Existierende Datei öffnen: File / Open File
oder Ctrl-X Ctrl-F (Zwei Tastenkombinationen nacheinander)
Datei Speichern: File / Save
oder Ctrl-X Ctrl-S
S
B
S
C
C
C
M
Bremen Center for
Computational Materials Science
Wissenschaftliches Programmieren, SS2015 (1/16)
http://www.bccms.uni-bremen.de
Emacs 23
Eingegebener Text (Wenn Buchstaben zu groß: oder zu klein
Options / Set default font
Options / Save options)
Datei geändert seit letzter Speicherung
Aktuelle Zeile
Kodierung
Position in der Datei
(UTF-8)
(All – alles sichtbar)
Dateiname
(muss aufS .f90 enden!)
B
S
C
C
C
M
Bremen Center for
Computational Materials Science
Eingabemodus
●
Fortran 90
●
Abkürzungen werden aufgelöst
●
Automatischer Zeilenumbruch
Wissenschaftliches Programmieren, SS2015 (1/17)
http://www.bccms.uni-bremen.de
Emacs 23
Tutorial Help / Emacs Tutorial oder Ctrl-H t
Bitte Tutorial unbedingt durchüben!
(man arbeitet wesentlich schneller, wenn man sich im Editor nicht völlig verloren fühlt!)
S
B
S
C
C
C
M
Bremen Center for
Computational Materials Science
Wissenschaftliches Programmieren, SS2015 (1/18)
http://www.bccms.uni-bremen.de
Erster Fortrancode
hello_world.f90:
! The hello world program
program hello_world
implicit none
Block
write(*,*) "Hello World!"
Kommentar
Programmname
String
end program hello_world
Outputdatei, Outputformat
Befehle
Inhalt eines Blockes sollte zwecks Lesbarkeit immer entsprechend
(z.B: mit 2 Leerzeichen) eingerückt werden!
S
B
S
C
C
C
M
Bremen Center for
Computational Materials Science
Wissenschaftliches Programmieren, SS2015 (1/19)
http://www.bccms.uni-bremen.de
Abkürzungen für Emacs
Siehe Datei: /usr/local/share/init-emacs-fortran/.emacs_abbrevs
pm$ wird zum program ergänzt
Um diese zu benutzen, führen Sie init-emacs-fortran
im Kommandofenster aus. Dann Emacs neu starten.
Wenn Sie eigenes Linux verwenden, laden Sie die entsprechenden
Dateien von der Webseite herunter, entpacken Sie sie und kopieren Sie
diese in Ihr HOME-Verzeichnis (~).
S
B
S
C
C
C
M
Bremen Center for
Computational Materials Science
Wissenschaftliches Programmieren, SS2015 (1/20)
http://www.bccms.uni-bremen.de
Ersten Fortrancode eingeben
hello_world.f90:
program hello_world
implicit none
write(*,*) "Hello World!"
end program hello_world
Eintippen:
pm$ hello_world[ENTER]
im$[ENTER]
[ENTER]
wr$(*,*) "Hello World!"[ENTER]
[ENTER]
end[ENTER]
Mit Abkürzung, automatischer Einrückung
und Vervollständigung:
50 statt 90 Tastenschläge
Hinweise:
● [ENTER] wurde umdefiniert:
Zur Ende der Zeile, Umbruch, neue Zeile einrücken
●
●
Wenn irgendwo in der Zeile Umbruch nötig ist:
Ctrl-J
Manuelles Einrücken: [TAB] (die Taste links mit den zwei horizontalen Pfeilen)
S
B
S
C
C
C
M
Bremen Center for
Computational Materials Science
Wissenschaftliches Programmieren, SS2015 (1/21)
http://www.bccms.uni-bremen.de
Ersten Fortrancode compileren und ausführen
Compilieren:
●
Im Kommandofenster in das Verzeichnis mit dem Quellcode wechseln
cd ~/work/hello1
●
Quellcode mit dem Fortrancompiler in binäre ausführbare Datei umwandeln
gfortran -o hello_world hello_world.f90
Argument(e)
(welche Dateien sollen bearbeitet werden)
Option(en) (verändert Programmverhalten, optional)
Befehl (Name des Programmes)
●
Wenn keine (Fehler)Meldung: alles OK
Wenn Fehlermeldung:
sorgfältig lesen, Code korrigieren
Optionen werden mit „-“ eingeleitet
Optionen erwarten oft einen Wert
-o Dateiname
Setze Namen des ausführbaren
Programmes auf Dateiname
(Default: a.out)
Ausführen:
./hello_world
S
B
S
C
C
C
M
Programm im aktuellen Verzeichnis mit Namen „hello_world“ ausführen
Bremen Center for
Computational Materials Science
Wissenschaftliches Programmieren, SS2015 (1/22)
http://www.bccms.uni-bremen.de
Zweiter Fortrancode
! Personalized version of the hello world program
Variablendeklaration
program hello_person
implicit none
Zeilenumbruch (funktioniert
auch innerhalb von Strings)
character(len=10) :: name
write (*,*) "Please enter your name:"
read (*,*) name
write (*,*) "Hel&
&lo ", trim(name) // "!"
Stringverkettung
end program hello_person
Bemerkungen:
●
Maximale Zeilenlänge: (wegen Lesbarkeit, bitte nur max. 80 Charaktere!)
●
Zeilenumbruch mit „&“ markiert (Anfang, Ende), Leerzeichen dazwischen ignoriert
●
Emacs: Zeilenumbruch mit Fortsetzungszeichen: Ctrl-C [Enter]
●
Kommentare werden mit Rufzeichen (!) eingeleitet
S
B
S
C
C
C
M
Bremen Center for
Computational Materials Science
Wissenschaftliches Programmieren, SS2015 (1/23)
http://www.bccms.uni-bremen.de
Aufgaben
Ia. Legen Sie in Ihrem HOME-Verzeichnis ein Unterverzeichnis work an.
cd ~
mkdir ~/work
Ib. Erstellen Sie ein Untervezeichnis hello1 unter work.
cd work
mkdir hello1
Ic. Erstellen Sie die Datei hello_world.f90 im Verzeichnis ~/work/hello1 mit Emacs
und tippen Sie das erste Fortranbeispiel ein. Vergessen Sie nicht, die Datei
zu speichern.
Id. Compilieren Sie das Fortranprogramm hello_world.f90 und führen Sie es aus!
Ie. Erstellen Sie das Verzeichnis ~/work/hello2.
Kopieren Sie die Datei ~/work/hello1/hello_world.f90 in dieses Verzeichnis.
cp ~/work/hello1/hello_world.f90 ~/work/hello2/
Nennen Sie die Datei in hello_person.f90 um.
cd ~/work/hello2
mv Shello_world.f90 hello_person.f90
B
S
C
C
C
M
Bremen Center for
Computational Materials Science
Wissenschaftliches Programmieren, SS2015 (1/24)
http://www.bccms.uni-bremen.de
Aufgaben
If. Öffnen Sie hello_person.f90 mit Emacs, und verändern Sie die Datei
entsprechend dem zweiten Fortran-Beispielprogramm.
Ig. Compilieren Sie das Programm, und führen Sie es aus.
Ih. Beantworten Sie folgende Fragen/Probleme:
Was passiert, wenn ein Name länger als 10 Charaktere eingegeben wird?
Was passiert, wenn der eingegebene Input Leerzeichen enthält?
Was passiert, wenn statt trim(name), nur name nach dem Write-Befehl
steht?
II. Arbeiten Sie das Emacs-Tutorial durch!
III Installieren Sie Linux auf Ihr Computer/Laptop.
S
B
S
C
C
C
M
Bremen Center for
Computational Materials Science
Wissenschaftliches Programmieren, SS2015 (1/25)
http://www.bccms.uni-bremen.de
Bevor Sie starten
●
Um die Emacs-Einstellungen optimal für Fortran einzustellen, bitte ausführen:
init-emacs-fortran
●
Wenn Sie eigene Linuxdistribution verwenden:
●
Initialisierungsarchiv von der Webseite der Veranstaltung herunterladen
●
Auspacken
●
Dateien .emacs und .emacs_abbrevs in das HOME-Verzeichnis kopieren.
S
B
S
C
C
C
M
Bremen Center for
Computational Materials Science
Wissenschaftliches Programmieren, SS2015 (1/26)
http://www.bccms.uni-bremen.de