Siatki MES typu hexahedral i ich generowanie w oprogramowaniu PrePoMax

Siatki MES typu hexahedral i ich generowanie w oprogramowaniu PrePoMax

07/03/2024
|

Siatki są kluczowym aspektem metody elementów skończonych (MES). To one stanowią jedno z najczęstszych źródeł błędów i niedokładności w analizach. Stąd niezwykle ważne jest generowanie siatek o odpowiedniej gęstości, jakości i rodzajach elementów. Współczesne programy do symulacji MES oferują dosłownie setki typów elementów skończonych do szerokiego zakresu zastosowań.

Różnią się one przede wszystkim:

  • przestrzenią (1D, 2D, 3D)
  • kształtem
  • rzędem (stopniem funkcji kształtu) / liczbą węzłów
  • stopniami swobody
  • sformułowaniem
  • schematem (liczbą punktów) całkowania

Ale mogą również posiadać inne specjalne cechy. Za najpopularniejsze można uznać elementy, które idąc po kolei według powyższej listy można scharakteryzować jako: 3D, czworościenne (tetrahedral – tetra), drugiego rzędu (10-węzłowe), z 3 przemieszczeniowymi stopniami swobody, bryłowe (solid), z pełnym całkowaniem (4 punkty całkowania, spośród elementów bryłowych jedynie sześciościenne mogą korzystać ze zredukowanego całkowania).

Jednak czy są one zawsze najlepsze?

Siatki tetra vs hexa

Odpowiadając najkrócej na to pytanie – zdecydowanie nie, ponieważ w miarę możliwości, w większości przypadków zalecane są elementy sześciościenne/prostopadłościenne (hexahedral – hexa). Warto jednak przyjrzeć się bliżej często poruszanemu tematowi różnic między siatkami złożonymi z elementów czworościennych a tymi opartymi o elementy sześciościenne. Głównym powodem stosowania siatek tetra jest łatwość ich tworzenia dla dowolnej, nawet bardzo skomplikowanej, geometrii. Algorytmy do ich generowania posiadają wszystkie programy MES – również te wbudowane w środowiska CAD i darmowe. Ich tworzenie odbywa się w sposób w pełni automatyczny, użytkownik steruje jedynie lokalną i globalną gęstością siatki.

Tymczasem siatki hexa mogą być generowane jedynie dla stosunkowo prostych geometrii. Dopuszczalny stopień skomplikowania geometrii, na którą nakładana jest siatka hexa zależy od metody i generatora (meshera), ale też czasu, który trzeba poświęcić na odpowiednie przygotowanie geometrii i samej siatki. Tego typu siatki są bowiem zwykle tworzone w znacznie mniej zautomatyzowany sposób. Nawet jeśli mesher sam wybiera odpowiednią technikę i jej ustawienia, to i tak większość geometrii trzeba podzielić na prostsze segmenty (tzw. partycjonowanie – będzie o nim mowa później) a często też zmienić ustawienia meshera.

Należy przy tym wspomnieć, że bardzo wiele programów nie dysponuje w ogóle możliwością tworzenia siatek hexa. Dotyczy to zwłaszcza modułów MES w programach CAD i darmowego oprogramowania.

Zakładając jednak, że dla danego modelu da się w posiadanym programie wygenerować dobrej jakości siatki obu typów, pozostaje kwestia wyboru, z której z nich skorzystać. Tak jak to zostało wspomniane, siatki hexa są zdecydowanie preferowane w większości przypadków. Wynika to z kilku przyczyn. Przede wszystkim, mogą dać lepsze rozwiązanie przy mniejszym „koszcie obliczeniowym” (liczbie zmiennych / stopni swobody w całym modelu). Oznacza to, że z reguły siatka tetra musi być znacznie gęstsza żeby uzyskać rozwiązanie o zbliżonej dokładności. Jest to szczególnie widoczne w przypadku modelowania zginania konstrukcji cienkościennych (które de facto należy zwykle modelować przy pomocy elementów powłokowych), gdzie potrzeba co najmniej kilku elementów po grubości żeby otrzymać dobre wyniki. Łatwo sobie wyobrazić jak rośnie rozmiar siatki tetra w takim przypadku – ile czworościanów trzeba upakować żeby uzyskać rozwiązanie takie jak dla siatki z elementami prostopadłościennymi. Jest to jeden z najczęstszych błędów początkujących użytkowników programów MES.

Oczywiście należy pamiętać o utrudnionej dostępności generatorów siatek hexa i w takim przypadku wystarczy po prostu skorzystać z elementów powłokowych, które są znacznie bardziej powszechne nawet w prostych/darmowych programach. Nawet gdyby elementy tetra były równie dokładne co hexa, siatki złożone z tych pierwszych są znacznie większe (dużo więcej elementów i węzłów), co ma bardzo zły wpływ na czas obliczeń.

Inna kwestia, na którą warto zwrócić uwagę to tendencja do przesztywniania wyników w przypadku siatek tetra. Należy przy tym podkreślić, iż elementów czworościennych liniowych (pierwszego rzędu, 4-węzłowych, np. C3D4 w CalculiX) powinno się całkowicie unikać. Mogą one czasami służyć jedynie jako „wypełniacze” w dużych modelach, z dala od obszarów zainteresowania, nie nadają się natomiast do standardowego użycia. Są zbyt niedokładne i sztywne. Siatki z ich użyciem musiałyby być bardzo gęste. Zalecane są więc elementy hexa, gdy tylko geometria i program na to pozwala, a w innych przypadkach odpowiednio zagęszczone siatki z elementów tetra drugiego rzędu (np. C3D10 w CalculiX).

Analogiczne zasady stosuje się w przypadku ich dwuwymiarowych odpowiedników – elementów trójkątnych (triangular – tria) i czworokątnych/czworobocznych (quadrilateral – quad). Siatki z elementami typu quad praktycznie zawsze można wygenerować, ale należy zwrócić uwagę na ich jakość w przypadku bardziej złożonych geometrii i ew. użyć siatki mieszanej quad-dominated. Czasami dostępne są jeszcze elementy pięciościenne w kształcie klina (wedge/prism) lub piramidki (pyramid). Przydają się do łączenia elementów w siatkach mieszanych 3D i głównie do tego powinny być stosowane. Piramidki mogą łączyć elementy tetra i hexa, ale mają kiepskie właściwości (mocno przesztywniają wyniki), więc należy ich używać z dala od obszarów zainteresowania. Kliny drugiego rzędu (liniowe są zbyt sztywne, podobnie jak tetry liniowe) są znacznie lepsze od piramidek. Plasują się zwykle gdzieś pomiędzy tetrami i hexami (bardziej w stronę elementów hexa – często dają bardzo zbliżone do nich albo nawet nieco lepsze wyniki, choć należy brać pod uwagę nieuniknione różnice w liczbie elementów/węzłów przy takich porównaniach) i mogą być spokojnie stosowane do uzupełniania siatek hex-dominated, gdzie nie wszędzie udaje się użyć elementów hexa.

Poniższy rysunek pokazuje elementy czworościenne (na górze) i pięciościenne w formie klina (na dole) w wariantach pierwszego rzędu (po lewej) i drugiego rzędu (po prawej). Czerwone punkty symbolizują węzły, a żółte to punkty całkowania. Nazewnictwo z solvera CalculiX.

siatka hex

Dobór elementów hexa

Zakładając, że można użyć elementów sześciościennych (lub czworobocznych w 2D), należy jeszcze wybrać ich rząd i liczbę punktów całkowania używanych do obliczania odkształceń i naprężeń. Wyróżnia się całkowanie zredukowane i pełne (to pierwsze oczywiście skraca czas obliczeń, podobnie jak niższy rząd elementu), ale nie każdy program umożliwia taki wybór.

Poniższe wskazówki i przykładowe nazwy elementów oparte są o solver CalculiX (bazujący na Abaqusie), ale informacje te jak najbardziej mogą znaleźć zastosowanie również w innych środowiskach:

  • I rzędu (liniowe) z pełnym całkowaniem, np. C3D8 – niezalecane do modelowania zginania ze względu na ich przesztywnienie (tzw. shear locking),
  • I rzędu (liniowe) ze zredukowanym całkowaniem, np. C3D8R – bardzo dobre, często używane elementy, nadają się do modelowania materiałów prawie nieściśliwych, ale jeśli jest ich mało (< 4 po grubości) to są podatne na tzw. hourglassing (klepsydrowanie), czyli niefizyczne postaci deformacji w zginaniu, niektóre solvery domyślnie aktywują dla nich kontrolę hourglassu,
  • II rzędu (kwadratowe) z pełnym całkowaniem, np. C3D20 – dobre do analiz koncentracji naprężeń i mechaniki pękania, mogą trochę przesztywniać wyniki w przypadku zginania,
  • II rzędu (kwadratowe) ze zredukowanym całkowaniem, np. C3D20R – wydajne, nadają się do modelowania materiałów prawie nieściśliwych i koncentracji naprężeń (ale ich punkty całkowania są dalej od powierzchni, więc przy zbyt rzadkich siatkach mogą gorzej modelować koncentracje naprężeń niż elementy z pełnym całkowaniem), praktycznie nie występuje w nich hourglassing.

Podsumowując, do modelowania zginania i koncentracji naprężeń powinno się używać elementów drugiego rzędu. Do materiałów prawie nieściśliwych (wysoki wsp. Poissona lub duże odkształcenia plastyczne) zalecane są elementy o zredukowanym całkowaniu, ponieważ te z pełnym całkowaniem są podatne na volumetric locking, czyli kolejną formę przesztywnienia. Istnieją również pewne szczególne zalecenia do analiz z kontaktem, ale zależą one od używanego sformułowania kontaktu. Dotyczą głównie problemów z elementami drugiego rzędu w przypadku tzw. kontaktu node-to-surface. Przy kontakcie surface-to-surface zwykle nie ma większych problemów z typem elementów, ale często i tak zaleca się używanie elementów liniowych w kontakcie.

Należy również zwracać uwagę na potencjalne zniekształcenie elementów siatki (rozbieżność od idealnego kształtu, czyli np. sześcianu w przypadku elementów hexa), niektóre ich typy są na to szczególnie wrażliwe (zwłaszcza drugiego rzędu). Z drugiej strony, elementy drugiego rzędu lepiej nadają się do dyskretyzacji geometrii z dużymi krzywiznami – potrzeba do tego mniej elementów. Czasami dostępne są też specjalne typy elementów, np. incompatible mode dostępne również w CalculiX. Są one przeznaczone do modelowania zginania, gdzie wykazują się dużą wydajnością (może wystarczyć nawet jeden element po grubości), ale są wrażliwe na pewne formy zniekształcenia, szczególnie tzw. ukosowanie trapezoidalne.

Na koniec warto dodać, że dobór typu elementów może być silnie zależny od danego zagadnienia i przydatne może być sprawdzenie różnych typów elementów w ramach studium gęstości siatki (które również jest bardzo istotne). Nawet proste benchmarki typu zginanie belki wspornikowej pozwalają dużo się dowiedzieć o działaniu poszczególnych elementów. Warto je wykonywać szczególnie w przypadku darmowego oprogramowania, gdy nie ma się do dyspozycji tak szczegółowej dokumentacji, dobrych praktyk zalecanych przez producenta i własnego doświadczenia.

Poniższy rysunek pokazuje elementy typu hexa pierwszego rzędu (na górze) i drugiego rzędu (na dole) w wariantach z pełnym całkowaniem (po lewej stronie) i ze zredukowanym całkowaniem (po prawej stronie). Oznaczenia jak poprzednio.

siatka hex 1

Darmowe generatory siatek hexa

Jak wspomniano na początku artykułu, generatory siatek hexa nie są łatwo dostępne, ze względu na specyfikę metod do tego wykorzystywanych. Warto w tym miejscu po krótce je omówić. Ogólnie rzecz biorąc, większość technik generowania siatek hexa polega na utworzeniu siatki powierzchniowej typu quad a następnie wyciągnięciu jej, przeciągnięciu lub obróceniu aby utworzyć siatkę 3D. Łatwo się więc domyślić, że jedynie stosunkowo proste części można dyskretyzować w ten sposób, choć partycjonowanie, o którym mowa później, daje tu spore możliwości.

Istnieje jeszcze tzw. technika hexa block, pozwalająca nakładać siatki hexa nawet na dosyć skomplikowane geometrie. Jest ona jednak bardzo czasochłonna, ponieważ polega na tworzeniu prostopadłościanów wokół geometrii, dzieleniu ich na mniejsze bloki i dopasowywaniu ich krawędzi do geometrii.

Niestety ciężko o całkowicie darmowe generatory takich siatek i do wyboru są w zasadzie tylko dwie opcje – Salome_Meca lub Gmsh. Ten pierwszy program to uniwersalny preprocesor o rozbudowanych możliwościach. Niestety nie należy do intuicyjnych i łatwych w użyciu, chociaż pracuje się w środowisku graficznym. Jego możliwości tworzenia siatek typu hexa są też mocno ograniczone.

Z kolei Gmsh jest zaawansowanym mesherem, w którym środowisko graficzne jest proste i mocno okrojone a większość operacji wykonuje się z pomocą plików ze skryptami. Praca w tym środowisku nie jest bardzo trudna, ale trzeba się przyzwyczaić do kilku specyficznych zasad. Omówiony przykład wykonania prostej siatki hexa w Gmsh pod użycie w CalculiX można znaleźć w tym materiale wideo: PrePoMax (CalculiX FEA) – Tutorial 20 – Hex mesh from Gmsh.

Na tym kanale na YouTube jest więcej przykładów, ale niestety z komentarzem w języku niemieckim: anisim Open Source Engineering Software.

Generowanie siatek hexa w PrePoMax

Darmowy i otwartoźródłowy program PrePoMax, prezentowany w kilku artykułach na tym portalu, od wersji 2.0 posiada wbudowane opcje tworzenia siatek hexa. Wykorzystują one opisany wyżej generator Gmsh. Dostępne są 3 główne techniki – wyciągnięcie (Extrude), obrót (Revolve) i tzw. Transfinite Mesh. Ich działanie jest w pełni zautomatyzowane – nie trzeba importować geometrii 2D i wyciągać jej do 3D jak w samym Gmsh. Program robi to wewnętrznie, więc cały czas pracuje się na modelach 3D. Warto przy tym wspomnieć, że do PrePoMax zostały dodane też 2 inne algorytmy oparte o Gmsh – tworzenie siatek czworościennych (Tetrahedral Gmsh) i 2D (Shell Gmsh – dobrze radzi sobie z tworzeniem również siatek typu quad).

Najbardziej przydatne jest jednak generowanie siatek hexa poprzez wyciągnięcie lub obrót. Działa to w ten sposób, że wystarczy wskazać ścianę modelu służącą jako podstawa wyciągnięcia/obrotu. Co ciekawe, ściana ta nie musi być płaska. Jeśli składa się ona z kilku segmentów (ze względu na partycjonowanie, o którym będzie mowa później) to trzeba wybrać wszystkie, np. korzystając ze sposobu zaznaczania Surface angle. Po dokonaniu prawidłowego wskazania, program wyświetli strzałkę symbolizującą kierunek wyciągnięcia/obrotu. Przycisk Preview (symbol oka) pozwala podejrzeć siatkę 2D nakładaną na wybraną ścianę przed jej wyciągnięciem/obrotem do 3D. Jednym z ograniczeń jest brak możliwości obrotu o 360 stopni, ale można by przygotować dwie części po 180 stopni i połączyć je więzem tie jeśli konieczna jest pełna geometria (często wystarczy segment i wykorzystanie symetrii). Nie można również tworzyć obróconych siatek w przypadku gdy oś obrotu styka się z geometrią. Za to kierunek wyciągnięcia nie musi być prostopadły do ściany bazowej.

Trzeba jeszcze podkreślić pewną istotną kwestię. Siatki quad na powierzchni (a więc w efekcie hexa na objętości) nigdy nie są tworzone domyślnie. Zawsze trzeba włączyć rekombinację elementów tria do quad. W przypadku Extrude/Revolve należy w tym celu przestawić parametr Recombine algorithmNone na inny (np. Simple). Należy pamiętać, że jeśli geometria nie ma prostych „kanciastych” kształtów lub nie jest odpowiednio spartycjonowana to po wyciągnięciu/obróceniu uzyskuje się siatki mieszane z elementami quad i tria w 2D przekształcanymi odpowiednio w hexa i wedge w 3D (przykład poniżej). Z kolei technika Transfinite Mesh wymaga rekombinacji elementów tetra w hexa.

Kolejna wersja programu PrePoMax (dostępna na razie jako deweloperska) wprowadzi siatki mieszane hexa i tetra z przechodzeniem między nimi przy pomocy elementów typu pyramid. Póki co nie będą to „prawdziwe” elementy piramidalne, ponieważ CalculiX ich jeszcze nie wspiera (choć jest szansa na ich dodanie w niedalekiej przyszłości), tylko przekształcone kliny lub prostopadłościany.

siatki hexa

Dla wyciągania i obracania dostępne są jeszcze parametry Transfinite. Włączenie ich pozwala na uzyskanie siatek typu structured (regularnych) dla ścian z 3 lub 4 krawędziami. Algorytm ten jest też dostępny jako osobny sposób generowania siatki – Transfinite Mesh. Pozwala on na uzyskiwanie regularnych siatek hexa dla objętości z 5 lub 6 ścianami po 3 lub 4 krawędzie każda, nawet jeśli objętości te mają dość złożone kształty. O jego wykorzystaniu w praktyce będzie jeszcze mowa w kolejnej sekcji artykułu.

Instrukcje i przykłady używania opisanych tu narzędzi w PrePoMax można znaleźć na kanale YouTube jego twórcy.

Rozmiarem siatki i rzędem elementów można sterować przy pomocy obiektu Meshing ParametersMesh Setup Items. Z kolei obiekt Mesh Refinement pozwala na lokalne zagęszczanie siatki. Narzędzia te działają również dla „starych” algorytmów tworzenia siatek w PrePoMax. Schemat całkowania i sformułowanie elementu można z kolei zmienić w zakładce FE Model, edytując wybraną część.

Przygotowanie geometrii do tworzenia siatek hexa w PrePoMax – partycjonowanie

Ostatnią ważną kwestią do omówienia w temacie generowania siatek hexa jest odpowiednie przygotowanie geometrii. Jak wcześniej wspomniano, siatki tego typu można tworzyć jedynie dla stosunkowo prostych geometrii. Nic jednak nie stoi na przeszkodzie żeby nieco bardziej skomplikowaną część podzielić na prostsze segmenty, dla których da się łatwo wygenerować siatkę hexa. To podejście nazywa się partycjonowaniem i jest powszechne w MES nie tylko do tworzenia siatek hexa (choć to jedno z najczęstszych zastosowań), ale też do przygotowywania geometrii pod przypisanie materiałów, warunków brzegowych, obciążeń czy więzów, gdy te nie działają na całej objętości lub na całych ścianach. Wyróżnić można partycjonowanie krawędzi, powierzchni (ścian) i objętości.

Pod kątem siatek hexa istotne są te 2 ostatnie rodzaje i partycjonowanie nie jest wtedy zupełnie dowolne lecz wymaga takiego podziału, żeby uzyskać jak najprostsze kształty, a co za tym idzie regularne siatki.

Siatki hexa tworzone przez wyciąganie lub obracanie w PrePoMax nie mogą korzystać z partycjonowania objętościowego, ponieważ te techniki nie wspierają tzw. compound parts, czyli części scalonych z kilku pojedynczych zaimportowanych brył. Obejściem mogłoby tu być nałożenie siatek na osobne części a następnie połączenie ich więzami tie, ale ma to minusy i w miarę możliwości należy unikać takich połączeń. Możliwe jest natomiast partycjonowanie powierzchni, które służą jako bazowe do wyciągnięcia lub obrócenia. Ilustruje to poniższy przykład, w którym podział ściany bazowej do wyciągnięcia pozwala uzyskać regularną siatkę typu hexa.

siatki hexa w prepomax

Z kolei technika Transfinite Mesh pozwala na używanie compound parts, więc można korzystać z partycjonowania objętościowego. Może to być wręcz konieczne biorąc pod uwagę opisane wcześniej wymagania tej metody.

siatka hexa w prepomax

Podsumowanie

Siatki typu hexa są zalecane gdy tylko pozwala na nie geometria modelu. Ich generowanie nie jest jednak tak proste jak w przypadku siatek tetra, zwłaszcza jeśli geometria nie składa się z samych podstawowych kształtów. W takich sytuacjach warto postawić na siatki mieszane. Użycie siatek tetra nie jest jednak błędem jeśli są one odpowiednio gęste. Szczególnie gdyby tworzenie siatki hexa było zbyt czasochłonne lub uproszczenia geometrii konieczne do jej użycia miały spowodować znaczącą utratę dokładności modelu np. przez pominięcie istotnych zaokrągleń wpływających na koncentracje naprężeń w obszarach zainteresowania.

Ważne są również studia zbieżności siatki uwzględniając też typ elementów. Mogą z nich płynąć interesujące wnioski w zależności od badanego zagadnienia. Należy też podkreślić, że w artykule skupiono się na analizach wytrzymałościowych. Inne typy symulacji mogą mieć zupełnie inne zalecenia dotyczące doboru elementów. Przykładowo, elementy tetra pierwszego rzędu mogą się dobrze sprawdzać w analizach termicznych.

Spośród nielicznych całkowicie darmowych programów pozwalających na generowanie siatek hexa, najlepszy wydaje się być Gmsh, choć nie wspiera obecnie np. siatek tego typu przeciąganych wzdłuż linii, mimo że pozwala na wyciągnięcie z jednoczesnym obrotem. Ze względu na trudny w obsłudze interfejs Gmsh, warto skorzystać z możliwości tego generatora zaimplementowanych w PrePoMax. Funkcjonalności te pojawiły się w nim stosunkowo niedawno i wciąż są rozwijane, więc można liczyć na ich dalsze rozbudowanie. Nie wszystkie opcje programu Gmsh są bowiem wspierane (np. wspomniane wyciągnięcie z obrotem).

Nadchodząca wersja PrePoMax będzie również wspierała technikę Thicken Shell Mesh, czyli wyciąganie powierzchni i siatek 2D do 3D w kierunku normalnym. Pozwala ona na skorzystanie z algorytmu quasi-structured quad 2D, którego nie wspiera Extrude Mesh.