slajdy [PDF, 0,9 MiB]

Transkrypt

slajdy [PDF, 0,9 MiB]
Ćwiczenia 1
o ćwiczeniach
Ćwiczenie
plan ćwiczenia
schemat upstream
szkic kodu
Modelowanie numeryczne w fizyce atmosfery
Ćwiczenia 1
przykł. wykres
C++
dlaczego C++? (1)
dlaczego C++? (2)
literatura
kompilatory
Sylwester Arabas
(ćwiczenia do wykładu dr. hab. inż. Lecha Łobockiego)
przeciążanie oper.
definicja klasy,
metody i jej
argumentów
Instytut Geofizyki, Wydział Fizyki Uniwersytetu Warszawskiego
biblioteki
cytat
Blitz++
Boost.Units
narzędzia
gnuplot
20. października 2011 r.
O zajęciach
Prowadzący
Ćwiczenia 1
o ćwiczeniach
o mnie: http://www.igf.fuw.edu.pl/˜ slayoo/
kontakt: [email protected] / pok. 424A, IV piętro IGF
Ćwiczenie (w ramach pracowni geofizycznej)
Ćwiczenie
plan ćwiczenia
schemat upstream
szkic kodu
przykł. wykres
C++
dlaczego C++? (1)
Całkowanie numeryczne równania adwekcji z
wykorzystaniem obliczeń równoległych
Zasady zaliczenia, narzędzia
dlaczego C++? (2)
literatura
kompilatory
przeciążanie oper.
definicja klasy,
metody i jej
argumentów
napisanie programu, programu testującego, dokumentacji
programu i raportu z „doświadczenia numerycznego”
język: dowolny obiektowy (C++, Python, Fortran­ 90. . . )
biblioteki
cytat
na ćwiczeniach/konsultacjach: przykłady w C++
Blitz++
Boost.Units
narzędzia
gnuplot
Materiały do ćwiczeń
http://www.igf.fuw.edu.pl/˜ slayoo/mnfa2011/
plan ćwiczenia (w kontekście pracowni geofiz.)
Ćwiczenia 1
organizacja ćwiczeń: 6 × 2h (z 24h – reszta samodzielnie)
części składowe projektu (termin: 4 tyg. od ostatnich ćw.):
program (może być kod prezentowany na ćwiczeniach)
o ćwiczeniach
Ćwiczenie
plan ćwiczenia
schemat upstream
szkic kodu
przykł. wykres
C++
dlaczego C++? (1)
dlaczego C++? (2)
literatura
kompilatory
przeciążanie oper.
definicja klasy,
metody i jej
argumentów
biblioteki
cytat
Blitz++
Boost.Units
narzędzia
gnuplot
całkowanie 1-wymiarowego równania adwekcji co najmniej
dwoma schematami (np. upsteam, leapfrog, MPDATA)
możliwość wykonania obliczeń w trybie szeregowym lub
równoległym (np. OpenMP, wątki, procesy, MPI)
wybór schematu całkowania, dokładności numerycznej
(float/double/...), metody zrównoleglenia i parametrów
domeny bez potrzeby rekompilacji – np. opcje linii komend
program/skrypt testujący (-||-)
automatyczna weryfikacja poprawności obliczeń (np. dla C=1)
dla szeregu kombinacji wartości parametrów programu
dokumentacja programu
np. na podstawie komentarzy w kodzie
raport z „doświadczenia numerycznego”
porównanie odstępstw od rozwiązania analitycznego dla
różnych schematów całkowania i różnych liczb Couranta
porównanie czasu wykonania programu dla różnych metod
zrównoleglenia i różnych rozmiarów domeny
plan ćwiczenia (w kontekście pracowni geofiz.)
Ćwiczenia 1
organizacja ćwiczeń: 6 × 2h (z 24h – reszta samodzielnie)
części składowe projektu (termin: 4 tyg. od ostatnich ćw.):
program (może być kod prezentowany na ćwiczeniach)
o ćwiczeniach
Ćwiczenie
plan ćwiczenia
schemat upstream
szkic kodu
przykł. wykres
C++
dlaczego C++? (1)
dlaczego C++? (2)
literatura
kompilatory
przeciążanie oper.
definicja klasy,
metody i jej
argumentów
biblioteki
cytat
Blitz++
Boost.Units
narzędzia
gnuplot
całkowanie 1-wymiarowego równania adwekcji co najmniej
dwoma schematami (np. upsteam, leapfrog, MPDATA)
możliwość wykonania obliczeń w trybie szeregowym lub
równoległym (np. OpenMP, wątki, procesy, MPI)
wybór schematu całkowania, dokładności numerycznej
(float/double/...), metody zrównoleglenia i parametrów
domeny bez potrzeby rekompilacji – np. opcje linii komend
program/skrypt testujący (-||-)
automatyczna weryfikacja poprawności obliczeń (np. dla C=1)
dla szeregu kombinacji wartości parametrów programu
dokumentacja programu
np. na podstawie komentarzy w kodzie
raport z „doświadczenia numerycznego”
porównanie odstępstw od rozwiązania analitycznego dla
różnych schematów całkowania i różnych liczb Couranta
porównanie czasu wykonania programu dla różnych metod
zrównoleglenia i różnych rozmiarów domeny
plan ćwiczenia (w kontekście pracowni geofiz.)
Ćwiczenia 1
organizacja ćwiczeń: 6 × 2h (z 24h – reszta samodzielnie)
części składowe projektu (termin: 4 tyg. od ostatnich ćw.):
program (może być kod prezentowany na ćwiczeniach)
o ćwiczeniach
Ćwiczenie
plan ćwiczenia
schemat upstream
szkic kodu
przykł. wykres
C++
dlaczego C++? (1)
dlaczego C++? (2)
literatura
kompilatory
przeciążanie oper.
definicja klasy,
metody i jej
argumentów
biblioteki
cytat
Blitz++
Boost.Units
narzędzia
gnuplot
całkowanie 1-wymiarowego równania adwekcji co najmniej
dwoma schematami (np. upsteam, leapfrog, MPDATA)
możliwość wykonania obliczeń w trybie szeregowym lub
równoległym (np. OpenMP, wątki, procesy, MPI)
wybór schematu całkowania, dokładności numerycznej
(float/double/...), metody zrównoleglenia i parametrów
domeny bez potrzeby rekompilacji – np. opcje linii komend
program/skrypt testujący (-||-)
automatyczna weryfikacja poprawności obliczeń (np. dla C=1)
dla szeregu kombinacji wartości parametrów programu
dokumentacja programu
np. na podstawie komentarzy w kodzie
raport z „doświadczenia numerycznego”
porównanie odstępstw od rozwiązania analitycznego dla
różnych schematów całkowania i różnych liczb Couranta
porównanie czasu wykonania programu dla różnych metod
zrównoleglenia i różnych rozmiarów domeny
plan ćwiczenia (w kontekście pracowni geofiz.)
Ćwiczenia 1
organizacja ćwiczeń: 6 × 2h (z 24h – reszta samodzielnie)
części składowe projektu (termin: 4 tyg. od ostatnich ćw.):
program (może być kod prezentowany na ćwiczeniach)
o ćwiczeniach
Ćwiczenie
plan ćwiczenia
schemat upstream
szkic kodu
przykł. wykres
C++
dlaczego C++? (1)
dlaczego C++? (2)
literatura
kompilatory
przeciążanie oper.
definicja klasy,
metody i jej
argumentów
biblioteki
cytat
Blitz++
Boost.Units
narzędzia
gnuplot
całkowanie 1-wymiarowego równania adwekcji co najmniej
dwoma schematami (np. upsteam, leapfrog, MPDATA)
możliwość wykonania obliczeń w trybie szeregowym lub
równoległym (np. OpenMP, wątki, procesy, MPI)
wybór schematu całkowania, dokładności numerycznej
(float/double/...), metody zrównoleglenia i parametrów
domeny bez potrzeby rekompilacji – np. opcje linii komend
program/skrypt testujący (-||-)
automatyczna weryfikacja poprawności obliczeń (np. dla C=1)
dla szeregu kombinacji wartości parametrów programu
dokumentacja programu
np. na podstawie komentarzy w kodzie
raport z „doświadczenia numerycznego”
porównanie odstępstw od rozwiązania analitycznego dla
różnych schematów całkowania i różnych liczb Couranta
porównanie czasu wykonania programu dla różnych metod
zrównoleglenia i różnych rozmiarów domeny
plan ćwiczenia (w kontekście pracowni geofiz.)
Ćwiczenia 1
organizacja ćwiczeń: 6 × 2h (z 24h – reszta samodzielnie)
części składowe projektu (termin: 4 tyg. od ostatnich ćw.):
program (może być kod prezentowany na ćwiczeniach)
o ćwiczeniach
Ćwiczenie
plan ćwiczenia
schemat upstream
szkic kodu
przykł. wykres
C++
dlaczego C++? (1)
dlaczego C++? (2)
literatura
kompilatory
przeciążanie oper.
definicja klasy,
metody i jej
argumentów
biblioteki
cytat
Blitz++
Boost.Units
narzędzia
gnuplot
całkowanie 1-wymiarowego równania adwekcji co najmniej
dwoma schematami (np. upsteam, leapfrog, MPDATA)
możliwość wykonania obliczeń w trybie szeregowym lub
równoległym (np. OpenMP, wątki, procesy, MPI)
wybór schematu całkowania, dokładności numerycznej
(float/double/...), metody zrównoleglenia i parametrów
domeny bez potrzeby rekompilacji – np. opcje linii komend
program/skrypt testujący (-||-)
automatyczna weryfikacja poprawności obliczeń (np. dla C=1)
dla szeregu kombinacji wartości parametrów programu
dokumentacja programu
np. na podstawie komentarzy w kodzie
raport z „doświadczenia numerycznego”
porównanie odstępstw od rozwiązania analitycznego dla
różnych schematów całkowania i różnych liczb Couranta
porównanie czasu wykonania programu dla różnych metod
zrównoleglenia i różnych rozmiarów domeny
Schemat całkowania „upstream”
Ćwiczenia 1
o ćwiczeniach
równanie adwekcji pola ψ dla stałej prędkości u
∂ψ
∂t
∂
= −u ∂x
ψ
∆ψ
∆t
= −u ∆ψ
∆x
Ćwiczenie
plan ćwiczenia
schemat upstream
szkic kodu
przykł. wykres
C++
dlaczego C++? (1)
∆t
C = u ∆x
(l. Couranta)
dlaczego C++? (2)
literatura
kompilatory
przeciążanie oper.
definicja klasy,
metody i jej
argumentów
schemat całkowania numerycznego „upstream” / „upwind”
biblioteki
cytat
Blitz++
Boost.Units
narzędzia
gnuplot
ψin+1 = ψin − C

 ψn
i
·  n
ψ
n
− ψi−1
C >0
− ψin
C ¬0
i+1
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68 }
for (int n=0; n < 2; ++n) psi[n] = new Array<quant,
adv_upstream *adv = new adv_upstream();
szkic kodu
Ćwiczenia 1
o ćwiczeniach
Ćwiczenie
plan ćwiczenia
schemat upstream
szkic kodu
przykł. wykres
C++
dlaczego C++? (1)
dlaczego C++? (2)
literatura
kompilatory
przeciążanie oper.
definicja klasy,
metody i jej
argumentów
biblioteki
cytat
Blitz++
Boost.Units
narzędzia
gnuplot
// initial condition
(*psi[0])(Range(nx/4, nx/2)) = 1;
// integration loop
for (int t = 0; t < nt; ++t)
{
// output
cout << *psi[0] << endl << endl;
// copying data from psi[n] -> psi[n+1]
*psi[1] = *psi[0];
// periodic boundary
(*psi[1])(Range(-1)) = (*psi[0])(Range(nx-1));
(*psi[1])(Range(nx)) = (*psi[0])(Range(0));
// advection operator
adv->op(psi, Range(0, nx-1), 0, C);
// swapping arrays
cycleArrays(*psi[0], *psi[1]);
}
przykładowy wykres: (gnuplot> call ’cw1.gpi’)
Ćwiczenia 1
o ćwiczeniach
Ćwiczenie
plan ćwiczenia
schemat upstream
szkic kodu
przykł. wykres
C++
dlaczego C++? (1)
dlaczego C++? (2)
literatura
kompilatory
przeciążanie oper.
definicja klasy,
metody i jej
argumentów
biblioteki
cytat
Blitz++
Boost.Units
narzędzia
gnuplot
Dlaczego C++? (a nie FORTRAN) (1/2)
w kontekście naszych ćwiczeń
Ćwiczenia 1
o ćwiczeniach
Ćwiczenie
plan ćwiczenia
schemat upstream
szkic kodu
przykł. wykres
C++
dlaczego C++? (1)
dlaczego C++? (2)
literatura
kompilatory
przeciążanie oper.
definicja klasy,
metody i jej
argumentów
biblioteki
cytat
Blitz++
Boost.Units
narzędzia
gnuplot
doświadczenia z zajęć z C++ na Hożej
dostępność bezpłatnych, otwartych i aktualnie rozwijanych bibliotek:
do analizy wymiarowej kodu podczas kompilacji
(każda zmienna/stała/wyrażenie mają przyporządkowane jednostki
fizyczne, których spójność jest sprawdzana w czasie kompilacji, bez
wpływu na wydajność kodu wynikowego)
do czytelnego (dla człowieka) i łatwego do optymalizacji (dla
kompilatora) opisywania operacji na macierzach bez użycia pętli
(integralna część języka w Fortranie ­90)
do obliczeń równoległych (wątki, procesy, OpenMP, MPI)
wygodne mechanizmy podziału kodu programu na części (klasy, wzorce),
interakcji z systemem operacyjnym (POSIX) i obsługi błędów (wyjątki)
od autora C++ (B. Stroustrup, ref. na slajdzie „cytat”)
... physics ... is a field where performance is essential. If a program in this
field is significantly slower than a conventional Fortran program, it will be
discarded. ... C++ and modern programming techniques have met that
challenge. Using generic programming techniques, C++ vector and matrix
libraries have equaled and exceeded the performance of classical Fortran
code (for example, POOMA, MTL and ROOT).
Dlaczego C++? (a nie FORTRAN) (1/2)
w kontekście naszych ćwiczeń
Ćwiczenia 1
o ćwiczeniach
Ćwiczenie
plan ćwiczenia
schemat upstream
szkic kodu
przykł. wykres
C++
dlaczego C++? (1)
dlaczego C++? (2)
literatura
kompilatory
przeciążanie oper.
definicja klasy,
metody i jej
argumentów
biblioteki
cytat
Blitz++
Boost.Units
narzędzia
gnuplot
doświadczenia z zajęć z C++ na Hożej
dostępność bezpłatnych, otwartych i aktualnie rozwijanych bibliotek:
do analizy wymiarowej kodu podczas kompilacji
(każda zmienna/stała/wyrażenie mają przyporządkowane jednostki
fizyczne, których spójność jest sprawdzana w czasie kompilacji, bez
wpływu na wydajność kodu wynikowego)
do czytelnego (dla człowieka) i łatwego do optymalizacji (dla
kompilatora) opisywania operacji na macierzach bez użycia pętli
(integralna część języka w Fortranie ­90)
do obliczeń równoległych (wątki, procesy, OpenMP, MPI)
wygodne mechanizmy podziału kodu programu na części (klasy, wzorce),
interakcji z systemem operacyjnym (POSIX) i obsługi błędów (wyjątki)
od autora C++ (B. Stroustrup, ref. na slajdzie „cytat”)
... physics ... is a field where performance is essential. If a program in this
field is significantly slower than a conventional Fortran program, it will be
discarded. ... C++ and modern programming techniques have met that
challenge. Using generic programming techniques, C++ vector and matrix
libraries have equaled and exceeded the performance of classical Fortran
code (for example, POOMA, MTL and ROOT).
Dlaczego C++? (a nie FORTRAN) (1/2)
w kontekście naszych ćwiczeń
Ćwiczenia 1
o ćwiczeniach
Ćwiczenie
plan ćwiczenia
schemat upstream
szkic kodu
przykł. wykres
C++
dlaczego C++? (1)
dlaczego C++? (2)
literatura
kompilatory
przeciążanie oper.
definicja klasy,
metody i jej
argumentów
biblioteki
cytat
Blitz++
Boost.Units
narzędzia
gnuplot
doświadczenia z zajęć z C++ na Hożej
dostępność bezpłatnych, otwartych i aktualnie rozwijanych bibliotek:
do analizy wymiarowej kodu podczas kompilacji
(każda zmienna/stała/wyrażenie mają przyporządkowane jednostki
fizyczne, których spójność jest sprawdzana w czasie kompilacji, bez
wpływu na wydajność kodu wynikowego)
do czytelnego (dla człowieka) i łatwego do optymalizacji (dla
kompilatora) opisywania operacji na macierzach bez użycia pętli
(integralna część języka w Fortranie ­90)
do obliczeń równoległych (wątki, procesy, OpenMP, MPI)
wygodne mechanizmy podziału kodu programu na części (klasy, wzorce),
interakcji z systemem operacyjnym (POSIX) i obsługi błędów (wyjątki)
od autora C++ (B. Stroustrup, ref. na slajdzie „cytat”)
... physics ... is a field where performance is essential. If a program in this
field is significantly slower than a conventional Fortran program, it will be
discarded. ... C++ and modern programming techniques have met that
challenge. Using generic programming techniques, C++ vector and matrix
libraries have equaled and exceeded the performance of classical Fortran
code (for example, POOMA, MTL and ROOT).
Dlaczego C++? (a nie FORTRAN) (1/2)
w kontekście naszych ćwiczeń
Ćwiczenia 1
o ćwiczeniach
Ćwiczenie
plan ćwiczenia
schemat upstream
szkic kodu
przykł. wykres
C++
dlaczego C++? (1)
dlaczego C++? (2)
literatura
kompilatory
przeciążanie oper.
definicja klasy,
metody i jej
argumentów
biblioteki
cytat
Blitz++
Boost.Units
narzędzia
gnuplot
doświadczenia z zajęć z C++ na Hożej
dostępność bezpłatnych, otwartych i aktualnie rozwijanych bibliotek:
do analizy wymiarowej kodu podczas kompilacji
(każda zmienna/stała/wyrażenie mają przyporządkowane jednostki
fizyczne, których spójność jest sprawdzana w czasie kompilacji, bez
wpływu na wydajność kodu wynikowego)
do czytelnego (dla człowieka) i łatwego do optymalizacji (dla
kompilatora) opisywania operacji na macierzach bez użycia pętli
(integralna część języka w Fortranie ­90)
do obliczeń równoległych (wątki, procesy, OpenMP, MPI)
wygodne mechanizmy podziału kodu programu na części (klasy, wzorce),
interakcji z systemem operacyjnym (POSIX) i obsługi błędów (wyjątki)
od autora C++ (B. Stroustrup, ref. na slajdzie „cytat”)
... physics ... is a field where performance is essential. If a program in this
field is significantly slower than a conventional Fortran program, it will be
discarded. ... C++ and modern programming techniques have met that
challenge. Using generic programming techniques, C++ vector and matrix
libraries have equaled and exceeded the performance of classical Fortran
code (for example, POOMA, MTL and ROOT).
Dlaczego C++? (a nie FORTRAN) (1/2)
w kontekście naszych ćwiczeń
Ćwiczenia 1
o ćwiczeniach
Ćwiczenie
plan ćwiczenia
schemat upstream
szkic kodu
przykł. wykres
C++
dlaczego C++? (1)
dlaczego C++? (2)
literatura
kompilatory
przeciążanie oper.
definicja klasy,
metody i jej
argumentów
biblioteki
cytat
Blitz++
Boost.Units
narzędzia
gnuplot
doświadczenia z zajęć z C++ na Hożej
dostępność bezpłatnych, otwartych i aktualnie rozwijanych bibliotek:
do analizy wymiarowej kodu podczas kompilacji
(każda zmienna/stała/wyrażenie mają przyporządkowane jednostki
fizyczne, których spójność jest sprawdzana w czasie kompilacji, bez
wpływu na wydajność kodu wynikowego)
do czytelnego (dla człowieka) i łatwego do optymalizacji (dla
kompilatora) opisywania operacji na macierzach bez użycia pętli
(integralna część języka w Fortranie ­90)
do obliczeń równoległych (wątki, procesy, OpenMP, MPI)
wygodne mechanizmy podziału kodu programu na części (klasy, wzorce),
interakcji z systemem operacyjnym (POSIX) i obsługi błędów (wyjątki)
od autora C++ (B. Stroustrup, ref. na slajdzie „cytat”)
... physics ... is a field where performance is essential. If a program in this
field is significantly slower than a conventional Fortran program, it will be
discarded. ... C++ and modern programming techniques have met that
challenge. Using generic programming techniques, C++ vector and matrix
libraries have equaled and exceeded the performance of classical Fortran
code (for example, POOMA, MTL and ROOT).
Dlaczego C++? (a nie FORTRAN) (1/2)
w kontekście naszych ćwiczeń
Ćwiczenia 1
o ćwiczeniach
Ćwiczenie
plan ćwiczenia
schemat upstream
szkic kodu
przykł. wykres
C++
dlaczego C++? (1)
dlaczego C++? (2)
literatura
kompilatory
przeciążanie oper.
definicja klasy,
metody i jej
argumentów
biblioteki
cytat
Blitz++
Boost.Units
narzędzia
gnuplot
doświadczenia z zajęć z C++ na Hożej
dostępność bezpłatnych, otwartych i aktualnie rozwijanych bibliotek:
do analizy wymiarowej kodu podczas kompilacji
(każda zmienna/stała/wyrażenie mają przyporządkowane jednostki
fizyczne, których spójność jest sprawdzana w czasie kompilacji, bez
wpływu na wydajność kodu wynikowego)
do czytelnego (dla człowieka) i łatwego do optymalizacji (dla
kompilatora) opisywania operacji na macierzach bez użycia pętli
(integralna część języka w Fortranie ­90)
do obliczeń równoległych (wątki, procesy, OpenMP, MPI)
wygodne mechanizmy podziału kodu programu na części (klasy, wzorce),
interakcji z systemem operacyjnym (POSIX) i obsługi błędów (wyjątki)
od autora C++ (B. Stroustrup, ref. na slajdzie „cytat”)
... physics ... is a field where performance is essential. If a program in this
field is significantly slower than a conventional Fortran program, it will be
discarded. ... C++ and modern programming techniques have met that
challenge. Using generic programming techniques, C++ vector and matrix
libraries have equaled and exceeded the performance of classical Fortran
code (for example, POOMA, MTL and ROOT).
Dlaczego C++? (a nie FORTRAN) (1/2)
w kontekście naszych ćwiczeń
Ćwiczenia 1
o ćwiczeniach
Ćwiczenie
plan ćwiczenia
schemat upstream
szkic kodu
przykł. wykres
C++
dlaczego C++? (1)
dlaczego C++? (2)
literatura
kompilatory
przeciążanie oper.
definicja klasy,
metody i jej
argumentów
biblioteki
cytat
Blitz++
Boost.Units
narzędzia
gnuplot
doświadczenia z zajęć z C++ na Hożej
dostępność bezpłatnych, otwartych i aktualnie rozwijanych bibliotek:
do analizy wymiarowej kodu podczas kompilacji
(każda zmienna/stała/wyrażenie mają przyporządkowane jednostki
fizyczne, których spójność jest sprawdzana w czasie kompilacji, bez
wpływu na wydajność kodu wynikowego)
do czytelnego (dla człowieka) i łatwego do optymalizacji (dla
kompilatora) opisywania operacji na macierzach bez użycia pętli
(integralna część języka w Fortranie ­90)
do obliczeń równoległych (wątki, procesy, OpenMP, MPI)
wygodne mechanizmy podziału kodu programu na części (klasy, wzorce),
interakcji z systemem operacyjnym (POSIX) i obsługi błędów (wyjątki)
od autora C++ (B. Stroustrup, ref. na slajdzie „cytat”)
... physics ... is a field where performance is essential. If a program in this
field is significantly slower than a conventional Fortran program, it will be
discarded. ... C++ and modern programming techniques have met that
challenge. Using generic programming techniques, C++ vector and matrix
libraries have equaled and exceeded the performance of classical Fortran
code (for example, POOMA, MTL and ROOT).
Dlaczego C++? (a nie FORTRAN) (2/2)
Numerical Recipes (http://nr.com/)
Ćwiczenia 1
o ćwiczeniach
Ćwiczenie
plan ćwiczenia
... the Third Edition... Its code is wholeheartedly object oriented,
demonstrating diverse techniques for using the full power of C++.
... Numerical Recipes in Fortran 90 (Second Edition) and Numerical
Recipes in Fortran 77 (Second Edition) will be available for a short while
after the Third Edition is published, but these too are planned to go out of
print eventually.
schemat upstream
szkic kodu
przykł. wykres
C++
dlaczego C++? (1)
LLNL (https://computation.llnl.gov/casc/sundials/)
... a general movement away from FORTRAN and toward C in scientific
computing is apparent.
dlaczego C++? (2)
literatura
kompilatory
przeciążanie oper.
definicja klasy,
metody i jej
argumentów
CERN (np. http://root.cern.ch/)
... CERN itself use and have created a C++ code base of an estimated 50
million lines of code. Tens years, thousands of developers. About 10,000
people using C++ ...
biblioteki
cytat
Blitz++
Boost.Units
narzędzia
gnuplot
OpenFOAM (http://openfoam.com/)
... inheritance, template classes, virtual functions and operator overloading.
These features are not available in many languages that purport to be
object-orientated but actually have very limited object-orientated capability,
such as FORTRAN-90. C++, however, possesses all these features...
Dlaczego C++? (a nie FORTRAN) (2/2)
Numerical Recipes (http://nr.com/)
Ćwiczenia 1
o ćwiczeniach
Ćwiczenie
plan ćwiczenia
... the Third Edition... Its code is wholeheartedly object oriented,
demonstrating diverse techniques for using the full power of C++.
... Numerical Recipes in Fortran 90 (Second Edition) and Numerical
Recipes in Fortran 77 (Second Edition) will be available for a short while
after the Third Edition is published, but these too are planned to go out of
print eventually.
schemat upstream
szkic kodu
przykł. wykres
C++
dlaczego C++? (1)
LLNL (https://computation.llnl.gov/casc/sundials/)
... a general movement away from FORTRAN and toward C in scientific
computing is apparent.
dlaczego C++? (2)
literatura
kompilatory
przeciążanie oper.
definicja klasy,
metody i jej
argumentów
CERN (np. http://root.cern.ch/)
... CERN itself use and have created a C++ code base of an estimated 50
million lines of code. Tens years, thousands of developers. About 10,000
people using C++ ...
biblioteki
cytat
Blitz++
Boost.Units
narzędzia
gnuplot
OpenFOAM (http://openfoam.com/)
... inheritance, template classes, virtual functions and operator overloading.
These features are not available in many languages that purport to be
object-orientated but actually have very limited object-orientated capability,
such as FORTRAN-90. C++, however, possesses all these features...
Dlaczego C++? (a nie FORTRAN) (2/2)
Numerical Recipes (http://nr.com/)
Ćwiczenia 1
o ćwiczeniach
Ćwiczenie
plan ćwiczenia
... the Third Edition... Its code is wholeheartedly object oriented,
demonstrating diverse techniques for using the full power of C++.
... Numerical Recipes in Fortran 90 (Second Edition) and Numerical
Recipes in Fortran 77 (Second Edition) will be available for a short while
after the Third Edition is published, but these too are planned to go out of
print eventually.
schemat upstream
szkic kodu
przykł. wykres
C++
dlaczego C++? (1)
LLNL (https://computation.llnl.gov/casc/sundials/)
... a general movement away from FORTRAN and toward C in scientific
computing is apparent.
dlaczego C++? (2)
literatura
kompilatory
przeciążanie oper.
definicja klasy,
metody i jej
argumentów
CERN (np. http://root.cern.ch/)
... CERN itself use and have created a C++ code base of an estimated 50
million lines of code. Tens years, thousands of developers. About 10,000
people using C++ ...
biblioteki
cytat
Blitz++
Boost.Units
narzędzia
gnuplot
OpenFOAM (http://openfoam.com/)
... inheritance, template classes, virtual functions and operator overloading.
These features are not available in many languages that purport to be
object-orientated but actually have very limited object-orientated capability,
such as FORTRAN-90. C++, however, possesses all these features...
Dlaczego C++? (a nie FORTRAN) (2/2)
Numerical Recipes (http://nr.com/)
Ćwiczenia 1
o ćwiczeniach
Ćwiczenie
plan ćwiczenia
... the Third Edition... Its code is wholeheartedly object oriented,
demonstrating diverse techniques for using the full power of C++.
... Numerical Recipes in Fortran 90 (Second Edition) and Numerical
Recipes in Fortran 77 (Second Edition) will be available for a short while
after the Third Edition is published, but these too are planned to go out of
print eventually.
schemat upstream
szkic kodu
przykł. wykres
C++
dlaczego C++? (1)
LLNL (https://computation.llnl.gov/casc/sundials/)
... a general movement away from FORTRAN and toward C in scientific
computing is apparent.
dlaczego C++? (2)
literatura
kompilatory
przeciążanie oper.
definicja klasy,
metody i jej
argumentów
CERN (np. http://root.cern.ch/)
... CERN itself use and have created a C++ code base of an estimated 50
million lines of code. Tens years, thousands of developers. About 10,000
people using C++ ...
biblioteki
cytat
Blitz++
Boost.Units
narzędzia
gnuplot
OpenFOAM (http://openfoam.com/)
... inheritance, template classes, virtual functions and operator overloading.
These features are not available in many languages that purport to be
object-orientated but actually have very limited object-orientated capability,
such as FORTRAN-90. C++, however, possesses all these features...
C++: polecana literatura
Ćwiczenia 1
Bjarne Stroustrup1
(autor C++, AT&T)
The C++ Programming
Language
Paweł Klimczewski2
(FUW/IFT/KMMF)
Programowanie w języku C++
w środowisku systemu UNIX
S. Paoli et al.
(CERN)
CERN C++ Coding
Standard Spec.3
o ćwiczeniach
Ćwiczenie
plan ćwiczenia
schemat upstream
szkic kodu
przykł. wykres
C++
dlaczego C++? (1)
dlaczego C++? (2)
literatura
kompilatory
przeciążanie oper.
definicja klasy,
metody i jej
argumentów
biblioteki
cytat
Blitz++
Boost.Units
narzędzia
gnuplot
1: strona domowa BS: http://www.research.att.com/˜ bs/
2: wykłady o C++ na stronie domowej PK: http://www.fuw.edu.pl/˜ pablo/programowanie1/wyklad.php
3: http://pst.cern.ch/HandBookWorkBook/Handbook/Programming/CodingStandard/c++standard.pdf
Kompilatory C++ w sieci pracowniczej IGF
Ćwiczenia 1
o ćwiczeniach
Ćwiczenie
plan ćwiczenia
schemat upstream
szkic kodu
przykł. wykres
otwarte/bezpłatne kompilatory dostępne na wizardzie
LLVM Clang: clang++
(/APPS/llvm/bin/clang++)
GNU Compiler Collection: g++ 4.3.3 (obsługuje OpenMP)
(/opt/gcc/gcc-4.3.3/bin/g++)
GNU Compiler Collection: g++ 4.1.2
(/usr/bin/g++)
C++
dlaczego C++? (1)
dlaczego C++? (2)
literatura
kompilatory
kompilacja do obliczeń równoległych przy użyciu MPI
przeciążanie oper.
definicja klasy,
metody i jej
argumentów
biblioteki
cytat
Blitz++
Boost.Units
narzędzia
gnuplot
OpenMPI + g++ 4.3.3
(/opt/openmpi/bin/mpic++)
MPICH2 + g++ 4.3.3
(/EXPORT/gdl/Linux-x86 64/bin/mpic++)
LAM/MPI + g++ 4.3.3
(/opt/lam-mpi/bin/mpic++)
C++: przeciążanie operatorów
Ćwiczenia 1
o ćwiczeniach
Ćwiczenie
plan ćwiczenia
schemat upstream
szkic kodu
przykł. wykres
C++
dlaczego C++? (1)
dlaczego C++? (2)
literatura
kompilatory
przeciążanie oper.
definicja klasy,
metody i jej
argumentów
biblioteki
cytat
Blitz++
Boost.Units
narzędzia
gnuplot
~/Private/IGF-PhD/Dydaktyka/MNFA2011/cwiczenia/Cwiczenie_1/kod/cw1.cpp.html
przykład: „«” strawne dla gnuplota
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
10/19/
# include <boost/units/systems/si.hpp>
using namespace boost::units;
# include <blitz/array.h>
using namespace blitz;
typedef double real_t;
typedef quantity<si::dimensionless, real_t> quant;
/// gnuplot-digestible output for Blitz
ostream& operator<<(ostream& os, const Array<quant, 1>& x)
{
for (int i=x.lbound(0); i<=x.ubound(0); ++i) os << real_t(x(i)) << endl;
return os;
}
// advection operator
class adv_upstream
{
public: void op(Array<quant, 1> *psi[], const Range &i,
int n, const quantity<si::dimensionless, real_t> &C)
{
(*psi[n+1])(i) -= C * (
9
10 /// gnuplot-digestible output for Blitz
11 ostream& operator<<(ostream& os, const Array<quant, 1>& x)
12 {
13
for (int i=x.lbound(0); i<=x.ubound(0); ++i) os << real_t(x(
14
return os;
15 }
16
przykład:
schematoperator
adwekcyjny „upstream”
17 // advection
18 class adv_upstream
19 {
20
public: void op(Array<quant, 1> *psi[], const Range &i,
21
int n, const quantity<si::dimensionless, real_t> &C)
22
{
23
(*psi[n+1])(i) -= C * (
24
C > 0.
25
? (*psi[n])(i) - (*psi[n])(i-1)
26
: (*psi[n])(i+1) - (*psi[n])(i)
27
);
28
}
29 };
30
31 // main

32 int main()

n
n

33 {
i
i−1
n+1
n
34
// parameters (FIXME: should be taken from command-line opti
n
n
35
inti nx = 32, i nt = 64; 

i+1
36
quantity<si::length, real_t>
dx = 1 *i si::metres;
37
quantity<si::time, real_t> dt = 1 * si::seconds;
38
quantity<si::velocity, real_t> u = -.1 * si::metres / si::se
39
quantity<si::dimensionless, real_t> C = u * dt / dx;
C++: definicja klasy, metody i jej argumentów
Ćwiczenia 1
o ćwiczeniach
Ćwiczenie
plan ćwiczenia
schemat upstream
szkic kodu
przykł. wykres
C++
dlaczego C++? (1)
dlaczego C++? (2)
literatura
kompilatory
przeciążanie oper.
definicja klasy,
metody i jej
argumentów
biblioteki
cytat
Blitz++
Boost.Units
narzędzia
gnuplot
ψ
=ψ −C ·
(ψ − ψ
(ψ
) C >0
−ψ ) C ¬0
Stroustrup: C++ Programming Styles and Libraries1
Ćwiczenia 1
o ćwiczeniach
Without a good library, most interesting tasks are
hard to do in C++; but given a good library, almost
any task can be made easy.
Ćwiczenie
plan ćwiczenia
schemat upstream
szkic kodu
przykł. wykres
C++
dlaczego C++? (1)
Here ”easy” means that the programming language
isn’t a source of significant complexity so that a
programmer can concentrate on the fundamental
problems of the task in hand.
dlaczego C++? (2)
literatura
kompilatory
przeciążanie oper.
definicja klasy,
metody i jej
argumentów
biblioteki
cytat
Blitz++
Boost.Units
narzędzia
gnuplot
1
http://www2.research.att.com/ bs/style and libraries.pdf
18 class adv_upstream
18 class adv_upstream
19 {
19 {
20
public: void op(Array<quant, 1> *psi[], const Range &i,
20
public:
1> *psi[], const
Range&C)
&i,
21
int n, void
constop(Array<quant,
quantity<si::dimensionless,
real_t>
21
22
{ int n, const quantity<si::dimensionless, real_t> &C)
22
{ (*psi[n+1])(i) -= C * (
23
23
(*psi[n+1])(i)
-= C * (
24
C > 0.
24
C ?> (*psi[n])(i)
0.
25
- (*psi[n])(i-1)
dokumentacja:
http://www.oonumerics.org/blitz/docs/
25
(*psi[n])(i) - -(*psi[n])(i-1)
26
:? (*psi[n])(i+1)
(*psi[n])(i)
26
: (*psi[n])(i+1) - (*psi[n])(i)
27
);
podobne
biblioteki w C++: Boost.MultiArray, Armadillo, MTL, . . .
27
28
} );
28 }; }
29
w innych językach: część Fortrana ­90, . . . a
29 };
30
30
1 //
# main
include <boost/units/systems/si.hpp>
31
31
// main
2 int
using
namespace boost::units;
32
main()
32
int
main()
3
33 {
33
{ //
4 #
include
<blitz/array.h>
34
parameters
(FIXME: should be taken from command-line options)
34
// parameters
(FIXME:
5 using
namespace
35
int
nx
= 32, ntblitz;
= 64; should be taken from command-line options)
35
int nx = 32, nt = 64;real_t> dx = 1 * si::metres;
6
36
quantity<si::length,
36
quantity<si::length,
real_t>
* si::metres;
7 typedef
double real_t;
37
quantity<si::time,
real_t>
dt dx
= 1= *1 si::seconds;
37
quantity<si::time,
real_t>
dt =u 1= real_t>
*-.1
si::seconds;
8 typedef
quantity<si::dimensionless,
quant;
38
quantity<si::velocity,
real_t>
* si::metres
/ si::seconds;
38
quantity<si::velocity, real_t>
u = -.1
9
39
quantity<si::dimensionless,
real_t>
C = *u si::metres
* dt / dx; / si::seconds;
. 40
.39. ///quantity<si::dimensionless,
real_t>
C = u * dt / dx;
10
gnuplot-digestible output for
Blitz
40 ostream&
11
operator<<(ostream&
Array<quant,
41
// memory
allocation (FIXME:os,
no const
deallocation
yet!) 1>& x)
41 { Array<quant,
// memory allocation
(FIXME: no deallocation yet!)
12
42
1> *psi[2];
42
Array<quant,
1>
13
i=x.lbound(0);
++i) os << real_t(x(i))
<< endl;
43
for
(int n=0;
n <*psi[2];
2; ++n)i<=x.ubound(0);
psi[n] = new Array<quant,
1>(Range(-1,nx));
43
for (int
n=0;*adv
n < =2;new
++n)
psi[n] = new Array<quant, 1>(Range(-1,nx));
14
return
os;
44
adv_upstream
adv_upstream();
. 45
.15
. } adv_upstream *adv = new adv_upstream();
44
45
46
// initial condition
16
46 //(*psi[0])(Range(nx/4,
//
initial operator
condition nx/2)) = 1;
47
17
advection
47 class
(*psi[0])(Range(nx/4,
nx/2)) = 1;
48
18
adv_upstream
48 { // integration loop
49
19
49
// integration
loop
50
for
(int void
t = 0;
t < nt; ++t) 1> *psi[], const Range &i,
20
public:
op(Array<quant,
50 a dla{for
(int
t =np.
0;numexpr
t < nt;
++t)
51
Pythona
istnieje
(http://code.google.com/p/numexpr/)
ale tu&C)
optymalizacja następuje w
21
int
n,
const
quantity<si::dimensionless,
real_t>
51
{
czasie
a nie w czasie kompilacji – mniej wydajne;
52
22 wykonania,
{ // output
52
//
output
dla
C#
istnieje
np.
dynmatrixmath
(http://www.codeproject.com/KB/recipes/dynmatrixmath.aspx)
53
cout
<< *psi[0] -=
<< Cendl
23
(*psi[n+1])(i)
* ( << endl;
53
cout
54
24
C > <<
0. *psi[0] << endl << endl;
Blitz++: wydajne (optymalizacja przez kompilator)
i czytelne (dla człowieka) operacje macierzowe
Ćwiczenia 1
o ćwiczeniach
Ćwiczenie
plan ćwiczenia
schemat upstream
szkic kodu
przykł. wykres
C++
dlaczego C++? (1)
dlaczego C++? (2)
literatura
kompilatory
przeciążanie oper.
definicja klasy,
metody i jej
argumentów
biblioteki
cytat
Blitz++
Boost.Units
narzędzia
gnuplot
przykład: alokacja dwóch tablic i warunek początkowy
11 ostream& operator<<(ostream& os, const Array<quant, 1>& x)
12 {
13
for (int i=x.lbound(0); i<=x.ubound(0); ++i) os << real_t(x(i)) << endl
14
return os;
15 }
16
17 // advection operator
18 class adv_upstream
19 {
20
public: void op(Array<quant, 1> *psi[], const Range &i,
21
int n, const quantity<si::dimensionless, real_t>
&C)
2
22
{
23
(*psi[n+1])(i) -= C * (
24
C > 0.
25
? (*psi[n])(i) - (*psi[n])(i-1)
26
: (*psi[n])(i+1) - (*psi[n])(i)
27
);
1 # include
<boost/units/systems/si.hpp>
28
}
2 using
namespace boost::units;
29 };
.30
.3.
4 #
include <blitz/array.h>
31
// main
5 using
namespace blitz;
32
int main()
6 {
33
34
// parameters
should be taken from command-line options)
7 typedef
double(FIXME:
real_t;
35
int nx =quantity<si::dimensionless,
32, nt = 64;
8 typedef
real_t> quant;
36
quantity<si::length, real_t> dx = 1 * si::metres;
9
37
quantity<si::time, real_t> dt = 1 * si::seconds;
10
gnuplot-digestiblereal_t>
outputu for
38 ///
quantity<si::velocity,
= -.1Blitz
* si::metres / si::seconds;
11
operator<<(ostream&
os, Cconst
1>& x)
39 ostream&
quantity<si::dimensionless,
real_t>
= u * Array<quant,
dt / dx;
12
40 {
41
//
(FIXME: i<=x.ubound(0);
no deallocation yet!)
13
formemory
(int allocation
i=x.lbound(0);
++i) os << real_t(x(i
42
Array<quant,
14
return os; 1> *psi[2];
43 } for (int n=0; n < 2; ++n) psi[n] = new Array<quant, 1>(Range(-1,nx));
15
44
adv_upstream *adv = new adv_upstream();
2
16
45 dla Pythona istnieje np. DimPy (http://dimpy.sf.net/), a dla F90 np. PHYSUNITS
17
//
operator
(http://rime.aos.wisc.edu/gpetty/physunits.html)
ale ich wykorzystanie wpływa na wydajność obliczeń
46
//advection
initial condition
Boost.Units: analiza wymiarowa podczas kompilacji
Ćwiczenia 1
o ćwiczeniach
Ćwiczenie
plan ćwiczenia
schemat upstream
szkic kodu
przykł. wykres
C++
dlaczego C++? (1)
dlaczego C++? (2)
literatura
kompilatory
przeciążanie oper.
definicja klasy,
metody i jej
argumentów
biblioteki
cytat
Blitz++
Boost.Units
narzędzia
gnuplot
dokumentacja:
http://www.boost.org/doc/libs/release/libs/units/
odpowiedniki w innych językach: brak?
przykład: liczba Couranta, ∆X , ∆t, U
Gnuplot: różne wskazówki
Ćwiczenia 1
wykreślanie danych ze standardowego wyjścia innego programu
o ćwiczeniach
Ćwiczenie
gnuplot> help special-filenames
gnuplot> plot ’< for i in {1,3,2}; do echo $i; done;’ with linesp
plan ćwiczenia
schemat upstream
szkic kodu
przykł. wykres
C++
dlaczego C++? (1)
numery kolumn o specjalnym znaczeniu
gnuplot> help pseudocolumns
dlaczego C++? (2)
0 numer rekordu w zbiorze danych
literatura
kompilatory
-2 numer zbioru danych
przeciążanie oper.
definicja klasy,
metody i jej
argumentów
biblioteki
cytat
Blitz++
Boost.Units
narzędzia
gnuplot
prosty wykres 3D przydatny w zadaniu
1
2
3
4
set xlabel "x"
set ylabel "t"
set zlabel "psi"
splot "< ./a.out " using 0:-2:1 notitle with lines palette

Podobne dokumenty