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.

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.

problem xy nr 9 - Dwie płytki płaskorównoległe w próżni - nierówna długość (siatka 200 x 200). - punkty elektrod na siatce numerycznej problem xy nr 9 - Dwie płytki płaskorównoległe w próżni - nierówna długość (siatka 200 x 200). - rozkład potencjału elekrostatycznego V(x,y), mapowanie na kolory typu jet problem xy nr 9 - Dwie płytki płaskorównoległe w próżni - nierówna długość (siatka 200 x 200). - linie ekwipotencjalne

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:

Liebmann to obecnie moduły:

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.

Uruchomienie programu DEMO

  1. Aby uruchomić program DEMO, najpierw należy rozpakować projekt Liebmann do znanego katalogu.
  2. Pliki programu są w katalogu: source_code_ansi_c.

Pliki wykonywalne mają nazwy:

Architektura procesora

Terminal tekstowy w systemie MS Windows(TM)

W systemie MS Windows można uruchomić wstępnie skompilowany program w konsoli cmd.exe

  1. W menu Windows uruchamiamy aplikację cmd.exe (terminal tekstowy).
  2. Wchodzimy do katalogu z plikami wykonywalnymi DEMO.
  3. Możemy uruchomić program (np. problem nr 1) - wpisujemy polecenie: DEMO.XY.exe 1
  4. Jeżeli program wykona się poprawnie, wyniki będą zapisane w katalogach outputs.
  5. 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.
  6. 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.

  1. Uruchamiamy MSYS2 UCRT64
  2. Na moim komputerze projekt znajduje się w katalogu (dla użytkownika ADS) C:\msys64\home\ADS
  3. Wchodzimy do katalogu z plikami wykonywalnymi DEMO (cd Liebmann_project/source_code_ansi_c).
  4. Możemy uruchomić program (np. problem nr 1) - wpisujemy polecenie: ./DEMO.XY.exe 1
  5. Jeżeli program wykona się poprawnie, wyniki będą zapisane w katalogach outputs.
  6. 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.
  7. 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ą.

  1. Rozpakowujemy projekt.
  2. Wchodzimy do rozpakowanego projektu.
  3. Pliki z kodem i programy są w katalogu source_code_ansi_c
  4. Niektóre pliki muszą mieć uprawnienia do uruchomienia: 2 polecenia: chmod +x *.run , chmod +x *.bash
  5. Możemy uruchomić program (np. problem nr 1) - wpisujemy polecenie: ./DEMO.XY.exe 1
  6. Jeżeli program wykona się poprawnie, wyniki będą zapisane w katalogach outputs.
  7. 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.
  8. Do oglądania obrazów powinna wystarczyć standardowa przeglądarka plików graficznych.

Kompilacja

  1. 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.
  2. Skrypt build uruchamia kompilator gcc (Linux) lub MinGW (Windows) z wieloma dodatkowymi flagami (wzorowane na bibliotece GNU GSL).
  3. W systemie Linux skrypt musi mieć uprawnienia do wykonania (polecenie chmod +x *.bash).

Wyniki

Licencja

Oprogramowanie Liebmann jest dostępne na zasadach wolnej licencji GPL v.3.0+ (wersja 3.0 lub nowsze).
Licencja GPL v.3.0+

Galerie

Przykład - mapa potencjału płaskiej diody próżniowej z bocznymi płytkami na potencjale katody.
V_xy_flat_diode

Pobieranie

Informacje o projekcie

Bibliografia

Optyka cząstek naładowanych

  1. Pierre Grivet, "Electron Optics", 2nd. edition, Part 1 Optics, Pergamon Press 1972
  2. Pierre Grivet, "Electron Optics", Pergamon Press 1965
  3. James R.Nagel, "Solving the Generalized Poisson Equation Using the Finite-Difference Method (FDM)"
  4. Albert Septier, "Focusing of Charged Particles", Volume I, Academic Press 1967.
  5. Bohdan Paszkowski, "Optyka Elektronowa", Wydanie II, Wydawnictwa Naukowo - Techniczne, Warszawa 1965 (edycja polska)
  6. Bohdan Paszkowski, "Electron Optics", Iliffe Books Ltd. 1968 (edycja angielska)
  7. DWO Heddle, "Electrostatic Lens Systems", IOP Publishing, Bristol and Philadelphia 2000
  8. Jon Orloff, "Handbook od Charged Particle Optics",2nd edition, CRC Press 2009
  9. Albert Septier, "Applied Charged Particle Optics", Part A, Academic Press 1980

Programowanie i metody numeryczne

  1. Wstęp do algorymizacji i programowania, wykład i ćwiczenia, UMCS 2003
  2. Bogdan Buczek, "Algorytmy. Ćwiczenia." Helion 2008
  3. Algorymizacja i programowanie, wykład i ćwiczenia, UMCS 2007
  4. Niklaus Wirth, "Algorytmy + struktury danych = programy", wydanie szóste, Wydawnictwo Naukowo - Techniczne, Warszawa 2002 (wydanie polskie)
  5. Niklaus Wirth, "Algorithms + data structures = programs", first edition, Prentice Hall 1976 (wydanie angielskie)
  6. Programowanie w języku C, wykład i ćwiczenia, UMCS, 2007
  7. Donald Alcook, "Illustrating C", Cambridge University Press (1994).
  8. Metody numeryczne, wykład i ćwiczenia, UMCS 2006
  9. MATLAB - środowisko do obliczeń numerycznych (posiada bogatą dokumentację) link
  10. SIMION - program do obliczeń torów cząstek naładowanych link
  11. IBSimu - symulator wiązek jonowych (uwzglęnia ładunek przestrzenny) (licencja GNU GPL) link
  12. Format plików NetPBM link
  13. Format plików BMP link
  14. OpenGL tutorial: loading BMP files yourself
  15. Stephen Prata, "C Primer Plus", Addison - Wesley (English edition)
  16. Stephen Prata, "Szkoła programowania. Język C.", Helion, Gliwice (Polish edition)
  17. Kyle Loudon, "Mastering Algorithms with C", 3rd Edition, O'Reilly Media (1999)
  18. Kyle Loudon, "Algorytmy w C, Helion Gliwice (Polish edition)
  19. Richard Reese, "Understanding and using C pointers", O'Reilly Media (English edition)
  20. Richard Reese, "Wskaźniki w języku C. Przewodnik", Helion Gliwice (2014) (Polish edition)
  21. Zed A. Shaw, "Learn C the Hard Way: Practical Exercises on the Computational Subjects You Keep Avoiding (Like C)", Addison - Wesley (English Edition)
  22. 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)
  23. Andrew Koenig, "C traps and pitfalls", Addison-Wesley Professional (1989)
  24. https://cplusplus.com (dokumentacja biblioteki standardowej C, przykłady użycia) link
  25. https://en.wikibooks.org/wiki/C_Programming link
  26. https://pl.wikibooks.org/wiki/C link
  27. https://stackoverflow.com (np.problemy z kompilacją, tutoriale itp.) link
  28. Andrew Hunt, David Thomas, "Pragmatic Programmer, The: From Journeyman to Master", Addison Wesley 1999 (wydanie angielskie)
  29. Andrew Hunt, David Thomas, "Pragmatyczny programista. Od czeladnika do mistrza.", Helion Gliwice 2011, (wydanie polskie)
  30. B. M. Harwani, "Practical C Programming. Solutions for modern C developers to create efficient and well-structured programs", Packt 2020.
  31. 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.
  32. 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

foto_1 foto_2 foto_3 foto_4

Po pewnym czasie kolejne wersje wyprowadzeń zaczęły mieć pozory sensu

foto_5 foto_6

Wersje finalne do LaTeX-a

foto_7 foto_8

stopka

Strona nie wykorzystuje ciasteczek ani nie zbiera danych.