Upload
others
View
9
Download
1
Embed Size (px)
Citation preview
Wissenschaftliches ProgrammierenWissenschaftliches Programmieren
1. Einführung, lokale Rechnerumgebung, Editor, Compiler
Bálint Aradihttp://www.bccms.uni-bremen.de/cms/people/b-aradi/
CB
S
CWissenschaftliches Programmieren, SS2017 (1/2)Bremen Center for
Computational Materials ScienceMC S
http://www.bccms.uni-bremen.de
AllgemeinesAllgemeines
Wissenschaftliches Programmieren = Umsetzung numerischer Algorithmen in eine Programmiersprache, um wissenschaftliche Probleme zu lösen.
Korrektheit
Numerische Stabilität
Genaue Diskretisierung(Fehlerabschätzung!)
Flexibilität
Effizienz (Geschwindigkeit, Speicher)
● Modell aufstellen
● Numerischen Algorithmus auswählen
● Grobe Programmstruktur planen
● Schnittstellen (interfaces) festlegen
● Programmieren
● Testen
● Dokumentieren
● Weiterenwickeln, wiederverwenden
Einige berühmte numerische Katastrophen:
http://www.ima.umn.edu/~arnold/disasters/disasters.html
CB
S
CWissenschaftliches Programmieren, SS2017 (1/3)Bremen Center for
Computational Materials ScienceMC S
http://www.bccms.uni-bremen.de
● 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
ThematikThematik
CB
S
CWissenschaftliches Programmieren, SS2017 (1/4)Bremen Center for
Computational Materials ScienceMC S
http://www.bccms.uni-bremen.de
LiteraturLiteratur
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)
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)
● Fortran 90 Vorlesung an der Universität Bayreuth
http://www.rz.uni-bayreuth.de/lehre/fortran90/
CB
S
CWissenschaftliches Programmieren, SS2017 (1/5)Bremen Center for
Computational Materials ScienceMC S
http://www.bccms.uni-bremen.de
Wissenschaftliches Programmierprojekt (jeweils 2 Personen)
● 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
OrganisatorsichesOrganisatorsiches
Ablauf: ● ca. 45-60 Minuten Vorlesung
● 2 Stunden anschließende Übung
● Nacharbeitung zu Hause (Übungen bauen aufeinander auf!)
Vergabe von Kreditpunkten:
CB
S
CWissenschaftliches Programmieren, SS2017 (1/6)Bremen Center for
Computational Materials ScienceMC S
http://www.bccms.uni-bremen.de
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
Warum Fortran?Warum Fortran?
Nachteile:
● Community nicht so groß, wie z.B. bei C oder C++
● Compilerentwicklung entsprechend langsam
● Fortran 2008-Unterstützung zur Zeit nur sporadisch (Fortran 2003, OK).
● Tools (IDE, Debugger, etc) nicht so ausgereift wie in anderen Sprachen
● Ein Paar nützliche Sprachelemente fehlen:
● Templates, mehrfache Vererbung oder Java-Interfaces
CB
S
CWissenschaftliches Programmieren, SS2017 (1/7)Bremen Center for
Computational Materials ScienceMC S
http://www.bccms.uni-bremen.de
Geschichte von FortranGeschichte 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)Paralleles Programmieren via Coarrays
● Fortran 201X (?)Verbesserte C-Kompatibilität
CB
S
CWissenschaftliches Programmieren, SS2017 (1/8)Bremen Center for
Computational Materials ScienceMC S
http://www.bccms.uni-bremen.de
Warum Linux?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.
CB
S
CWissenschaftliches Programmieren, SS2017 (1/9)Bremen Center for
Computational Materials ScienceMC S
http://www.bccms.uni-bremen.de
Unix / Linux / Kubuntu CrashkursUnix / Linux / Kubuntu Crashkurs
● Graphischer DateimanagerK/Favorites/File Manager
● Eigene Dateien in sog.Home-Verzeichnis
● Kopieren, Umbenennen, etc. wie unter Windows (Drag & Drop)
● Dateien in Baum stukturiert (Verzeichnisbaum)
CB
S
CWissenschaftliches Programmieren, SS2017 (1/10)Bremen Center for
Computational Materials ScienceMC S
http://www.bccms.uni-bremen.de
Unix / Linux / Kubuntu CrashkursUnix / Linux / Kubuntu Crashkurs● Wir werden meistens im Kommandofenster arbeiten und Befehle eintippen.
K / Applications / System / Terminal
● Home-Verzeichnis: /home/wipro
● Home kann in Befehlen mit ~ abgekürzt werden
● Die Home-Verzeichnisse sind lokal an den Rechnern
● Bitte ein Unterverzeichnis mit dem eigenen Namenanstellen:
mkdir b.aradi
und nur darin arbeiten.
● Nach Ende der Sitzung sollten Sie Ihre Daten aufUSB-Stick kopieren, für den Fall, dass Sie das nächste Mal an einem anderenRechner sitzen.
CB
S
CWissenschaftliches Programmieren, SS2017 (1/11)Bremen Center for
Computational Materials ScienceMC S
http://www.bccms.uni-bremen.de
Unix / Linux / Kubuntu CrashkursUnix / Linux / Kubuntu Crashkurs
Einige Unix-Befehle:
pwd
ls
cd dir
cd ..
cp source dest
mv source dest
rm file
rmdir dir
man command
Aktuelles Verzeichnis angeben (print working directory)
Dateien im aktuellen Verzeichnis auflisten (liSt)
Ins Verzeichnis dir wechseln (change directory)
Eine Verzeichnisebene höher wechseln
Eine Kopie von source nach dest anlegen (copy)
Die Datei source zu dest umbenennen (move)
Die Datei file löschen (remove)
Das leere Verzeichnis dir löschen (remove directory)
Beschreibung von command (manual) z.B.: man cp(Blättern: Leerzeichen, Zurück: b, Ausstieg: q)
CB
S
CWissenschaftliches Programmieren, SS2017 (1/12)Bremen Center for
Computational Materials ScienceMC S
http://www.bccms.uni-bremen.de
Unix / Linux / Kubuntu CrashkursUnix / Linux / Kubuntu Crashkurs
Normale Dateien: weiß
Verzeichnisse: blau
Löschen und Überschreiben sind unwiderruflich!
Bitte zuerst DENKEN und dann [ENTER] drücken
Bemerkungen:
● Befehl wird ausgeführt, wenn [ENTER] gedrückt wird
● Dateityp wird bei ls durch Farbe angezeigt:
● Unix ist ein Betriebssystem für Leute, die wissen was sie tun:
CB
S
CWissenschaftliches Programmieren, SS2017 (1/13)Bremen Center for
Computational Materials ScienceMC S
http://www.bccms.uni-bremen.de
Ihr persönliches Linux/UnixIhr persönliches Linux/Unix
● 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 einenbootbaren USB-Stick erstellen.
● Alternativ: VirtualBox installieren, und eine virtuelle Maschine mit dem ISO-image booten.
● Sie können selbstverständlich Linux auch dauerhaft (neben Windows) installieren. (Distribution: egal, wir benutzen hier Kubuntu).
Windows-User:
● Ihr Account hier im BCCMS-Poolraum (Sie können sich nur von hier einloggen!)
Mac-User:● Sie haben schon Unix (BSD) auf Ihrem Laptop. Versuchen Sie die Programme, die wir hier verwenden, zu installieren.
CB
S
CWissenschaftliches Programmieren, SS2017 (1/14)Bremen Center for
Computational Materials ScienceMC S
http://www.bccms.uni-bremen.de
Emacs 24Emacs 24
● Textdateien (Quellcode unserer Programme) werden wir mit dem Editor Emacs erstellen und bearbeiten
K / Development / Text Editor (GNU Emacs 24)
Menüs
Texteingabe
StatuszeileKommandozeile (minibuffer)
CB
S
CWissenschaftliches Programmieren, SS2017 (1/15)Bremen Center for
Computational Materials ScienceMC S
http://www.bccms.uni-bremen.de
Emacs 24Emacs 24
● Neue Datei erstellen: File / Visit New File …
Verzeichnis auswählen
Dateinamen eingeben
Datei erzeugen
● Existierende Datei öffnen: File / Open Fileoder Ctrl-X Ctrl-F (Zwei Tastenkombinationen nacheinander)
● Datei Speichern: File / Saveoder Ctrl-X Ctrl-S
CB
S
CWissenschaftliches Programmieren, SS2017 (1/16)Bremen Center for
Computational Materials ScienceMC S
http://www.bccms.uni-bremen.de
Emacs 24Emacs 24
Kodierung(UTF-8)
Dateiname(muss auf .f90 enden!)
Position in der Datei(All – alles sichtbar)
Aktuelle Zeile Eingabemodus
● Fortran 90
● Abkürzungen werden aufgelöst
● Automatischer Zeilenumbruch
Datei geändert seit letzter Speicherung
Eingegebener Text (Wenn Buchstaben zu groß: oder zu klein
Options / Set default font
Options / Save options)
CB
S
CWissenschaftliches Programmieren, SS2017 (1/17)Bremen Center for
Computational Materials ScienceMC S
http://www.bccms.uni-bremen.de
Emacs 23Emacs 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!)
CB
S
CWissenschaftliches Programmieren, SS2017 (1/18)Bremen Center for
Computational Materials ScienceMC S
http://www.bccms.uni-bremen.de
Erster FortrancodeErster Fortrancode
! The hello world programprogram hello_world implicit none
write(*,*) "Hello World!"
end program hello_world
Programmname
Outputdatei, Outputformat
StringBlock
Befehle
hello_world.f90:
Kommentar
Inhalt eines Blockes sollte zwecks Lesbarkeit immer entsprechend(z.B: mit 2 Leerzeichen) eingerückt werden!
CB
S
CWissenschaftliches Programmieren, SS2017 (1/19)Bremen Center for
Computational Materials ScienceMC S
http://www.bccms.uni-bremen.de
Abkürzungen für EmacsAbkürzungen für Emacs
Siehe Datei: ~/.emacs_abbrevs
pm$ wird zum program ergänzt
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 (~).
CB
S
CWissenschaftliches Programmieren, SS2017 (1/20)Bremen Center for
Computational Materials ScienceMC S
http://www.bccms.uni-bremen.de
Ersten Fortrancode eingebenErsten Fortrancode eingeben
program hello_world implicit none
write(*,*) "Hello World!"
end program hello_world
hello_world.f90:
pm$ hello_world[ENTER]im$[ENTER][ENTER]wr$(*,*) "Hello World!"[ENTER][ENTER]end[ENTER]
Eintippen:
Mit Abkürzung, automatischer Einrückung und Vervollständigung:50 statt 90 Tastenschläge
● [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)
Hinweise:
CB
S
CWissenschaftliches Programmieren, SS2017 (1/21)Bremen Center for
Computational Materials ScienceMC S
http://www.bccms.uni-bremen.de
Ersten Fortrancode compileren und ausführenErsten Fortrancode compileren und ausführen
Compilieren:
gfortran -o hello_world hello_world.f90
● Im Kommandofenster in das Verzeichnis mit dem Quellcode wechseln
cd ~/work/hello1
● Quellcode mit dem Fortrancompiler in binäre ausführbare Datei umwandeln
Befehl (Name des Programmes)
Option(en) (verändert Programmverhalten, optional)
Argument(e)(welche Dateien sollen bearbeitet werden)
Optionen werden mit „-“ eingeleitet
Optionen erwarten oft einen Wert
-o Dateiname
Setze Namen des ausführbaren Programmes auf Dateiname (Default: a.out)
● Wenn keine (Fehler)Meldung: alles OKWenn Fehlermeldung:
sorgfältig lesen, Code korrigieren
Ausführen:
./hello_world
Programm im aktuellen Verzeichnis mit Namen „hello_world“ ausführen
CB
S
CWissenschaftliches Programmieren, SS2017 (1/22)Bremen Center for
Computational Materials ScienceMC S
http://www.bccms.uni-bremen.de
! Personalized version of the hello world programprogram hello_person implicit none
character(len=10) :: name
write (*,*) "Please enter your name:" read (*,*) name write (*,*) "Hel& &lo ", trim(name) // "!"
end program hello_person
Zweiter FortrancodeZweiter Fortrancode
Variablendeklaration
Zeilenumbruch (funktioniertauch innerhalb von Strings)
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
Stringverkettung
CB
S
CWissenschaftliches Programmieren, SS2017 (1/23)Bremen Center for
Computational Materials ScienceMC S
http://www.bccms.uni-bremen.de
AufgabenAufgaben
Ia. Legen Sie in Ihrem HOME-Verzeichnis ein Unterverzeichnis work an.mkdir ~/IHR_NAME
mkdir ~/IHR_NAME/work
Ib. Erstellen Sie ein Untervezeichnis hello1 unter work.cd ~/IHR_NAME/workmkdir hello1
Ic. Erstellen Sie die Datei hello_world.f90 im Verzeichnis ~/IHR_NAME/work/hello1mit Emacs und tippen Sie das erste Fortranbeispiel ein. Vergessen Sie nicht, dieDatei zu speichern.
Id. Compilieren Sie das Fortranprogramm hello_world.f90 und führen Sie es aus!
Ie. Erstellen Sie das Verzeichnis ~/IHR_NAME/work/hello2.Kopieren Sie die Datei ~/IHR_NAME/work/hello1/hello_world.f90 dahin:
cp ~/IHR_NAME/work/hello1/hello_world.f90 ~/IHR_NAME/work/hello2/
Nennen Sie die Datei in hello_person.f90 um.cd ~/IHR_NAME/work/hello2mv hello_world.f90 hello_person.f90
CB
S
CWissenschaftliches Programmieren, SS2017 (1/24)Bremen Center for
Computational Materials ScienceMC S
http://www.bccms.uni-bremen.de
AufgabenAufgaben
If. Öffnen Sie hello_person.f90 mit Emacs, und verändern Sie die Dateientsprechend 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-Befehlsteht?
II. Arbeiten Sie das Emacs-Tutorial durch!
III Installieren Sie Linux auf Ihr Computer/Laptop.
CB
S
CWissenschaftliches Programmieren, SS2017 (1/25)Bremen Center for
Computational Materials ScienceMC S
http://www.bccms.uni-bremen.de
Bevor Sie startenBevor Sie starten
● Wenn Sie eigene Linuxdistribution verwenden:
● Initialisierungsarchiv von der Webseite der Veranstaltung herunterladen
● Auspacken
● Dateien .emacs und .emacs_abbrevs in das HOME-Verzeichnis kopieren.