Program MES

ściągnij rozwiązanie : MES (exe)

(opis wraz z linkiem do kodów źródłowych zostanie wkrótce uzupełniony)

1. Manual

1.1. Zdefiniowanie kształtu próbki

 

Po uruchomieniu programu pojawia się okno dialogowe z możliwością wybrania projektu do załadowania. Dostępne okno umożliwia również samodzielne utworzenie nowego projektu (pod inną nazwą niż dostępne projekty).

 

Pod pojęciem „projekt” rozumiany jest katalog z plikiem .poly o tej samej nazwie co katalog (opis pliku .poly w rozdziale „Szczegóły implementacji”).

 

Taki plik (po kliknięciu przycisku Nowy):

a) można utworzyć ręcznie i skopiować do katalogu pod tą samą nazwą (utworzony plik musi mieć rozszerzenie .poly)

b) wskazać już wcześniej stworzony za pomocą opcji Wczytaj → Wskaż plik. W takim przypadku wskazany plik zostanie skopiowany do katalogu projektu i przybierze nazwę tego projektu

c) stworzy się automatycznie poprzez zdefiniowanie każdego wierzchołka figury w opcji Stwórz → Zdefiniuj wierzchołki (szczegóły w następnym podrozdziale)

 

Definiowanie wierzchołków polega na wpisywaniu kolejnych wierzchołków figury oraz punktów, które będą punktami charakterystycznymi do narzucania im warunków brzegowych. Przykład: przyjmijmy, że figurę stanowi trójkąt prostokątny, a drugi warunek brzegowy zostanie dodany do odcinka łączącego punkt znajdujący się w połowie przeciwprostokątnej i punkt będący wierzchołkiem. W związku z tym należy zdefiniować trzy wierzchołki i dodatkowo punkt leżący w środku przeciwprostokątnej.

 

1.2. Wybór wielkości siatki

 

Należy z rozwagą wybrać wielkość siatki, gdyż ustawienie zbyt małej wartości może spowodować wrażenie dłuższego zamrożenia aplikacji (obliczenia oczywiście zachodzą, jedynie aplikacja nie jest responsywna). Zaleca się początkowe wybranie większego rozmiaru, a następnie stopniowe (o ile to konieczne) zmniejszanie tej wartości.

 

1.3. Wybór rodzaju materiału

 

Materiał można zdefiniować zarówno poprzez bezpośrednie wpisanie jego współczynnika przewodzenia ciepła jak również poprzez podanie rodzaju tego materiału.

 

1.3. Zdefiniowanie warunków brzegowych

 

Po utworzeniu siatki (i tylko wtedy) należy ustalić warunki brzegowe dla zachodzącego procesu. Jest to możliwe poprzez wybranie opcji I w.b. lub II w.b w zakładce Warunki brzegowe. Okna wyboru I i II warunku brzegowe są zbudowane w podobny sposób. W przypadku wyboru pierwszego warunku brzegowego konieczne jest wybranie odpowiedniego wierzchołka, wpisanie odpowiadającej mu temperatury oraz wybranie opcji Dodaj i następnie OK. Ustaloną temperaturę dla danego węzła można usunąć poprzez wybranie przycisku Usuń. Podobnie wygląda okno definiowania II warunku brzegowego, z tym że w tym przypadku zamiast wierzchołków wybieramy odcinki, a w miejsce temperatur – strumień ciepła. Pomocne może się okazać aktywowanie opcji Pokaż numery wierzchołków lub Pokaż numery boków z paska narzędzi.

 

1.4. Uruchomienie symulacji

 

W momencie kliknięcia przycisku Oblicz następuje rozpoczęcie symulacji obliczeń oraz uruchamiany jest nowy wątek, który odpowiedzialny jest za wyświetlanie okna z postępem obliczeń. Okno to jest wyposażone w przycisk Anuluj, którego naciśnięcie pozwala przerwać obliczenia w dowolnym momencie i powrót do głównego okna programu.

Podczas przesuwania się paska postępu można zauważyć chwilowe zatrzymanie się na 99 procentach. Jest to spowodowane tym, że zliczanie postępu następuje tylko w momencie generowania macierzy globalnej (od 1 do 99%), natomiast proces rozwiązywania tej macierzy metodą Gaussa nie emituje już sygnałów o postępie, ze względu na stosunkowo krótki okres trwania.

 

1.5. Podgląd rezultatów

 

Podczas podglądu rozkładu możliwe jest przesuwanie figury lewym przyciskiem myszy lub przybliżanie lub oddalanie widoku za pomocą rolki myszy.

 

 

1.6. Dostępne opcje w programie

 

 

Otwiera menadżera projektów
  Zapisuje obszar widoku do pliku PNG
  Pokaż brzeg obszaru – pokazuje krawędzie utworzonej figury
Pokaż węzły – pokazuje węzły utworzonej siatki; opcja aktywna dopiero po nałożeniu siatki
Pokaż numery wierzchołków – opcja używana m.in. do definiowania temperatury początkowej wierzchołków dla I w.b.
Pokaż numery boków – opcja używana m.in. do określania krawędzi dla II w.b.
Pokaż numery węzłów – wyświetla numery węzłów utworzonej siatki; opcja aktywna dopiero po nałożeniu siatki
Pokaż numery elementów – wyświetla numery elementów utworzonej siatki; opcja aktywna dopiero po nałożeniu siatki
Pokaż siatkę elementów – wyświetla przeliczoną siatkę
Pokaż temperatury (z dokładnością do dwóch miejsc po przecinku)
Pokaż gradient temperatury – wizualny rozkład temperatury w próbce

 

 

 

 

2. Szczegóły implementacji

 

2.1. Ogólny opis

 

Program został napisany w języku C++ w środowisku Qt przy użyciu biblioteki graficznej OpenGL. W projekcie użyto również następujące biblioteki:

  • boost::filesystem – w celu zapewnienia operacji na systemie plików w różnych systemach operacyjnych
  • triangle – sporządzanie siatki na podstawie pliku wejściowego .poly

Aplikacja jest przenośna między różnymi systemami na poziomie kodu źródłowego (przetestowane działanie pod Windowsem oraz Linuxem). Program w całości został stworzony przy użyciu narzędzi open-source i skompilowany w kompilatorze gcc (Linux) oraz mingw (Windows). Każdy fragment kodu został stworzony samodzielnie na bazie dostępnej literatury.

Maksymalne zużycie pamięci programu jest stosunkowo niskie. Przy 700 węzłach aplikacja zużywa ok. 35MB pamięci RAM.

 

2.2. Struktura plików wejściowych

 

Plik .poly definiuje współrzędne wszystkich węzłów oraz odcinki stanowiące brzeg figury.

Ma on następującą strukturę:

 

  • Pierwsza linia: <l. wierzchołków> <2> <0> <0>
  • Następne linie: <nr wierzchołka> <wsp. x> <wsp. y>
  • Jedna linia: <l. boków> <1>
  • Następne linie: <nr boku> <nr wierzch. pocz.> <nr. wierzch. końc.>
  • Jedna linia: <0>

 

Przykładowy plik (czworokąt):

 

4 2 0 0

0 0.3 0.4

1 0.7 0.2

2 0.8 0.7

3 0.2 0.6

# END_OF_NODE_BLOCK

4 1

0 0 1 1

1 1 2 1

2 2 3 1

3 3 0 1

# END_OF_SEGMENT_BLOCK

0

# END_OF_HOLE_BLOCK

 

Program triangle oprócz pliku .poly generuje również pliki .node (zawiera informacje o współrzędnych utworzonych węzłów) i .ele (informacje o elementach i węzłach wchodzących w ich skład)

 

Do obsługi tych plików stworzono następujące funkcje zawarte w preprocessorze:

 

ReadNodeGen() - Czyta wygenerowany przez triangle plik .node
ReadEleGen() - Czyta wygenerowany przez triangle plik .ele
ReadPoly() - Czyta ustalone przez użytkownika węzły i odcinki z pliku .poly
SavePoly() - Generuje plik .poly na podstawie wybranych przez użytkownika wierzchołków figury

2.3. Przygotowanie siatki

 

Figura zostaje zmeshowana przy pomocy otwartoźródłowego programu „triangle”. Oryginalna wersja została stworzona w języku C i działała jedynie w trybie linii komend, jednak na potrzeby działania tego programu została odpowiednio zmodyfikowana i przystosowana do działania w projekcie tworzonym w języku C++. Jedna z modyfikacji dotyczyła dopisania funkcji, która umożliwiłaby korzystanie z tego programu jako z biblioteki (usunięcie funkcji main i wprowadzania wartości wejściowych z linii komend na rzecz wywołania odpowiedniej funkcji).

 

 

2.4. Generowanie macierzy globalnej

 

Rozpatrzmy przykład generowania punktu (a, b) macierzy globalnej

 

a) określenie, do jakich wspólnych elementów należą węzły a i b (w poniższym kodzie są to zmienne x i y)

 

 

 

 

 

 

 

 

 

 

 

 

b) dla każdego znalezionego elementu znajdź lokalne numery węzłów a i b (local_a i local_b)

c) sprawdź wartość macierzy lokalnej dla danego elementu dla węzłów local_a i local_b

d) punkt c powtarzaj dla każdego znalezionego elementu z ppkt a) – sumuj uzyskane wartości

e) uzyskana zsumowana wartość stanowi element macierzy (a,b) oraz (b,a)

 

Poniższy kod opisuje operacje opisane w podpunktach od b) do e)

 

 

 

 

 

 

 

 

 

 

 

 

 

2.5. Skalowanie przygotowanej figury do rozmiaru okna podglądu

 

Każda otworzona figura jest automatycznie powiększana i przemieszczana tak, aby znajdowała się w centrum okna podglądu. Skalowanie (o tę samą wartość) odbywa się względem obu osi współrzędnych.

 

 

 

2.6. Sporządzanie gradientu temperatury

 

Przygotowano tablicę elementów typu RGBClass (opis poniżej) o stałym rozmiarze 1021 elementów.

 

  • wartości od 0 – 255 definiują przejście od koloru (0,0,255) do (0,254,255)
  • wartości od 256 – 510 definiują przejście od koloru (0,255,255) do (0,255,1)
  • wartości od 511 – 765 definiują przejście od koloru (0,255,0) do (254,255,0)
  • wartości od 766 – 1020 definiują przejście od koloru (255,255,0) do (255,0,0)

 

W ten sposób uzyskano zdyskretyzowane przejście od koloru czerwonego (pod indeksem 0 w tablicy) poprzez zielony (indeks 511), skończywszy na niebieskim (indeks 1020), zapisane na stałe w tablicy.

 

Klasa RGBClass ma postać:

 

 

 

 

 

 

 

Typ unsigned char z powodzeniem wystarcza do zapisu zmiennych R, G, B, gdyż są to liczby jedynie z zakresu 0-255

 

Tablica colors definiowana jest jedynie na początku działania programu. Na tę tablicę zrzutowane następnie zostają przeliczone w solverze temperatury węzłowe.

 

Dodaj komentarz