Programowanie generacji i przetwarzania siatek

70
Programowanie generacji i przetwarzania siatek Aspekty praktyczne Roman Putanowicz [email protected] Instytut Technologii Informatycznych w Inżynierii Lądowej Wydzial Inżynierii Lądowej Politechniki Krakowskiej Seminarium L-5, 16-18.10.2011

description

Slides from L-5 seminar on practical aspects of programming mesh generation and mesh manipulation. In most part focused on programming in GMSH mesh generator scripting language.

Transcript of Programowanie generacji i przetwarzania siatek

Page 1: Programowanie generacji i przetwarzania siatek

Programowanie generacji i przetwarzania siatekAspekty praktyczne

Roman [email protected]

Instytut Technologii Informatycznych w Inżynierii Lądowej

Wydział Inżynierii Lądowej Politechniki Krakowskiej

Seminarium L-5, 16-18.10.2011

Page 2: Programowanie generacji i przetwarzania siatek

Plan prezentacji

I WstępI Zagadnienia związane z siatkamiI Od geometrii do siatek w FEMDKI Programowanie generacji siatek w GMSHI Programowanie modeli CST w BRL-CADI Dane na siatkach – biblioteka MOABI Interpolacja i całkowanie na siatkach – biblioteka GetFEM++

Seminarium L-5, 16-18.10.2011

Page 3: Programowanie generacji i przetwarzania siatek

Dla kogo

Nie musisz – nie programuj!

Jeśli już musisz (lub chcesz :)

I Wybór gotowych rozwiązń (bibliotek)I Ograniczenia narzędzi ( często odkrywane za późno)I Rozwiazania zapewniające rozszerzalność, standardowe interfejsy,

łączenie narzędzi

Prezentacja wybranych narzędzi z punktu widzenia developera.Uwaga: Gustibus non disputandum est

Seminarium L-5, 16-18.10.2011

Page 4: Programowanie generacji i przetwarzania siatek

”Ekonomia głupcze!” ”It’s the economy, stupid” (Bill Clinton).

Wszystko (prawie) rządzi się rachunkiem ekonomicznym:I Programowanie jest kosztowne (budowa środowiska, projektowanie,

dokumentacja, implementacja, testowanie)I Potrzebujesz siatkę do obliczeń MES – weź gotowy zintegrowany

sytem obliczeniowy (ANSYS, Abaqus, Diana, Comsol, itp).I Interesują cię wyniki symulacji – zapłać komuś za budowę modelu

geometrycznego i siatkowanie

Co innego jeżeli:

I Rozwijasz algorytmy bazujące na siatkachI Potrzebujesz generować siatki we własnych programachI Nudzisz się lub szukasz dziury w całymI ...

Seminarium L-5, 16-18.10.2011

Page 5: Programowanie generacji i przetwarzania siatek

Zagadnienia związane z siatkami

I Generacja siatekI od modelu geometrycznego do siatkiI kontrola gęstości siatekI ocena jakości siatekI wygładzanie i optymalizacja siatek

I Organizacja danych na siatkach – siatki jako rodzina struktur danychI Operacje I/O na siatkach, kompresja, przesyłanie, konwersje między

formatamiI Dekompozycja siatek na podobszaryI Algorytmy numeryczne : interpolacja, różniczkowanie, całkowanieI Wizualizacja siatek i danych na siatkach

Coraz częściej wymagamy by narzędzia odnoszące się do powyższychzagadnień były zaimplementowane z myślą o przetwarzaniu równoległym(zrównoleglanie obliczeń to generalnie inna liga)

Seminarium L-5, 16-18.10.2011

Page 6: Programowanie generacji i przetwarzania siatek

Rodzaje reprezentacji bryłModelowanie geometryczne w pigułece 1/10

Najczęściej używane reprezentacje brył:I Półprzestrzenie (Half-Spaces).I Reprezentacja brzegowa (B-Rep).I CSG (Constructive Solid Geometry).I Reprezentacje z przesuwaniem (Sweeping, 2.5D).I Reprezentacje algebraiczne, izopowierzchnie.I Reprezentacje z podziałem przestrzennym:

I Dekompozycja na komórki (Cell decomposition).I Reprezentacja wokselowa (Voxel representation).I Drzewa BSP (Binary Space Partitioning trees).

Seminarium L-5, 16-18.10.2011

Page 7: Programowanie generacji i przetwarzania siatek

Reprezentacja brzegowaModelowanie geometryczne w pigułece 2/10

W reprezentacji brzegowej bryła jestprzedstawiana jako zbiór ścian tworzącychorientowalną i zamkniętą powierzchnię.Powierzchnia jest orientowalna, jeżelimożemy rozróżnić jej dwie strony,korzystając z normalnej do powierzchni.Każda ze ścian może być wielokątempłaskim lub powierzchnią zakrzywioną.Powierzchnie są ze sobą poprawniepołączone krawędziami. W reprezentacjibrzegowej ściany traktuje się jako płatypowierzchniowe ograniczone krawędziami,a krawędzie jako fragmenty krzywychograniczone wierzchołkami.

Seminarium L-5, 16-18.10.2011

Page 8: Programowanie generacji i przetwarzania siatek

Elementy reprezentacji brzegowejModelowanie geometryczne w pigułece 3/10

I Wierzchołek V – punkt w przestrzeni 3DI Krawędź E – krzywa ograniczona przez dwa wierzchołkiI Ściana F – ograniczona krawędziami orientowalna powierzchniaI Pętla L – zamknięty ciąg krawędzi leżący całkowicie we wnętrzu

ściany (otwór 2D)

Dodatkowo wprowadza się pojęcia takie jak:I Pustka – przestrzeń leżąca całkowicie wewnątrz ciała i nie mająca

żadnych punktów wspólnych z brzegiem ciałaI Uchwyt – otwór “na wylot”. Ilość takich otworów określa się jako

genus

Seminarium L-5, 16-18.10.2011

Page 9: Programowanie generacji i przetwarzania siatek

Elementy reprezentacji brzegowej – przykładyModelowanie geometryczne w pigułece 4/10

ściany F = 6 + 4 + 2 = 12krawędzie E = 12 + 12 + 3 = 27wierzchołki V = 8 + 8 + 2 = 18pętle L = 2 + 1 = 3uchwyty G = 1bryły B = 1

uchwyt :

DygresjaTwierdzenie Eulera–Poincare mówi, że w poprawnej topologicznie brylewielkości V , E , F , L, B i G są związane następującym równaniem:

F − E + V − L = 2(B − G )

Seminarium L-5, 16-18.10.2011

Page 10: Programowanie generacji i przetwarzania siatek

Struktury danych dla reprezentacji brzegowejModelowanie geometryczne w pigułece 5/10

Reprezentacja tablicowa topologii

V1

V2

V3

V4

E1E2

E3E4 E5

E6tablica ścianF1 E1, E3, E2F2 E1, E5, E4F3 E2, E6, E5F4 E3, E4, E6

tablica krawędzi

E1 V1, V2E2 V2, V3E3 V3, V1E4 V4, V1E5 V4, V2E6 V4, V3

tablica wierzchołkówV1 x1, y1, z1V2 x2, y2, z2V3 x3, y3, z3V4 x4, y4, z4

Reprezentacja tablicowa jest prosta aczkolwiek bardzo nieefektywnai zwykle się jej nie używa, z wyjątkiem może eksportu lub importu danych

Seminarium L-5, 16-18.10.2011

Page 11: Programowanie generacji i przetwarzania siatek

Struktury danych dla reprezentacji brzegowej – cdModelowanie geometryczne w pigułece 6/10

Krawędź ze skrzydełkami (winged edge)I Dane o wierzchołkach

I współrzędne x,y,zI wskaźniki do n przyległychkrawędzi

I Dane o krawędziachI 2 wskaźniki do wierzchołkówI 2 wskaźniki do przyległychścian

I wskaźnik do następnejkrawędzi

I wskaźnik do poprzedniejkrawędzi

I Dane o ścianachI n wskaźników do krawędziograniczających

e

e.nexte.prev

e.twin

e.left

e.org

Seminarium L-5, 16-18.10.2011

Page 12: Programowanie generacji i przetwarzania siatek

CSG – konstruktywna geometria bryłModelowanie geometryczne w pigułece 7/10

CSG = Constructive Solid GeometryW modelowaniu metodą CSG obiekty buduje się ze zbioru prostychprymitywów (np: sześcian, walec, kula, stożek, torus) łączonych zapomocą skończonej rodziny regularnych operacji boolowskich orazmodyfikowanych przez standardowe operacje geometryczne, zwykletranslację, obrót oraz skalowanie. W modelowaniu CSG obiekt jest zwyklepamiętany jako drzewo binarne, w którym węzły wewnętrzne reprezentująoperacje, a liście proste prymitywy.

Seminarium L-5, 16-18.10.2011

Page 13: Programowanie generacji i przetwarzania siatek

Operacje boolowskieModelowanie geometryczne w pigułece 8/10

A

BA ∪ B A ∩ B A \ B

Problem: rezultatem operacji boolowskiej na dwu bryłach nie zawsze jestbryła. Przykład:

AB A ∩ B

Rozwiązanie: regularyzowane operacje boolowskie.

Seminarium L-5, 16-18.10.2011

Page 14: Programowanie generacji i przetwarzania siatek

Regularyzowane operacje boolowskieModelowanie geometryczne w pigułece 9/10

Regularyzowane operacje boolowskie są odpowiednikiem zwykłychoperacji boolowskich, ale są tak zdefiniowane, że operacja na bryłachzawsze da w wyniku bryłę.

Niech:

Int(A) – wnętrze zbioru AA – domknięcie zbioru A (zbiór A + punkty brzegowe)

Mówimy, że zbiór A jest regularny jeżeli A = Int(A).

Regularyzowane operacje boolowskie definiujemy następująco:Niech op oznacza jedną z operacji: ∩, ∪, \.Regularyzowaną operację op∗ definiujemy jako:

A op∗ B := Int(A op B)

Seminarium L-5, 16-18.10.2011

Page 15: Programowanie generacji i przetwarzania siatek

CSG – przykładModelowanie geometryczne w pigułece 10/10

+

Seminarium L-5, 16-18.10.2011

Page 16: Programowanie generacji i przetwarzania siatek

Predefiniowane modele geometryczneOd geometrii do siatek w FEMDK 1/5

W praktyce akademickiej posługujemy się najczęściej pewnymistandardowymi modelami geometrycznymi, najczęściej o niezmiennejtopologi, ewentualnie modelami parametrycznymi (sparametryzowanewymiary).

Wychodząc z powyższego założenia w projekcie FEMDKhttps://femdk.l5.pk.edu.pl/femdk stworzono bibliotekę BGD(Basic Geometric Domains) mająca na celu:

I dostarczanie parametrycznych modeli najczęściej używanychobszarów geometrycznych (2D i 3D)

I eksport tych modeli to pełnej reprezentacji brzegowejI interfejs to generatora siatekI narzędzia do wizualizacji geometrii

Seminarium L-5, 16-18.10.2011

Page 17: Programowanie generacji i przetwarzania siatek

Przykład programu korzystającego z BGDOd geometrii do siatek w FEMDK 3/5

1 int main(int argc, char **argv) 2 int result = EXIT_SUCCESS;3 4 int optct = optionProcess(&chqOptions, argc, argv);5 argc -= optct;6 argv += optct;7 8 CHQParams params;9 params.setUp();10

11 femdk::bgd::CircHoleQuarter chq;12 chq.SetParam("Nx", params.Nx);13 chq.SetParam("Ny", params.Ny);14 chq.SetParam("Nh", params.Nh);15

16 chq.Export(outfile, "geo");

Seminarium L-5, 16-18.10.2011

Page 18: Programowanie generacji i przetwarzania siatek

Przykład programu korzystającego z BGDOpcje wiersza poleceń:

./bgd_chq --nx=4 --ny=8 --nh=6 --ex-geom-format=geo \--out-file chq.geo

X

Y

Z

Seminarium L-5, 16-18.10.2011

Page 19: Programowanie generacji i przetwarzania siatek

Narzędzia do generacji i wizualizacji siatekOd geometrii do siatek w FEMDK 4/5

FEMDK dostarcza interfejsów do generatorów siatek (tu GMSH) inarzędzi wizualizacji (tu gnuplot).

1 femdk::bgd::Rectangle r;2 std::vector<double> lc;3 r.SetVertexLC(0.1);4 r.SetVertexLC(0, 0.01);5 getfem::mesh mesh;6 femdk::GMSHMesher mesher;7 femdk::GnuplotViewer viewer;8 mesher.generate(r, mesh);9 viewer.showMesh(mesh);10 viewer.pause();

Seminarium L-5, 16-18.10.2011

Page 20: Programowanie generacji i przetwarzania siatek

Eksport geometrii do modelu B-Rep w formacie GMSHOd geometrii do siatek w FEMDK 5/5

1 femdk::bgd::Rectangle rectangle;2 femdk::bgd::LShape LShape;3 femdk::bgd::ExtrudedShape extruded(&rectangle, false);4 femdk::bgd::ExtrudedShape extrLshape(&LShape, false);5

6 femdk::bgd::CircularSector ci;7 ci.SetFillAngle(2.1);8

9 extruded.BGD::Export("extruded.geo", "geo");10 femdk::bgd::ExtrudedShape extruded1(&ci, false);11

12 extruded1.BGD::Export("extruded1.geo", "geo");13 extrLshape.BGD::Export("extrudedL.geo", "geo");

Seminarium L-5, 16-18.10.2011

Page 21: Programowanie generacji i przetwarzania siatek

Bryły otrzymane przez wyciąganie obszarów BGD

X

Y

Z

X

Y

Z

Seminarium L-5, 16-18.10.2011

Page 22: Programowanie generacji i przetwarzania siatek

Obszary geometryczne zaimplementowane w BGDOd geometrii do siatek w FEMDK 2/5

I BoxI CylinderI RectangleI FiberRectangleI CircularSectorI NotchedRectangleI CircHoleQuarterI LShapeI CShapeI IShapeI SegmentStripI ExtrudedShape

Seminarium L-5, 16-18.10.2011

Page 23: Programowanie generacji i przetwarzania siatek

Generator GMSH

MożliwościI Własny generator + interfejs do innych: tetgen, netgen, triangle.I Wbudowany pre i post-processorI Możliwość integracji dowolnego solveraI Własny prosty język skryptowy do opisu geometriiI Graficzny interfejs na bazie FlTK i OpenGL.I Najnowsze wersje wykorzytują biblioteki projektu OpenCASCADE do

importu modeli B-Rep w formatach STEP, IGES.

Dostęphttp://www.geuz.org/gmsh

Seminarium L-5, 16-18.10.2011

Page 24: Programowanie generacji i przetwarzania siatek

GMSH – przykłady

Seminarium L-5, 16-18.10.2011

Page 25: Programowanie generacji i przetwarzania siatek

GMSH – przykłady

Seminarium L-5, 16-18.10.2011

Page 26: Programowanie generacji i przetwarzania siatek

GMSH – przykłady

Seminarium L-5, 16-18.10.2011

Page 27: Programowanie generacji i przetwarzania siatek

GMSH – przykłady

Seminarium L-5, 16-18.10.2011

Page 28: Programowanie generacji i przetwarzania siatek

GMSH – przykłady

Seminarium L-5, 16-18.10.2011

Page 29: Programowanie generacji i przetwarzania siatek

GMSH – przykłady

Seminarium L-5, 16-18.10.2011

Page 30: Programowanie generacji i przetwarzania siatek

GMSH – przykłady

Seminarium L-5, 16-18.10.2011

Page 31: Programowanie generacji i przetwarzania siatek

GMSH – przykłady

Seminarium L-5, 16-18.10.2011

Page 32: Programowanie generacji i przetwarzania siatek

GMSH – przykłady

Seminarium L-5, 16-18.10.2011

Page 33: Programowanie generacji i przetwarzania siatek

GMSH – przykłady

Seminarium L-5, 16-18.10.2011

Page 34: Programowanie generacji i przetwarzania siatek

GMSH – przykłady

Seminarium L-5, 16-18.10.2011

Page 35: Programowanie generacji i przetwarzania siatek

Obsługa GMSH

Interfejs graficzny SkryptyW = 10;H = 8;lc = 1;Point(1) = 0,0,0,lc;Point(2) = W,0,0,lc;Point(3) = W,H,0,lc;Point(4) = 0,H,0,lc;Line(1)=1,2;Line(2)=2,3;Line(3)=3,4;Line(4)=4,1;Line Loop(1) = 1,2,3,4;Plane Surface(1) = 1;Mesh.Algorithm=5;

Seminarium L-5, 16-18.10.2011

Page 36: Programowanie generacji i przetwarzania siatek

Kołek w wymienniku ciepła

Wygeneruj siatkę czworościenną na dla geometrii pokazanej na rysunku.

r=1.5

r=1.5

40

422.56

z

r

Seminarium L-5, 16-18.10.2011

Page 37: Programowanie generacji i przetwarzania siatek

Rozwiązanie

XY

Z XYZ

YZX

Seminarium L-5, 16-18.10.2011

Page 38: Programowanie generacji i przetwarzania siatek

Rozwiązanie – skryptGeneral.Terminal = 1;r = 1.5;D = 40;L = 22.5;h = 4;d = 6;stp = newp;lc = 2.5;lc1 = 0.6;Point(stp) = 0,0,0,lc; // 1Point(newp) = D/2,0,0,lc; // 2Point(newp) = D/2,h,0,lc; // 3Point(newp) = d/2+r,h,0,lc1;Point(newp) = d/2,h+r,0,lc1;Point(newp) = d/2,h+L-r,0,lc1;Point(newp) = d/2-r,h+L,0,lc1;Point(newp) = 0, h+L,0,lc;c1 = newp;Point(c1) = d/2+r, h+r, 0;c2 = newp;Point(c2) = d/2-r, h+L-r, 0;outl[] = ;ln = newl;Line( ln) = stp, stp+1;outl[] += ln;ln = newl;Line( ln) = stp+1, stp+2;outl[] += ln;ln = newl;Line( ln) = stp+2, stp+3;outl[] += ln;ln = newl;Circle( ln) = stp+3, c1, stp+4;outl[] += ln;ln = newl;Line( ln) = stp+4, stp+5;

outl[] += ln;ln = newl;Circle( ln) = stp+5, c2, stp+6;outl[] += ln;ln = newl;Line( ln) = stp+6, stp+7;outl[] += ln;outl1[] += Rotate 0,1,0,0,0,0, 2*Pi/3 Duplicata Lineoutl[]; ;outl2[] += Rotate 0,1,0,0,0,0, 4*Pi/3 Duplicata Lineoutl[]; ;sur[] = ;waterSur[] = ;gasSur[]= ;fixSur[] = ;allines[] += outl[];allines[] += outl1[];allines[] += outl2[];n = #outl[];For i In 0:#allines[]-1outs[] = Extrude 0,1,0,0,0,0, 2*Pi/3 Lineallines[i ]; ;sur[] += outs[1];If (i % n == 0)waterSur[] += outs[1];EndIfIf (i% n == 1)fixSur[] += outs[1];EndIfIf (i%n > 1)gasSur[] += outs[1];EndIfEndFormysurf = newsl;Surface Loop(ala) = sur[];Physical Surface("bottom")= waterSur[];Physical Surface("fix")= fixSur[];Physical Surface("top")= gasSur[];Volume(newv) = mysurf;

Seminarium L-5, 16-18.10.2011

Page 39: Programowanie generacji i przetwarzania siatek

Programowanie generacji siatek w języku skryptowymGMSH

Jedną z podstawowych uciążliwości w korzystaniu z graficznego interfejsuGMSH jest brak funkcji undo. W przypadku nieskomplikowanych bądźregularnych modeli można zamiast klikania w GUI zaprogramować modelgeometryczny w języku skryptowym GMSH. Ten sposób korzystania zGMSH pozwala na budowanie modeli parametrycznych. Generalniejednak należy mieć na uwadze, że tworzenie dużych modeligeometrycznych w GMSH jest żmudne.

Seminarium L-5, 16-18.10.2011

Page 40: Programowanie generacji i przetwarzania siatek

Uruchamianie zadań wsadowych w GMSH

I Tylko parsuje plik wejściowy bez generacji siatkigmsh - plik.geo

I Wypisuje jawnie wszystkie elementy modelu geometrycznego gmsh-0 plik.geo

I Generuję odpowiednio siatkę 2D i 3Dgmsh -2 plik.geogmsh -3 plik.geo

Seminarium L-5, 16-18.10.2011

Page 41: Programowanie generacji i przetwarzania siatek

”Hello World” w GMSHProgram:

Printf("Hello World");

Rezultat:

Info : Running ’gmsh - hello.geo’Info : Started on Wed Jan 23 23:18:23 2013Info : Reading ’hello.geo’Hello WorldInfo : Read ’hello.geo’Info : Stopped on Wed Jan 23 23:18:23 2013

Odfiltrowanie komunikatów:

gmsh - hello_world.geo | awk ’!/Info *:/’

Dla wersji wypisującej komunikaty do standardowego strumieniadiagnostycznego:

gmsh - hello\_world 2>\&1 | awk ’!/Info *:/’

Seminarium L-5, 16-18.10.2011

Page 42: Programowanie generacji i przetwarzania siatek

GMSH : zmienne i instrukcja przypisania

/* scalar variables */v = 1.0;

/* lists */L[] = ; // empty list

Z[] = 1, 2, 3, v;

Seminarium L-5, 16-18.10.2011

Page 43: Programowanie generacji i przetwarzania siatek

GMSH: operacje na listach

1 /* empty list */2 U[] = ;3 V[] = 1,2;4

5 /* Addressing list elements */6 U[0] = 33;7

8 /* Appending elements of list V to U */9 U[] += V[]; // U is now 33, 1, 210

11 /* Operations on slices */12 U[1,0] += V[]; // U is now 35, 3, 213

14 U[0:2] += U[]; // U is now 70, 4, 415

16 /* Getting list size */17 Printf("Number of elements: %g", #U[]);

Seminarium L-5, 16-18.10.2011

Page 44: Programowanie generacji i przetwarzania siatek

Operatory i funkcje wbudowane

1. (), [], ., #2. ^3. !, ++, --, - (unary)4. *, /, %5. +, -6. <, >, <=, >=7. ==, !=8. &&9. ||10. ?:11. =, +=, -=, *=, /=

Acos, Asin, Atan, Atan2,Ceil, Cos, Cosh, Exp, Fabs,Fmod, Floor, Hypot, Log,Log10, Modulo, Rand, Sqrt,Sin, Sinh, Tan, Tanh

Seminarium L-5, 16-18.10.2011

Page 45: Programowanie generacji i przetwarzania siatek

GMSH: Pętle

1 For i In 1:2:102 Printf("%g", i);3 EndFor

Język GMSH nie dostarcza pętli o nieokreslonej ilości przebiegów.

Seminarium L-5, 16-18.10.2011

Page 46: Programowanie generacji i przetwarzania siatek

GMSH: Instrukcja warunkowa

1 A = 1;2 If (A >= 0)3 Printf("A is non-negative");4 Endif

W języku GMSH nie ma klauzuli ”else”.

Seminarium L-5, 16-18.10.2011

Page 47: Programowanie generacji i przetwarzania siatek

GMSH: Funkcje użytkownika

Funkcje użytkownika są wywoływane bez żadnych argumentów.Przypominają one bardziej makrodefinicje z języka C. Wszystkie zmiennesą w jednej globalnej przestrzeni nazw.

1 Function PrintList2 For __i In 0:#__LTP[]-13 Printf("%g", __LTP[__i]);4 EndFor5 Return6

7 U[] = 881,2,3;8

9 __LTP[]=U[];10 Call PrintList;

Seminarium L-5, 16-18.10.2011

Page 48: Programowanie generacji i przetwarzania siatek

GMSH: Włączanie plików instrukcja include

Pewien stopień modularyzacji modeli geometrycznych można osiągnąćstosując instrukcję Include:

1 Include "moj_model_1.geo";

Instrukcja ta dołącza zawartość pliku o podanej ścieżce, do bieżącegopliku w miejscu wywołania.

Seminarium L-5, 16-18.10.2011

Page 49: Programowanie generacji i przetwarzania siatek

GMSH: Indeksowanie obiektów geometrycznych

Każdy obiekt geometryczny musi mieć przypisany unikalny indeks. Wcelu ułatwienia zarządzania indeksami, GMSH dostarcza specjalnychzmiennych których wartoś jest równa najmniejszemuniewykorzystywanemu indeksowi dla obiektów danego rodzaju:

I newp – indeks dla punktówI nel – indeks dla krzywychI news – indeks dla powierzchniI newv – indeks dla bryłI newll – indeks dla zamkniętej sekwencji krawędzi (line loop)I newsl – indeks dla zamkniętej sekwencji (zbioru) powierzchni

(surface loop)I newreg – indeks dla regionu ( maksimum z newp, newl, news, newv,

newll, newls i indeksów obszarów fizycznych).

Seminarium L-5, 16-18.10.2011

Page 50: Programowanie generacji i przetwarzania siatek

GMSH: Punkty

Punkt z globalnym parametrem długości krawędzi

i = newp;Point(i) = 1.0, 0.0, 0.0;

Punkt z przypisanym parametem długości krawędzi

lc = 0.1i = newp;Point(i) = 1.0, 0.0, 0.0, lc;

Seminarium L-5, 16-18.10.2011

Page 51: Programowanie generacji i przetwarzania siatek

GMSH: Krzywe

I ProsteI Łuki kołoweI Łuki eliptyczneI Splajny

Catmulla-RomaI B-Splajny

X

Y

Z

Seminarium L-5, 16-18.10.2011

Page 52: Programowanie generacji i przetwarzania siatek

GMSH: Krzwe

Point(newp) = 0,0,0;Point(newp) = 1,1,0;Line(newl) = newp-2, newp-1;Point(newp) = Sqrt(2), 0, 0;Circle(newl) = newp-1, newp-3, newp-2;

z[] = ;z[] += newp; Point(newp) = -1, 1.1, 0;z[] += newp; Point(newp) = 0, 2.1, 0;z[] += newp; Point(newp) = 1, 1.1, 0;z[] += newp; Point(newp) = 2, 1.2, 0;

CatmullRom(newl) = z[];BSpline(newl) = z[0:2];

Color Red Line newl-4; // Do not put semicolon hereColor Green Line newl-3;Color Black Line newl-2;Color Magenta Line newl-1;

Seminarium L-5, 16-18.10.2011

Page 53: Programowanie generacji i przetwarzania siatek

GMSH: Kontrola opcji

W plikach wsadowych można ustawiać wszystkie opcje programudotyczące interpretacji danych, ustawień algorytmów czy parameterówwizualizacji.

1 General.LineWidth=2;2 General.PointSize=8;3 Mesh.CharacteristicLengthFromCurvature=1;4 Mesh.Lines = 1;5 Mesh.LineWidth = 2;6 Mesh.CharacteristicLengthFactor = 0.3;

Seminarium L-5, 16-18.10.2011

Page 54: Programowanie generacji i przetwarzania siatek

Powierzchnie

I Powierzchnie płaskieI Powierzchnie interpolowane (transfinite interpolation), w

szczególności powierzchnie otrzymane przez wyciąganie krzywych.I Płaty sferyczne

Seminarium L-5, 16-18.10.2011

Page 55: Programowanie generacji i przetwarzania siatek

Powierzchnie płaskie

Interfejs graficzny SkryptyW = 10;H = 8;lc = 1;Point(1) = 0,0,0,lc;Point(2) = W,0,0,lc;Point(3) = W,H,0,lc;Point(4) = 0,H,0,lc;Line(1)=1,2;Line(2)=2,3;Line(3)=3,4;Line(4)=4,1;Line Loop(1) = 1,2,3,4;Plane Surface(1) = 1;Mesh.Algorithm=5;

Seminarium L-5, 16-18.10.2011

Page 56: Programowanie generacji i przetwarzania siatek

Niestrukturalne siatki czworokątne

Kombinacja poleceń Recombine i Mesh.SubdivisionAlgorithm=1pozwala generować niestrukturalne siatki czworokątne (uwaga na jakośćtak otrzymanej siatki!)

1 Mesh.SubdivisionAlgorithm=1;2 R = 1;3 p1 = newp;4 Point(p1) = 1.5*R, 0, 0, 0.1*R;5 p2 = newp;6 Point(p2) = 2.5*R, 0, 0, 0.3*R;7 k = newl;8 Line(k) = p1, p2;9 le[] = Extrude 0,0,1, 0, 0, 0, Pi/3 Line k; ;10 Recombine Surface le[1];11 Printf("%g %g %g %g", le[0], le[1], le[2], le[3]);

5

1

2

3

4

1 2

3

4

X

Y

Z

Seminarium L-5, 16-18.10.2011

Page 57: Programowanie generacji i przetwarzania siatek

GMSH: Niestrukturalne siatki czworokątnePo lewej użyto tylko polecenia Recombine, po prawej Recombine iMesh.SubdivisionAlgorithm=1.

X

Y

Z X

Y

Z

Seminarium L-5, 16-18.10.2011

Page 58: Programowanie generacji i przetwarzania siatek

Złożony przykład

Seminarium L-5, 16-18.10.2011

Page 59: Programowanie generacji i przetwarzania siatek

Złożony przykład

Seminarium L-5, 16-18.10.2011

Page 60: Programowanie generacji i przetwarzania siatek

Złożony przykład

1 W = 2.0;2 H = 2.0;3 R =0.2;4 lc = 0.1;5 Asp = 3;6

7 pts[] = ;8

9 pts[0] = newp;10 Point(pts[0]) = -W/2, -H/2, 0, lc;11 pts[1] = newp;12 Point(pts[1]) = W/2, -H/2, 0, lc;13 pts[2] = newp;14 Point(pts[2]) = W/2, H/2, 0, lc;15 pts[3] = newp;16 Point(pts[3]) = -W/2, H/2, 0, lc;17

18 cc = newp;19 Point(cc) = 0, 0, 0, lc/2;20 c1 = newp;21 Point(c1) = R, 0, 0, lc/2;22 c2 = newp;23 Point(c2) = 0, R, 0, lc/2;

Seminarium L-5, 16-18.10.2011

Page 61: Programowanie generacji i przetwarzania siatek

Złożony przykład

1 lc1 = newl;2 Circle(lc1) = c1, cc, c2;3 lc2 = newl;4 Rotate 0.0,0.0,1.0, 0.0,0.0,0.0, Pi/2 Duplicata Line lc1; 5 lc3 = newl;6 Rotate 0.0,0.0,1.0, 0.0,0.0,0.0, Pi/2 Duplicata Line lc2; 7 lc4 = newl;8 Rotate 0.0,0.0,1.0, 0.0,0.0,0.0, Pi/2 Duplicata Line lc3; 9

10 outer[] = ;11 outer[0] = newl;12 Line(outer[0]) = pts[0], pts[1];13 outer[1] = newl;14 Line(outer[1]) = pts[1], pts[2];15 outer[2] = newl;16 Line(outer[2]) = pts[2], pts[3];17 outer[3] = newl;18 Line(outer[3]) = pts[3], pts[0];

Seminarium L-5, 16-18.10.2011

Page 62: Programowanie generacji i przetwarzania siatek

Złożony przykład

1 outerloop = newll;2 Line Loop(outerloop) = outer[];3

4 innerloop = newll;5 Line Loop(innerloop) = lc1, lc2, lc3, lc4;6

7 s1 = news;8 Plane Surface(s1) = outerloop, innerloop;9

10 /* s2 = news;11 Plane Surface(s2) = innerloop;12 */13

14 nnl[] = Extrude 0,0,W Line outer[], lc1, lc2, lc3, lc4; ;15

16 s3 = news;17

18 outerloopE = newll;19 Line Loop(outerloopE) = nnl[0], nnl[4], nnl[8], nnl[12] ;20

21 innerloopE = newll;22 Line Loop(innerloopE) = nnl[16], nnl[20], nnl[24], nnl[28] ;

Seminarium L-5, 16-18.10.2011

Page 63: Programowanie generacji i przetwarzania siatek

Złożony przykład

1 Plane Surface(s3) = outerloopE,innerloopE ;2

3 ns[] = Rotate 1,0, 0, 0, 0, W/2, -Pi/2 Duplicata Surface nnl[17], nnl[21], nnl[25], nnl[29]; ;4

5 Translate -Asp*R, 0, 0 Surface ns[]; 6

7 ncb[] = Boundary Surface ns[]; ;8

9 nu1 = newll;

Seminarium L-5, 16-18.10.2011

Page 64: Programowanie generacji i przetwarzania siatek

Złożony przykład

1 nb1[] = Boundary Surface nnl[1]; ;2 nb2[] = Boundary Surface nnl[9]; ;3

4 Delete Surface nnl[1], nnl[9]; 5

6 Line Loop(nu1) = nb1[] ;7

8 nu2 = newll;9 Line Loop(nu2) = ncb[0], ncb[4], ncb[8], ncb[12];10

11 s4 = news;12 Plane Surface (s4) = nu1, nu2 ;13

14 nu3 = newll;15 Line Loop(nu3) = nb2[] ;16

17 nu4 = newll;18 Line Loop(nu4) = ncb[2], ncb[6], ncb[10], ncb[14];19

20 s5 = news;21 Plane Surface (s5) = nu3, nu4;

Seminarium L-5, 16-18.10.2011

Page 65: Programowanie generacji i przetwarzania siatek

Złożony przykład1 //Printf("%g %g %g %g\n", ncb[0], ncb[4], ncb[8], ncb[12]);2

3 a = newsl;4

5 Surface Loop(a) = s1, s3, s4, s5, nnl[5], nnl[13], ns[], nnl[17], nnl[21], nnl[25], nnl[29] ;6

7 Printf("%g %g %g %g %g %g %g %g %g %g %g %g %g %g \n", s1, s3, s4, s5, nnl[5], nnl[13], ns[0],ns[1], ns[2], ns[3], nnl[17], nnl[21], nnl[25], nnl[29]);8 /*9 Physical Surface("holeY") = ns[] ;10 Physical Surface("holeZ") = nnl[17], nnl[21], nnl[25], nnl[29] ;11 Physical Surface("sideX") = nnl[5], nnl[13] ;12 Physical Surface("sideY") = s4, s5 ;13 Physical Surface("sideZ") = s1, s3 ;14 */15 nvv = newv;16 Volume(nvv) = a;17

18 Physical Volume("tet") = nvv ;19

20 Mesh 3;21

22 Show "*";23 Hide 24 Surface11;25 Volume0;26

Seminarium L-5, 16-18.10.2011

Page 66: Programowanie generacji i przetwarzania siatek

Metody obliczeniowe bazujące na modelach CSGIstnieją metody obliczeniowe, dla których modele geometryczne wreprezentacji CSG są ”naturalne” – nie ma potrzeby konwersji tychmodeli do reprezentacji brzegowej.

I Fictitious Domain Metod – rozwiązywanie problemu brzegowego wdanym obszarze Ω przez zastąpienie go dopowiednio sformułowanymproblemem brzegowym w prostszym obszarze OmegaS ⊃ Ω.Przykładowy solwer: http://www.freefem.org/ff3d/

I Overset (Chimera) Grids – specjalnie zaprojektowany solwer dlazachodzących na siebie podobszarów (zdyskretyzowanych siatkamistrukturalnymi (najczęściej) lib niestrukturalnymi). Głównie wzastosowaniach w obliczeniowej dynamice płynów. Przykładowysolwer: Overture http://www.overtureframework.org/

Seminarium L-5, 16-18.10.2011

Page 67: Programowanie generacji i przetwarzania siatek

Overture: ogen – overlaping grid generator

Rysunek z http://www.overtureframework.org/ogen.html. Użyty za zgodą

Seminarium L-5, 16-18.10.2011

Page 68: Programowanie generacji i przetwarzania siatek

Overture: ogen – overlaping grid generator

Rysunek z http://www.overtureframework.org/ogen.html. Użyty za zgodą

Seminarium L-5, 16-18.10.2011

Page 69: Programowanie generacji i przetwarzania siatek

Podziękowania

W przygotowaniu tej prezentacji wykorzystano materiały (przedewszystkim rysunki) dostępne na stronach omawianych programów.Składam w tym miejscu serdeczne podziękowania wszystkim tym, którzytakie materiały opracowali i udostępnili.

Seminarium L-5, 16-18.10.2011

Page 70: Programowanie generacji i przetwarzania siatek

Copyrights

Copyright (CC-BY) 2013 Roman [email protected]

This work is licensed under the Creative Commons Attribution 3.0Unported License. To view a copy of this license, visithttp://creativecommons.org/licenses/by/3.0/ or send a letter to CreativeCommons, 444 Castro Street, Suite 900, Mountain View, California,94041, USA.

Seminarium L-5, 16-18.10.2011