Upload
others
View
1
Download
0
Embed Size (px)
Citation preview
Praktikum: Numerik partiellerDifferentialgleichungen I
Mario Ohlberger,Martin Drohmann,Michael Schaefer
07/04/2011wissen lebenWWU Münster
WESTFÄLISCHEWILHELMS-UNIVERSITÄTMÜNSTER
wis
sen
lebe
nW
WU
Mün
ster
WESTFÄLISCHEWILHELMS-UNIVERSITÄTMÜNSTER 2 /24
Part I
Grundlegende Software-Werkzeuge zumProgrammieren mit C++ unter Linux
I Linux/BashI g++I doxygenI make
,,
Prof. Dr. Mario Ohlberger
wis
sen
lebe
nW
WU
Mün
ster
WESTFÄLISCHEWILHELMS-UNIVERSITÄTMÜNSTER 3 /24
Linux/Bash
,,
Prof. Dr. Mario Ohlberger
wis
sen
lebe
nW
WU
Mün
ster
WESTFÄLISCHEWILHELMS-UNIVERSITÄTMÜNSTER 4 /24
Remote-Verbindung mit Uni-Rechnern
sshMit der secure shell auf einem Uni-Rechner einloggen:
> ssh [email protected]
Mögliche Werte für rechnername sind beispielsweiseI schafXX, wobei XX eine zweistellige Zahl ist.I euroshopper
I lockheed
,,
Prof. Dr. Mario Ohlberger
wis
sen
lebe
nW
WU
Mün
ster
WESTFÄLISCHEWILHELMS-UNIVERSITÄTMÜNSTER 5 /24
Dateien und VerzeichnisseUnter Linux ist alles eine Datei.
Die wichtigsten Befehle:I cd - wechselt das VerzeichnisI ls - zeigt Verzeichnisinhalt anI pwd - aktuelles Verzeichnis
I mkdir - erstellt neues VerzeichnisI cp - kopiert DateienI rm - löscht Dateien
spezielle Verzeichnisse
I / root - Verzeichnis,I . aktuelles Verzeichnis,I .. übergeordnetes Verzeichnis,I ~ Home-Verzeichnis
,,
Prof. Dr. Mario Ohlberger
wis
sen
lebe
nW
WU
Mün
ster
WESTFÄLISCHEWILHELMS-UNIVERSITÄTMÜNSTER 6 /24
Verzeichnisse auf Uni-Rechnern
/u/benutzername≡ ~/ Home-Verzeichnis, Zugriff nur für Nutzer,über Netzwerklaufwerk eingebunden, d.h.überall verfügbar
/tmp Verzeichnis für temporäre Dateien, kanngelöscht werden, Lese-/Shreibzugriff für alle,auf lokaler Festplatte
/usr Verzeichnis mit Programmen/Bibliothekenfür alle Nutzer
/usr/bin Programme (z.B. firefox)/usr/lib Bibliotheken (was das ist kommt später)
/usr/share Dateien, die von mehreren Programmen ver-wendet werden. (z.B. Icons)
,,
Prof. Dr. Mario Ohlberger
wis
sen
lebe
nW
WU
Mün
ster
WESTFÄLISCHEWILHELMS-UNIVERSITÄTMÜNSTER 6 /24
Verzeichnisse auf Uni-Rechnern
/u/benutzername≡ ~/ Home-Verzeichnis, Zugriff nur für Nutzer,über Netzwerklaufwerk eingebunden, d.h.überall verfügbar
/tmp Verzeichnis für temporäre Dateien, kanngelöscht werden, Lese-/Shreibzugriff für alle,auf lokaler Festplatte
/usr Verzeichnis mit Programmen/Bibliothekenfür alle Nutzer
/usr/bin Programme (z.B. firefox)/usr/lib Bibliotheken (was das ist kommt später)
/usr/share Dateien, die von mehreren Programmen ver-wendet werden. (z.B. Icons)
,,
Prof. Dr. Mario Ohlberger
wis
sen
lebe
nW
WU
Mün
ster
WESTFÄLISCHEWILHELMS-UNIVERSITÄTMÜNSTER 7 /24
Programme. . .
I haben das Executable-Flag (x) gesetzt:
Exkurs: Dateisystem-Rechte
I Read(r), Write(w), Executable(x) können für user, group oder othergesetzt werden
I Ansehen mit ls -lI Ändern der Rechte mit chmod (z.B. chmod ug+rw datei gewährt user
und group Lese-/ und Schreibrechte)
I können ausgeführt werden, falls sie in PATH Verzeichnis liegen, odermit vollständigem Pfad aufgerufen werden. (/bin/ls, ./ls)
I können mit Ctrl-C abgebrochen werden!!!
,,
Prof. Dr. Mario Ohlberger
wis
sen
lebe
nW
WU
Mün
ster
WESTFÄLISCHEWILHELMS-UNIVERSITÄTMÜNSTER 8 /24
Was ist ein PATH-Verzeichnis?
Exkurs: Umgebungsvariablen
I Definition jederzeit mit
export VARNAME=WERT
I Alle Programme, die aktueller Umgebung gestartet werden, habenZugriff auf U-Variablen.
I env zeigt alle U-Variablen der aktuellen Umgebung an. env angezeigtwerden.
I Zugriff auf Wert erfolgt mit $VARNAME (Beispiel: echo $PATH)I Gültigkeit nur für aktuelle Session. Variablen, die jedesmal gültig
sein sollen, können in die Datei ~/.bashrc geschrieben werden.I Mit source datei können Definitionen in der Datei datei in die
aktuelle Umgebung geladen werden (Beispiel: source ~/.bashrc),,
Prof. Dr. Mario Ohlberger
wis
sen
lebe
nW
WU
Mün
ster
WESTFÄLISCHEWILHELMS-UNIVERSITÄTMÜNSTER 9 /24
Was ist ein PATH-Verzeichnis?
I Die PATH Variable enthält durch Doppelpunkte getrennteVerzeichnisse, in denen nach ausführbaren Programmen gesuchtwird. Beispiel:/bin:/usr/bin/:/usr/local/bin:/opt/matlab/bin
I Um ein Verzeichnis hinzuzufügen:
export PATH=$PATH:/u/mdroh_01/bin
I Es gibt ähnliche Variablen, wie z.B. LD_LIBRARY_PATH fürBibliothekspfade.
,,
Prof. Dr. Mario Ohlberger
wis
sen
lebe
nW
WU
Mün
ster
WESTFÄLISCHEWILHELMS-UNIVERSITÄTMÜNSTER 10 /24
Dateien finden
locate Sucht schnell auf dem ganzen Rechner nach Dateina-men in einer Datenbank, (nicht immer aktuell)
find Durchsucht das aktuelle Verzeichnis nach Dateien(langsamer)
grep Durchsucht Dateien nach Zeichenketten (sehrlangsam)
,,
Prof. Dr. Mario Ohlberger
wis
sen
lebe
nW
WU
Mün
ster
WESTFÄLISCHEWILHELMS-UNIVERSITÄTMÜNSTER 11 /24
Globbing
Dateinamenerweiterung durch spezielle Zeichen:* entspricht einer beliebigen Zeichenkette. (Beispiel:
*.cc entspricht allen Dateinamen die auf .cc en-den).
? entspricht einem beliebigen Zeichen (Beispiel:test?.cc entspricht den Dateien test1.cc,test2.cc, testd.cc, . . . )
prefix{a,b}suffix wird ersetzt durchprefixasuffix prefixbsuffix. (Beispiel:cp test.cc{,.bak} kopiert die Datei test.cc
und schreibt Kopie in test.cc.bak)
,,
Prof. Dr. Mario Ohlberger
wis
sen
lebe
nW
WU
Mün
ster
WESTFÄLISCHEWILHELMS-UNIVERSITÄTMÜNSTER 12 /24
Warum nicht einfach ein Dateimanager?
Gegenbeispiel I
find . | grep old | xargs sed -i'' -e 's/old/very old/'
ersetzt in allen Dateien im aktuellen Verzeichnis, die “old” im Namenhaben, die Zeichenkette “old” durch “very old”.
Gegenbeispiel II
for i in *.eps; do convert $i ${i/eps/pdf}; done
konvertiert alle eps Grafiken im aktuellen Verzeichnis in pdf Grafiken.
,,
Prof. Dr. Mario Ohlberger
wis
sen
lebe
nW
WU
Mün
ster
WESTFÄLISCHEWILHELMS-UNIVERSITÄTMÜNSTER 13 /24
Weiterführende Informationen
I Manual-Pages z.B. man bash
I http://tldp.org/HOWTO/Bash-Prog-Intro-HOWTO.html
Zwei Programme für den nächsten AbschnittI wget lädt eine Webseite/Datei aus dem Internet herunterI tar entpackt oder erstellt Tar-Archive
I tar xzf archiv.tar.gz entpackt ein ArchivI tar czf archiv.tar.gz dateiliste erstellt ein Archiv mit Dateien
in dateiliste
,,
Prof. Dr. Mario Ohlberger
wis
sen
lebe
nW
WU
Mün
ster
WESTFÄLISCHEWILHELMS-UNIVERSITÄTMÜNSTER 14 /24
g++
,,
Prof. Dr. Mario Ohlberger
wis
sen
lebe
nW
WU
Mün
ster
WESTFÄLISCHEWILHELMS-UNIVERSITÄTMÜNSTER 15 /24
Vorbereitungen
1. Erstelle ein Verzeichnis ~/praktikum und wechsle in dieses.
2. Hole das Archiv files0.tar.gz von der Webseitewget $PRAKTHP/files0.tar.gz
3. Entpacke dieses Archiv: tar xzf files0.tar.gz
4. Lade ebenso das Skript install_dune_in_tmp.sh von derHomepage herunter.
,,
Prof. Dr. Mario Ohlberger
wis
sen
lebe
nW
WU
Mün
ster
WESTFÄLISCHEWILHELMS-UNIVERSITÄTMÜNSTER 16 /24
Kompilieren eines ersten Programms1. Erstelle eine Datei example.cc mit folgendem Inhalt:
example.cc
#include <iostream >
void main (int argc , const char ** argv)
{
std::cout << "Hello World!" << std::endl;
}
2. Kompiliere eine Objektdatei example.o mitg++ -c -o example.o example.cc. (Kompilieren ≡ Übersetzen inMaschinencode)
3. Erstelle eine ausführbare Datei mit g++ -o example example.o.,,
Prof. Dr. Mario Ohlberger
wis
sen
lebe
nW
WU
Mün
ster
WESTFÄLISCHEWILHELMS-UNIVERSITÄTMÜNSTER 17 /24
Test
example.cc
#include <iostream >
void main (int argc ,
const char ** argv)
{
std::cout
<< "Hello World!"
<< std::endl;
}
I Header files (hier:iostream)
I Entry point: mainmethod
I Argumentanzahlund Argumentliste
I Textausgabe undZeilenumbruch
,,
Prof. Dr. Mario Ohlberger
wis
sen
lebe
nW
WU
Mün
ster
WESTFÄLISCHEWILHELMS-UNIVERSITÄTMÜNSTER 17 /24
Test
example.cc
#include <iostream >
void main (int argc ,
const char ** argv)
{
std::cout
<< "Hello World!"
<< std::endl;
}
I Header files (hier:iostream)
I Entry point: mainmethod
I Argumentanzahlund Argumentliste
I Textausgabe undZeilenumbruch
,,
Prof. Dr. Mario Ohlberger
wis
sen
lebe
nW
WU
Mün
ster
WESTFÄLISCHEWILHELMS-UNIVERSITÄTMÜNSTER 17 /24
Test
example.cc
#include <iostream >
void main (int argc ,
const char ** argv)
{
std::cout
<< "Hello World!"
<< std::endl;
}
I Header files (hier:iostream)
I Entry point: mainmethod
I Argumentanzahlund Argumentliste
I Textausgabe undZeilenumbruch
,,
Prof. Dr. Mario Ohlberger
wis
sen
lebe
nW
WU
Mün
ster
WESTFÄLISCHEWILHELMS-UNIVERSITÄTMÜNSTER 17 /24
Test
example.cc
#include <iostream >
void main (int argc ,
const char ** argv)
{
std::cout
<< "Hello World!"
<< std::endl;
}
I Header files (hier:iostream)
I Entry point: mainmethod
I Argumentanzahlund Argumentliste
I Textausgabe undZeilenumbruch
,,
Prof. Dr. Mario Ohlberger
wis
sen
lebe
nW
WU
Mün
ster
WESTFÄLISCHEWILHELMS-UNIVERSITÄTMÜNSTER 18 /24
Aufgabe: Kompiliere gridtest_template.cc
I Kompilieren mitg++ -c -o gridtest.o gridtest_template.cc -I./include
I Linken mit g++ -o gridtest gridtest.o -L./lib -lmygrid
,,
Prof. Dr. Mario Ohlberger
wis
sen
lebe
nW
WU
Mün
ster
WESTFÄLISCHEWILHELMS-UNIVERSITÄTMÜNSTER 18 /24
Aufgabe: Kompiliere gridtest_template.cc
I Kompilieren mitg++ -c -o gridtest.o gridtest_template.cc -I./include
I Linken mit g++ -o gridtest gridtest.o -L./lib -lmygrid
,,
Prof. Dr. Mario Ohlberger
wis
sen
lebe
nW
WU
Mün
ster
WESTFÄLISCHEWILHELMS-UNIVERSITÄTMÜNSTER 18 /24
Aufgabe: Kompiliere gridtest_template.cc
I Kompilieren mitg++ -c -o gridtest.o gridtest_template.cc -I./include
I Linken mit g++ -o gridtest gridtest.o -L./lib -lmygrid
,,
Prof. Dr. Mario Ohlberger
wis
sen
lebe
nW
WU
Mün
ster
WESTFÄLISCHEWILHELMS-UNIVERSITÄTMÜNSTER 19 /24
Bibliotheken
I . . . enthalten Programmcode, der von vielen Programmenwiederverwendet wird. Man will nicht jedes Mal das Rad neuerfinden!
I . . . können entweder alsI Header-Bibliotheken vorliegen (Beispiel: Dune) oderI als vorkompilierte Programmpakete (Beispiel: OpenGL, Qt, mygrid, . . . )
I Für den ersten Fall muss nur der Pfad zu den Header-Dateienangegeben werden (Option -I), der Code wird jedesmal neuübersetzt.
I Im vorkompilierten Fall, muss zusätzlich der Pfad zumBibliotheksarchiv (libNAME.a oder libNAME.so) in der Linker-Phaseangegeben werden.
,,
Prof. Dr. Mario Ohlberger
wis
sen
lebe
nW
WU
Mün
ster
WESTFÄLISCHEWILHELMS-UNIVERSITÄTMÜNSTER 19 /24
Bibliotheken
I . . . enthalten Programmcode, der von vielen Programmenwiederverwendet wird. Man will nicht jedes Mal das Rad neuerfinden!
I . . . können entweder alsI Header-Bibliotheken vorliegen (Beispiel: Dune) oderI als vorkompilierte Programmpakete (Beispiel: OpenGL, Qt, mygrid, . . . )
I Für den ersten Fall muss nur der Pfad zu den Header-Dateienangegeben werden (Option -I), der Code wird jedesmal neuübersetzt.
I Im vorkompilierten Fall, muss zusätzlich der Pfad zumBibliotheksarchiv (libNAME.a oder libNAME.so) in der Linker-Phaseangegeben werden.
,,
Prof. Dr. Mario Ohlberger
wis
sen
lebe
nW
WU
Mün
ster
WESTFÄLISCHEWILHELMS-UNIVERSITÄTMÜNSTER 20 /24
doxygen
,,
Prof. Dr. Mario Ohlberger
wis
sen
lebe
nW
WU
Mün
ster
WESTFÄLISCHEWILHELMS-UNIVERSITÄTMÜNSTER 21 /24
Dokumentation von Bibliotheken
Um Funktionen wiederverwenden zu können, müssen diese dokumentiertwerden. doxygen erstellt automatische Dokumentationen aus demQuelltext. (Siehe Kommentarzeilen in lib/mygrid.cc)
Erstelle die Dokumentation für mygrid mit
doxygen Doxyfile
und öffne das Resultat in einem Browser
firefox doc/html/index.html
,,
Prof. Dr. Mario Ohlberger
wis
sen
lebe
nW
WU
Mün
ster
WESTFÄLISCHEWILHELMS-UNIVERSITÄTMÜNSTER 22 /24
make
,,
Prof. Dr. Mario Ohlberger
wis
sen
lebe
nW
WU
Mün
ster
WESTFÄLISCHEWILHELMS-UNIVERSITÄTMÜNSTER 23 /24
Automatisieren des Build-Prozesses mit make
Mittlerweile müssen wir einige (schwer zu merkende) Befehle ausführen:
g++ -c -o gridtest.o gridtest_template.cc -I./include
g++ -o gridtes gridtest.o -L./lib -lmygrid
doxygen Doxyfile
Dies kann mit Makefiles automatisiert werden: make all, make doc.
,,
Prof. Dr. Mario Ohlberger
wis
sen
lebe
nW
WU
Mün
ster
WESTFÄLISCHEWILHELMS-UNIVERSITÄTMÜNSTER 23 /24
Automatisieren des Build-Prozesses mit make
Mittlerweile müssen wir einige (schwer zu merkende) Befehle ausführen:
g++ -c -o gridtest.o gridtest_template.cc -I./include
g++ -o gridtes gridtest.o -L./lib -lmygrid
doxygen Doxyfile
Dies kann mit Makefiles automatisiert werden: make all, make doc.
,,
Prof. Dr. Mario Ohlberger
wis
sen
lebe
nW
WU
Mün
ster
WESTFÄLISCHEWILHELMS-UNIVERSITÄTMÜNSTER 24 /24
Part II
Sehr kurze Einführung/Wiederholung vonC++-Konzepten
An infinite number of monkeys typing into GNU emacs wouldnever make a good program.
— Linus Torvalds
,,
Prof. Dr. Mario Ohlberger