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