74
AKADEMIA GÓRNICZO-HUTNICZA IM. STANISŁAWA STASZICA W KRAKOWIE Wydział Inżynierii Metali i Informatyki Przemysłowej PRACA DYPLOMOWA MAGISTERSKA pt. Aplikacja internetowa do wizualizacji i analizy wynikow dla symulacji MESImię i nazwisko dyplomanta: Seweryn Młynarczyk Kierunek studiów: Informatyka stosowana Specjalność: Systemy Informatyki Przemysłowej Nr albumu: 232183 Promotor: dr inż. Magdalena Kopernik Recenzent: dr hab. inż. Mirosław Głowacki, prof. AGH Podpis dyplomanta: Podpis promotora: Kraków 2015

PRACA DYPLOMOWA MAGISTERSKAhome.agh.edu.pl/~kopernik/resource_PMiIDP/S_Mylnarczyk.pdfona stworzona przez firmę Sun Microsystems w roku 1995, przejętą przez Oracle w roku 2010. Logo

  • Upload
    others

  • View
    1

  • Download
    0

Embed Size (px)

Citation preview

Page 1: PRACA DYPLOMOWA MAGISTERSKAhome.agh.edu.pl/~kopernik/resource_PMiIDP/S_Mylnarczyk.pdfona stworzona przez firmę Sun Microsystems w roku 1995, przejętą przez Oracle w roku 2010. Logo

AKADEMIA GÓRNICZO-HUTNICZA

IM. STANISŁAWA STASZICA W KRAKOWIE

Wydział Inżynierii Metali i Informatyki Przemysłowej

PRACA DYPLOMOWA MAGISTERSKA

pt.

„Aplikacja internetowa do wizualizacji

i analizy wyniko w dla symulacji MES”

Imię i nazwisko dyplomanta: Seweryn Młynarczyk

Kierunek studiów: Informatyka stosowana

Specjalność: Systemy Informatyki Przemysłowej

Nr albumu: 232183

Promotor: dr inż. Magdalena Kopernik

Recenzent: dr hab. inż. Mirosław Głowacki, prof. AGH

Podpis dyplomanta: Podpis promotora:

Kraków 2015

Page 2: PRACA DYPLOMOWA MAGISTERSKAhome.agh.edu.pl/~kopernik/resource_PMiIDP/S_Mylnarczyk.pdfona stworzona przez firmę Sun Microsystems w roku 1995, przejętą przez Oracle w roku 2010. Logo

1

Oświadczam, świadomy(-a) odpowiedzialności karnej za poświadczenie nieprawdy, że ni-

niejszą pracę dyplomową wykonałem(-am) osobiście i samodzielnie i że nie korzystałem(-

am) ze źródeł innych niż wymienione w pracy.

Kraków, dnia …… Podpis dyplomanta…………….

Page 3: PRACA DYPLOMOWA MAGISTERSKAhome.agh.edu.pl/~kopernik/resource_PMiIDP/S_Mylnarczyk.pdfona stworzona przez firmę Sun Microsystems w roku 1995, przejętą przez Oracle w roku 2010. Logo

2

Spis treści

WSTĘP 4

1. OPRACOWANIE LITERATUROWE ZAGADNIEŃ DOTYCZĄCYCH TEMATU

PROJEKTU. 6

1.1. Co to jest aplikacja internetowa 6

1.2 Java 7

1.2.1 Spring Framework 8

1.2.2. Hibernate 10

1.3. Javascipt 12

1.3.1. ThreeJs 13

1.4. MySQL 15

1.5. Adina 16

2. CEL PRACY 21

3. WYKONANIE PRZYKŁADOWYCH SYMULACJI W PROGRAMIE KOMERCYJNYM. 22

3.1 Analiza FSI uproszczonej turbiny z wykorzystaniem siatki przesuwnej 22

3.2 Analiza klejonego wału z wykorzystaniem ADINA-M/PS 25

4. OPIS IMPLEMENTACJI WYKONANEJ APLIKACJI 27

4.1 Schemat bazy danych 27

4.2 Eksport danych z Adiny 30

4.3 Wczytywanie danych z dostarczonych plików. 35

4.3.1 Wczytywanie danych o węzłach 39

4.3.2 Wczytywanie danych o prymitywach 40

Page 4: PRACA DYPLOMOWA MAGISTERSKAhome.agh.edu.pl/~kopernik/resource_PMiIDP/S_Mylnarczyk.pdfona stworzona przez firmę Sun Microsystems w roku 1995, przejętą przez Oracle w roku 2010. Logo

3

4.3.3 Wczytywanie danych o wynikach 43

4.4 Wybór modelu oraz translacja danych 48

4.4.1 Przetwarzanie danych o węzłach 50

4.4.2 Przetwarzanie danych o prymitywach 50

4.4.3 Przetwarzanie danych o wynikach symulacji 52

4.5 Budowa modułu wyświetlającego grafikę 53

5 PORÓWNANIE STWORZONEJ APLIKACJI ORAZ ROZWIĄZANIA KOMERCYJNEGO 58

5.1 Uproszczony model turbiny 58

5.2 Model wału z przyklejonym pierścieniem 65

6. WNIOSKI 68

SPIS ILUSTRACJI 70

BIBLIOGRAFIA 72

Page 5: PRACA DYPLOMOWA MAGISTERSKAhome.agh.edu.pl/~kopernik/resource_PMiIDP/S_Mylnarczyk.pdfona stworzona przez firmę Sun Microsystems w roku 1995, przejętą przez Oracle w roku 2010. Logo

4

Wstęp

Jednym z bardziej interesujących narzędzi wykorzystywanych przez naukowców oraz

inżynierów w swojej pracy jest metoda elementów skończonych. Pozwala ona na podział

obszaru na pojedyncze elementy i przeprowadzenie obliczeń tylko dla pojedynczych węzłów[1].

Takie podejście umożliwia przeanalizowanie zachowania nawet skomplikowanych konstrukcji

w zadanych warunkach fizycznych. Minusem tej metody jest konieczność przeprowadzenia

skomplikowanych obliczeń dla bardzo wielu elementów w dyskretyzowanej przestrzeni.

Problem wydajności częściowo został rozwiązany dzięki gwałtownemu rozwojowi technologii

komputerowych, który ma miejsce od około 50 lat. W wyniku którego, uzyskaliśmy możliwość

rozwiązywania układów w przestrzeni trójwymiarowej.

Zanim przeprowadzanie symulacji komputerowych było możliwe, jedyną metodą na

weryfikację poprawności modelów teoretycznych było stworzenie modelu urządzenia i

fizyczne jego przetestowanie. Było to podejście czasochłonne oraz kosztowne. Analiza projektu

z wykorzystaniem metody elementów skończonych pozwala na wczesne wykrycie wad

konstrukcyjnych, a dzięki temu oszczędza cenny czas i środki.[1] MES, czyli metoda

elementów skończonych, znajduje zastosowanie w wielu dziedzinach życia. Służy badaniu

wytrzymałość konstrukcji, analizuje przepływ cieczy czy ciepła oraz wiele innych.

Wykorzystywana jest przy projektowaniu sztucznych serc, jak również przy projektowaniu

bolidów formuły 1.

Popularną metodą przeprowadzania symulacji MES jest wykorzystanie gotowego

komercyjnego oprogramowania. Takie oprogramowanie wspiera wiele procesów oraz

umożliwia analizę otrzymanych rozwiązań dzięki wbudowanym post-procesorom. Istotną

częścią tych narzędzi jest moduł graficzny, który pozwala na zobrazowanie badanego elementu

przed symulacją, oraz po jej wykonaniu. Na dany element możemy nałożyć różnego rodzaju

efekty, które dodatkowo ułatwiają wyobrażenie sobie zachodzących procesów.

Wadą tego typu post-procesorów jest instalacja programu na komputerze. Jeśli chcemy komuś

pokazać swoje rozwiązanie musimy się upewnić, że inni również posiadają takie

oprogramowanie. Często istnieje możliwość zapisu graficznej reprezentacji rozwiązania, jako

obrazu graficznego. Uniemożliwia to jednak jakąkolwiek edycję tego elementu. Jest to czynnik

ograniczający możliwość pełnej współpracy przy projektach. Elementem dodatkowo

poprawiającym kooperację w zespołach byłaby możliwość natychmiastowego dzielenia się

wynikami obliczeń bez konieczności instalowania dodatkowego oprogramowania. Taką

możliwość dają aplikacje internetowe. Niestety na rynku obecnie takie narzędzia nie istnieją.

Page 6: PRACA DYPLOMOWA MAGISTERSKAhome.agh.edu.pl/~kopernik/resource_PMiIDP/S_Mylnarczyk.pdfona stworzona przez firmę Sun Microsystems w roku 1995, przejętą przez Oracle w roku 2010. Logo

5

Niniejsza praca opisuje próbę stworzenia aplikacji internetowej, która działałaby, jako prosty

post-procesor dla komercyjnego oprogramowania MES. Działanie zaimplementowanego

rozwiązania zostanie zaprezentowane na przykładzie symulacji stworzonych w programie

„ADINA”.

Page 7: PRACA DYPLOMOWA MAGISTERSKAhome.agh.edu.pl/~kopernik/resource_PMiIDP/S_Mylnarczyk.pdfona stworzona przez firmę Sun Microsystems w roku 1995, przejętą przez Oracle w roku 2010. Logo

6

1. Opracowanie literaturowe zagadnień dotyczących tematu projektu.

1.1. Co to jest aplikacja internetowa

Aplikacja internetowa jest to program, w którym logika biznesowa programu może być

realizowana zarówno po stronie klienta jak i serwera, a dostęp do niej uzyskujemy poprzez

Internet[2]. Taka aplikacja wykonuje na rzecz użytkownika akcje. Nie ogranicza się wyłącznie

do wyświetlania treści, ale pozwala również na wprowadzenie danych, które następnie są w

odpowiedni sposób procesowane

Klient – zawiera interfejs, z którym bezpośrednio komunikuje się użytkownik programu.

o „Gruby” klient – typ aplikacji, w którym po stronie klienta znajduje się zarówno

interfejs, jak i logika aplikacji, czyli przetwarzanie danych. Natomiast po stronie

serwerowej zazwyczaj znajduje się baza danych oraz różnego rodzaju inne

serwery przechowujące dane. W przypadku takiej architektury większość

obciążenia związanego z przetwarzaniem danych spoczywa na komputerze

klienta. Takie rozwiązanie posiada dwie podstawowe wady. Po pierwsze

wydajność aplikacji w dużej mierze zależy od sprzętu, jakim dysponuje klient.

Wymusza to na nim inwestycję często w kosztowny sprzęt dla każdego z

potencjalnych użytkowników naszego programu. Kolejną cechą tego

rozwiązania jest trudna administracja rozproszoną aplikacją. Każda zmiana w

kodzie programu wymusza zmianę aplikacji u każdego z użytkowników.

Przykładem tego typu programów mogą być aplikacje Swing pisane w języku

Java.[3]

o „Cienki” klient – są to aplikacje, które jako interfejs wykorzystują przeglądarkę

WWW. Logika biznesowa w tym przypadku wykonywana jest na serwerze,

który pośredniczy pomiędzy interfejsem, a bazą danych, która przeważnie

znajduje się na tej samej maszynie. Zaletą takiej metody jest łatwe utrzymanie

programu. Aby wprowadzić poprawki wystarczy zaktualizować aplikację

działającą na serwerze, z której korzystają wszyscy klienci. Kolejnym aspektem

takiego rozwiązania jest mniej kosztowne utrzymanie komputerów klienckich.

Przeglądarki mają stosunkowo małe wymagania, a więc do korzystania z

aplikacji wystarczy komputer o niskich parametrach. Specyfiką tego

rozwiązania jest przeniesienie większości kosztu obliczeniowego na jedną

Page 8: PRACA DYPLOMOWA MAGISTERSKAhome.agh.edu.pl/~kopernik/resource_PMiIDP/S_Mylnarczyk.pdfona stworzona przez firmę Sun Microsystems w roku 1995, przejętą przez Oracle w roku 2010. Logo

7

maszynę, co wymusza inwestycję w bardzo drogie serwery[3]. Program

rozwijany w ramach tej pracy jest tego typu aplikacją.

Serwer – jest to część aplikacji, która oferuje usługi na rzecz jednego lub większej ilości

klientów. W zależności od rodzaju aplikacji jego rola może sprowadzać się jedynie do

gromadzenia danych wysyłanych od klientów. Może również wykonywać całą logikę,

a z klientami komunikować się w celu uzyskania i dostarczenia informacji.

1.2 Java

Popularnym językiem programowania, a zarazem platformą komputerową jest Java. Została

ona stworzona przez firmę Sun Microsystems w roku 1995, przejętą przez Oracle w roku 2010.

Logo technologii przedstawione na rysunku 1 rozpoznawalne jest przez wielu użytkowników

nawet niezwiązanych z programowaniem.

Składnia Javy ma wiele wspólnego z C oraz C++, czerpie również z innych języków, w

większym stopniu stawia jednak na obiektowość. Umożliwia tworzenie zarówno prostych

aplikacji desktopowych, jak i skomplikowanych aplikacji biznesowych. Bardzo często

wykorzystywana jest do tworzenia internetowych aplikacji typu klient – serwer. Jest również

powszechnie używana w aplikacjach mobilnych, grach, tworzy się w niej oprogramowanie dla

różnego rodzaju odtwarzaczy oraz telewizorów. Jedną z charakterystycznych cech tego języka

jest możliwość uruchamiania skompilowanej aplikacji na różnych platformach. Implementacje

maszyny javy dostępne są dla wielu zróżnicowanych systemów. Program kompiluje się do bajt

kodu, który następnie można uruchomić na dowolnej maszynie, bez względu na architekturę[4].

Rysunek 1 Logo Java[7]

Page 9: PRACA DYPLOMOWA MAGISTERSKAhome.agh.edu.pl/~kopernik/resource_PMiIDP/S_Mylnarczyk.pdfona stworzona przez firmę Sun Microsystems w roku 1995, przejętą przez Oracle w roku 2010. Logo

8

Pozwala to programistom rozwijać aplikację na jednej platformie, bez konieczności

dostosowywania programu do wielu systemów.

Java ułatwia pracę programisty poprzez system automatycznego zwalniania wolnej pamięci,

‘garbage collector’, czyli odśmiecacz pamięci. Programista wskazuje, kiedy chce stworzyć

obiekt, lecz Java odpowiada za określenie momentu, w którym zmienna nie jest już

wykorzystywana i ją usuwa. Uruchomiony odśmiecacz wykrywa obiekty, do których nie ma

już referencji, a następnie pozbywa się ich z pamięci. Jest to jeden z mechanizmów, przez który

uważa się, iż jest to język, który nie nadaje się do pisania aplikacji czasu rzeczywistego.

Pomimo automatycznego zarządzania pamięcią, w programie nadal może dojść do wycieku

pamięci. Dzieje się tak, gdy kod przechowuje referencje do obiektów, które nie są już

wykorzystywane. Jest to sytuacja niepożądana i zazwyczaj dość trudna do wykrycia. Zwłaszcza

we wczesnych wersjach Javy, zwalnianie pamięci często powodowało znaczący spadek

wydajności komputera. Przyczynia się to do problemów ze stabilnością wydajności programów,

w wyniku czego nie jest właściwym wyborem jeśli chodzi o aplikację czasu rzeczywistego.[4].

Częścią technologii odpowiedzialną za niezależność sprzętową oraz systemową jest wirtualna

maszyna Javy. Stanowi ona abstrakcyjną jednostkę obliczeniową, działającą analogicznie do

prawdziwego procesora, sterowaną przez instrukcje, która zarządza różnymi obszarami pamięci.

Wirtualna maszyna Javy do działania nie wymaga żadnego specyficznego systemu lub sprzętu.

Z powodzeniem działa na takich urządzeniach jak smartfony, komputery desktopowe, czy na

serwerach. Java nie jest jedynym językiem, który może być uruchamiany na wirtualnej

maszynie. Jedynym, czego potrzebuje ona do uruchomienia programu są pliki ‘class’

zawierające instrukcje dla maszyny oraz inne wymagane informacje. Jednym z języków, które

działają na wirtualnej maszynie Javy jest Scala.[5]

1.2.1 Spring Framework

Jednym z najpopularniejszych i najlepiej rozwiniętych lekkich frameworków jest Spring, jego

zadaniem jest ułatwienie oraz usprawnienie pracy w Javie EE. Serwisy, które oferuje mogą być

stosowane zarówno w apletach, standalone’owych klientach aplikacji, jak i aplikacjach

webowych. Umożliwia on stworzenie silnika servletowego do prostego programu, jak również

skomplikowanej aplikacji biznesowej. Framework Spring bierze pod uwagę wszystkie poziomy

Page 10: PRACA DYPLOMOWA MAGISTERSKAhome.agh.edu.pl/~kopernik/resource_PMiIDP/S_Mylnarczyk.pdfona stworzona przez firmę Sun Microsystems w roku 1995, przejętą przez Oracle w roku 2010. Logo

9

architektoniczne typowej aplikacji Javy Enterprise. Logo platformy przedstawione zostało na

rysunku 2.

Rysunek 2 Logo Spring[22]

Najważniejszymi modułami Spring są:

Kontener zapewniający odwrócenie sterowania(ang. Inversion of Control) – Główny

kontener dostarczany przez Spring może zarządzać wszystkimi rodzajami obiektów

POJO, oraz działać z innymi komponentami framwork’u, aby zapewniać usługi oraz

konfigurację.

Programowanie aspektowe AOP(ang. Aspect-Oriented Programming) – ułatwia

zachowanie logicznego porządku. Funkcje, które w przeciwnym razie byłyby rozsiane

po różnych metodach, są zebrane w moduły w jednym miejscu. AOP używany jest np.

przy deklaratywnym zarządzaniu transakcjami.

Warstwa abstrakcyjna dostępu do bazy danych – Spring wspiera spójny dostęp do

danych, w tym celu udostępnia funkcjonalną warstwę abstrakcyjną ułatwiającą jego

wykonanie. Zawiera bogatą hierarchię wyjątków dostępu do danych oraz zapewnia

szeroki zasób serwisów wspomagających mapowanie obiektowo-relacyjne JPA(ang.

Java Persistence API).

Uproszczenie łącza do baz danych JDBC(ang. Java DataBase Connectivity) – dostarcza

abstrakcyjną powłokę JDBC, w znaczący sposób uproszczoną, oraz mniej błędogenną

w stosunku do JDBC. Wspiera bezpośredni dostęp do relacyjnych baz SQL.

Zarządzanie transakcjami – Framework zapewnia abstrakcję transakcji, która może

działać ponad globalnym interfejsem transakcji JTA(ang. Java Transacion API),

zarządzanymi przez serwer lub lokalnymi transakcjami przy użyciu JDBC, Hibernate

oraz innych interfejsów dostępu do danych.

Sieciowy framework Model Widok Kontroler MVC(ang. Model View Control) – Spring

zawiera framework MVC oparty o przeglądarkowe żądania. Używa współdzielonych

Page 11: PRACA DYPLOMOWA MAGISTERSKAhome.agh.edu.pl/~kopernik/resource_PMiIDP/S_Mylnarczyk.pdfona stworzona przez firmę Sun Microsystems w roku 1995, przejętą przez Oracle w roku 2010. Logo

10

instancji wielowątkowych kontrolerów w sposób analogiczny do frameworka Struts,

lecz w sposób bardziej elastyczny. W prosty sposób integrują się one z kontenerami IoC.

Wszystkie ze Springowych komponentów mogą również współdziałać z innymi

frameworkami takimi jak Struts, czy JSF(ang. JavaServer Faces).

Uproszczenie pracy z interfejsem usług katalogowych Javy JNDI(ang. Java Naming and

Directory Interface), JTA oraz innymi interfejsami korporacyjnej Javy – Spring pomaga

w zwalczaniu zalegającego w programie kodu, który nie jest bezpośrednio używany ale

jest wymagany dla poprawnego działania. Odpowiednia konfiguracja Spring może w

100% pomóc pozbyć się wyszukiwania komponentów JNDI. Tak, aby programista mógł

skupić się na pisaniu kodu, który jest związany z tym co chce osiągnąć.

Lekki klient usług zdalnych – zapewnia wsparcie dla opartych na prostych obiektach

Javy POJO(ang. Plain Old Java Objects) usług zdalnych, bazujących na różnych

protokołach. Takich jak zdalne wywoływanie metod RMI(ang. Remote Method

Invocation), wymianę danych przez Internet IIOP(ang. Internet Inter-ORB Protocol),

protokół serwisów internetowych Hessian oraz innych usługach sieciowych.

Wsparcie dla interfejsu przesyłaniu komunikatów w Javie JMS(ang. Java Messaging

Service) – Spring pomaga w wysyłaniu oraz odbieraniu wiadomości JMS w sposób

dużo prostszy niż jest to zrealizowane w wersji korporacyjnej Javy.

Wsparcie dla technologii zarządzania oraz monitorowania aplikacji JMX(ang. Java

Management Extensions) – udziela wsparcia przy zarządzaniu JMX dla obiektów, które

konfiguruje.

Wsparcie dla zaawansowanych strategii testowania – Spring nie tylko pomaga we,

wprowadzeniu dobrego planu, umożliwiającego efektywne Unit testy, ale zapewnia

także kompleksowe rozwiązania umożliwiające testowanie aplikacji poza serwerem

aplikacji.[6]

1.2.2. Hibernate

Page 12: PRACA DYPLOMOWA MAGISTERSKAhome.agh.edu.pl/~kopernik/resource_PMiIDP/S_Mylnarczyk.pdfona stworzona przez firmę Sun Microsystems w roku 1995, przejętą przez Oracle w roku 2010. Logo

11

Hibernate jest frameworkiem wykorzystywanym podczas implementacji warstwy dostępu do

danych. Zawiera rozwiązania dotyczące mapowania obiektowo-relacyjnego. Oznacza to

technologię, umożliwiającą mapowanie danych pomiędzy modelowym przedstawieniem

obiektów w programie, a ich reprezentacją w relacyjnej bazie danych. Różnice w prezentacji

danych w tych dwóch warstwach wymuszają na programiście sporego nakładu pracy na

rzutowanie, którego można uniknąć poprzez zastosowanie Hibernate.[7] Technologia

rozpoznawana jest poprzez logo widoczne na rysunku 3.

Ideałem, do którego dążą twórcy tej technologii jest sytuacja, gdzie dowolny obiekt POJO

będziemy w stanie bez żadnych problemów ani dodatkowego konfigurowania, zapisać w bazie

danych, a następnie go z niej pobrać. [8] Technologia Hibernate oferuje funkcjonalność

zbliżoną do opisanego założenia, wymagane jest jednak dokonanie konfiguracji. Ważne jest

również rozważenie kwestii wydajności niektórych rozwiązań. Hibernate spełnia swoje

fundamentalne założenie, czyli pozwala na zapisywanie obiektów POJO. Ilustracja 4 pokazuje,

w jaki sposób Hibernate wpasowuje się w aplikację między kod klienta, a bazę danych.

Rysunek 4 Rola Hibernate w aplikacji Java[8]

Podczas wykorzystywania Entity Java Beans zmuszeni jesteśmy do przestrzegania wielu

Rysunek 3 Logo Hibernate[23]

Page 13: PRACA DYPLOMOWA MAGISTERSKAhome.agh.edu.pl/~kopernik/resource_PMiIDP/S_Mylnarczyk.pdfona stworzona przez firmę Sun Microsystems w roku 1995, przejętą przez Oracle w roku 2010. Logo

12

skomplikowanych konwencji nazewniczych, Hibernate nie nakłada na nas takich ograniczeń.

Jedynym, wymogiem jest posiadanie przez zapisywany obiekt domyślnego konstruktora[8].

Hibernate udostępnia proste w użyciu narzędzia, pozwalające na wygenerowanie schematu

bazy danych, bezpośrednio na podstawia obiektów POJO, które chcemy tam przechowywać.

Pozwala to na zaoszczędzenie dużej ilości czasu wymaganego wcześniej na żmudne tworzenie

schematu relacyjnej bazy danych. Dodatkowo przy użyciu dostępnych od Javy 5 adnotacji nie

ma potrzeby tworzenia konfiguracji mapowania obiektów w pliku xml[8]. Odpowiednie

obiekty i zmienne oznaczamy poprzez adnotacje, które są łatwe w użyciu, czytelne oraz proste

w utrzymaniu.

Technologia Hibernate przy pobieraniu danych z bazy rekomenduje wykorzystywanie

dostarczanego języka HQL, wprowadza to szereg korzyści. Największą zaletą tego języka jest

jego uniwersalność. Używamy tych samych poleceń i konstrukcji bez względu na to, z jakiej

bazy danych korzystamy, framework sam zadba o zgodność. Ma to niebagatelne znacznie przy

przenoszeniu aplikacji między bazami danych. Dzięki czemu nie jesteśmy przywiązani do

jednego rozwiązania i zwiększamy elastyczność naszej aplikacji. Język HQL w działaniu

wykorzystuje informacje zawarte w mapowaniu obiektów, pozwoliło to na skrócenie składni

oraz jej uproszczenie. W przypadku gdy nie chcemy z niego korzystać, Hibernate pozwala

również na pobieranie danych z wykorzystaniem natywnego języka SQL naszej bazy danych.

1.3. Javascipt

Javascript jest językiem programowania wykorzystywanym głównie na stronach internetowych.

Korzysta z niego większość witryn, jest również interpretowany przez wszystkie przeglądarki

w wielu urządzeniach takich jak komputery, smartfony, konsole oraz wielu innych. Stanowi

jedną z trzech podstawowych technologii, na których opiera się tworzenie stron internetowych.

Pierwszą z nich jest HTML, dzięki któremu jesteśmy w stanie zdefiniować zawartość, którą

chcemy zamieścić na stronie. Do technologii tych zaliczamy również CSS pozwalający na

zdefiniowanie tego, w jaki sposób zawartość naszej strony ma się prezentować. Ostatnią jest

Javascript, dzięki któremu określamy, w jaki sposób strona komunikuje się z użytkownikiem,

określa zachowanie strony. Technologia nie ma swojego

Javascript jest bez typowym, dynamicznym, interpretowalnym językiem wysokiego poziomu,

doskonale nadającym się do programowania zarówno obiektowo-zorientowanego jak i

Page 14: PRACA DYPLOMOWA MAGISTERSKAhome.agh.edu.pl/~kopernik/resource_PMiIDP/S_Mylnarczyk.pdfona stworzona przez firmę Sun Microsystems w roku 1995, przejętą przez Oracle w roku 2010. Logo

13

funkcyjnego. Jego składnia bazuje na Javie, dziedziczenie oparte na prototypach było

inspirowane językiem Self, natomiast model budowania klas działa tak jak w Scheme. [9]

Nazwa Javascript jest nieco myląca i często prowadzi do nieporozumień. Po za

powierzchownym podobieństwem składni, nie ma on tak naprawdę wiele wspólnego z Javą.

Na początku swojego istnienia był to prosty język skryptowy, jednak dzięki rosnącej

popularności znacząco się rozwinął. Obecnie jest wydajnym językiem programowania

ogólnego zastosowania. Najnowsze wersje języka pozwalają na zastosowanie go również w

dużych, skomplikowanych projektach. Jest technologią, która nie ma właściciela lecz

społeczność programistyczna wyszła z propozycją nadania technologii loga, jest ono widoczne

na rysunku 5.

Każdy użyteczny język musi posiadać swojego rodzaju platformę, bibliotekę, lub interfejs w

celu wykonywania podstawowych operacji wyjścia-wejścia. Rdzeń Javasriptu definiuje jedynie

minimalny interfejs do pracy z tabelami, datami, tekstem, wyrażeniami regularnymi, lecz nie

definiuje żadnych operacji wyjścia-wejścia, ani innych bardziej wyszukanych narzędzi[9].

Dostarczeniem tych funkcjonalności zajmuje się środowisko klienta, na którym działa program,

czyli zazwyczaj przeglądarka internetowa.

1.3.1. ThreeJs

Nowoczesne przeglądarki powoli otrzymują nowe coraz potężniejsze narzędzia, którymi

można się posługiwać bezpośrednio z Javascriptu. Znaczniki HTML5 (ang. HyperText Markup

Language) pozwalają w prosty sposób dodać na stronie film oraz dźwięk, czy interaktywny

komponent przy pomocy ‘canvas’. Stosunkowo nowym nabytkiem do tego zestawienia jest

wsparcie WebGL. Przy pomocy tej technologii można bezpośrednio uzyskać dostęp do

zasobów obliczeniowych karty graficznej komputera[10]. Daje nam to możliwość tworzenia

wydajnej grafiki 2D oraz 3D w przeglądarce.

Rysunek 5 Nieoficjalne logo Javascript

Źródło: http://www.2ality.com/2011/10/logo-js.html

Page 15: PRACA DYPLOMOWA MAGISTERSKAhome.agh.edu.pl/~kopernik/resource_PMiIDP/S_Mylnarczyk.pdfona stworzona przez firmę Sun Microsystems w roku 1995, przejętą przez Oracle w roku 2010. Logo

14

Programowanie w WebGL w przeglądarce bezpośrednio poprzez Javascript jest bardzo

skomplikowane, oraz podatne na błędy. Biblioteka Three.js czyni to zdecydowanie prostszym.

Niektóre z czynności, które upraszcza Three.js:

Tworzenie prostych oraz skomplikowanych geometrii 3D

Animowanie oraz poruszanie obiektami w scenie 3D

Dodawanie tekstur oraz materiału do obiektu

Tworzenie dwu wymiarowych grafik sprite[10]

Three.js posiada następujące narzędzia[11]:

Renderuje: WebGL, <canvas>, <svg>,kaskadowe arkusze stylów pozwalające

formatować obiekty poprzez transformacje 3D CSS3 3D (ang. Cascading Style Sheets),

obiektowy model dokumentu DOM (ang. Document Object Model), Software; efekty

jakie przy tym obsługuje: anaglif, stereoskopia i więcej

Sceny: dodawanie i usuwanie obiektów w czasie działania; mgła

Kamery: perspektywiczna oraz ortograficzna; kontrolery: manipulator kulkowy,

pierwszo-osobowy oraz inne

Animacje: morph oraz klatka kluczowa

Światła: rozmyte, kierunkowe, punktowe, miejscowe, półkula światła; cienie: rzucane i

otrzymywane

Materiały: Lambert(matowy) i Phong(błyszczący)

Shadery: dostęp do pełnych możliwości WebGL; Flara, przejścia w głąb, rozległa

biblioteka postprocesora

Obiekty: siatki, cząstki, linie, wstęgi, kości oraz wiele więcej, wszystkie z poziomami

detali

Geometrie: płaszczyzna, sześcian, sfera, torus, tekst trójwymiarowy i inne;

modyfikatory: tworzenie geometrii poprzez obrót krzywych(ang. lathe), nadawanie

dwuwymiarowym przekrojom głębokości poprzez przesuwanie go po krzywej(ang.

extrude)

Loadery: binarny, obrazów, lekkiego format wymiany danych JSON(ang. JavaScript

Object Notation) i scena(ang. scene)

Dodatkowe funkcjonalności: zestaw matematycznych funkcji do operacji w czasie i

przestrzeni trójwymiarowych w tym przecięcie bryły(ang. frustum), kwaterniony,

macierz, mapowanie UV(ang. UV mapping)

Export/Import: posiada narzędzia umożliwiające stworzenie kompatybilny obiekt

Page 16: PRACA DYPLOMOWA MAGISTERSKAhome.agh.edu.pl/~kopernik/resource_PMiIDP/S_Mylnarczyk.pdfona stworzona przez firmę Sun Microsystems w roku 1995, przejętą przez Oracle w roku 2010. Logo

15

JSON z narzędzi takich jak: Blender, FBX(ang. Filmbox), 3D MAX i formatu plików

OBJ

Wsparcie: dokumentacja techniczna w trakcie tworzenia, działające publiczne forum

oraz wiki w serwisie GitHub

Przykład: ponad 150 plików z przykładami programów, dodatkowo gotowe czcionki,

modele, tekstury, dźwięki i wiele więcej

1.4. MySQL

MySQL to najbardziej popularny Open Source’owy system zarządzania bazą danych. Stanowi

on własność firmy Oracle, która zajmuje się jego rozwojem, dystrybucją oraz wsparciem.

Bazą danych nazywamy zbiór danych, który został zapisany z zachowaniem pewnego zestawu

reguł. Sama ich zawartość może być dowolna, mogą być to informacje zebrane w wyniku

eksperymentu naukowego, asortyment oraz lista klientów niewielkiego sklepu internetowego,

czy dane sprzedażowe potężnej korporacji. Aby być w stanie je zapisywać, przetwarzać, oraz

edytować wymagane jest posiadanie systemu zarządzania bazą danych takiego jak na przykład

MySQL. Komputery w znaczący sposób upraszczają operowanie dużymi zestawami danych,

często stanowią one kluczową rolę w różnego rodzaju systemach, zarówno jako samodzielne

źródło danych, jak i część większego programu[12].

W relacyjnych bazach danych informacje pogrupowane są według ich logicznych relacji w

tabele, rzędy, kolumny oraz widoki. Relacje między danymi definiowane są przez programistę

podczas tworzenia schematu bazy. Dostępne relacje to na przykład jeden do jednego, jeden do

wielu, wiele do wielu, wymagany, unikalny, opcjonalny, czy wskaźniki na dane miedzy

tabelami. Zadaniem bazy danych jest przestrzeganie ustalonych przez nas zasad. Wymusza ich

zgodność, dzięki czemu unikamy problemów takich jak duplikaty, niezgodność, dane

przestarzałe czy brakujące. Struktura oraz zawartość bazy danych zapisywana jest do plików

na dysku, dostęp do których jest optymalizowany w celu zapewnienia szybkości.

SQL jest strukturalnym językiem zapytań (ang. Structured Query Language),

najpopularniejszym ustandaryzowanym językiem służący do dostępu do bazy danych. Za jego

pomocą jesteśmy w stanie pobrać, dodać, zmodyfikować oraz usunąć dane znajdujące się w

bazie danych MySQL. Może być wykorzystywany w różnoraki sposób, można z niego

korzystać bezpośrednio poprzez tekstową konsolę. Zapytania mogą być zapisane w programie,

a użytkownik ma możliwość korzystać z nich poprzez wykonywanie różnego rodzaju akcji na

Page 17: PRACA DYPLOMOWA MAGISTERSKAhome.agh.edu.pl/~kopernik/resource_PMiIDP/S_Mylnarczyk.pdfona stworzona przez firmę Sun Microsystems w roku 1995, przejętą przez Oracle w roku 2010. Logo

16

stronie. Program może też na przykład dostarczać swoją wersję języka, która następnie zostanie

przetłumaczona na ten używany przez bazę danych. Standard języka wykorzystywany obecnie

w MySQL to „SQL: 2003”, który został wydany w 2003 roku. Oprogramowanie udostępnione

jest na zasadach licencji GPL(General Public Licence). Oznacza to, iż każdy jest w stanie bez

ograniczeń pobierać oraz używać oprogramowania bez dodatkowych opłat. Dodatkowo kod

źródłowy jest udostępniony, co pozwala na analizowanie oraz modyfikowanie go wedle

własnych potrzeb. Logo oprogramowania przedstawione zostało na rysunku 6.

MySQL jest ceniony za swoją uniwersalność, z powodzeniem można uruchomić jego serwer

na komputerze stacjonarnym i korzystać z niego podczas tworzenia aplikacji równocześnie z

serwerem aplikacji, środowiskiem programistycznym czy przeglądarką. Po odpowiedniej

konfiguracji może w 100% wykorzystywać zasoby naszego komputera, tak aby wydajnie

dostarczać dane. Ponadto stwarza możliwość wykorzystywania go w klastrze połączonych ze

sobą siecią urządzeń[12].

Producenci od lat starają się rozwijać program w taki sposób, aby bez problemów zarządzać

wielkimi bazami danych. Jego szybkość, niezawodność i prostota użycia powodują, iż

dostarcza usług w Internecie na wysokim poziomie.

1.5. Adina

System Adina jest programem służącym do kompleksowej analizy struktur, płynów, przepływu

ciepła, elektromagnetyzmu oraz problemów złożonych fizycznie za pomocą metody elementów

skończonych[13]. Skrót ADINA oznacza automatyczną, dynamiczną, przyrostową, nieliniową

analizę (ang. Automic, Dynamic, Incremental, Nonlineral Analysys), są to słowa wchodzące w

skład loga oprogramowania rysunek 7.

Rysunek 6 Logo MySQL[25]

Page 18: PRACA DYPLOMOWA MAGISTERSKAhome.agh.edu.pl/~kopernik/resource_PMiIDP/S_Mylnarczyk.pdfona stworzona przez firmę Sun Microsystems w roku 1995, przejętą przez Oracle w roku 2010. Logo

17

W skład systemy wchodzi 8 programów składowych odpowiadających za różne części

funkcjonalności. Razem tworzą jeden program oferujący pełen zakres usług. Struktura

programów składowych przedstawiona została na rysunku 8.

Rysunek 8Moduły systemu ADINA[13]

ADINA Structures – dostarcza najnowocześniejszych narzędzi do analizy naprężeń w

bryłach oraz konstrukcjach, zarówno w dwu- jak i trójwymiarze. Obsługuje modele

statyczne oraz dynamiczne, analiza może być liniowa lub nieliniowa, włączając w to

efekty nieliniowości materiału, dużych deformacji i warunków styku. [14] Adina

Rysunek 7 Logo Adina[26]

Page 19: PRACA DYPLOMOWA MAGISTERSKAhome.agh.edu.pl/~kopernik/resource_PMiIDP/S_Mylnarczyk.pdfona stworzona przez firmę Sun Microsystems w roku 1995, przejętą przez Oracle w roku 2010. Logo

18

dostarcza nowoczesnych gotowych do użycia rozwiązań dla ciał stałych, kratownic,

belek, rur, płyt, powłok, przerw. Modele materiałów dla metali, ziemi i kamieni, plastiku,

tworzyw, drewna, ceramiki i betonu.

ADINA CFD – program, który w zaawansowany sposób wykorzystuje metody

elementów skończonych oraz kontroli objętości dla nieskompresowanych oraz

skompresowanych przepływów. Przepływ może napotykać ruchome elementy miedzy

płynami oraz między płynami i strukturami[15]. Procedura użyta w Adina CFD bazuje

na modelu dyskretyzacji elementów skończonych oraz skończonej objętości, z

najbardziej uniwersalnym i wydajnym podejściem do rozwiązania.

ADINA EM – elektromagnetyzm jest bardzo ważną dziedziną nauki i inżynierii. Jest to

istotne zjawisko zwłaszcza, gdy jego wyniki połączymy z wynikami układów

mechanicznych czy przepływów płynów. Można znaleźć wiele istotnych zastosowań

dla takich rozwiązań, np: silniki elektryczne, bilans energetyczny pieców, zabiegi

medyczne, przełączniki elektromagnetyczne, pompy elektromagnetyczne, przewodniki

fal, anteny, linie transmisyjne, nieniszczące testy metali i wiele innych. Wszystkie te

zjawiska elektromagnetyczne oraz zastosowania są opisywane przez ogólne równanie

Maxwell’a. Adina rozwinęła program ADINA-EM, aby umożliwić rozwiązywanie

równania Maxwell’a dla różnych danych początkowych oraz warunków

brzegowych[16]. Jest to funkcja szczególnie przydatna w przypadku problemów

wielofizycznych, czyli połączonych z deformacją struktur czy przepływami płynów.

ADINA Thermal – jest wykorzystywany w celu rozwiązywania problemów przepływu

ciepła w bryłach oraz konstrukcjach. Posiada przydatne funkcjonalności takie jak

wyliczanie radiacji pomiędzy bezwzględnymi geometriami, funkcje utworzenia,

rozpadu elementów i obsługę nieliniowego zachowania materiału[17].

ADINA FSI – do interakcji płynu i struktury dochodzi, gdy przepływ płynu powoduje

jej deformację. Natomiast odkształcenie to powoduje zmianę warunków brzegowych

przepływu. Adina posiada możliwość rozwiązywania tego typu problemów w

pojedynczym programie, gdzie płyny mogą być całkowicie sprzężone ze strukturą,

która może powodować silnie nie liniowe reakcje pod wpływem dużych deformacji,

nieelastyczności, kontaktu i zależności temperaturowych. Całkowite sprzężenie

struktury z płynem oznacza, że reakcja brył jest silnie uzależniona od reakcji płynu i na

Page 20: PRACA DYPLOMOWA MAGISTERSKAhome.agh.edu.pl/~kopernik/resource_PMiIDP/S_Mylnarczyk.pdfona stworzona przez firmę Sun Microsystems w roku 1995, przejętą przez Oracle w roku 2010. Logo

19

odwrót.

Rysunek 9 pokazuje odkształcenie struktury pod wpływem przepływu płynu.

Rysunek 9 Interakcja struktury z płynem[27]

ADINA TMC – jest przeznaczona przede wszystkim do rozwiązywania problemów

termomechanicznych. Program obsługuje całkowicie sprzężone układy, gdzie

rozwiązania termiczne wpływają na rozwiązania strukturalne i odwrotnie. ADINA TMC

obsługuje również jednostronnie sprzężone układy, w których jedna z dziedzin

fizycznych wpływa na drugą, natomiast sprzężenie to nie zachodzi w odwrotnym

kierunku.

ADINA Multiphysics – problemy wielofizyczne są spotykane, gdy na wynik systemu

wpływają oddziaływania pomiędzy kilkoma osobnymi dziedzinami fizycznymi (np.

deformacja bryły, przepływ płynów, pole elektryczne, temperatura itd.). Wiele

problemów inżynieryjnych wymaga na jakimś poziomie współzależności pomiędzy

różnymi dziedzinami fizyki. W przeszłości z uwagi na brak możliwości obliczeniowych

takie oddziaływania były ignorowane lub brane pod uwagę w pewnym przybliżeniu[18].

Wraz z obecnymi możliwościami analitycznymi dostępnymi w Adinie wiele ważnych

efektów związanych z połączeniem różnych domen fizycznych może być teraz

wykorzystywanych w obliczeniach z większą dokładnością. Dzięki temu analizy

dostarczają dogłębnego wglądu w wydajność modelu, prowadzą do wydajniejszych

ekonomicznie i bezpieczniejszych produktów.

ADINA User Interface –dostarcza kompletnych narzędzi do przetwarzania

początkowego i końcowego dla wszystkich programów wchodzących w skład systemu

Adina[13].

Page 21: PRACA DYPLOMOWA MAGISTERSKAhome.agh.edu.pl/~kopernik/resource_PMiIDP/S_Mylnarczyk.pdfona stworzona przez firmę Sun Microsystems w roku 1995, przejętą przez Oracle w roku 2010. Logo

20

ADINA Modeler – jest dodatkiem do interfejsu użytkownika. Dostarcza narzędzi do

tworzenia modeli oraz do integracji modeli z systemami CAD.

CAD/CAE Interfaces –w programie ADINA Modeler możemy bezpośrednio wczytać

geometrię CAD(np. NX, SolidWorks i Solid Edge), a także dodatkowo Adina dostarcza

programów umożliwiających wczytanie danych z systemów takich jak I-DEAS i Femap.

Pośrednio istnieje również możliwość wczytania informacji z innych programów

poprzez interfejs IGES(np. CATIA) [13].

Poza post- i preprocesorem Adina całkowicie wspiera obliczenia równoległe.

Dekompozycja dziedziny jest dokonywana automatycznie, a zrównoleglanie wspiera

obliczenia, składnie macierzy elementów, rozwiązywanie równań, oraz wyliczanie

wyników elementu[19]. System Adina jest globalnie stosowany w badaniach, przemyśle i

nauczaniu. Coraz częściej jest wykorzystywana wspólnie z programami CAD.

Page 22: PRACA DYPLOMOWA MAGISTERSKAhome.agh.edu.pl/~kopernik/resource_PMiIDP/S_Mylnarczyk.pdfona stworzona przez firmę Sun Microsystems w roku 1995, przejętą przez Oracle w roku 2010. Logo

21

2. Cel pracy

Celem niniejszej pracy magisterskiej jest stworzenie aplikacji internetowej, która

umożliwiałaby wizualizację oraz dostarczała podstawowych narzędzi pomagających w analizie

modelu. A także testy wybranych technologii pod kątem przydatności w wizualizacji modeli.

Aplikacja do działania nie powinna wymagać od użytkownika instalowania żadnego

dodatkowego oprogramowania po za przeglądarką. Powinna być dostępna dla wielu

użytkowników równocześnie. Aplikacja powinna być intuicyjna i prosta w użyciu.

Do wizualizacji wykorzystywane będą modele tworzone w komercyjnym oprogramowaniu The

ADINA System. Modele wybrane zostaną pod kątem atrakcyjności modelu i jego

skomplikowania, w celu stworzenia jak najdokładniejszego narzędzia do konwersji.

Do budowy aplikacji internetowej wykorzystany zostanie szereg technologii. W części

serwerowej wykorzystany zostanie język programowania Java, z użyciem framework’a

aplikacji Spring, oraz Hibernate’a do realizacji warstwy dostępu do danych. Są to narzędzia

dostępne na rynku od wielu lat, które bardzo często są wykorzystywane w tego typu

programach. Interfejsem użytkownika będzie strona internetowa. Do jej budowy zastosowany

będzie framework CSS Bootstrap. Jest to zestaw prostych w użyciu narzędzi CSS, HTML oraz

Javascript ułatwiających tworzenie responsywnych stron internetowych.[20]. Modele

wizualizowane będą z wykorzystaniem biblioteki Javascript’owej Three.js. Natomiast

wszystkie wczytane dane zapisane zostaną w relacyjnej bazie danych MySQL.

Page 23: PRACA DYPLOMOWA MAGISTERSKAhome.agh.edu.pl/~kopernik/resource_PMiIDP/S_Mylnarczyk.pdfona stworzona przez firmę Sun Microsystems w roku 1995, przejętą przez Oracle w roku 2010. Logo

22

3. Wykonanie przykładowych symulacji w programie komercyjnym.

Wszystkie symulacje zawarte w niniejszej pracy zostały wykonane przy wykorzystaniu

programu The ADINA System. Rozwiązane problemy pochodzą z dołączonej do programu

dokumentacji i są przykładowymi problemami, których rozwiązanie ma za zadanie nauczyć

użytkownika obsługi programu. Poniższy opis ma na celu przybliżenie czytelnikowi

wykorzystywanych modeli w celu łatwiejszego i dokładniejszego zrozumienia pracy.

3.1 Analiza FSI uproszczonej turbiny z wykorzystaniem siatki przesuwnej

Uproszczona turbina jest zanurzona w płynie tak jak na rysunku 10.

Na początku analizy turbina jest w spoczynku. Następnie na jej wejście zostaje nadane ciśnienie.

Płyn przepływa przez obudowę turbiny, przez co wirnik zaczyna się obracać.

Model jest dwuwymiarowy i płaski.

Rysunek 10 Uproszczona turbina[26]

Page 24: PRACA DYPLOMOWA MAGISTERSKAhome.agh.edu.pl/~kopernik/resource_PMiIDP/S_Mylnarczyk.pdfona stworzona przez firmę Sun Microsystems w roku 1995, przejętą przez Oracle w roku 2010. Logo

23

W związku z tym, że turbina może się obracać nieokreśloną ilość razy wygodnie jest

modelować płyn otaczający turbinę razem z elementami, które się w niej obracają. Te elementy

poruszają się przez obiekty, które są w pobliżu obudowy tak jak na rysunku 11.

Rysunek 11 Rodzaje siatek naniesionych na model turbiny.[26]

Płyn może przepływać przez granicę poruszającej się siatki.

Istotne parametry części symulacji opisującej ruch płynu:

Właściwości fizyczne płynu:

o Gęstość – 1000 [kg/m3]

o Lepkość – 0.01 [kg/m∙s]

o Współczynnik sprężystości objętościowej – 1∙1020[Pa]

Siłą ciągu – stałą w czasie, 10000[Pa]

Czas – 120 kroków czasowych – 24 sekundy

Page 25: PRACA DYPLOMOWA MAGISTERSKAhome.agh.edu.pl/~kopernik/resource_PMiIDP/S_Mylnarczyk.pdfona stworzona przez firmę Sun Microsystems w roku 1995, przejętą przez Oracle w roku 2010. Logo

24

Gotowy model wygenerowany w programie Adina został przedstawiony na rysunku 12.

Właściwości fizyczne opisujące ruchomą część modelu:

Materiał:

o Izotropowy liniowy elastyczny

o Moduł Younga – 2.07∙1011 [Pa]

o Współczynnik Poisson’a – 0.3

o Gęstość – 7800 [kg/m3]

o Współczynnik rozszerzalności cieplnej – 0 [1/K]

Granica interakcji FSI – na Rys.13 zaznaczona białą linią.

Punkt stały – w środku modelu, na rys.13 zaznaczony dwoma literami „B”.

Rysunek 12 Obudowa turbiny wraz ze zdefiniowanym płynem

Page 26: PRACA DYPLOMOWA MAGISTERSKAhome.agh.edu.pl/~kopernik/resource_PMiIDP/S_Mylnarczyk.pdfona stworzona przez firmę Sun Microsystems w roku 1995, przejętą przez Oracle w roku 2010. Logo

25

3.2 Analiza klejonego wału z wykorzystaniem ADINA-M/PS

Analiza będzie dotyczyć wału oraz obręczy, które zostały przedstawione na rysunku nr 14.

Rysunek 13 Ruchoma część turbiny

Page 27: PRACA DYPLOMOWA MAGISTERSKAhome.agh.edu.pl/~kopernik/resource_PMiIDP/S_Mylnarczyk.pdfona stworzona przez firmę Sun Microsystems w roku 1995, przejętą przez Oracle w roku 2010. Logo

26

Rysunek 14 Wał wraz z pierścieniem[26]

Pierścień jest przyklejony do wału.

Taki problem można by rozwiązać przy pomocy jednej geometrii. Jednak w tym przypadku do

rozwiązania użyte zostaną dwie geometrie wału, oraz pierścienia. Kształty zostaną sklejone ze

sobą przy pomocy siatki klejącej(ang. gluemesh).

Właściwości modelu:

Materiał:

o Izotropowy liniowy elastyczny

o Moduł Younga – 2.07∙105 [Pa]

o Współczynnik Poisson’a – 0.29

o Gęstość –0 [kg/m3]

o Współczynnik rozszerzalności cieplnej – 0 [1/K]

Nacisk – 2 [MPa], w kierunku osi Y, na rysunku nr 15 zaznaczony czerwonymi

strzałkami

Page 28: PRACA DYPLOMOWA MAGISTERSKAhome.agh.edu.pl/~kopernik/resource_PMiIDP/S_Mylnarczyk.pdfona stworzona przez firmę Sun Microsystems w roku 1995, przejętą przez Oracle w roku 2010. Logo

27

4. Opis implementacji wykonanej aplikacji

4.1 Schemat bazy danych

Rysunek 15 Gotowy model wału i pierścienia, z zaznaczonym wektorem nacisku

Page 29: PRACA DYPLOMOWA MAGISTERSKAhome.agh.edu.pl/~kopernik/resource_PMiIDP/S_Mylnarczyk.pdfona stworzona przez firmę Sun Microsystems w roku 1995, przejętą przez Oracle w roku 2010. Logo

28

Rysunek 16 Graf przedstawiający schemat bazy danych

Page 30: PRACA DYPLOMOWA MAGISTERSKAhome.agh.edu.pl/~kopernik/resource_PMiIDP/S_Mylnarczyk.pdfona stworzona przez firmę Sun Microsystems w roku 1995, przejętą przez Oracle w roku 2010. Logo

29

Rysunek 16 zawiera graficzną reprezentację wygenerowanej struktury bazy danych. Każdy z

bloków reprezentuje jedną tabele oraz zawarte w nim atrybuty. Natomiast linie między nimi

obrazują zależności tabel.

Na górze grafu znajdują się trzy tabele, w których przechowywane są dane na temat

użytkowników systemu. Posiadanie konta jest konieczne w celu zalogowania się do aplikacji.

‘users’ zawiera loginy i hasła użytkowników, ‘roles’ przechowuje informacje o dostępnych

rolach w systemie, natomiast ‘user_roles’ mapuje użytkowników na poszczególne role.

Połączenia między tabelami informują, że jeden użytkownik może posiadać wiele ról, i na

odwrót. Zapisywane w systemie symulacje nie są w żaden sposób zależne od danych

zgromadzonych w tych tabelach. Jest to uproszczenie zastosowane świadomie, taka

funkcjonalność nie wnosiła by niczego nowego jeśli chodzi o temat pracy . Sposób połącznia

użytkowników z symulacjami w dużej mierze zależy od przeznaczenia oraz wymagań

stawianych końcowemu projektowi.

Na rysunku 16 poniżej tabeli z użytkownikami znajduje się blok o nazwie ‘simulation’. Dla

każdej wczytanej do systemu symulacji tworzony jest w niej pojedynczy wpis. Zawiera

informacje o jej nazwie, opisie, czy rodzaju przestrzeni, jest połączony przez relacje z innymi

tabelami przechowującymi dane modelu. ‘simulation_nodal_point’ zawiera numery oraz

współrzędne węzłów tworzących model. Połączenia między węzłami składowane są w tabelach

‘simulation_element_data’, ‘simulation_element_data_node’ oraz

‘simulation_element_data_node_value’. Pierwsza z nich tworzona jest dla każdej z geometrii

składających się na model, druga dla każdego z prymitywów, a ostatnia dla każdej z wartości.

Za zapisywanie wartości reprezentujących wyniki obliczeń, używane do tworzenia wykresów

odpowiada ‘simulation_deformation’. Zapisywane są w niej informacje o każdym z plików,

‘simulation_deformation_node’ składa się z danych o krokach czasowych, natomiast wartości

dla poszczególnych punktów odnotowane są w tabeli ‘simulation_deformation_node_value’.

Wszystkie tabele bazy danych mają swoje odpowiedniki klas w aplikacji, te obiekty zawierają

identyczne pola oraz zależności między sobą. Wczytywanie oraz zapisywaniem klas w bazie

danych zarządza technologia Hibernate. Dzięki zdefiniowanym relacjom podczas zapisu nowej

symulacji do bazy danych nie ma konieczności zapisywania całej hierarchii obiektów ręcznie.

Do odpowiednich metod technologii przesyłane są jedynie obiekty ’Simulation’, które

zawierają wszystkie potrzebne informacje, a Hibernate sam odpowiednio przygotuje dane do

zapisu w bazie danych.

Page 31: PRACA DYPLOMOWA MAGISTERSKAhome.agh.edu.pl/~kopernik/resource_PMiIDP/S_Mylnarczyk.pdfona stworzona przez firmę Sun Microsystems w roku 1995, przejętą przez Oracle w roku 2010. Logo

30

4.2 Eksport danych z Adiny

Podczas czynności związanych z operacjami na symulacji, czyli tworzenia modelu,

wprowadzania danych symulacji oraz przeprowadzania obliczeń program ADINA generuje

duże ilości danych. Wśród nich znajdują się informacje potrzebne do działania postprocesora,

np.:

Informacje o współrzędnych punktów modelu – W zależności od przeprowadzanej

symulacji jedno-, dwu- lub trójwymiarowej do stworzenia graficznej reprezentacji

modelu potrzebne są informacje o punktach go tworzących. Zazwyczaj jest to lista

ponumerowanych punktów oraz ich współrzędne składowe w układzie współrzędnych.

Są to punkty tworzone podczas wprowadzania modelu do systemu.

Informacje o połączeniach punktów - Aby poprawnie odtworzyć model wprowadzony

do programu potrzebne są również informacje o tym, w jaki sposób punkty, które

wchodzą w jego skład są ze sobą połączone. W grafice komputerowej modele składają

się z mniejszych elementów składowych, czyli prymitywów. Połączenia między

punktami zapisuje się w formie grupy numerów reprezentujących punkty, które

wchodzą w skład jednego elementu składowego.

Informacje o wyniku obliczeń – Są to dane, które umożliwią analizę wyników

wykonanej symulacji poprzez wyświetlenie wykresu. Mogą to być informacje o

przesunięci punktów w wyniku działających warunków. Wielkości sił działających na

punkty, czy zmieniające się warunki fizyczne w wyniku zachodzących w modelu

procesów.

Podczas tworzenia modelu oraz wykonywania symulacji powstaje szczereg plików z których

część zawiera informacje, które można wykożystać w dalszym procesowaniu.

Tabela 1Lista możliwych plików do wygenerowania z programu ADINA

Rozszerzenie pliku Pochodzenie Zawarte informacje

in Jeden z formatów, do którego

zapisać możemy gotowy model.

Plik tekstowy zawierający listę

spisanych komend umożliwiających

odtworzenie modelu.

idb Jeden z formatów, do którego

zapisać możemy gotowy model.

Plik bazy danych zawierający dane

w formie binarnej. Nieczytelny bez

znajomości szczegółów zapisu.

Page 32: PRACA DYPLOMOWA MAGISTERSKAhome.agh.edu.pl/~kopernik/resource_PMiIDP/S_Mylnarczyk.pdfona stworzona przez firmę Sun Microsystems w roku 1995, przejętą przez Oracle w roku 2010. Logo

31

nas Eksport modelu do programu

NASTRAN

Plik tekstowy zawierający dane

dotyczace modelu. Współrzędne

punktów, ich połączenia, oraz inne

podstawowe informacje takie jak

zdefiniowane w symulacji siły.

unv Eksport modelu do formatu

Universal programu I-DEAS

Zawiera te same informacje co plik

‘nas’. Lecz są inaczej sformatowane

dat Powstaje podczas zapisu

gotowego modelu do

przprowadzenia symulacji

Plik tekstowy zawierający

wszystkie dane na temat modelu i

warunków fizycznych

przeprowadzanej symulacji.

Zawiera współrzedne punktów

składowych, połaczenia między

punktami oraz takie informacje jak

dane własności materiału, funkcje

czasu, warunki początkowe i inne.

mds, res, por Powstaje po przeprowadzonej

symulacji

Zawiera nieczytelne dane binarne.

out Powstaje po przeprowadzonej

symulacji

Zawiera podsumowanie

przeprowadzonej symulacji. Zużytą

pamięć, czas trwania obliczeń itp.

dowolny W trybie post-procesora z menu

List, opcja Value list -> Zone

Możliwość zapisu różnego rodzaju

danych dotyczących

przeprowadzonej symulacji do pliku

tekstowego o dowolnym

rozszerzeniu. Umożliwia zapis od

jednej do 6 kolumn z różnymi

informacjami np. naprężeniem,

przemieszczeniem, ciśnieniem,

czasem.

Page 33: PRACA DYPLOMOWA MAGISTERSKAhome.agh.edu.pl/~kopernik/resource_PMiIDP/S_Mylnarczyk.pdfona stworzona przez firmę Sun Microsystems w roku 1995, przejętą przez Oracle w roku 2010. Logo

32

Jak informuje tabela 1 pliki mds, res, por oraz idb nie są użyteczne z punktu widzenia

opisywanej w tej pracy aplikacji. Plik por zawiera najwięcej przydatnych danych. Na jego

podstawie ładowany jest zarówno model jak i wszystkie informacje o wykonanej symulacji, na

bazie których działa postprocessor Adiny. Niestety plik ten zawiera dane zapisane w formacie

binarnym. Ich odczytanie bez kodu źrudłowego byłoby bardzo trudne lub wręcz niemożliwe.

Z pozostałych plików te eksportowane do formatów ‘unv’ oraz ‘nas’ zawierają identyczne dane.

Podobne informacje zawiera plik ‘dat’, zapisane w nim dane są jednak lepiej opisane jest ich

również wiecej.

C*** [4] MASS AND DAMPING CONTROL

0 0 0 0 0.0 0.0 0

0.100000E-3 0 0

0 0 0 0 0 0

C*** [5] EIGENVALUE SOLUTION CONTROL

0 1 0 -1 0 0 0 0 1 0.0 1

50

0 0 0 0 1 0 1 0.0

0.0.540000000

C*** [6] TIME INTEGRATION METHOD CONTROL

0 0.500000000.250000000 0 0 0 0 0.010000000

0

1.900000000.0010000008.00000000 0.0

0.01.00000000.500000000

Każda kolejna sekcja poprzedzona jest znacznikiem ‘C***’ oraz unikalnym tytułem, dzięki

czemu w prosty sposób można skonstruować parser wyciągający z tekstu dokładnie te

informacje, które są nam potrzebne. Dodatkowo tytuły są łatwo zrozumiałe, dzięki czemu w

prosty sposób można wywnioskować, czego dotyczą przedstawione wartości. Dla porównania

w formacie ‘unv’, jako nagłówki wykorzystywane są wartości liczbowe gdzie wartość

‘2411‘ oznacza węzły. Więcej informacji zawartych w pliku ‘dat’ daje większe możliwości

rozwoju programu w przyszłości. Na podstawie przedstawionych argumentów, jako źródło

informacji o wczytywanym modelu oraz o warunkach symulacji wybrano plik ‘dat’.

W przypadku danych dotyczących wyników dokonanych obliczeń jedynym rozwiązaniem było

pobieranie ich poprzez funkcję ‘Value list’. Interfejs ten udostępnia wiele interesujących

danych dotyczących wyniku przeprowadzonych obliczeń. W zależności od rodzaju wybranych

informacji oraz zastosowanych technik przybliżania, program wypisuje wartości różnych

wielkości fizycznych dla węzłów, prymitywów, lub poszczególnych punktów w prymitywie.

Page 34: PRACA DYPLOMOWA MAGISTERSKAhome.agh.edu.pl/~kopernik/resource_PMiIDP/S_Mylnarczyk.pdfona stworzona przez firmę Sun Microsystems w roku 1995, przejętą przez Oracle w roku 2010. Logo

33

Wartości te mogą być wyliczone dla poszczególnych osi układu współrzędnych, lub mogą być

od niej niezależne. Przykładowa część wygenerowanych danych.

ADINA: AUI version 9.0.0, 25 August 2015: Primer problem 37: FSI

analysis of a simplified turbine, solid model

Licensed from ADINA R&D, Inc.

Finite element program ADINA, response range type load-step:

Listing for zone WHOLE_MODEL:

Element field variables are evaluated using RST interpolation

and smoothed with nodal average values.

On shell sections, element variables are evaluated on the shell

top layer, t = 1.00

POINT STRAIN-XX STRAIN-YY STRAIN-ZZ

Time 2.00000E-01

Node 1 0.00000E+00 -3.62224E-09 -3.27458E-09

Node 2 0.00000E+00 -2.87238E-09 -2.89191E-09

Node 3 0.00000E+00 -2.15482E-09 -2.50844E-09

Node 4 0.00000E+00 -1.61716E-09 -4.60001E-09

Node 5 0.00000E+00 -2.87702E-09 -2.89566E-09

Node 6 0.00000E+00 -4.13892E-09 -1.18782E-09

Node 7 0.00000E+00 6.15760E-09 -8.15932E-09

Node 8 0.00000E+00 -2.87499E-09 -2.89698E-09

Node 9 0.00000E+00 -1.19133E-08 2.36727E-09

Jak widać nagłówek wygenerowanego pliku zawiera informacje na temat pochodzenia

zawartych danych oraz sposobie ich wyliczenia. Przedstawione dane dotyczą odkształcenia

wirnika turbiny pod wpływem przepływu cieczy. Dane wygenerowane są dla trójwymiarowego

Page 35: PRACA DYPLOMOWA MAGISTERSKAhome.agh.edu.pl/~kopernik/resource_PMiIDP/S_Mylnarczyk.pdfona stworzona przez firmę Sun Microsystems w roku 1995, przejętą przez Oracle w roku 2010. Logo

34

układu jednak jak widać wartości dla osi X są zerami, ponieważ model jest dwuwymiarowy.

Page 36: PRACA DYPLOMOWA MAGISTERSKAhome.agh.edu.pl/~kopernik/resource_PMiIDP/S_Mylnarczyk.pdfona stworzona przez firmę Sun Microsystems w roku 1995, przejętą przez Oracle w roku 2010. Logo

35

4.3 Wczytywanie danych z dostarczonych plików.

Część kodu odpowiedzialnego za wczytywanie danych przedstawiona jest na diagramie klas na

rysunku 17.

Rysunek 17 Diagram klas części wczytującej dane

Page 37: PRACA DYPLOMOWA MAGISTERSKAhome.agh.edu.pl/~kopernik/resource_PMiIDP/S_Mylnarczyk.pdfona stworzona przez firmę Sun Microsystems w roku 1995, przejętą przez Oracle w roku 2010. Logo

36

Dane na temat modelu oraz przebiegu symulacji możemy wczytać do systemu na dwa sposoby.

Podczas dodawania nowego modelu oraz edycji już istniejącego.

Rysunek 18Interfejs - dodawanie i edycja modelu

Na rysunku 18 strzałką wskazany jest panel, poprzez który możemy dojść do ekranu dodawania

oraz edycji symulacji.

Page 38: PRACA DYPLOMOWA MAGISTERSKAhome.agh.edu.pl/~kopernik/resource_PMiIDP/S_Mylnarczyk.pdfona stworzona przez firmę Sun Microsystems w roku 1995, przejętą przez Oracle w roku 2010. Logo

37

Rysunek 19Interfejs - Okno dodawania symulacji

Strona dodawania nowej symulacji widoczna na rysunku 19 umożliwia wprowadzenie nazwy,

po której będziemy identyfikować model, oraz opisu słownego, który umożliwi innym

użytkownikom zorientowanie się czego dotyczy wczytany model. Pole ‘Simulation files’ służy

do wczytywania plików z danymi. Akceptowane są pliki ‘dat’ z danymi modelu oraz ‘txt’ z

informacjami o wynikach obliczeń. W przypadku dużej ilości węzłów takie pliki mogą być

bardzo duże, powyżej 100 MB, wiec została wprowadzona obsługa danych skompresowanych.

Piki, które chcemy załączyć można spakować do formatu ‘zip’, a system dokona dekompresji

archiwum już po stronie serwera. Dzięki takiemu rozwiązaniu użytkownik oszczędza dużo

czasu na załączaniu plików.

Page 39: PRACA DYPLOMOWA MAGISTERSKAhome.agh.edu.pl/~kopernik/resource_PMiIDP/S_Mylnarczyk.pdfona stworzona przez firmę Sun Microsystems w roku 1995, przejętą przez Oracle w roku 2010. Logo

38

Rysunek 20 Interfejs – okno edycji

Strona edycji udostępnia użytkownikowi te same informacje, co strona dodawania symulacji, a

dodatkowo umożliwia zmianę wczytanych z plików wartości, rysunek 20. Przy kilku tysiącach

węzłów, po stworzeniu dla każdego z nich pola tekstowego strona stała by się nieczytelna. Więc

w zakładce ‘Options’ widocznej na rysunku 21 udostępniona została możliwość ograniczenia

listy wyświetlanych danych.

Rysunek 21 Interfejs – okno edycji, opcje

Po wczytaniu plików wysyłane są one na serwer, następnie archiwa są rozpakowywane, a pliki

umieszczane w liście. W zależności o rozszerzenia pliku są one analizowane w odpowiedni dla

siebie sposób, pliki błędne są ignorowane. Ta funkcjonalność realizowana jest w klasie

‘SimulationDataExtractionADINA’ w następujący sposób.

Page 40: PRACA DYPLOMOWA MAGISTERSKAhome.agh.edu.pl/~kopernik/resource_PMiIDP/S_Mylnarczyk.pdfona stworzona przez firmę Sun Microsystems w roku 1995, przejętą przez Oracle w roku 2010. Logo

39

for(Entry<String, List<String>> file:fileList.entrySet())

{

if(file.getKey().endsWith(".dat")){

analyzeDatFile(file);

}

if(file.getKey().endsWith(".txt")){

deformationCounter = analyzeTxtFile(deformationCounter,

file);

}

}

4.3.1 Wczytywanie danych o węzłach

Dane o węzłach modelu znajdują się w pliku ‘dat’ w bloku zatytułowanym ‘NODAL POINT

DATA’. Dla symulacji struktur informacje zorganizowane są w następujący sposób:

C*** NODAL POINT DATA

1 0.000000000000 -1.700000000000 0.1500000000000 0

0 1 0 0

1 0 0 0 0 0 0

0 1 2 0 0 0

2 0.000000000000 -1.700000000000 0.000000000000

0 0 1 0 0

1 0 0 0 0 0 0

0 3 4 0 0 0

3 0.000000000000 -1.700000000000 -0.1500000000000

0 0 1 0 0

W plikach opisujących symulacje zawierające interakcje z płynami wygląda to nieco

odmiennie.

C*** NODAL POINT DATA

1 0 1 2 3 0 0

0

0 0 0 0

0.000000000000 0.1500000000000 1.700000000000 1

2 0 4 5 6 0 0

Page 41: PRACA DYPLOMOWA MAGISTERSKAhome.agh.edu.pl/~kopernik/resource_PMiIDP/S_Mylnarczyk.pdfona stworzona przez firmę Sun Microsystems w roku 1995, przejętą przez Oracle w roku 2010. Logo

40

0

0 0 0 0

0.000000000000 0.1500000000000 1.557142857143 1

3 0 7 8 9 0 0

0

0 0 0 0

0.000000000000 0.1500000000000 1.414285714286 1

Na załączonych częściach plików numer węzła został zaznaczony kolorem czerwonym.

Niebieskim kolorem wyszczególnione zostały współrzędne węzła w układzie współrzędnych.

Pozostałe dane są nieistotne z punktu widzenia aplikacji. Numery oraz współrzędne węzłów

pobierane są w klasie ‘ConvertDatFileAdina’, dla modeli struktur kod za to odpowiedzialny

wygląda następująco:

String pointNr = StringUtils.strip(line.substring(0, 10));

String pointX = StringUtils.strip(line.substring(10, 30));

String pointY = StringUtils.strip(line.substring(30, 50));

String pointZ = StringUtils.strip(line.substring(50, 70));

Natomiast dla płynów:

String pointNr = StringUtils.strip(line.substring(0, 10));

String pointX = StringUtils.strip(line2.substring(0, 20));

String pointY = StringUtils.strip(line2.substring(20, 40));

String pointZ = StringUtils.strip(line2.substring(40, 60));

Zmienna ‘line’ zawiera obecnie przetwarzaną linię, natomiast zmienna ‘line2’ zawiera linię

znajdującą się dwa wiersze niżej. Przy przetwarzaniu wykorzystany został fakt, iż odległości

między zmiennymi w pliku są stałe. Pozwala to na wycinanie danych z linii według stałych

wartości. Wycięte informacje przekształcane zostają do odpowiednich wartości liczbowych, a

na końcu umieszczane w obiektach ‘SimulationNodalPoint’, które zapisywane są w bazie

danych.

4.3.2 Wczytywanie danych o prymitywach

Prymitywy zapisywane są w pliku ‘dat’ w bloku o nazwie ‘ELEMENT DATA’, dodatkowe

informacje o siatce znajdują się w rozdziale ‘ELEMENT GROUP’. Obydwie te grupy mogą

znajdować się w jednym pliku wielokrotnie, raz dla każdej zdefiniowanej w modelu siatki. Dla

modelu strukturalnego wygląda to następująco.

Page 42: PRACA DYPLOMOWA MAGISTERSKAhome.agh.edu.pl/~kopernik/resource_PMiIDP/S_Mylnarczyk.pdfona stworzona przez firmę Sun Microsystems w roku 1995, przejętą przez Oracle w roku 2010. Logo

41

*** ELEMENT GROUP 2 THREEDSOLID

3 357 0 0 0 0 8 1 0 2 2 0 0 0 1 1

0 0 0 2

0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0

0 0 0 0

0 0 0 0 0 0 0 0 0 0

0 0 0 -1 0 0 0 0 0 0

0 0 0 0 0 0 0 0 0 0

0 0 0 0 26 0 2 0 0 0

0.000000000000 0.000000000000 0.000000000000

0.000000000000

0.000000000000 0.1000000000000E-01 0.000000000000

0.000000000000

0.000000000000 1.000000000000 0.000000000000

0.000000000000

0.000000000000 0.000000000000 0.000000000000

0.000000000000

0 0 0 0 0 0 0

0

0 0 0 0 0 0 0

0

0 0 0 0 0 0 0

1

8 17441

W przypadku symulacji zawierających przepływ płynu:

C*** ELEMENT GROUP 1 TWOD

60 0 0 0 0 0 0

0

2 836 0 0 1 0 4

1

111 3 0 0 0 0 1

1

0 0 1 0 0 0 0

0

Page 43: PRACA DYPLOMOWA MAGISTERSKAhome.agh.edu.pl/~kopernik/resource_PMiIDP/S_Mylnarczyk.pdfona stworzona przez firmę Sun Microsystems w roku 1995, przejętą przez Oracle w roku 2010. Logo

42

0 0 0 0 0 0 0

0

0 0 0 0 0 0 0

1

0 0 0 0 0 0 0

0

0 0 0 0 0 0 0

1

0 0 0 0

Kolorem czerwonym zaznaczony został numer siatki, niebieski kolor wskazuje na tekst

informujący o rodzaju przestrzeni, w jakiej stworzony został model, dwu lub trój wymiarowej.

Kolorem zielonym wyróżniona została liczba prymitywów w siatce, natomiast fioletowym

największa ilość węzłów wchodząca w skład prymitywu.

Formatowanie bloku ‘ELEMENT DATA’ dla modelu nie zawierającego przepływu płynów:

C*** ELEMENT DATA

11 4 0 0 1 0 1 0.0 0 1 0.0 0 0

625 908 560 531

21 4 0 0 1 0 1 0.0 0 1 0.0 0 0

1047 622 854 543

Dla symulacji gdzie modelowana była interakcja z płynem:

C*** ELEMENT DATA

1 4 0 1 0.00000000E+00 0.00000000E+00

1 2 10 9

2 4 0 1 0.00000000E+00 0.00000000E+00

2 3 11 10

Kolor czerwony oznacza numer prymitywu, fioletowy ilość węzłów, a niebieski numer węzła

w wierzchołku prymitywu.

Ilość punktów może się zmieniać w ramach jednego bloku ‘ELEMENT DATA’, stała pozostaje

za to odległość między kolejnymi liczbami oraz ilość danych mieszczących się w jednej linii.

W związku z tym kod wycinający numery z tekstu przyjmuje dość skomplikowaną formę.

for (int i = 0; i < numberOfPointsInt; i++) {

if (i < 8) {

points.add(StringUtils.strip(StringUtils.substring(

line.get(index + 1), i * 10, 10 + (i * 10))));

} else {

Page 44: PRACA DYPLOMOWA MAGISTERSKAhome.agh.edu.pl/~kopernik/resource_PMiIDP/S_Mylnarczyk.pdfona stworzona przez firmę Sun Microsystems w roku 1995, przejętą przez Oracle w roku 2010. Logo

43

points.add(StringUtils.strip(StringUtils.substring(

line.get(index + (1 + i / 8)),

(i - (i / 8) * 8) * 10, 10 + ((i - (i / 8) * 8) * 10))));

}

}

Pętla iteruje po ilości punktów w prymitywie, jeśli iterator jest większy bądź równy ilości liczb

mieszczących się w linii, czyli 8, wartości pobierane są z kolejnej linii tekstu. Punkty dodawane

są do listy, z której następnie umieszczane są w obiektach zapisywanych w bazie danych

‘SimulationElementDataNodeValue’.

4.3.3 Wczytywanie danych o wynikach

Wczytywanie danych o wynikach symulacji odbywa się w klasie

‘ConvertDislocationFileAdina’, widocznej na diagramie klas na rysunku 18. Pliki, w których

zawarte są informacje mogą być sformatowane na 3 różne sposoby.

Dane o wynikach obliczeń wypisywane są dla każdego węzła.

POINT X-DISPLACEMENT Y-DISPLACEMENT Z-DISPLACEMENT

Time 2.00000E-01

Node 1 0.00000E+00 -2.63865E-05 -2.99195E-04

Node 2 0.00000E+00 2.64970E-08 -2.99192E-04

Node 3 0.00000E+00 2.64395E-05 -2.99190E-04

Node 4 0.00000E+00 -2.63902E-05 -2.63978E-04

Dane wypisywane dla każdego prymitywu.

POINT STRESS-XX STRESS-YY STRESS-ZZ

Time 8.40000E+00

Element 1 of element group 1

Int point 11 -4.11899E+03 -4.11897E+03 -4.11909E+03

Element 2 of element group 1

Int point 11 -4.09357E+03 -4.09353E+03 -4.09363E+03

Element 3 of element group 1

Int point 11 -3.94421E+03 -3.94415E+03 -3.94428E+03

Dane wypisywane dla każdego węzła w prymitywie

POINT STRAIN-XX STRAIN-YY STRAIN-ZZ

Time 4.00000E-01

Page 45: PRACA DYPLOMOWA MAGISTERSKAhome.agh.edu.pl/~kopernik/resource_PMiIDP/S_Mylnarczyk.pdfona stworzona przez firmę Sun Microsystems w roku 1995, przejętą przez Oracle w roku 2010. Logo

44

Element 1 of element group 1

Int point 11 0.00000E+00 -4.73956E-09 -6.50724E-09

Int point 12 0.00000E+00 -5.04839E-09 -6.22597E-09

Int point 13 0.00000E+00 -5.35721E-09 -6.04966E-09

Int point 21 0.00000E+00 -3.31131E-09 -7.61374E-09

Int point 22 0.00000E+00 -4.44028E-09 -6.90496E-09

Int point 23 0.00000E+00 -5.56926E-09 -6.34575E-09

Int point 31 0.00000E+00 -3.23409E-09 -8.72025E-09

Int point 32 0.00000E+00 -4.81865E-09 -7.58395E-09

Int point 33 0.00000E+00 -6.40322E-09 -6.64185E-09

Element 2 of element group 1

Int point 11 0.00000E+00 -7.64786E-09 -2.56067E-09

Int point 12 0.00000E+00 -6.13082E-09 -3.64257E-09

Int point 13 0.00000E+00 -4.61379E-09 -4.50907E-09

Int point 21 0.00000E+00 -7.53694E-09 -3.68807E-09

Int point 22 0.00000E+00 -6.42973E-09 -4.35588E-09

Int point 23 0.00000E+00 -5.32252E-09 -4.81882E-09

Int point 31 0.00000E+00 -6.08388E-09 -4.81548E-09

Int point 32 0.00000E+00 -5.77857E-09 -5.06918E-09

Int point 33 0.00000E+00 -5.47327E-09 -5.12857E-09

Na zielono zaznaczony został moment w czasie, którego dotyczą dane, na czerwono

wyróżnione są numery węzłów, na niebiesko wartości, fioletowy kolor oznacza opis osi.

Wartości mają stałą długość, oddalone są również o tą samą odległość, więc metoda je

pobierająca ‘convertFile’ wykorzystuje wycinanie łańcuchów. Najważniejszą częścią tej

metody jest pętla iterująca po liniach pliku i wycinająca z nich odpowiednie dane w zależności

od tekstów charakterystycznych. Pętla poruszająca się po liniach pliku wygląda następująco:

for (int i = 0; i < fileLines.size(); i++) {

String line = fileLines.get(i);

Pierwszy warunek w pętli ‘line.contains(POINT)’ sprawdza czy linia zawiera słowo ‘POINT’,

jeśli tak oznacza to, że ta linia zawiera opis wartości. Opisy są pobierane i zapisywane w

zmiennej ‘deformation’. Flaga ‘startProcessing' jest ustawiana na ‘true’ oznacza to, iż kolejne

linie będą zawierać informacje o punktach czasowych i wartościach.

Page 46: PRACA DYPLOMOWA MAGISTERSKAhome.agh.edu.pl/~kopernik/resource_PMiIDP/S_Mylnarczyk.pdfona stworzona przez firmę Sun Microsystems w roku 1995, przejętą przez Oracle w roku 2010. Logo

45

if (!startProcessing && line.contains(POINT)) {

startProcessing = true;

String[] description = line.split("\\s+");

if (description != null && description.length == 5)

deformation.setPointsDescription(description[2]+"|"

+ description[3] + "|" + description[4]);

else

deformation.setPointsDescription("Unknown");

System.out.println("Deformation nodes description: " +

deformation.getPointsDescription());

}

if (startProcessing) {

Warunek zawierający ‘line.contains(TIME))’ wycina z obecnej linii informacje o przedziale

czasowym, dla którego pobierane będą dane znajdujące się niżej. Każde takie miejsce oznacza

początek kolejnego bloku z wartościami.

if (!startSearchingForNodes && line.contains(TIME)) {

time = Double.parseDouble(findTime(line));

System.out.println("Time: " + time);

startSearchingForNodes = true;

node = new SimulationDeformationNode();

node.setDeformationTime(time);

lastGroup = 0;

lastNumber = 0;

numberToAdd = 0;

}

Jeśli linia zaczyna się od ‘NODE’ zawiera wartość dla węzła budującego model, dane dodawane

są do odpowiedniego obiektu.

if (startSearchingForNodes && line.startsWith(NODE)) {

SimulationDeformationNodeValue val = findNode(line);

val.setSimulationDeformationNode(node);

deformationNodeValue.add(val);

extractingNodes = true;

Page 47: PRACA DYPLOMOWA MAGISTERSKAhome.agh.edu.pl/~kopernik/resource_PMiIDP/S_Mylnarczyk.pdfona stworzona przez firmę Sun Microsystems w roku 1995, przejętą przez Oracle w roku 2010. Logo

46

}

‘ELEMENT_FOR_EVERY_NODE’ oznacza, że w linii znajdują się wartości węzłów dla

poszczególnych prymitywów.

if (startSearchingForNodes &&

line.startsWith(ELEMENT_FOR_EVERY_NODE)) {

deformation.setElement(true);

valElem = findElementNode(line);

valElem.setSimulationDeformationNode(node);

extractingNodes = true;

}

Jeśli linia zawiera znacznik ‘ELEMENT_FOR_PRIMITIVE’ znajdują się w niej dane dla

każdego prymitywa.

if (startSearchingForNodes &&

line.startsWith(ELEMENT_FOR_PRIMITIVE)) {

valElem = findElementNodeValue(valElem, line);

valElem.setNodeNr(primitiveCounter);

SimulationDeformationNodeValue copyObject =

new SimulationDeformationNodeValue(valElem);

deformationNodeValue.add(copyObject);

extractingNodes = true;

primitiveCounter += 1;

}

Ostatni warunek zostaje uruchomiony, gdy dwie ostatnie linie są puste. Taka sytuacja oznacza,

że pobrane zostały wszystkie dane, a zgromadzone obiekty należy umieścić w obiekcie

zbiorczym ‘SimulationDeformationNode’. Flagi oraz zmienne pomocnicze są zerowane, aby

przygotować kod do obsługi bloku z danymi dla następnego przedziału czasowego.

if (startSearchingForNodes && extractingNodes &&

StringUtils.isEmptyOrWhitespaceOnly(line) &&

StringUtils.isEmptyOrWhitespaceOnly(exLine)) {

node.setSimulationDeformationNodeValue(deformationNodeValue);

node.setSimulationDeformation(deformation);

deformation.getSimulationDeformationNode().add(node);

deformationNodeValue =

new ArrayList < SimulationDeformationNodeValue > ();

Page 48: PRACA DYPLOMOWA MAGISTERSKAhome.agh.edu.pl/~kopernik/resource_PMiIDP/S_Mylnarczyk.pdfona stworzona przez firmę Sun Microsystems w roku 1995, przejętą przez Oracle w roku 2010. Logo

47

startSearchingForNodes = false;

extractingNodes = false;

primitiveCounter = 0;

}

exLine = line;

}

}

Zakończenie się pętli oznacza, że wszystkie dane zostały zgromadzone w odpowiednich

obiektach, co umożliwi zapisanie ich w bazie danych.

Page 49: PRACA DYPLOMOWA MAGISTERSKAhome.agh.edu.pl/~kopernik/resource_PMiIDP/S_Mylnarczyk.pdfona stworzona przez firmę Sun Microsystems w roku 1995, przejętą przez Oracle w roku 2010. Logo

48

4.4 Wybór modelu oraz translacja danych

Rysunek 22 Diagram klas części przetwarzającej dane

Page 50: PRACA DYPLOMOWA MAGISTERSKAhome.agh.edu.pl/~kopernik/resource_PMiIDP/S_Mylnarczyk.pdfona stworzona przez firmę Sun Microsystems w roku 1995, przejętą przez Oracle w roku 2010. Logo

49

Diagram klas widoczny na rysunku 22 przedstawia całość funkcjonalności odpowiedzialnej za

przetworzenie danych w sposób użyteczny dla biblioteki ThreeJs, która umożliwi wyświetlenie

modelu. Szczegóły implementacji zostaną wytłumaczone w kolejnych podrozdziałach.

Interfejs użytkownika skupiony jest na zakładce ‘Simulations’ w bloku ‘View options’

widocznym na rysunku 23.

Rysunek 23 Interfejs - opcje widoku

Select model to show – umożliwia wybranie modelu, który chcemy zwizualizować. Model

możemy rozpoznać po nazwie nadanej mu podczas dodawania.

Select data to modificate nodes positions – jeżeli podczas dodawania modelu wczytane

zostały dane o dyslokacji, możemy je wybrać, aby przy ich pomocy wizualnie odkształcić

wczytany model.

Select data to modificate model color – jakiekolwiek dane wczytane z plików ‘txt’

eksportowane z Adiny, możemy użyć do zwizualizowania zjawisk działających podczas

symulacji. Informacje służą do naniesienia na części modelu odpowiednich kolorów. Na

podstawie wartości i odpowiadającym im barwom tworzona jest skala umożliwiająca

przeanalizowanie widocznego obrazu.

Select time interval – pozwala na wybranie przedziału czasowego.

Multiply nodes position values by – wartości przemieszczenia często są zbyt małe w stosunku

do modelu, aby zauważyć jakiekolwiek zmiany. Opcja ta umożliwia przemnożenie ich przez

ustaloną wartość tak, aby uwidocznić jakiekolwiek zmiany.

Show element mesh – nanosi na model uproszczoną siatkę prymitywów.

Page 51: PRACA DYPLOMOWA MAGISTERSKAhome.agh.edu.pl/~kopernik/resource_PMiIDP/S_Mylnarczyk.pdfona stworzona przez firmę Sun Microsystems w roku 1995, przejętą przez Oracle w roku 2010. Logo

50

4.4.1 Przetwarzanie danych o węzłach

W przypadku gdy w modelu nie zostają wykorzystane dane o przemieszczeniu, przetwarzanie

węzłów sprowadza się jedynie do przepisania wartości z obiektów ‘SimulationNodalPoint’ do

listy tabel, która następnie wysyłana jest do modułu wyświetlania.

for (SimulationNodalPoint node : getSimulationNodalPoint()) {

nodalPoints.add(

new Double[] { node.getX(), node.getY(), node.getZ() });

}

Istotne jest zachowanie oryginalnej kolejności punktów, ponieważ to ona stanowić będzie

numerację węzłów, na podstawie której budowane są prymitywy.

4.4.2 Przetwarzanie danych o prymitywach

W tym miejscu aplikacji najważniejsza jest konwersja elementów skończonych Adiny na

prymitywy używane w grafice komputerowej. Podczas generowania siatki w programie Adina

mamy możliwość wyboru jednego z wielu różnych elementów.

Rysunki 24 oraz 25 przedstawiają 6 różnych elementów podstawowych dla przestrzeni

dwuwymiarowej.

Rysunek 24 Elementy dwu wymiarowe - 3,6 oraz 7

węzłowy trójkąt[28]

Rysunek 24 Elementy dwu wymiarowe - 4,8 i 9 węzłowe

czworokąty[28]

Rysunek 25Elementy dwu wymiarowe - 4,8 i 9 węzłowe

czworokąty[28]

Page 52: PRACA DYPLOMOWA MAGISTERSKAhome.agh.edu.pl/~kopernik/resource_PMiIDP/S_Mylnarczyk.pdfona stworzona przez firmę Sun Microsystems w roku 1995, przejętą przez Oracle w roku 2010. Logo

51

Rysunek 26 Elementy trój wymiarowe - bryły 6, 8 oraz 5 węzłowe[28]

Rysunek 27 Elementy trójwymiarowe - bryły 15, 20 oraz 13 węzłowe[28]

Rysunek 28 Elementy trójwymiarowe – bryły 21 oraz 14 węzłowe[28]

Rysunek 29 Elementy trójwymiarowe - bryły 4, 10 oraz 11 węzłowe[28]

Rysunki 26, 27, 28 i 29 przedstawiają 11 elementy programu Adina w przestrzeni

trójwymiarowej. Wszystkie te prymitywy zarówno dwu-, jak i trójwymiarowe muszą być

Page 53: PRACA DYPLOMOWA MAGISTERSKAhome.agh.edu.pl/~kopernik/resource_PMiIDP/S_Mylnarczyk.pdfona stworzona przez firmę Sun Microsystems w roku 1995, przejętą przez Oracle w roku 2010. Logo

52

przekształcone na trójwęzłowy trójkątny element, którym operuje biblioteka ThreeJs, taki jak

przedstawiony na rysunku 24. Translacja dokonywana jest w klasie

‘AdinaMeshToPrimitivesConvert’ przy wykorzystaniu abstrakcyjnego obiektu

‘PrimitiveConvert’ oraz dziedziczących po nim klas.

W zależności od ilości węzłów znajdujących się w kształcie podstawowym oraz od rodzaju

przestrzeni dane wysyłane są do odpowiedniej klasy dziedziczącej po ’PrimitiveConvert’. W

każdym z tych obiektów znajduje się lista z odpowiednimi numerami węzłów, mapująca dany

prymityw na trójkąty. Na przykład mapowanie czterowęzłowej bryły przedstawionej na

rysunku 29 wygląda następująco:

template = new ArrayList<Integer[]>();

template.add(new Integer[]{3,0,1,});

template.add(new Integer[]{3,1,2});

template.add(new Integer[]{3,0,2});

template.add(new Integer[]{1,0,2});

Występujące w tablicach numery odpowiadają indeksowi obiektu w liście węzłów danego

kształtu. W efekcie uzyskujemy obiekt zawierający tablicę z numerami odpowiadającymi

indeksom węzłów znajdujących się w kontenerze, którego generowanie opisane zostało w

poprzednim podrozdziale. Na podstawie tych dwóch obiektów jest możliwe wygenerowanie

grafiki modelu.

4.4.3 Przetwarzanie danych o wynikach symulacji

Przetwarzanie danych potrzebnych do stworzenia wykresów odbywa się w klasie

‘DislocationAdina’, która korzysta z ‘ColorArea’. W przypadku przekształcania modelu przy

pomocy danych z przemieszczenia, mechanizm iteruje po węzłach modelu i do współrzędnych

węzłów dodaje wartości przemieszczenia. Mnożone są one przez mnożnik zdefiniowany przez

użytkownika w interfejsie.

deformationVal.forEach(def->{

SimulationNodalPoint node = simNodes.get(def.getNodeNr());

result.add(

new Double[]{node.getX()+(def.getX()*multiplier),

node.getY()+(def.getY()*multiplier),

node.getZ()+(def.getZ()*multiplier)

});

});

Tak wyliczone wartości wysyłane są dalej, jako dane o węzłach i pozwalają na uwidocznienie

na modelu zamian przemieszczenia spowodowanych działającymi na obiekt siłami.

Wyświetlanie danych w postaci kolorów na modelu dokonywane jest w tej samej klasie, w

Page 54: PRACA DYPLOMOWA MAGISTERSKAhome.agh.edu.pl/~kopernik/resource_PMiIDP/S_Mylnarczyk.pdfona stworzona przez firmę Sun Microsystems w roku 1995, przejętą przez Oracle w roku 2010. Logo

53

metodzie 'getDislocatedNodesColors()’. Sprawia więcej trudności gdyż wysyłane do niej dane

mogą odpowiadać trzem różnym elementom tak jak to było opisane w podrozdziale 4.3.3. W

pierwszej kolejności z danych dla trzech punktów wyliczana jest średnia i taka wartość

zapisywana jest w liście przy zachowaniu kolejności danych wejściowych. Ze zgromadzonych

danych wyszukiwana jest wartość maksymalna oraz minimalna. Stanowią one górną oraz dolną

granicę skali, ich różnica dzielona jest przez ilość kolorów. W ten sposób uzyskujemy

przedziały wartości oraz kolory jakie im odpowiadają. Każda wartość z wyliczonej wcześniej

listy zostaje podstawiona pod tą skalę, a odpowiadający jej kolor pod tym samym indeksem

zapisywany jest w nowej liście.

Dalsze postępowanie zależy od typu danych wejściowych, jeżeli dane wejściowe odpowiadały

węzłom w modelu, jest to koniec procesu. Dane są wysyłane do aplikacji po stronie klienta, a

podczas budowania modelu dla każdego prymitywu pobierany jest kolor z listy.

W pozostałych przypadkach informacje o kolorach wysyłane są do ‘PrimitiveConvert’, gdzie

dane wykorzystywane są podczas konwersji kształtów. Jeśli danymi wejściowymi są wartości

dla każdego prymitywu ten sam kolor przypisywany jest każdemu z kształtów stworzonych w

metodach dziedziczących. W przypadku danych dla węzła, kolor pobierany jest z listy dla

każdego z węzłów wykorzystanych w prymitywach.

4.5 Budowa modułu wyświetlającego grafikę

Całość kodu służącego wyświetleniu modelu znajduje się w aplikacji po stronie klienta i została

napisana przy użyciu języka JavaScript. W swoim działaniu wykorzystuje informacje wczytane

oraz przetworzone przez program po stronie serwera opisane w rozdziałach 4.3 oraz 4.4.

Struktura tej części aplikacji składa się z 3 plików:

jsUtils.js – znajdują się w nim metody służące komunikacji JavaScriptu z serwerem.

simulationObject.js – zawiera klasę przechowującą wczytane dane na temat symulacji,

wykorzystywane są one do stworzenia modelu, skali oraz innych funkcji.

threeJsAnimation.js – są w nim funkcje budujące scenę, wszystkie jej funkcjonalności,

oraz modele.

Biblioteka ThreeJs pozwala na stworzenie sceny na bazie elementu HTML5 ‘Canvas’, przez

którą udostępniony został szereg funkcjonalności.

Poruszanie kamerą – umożliwione zostało poruszanie kamerą w trójwymiarowej

Page 55: PRACA DYPLOMOWA MAGISTERSKAhome.agh.edu.pl/~kopernik/resource_PMiIDP/S_Mylnarczyk.pdfona stworzona przez firmę Sun Microsystems w roku 1995, przejętą przez Oracle w roku 2010. Logo

54

przestrzeni w każdej płaszczyźnie, a także jej przybliżanie oraz oddalanie. Taką

funkcjonalność można uzyskać dzięki użyciu dodatkowej biblioteki o nazwie

‘TrackballControls.js’ znajduje się ona w dodatkach do biblioteki ThreeJs.

Poruszanie modelami – poprzez przytrzymanie prawego przycisku myszy nad modelem

i przesunięciu kursora możemy zmienić położenie wybranego obiektu w przestrzeni

trójwymiarowej.

Programowanie funkcjonalności zostało rozpoczęte od umieszczenia w tle sceny

płaszczyzny, która obracać się będzie razem z kamerą. Umożliwi to zrzutowanie

dwuwymiarowego ruchu kursora myszy na trójwymiarową przestrzeń.

plane = new THREE.Mesh(

Płaszczyzna musi być na tyle duża, aby objąć cały ekran.

new THREE.PlaneBufferGeometry( 2000, 2000, 8, 8 ),

new THREE.MeshBasicMaterial( { color: 0x000000, opacity: 0.25,

transparent: true } )

);

Skonfigurowana jest tak, aby była niewidzialna, żeby nie przesłaniała obiektów.

plane.visible = false;

Biblioteka udostępnia narzędzie wykrywające, który z obiektów wskazywany jest przez

kursor myszy ‘raycaster’. Przy jego pomocy wybierany jest obiekt, a następnie

stworzona wcześniej płaszczyzna zostaje przesunięta w miejsce wybranego obiektu,

która zostanie skierowana prostopadle do kamery.

plane.position.copy( INTERSECTED.position );

plane.lookAt( camera.position );

Przy przesuwaniu wskaźnika przy pomocy funkcji ‘raycaster’ wykrywane jest jego

położenie nad płaszczyzną, a wskazany obiekt przesunięty zostaje we wskazane miejsce

na płaszczyźnie.

Wybór modelu – program udostępnia możliwość wyboru modelu i wskazywanego

prymitywu poprzez prawy przycisk myszy. Po dodaniu modelu do sceny, podstawowe

dane na jego temat zostają wyświetlone w tabeli tak jak widoczne jest to na rysunku 30.

Page 56: PRACA DYPLOMOWA MAGISTERSKAhome.agh.edu.pl/~kopernik/resource_PMiIDP/S_Mylnarczyk.pdfona stworzona przez firmę Sun Microsystems w roku 1995, przejętą przez Oracle w roku 2010. Logo

55

Rysunek 30 Interfejs - tabela z wczytanymi modelami

Po wyborze geometrii myszą, wskazywany prymityw zostaje podświetlony na kolor

zielony. Natomiast w tabeli poniżej wybrana pozycja zostaje podświetlona

ciemniejszym kolorem, tak jak to widać na rysunku 30 w przypadku pozycji 3. Niżej

wyświetlone zostają numery węzłów tworzących wybrany prymityw, w tym wypadku

2238, 2181, 2745 oraz współrzędne tych punktów w przestrzeni. Jeszcze niżej

wyświetlona zostaje skala wybranego modelu, w postaci koloru oraz odpowiadającej

mu wartości.

Wyświetlanie modelu – wyświetlone grafiki zaprezentowane zostaną w rozdziale 5.

Za tworzenie geometrii odpowiada metoda ‘createGeometryObject’ w pliku

‘threeJsAnimation.js’. Do metody przekazywane są cztery zmienne: węzły, dane o

Page 57: PRACA DYPLOMOWA MAGISTERSKAhome.agh.edu.pl/~kopernik/resource_PMiIDP/S_Mylnarczyk.pdfona stworzona przez firmę Sun Microsystems w roku 1995, przejętą przez Oracle w roku 2010. Logo

56

prymitywach, lista z kolorami, a także skala zapisana w tablicy.

W pierwszej kolejności tworzony jest nowy obiekt geometrii.

var geom = new THREE.Geometry();

Następnie do tablicy ‘vertices’ w obiekcie geometrii dodane zostają węzły modelu z

‘positions’.

for (var i = 0; i < positions.length; i++) {

geom.vertices.push(new THREE.Vector3(positions[i][0],

positions[i][1], positions[i][2]));

}

Listy prymitywów powiększone zostają o przesłane z serwera prymitywy zapisane w

obiekcie ‘indices’.

for (var i = 0; i < indices.length; i++) {

geom.faces.push(new THREE.Face3(indices[i][0],

indices[i][1],

indices[i][2]));

}

Dla każdego kształtu podstawowego modelu dodawany zostaje kolor.

for (var i = 0; i < geometry.faces.length; i++) {

f = geometry.faces[i];

Jeżeli ilość kolorów w liście odpowiada ilości wczytanych prymitywów, barwy są

przypisywane bezpośrednio dla każdego z nich lub jeżeli wartości kolorów jest więcej,

dla każdego wierzchołka.

Pobieranie kolorów dla danego prymitywu.

var colorsArray = colors[i];

Warunek sprawdzający czy ilość wartości odpowiada jednemu kolorowi.

if(colorsArray.length==4){

color = new THREE.Color(0xffffff);

color.setRGB(colors[i][0],

colors[i][1], colors[i][2]);

Kolor przypisywany jest całemu elementowi.

Page 58: PRACA DYPLOMOWA MAGISTERSKAhome.agh.edu.pl/~kopernik/resource_PMiIDP/S_Mylnarczyk.pdfona stworzona przez firmę Sun Microsystems w roku 1995, przejętą przez Oracle w roku 2010. Logo

57

f.color = color;

}else{

n = (f instanceof THREE.Face3) ? 3 : 4;

Jeśli wartości w tablicy koloru jest więcej niż 4 oznacza to, że są tam barwy dla każdego

węzła w prymitywie.

for (var j = 0; j < n; j++) {

color = new THREE.Color(0xffffff);

color.setRGB(colors[i][(j*4)],

colors[i][(j*4)+1], colors[i][(j*4)+2]);

Każdemu wierzchołkowi przypisywany jest kolor.

f.vertexColors[j] = color;

}

}

Jeśli ilość kolorów w liście odpowiada ilości węzłów, kod przypisujący kolory wygląda

podobnie do ostatniej pętli, lecz kolory pobierane są na podstawie indeksu wierzchołka

‘vertexIndex’.

for (var j = 0; j < n; j++) {

vertexIndex = f[faceIndices[j]];

color = new THREE.Color(0xffffff);

color.setRGB(colors[vertexIndex][0],

colors[vertexIndex][1], colors[vertexIndex][2]);

f.vertexColors[j] = color;

}

Tak uzupełniony obiekt geometrii zostaje dodany do sceny, a na podstawie tablicy ze

skalą wygenerowane zostają odpowiednie wpisy w tabeli.

Wyświetlenie siatki na modelu – poprzez wybór odpowiedniej opcji podczas

wczytywania modelu (patrz rozdział 4.4) mamy możliwość wyświetlenia na nim siatki

prymitywów go tworzących. Wybranie tej opcji powoduje stworzenie geometrii z

dwoma połączonymi ze sobą materiałami. Jednym zwykłym posiadającym nadany

kolor oraz drugim przeźroczystym zawierającym widoczne jedynie linie na brzegach

powierzchni tworzących obiekt.

Page 59: PRACA DYPLOMOWA MAGISTERSKAhome.agh.edu.pl/~kopernik/resource_PMiIDP/S_Mylnarczyk.pdfona stworzona przez firmę Sun Microsystems w roku 1995, przejętą przez Oracle w roku 2010. Logo

58

5 Porównanie stworzonej aplikacji oraz rozwiązania komercyjnego

Wyniki zostaną zaprezentowane na podstawie opisanych w rozdziale 3 przykładowych

symulacji wykonanych w programie Adina. Uzyskane wizualizacje zostaną porównane z ich

odpowiednikami wygenerowanymi w programie komercyjnym

5.1 Uproszczony model turbiny

Model turbiny wygenerowany w obu programach widoczny jest na rysunkach 31 oraz 32.

Rysunek 31 Aplikacja własna - prosty widok turbiny z nałożoną z siatką.

Rysunek 32 Adina - siatka turbiny

Page 60: PRACA DYPLOMOWA MAGISTERSKAhome.agh.edu.pl/~kopernik/resource_PMiIDP/S_Mylnarczyk.pdfona stworzona przez firmę Sun Microsystems w roku 1995, przejętą przez Oracle w roku 2010. Logo

59

Geometria wygenerowanych przez obydwa programy jest taka sama, jednak już na pierwszy

rzut oka widać różnice w wygenerowanej siatce. W przypadku prezentowanego w tej pracy

programu jest ona dużo gęstsza. Spowodowane jest to różnicą w elementach podstawowych, z

których zbudowane są oba modele. Tak jak było to tłumaczone w rozdziale 4.4.2 elementy

zdefiniowane w Adinie przekształcane są na kilka prymitywów trójkątnych. Na etapie obliczeń

siatki były identyczne, widoczne różnice są jedynie graficzne.

Rysunek 33 Aplikacja własna - zbliżenie na siatkę

Page 61: PRACA DYPLOMOWA MAGISTERSKAhome.agh.edu.pl/~kopernik/resource_PMiIDP/S_Mylnarczyk.pdfona stworzona przez firmę Sun Microsystems w roku 1995, przejętą przez Oracle w roku 2010. Logo

60

Rysunek 34 Adina - zbliżenie na siatkę

Jak widać na rysunkach 33 oraz 34 siatki w obu przypadkach zawierające elementy trójkątne

są identyczne, tak więc model wczytuje się prawidłowo.

Rysunek 35 Aplikacja własna - stan obiektu w 30 kroku czasowym

Page 62: PRACA DYPLOMOWA MAGISTERSKAhome.agh.edu.pl/~kopernik/resource_PMiIDP/S_Mylnarczyk.pdfona stworzona przez firmę Sun Microsystems w roku 1995, przejętą przez Oracle w roku 2010. Logo

61

Rysunek 36 Adina - stan obiektu w 30 kroku czasowym.

Obydwa programy umożliwiają zobrazowanie zmian zachodzących w położeniu modelu na

skutek działających przemieszczeń. W programie komercyjnym możemy przewijać

wizualizacje kolejnych wyników poprzez funkcje ‘Previous solution’ oraz ‘Next solution’.

Natomiast w stworzonej aplikacji taki efekt umożliwia wczytanie danych o przemieszczeniu

modelu oraz następnie wybranie ich w opcji 'Select data to modificate nodes positions’.

Położenie wirników w obu turbinach jest analogiczne, można więc stwierdzić, że wczytane

dane zostały w prawidłowy sposób zinterpretowane oraz wyświetlone.

Page 63: PRACA DYPLOMOWA MAGISTERSKAhome.agh.edu.pl/~kopernik/resource_PMiIDP/S_Mylnarczyk.pdfona stworzona przez firmę Sun Microsystems w roku 1995, przejętą przez Oracle w roku 2010. Logo

62

Rysunek 38 Skala dla wirnika obiektu

na rysunku 39

Rysunek 39 Aplikacja własna – naprężenie w płaszczyźnie YZ

Rysunek 37Skala dla obudowy

obiektu na rysunku 39 oraz 41

Page 64: PRACA DYPLOMOWA MAGISTERSKAhome.agh.edu.pl/~kopernik/resource_PMiIDP/S_Mylnarczyk.pdfona stworzona przez firmę Sun Microsystems w roku 1995, przejętą przez Oracle w roku 2010. Logo

63

Rysunki 39 i 40 obrazują wartości naprężenia modelu jak widać wizualizacje są zupełnie różne.

Dzieje się tak z powodu skali, w aplikacji Adina skala wyliczana jest jedna dla wszystkich

kroków czasowych dla całego modelu, zarówno dla wirnika jak i obudowy. Natomiast w

napisanej aplikacji skala tworzona jest dla każdego elementu osobno. Powoduje to całkowitą

rozbieżność wizualizacji.

Rysunek 40 Adina - naprężenie w płaszczyźnie YZ

Page 65: PRACA DYPLOMOWA MAGISTERSKAhome.agh.edu.pl/~kopernik/resource_PMiIDP/S_Mylnarczyk.pdfona stworzona przez firmę Sun Microsystems w roku 1995, przejętą przez Oracle w roku 2010. Logo

64

Rysunek 41 Aplikacja własna – odkształcenie w płaszczyźnie YZ tylko dla obudowy

Rysunek 42 Adina – naprężenie w odkształcenie YZ tylko dla obudowy

W przypadku rysunków 41 oraz 42 zobrazowane zostały te same naprężenia, co w poprzednich

przykładach, jednak tym razem wygenerowane są jedynie obudowy turbin. Różnice w

modelach nadal istnieją, są spowodowane odmiennymi przedziałami wartości, dlatego niektóre

rejony mogą być zaznaczone różnymi kolorami. Mimo to rejony o wartościach granicznych na

obu rysunkach są takie same.

Page 66: PRACA DYPLOMOWA MAGISTERSKAhome.agh.edu.pl/~kopernik/resource_PMiIDP/S_Mylnarczyk.pdfona stworzona przez firmę Sun Microsystems w roku 1995, przejętą przez Oracle w roku 2010. Logo

65

5.2 Model wału z przyklejonym pierścieniem

Wał jest modelem stworzonym w przestrzeni trójwymiarowej, udostępnia te same możliwości,

co modele dwuwymiarowe. Obiekty widoczne na rysunkach 44 oraz 45 mają naniesione na

siebie wykresy nacisku, zostały również przemieszczone pod wpływem siły, które na nie

działają.

Rysunek 44 Aplikacja własna - nacisk oraz przemieszczenie

Rysunek 43 Skala do obiektu na rysunku 44

Page 67: PRACA DYPLOMOWA MAGISTERSKAhome.agh.edu.pl/~kopernik/resource_PMiIDP/S_Mylnarczyk.pdfona stworzona przez firmę Sun Microsystems w roku 1995, przejętą przez Oracle w roku 2010. Logo

66

Rysunek 45 Adina – nacisk oraz przemieszczenie W obu przypadkach przemieszczenie zostało zwielokrotnione, ponieważ jego oryginalna

wartość nie pozwalała uwidocznić zmian w geometrii. W przypadku Adiny wykorzystana

została opcja ‘Scale displacement’ natomiast w opisywanej aplikacji przemieszczenie zostało

pomnożone przez 1000. Adina nie daje kontroli nad wartością, o jaką zwiększone są liczby. W

wizualizacji stworzonej przez opisywaną aplikację widać, iż prawy koniec modelu jest

nienaturalnie wydłużony, natomiast w przypadku Adiny nie obserwujemy takiego efektu.

Można przypuszczać, iż stało się tak, ponieważ w pierwszym przypadku wartości

przemieszczenia są pomnożone przez podaną wartość. Tego typu odkształcenia, w małej skali

są normalne, ale przy mnożeniu zostają sztucznie wyolbrzymione. Adina może korzystać z

lepszych metod takich jak na przykład interpolacja wyników, dzięki czemu uzyskane efekty są

bardziej rzeczywiste.

Różnice w kolorach nałożonych wykresów, tak jak w przypadku modelu opisywanego w

rozdziale 5.1 spowodowane są różnicami w zdefiniowanej skali. Granice stref wartości w

opisywanej aplikacji są również bardziej postrzępione. Dzieje się tak, ponieważ Adina posiada

funkcję wygładzania wykresu, dzięki czemu przybliża część wyników. W przypadku

stworzonego postprocesora kolory przybliżają się jedynie w ramach zdefiniowanych

prymitywów, przez co uzyskujemy efekt rozmycia. Nie niweluje to jednak zupełnie efektu

poszarpanych stref wartości.

Opisywany program ma dodatkowo możliwość wyświetlania obok siebie każdego rodzaju

modelu, bez względu na rodzaj przestrzeni w jakiej operuje oraz typu symulacji jaki

reprezentuje. Rysunek 46 pokazuje zbiór wczytanych obok siebie modeli z nałożonymi różnego

rodzaju wykresami.

Page 68: PRACA DYPLOMOWA MAGISTERSKAhome.agh.edu.pl/~kopernik/resource_PMiIDP/S_Mylnarczyk.pdfona stworzona przez firmę Sun Microsystems w roku 1995, przejętą przez Oracle w roku 2010. Logo

67

Rysunek 46 Aplikacja własna - zbiór różnych modeli w jednej scenie

Zestawienie różnych obiektów ze sobą w Adinie nie jest możliwe, ponieważ do postprocesora

nie da się wczytać dwóch niezależnych modeli. Taka możliwość pozwala na proste

skonfrontowanie ze sobą wyników kilku symulacji, a także na porównanie rozmiarów obiektów.

Modele opisywane są przy pomocy tych samych jednostek, są w tej samej odległości od ekranu,

więc są w tej samej skali. Umożliwia to również zestawienie ze sobą modeli z kilkoma

nałożonymi na siebie wykresami jednocześnie.

Page 69: PRACA DYPLOMOWA MAGISTERSKAhome.agh.edu.pl/~kopernik/resource_PMiIDP/S_Mylnarczyk.pdfona stworzona przez firmę Sun Microsystems w roku 1995, przejętą przez Oracle w roku 2010. Logo

68

6. Wnioski

Program przedstawiony w niniejszej pracy pokazał, że technologie internetowe są

wystarczająco zaawansowane, aby wspierać symulacje MES. Aplikacje klient-serwer z

interfejsem użytkownika stworzonym w HTML oraz JavaScript mają wiele zalet.

Nie wymagają od użytkownika instalacji oprogramowania

Pozwalają na równoczesną pracę na tych samych danych wielu użytkownikom. To

również prosty sposób na dzielenie się wynikami pracy dla pracowników naukowych.

Ograniczenia związane z fizyczną odległością osób w Internecie nie obowiązują.

Użytkownik znajdujący się w Polsce może wczytać dane o zakończonej symulacji, a

jego współpracownik z innego kraju minutę później ma możliwość przeglądać gotowy

model.

Stanowi prosty sposób na ominięcie problemów z działaniem programów na różnych

platformach.

Umożliwia wyświetlenie wielu modeli równocześnie, w dowolnej konfiguracji

Pozwala na nałożenie na modele wykresów, analizę skali, a także prostą edycję modelu.

To wszystko możliwe jest z dowolnego miejsca z dostępem do Internetu, także ze

smartfona bez konieczności noszenia ze sobą danych symulacji.

Stworzony program posiada wszystkie cechy aplikacji internetowej, zawiera również część

funkcjonalności komercyjnych postprocesorów. Program przygotowany przez firmę Adina jest

rozwijany od wielu lat przez specjalistów, posiada dużo funkcji, które nie są dostępne w

przedstawianym programie. Stworzenie podobnego systemu wymagałoby wiele czasu i

przerasta możliwości jednego człowieka. Aplikacja ma jednak kilka niedoskonałości, które

wymagałyby poprawy w celu uzyskania lepszej funkcjonalności.

Siatka nie zgadza się z tą zdefiniowaną w programie. Jednak informacje o jej strukturze

znajdują się w bazie danych, potrzebne jest jedynie odpowiednie ich przekazanie do

modułu wyświetlającego grafikę.

Brak możliwości wykonania przekroju modeli trójwymiarowych. Rozszerzenie

aplikacji pozwoliłoby na analizę zmian zachodzących wewnątrz modelu.

Usprawnienia wymaga system wyliczania skali dla wykresu. Poza lepszym

wyznaczaniem przedziałów wartości, warto byłoby umożliwić użytkownikowi większą

kontrolę nad nią. Wybór skali logarytmicznej mógłby pomóc w analizie modeli.

Przydatna również mogłaby być możliwość zdefiniowania własnych przedziałów skali,

Page 70: PRACA DYPLOMOWA MAGISTERSKAhome.agh.edu.pl/~kopernik/resource_PMiIDP/S_Mylnarczyk.pdfona stworzona przez firmę Sun Microsystems w roku 1995, przejętą przez Oracle w roku 2010. Logo

69

także kolorów im odpowiadających.

Zbudowany program może służyć, jako baza do budowy forum naukowego dla początkujących

użytkowników technologii MES. Budowa programu pozwala w prosty sposób dodać obsługę

plików eksportowanych z innych programów. Wystarczy stworzyć klasę, która nadpisze

interfejs ‘SimulationDataExtraction’ oraz wczyta dane do obiektów zapisywanych w bazie

danych, reszta aplikacji pozostaje bez zmian. Wykorzystane technologie pozwalają na budowę

zarówno małego forum zrzeszającego kilku entuzjastów jak i dużego portalu dla wielu

użytkowników z całego świata. Są to również technologie powszechnie wykorzystywane,

pozwala to w prosty sposób znaleźć specjalistów, którzy mogliby taką aplikację rozwijać.

Page 71: PRACA DYPLOMOWA MAGISTERSKAhome.agh.edu.pl/~kopernik/resource_PMiIDP/S_Mylnarczyk.pdfona stworzona przez firmę Sun Microsystems w roku 1995, przejętą przez Oracle w roku 2010. Logo

70

Spis ilustracji

Rysunek 1 Logo Java[7] 7

Rysunek 2 Logo Spring[22] 9

Rysunek 3 Logo Hibernate[23] 11

Rysunek 4 Rola Hibernate w aplikacji Java[8] 11

Rysunek 5 Nieoficjalne logo Javascript 13

Rysunek 6 Logo MySQL[25] 16

Rysunek 7 Logo Adina[26] 17

Rysunek 8Moduły systemu ADINA[13] 17

Rysunek 9 Interakcja struktury z płynem[27] 19

Rysunek 10 Uproszczona turbina[26] 22

Rysunek 11 Rodzaje siatek naniesionych na model turbiny.[26] 23

Rysunek 12 Obudowa turbiny wraz ze zdefiniowanym płynem 24

Rysunek 13 Ruchoma część turbiny 25

Rysunek 14 Wał wraz z pierścieniem[26] 26

Rysunek 15 Gotowy model wału i pierścienia, z zaznaczonym wektorem nacisku 27

Rysunek 16 Graf przedstawiający schemat bazy danych 28

Rysunek 17 Diagram klas części wczytującej dane 35

Rysunek 18Interfejs - dodawanie i edycja modelu 36

Rysunek 19Interfejs - Okno dodawania symulacji 37

Rysunek 20 Interfejs – okno edycji 38

Rysunek 21 Interfejs – okno edycji, opcje 38

Rysunek 22 Diagram klas części przetwarzającej dane 48

Rysunek 23 Interfejs - opcje widoku 49

Rysunek 24 Elementy dwu wymiarowe - 4,8 i 9 węzłowe czworokąty[28] 50

Rysunek 25Elementy dwu wymiarowe - 4,8 i 9 węzłowe czworokąty[28] 50

Page 72: PRACA DYPLOMOWA MAGISTERSKAhome.agh.edu.pl/~kopernik/resource_PMiIDP/S_Mylnarczyk.pdfona stworzona przez firmę Sun Microsystems w roku 1995, przejętą przez Oracle w roku 2010. Logo

71

Rysunek 26 Elementy trój wymiarowe - bryły 6, 8 oraz 5 węzłowe[28] 51

Rysunek 27 Elementy trójwymiarowe - bryły 15, 20 oraz 13 węzłowe[28] 51

Rysunek 28 Elementy trójwymiarowe – bryły 21 oraz 14 węzłowe[28] 51

Rysunek 29 Elementy trójwymiarowe - bryły 4, 10 oraz 11 węzłowe[28] 51

Rysunek 30 Interfejs - tabela z wczytanymi modelami 55

Rysunek 31 Aplikacja własna - prosty widok turbiny z nałożoną z siatką. 58

Rysunek 32 Adina - siatka turbiny 58

Rysunek 33 Aplikacja własna - zbliżenie na siatkę 59

Rysunek 34 Adina - zbliżenie na siatkę 60

Rysunek 35 Aplikacja własna - stan obiektu w 30 kroku czasowym 60

Rysunek 36 Adina - stan obiektu w 30 kroku czasowym. 61

Rysunek 37Skala dla obudowy obiektu na rysunku 39 oraz 41 62

Rysunek 38 Skala dla wirnika obiektu na rysunku 39 62

Rysunek 39 Aplikacja własna – naprężenie w płaszczyźnie YZ 62

Rysunek 40 Adina - naprężenie w płaszczyźnie YZ 63

Rysunek 41 Aplikacja własna – odkształcenie w płaszczyźnie YZ tylko dla obudowy 64

Rysunek 42 Adina – naprężenie w odkształcenie YZ tylko dla obudowy 64

Rysunek 43 Skala do obiektu na rysunku 44 65

Rysunek 44 Aplikacja własna - nacisk oraz przemieszczenie 65

Rysunek 45 Adina – nacisk oraz przemieszczenie 66

Rysunek 46 Aplikacja własna - zbiór różnych modeli w jednej scenie 67

Page 73: PRACA DYPLOMOWA MAGISTERSKAhome.agh.edu.pl/~kopernik/resource_PMiIDP/S_Mylnarczyk.pdfona stworzona przez firmę Sun Microsystems w roku 1995, przejętą przez Oracle w roku 2010. Logo

72

Bibliografia

[1] MES:

http://fatcat.ftj.agh.edu.pl/~i6gozdur/MES.pdf[online], Wrzesień 2015

[2] What is an Internet Application?:

https://msdn.microsoft.com/en-us/library/aa733739(v=vs.60).aspx [online], Wrzesień 2015

[3] Aplikacje typu kient-serwer w sieci internet

Agnieszka Węgrzyn, Marek Węgrzyn,

http://www.man.zgora.pl/warsztaty/zielman99/pdf/PZ_klient-serwer.pdf [online], Wrzesień

2015

[4] Java Language Specification

http://docs.oracle.com/javase/specs/jls/se8/html/jls-1.html[online], Marzec 2015

[5] Java Virtual Machine Specification

http://docs.oracle.com/javase/specs/jvms/se8/html/jvms-1.html [online] Marzec 2015

[6] Professional Java Development with the Spring Framework

Rod Johnson, Jürgen Höller, Alef Arendsen, Thomas Risberg, Colin Sampaleanu, Wiley,

Indianapolis 2005

[7] Hibernate QuickStart

Dave Minter, Jeff Linwood, Apress, New York 2010

[8] Beginning Hibernate

Dave Minter, Jeff Linwood, Apress, New York 2006

[9] JavaScript: The Definitive Guide

(6th ed.), David FlanaganPaula Ferguson, O'Reilly & Associates, Sebastopol 2011

[10]Learning Three.js: The JavaScript 3D Library for WebGL

Jos Dirksen, Packt Publishing, Birmingham 2013

[11]What are the major features in Three.js?

https://github.com/mrdoob/three.js/wiki/Features[online], Wrzesień 2015

[12]What is MySQL?

https://dev.mysql.com/doc/refman/5.1/en/what-is-mysql.html[online], Wrzesień 2015

[13]The Adina System

http://www.adina.com/products. shtml[online], Wrzesień 2015

[14]Adina Solid & Structures

http://www.adina.com/adina-structures.shtml[online], Wrzesień 2015

[15]Adina CFD

http://www.adina.com/adina-CFD.shtml[online], Wrzesień 2015

[16]Adina EM

http://www.adina.com/adina-electromagnetics.shtml[online], Wrzesień 2015

[17]Adina Thermal

http://www.adina.com/adina-thermal.shtml[online], Wrzesień 2015

[18]Adina Multiphysics

http://www.adina.com/adina-thermal.shtml[online], Wrzesień 2015

[19] Encyclopedia of Mathematics: ADINA system

Page 74: PRACA DYPLOMOWA MAGISTERSKAhome.agh.edu.pl/~kopernik/resource_PMiIDP/S_Mylnarczyk.pdfona stworzona przez firmę Sun Microsystems w roku 1995, przejętą przez Oracle w roku 2010. Logo

73

http://www.encyclopediaofmath.org/index.php?title=ADINA_system&oldid=14399[online],

Wrzesień 2015

[20]Bootstrap

http://www.w3schools.com/bootstrap/[online], Wrzesień 2015

[21] Logo Java

https://java.com/ga/images/auto/1371159372900?image=true[online] , Wrzesień

2015

[22]Logo platforma Spring

https://d1fto35gcfffzn.cloudfront.net/images/trademarks/spring-platform-watermark-

large.png[online], Wrzesień 2015

[23]Logo Hibernate

http://design.jboss.org/hibernate/logo/final/hibernate_logo_whitebkg_600px.png[online],

Wrzesień 2015

[24]Logo JavaScript

http://www.2ality.com/2011/10/logo-js.html[online], Wrzesień 2015

[25]Logo MySQL

https://www.mysql.com/common/logos/includes-mysql-125x64.png[online], Wrzesień 2015

[26]Adina Primer

Report ARD 13-7, Adina R&D, Inc., December 2013

[27]Interakcja struktury z płynem

http://www.aices.rwth-aachen.de/images/wall.jpg[online], Wrzesień 2015

[28]ADINA User Interface Command Reference Manual

Report ARD 13-2, Adina R&D, Inc., December 2013