Modelowanie numeryczne w fizyce atmosfery Ćwiczenia 1



Podobne dokumenty
Modelowanie numeryczne w fizyce atmosfery Ćwiczenia 3

Programowanie. Sylwester Arabas. prowadzący ćwiczenia: Magdalena Kuich, Krzysztof Piasecki, Łukasz Dulny. Wydział Fizyki Uniwersytetu Warszawskiego

Wykład 1. Program przedmiotu. Programowanie Obiektowe (język C++) Literatura. Program przedmiotu c.d.:

Programowanie w C++ Wykład 1. Katarzyna Grzelak. 26 luty K.Grzelak (Wykład 1) Programowanie w C++ 1 / 28

Programowanie - wykład 4

Wykład 1. Program przedmiotu. Programowanie (język C++) Literatura. Program przedmiotu c.d.:

Programowanie w C++ Wykład 1. Katarzyna Grzelak. 25 luty K.Grzelak (Wykład 1) Programowanie w C++ 1 / 38

Wykład. Materiały bazują częściowo na slajdach Marata Dukhana

Technologie cyfrowe semestr letni 2018/2019

Kurs programowania. Wykład 9. Wojciech Macyna. 28 kwiecień 2016

wykład V uzupełnienie notatek: dr Jerzy Białkowski Programowanie C/C++ Język C++ klasy i obiekty wykład V dr Jarosław Mederski Spis Język C++ - klasy

Programowanie obiektowe w języku

Szablony funkcji i szablony klas

Dariusz Brzeziński. Politechnika Poznańska, Instytut Informatyki

Katowice, plan miasta: Skala 1: = City map = Stadtplan (Polish Edition)

Programowanie Obiektowo Zorientowane w języku c++ Przestrzenie nazw

Wykład 1

1 Podstawy c++ w pigułce.

Technologie cyfrowe semestr letni 2018/2019

Kurs programowania. Wykład 2. Wojciech Macyna. 17 marca 2016

FUNKCJE WZORCOWE. Wykład 10. Programowanie Obiektowe (język C++) Funkcje wzorcowe wprowadzenie (2) Funkcje wzorcowe wprowadzenie (1)

Kurs programowania. Wykład 13. Wojciech Macyna. 14 czerwiec 2017

Programowanie Obiektowew języku C++ Zadania L2

wykład IV uzupełnienie notatek: dr Jerzy Białkowski Programowanie C/C++ Język C, a C++. wykład IV dr Jarosław Mederski Spis Język C++ - wstęp

Szablon klasy std::vector

Język C++ wykład VI. uzupełnienie notatek: dr Jerzy Białkowski. Programowanie C/C++ Język C++ wykład VI. dr Jarosław Mederski.

1. Pierwszy program. Kompilator ignoruje komentarze; zadaniem komentarza jest bowiem wyjaśnienie programu człowiekowi.

Szablony funkcji i klas (templates)

Aby uzyskać zaliczenie w pierwszym terminie (do 30 stycznia 2018) rozliczyć trzeba co najmniej 8 projektów, po 4 z każdej z części: C++ oraz Python.

Wyjątki (exceptions)

C++ język nie dla ludzi o słabych nerwach. Małgorzata Bieńkowska

IMIĘ i NAZWISKO: Pytania i (przykładowe) Odpowiedzi

Język C++ wykład VIII

ARNOLD. EDUKACJA KULTURYSTY (POLSKA WERSJA JEZYKOWA) BY DOUGLAS KENT HALL

Składnia C++ Programowanie Obiektowe Mateusz Cicheński

Programowanie Obiektowew języku C++ Zadania L4

Podstawy języka C++ Maciej Trzebiński. Instytut Fizyki Jądrowej Polskiej Akademii Nauk. Praktyki studenckie na LHC IVedycja,2016r.

Programowanie obiektowe, wykład nr 6. Klasy i obiekty

Programowanie proceduralne w języku C++ Podstawy

Wprowadzenie do programowanie obiektowego w języku C++

Techniki programowania INP001002Wl rok akademicki 2018/19 semestr letni. Wykład 8. Karol Tarnowski A-1 p.

Wstęp. Przetwarzanie równoległe. Krzysztof Banaś Obliczenia równoległe 1

Hard-Margin Support Vector Machines

Wykład I. Programowanie II - semestr II Kierunek Informatyka. dr inż. Janusz Słupik. Wydział Matematyki Stosowanej Politechniki Śląskiej

Wprowadzenie do szablonów klas

Programowanie w C++ Wykład 8. Katarzyna Grzelak. 7 maja K.Grzelak (Wykład 8) Programowanie w C++ 1 / 31

Stargard Szczecinski i okolice (Polish Edition)

Jzyk C++ cz 3. Jarosław Gramacki Instytut Informatyki i Elektroniki ( $)*)+' *, - ( ' )*'.' '',*/ *, ','*0) 1 / ) %*+ 2'' 2" ( $%%) )'20 )*0) 1 / )

Wykład 6 Dziedziczenie cd., pliki

Programowanie. Sylwester Arabas. prowadzący ćwiczenia: Magdalena Kuich, Krzysztof Piasecki, Łukasz Dulny. Wydział Fizyki Uniwersytetu Warszawskiego

Microsoft IT Academy kurs programowania

Strona główna. Strona tytułowa. Programowanie. Spis treści. Sobera Jolanta Strona 1 z 26. Powrót. Full Screen. Zamknij.

Mechanizm dziedziczenia

Programowanie, część I

Programowanie. Sylwester Arabas. prowadzący ćwiczenia: Magdalena Kuich, Krzysztof Piasecki, Łukasz Dulny. Wydział Fizyki Uniwersytetu Warszawskiego

Programowanie w C++ Wykład 12. Katarzyna Grzelak. 28 maja K.Grzelak (Wykład 12) Programowanie w C++ 1 / 27

Wstęp. Przetwarzanie współbieżne, równoległe i rozproszone

deep learning for NLP (5 lectures)

Machine Learning for Data Science (CS4786) Lecture 11. Spectral Embedding + Clustering

Wyjątki. Wyjątki. Bogdan Kreczmer. Katedra Cybernetyki i Robotyki Politechnika Wrocławska

Techniki programowania INP001002Wl rok akademicki 2017/18 semestr letni. Wykład 7. Karol Tarnowski A-1 p.

1 Wskaźniki i zmienne dynamiczne, instrukcja przed zajęciami

Język C++ Różnice między C a C++

Programowanie i struktury danych

Programowanie Obiektowew języku C++ Zadania L4

Programowanie Komputerów

Programowanie w C++ Wykład 11. Katarzyna Grzelak. 13 maja K.Grzelak (Wykład 11) Programowanie w C++ 1 / 30

Karpacz, plan miasta 1:10 000: Panorama Karkonoszy, mapa szlakow turystycznych (Polish Edition)

Dzisiejszy wykład. Wzorce projektowe. Visitor Client-Server Factory Singleton

Programowanie obiektowe

Programowanie Obiektowew języku C++ Zadania L9

Programowanie I. Kornel Warwas. ATH Katedra Matematyki i Informatyki

Referencje do zmiennych i obiektów

Laboratorium 1 Temat: Przygotowanie środowiska programistycznego. Poznanie edytora. Kompilacja i uruchomienie prostych programów przykładowych.

Programowanie Obiektowew języku C++ Zadania L8

DYNAMICZNE PRZYDZIELANIE PAMIECI

Paostwowa Wyższa Szkoła Zawodowa w Płocku Dariusz Wardowski

Język ludzki kod maszynowy

Dla każdej operacji łącznie tworzenia danych i zapisu ich do pliku przeprowadzić pomiar czasu wykonania polecenia. Wyniki przedstawić w tabelce.

Wprowadzenie do języka Java

Opis zagadnieo 1-3. Iteracja, rekurencja i ich realizacja

Programowanie Proceduralne

Proposal of thesis topic for mgr in. (MSE) programme in Telecommunications and Computer Science

public: // interfejs private: // implementacja // składowe klasy protected: // póki nie będziemy dziedziczyć, // to pole nas nie interesuje

TEMAT : KLASY POLIMORFIZM

PARADYGMATY PROGRAMOWANIA Wykład 4

Programowanie w C++ z użyciem kontenerów - parę przykładów programów Opracowanie: dr hab. Mirosław R. Dudek, prof. UZ

Programowanie 2. Język C++. Wykład 3.

Zaawansowany kurs języka Python

Składnia C++ Programowanie Obiektowe Mateusz Cicheński

Zaawansowane programowanie w języku C++ Programowanie obiektowe

SSW1.1, HFW Fry #20, Zeno #25 Benchmark: Qtr.1. Fry #65, Zeno #67. like

Programowanie w C++ Wykład 6. Katarzyna Grzelak. kwiecień K.Grzelak (Wykład 6) Programowanie w C++ 1 / 40

Miedzy legenda a historia: Szlakiem piastowskim z Poznania do Gniezna (Biblioteka Kroniki Wielkopolski) (Polish Edition)

Wstęp do Programowania 2

Wykorzystanie możliwości serwerów Online Judge w przygotowaniu drużyny oraz w organizacji zawodów w programowaniu

Język C++ wykład VII. uzupełnienie notatek: dr Jerzy Białkowski. Programowanie C/C++ Język C++ wykład VII. dr Jarosław Mederski. Spis.

Programowanie w C++ Wykład 5. Katarzyna Grzelak. 16 kwietnia K.Grzelak (Wykład 1) Programowanie w C++ 1 / 27

Revenue Maximization. Sept. 25, 2018

Identyfikacje typu na etapie. wykonania (RTTI)

Transkrypt:

dlaczego? (1) dlaczego? (2) Modelowanie numeryczne w fizyce atmosfery Sylwester Arabas (ćwiczenia do wykładu dr. hab. inż. Lecha Łobockiego) Instytut Geofizyki, Wydział Fizyki Uniwersytetu Warszawskiego 20. października 2011 r.

O zajęciach Prowadzący dlaczego? (1) dlaczego? (2) o mnie: http://www.igf.fuw.edu.pl/ slayoo/ kontakt: sarabas@igf.fuw.edu.pl / pok. 424A, IV piętro IGF (w ramach pracowni geofizycznej) Całkowanie numeryczne równania adwekcji z wykorzystaniem obliczeń równoległych Zasady zaliczenia, napisanie programu, programu testującego, dokumentacji programu i raportu z doświadczenia numerycznego język: dowolny obiektowy (, Python, Fortran 90... ) na ćwiczeniach/konsultacjach: przykłady w Materiały do ćwiczeń http://www.igf.fuw.edu.pl/ slayoo/mnfa2011/

(w kontekście pracowni geofiz.) dlaczego? (1) dlaczego? (2) 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) 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

(w kontekście pracowni geofiz.) dlaczego? (1) dlaczego? (2) 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) 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

(w kontekście pracowni geofiz.) dlaczego? (1) dlaczego? (2) 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) 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

(w kontekście pracowni geofiz.) dlaczego? (1) dlaczego? (2) 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) 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

(w kontekście pracowni geofiz.) dlaczego? (1) dlaczego? (2) 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) 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 równanie adwekcji pola ψ dla stałej prędkości u dlaczego? (1) dlaczego? (2) ψ t = u x ψ ψ t C = u t x = u ψ x (l. Couranta) schemat całkowania numerycznego upstream / upwind ψ n+1 i = ψ n i C ( ) ψ n i ψi 1 n C > 0 ( ) ψ n i+1 ψi n C 0

dlaczego? (1) dlaczego? (2) 43 for (int n=0; n < 2; ++n) psi[n] = new Array<quant, 44 adv_upstream *adv = new adv_upstream(); szkic 45 kodu 46 // initial condition 47 (*psi[0])(range(nx/4, nx/2)) = 1; 48 49 // integration loop 50 for (int t = 0; t < nt; ++t) 51 { 52 // output 53 cout << *psi[0] << endl << endl; 54 55 // copying data from psi[n] -> psi[n+1] 56 *psi[1] = *psi[0]; 57 58 // periodic boundary 59 (*psi[1])(range(-1)) = (*psi[0])(range(nx-1)); 60 (*psi[1])(range(nx)) = (*psi[0])(range(0)); 61 62 // advection operator 63 adv->op(psi, Range(0, nx-1), 0, C); 64 65 // swapping arrays 66 cyclearrays(*psi[0], *psi[1]); 67 } 68 }

przykładowy wykres: (> call cw1.gpi ) dlaczego? (1) dlaczego? (2)

Dlaczego? (a nie FORTRAN) (1/2) w kontekście naszych ćwiczeń dlaczego? (1) dlaczego? (2) doświadczenia z zajęć z 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 (B. Stroustrup, ref. na slajdzie )... 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.... and modern programming techniques have met that challenge. Using generic programming techniques, vector and matrix libraries have equaled and exceeded the performance of classical Fortran code (for example, POOMA, MTL and ROOT).

Dlaczego? (a nie FORTRAN) (1/2) w kontekście naszych ćwiczeń dlaczego? (1) dlaczego? (2) doświadczenia z zajęć z 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 (B. Stroustrup, ref. na slajdzie )... 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.... and modern programming techniques have met that challenge. Using generic programming techniques, vector and matrix libraries have equaled and exceeded the performance of classical Fortran code (for example, POOMA, MTL and ROOT).

Dlaczego? (a nie FORTRAN) (1/2) w kontekście naszych ćwiczeń dlaczego? (1) dlaczego? (2) doświadczenia z zajęć z 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 (B. Stroustrup, ref. na slajdzie )... 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.... and modern programming techniques have met that challenge. Using generic programming techniques, vector and matrix libraries have equaled and exceeded the performance of classical Fortran code (for example, POOMA, MTL and ROOT).

Dlaczego? (a nie FORTRAN) (1/2) w kontekście naszych ćwiczeń dlaczego? (1) dlaczego? (2) doświadczenia z zajęć z 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 (B. Stroustrup, ref. na slajdzie )... 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.... and modern programming techniques have met that challenge. Using generic programming techniques, vector and matrix libraries have equaled and exceeded the performance of classical Fortran code (for example, POOMA, MTL and ROOT).

Dlaczego? (a nie FORTRAN) (1/2) w kontekście naszych ćwiczeń dlaczego? (1) dlaczego? (2) doświadczenia z zajęć z 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 (B. Stroustrup, ref. na slajdzie )... 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.... and modern programming techniques have met that challenge. Using generic programming techniques, vector and matrix libraries have equaled and exceeded the performance of classical Fortran code (for example, POOMA, MTL and ROOT).

Dlaczego? (a nie FORTRAN) (1/2) w kontekście naszych ćwiczeń dlaczego? (1) dlaczego? (2) doświadczenia z zajęć z 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 (B. Stroustrup, ref. na slajdzie )... 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.... and modern programming techniques have met that challenge. Using generic programming techniques, vector and matrix libraries have equaled and exceeded the performance of classical Fortran code (for example, POOMA, MTL and ROOT).

Dlaczego? (a nie FORTRAN) (1/2) w kontekście naszych ćwiczeń dlaczego? (1) dlaczego? (2) doświadczenia z zajęć z 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 (B. Stroustrup, ref. na slajdzie )... 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.... and modern programming techniques have met that challenge. Using generic programming techniques, vector and matrix libraries have equaled and exceeded the performance of classical Fortran code (for example, POOMA, MTL and ROOT).

Dlaczego? (a nie FORTRAN) (2/2) Numerical Recipes (http://nr.com/) dlaczego? (1) dlaczego? (2)... the Third Edition... Its code is wholeheartedly object oriented, demonstrating diverse techniques for using the full power of.... 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. LLNL (https://computation.llnl.gov/casc/sundials/)... a general movement away from FORTRAN and toward C in scientific computing is apparent. CERN (np. http://root.cern.ch/)... CERN itself use and have created a code base of an estimated 50 million lines of code. Tens years, thousands of developers. About 10,000 people using... 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., however, possesses all these features...

Dlaczego? (a nie FORTRAN) (2/2) Numerical Recipes (http://nr.com/) dlaczego? (1) dlaczego? (2)... the Third Edition... Its code is wholeheartedly object oriented, demonstrating diverse techniques for using the full power of.... 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. LLNL (https://computation.llnl.gov/casc/sundials/)... a general movement away from FORTRAN and toward C in scientific computing is apparent. CERN (np. http://root.cern.ch/)... CERN itself use and have created a code base of an estimated 50 million lines of code. Tens years, thousands of developers. About 10,000 people using... 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., however, possesses all these features...

Dlaczego? (a nie FORTRAN) (2/2) Numerical Recipes (http://nr.com/) dlaczego? (1) dlaczego? (2)... the Third Edition... Its code is wholeheartedly object oriented, demonstrating diverse techniques for using the full power of.... 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. LLNL (https://computation.llnl.gov/casc/sundials/)... a general movement away from FORTRAN and toward C in scientific computing is apparent. CERN (np. http://root.cern.ch/)... CERN itself use and have created a code base of an estimated 50 million lines of code. Tens years, thousands of developers. About 10,000 people using... 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., however, possesses all these features...

Dlaczego? (a nie FORTRAN) (2/2) Numerical Recipes (http://nr.com/) dlaczego? (1) dlaczego? (2)... the Third Edition... Its code is wholeheartedly object oriented, demonstrating diverse techniques for using the full power of.... 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. LLNL (https://computation.llnl.gov/casc/sundials/)... a general movement away from FORTRAN and toward C in scientific computing is apparent. CERN (np. http://root.cern.ch/)... CERN itself use and have created a code base of an estimated 50 million lines of code. Tens years, thousands of developers. About 10,000 people using... 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., however, possesses all these features...

: polecana Bjarne Stroustrup 1 (autor, AT&T) The Programming Language Paweł Klimczewski 2 (FUW/IFT/KMMF) Programowanie w języku w środowisku systemu UNIX S. Paoli et al. (CERN) CERN Coding Standard Spec. 3 dlaczego? (1) dlaczego? (2) 1: strona domowa BS: http://www.research.att.com/ bs/ 2: wykłady o 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 w sieci pracowniczej IGF otwarte/bezpłatne 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++) dlaczego? (1) dlaczego? (2) kompilacja do obliczeń równoległych przy użyciu MPI 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++)

: przeciążanie operatorów dlaczego? (1) dlaczego? (2) przykład: «strawne dla a ~/Private/IGF-PhD/Dydaktyka/MNFA2011/cwiczenia/Cwiczenie_1/kod/cw1.cpp.html 1 # include <boost/units/systems/si.hpp> 2 using namespace boost::units; 3 4 # include <blitz/array.h> 5 using namespace blitz; 6 7 typedef double real_t; 8 typedef quantity<si::dimensionless, real_t> quant; 9 10 /// -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(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) 22 { 23 (*psi[n+1])(i) -= C * ( 10/19/

dlaczego? (1) dlaczego? (2) 9 10 /// -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 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) 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 przykład: schemat adwekcyjny upstream 31 // main 32 int main() 33 { (ψi n ψi 1) n C > 0 34 // parameters (FIXME: should be taken from command-line opti ψ n+1 i = ψ n i C (ψ n i+1 ψ n i ) C 0 35 int nx = 32, nt = 64; 36 quantity<si::length, real_t> dx = 1 * 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;

Stroustrup: Programming Styles and Libraries 1 dlaczego? (1) dlaczego? (2) Without a good library, most interesting tasks are hard to do in ; but given a good library, almost any task can be made easy. 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. 1 http://www2.research.att.com/ bs/style and libraries.pdf

dlaczego? (1) dlaczego? (2) 18 class adv_upstream 18 class adv_upstream 19 19 { 20 : public: void wydajne op(array<quant, (optymalizacja 1> *psi[], const przez Range &i, kompilator) 21 20 public: int n, void const op(array<quant, quantity<si::dimensionless, 1> *psi[], const real_t> Range &C) &i, 22 21 int n, const quantity<si::dimensionless, real_t> &C) 22 i czytelne { (dla człowieka) operacje macierzowe 23 (*psi[n+1])(i) -= 24 23 (*psi[n+1])(i) 0. -= C * ( 25 24 C > (*psi[n])(i) 0. - (*psi[n])(i-1) 26 25? (*psi[n])(i+1) (*psi[n])(i) - - (*psi[n])(i-1) (*psi[n])(i) 27 26 ); : (*psi[n])(i+1) - (*psi[n])(i) 28 27 ); 29 28 }; } 30 29 }; 31 30 1 // # main include <boost/units/systems/si.hpp> dokumentacja: http://www.oonumerics.org/blitz/docs/ podobne w : Boost.MultiArray, Armadillo, MTL,... w innych językach: część Fortrana 90,... a przykład: 32 31 2 int using // main main() namespace alokacjaboost::units; dwóch tablic i warunek początkowy 33 32 3 { int main() 34 33 4 #{ // include parameters <blitz/array.h> (FIXME: should be taken from command-line options) 35 34 5 using int // parameters nx namespace = 32, nt blitz; (FIXME: = 64; should be taken from command-line options) 36 35 6 quantity<si::length, int nx = 32, = 64; real_t> dx = 1 * si::metres; 37 36 7 typedef quantity<si::time, quantity<si::length, double real_t; real_t> real_t> dt dx = 1 = * 1 si::seconds; * si::metres; 38 37 8 typedef quantity<si::velocity, quantity<si::time, quantity<si::dimensionless, real_t> real_t> dt = u 1 = real_t> *-.1 si::seconds; * si::metres quant; / si::seconds; 39 38 9 quantity<si::dimensionless, quantity<si::velocity, real_t> real_t> u = -.1 C = * u si::metres * dt / dx; / si::seconds;. 40 10. 39. /// quantity<si::dimensionless, -digestible output for real_t> BlitzC = u * dt / dx; 41 11 40 ostream& // memory operator<<(ostream& allocation (FIXME: os, no const deallocation Array<quant, yet!) 1>& x) 42 12 41 { Array<quant, // memory allocation 1> *psi[2]; (FIXME: no deallocation yet!) 43 13 42 for Array<quant, (int n=0; i=x.lbound(0); 1> n < *psi[2]; 2; ++n) i<=x.ubound(0); psi[n] = new Array<quant, ++i) os << real_t(x(i)) 1>(Range(-1,nx)); << endl; 44 14 43 adv_upstream return for (int os; n=0; *adv n < = 2; new ++n) adv_upstream(); psi[n] = new Array<quant, 1>(Range(-1,nx));. 45 15. 44. } adv_upstream *adv = new adv_upstream(); 46 16 45 // initial condition 47 17 46 //(*psi[0])(range(nx/4, advection initial operator condition nx/2)) = 1; 48 18 47 class (*psi[0])(range(nx/4, adv_upstream nx/2)) = 1; 49 19 48 { // integration loop 50 20 49 for public: // integration (int void t = 0; op(array<quant, loop t < nt; ++t) 1> *psi[], const Range &i, 51 21 50 a dla { for Pythona int (int n, istnieje const t = np. 0; numexpr quantity<si::dimensionless, t < nt; (http://code.google.com/p/numexpr/) ++t) real_t> ale tu &C) optymalizacja następuje w czasie 52 22 51 wykonania, { // output a nie w czasie kompilacji mniej wydajne; dla 53 23 52 C# istnieje cout (*psi[n+1])(i) // np. output << dynmatrixmath *psi[0] -= (http://www.codeproject.com/kb/recipes/dynmatrixmath.aspx) << C endl * ( << endl; 54 24 53 cout C > << 0. *psi[0] << endl << endl;

dlaczego? (1) dlaczego? (2) 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 : analiza wymiarowa podczas kompilacji dokumentacja: http://www.boost.org/doc/libs/release/libs/units/ 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> odpowiedniki w innych językach: brak? 2 &C) 22 { 23 (*psi[n+1])(i) -= C * ( 24 C > 0. przykład: 25 liczba? (*psi[n])(i) Couranta, - (*psi[n])(i-1) X, t, U 26 : (*psi[n])(i+1) - (*psi[n])(i) 27 1 # include ); <boost/units/systems/si.hpp> 28 2 using } namespace boost::units; 29 };. 3 30.. 31 4 #// main include <blitz/array.h> 32 5 using int main() namespace blitz; 33 6 { 34 7 typedef // parameters double (FIXME: real_t; should be taken from command-line options) 35 8 typedef int nx = quantity<si::dimensionless, 32, = 64; 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 38 /// quantity<si::velocity, -digestible real_t> output u for = -.1 Blitz * si::metres / si::seconds; 11 39 ostream& quantity<si::dimensionless, operator<<(ostream& real_t> os, C const = u * Array<quant, dt / dx; 1>& x) 12 40 { 13 41 // for memory (int allocation i=x.lbound(0); (FIXME: i<=x.ubound(0); no deallocation yet!) ++i) os << real_t(x(i 14 42 Array<quant, return os; 1> *psi[2]; 15 43 } for (int n=0; n < 2; ++n) psi[n] = new Array<quant, 1>(Range(-1,nx)); 44 adv_upstream *adv = new adv_upstream(); 16 2 45 dla Pythona istnieje np. DimPy (http://dimpy.sf.net/), a dla F90 np. PHYSUNITS 17 (http://rime.aos.wisc.edu/gpetty/physunits.html) 46 advection initial condition operator ale ich wykorzystanie wpływa na wydajność obliczeń

Gnuplot: różne wskazówki dlaczego? (1) dlaczego? (2) wykreślanie danych ze standardowego wyjścia innego programu > help special-filenames > plot < for i in {1,3,2}; do echo $i; done; with linesp numery kolumn o specjalnym znaczeniu > help pseudocolumns 0 numer rekordu w zbiorze danych -2 numer zbioru danych prosty wykres 3D przydatny w zadaniu 1 set xlabel "x" 2 set ylabel "t" 3 set zlabel "psi" 4 splot "<./a.out " using 0:-2:1 notitle with lines palette