English version (wersja angielska)
strona główna
Liebmann - (jeszcze nieukończone) oprogramowanie do obliczeń z zakresu optyki cząstek naładowanych.
O programie
Oprogramowanie Liebmann ma docelowo służyć do modelowania układów elektronooptycznych.
Obecnie pozwala na wyznaczanie rozkładów pól elektrostatycznych w próżni (elektrody wyłącznie metalowe i próżnia, bez dielektryków).
Równanie Laplace'a
Program Liebmann potrafi rozwiązywać równanie Laplace'a.
Jest to równanie różniczkowe cząstkowe opisujące pole elektrostatyczne w próżni.
Zakłada się, że metalowe elektrody mają ustalone potencjały, natomiast w ich otoczeniu jest pole elektrostatyczne, którego rozkład chcemy wyznaczyć.
Chodzi o rozkład potencjału we wszystkich punkach siatki reprezentujących próżnię.
Poniższy przykład przedstawia problem niestandardowy. Jest to problem dwuwymiarowy (X-Y). Rysunek lewy przedstawia siatki numeryczne wykorzystywane w obliczeniach. Są na nich dwie płytki płaskorównległe w próżni. Mają one jednak różną długość. Siatka ma 200 wierszy i 200 kolumn. Elektroda zielona ma potencjał -1.0 [V]. Elektroda czerwona ma potecjał +1.0 [V]. Punkty białe w otoczeniu płytek to próżnia. Chcemy wyznaczyć rozkład potencjału w punktach reprezentujących próżnię. Można to wyliczyć np. metodą relaksacji, co potrafi program Liebmann. Środkowy obrazek przedstawia wynik obliczeń, tj. mapowanie wyliczonego potencjału na kolory. Algorytm mapowania typu "jet" (opisany w dokumentacji). Rysunek prawy przedstawia linie ekwipotencjalne wyznaczonego potencjału. Szczegółowy opis problemu jest w galerii (problem nr 9).
Obrazki na tej stronie mają ramki o szerokości 2 piksli.
Metoda relaksacyjna
Program Liebmann wykorzystuje metodę relaksacyjną (kolejne przybliżenia). Metoda jest nazywana metodą relaksacyjną Liebmanna. Celem jest wyznaczenie rozkładu potencjału elektrycznego w punktach reprezentujących próżnię. Metoda relaksacji polega na wykonaniu procedury relaksacji dla każdego punktu reprezentującego próżnię. Dla punktu wewnątrz siatki może wydawać się to łatwe (przy geometrii 2D X-Y) (dodanie do siebie potencjałów 4 sąsiadów danego węzła z lewej, prawej, z góry i z dołu a następnie podzielenia sumy przez 4). Po każdej takiej procedurze sprawdza się, o ile zmieniła się ta nowa wartość potencjału w stosunku do wartości poprzednio przechowywanej w naszym węźle. Pozwala to na sprawdzenie, jaka jest największa zmiana potencjału na całej siatce numerycznej. Kiedy kolejne stosowanie procedury relaksacji na siatce nie powoduje znaczących zmian szukanego rozkładu potencjału, obliczenia są zatrzymywane a rozkład potencjału na siatce jest traktowany jako nowo znalezione rozwiązanie. Otrzymane wyniki są zapisywane do plików wyjściowych.
Szczegóły techniczne
Oprogramowanie Liebmann jest tworzone w oparciu o możliwie solidne narzędzia FLOSS (język ANSI C, kompilator gcc).
Liebmann jest rozwijany na 2 środowiskach programistycznych:
- Linux Mint - (gcc, xed, texlive, netpbm)
- MS Windows(TM) - gcc (MinGW-w64, MSYS2, ucrt), Notepad++, MiKTeX, Faststone Image Viewer
Liebmann to obecnie moduły:
- Moduł (relax_xy) zawiera algorytmy relaksacji do obliczania rozkładu potencjału pola elektrostatycznego we współrzędnych płaskich 2D (X-Y).
- Moduł (mesh_xy) zawiera funkcje do obsługi siatek numerycznych (np. ustawianie potencjałów węzłów, wypisywanie siatki do pliku .DAT. BMP, .PPM)
- Moduł (anls_xy) zawiera algorytmy do analizy danych wyjściowych (np. wyznaczanie linii ekwipotencjalnych)
- Moduł (relax_rz) oblicza pole elektrostatyczne we współrzędnych walcowych 2D (Z-R).
- Moduł (colormap) realizuje mapowanie wartości potencjału (i innych obliczonych wartości) na kolory.
- Pliki (demo_xy_problems) zawierają funkcje definiujące problemy do rozwiązania (po 10 na plik). Definiowanie problemów (wprowadzanie kształtów elektrod) wykorzystuje elementy geometrii - prostokąty, koła i elipsy
Te moduły są napisane w języku ANSI C. Jedynie wypisywanie danych do pliku BMP wymaga pliku stdint.h ze standardu C99. Obecnie definiowanie problemu do rozwiązania jest realizowane "bezpośrednio w kodzie programu".
Pliki wykonywalne DEMO
Algorytmy oprogramowania Liebmann są wykorzystywane w dwóch plikach wykonywalnych o nazwach DEMO.
Są to jakby demonstratory możliwości.
- Program DEMO_XY wyznacza pole elektrostatyczne dla kilku przykładów zdefiniowanych "na sztywno" w kodzie programu.
- Program DEMO_ZR wyznacza pole elektrostatyczne soczewki elektrostatycznej pojedynczej "einzel". Obecnie jest jeszcze nie do końca sprawdzony.
Uruchomienie programu DEMO
- Aby uruchomić program DEMO, najpierw należy rozpakować projekt Liebmann do znanego katalogu.
- Pliki programu są w katalogu: source_code_ansi_c.
Pliki wykonywalne mają nazwy:
- DEMO_XY.exe (wersja na system MS Windows).
- DEMO_XY.run (wersja na system Linux).
Architektura procesora
- Pliki zostały domyślnie skompilowane na procesor x86_64.
- Aby zmienić docelową architekturę procesora, należy skompilować projekt od nowa ze zmienionymi opcjami kompilatora (flaga march).
Terminal tekstowy w systemie MS Windows(TM)
W systemie MS Windows można uruchomić wstępnie skompilowany program w konsoli cmd.exe
- W menu Windows uruchamiamy aplikację cmd.exe (terminal tekstowy).
- Wchodzimy do katalogu z plikami wykonywalnymi DEMO.
- Możemy uruchomić program (np. problem nr 1) - wpisujemy polecenie: DEMO.XY.exe 1
- Jeżeli program wykona się poprawnie, wyniki będą zapisane w katalogach outputs.
- Musimy pamiętać, że jedynie katalog outputs_xy_jpg jest wyjątkiem. W systemie Linux jest on zapisywany przez skrypt do seryjnej konwersji plików PPM do JPG.
- Do oglądania plików w formacie PPM potrzebna jest dodatkowa przeglądarka, np. Fast Stone Image Viewer.
Opcja ze środowiskiem MSYS2. Projekt jest rozwijany w środowisku MSYS2, UCRT64. Środowisko to wykorzystuje powłokę bash.
- Uruchamiamy MSYS2 UCRT64
- Na moim komputerze projekt znajduje się w katalogu (dla użytkownika ADS) C:\msys64\home\ADS
- Wchodzimy do katalogu z plikami wykonywalnymi DEMO (cd Liebmann_project/source_code_ansi_c).
- Możemy uruchomić program (np. problem nr 1) - wpisujemy polecenie: ./DEMO.XY.exe 1
- Jeżeli program wykona się poprawnie, wyniki będą zapisane w katalogach outputs.
- Musimy pamiętać, że jedynie katalog outputs_xy_jpg jest wyjątkiem. W systemie Linux jest on zapisywany przez skrypt do seryjnej konwersji plików PPM do JPG.
- Do oglądania plików w formacie PPM potrzebna jest dodatkowa przeglądarka, np. Fast Stone Image Viewer.
W środowisku MSYS2 UCRT64 możemy też kompilować projekt. Do kompilacji projektu wystarcza zainstalowanie pakietu gcc na daną wersję środowiska. U mnie jest to polecenie dla menedżera pakietów pacman:
pacman -S mingw-w64-ucrt-x86_64-gcc
Aby system Windows widział kompilator gcc, należy uzupełnić zmienną środowiskową Path o ścieżkę do katalogu z narzędziami MSYS2
C:\msys64\ucrt\bin
Terminal tekstowy w systemie Linux
W systemie Linux uruchamiamy konsolę tekstową.
- Rozpakowujemy projekt.
- Wchodzimy do rozpakowanego projektu.
- Pliki z kodem i programy są w katalogu source_code_ansi_c
- Niektóre pliki muszą mieć uprawnienia do uruchomienia: 2 polecenia: chmod +x *.run , chmod +x *.bash
- Możemy uruchomić program (np. problem nr 1) - wpisujemy polecenie: ./DEMO.XY.exe 1
- Jeżeli program wykona się poprawnie, wyniki będą zapisane w katalogach outputs.
- Musimy pamiętać, że katalog outputs_xy_jpg jest wyjątkiem. W systemie Linux można przekonwertować wszystkie pliki ze standardu PPM na JPG przy pomocy skryptu demo_xy_convert_to_jpg.bash. Konieczny jest jedynie zainstalowany pakiet netpbm.
- Do oglądania obrazów powinna wystarczyć standardowa przeglądarka plików graficznych.
Kompilacja
- Do kompilowania każdego programu służy skrypt o nazwie rozpoczynającej się od słowa "build" i reszcie nazwy odpowiadającej programowi DEMO.
- Skrypt build uruchamia kompilator gcc (Linux) lub MinGW (Windows) z wieloma dodatkowymi flagami (wzorowane na bibliotece GNU GSL).
- W systemie Linux skrypt musi mieć uprawnienia do wykonania (polecenie chmod +x *.bash).
Wyniki
- Wyniki obliczeń są zapisywane (lub nie, w przypadku błędu) do katalogów "outputs" dla stosownego programu i formatu plików.
- Pliki graficzne mają formaty .BMP i .PPM
- Pliki tekstowe mają rozszerzenie .dat.
- W systemie Linux pliki .PPM powinny dać się otworzyć w typowej przeglądarce obrazów.
- W systemie Linux można przekonwertować wszystkie pliki .PPM do formatu .JPG i przenieść do oddzielnego katalogu przy pomocy skryptu demo_xy_convert i pakietu netpbm (program ppmtojpeg).
- W systemie Windows można przeglądać pliki .BMP. Do przeglądania pliów .PPM w systemie Windows można użyć dodatkowej przeglądarki obrazów (testowałem z Fast Stone Image Viewer).
Licencja
Oprogramowanie Liebmann jest dostępne na zasadach wolnej licencji GPL v.3.0+ (wersja 3.0 lub nowsze).
Galerie
Przykład - mapa potencjału płaskiej diody próżniowej z bocznymi płytkami na potencjale katody.
Pobieranie
Informacje o projekcie
Bibliografia
Optyka cząstek naładowanych
- Pierre Grivet, "Electron Optics", 2nd. edition, Part 1 Optics, Pergamon Press 1972
- Pierre Grivet, "Electron Optics", Pergamon Press 1965
- James R.Nagel, "Solving the Generalized Poisson Equation Using the
Finite-Difference Method (FDM)"
- Albert Septier, "Focusing of Charged Particles", Volume I, Academic Press 1967.
- Bohdan Paszkowski, "Optyka Elektronowa", Wydanie II, Wydawnictwa Naukowo - Techniczne, Warszawa 1965 (edycja polska)
- Bohdan Paszkowski, "Electron Optics", Iliffe Books Ltd. 1968 (edycja angielska)
- DWO Heddle, "Electrostatic Lens Systems", IOP Publishing, Bristol and Philadelphia 2000
- Jon Orloff, "Handbook od Charged Particle Optics",2nd edition, CRC Press 2009
- Albert Septier, "Applied Charged Particle Optics", Part A, Academic Press 1980
Programowanie i metody numeryczne
- Wstęp do algorymizacji i programowania, wykład i ćwiczenia, UMCS 2003
- Bogdan Buczek, "Algorytmy. Ćwiczenia." Helion 2008
- Algorymizacja i programowanie, wykład i ćwiczenia, UMCS 2007
- Niklaus Wirth, "Algorytmy + struktury danych = programy", wydanie szóste, Wydawnictwo Naukowo - Techniczne, Warszawa 2002 (wydanie polskie)
- Niklaus Wirth, "Algorithms + data structures = programs", first edition, Prentice Hall 1976 (wydanie angielskie)
- Programowanie w języku C, wykład i ćwiczenia, UMCS, 2007
- Donald Alcook, "Illustrating C", Cambridge University Press (1994).
- Metody numeryczne, wykład i ćwiczenia, UMCS 2006
- MATLAB - środowisko do obliczeń numerycznych (posiada bogatą dokumentację) link
- SIMION - program do obliczeń torów cząstek naładowanych link
- IBSimu - symulator wiązek jonowych (uwzglęnia ładunek przestrzenny) (licencja GNU GPL) link
- Format plików NetPBM link
- Format plików BMP link
- OpenGL tutorial: loading BMP files yourself
- Stephen Prata, "C Primer Plus", Addison - Wesley (English edition)
- Stephen Prata, "Szkoła programowania. Język C.", Helion, Gliwice (Polish edition)
- Kyle Loudon, "Mastering Algorithms with C", 3rd Edition, O'Reilly Media (1999)
- Kyle Loudon, "Algorytmy w C, Helion Gliwice (Polish edition)
- Richard Reese, "Understanding and using C pointers", O'Reilly Media (English edition)
- Richard Reese, "Wskaźniki w języku C. Przewodnik", Helion Gliwice (2014) (Polish edition)
- Zed A. Shaw, "Learn C the Hard Way: Practical Exercises on the Computational Subjects You Keep Avoiding (Like C)", Addison - Wesley (English Edition)
- Zed A. Shaw, "Programowanie w C. Sprytne podejście do trudnych zagadnień, których wolałbyś unikać (takich jak język C)", Helion Gliwice (Polish Edition)
- Andrew Koenig, "C traps and pitfalls", Addison-Wesley Professional (1989)
- https://cplusplus.com (dokumentacja biblioteki standardowej C, przykłady użycia) link
- https://en.wikibooks.org/wiki/C_Programming link
- https://pl.wikibooks.org/wiki/C link
- https://stackoverflow.com (np.problemy z kompilacją, tutoriale itp.) link
- Andrew Hunt, David Thomas, "Pragmatic Programmer, The: From Journeyman to Master", Addison Wesley 1999 (wydanie angielskie)
- Andrew Hunt, David Thomas, "Pragmatyczny programista. Od czeladnika do mistrza.", Helion Gliwice 2011, (wydanie polskie)
- B. M. Harwani, "Practical C Programming. Solutions for modern C developers to create efficient and well-structured programs", Packt 2020.
- Richard F. Gilberg, Behrouz A. Forouzan, "Data Structures: A Pseudocode Approach with C". Second Edition, (C) 2005 Course Technology, a division of Thomson Learning, Inc.
- Suad Alagic, Michael A. Arbib, "The Design of Well-Structured and Correct Programs", Springer 1978
Nie polecam wyszukiwania publikacji w bibliotekach typu "shadow libraries" (naruszenia praw autorskich itp.).
Fotografie z realizacji projektu
Na początku nie było rewelacyjnie. W sumie to nie wiem, czy wersje finalne są poprawne. Starałem się. Za trzecim razem było chyba lepiej.
Szkice początkowe
Po pewnym czasie kolejne wersje wyprowadzeń zaczęły mieć pozory sensu
Wersje finalne do LaTeX-a
stopka
Strona nie wykorzystuje ciasteczek ani nie zbiera danych.
Darmowy hosting zapewnia PRV.PL