TECHNICKÁ UNIVERZITA V LIBERCI

40  Download (0)

Full text

(1)

TECHNICKÁ UNIVERZITA V LIBERCI

Fakulta mechatroniky a mezioborových inženýrských studií

Studijní program: B2612 – Elektrotechnika a informatika

Studijní obor: 2612R011 – Elektronické informační a řídicí systémy

Algoritmy prostorové diskretizace oblastí pro účely tvorby sítí pro numerické modely

The Spatial Discretization Algorithms of the Domain for the Purposes of the Mesh Generation

for the Numerical Models.

Bakalářská práce

Autor: Petr Vilčinský

Vedoucí práce: Ing. Otto Severýn, Ph.D.

Konzultant: Ing. Jiřina Královcová, Ph.D.

V Liberci 9. 5. 2006

(2)

Prohlášení

Byl jsem seznámen s tím, že na mou bakalářskou práci se plně vztahuje zákon č. 121/2000 o právu autorském, zejména § 60 (školní dílo).

Beru na vědomí, že TUL má právo na uzavření licenční smlouvy o užití mé BP a prohlašuji, že s o u h l a s í m s případným užitím mé bakalářské práce (prodej, zapůjčení apod.).

Jsem si vědom toho, že užít své bakalářské práce či poskytnout licenci k jejímu využití mohu jen se souhlasem TUL, která má právo ode mne požadovat přiměřený příspěvek na úhradu nákladů, vynaložených univerzitou na vytvoření díla (až do jejich skutečné výše).

Bakalářskou práci jsem vypracoval samostatně s použitím uvedené literatury a na základě konzultací s vedoucím bakalářské práce a konzultantem.

Datum:

Podpis:

(3)

Poděkování

V první řadě bych rád poděkoval vedoucímu mé bakalářské práce panu Ing. Ottovi Severýnovi, Ph.D. za jeho odbornou pomoc, cenné rady a poskytnuté informace.

Dále děkuji svým rodičům za jejich materiální a duševní podporu, bez

které by tato práce nemohla vzniknout.

(4)

Anotace

Tématem bakalářské práce je vyhledat dostupné algoritmy a programy k automatickému generování sítí trojúhelníkových elementů pro modely konečných prvků. Z nalezených programů vybrat ty, které jsou vhodné pro tvorbu modelů puklinového prostředí. Vhodné programy otestovat na konkrétních datech a posoudit jejich kvalitu. Práce se skládá ze tří částí. V první je popsáno co je to puklina a k čemu slouží trojúhelníková síť. V druhé části jsou zmíněny základní algoritmy používané při tvorbě trojúhelníkových sítí v programech. Ve třetí části jsou testovány jednotlivé programy určené k vytváření trojúhelníkových sítí, jejich popis a jak je lze použit v praxi. Na konec jsou tyto programy zhodnoceny.

Abstract

The aim of this Bachelor Thesis is to find available algorithms and

programs for the automatic grid generation of the triangular elements for the

finite elements method. From these programs choose those programs, which are

suitable for the creation of the models for the fractures. Try to test suitable

programs with some data and consider their quality. Bachelor Thesis consists of

three parts. In the first part is described what the fracture is and what for is

triangular grid. In the second part are mentioned basic algorithms used for

creating of triangular grids in programs. In the third part are individually tested

available programs theirs description and how to use them practically. In the end

are interpreted the results.

(5)

Obsah

Obsah 6

Seznam obrázků 8

Úvod 9

1 Pukliny 10

1.1 Popis pukliny ... 10

1.2 Trojúhelníková síť ...10

2 Algoritmy diskretizace 13 2.1 Voronoiho diagram ...13

2.2 Delaunayho triangulace ...14

2.3 Advancing Front ...15

3 Programy pro diskretizaci 16 3.1 Program GMSH ... 16

3.1.1 Popis ...16

3.1.2 Použití ...17

3.1.3 Definování průsečnice v puklině ...18

3.1.4 Průsečnice uvnitř pukliny a plně rozdělená puklina ... 22

3.1.5 Vstupní soubor ...25

3.1.6 Výstupní soubor ... 26

3.1.7 Hodnocení programu GMSH ... 27

3.2 Program NETGEN... 28

3.2.1 Popis ... 28

3.2.2 Použití ... 28

3.2.3 Převod ze 3D prostoru do 2D...28

3.2.4 Vstupní soubor ... 29

3.2.5 Výstupní soubor ... 30

3.2.6 Výsledky ... 30

3.2.7 Hodnocení programu NETGEN... 32

3.2.8 Popis pre-processingového programu pro NETGEN ... 33

3.2.9 Použití pre-processingového programu pro NETGEN...33

3.2.10 Průsečík dvou průsečnic ...34

3.2.11 Vstupní soubor pre-processingového programu pro NETGEN ...34

3.2.12 Výstupní soubor pre-processingového programu pro NETGEN ...35

(6)

3.3 Program GiD ... 36

3.3.1 Popis ...36

3.3.2 Použití ...36

3.3.3 Vstupní soubor ... 38

3.3.4 Výstupní soubor ... 38

3.3.5 Hodnocení programu GiD... 39

4 Závěr 40

Literatura 41

(7)

Seznam obrázků

Obr. 1-1 Nedodržená průsečnice ... 11

Obr. 1-2 Nenávaznost trojúhelníkové sítě ...12

Obr. 1-3 Správně vygenerovaná trojúhelníková síť... 12

Obr. 2-1 Voronoiho diagram ...13

Obr. 2-2 Delaunayho triangulace ...14

Obr. 2-3 Advancing Front ...15

Obr. 3-1 Hladká puklina ...17

Obr. 3-2 Dvě protnuté pukliny... 18

Obr. 3-3 Chybně definovaná průsečnice ... 18

Obr. 3-4 Definice průsečnice – velká šířka ... 19

Obr. 3-5 Definice průsečnice – malá šířka ... 19

Obr. 3-6 Zvětšená definice průsečnice ... 20

Obr. 3-7 Mnohonásobně zvětšená definice průsečnice ... 20

Obr. 3-8 Definice průsečnice s trojúhelníkovým tvarem ... 21

Obr. 3-9 Definice průsečnice složená z několika úseček ...21

Obr. 3-10 Výsledná podoba dvou protnutých puklin... 22

Obr. 3-11 Průsečnice uvnitř pukliny ... 22

Obr. 3-12 Průsečnice uvnitř pukliny ... 23

Obr. 3-13 Průsečnice uvnitř pukliny ... 24

Obr. 3-14 Plně rozdělená puklina ...24

Obr. 3-15 Složitější puklinová síť...25

Obr. 3-16 Vzorová puklina pro test v programu NETGEN ... 31

Obr. 3-17 Puklina pro test v programu NETGEN ... 31

Obr. 3-18 Výsledná síť vygenerovaná programem NETGEN ... 32

Obr. 3-19 Prostředí programu GiD ... 36

Obr. 3-20 Síť vygenerovaná programem GiD ... 37

Obr. 3-21 Zvětšená síť vygenerovaná programem GiD... 38

(8)

Úvod

Modelování hydrogeologických procesů je obor získávající na významu.

V současné době je stále častěji možné slyšet o problémech s uskladněním vyhořelého jaderného paliva a jiných nebezpečných odpadů. Z tohoto důvodu se provádí měření, kam by se tento odpad v budoucnu mohl bezpečně uložit nebo pokud již byl uložen, tak jaká jsou rizika, že se nebezpečný odpad rozšíří do okolí. Mohl by se dostat například do podzemních zdrojů pitné vody a ohrozit tak populaci. Je proto třeba, tuto skutečnost zjistit dříve, než se tak stane. Dalšími možnostmi jak toto modelování využít je např. při těžbě ropy nebo pro průzkum zdrojů pitné vody. K tomu všemu používá modelování hydrogeologických procesů výpočty, které se provádí například na vygenerované trojúhelníkové síti.

Nejdříve je potřeba získat údaje o puklinové síti z oblasti, kterou chceme modelovat. K tomuto účelu se používá geologických vrtů a geofyziky. Ze vzorků jader vrtů a z naměřených dat se poté určí podoba puklinové sítě ve sledované oblasti. Aby se na takto vytvořené puklinové síti dalo počítat např.

proudění, je nutné puklinovou síť rozdělit na menší části. Tímto problémem se zabývá tato bakalářská práce. Konkrétně se zabývá programy, které umí vytvářet trojúhelníkové sítě.

Práce je členěna do tří kapitol. První se věnuje popisu pukliny, k čemu slouží trojúhelníkové sítě a jak by výsledná trojúhelníková síť měla vypadat.

Druhá kapitola je věnována popisu základních algoritmů, které se v programech pro vytváření trojúhelníkových sítí používají.

Třetí kapitola je věnována samotnému testování programů, kde je u

každého programu popsáno, jak ho lze použít pro generování trojúhelníkových

sítí. Dále je u jednotlivých programů sledována kvalita trojúhelníkové sítě. Na

přiloženém CD lze nalézt instalace programů, které byly testovány a program,

který byl v rámci bakalářské práce vytvořen za účelem přípravy vstupního

souboru pro jeden z testovaných programů.

(9)

1 Pukliny

1.1 Popis pukliny

Puklina vznikne narušením zemské kůry například tektonickou činností.

Pukliny se pro jednoduchost definují buď jako kruhové útvary nebo jako mnohoúhelníky ležící v prostoru. V našem případě budeme pukliny uvažovat jako rovinné konvexní mnohoúhelníky v prostoru. Soubor puklin tvoří puklinovou síť. Představa o tom, jak puklinová síť v dané oblasti vypadá, je založena na datech, které se získávají z jader vrtů v oblastech, kde je prováděn výzkum. Na základě těchto dat se vytvoří puklinová síť. V praxi by bylo nákladné a těžko proveditelné zmapovat fyzicky puklinovou síť v dané oblasti.

Proto se k výpočtům používá puklinová síť, ve které jsou uvedeny významné pukliny, odpovídající skutečnosti, proto nesou označení deterministické. Méně významným puklinám, které jsou na základě provedených měření do této sítě dodatečně vygenerovány počítačem, se říká stochastické.

Ve skutečnosti není puklina rovinný útvar. Pro zjednodušení se puklina bere jako plochý element umístěný v prostoru a její tloušťka se uvažuje až při výpočtech, které popisují určité fyzikální vlastnosti pukliny. Pukliny se navzájem v prostoru protínají. Dvě protnuté pukliny vytvoří jednu průsečnici.

1.2 Trojúhelníková síť

Aby se u puklin mohlo simulovat například proudění tekutiny, musí se puklina rozdělit na menší oblasti. Pokud tyto oblasti mají tvar trojúhelníků, potom se tomuto procesu říká triangulace. Takto vytvořené trojúhelníky tvoří trojúhelníkovou síť. Špatná regularita sítě snižuje podmíněnost matice diskretizované úlohy a tím znepřesňuje výsledky. Proto se snažíme, aby výsledné trojúhelníky byly co nejvíce rovnostranné. Aby se na vytvořenou síť daly aplikovat výpočty, je u některých metod nutné, aby výsledná síť respektovala průsečnice u puklin. To znamená, aby například nevznikla situace, jako na Obr.

1-1. Na obrázku je vidět síť jedné pukliny, kde jednotlivé strany trojúhelníků

prochází skrze průsečnici. Potom záleží na algoritmu pro výpočet, zda si

(10)

s takovouto sítí dokáže početně poradit. Proto je vhodné tyto průsečnice brát jako překážky.

Obr. 1-1 Nedodržená průsečnice

Při generování trojúhelníkové sítě je také důležité, aby „pomocný“ bod

(vytvořen např. proto, aby byl trojúhelník co nejvíce rovnostranný) vytvořený na

průsečnici, ve výsledku figuroval i u druhé pukliny. Pokud by tomu tak nebylo,

tak by síť nesplňovala předpoklady pro provedení výpočtů. Další situace, jak by

výsledná diskretizace neměla vypadat je na Obr. 1-2. V tomto případě

trojúhelníky vytvořené u průsečnice nesdílí společně strany a nastal by opět

problém s výpočty.

(11)

Obr. 1-2 Nenávaznost trojúhelníkové sítě

Je tedy třeba dosáhnout podobného výsledku, který je vidět na Obr. 1-3.

Tomuto problému je věnována kapitola 3, kde je popsáno, jak tento problém řešit ve vybraných programech.

Obr. 1-3 Správně vygenerovaná trojúhelníková síť

(12)

2 Algoritmy diskretizace

Pro generování trojúhelníkových sítí se nejčastěji používají algoritmy, které jsou zmíněny v této kapitole. Protože tyto algoritmy nejsou přímo určeny pro generování trojúhelníkových sítí u puklin, nelze těmto algoritmům přímo definovat průsečnici. Jak tento problém za pomoci programů, které umí generovat trojúhelníkové sítě řešit, je popsáno v kapitole 3.

2.1 Voronoiho diagram

Diagramům dal jméno ukrajinský matematik Georgy Voronoy (Voronoi).

Další možné názvy jsou Voronoi tessellation (mozaika), Voronoi decomposition (rozklad) nebo Dirichlet tessellation (podle Lejeune Dirichleta). Jedná se o algoritmus, který se používá k rozdělení prostoru na oblasti, jejichž velikost je určena vzájemnou vzdáleností jednotlivých bodů v prostoru. Tento algoritmus je dále využíván Delaunayho triangulací, která je popsána v kapitole 2.2. Příklad diagramu je na Obr. 2-1.

Obr. 2-1 Voronoiho diagram

Zjednodušená definice: Pro jakoukoliv množinu bodů S a pro téměř

jakýkoliv bod X je jeden bod z množiny S nejblíže bodu X. Slovo téměř je zde

(13)

záměrně, jelikož může nastat situace kdy bod X je nejblíže dvěma a více bodům z množiny S.

Obecně platí, že místa bližší bodu C z množiny S než jinému bodu z množiny S, tvoří buňku. Množina těchto buněk ve 2D prostoru nám poté ve výsledku vytvoří mozaiku.

2.2 Delaunayho triangulace

Jedná se o algoritmus, jehož výsledkem je trojúhelníková síť. Dochází u něj k vytvoření trojúhelníků z definovaných bodů. Trojúhelníky jsou tvořeny tak, že uvnitř kruhu, který je opsán libovolnému trojúhelníku vytvořenému z definovaných bodů, neleží žádný z definovaných bodů. V praxi to znamená, že máme libovolnou množinu bodů, ze kterých chceme vytvořit trojúhelníkovou síť.

Tento algoritmus nám říká, jak dosáhnout kvalitní trojúhelníkové sítě, která bude mít malý počet trojúhelníků s ostrými úhly, které znepřesňují výpočty u puklinových sítí. Delaunayho triangulace využívá Voronoiho algoritmus, který je popsán v kapitole 2.1. Pokud totiž máme pro definované body vytvořenu Voronoiho mozaiku, tak poté výslednou síť vytvoříme tak, že propojíme body, které spolu sousedí, tj. ty, které mají společnou hranici. Ukázka, jak vytvořená trojúhelníková síť Delaunayho triangulací (fialová barva) spolu s Voronoiho mozaikou (modrá barva) vypadá je na Obr. 2-2.

Obr. 2-2 Delaunayho triangulace

(14)

2.3 Advancing Front

Je algoritmus, který je využíván ke generování trojúhelníkové sítě. U Advancing Front metody jsou trojúhelníky postupně generovány od hranice pukliny. Pokud je vytvořen nový trojúhelník, je z oblasti odečten a ohraničení oblasti se posune, z toho název Advancing Front. Algoritmus postupně zaplňuje oblast, až je celá pokryta trojúhelníky. Malá ukázka je vidět na Obr. 2-3, kde na prvním obrázku je přidán element, na druhém posunuta hranice, na třetím vložen další element a na čtvrtém opět posunuta hranice.

Obr. 2-3 Advancing Front

(15)

3 Programy pro diskretizaci

Pro vytváření nejen trojúhelníkových sítí jsou vytvářeny specializované programy. Tyto programy se liší, jak v použitých algoritmech, tak v možnostech nastavení parametrů.

Název programu Výrobce

ACE/gredit OGI

ADMesh Varlog

CAF2D/GENMESH Yeungnam Univ., KR Geompack90 ZCS Inc.

GiD CIMNE

GMSH E. C. Montreal & U. Liege

mesh2d SCOREC, RPI

MG TeCGraf

NETGEN J. Kepler U., Austria

NMGS B. Baris DUNDAR

Preproc Num. Meth. Lab., U. of Bucharest Qhull Geom. Center, U. of Minneapolis

QMG Cornell University

TRUMPET NASA, Lewis

Tabulka 1: Seznam testovaných programů

Z těchto programů byly nakonec vybrány 3 programy: program GMSH, program NETGEN a program GiD. Ostatní programy např. neměly potřebné vlastnosti nebo je nebylo možné na internetu sehnat, popř. nešly zkompilovat nebo spustit.

3.1 Program GMSH

3.1.1 Popis

GMSH je třídimenzionální generátor sítí, používající pro generování sítí

Delaunayho triangulaci. Dále obsahuje pre- a post-processing. Vyniká rychlostí i

kvalitou generované sítě. Propracované má zatím pouze 1D a 2D algoritmy

generování sítí a 3D algoritmus je zde zatím jako experimentální, a je proto

pomalý. Další výhoda spočívá v možnosti spustit program GMSH v grafickém

režimu nebo s parametry z příkazové řádky. Je tedy v celku jednoduché mu

v podobě vstupního souboru definovat problém a program vstupní data zpracuje

a výsledek uloží do jiného souboru. Toho lze například v našem případě využít

(16)

tak, že programu GMSH zadáme pukliny, které chceme zpracovat jeho generátorem sítí. Program tento úkol vyřeší a my již jako výstup dostaneme výslednou podobu sítě. Bohužel tento program není přímo specializovaný na generování trojúhelníkových sítí u puklin, ale za pomoci postupu, který je popsán v kapitole 3.1.2 s ním lze puklinové sítě řešit.

3.1.2 Použití

Pokud chceme, aby program GMSH vytvořil trojúhelníkovou síť u nějaké pukliny, je potřeba načíst vstupní soubor, jehož formát je popsán v kapitole 3.1.5 nebo lze k definování pukliny využít grafické prostředí, které program GMSH nabízí.

Obr. 3-1 Hladká puklina

Programu GMSH zadáme puklinu (vyznačena modře), která je vidět na Obr. 3-1. U této pukliny program GMSH vygeneruje trojúhelníkovou síť velmi dobře.

Složitějším typem jsou pukliny s průsečnicemi. Tento typ zobrazuje Obr.

3-2, na kterém se protínají dvě pukliny.

(17)

Obr. 3-2 Dvě protnuté pukliny

Pokud zadáme programu GMSH jednu z puklin z Obr. 3-2 tak, že přidáme dva body a z nich uděláme úsečku, dostaneme síť, která je vidět na Obr. 3-3 a je identická se sítí, která je na Obr. 3-1. To znamená, že program nerespektuje zadanou průsečnici a je nutné mu zadat úlohu tak, aby průsečnici respektoval.

Obr. 3-3 Chybně definovaná průsečnice

3.1.3 Definování průsečnice v puklině

První možnost jak se dá tento případ zadat, je znázorněna na Obr. 3-4.

Vyřízneme z pukliny obdélník, který (aby byl na obrázku dobře vidět) má velkou

(18)

šířku. Ve skutečnosti by tento obdélník musel mít mnohem menší šířku nebo bychom mohli vytvořit rovnoramenný trojúhelník o velmi malé základně.

Obr. 3-4 Definice průsečnice – velká šířka

Na Obr. 3-5 je vidět výsledek s použitím obdélníku s malou šířkou. Je tedy patrné, že následující způsob se nedá použít, jelikož dojde ke vzniku velmi malých a ostrých trojúhelníků, které jsou patrné až při mnohonásobném zvětšení oblasti kolem „vnitřního“ konce průsečnice. Na obrázku Obr. 3-6 je zvýrazněna oblast z Obr. 3-5. Na Obr. 3-7 je ještě zvětšena oblast z Obr. 3-6.

Obr. 3-5 Definice průsečnice – malá šířka

(19)

Obr. 3-6 Zvětšená definice průsečnice

Obr. 3-7 Mnohonásobně zvětšená definice průsečnice

Další možností je použít trojúhelník o velmi malé délce základny tak, jak

to zobrazuje Obr. 3-8. Bohužel u takto zadané pukliny nemůžeme s jistotou říct,

(20)

že jednotlivé body na průsečnici budou na každé straně u sebe. Proto je vhodnější vytvořit průsečnici z několika úseček tak, jak je ukázáno na Obr. 3-9.

Obr. 3-8 Definice průsečnice s trojúhelníkovým tvarem

Jak by průsečnice měla vypadat je zobrazeno na Obr. 3-9 ve zvětšené verzi. Ještě je možné levý bod průsečnice uvnitř pukliny posunout tak, aby tvořil špičku, ale je to nadbytečné a získali bychom ještě menší číslo, jelikož bychom museli velikost mezery vydělit dvěma. Což je zbytečné, protože příklad, který je na obrázku, funguje bezchybně.

Obr. 3-9 Definice průsečnice složená z několika úseček

(21)

Výsledek by tedy měl vypadat následovně. Hrany trojúhelníků u obou puklin spolu korespondují, jak je vidět na Obr. 3-10.

Obr. 3-10 Výsledná podoba dvou protnutých puklin

3.1.4 Průsečnice uvnitř pukliny a plně rozdělená puklina

Obr. 3-11 Průsečnice uvnitř pukliny

(22)

Typ průsečnice z Obr. 3-11 lze programem GMSH také vyřešit, ale je opět potřeba správně zadat vstupní data. Když totiž budeme uvažovat průsečnici jako obdélník s velmi malou šířkou, tak vznikne ten samý problém jako na Obr.

3-5. Ten lze vyřešit tím, že místo obdélníku budeme průsečnici uvažovat například jako rovnoramenný lichoběžník s velmi malou výškou. Výsledek je vidět na Obr. 3-12.

Obr. 3-12 Průsečnice uvnitř pukliny

Abychom se vyhnuli případnému problému s tím, že body na horní a dolní

straně lichoběžníku nebudou „stejné“, tak je třeba na tyto hrany nadefinovat body

s určitou vzdáleností od sebe tak, jak je ukázáno na Obr. 3-13. Tím zaručíme, že

na druhé puklině, která tuto puklinu protíná, budou mít body trojúhelníků stejné

souřadnice.

(23)

Obr. 3-13 Průsečnice uvnitř pukliny

Generování trojúhelníkové sítě u druhé pukliny je v tomto případě jednoduché. Jedná se o dvě pukliny s tím, že nesmíme zapomenout na

„pomocné“ body, které jsme vytvořili na průsečnici u první pukliny. Výsledek tedy bude vypadat podobně jako na Obr. 3-14.

Obr. 3-14 Plně rozdělená puklina

(24)

Příklad diskretizace složitější pukliny, konkrétně tří navzájem protínajících se puklin je zobrazen na Obr. 3-15.

Obr. 3-15 Složitější puklinová síť

3.1.5 Vstupní soubor

Vstupní soubor má příponu „.geo“ a lze v něm definovat spoustu příkazů.

Jedná se totiž o formát souboru podobný skriptu, který je po otevření souboru vykonán. To například znamená, pokud vytvoříme bod a poté ho smažeme, program ho ve vstupním souboru nesmaže, ale pouze vytvoří další příkaz, který říká, že bod s určitým číslem se má smazat a poté nelze s tímto číslem vykonávat žádné další operace. Formát souboru je následující:

1. Point(1) = {-1.1, 0.2, 0, 0.1}; – definuje bod číslo 1 o

souřadnici x = -1.1 souřadnici y = 0.2, souřadnici z = 0 a parametr,

který udává, jakou váhu bude tento bod mít. Více o této proměnné

(25)

lze nalézt v manuálu k programu GMSH pod pojmem Characteristic Length.

2. Line (1) = {6, 1}; – definuje úsečku číslo 1, která spojuje body 6 a 1

3. Line Loop (1) = {5, 6, 1, 2, 3, 4}; – určuje smyčku úseček s pořadovým číslem 1 z úseček 5, 6, 1, 2, 3 a 4

4. Plane Surface (1) = {3}; – definuje plochu číslo 1 určenou ze smyčky číslo 3

Vstupní soubor může obsahovat daleko více příkazů, ale výše vyjmenované jsou k vytváření trojúhelníkových sítí postačující.

3.1.6 Výstupní soubor

Výstupní soubor mesh s příponou „.msh“ programu GMSH má strukturu, která je standardní pro programy tohoto typu. V podstatě je soubor rozdělen na dvě části. První část, kde jsou definovány jednotlivé uzly (body), které se poté používají při definici úseček. Ve druhé jsou definovány samotné elementy, v našem případě trojúhelníky. Soubor má tedy následující strukturu:

1. na prvním řádku je uvedeno, že chceme definovat první čas tj.

uzly. To provedeme pomocí zápisu $NOD

2. na dalším řádku následuje počet definovaných uzlů

3. definice jednotlivých uzlů o parametrech: číslo_uzlu sou řadnice_x souřadnice_y souřadnice_z

4. část definice uzlů je zakončena $ENDNOD

5. druhá část, tj. definice elementů začíná zápisem $ELM

6. na dalším řádku následuje počet elementů, který bude následovat 7. definice elementů ve formě: číslo_elementu typ_elementu

(pro trojúhelník číslo 2) číslo_fyzického_objektu

(26)

číslo_základního_objektu počet_uzlů_elementu a nakonec seznam_uzl ů , ze kterých se element skládá

8. definice elementů je zakončena na dalším řádku zápisem $ENDELM

3.1.7 Hodnocení programu GMSH

Program GMSH má velmi kvalitní výstup v podobě trojúhelníkové sítě.

Bohužel jeho největší problém je v použitém algoritmu, který neumožňuje

definovat průsečnici a je proto třeba využít výše popsaných metod jak tento

problém řešit. To znamená vytvořit program, který nejprve zpracuje vstupní data

a ta pak zadat programu GMSH na zpracování. Jinak lze program GMSH označit

za velmi kvalitní produkt z hlediska dalších možností, které v sobě zahrnuje.

(27)

3.2 Program NETGEN

3.2.1 Popis

NETGEN je automatický trojrozměrný generátor sítí. Mezi jeho další vlastnosti patří možnost generovat síť u 2D plochy s možností definice průsečnic u této pukliny. Pro generování sítí používá algoritmus Advancing Front spolu s Delaunayho triangulací. Nejdříve pomocí algoritmu Advancing Front provede triangulaci na hranici pukliny a u průsečnic. Poté na zbytek pukliny použije Delaunayho triangulaci. Tím vznikne kvalitní síť, která je ještě pomocí iteračních výpočtů poupravena na dokonalejší.

3.2.2 Použití

Přestože je v popisu uvedeno, že se jedná o trojrozměrný generátor sítí, tak problém puklin umístěných ve 3D prostoru lze v tomto programu řešit pouze ve 2D. Je to způsobeno tím, že pokud program pracuje ve 3D režimu, tak mu nelze nadefinovat v potřebné formě vstupní data. Program se dá využít tak, že pukliny, které jsou umístěné ve 3D prostoru, pomocí transformačních matic převedeme do 2D prostoru a s takto definovaným vstupním souborem si již program poradí. Jeho obrovská výhoda je v tom, že pokud chceme nadefinovat průsečnici mezi body A a B, tak v programu GMSH se tento problém musí řešit s použitím nestandardních postupů tak, jak je popsáno v kapitole 3.1. U programu NETGEN stačí nadefinovat dvě úsečky. Jednu, která má počátek v bodě A a končí v bodě B a druhou, která začíná v bodě B a končí v bodě A.

Dokonce ani takto definované úsečky nemusí být ve vstupním souboru u sebe a program si s tím poradí. Jednoduše lze říct, že na pořadí úseček ve vstupním souboru nezáleží.

3.2.3 Převod ze 3D prostoru do 2D

Uvažujeme 2D puklinu, umístěnou ve 3D prostoru, kterou potřebujeme

převést do 2D prostoru. K tomu potřebujeme znát normálu pukliny. Tu lze zjistit

například pomocí dvou různoběžných vektorů pukliny, anebo pomocí tří bodů

(28)

pukliny, které neleží v přímce. Jelikož nám nejde o umístění nebo rotaci pukliny po transformaci, tak nemusíme pukliny umísťovat do výchozího bodu. Uvažujme dva vektory pukliny v

1

a v

2

. Potom se vektory v

3

a v

4

rovnají:

3 1 2

4 1 3

= ×

= ×

v v v

v v v

r r r r r r

Dále si určíme jednotkové vektory i a j vektorů v

1

a v

4

1 1

4 4

=

= i v

v j v

v r r

r r r

r

Nyní máme zavedený nový souřadný systém. Vektory i a j nám poslouží k transformaci. Budeme-li transformovat bod X, tak nové souřadnice bodu lze spočítat pomocí následujícího vzorce. Tímto budeme mít libovolný bod pukliny ze 3D prostoru transformovaný do čistě 2D prostoru.

4 4

[ ; ]

X X i X j r r ′

r r

r

Pokud transformujeme všechny body pukliny, dostaneme její souřadnice ve tvaru, který již můžeme použít v programu NETGEN. Jakmile máme připravený vstupní soubor ve správném tvaru, můžeme ho nechat zpracovat programem NETGEN. Je možné si vybrat, v jakém tvaru nám program uloží výslednou síť. Jedna z možností je výstup ve formátu programu GMSH.

3.2.4 Vstupní soubor

Vstupní soubor programu NETGEN má jednoduchou strukturu. Jsou dvě možnosti jak programu zadat hranice. Buď pomocí úseček a nebo pomocí křivek.

Úsečka je definována pomocí dvou bodů a křivka pomocí tří bodů. Prvního

počátečního, třetího koncového a druhého, který tvoří tangenty mezi prvním a

třetím bodem. Pro naši potřebu postačí definice pomocí úseček. Soubor pro 2D

prostor s příponou “.in2d“ má následující části:

(29)

1. je třeba programu zadat, že se jedná o soubor s 2D daty. To provedeme pomocí textu splinecurves2d na prvním řádku souboru

2. poté musíme definovat, jak rychle se bude zmenšovat velikost výsledné sítě.

3. další vstupní hodnota určuje, kolik bodů na vstupu má program číst. Jsou to ty body, z nichž se budou tvořit úsečky, které ohraničují puklinu, popřípadě tvoří průsečnice.

4. seznam bodů ve tvaru: sou řadnice_x souřadnice_y činitel_jemnosti

5. počet úseček, které se mají načíst

6. seznam úseček ve tvaru: levá_oblast pravá_oblast

po čet_bodů(2 nebo 3) první_bod druhý_bod

[t řetí_bod] činitel_jemnosti

3.2.5 Výstupní soubor

Další velkou výhodou programu NETGEN je možnost vybrat si z velkého množství výstupních formátů souborů. Jedním z mnoha je formát programu GMSH. Pokud tedy uložíme výslednou vygenerovanou síť do tohoto formátu, můžeme si výstup ihned prohlédnout i v programu GMSH.

3.2.6 Výsledky

Pro vyzkoušení kvalit tohoto programu byla vybrána puklina, vygenerovaná na základě reálných naměřených dat. Její podoba je vidět na Obr.

3-16.

(30)

Obr. 3-16 Vzorová puklina pro test v programu NETGEN

Obr. 3-16 se stal pouze předlohou pro puklinu, na které proběhlo testování. Skutečný model, který posloužil ke generování trojúhelníkové sítě je vidět na Obr. 3-17.

Obr. 3-17 Puklina pro test v programu NETGEN

(31)

Výsledná síť je zobrazena na Obr. 3-18. Je na ní patrné, že program dodržel stanovené hranice a i kvalita sítě je velmi dobrá.

Obr. 3-18 Výsledná síť vygenerovaná programem NETGEN

3.2.7 Hodnocení programu NETGEN

Ve výsledku lze prohlásit, že program NETGEN je v případě generování trojúhelníkových sítí velmi dobrý. Ať již se jedná o kvalitu výstupu nebo jednoduchost zadávání vstupních dat. Co mu lze vytknout je fakt, že neumožňuje zadat 2D puklinu ve 3D prostoru. Z toho plyne nutnost přepočítat body do 2D prostoru a po vygenerování trojúhelníkové sítě všechny trojúhelníky transformovat zpět do 3D, což může být výpočetně dost náročné při velkém počtu elementů, které by bylo potřeba přepočítávat. Při testování se přišlo na chybu programu, kdy za blíže neurčených podmínek došlo k vynechání několika trojúhelníků na okraji pukliny. Tento problém se při vhodně zvolených parametrech dá odstranit. Čím je tento efekt způsoben se však nepodařilo zjistit.

Na druhou stranu musíme brát v úvahu, že pukliny, u kterých provádíme

generování trojúhelníkových sítí, neodpovídají plně skutečnosti a v případě

vynechání několika trojúhelníků není tento problém nijak zásadní.

(32)

3.2.8 Popis pre-processingového programu pro NETGEN

Jedná se o program vytvořený v rámci bakalářské práce pro otestování programu NETGEN. Funkcí programu je načíst vstupní data ve formátu, který je popsán v kapitole 3.2.11 a vytvořit z nich vstupní data pro program NETGEN jehož vstupní soubor je popsán v kapitole 3.2.4. Prvotně měl být program určen jako pre-procesor pro program GMSH, ale protože se v průběhu bakalářské práce narazilo na problémy s definicí průsečnic uvedené v kapitole 3.1, hledala se jiná cesta. Řešení poskytl právě program NETGEN. Program pro pre-processing proto bylo nutné poupravit. Program není plně odladěný. Některé stavy v něm nejsou ošetřené, ale pro otestování programu NETGEN postačující.

3.2.9 Použití pre-processingového programu pro NETGEN Program ze vstupního souboru načte nadefinované pukliny a průsečnice a uloží si je do paměti. Puklina je definovaná jako souhrn bodů ležících v rovině, program proto z bodů pukliny vytvoří úsečky, které přidá do seznamu průsečnic.

Když je hotový seznam průsečnic, přichází na řadu hledání průsečíku jednotlivých průsečnic mezi sebou. Program postupně počítá průsečík dvojice různých průsečnic, a pokud takový bod najde, tak podle situace rozdělí průsečnice. Protože program pracuje s průsečnicemi jako s přímkami, může tedy nastat několik situací.

1. existuje průsečík dvou přímek, ale mimo oblast definovanou průsečnicemi, proto tyto dvě průsečnice program nerozdělí

2. průsečnice se protínají v jednom bodě, program tedy z těchto dvou průsečnic vytvoří čtyři průsečnice a původní dvě průsečnice smaže ze seznamu. Nově vytvořené průsečnice jsou zahrnuty do procesu hledání průsečíku, protože i takto rozdělené průsečnice se mohou dále protínat s dalšími průsečnicemi.

3. průsečík dvou průsečnic je shodný jako jeden z bodů některé z

průsečnic, proto program rozdělí jen jednu z těchto průsečnic na

(33)

dvě průsečnice, které jsou opět zahrnuty do dalšího procesu hledání průsečíku a původní průsečnice je smazána.

Program stačí spustit a stisknout tlačítko „Proveď“. S programem musí být ve stejné složce také vstupní soubor.

3.2.10 Průsečík dvou průsečnic

Pro program NETGEN je potřeba, aby se jednotlivé průsečnice rozdělily na menší úsečky, které se již navzájem nebudou protínat. Proto je třeba najít průsečíky průsečnic mezi sebou a ty pak pomocí vypočteného průsečíku rozdělit.

Výpočet průsečíku pro dvě přímky v prostoru je složitější, než v případě plochy. Nejprve je třeba zjistit, zda nejsou průsečnice mimoběžné nebo rovnoběžné. Poté je k výpočtu průsečíku potřeba parametrického vyjádření jednotlivých průsečnic. K určení dvou průsečnic jsou potřeba čtyři body X

1

, X

2,

X

3,

X

4.

Z toho první dva body náleží jedné průsečnici a poslední dva druhé.

1 1 1 1

2 2 2 2

3 3 3 3

4 4 4 4

[ , , ]

[ , , ]

[ , , ]

[ , , ]

X x y z X x y z X x y z X x y z

=

=

=

=

Parametrické vyjádření pro obě přímky může vypadat následovně:

1 1

1 1

1 1

x x

y y

z z

p x v s

p y v s

p z v s

= + ⋅

= + ⋅

= + ⋅

3 2

3 2

3 2

x x

y y

z z

p x v t

p y v t

p z v t

= + ⋅

= + ⋅

= + ⋅

Kde, p

x

, p

y

a p

z

jsou souřadnice průsečíku a vektory v

1

a v

2

jsou směrové vektory jednotlivých průsečnic. Tyto rovnice se dají do rovnosti a spočítají se parametry s a t. Poté tyto parametry stačí dosadit do rovnic výše a vyjdou nám souřadnice průsečíku.

3.2.11 Vstupní soubor pre-processingového programu pro NETGEN

Jelikož se jedná pouze o zkušební program, neobsahuje žádná nastavení a

vše je pevně dané. Z toho plyne následující omezení vstupního souboru. Vstupní

(34)

soubor se musí nacházet ve stejné složce jako program a mít název vstup.txt. Je potřeba definovat dvě pukliny. Z toho jednu s číslem 1 a druhou s číslem 2. Poté stačí pro tyto pukliny nadefinovat průsečnice. Výstup bude vytvořen pouze pro puklinu s číslem 1. Pokud program NETGEN není schopen síť vygenerovat správně, může to být způsobeno tím, že transformovaná puklina má jiný směr otáčení. To se dá vyřešit změnou pořadí vstupních bodů pukliny. Vstupní soubor musí končit na stejném řádku jako definice poslední průsečnice. Na CD přiloženém k bakalářské práci je vzorový vstupní soubor. Možná vstupní data jsou:

1. nejdříve je třeba definovat puklinu. To se provede zápisem Fracture 1 0 0 0 0 2 0 2 2 0 2 0 0, tímto zápisem se definuje puklina s číslem 1, která je hraničena polygonem složeným z bodů v tomto pořadí. První bod má souřadnice [0,0,0], druhý [0,2,0], třetí [2,2,0] a čtvrtý [2,0,0]

2. nyní lze definovat průsečnice. K tomu slouží zápis ve tvaru Intersection 1 1 2 2 0 0 0 2 0, čímž definujeme průsečnici s číslem 1, která je průsečnicí puklin s číslem 1 a 2. Protože je testovací program schopen zpracovat pouze jednu puklinu je zde definice druhé pukliny nadbytečná. Dále následují souřadnice bodů průsečnice. Počátek průsečnice má v tomto případě souřadnice [2,0,0] a koncový bod souřadnice [0,2,0]

3.2.12 Výstupní soubor pre-processingového programu pro NETGEN

Výstupní soubor má formát vstupního souboru pro program NETGEN a

po zpracování vstupních dat se vytvoří ve stejné složce jako je umístěn program a

má název „vystup.in2d“. Podoba vstupního souboru programu NETGEN je

popsána v kapitole 3.2.4.

(35)

3.3 Program GiD

3.3.1 Popis

Jedná se o komerční program, jehož funkčně omezenou verzi s názvem Academic je možné vyzkoušet zdarma. Omezení je dáno počtem ploch, které můžeme programu zadat a to sice na 25 a generovaná síť je omezena na 1000 uzlů. Program umožňuje např. modelování, zadávání vstupních dat a zobrazení výsledků. Pro testování byly použity verze 7.2 a nově vydaná verze 8.0. Ukázka prostředí je vidět na Obr. 3-19.

Obr. 3-19 Prostředí programu GiD

3.3.2 Použití

Program GiD obsahuje velké množství funkcí. Má své vlastní grafické

prostředí, kde je možné definovat body, úsečky, křivky, plochy a další elementy

jako třeba prostorová tělesa. Obsahuje funkce pro práci s plochami, např. sečtení

(36)

a odečtení dvou ploch popřípadě nalezení průsečnice dvou ploch. Bohužel ale takto nalezenou průsečnici program GiD při vytváření trojúhelníkové sítě nebere jako jednu z hranic. Výsledek je na Obr. 3-20 a se zvětšeným výřezem na Obr.

3-21, kde je velmi dobře vidět, jak program GiD bere dvě protnuté plochy, jako dva nezávislé elementy.

Obr. 3-20 Síť vygenerovaná programem GiD

(37)

Obr. 3-21 Zvětšená síť vygenerovaná programem GiD

Pokud v tomto programu chceme vytvořit trojúhelníkovou síť u pukliny s průsečnicemi, tak musíme postupovat stejně jako v případě programu GMSH v kapitole 3.1.3. Musíme definovat průsečnici jako zářez do pukliny o velmi malé tloušťce. Další funkcí programu GiD je možnost rozdělení pukliny úsečkou, která leží ve stejné rovině jako puklina a přetíná ji na dvě části. Bohužel ale tato funkce rozdělí pouze jednu z puklin, protože průsečnice se u druhé pukliny nachází uvnitř a tento problém neumí program GiD tímto postupem vyřešit.

3.3.3 Vstupní soubor

Formát vstupního souboru je binární. Proto je z hlediska tvorby vstupů do tohoto programu práce velmi ztížená. Pro testování bylo z tohoto důvodu využito grafického prostředí. Program GiD má i možnosti importovat vstupní data z velkého množství formátů.

3.3.4 Výstupní soubor

U výstupního souboru má program GiD na výběr z několika formátů.

Nejznámější z nich je asi formát DXF, který je použit v produktech AutoCAD.

Bohužel tyto formáty jsou opět binární soubory. Program GiD nabízí ještě

(38)

možnost exportovat data do textového souboru. U tohoto typu je formát velice podobný formátu, který používají programy GMSH a NETGEN. To znamená, že obsahuje definice bodů a definice trojúhelníků. Obsahuje navíc definice vrstev a jiných konfiguračních parametrů, které pro další práci se sítí nejsou příliš zajímavé. Výstupní textový soubor lze tedy bez problémů využít.

3.3.5 Hodnocení programu GiD

Program GiD je velice obsáhlý program, bohužel pro práci s puklinami a puklinovými sítěmi se podle testování moc nehodí. Z důvodu formátu vstupních a výstupních dat v podobě binárních souborů, se práce s ním také komplikuje.

Jelikož také neumí při generování sítě definovat průsečnice stejně jako program

GMSH, tak jeho použití pro generování trojúhelníkových sítí není vhodné.

(39)

4 Závěr

Cíle bakalářské práce se podařilo splnit. Při vyhledávání dostupných programů pro automatické generování trojúhelníkových sítí byl použit seznam programů z internetové adresy [3]. Z tohoto seznamu bylo podle kritérií potřebných pro řešení problému puklinových sítí předběžně vybráno 14 programů, u kterých se měly testovat jejich funkce. Jelikož se nejedná o programy určené přímo pro generování trojúhelníkových sítí u puklin, byl při dalším zkoušení vlastností programů jejich počet snížen na pouhé 3 programy. U nevyhovujících programů bylo například zjištěno, že program nemá potřebné vlastnosti, popř. nebylo možné, z důvodu stáří seznamu na internetových stránkách [3], programy nalézt a jiné nebylo možné zkompilovat nebo spustit.

Testování zbylých programů na reálných datech se povedlo provést pouze u jednoho z programů. Bylo to dáno faktem, že ani jeden z programů není primárně určen k vytváření trojúhelníkových sítí u puklin. Zbylé dva programy by šlo k vytvoření sítí použít, bylo by ale nutné pro tyto programy upravit vstupní data do formy tak, jak je popsáno v bakalářské práci, kterou tyto programy umí řešit. Po zpracování vstupních souborů by musela ještě následovat korekce výstupních souborů. To ale znamená další operace navíc.

Co se týče kvality výsledných sítí, tak všechny tři programy v testovacích úlohách generovaly kvalitní trojúhelníkové sítě.

Doporučení:

Pro zpracování zadaného úkolu nejlépe vyhovuje program NETGEN.

Jako jediný zvládl test ve všech sledovaných parametrech, protože jako jediný

byl schopen vygenerovat trojúhelníkovou síť na reálných puklinách. I u tohoto

programu je třeba provést úpravy vstupních a výstupních souborů, ale již ne tak

složitou formou, jako u předchozích dvou programů.

(40)

Literatura

[1] Herout P.: Učebnice jazyka C, 3. vyd., KOPP, České Budějovice, 1994 [2] Owen S.: A survey of unstructured mesh generation technology. Ansys Inc.,

dostupné na http://www.andrew.cmu.edu/user/sowen/survey/

[3] Owen S.: http://www.andrew.cmu.edu/user/sowen/software/triangle.html [4] Vohralík M.: Datové struktury puklinového prostředí. Výzkumný projekt,

FJFI ČVUT, Praha, 1999

Figur

Updating...

Referenser

Relaterade ämnen :