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