25
Wissenschaftliches Programmieren Wissenschaftliches Programmieren 1. Einführung, lokale Rechnerumgebung, Editor, Compiler Bálint Aradi http://www.bccms.uni-bremen.de/cms/people/b-aradi/

Wissenschaftliches Programmieren

  • Upload
    others

  • View
    9

  • Download
    1

Embed Size (px)

Citation preview

Page 1: Wissenschaftliches Programmieren

Wissenschaftliches ProgrammierenWissenschaftliches Programmieren

1. Einführung, lokale Rechnerumgebung, Editor, Compiler

Bálint Aradihttp://www.bccms.uni-bremen.de/cms/people/b-aradi/

Page 2: Wissenschaftliches Programmieren

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

Page 3: Wissenschaftliches Programmieren

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

Page 4: Wissenschaftliches Programmieren

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/

Page 5: Wissenschaftliches Programmieren

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:

Page 6: Wissenschaftliches Programmieren

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

Page 7: Wissenschaftliches Programmieren

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

Page 8: Wissenschaftliches Programmieren

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.

Page 9: Wissenschaftliches Programmieren

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)

Page 10: Wissenschaftliches Programmieren

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.

Page 11: Wissenschaftliches Programmieren

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)

Page 12: Wissenschaftliches Programmieren

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:

Page 13: Wissenschaftliches Programmieren

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.

Page 14: Wissenschaftliches Programmieren

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)

Page 15: Wissenschaftliches Programmieren

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

Page 16: Wissenschaftliches Programmieren

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)

Page 17: Wissenschaftliches Programmieren

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!)

Page 18: Wissenschaftliches Programmieren

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!

Page 19: Wissenschaftliches Programmieren

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 (~).

Page 20: Wissenschaftliches Programmieren

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:

Page 21: Wissenschaftliches Programmieren

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

Page 22: Wissenschaftliches Programmieren

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

Page 23: Wissenschaftliches Programmieren

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

Page 24: Wissenschaftliches Programmieren

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.

Page 25: Wissenschaftliches Programmieren

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.