Wolno dostępne oprogramowanie OpenFOAM (Open Field Operation And Manipulation) służy do symulacji rozległej klasy zagadnień związanych z przepływem płynów. Dla użytkowników mających podstawowe umiejętności programistyczne system ten może być atrakcyjnym substytutem oprogramowania komercyjnego. Celem tego artykułu jest podanie podstawowych informacji, które umożliwią rozpoczęcie użytkowania programu.
OpenFOAM w wersji źródłowej nie ma graficznego interfejsu użytkownika, lecz jest tak zaprogramowanym (w języku C++) środowiskiem, że z łatwością można je użytkować posługując się na przemian wierszem poleceń i standardowym menedżerem plików pod dowolną dystrybucją systemu Linux. Omawiane w artykule operacje wykonywane są w pakiecie zainstalowanym w katalogu domowym użytkownika, w podkatalogu o nazwie OpenFOAM, który z kolei rozgałęzia się na trzy katalogi o standardowych nazwach, zawierających numer wersji oprogramowania (w tym przypadku jest to wersja 4.1): OpenFOAM-4.1, ThirdParty-4.1 oraz user-4.1.
Za pomocą menedżera plików (można także wszystkie te operacje przeprowadzić przy użyciu tylko wiersza poleceń) należy skopiować niezbędne pliki z katalogu źródłowego OpenFOAM-4.1/tutorials/Y/… do katalogu użytkownika user-4.1/run/, przy czym Y jest symbolem jednego z katalogów ogólnotematycznych, pokazanych na rysunku 1 (np. combustion [spalanie], compressible [przepływy płynów ściśliwych], DNS [bezpośrednia symulacja numeryczna równaniami N-S], heatTransfer [wymiana ciepła], incompressible [przepływy płynów nieściśliwych], multiphase [przepływy wielofazowe] i inne). Katalogi te mają głębszą strukturę o liczbie poziomów zależnej od rodzaju zagadnienia.

Na najniższym poziomie znajdują się katalogi konkretnych zadań obliczeniowych X, prezentowane przykładowo na rysunku 2.

W dalszej części przywoływany będzie przykład TJunction, ilustrujący zastosowanie pakietu OpenFOAM do obliczania przepływu płynu nieściśliwego przez rozgałęzienia przewodów.
Wszelkie zmiany w plikach źródłowych najlepiej wprowadzać już po skopiowaniu danego zadania X do katalogu run użytkownika. Niekiedy brak jest w wybranym katalogu któregoś z plików standardowych. Akurat w przypadku TJunction nie ma pliku uruchomiającego obliczenia Allrun, który można skopiować z sąsiedniego przykładu TJunctionFan i dostosować do potrzeb bieżących, uzyskując jego formę widoczną na rysunku 3.

Przykładowa procedura użytkowania systemu
Krok 1
W terminalu należy wywołać polecenie of41 (należy uczynić to każdorazowo po nowym uruchomieniu terminala – odtąd w systemie widoczne są zmienne środowiskowe), a następnie cd $FOAM_TUTORIALS, które przenosi użytkownika do katalogu tematycznego Y – skąd wybierany jest przykład obliczeniowy X najbardziej zbliżony do zagadnienia jakie ma być realizowane. W razie potrzeby należy uzupełnić zawartość docelowego katalogu X o brakujące elementy. Podstawowe elementy każdego przykładu obliczeniowego to katalogi: 0 (zawierający dane początkowe parametrów płynu, np. ciśnienia czy prędkości), constant (zawierający charakterystykę płynu i modelu turbulencji), system (zawierający plik z danymi do sterowania przebiegiem obliczeń oraz pliki definicyjne geometrii obiektu oraz równań i metodyki ich rozwiązania – do pierwszego uruchomienia zadania obliczeniowego nie potrzeba w nie ingerować, chyba że użytkownik potrafi dobrać bardziej optymalne wartości parametrów).
Krok 2
Należy skopiować katalog wybranego przykładu obliczeniowego (w omawianym przykładzie X TJunction), wraz z całą jego zawartością, do podkatalogu wykonawczego run w katalogu użytkownika – za pomocą myszy w menedżerze plików lub korzystając z wiersza poleceń.

Krok 3
Z poziomu menedżera plików, przechodząc do skopiowanego katalogu X oraz do jego podkatalogów, dostosowujemy parametry obliczeń według potrzeb, edytując i modyfikując poszczególne zapisy w pliku sterującym obliczeniami (X/system/controlDict – Rys. 4), w plikach definicyjnych geometrii (X/system/blockMeshDict – Rys. 5 a,b,c), własności fizycznych (X/constant/transportProperties – w tym przypadku podawany jest tylko rodzaj płynu: Newtonian, i jednostka oraz wartość kinematycznego współczynnika lepkości), modelu turbulencji (X/constant/turbulenceProperties – Rys. 6), czy innych, specyficznych dla danego przykładu obliczeniowego.




W razie potrzeby modyfikujemy wartości początkowe parametrów płynu (pól), np. ciśnienia p, prędkości U – podawanej jak każdy wektor w postaci trójki składowych (Ux Uy Uz) – oraz innych, zapisane w plikach o charakterystycznych nazwach w podkatalogu X/0 (ewentualnie w podkatalogu X/0.orig, zależnie od przyjętego w pliku Allrun sposobu realizacji obliczeń).
Krok 4
Obliczenia uruchamiamy wpisując w wierszu poleceń ./Allrun (kropka w zapisie jest potrzebna).
Krok 5
Wyniki obliczeń znajdziemy w postaci źródłowej w katalogach 0, 1, 2,… . Kolejne cyfry – użyte tutaj tylko przykładowo jako kolejne liczby naturalne – oznaczają w istocie czasy rejestracji parametrów płynu, wynikające z ustawienia zmiennych sterujących startTime [początek obliczeń], writeControl [sterowanie zapisem] oraz writeInterval [odstęp czasowy zapisu] w pliku controlDict. Można także wyniki analizować graficznie, wywołując w terminalu polecenie paraFoam, które uruchomi program graficzny instalowany standardowo w systemie OpenFOAM.
Przebieg wdrażania przykładowego problemu obliczeniowego do symulacji komputerowej ilustruje zestaw instrukcji wiersza poleceń pokazany na rysunku 7.

Program graficzny
W OpenFOAM do analizy graficznej wykorzystuje się wolno dostępne oprogramowanie ParaView. Jest ono wywoływane przez polecenie wewnętrzne pakietu paraFoam, z poziomu terminala otwartego w katalogu, gdzie wykonywano symulację.
Program ParaView, po wpisaniu w terminalu polecenia paraFoam, uruchamiany jest w trybie pełnoekranowym i w głównym oknie pojawia się menu główne, trzy paski poziome zawierające wybór funkcji graficznych oraz okna podrzędne o nazwach:
- Layout#1 [układ nr1] – główne okno graficzne z układem współrzędnych,
- Properties [właściwości] – okno z parametrami sterującymi oraz
- Pipeline Browser [katalog liniowy] – okno wydobywane na zewnątrz po naciśnięciu ikonki usytuowanej w narożniku i zawierające informację o otwartych aktualnie zbiorach danych (Rys. 8).

Jeżeli są już otwarte różne zbiory danych, poprzez naciśnięcie oka znajdującego się z lewej strony nazwy zbioru można wyłączyć dany zbiór z podglądu lub włączyć go z powrotem (jest to przydatne np. przy analizie linii prądu, gdy widoczna geometria obiektu je „zasłania”).
Pierwszy od góry pasek w oknie głównym zawiera standardowe zakładki, służące do sterowania plikami (File), edycją (Edit), wyglądem (View) oraz specyficzne dla tego edytora, służące do generowania zbiorów danych (Sources), przetwarzania danych (Filters), czy ułatwiające dostęp do zaawansowanych narzędzi (Tools). Kolejne paski poziome zawierają ikonki lub zakładki podrzędne, służące do definiowania niektórych parametrów grafiki. Okno Properties ma podświetlony na zielono przycisk Apply [zastosuj], którym zatwierdzamy ustawienia parametrów dla aktualnie wybranego zbioru danych, i jego naciśnięcie powoduje wyświetlenie w oknie Layout#1 obiektu geometrycznego reprezentującego obszar obliczeniowy. Może to być cały obszar lub dowolny wybór jego elementów składowych (jeżeli obiekt składa się z elementów), co definiujemy w zakładce Mesh Parts [elementy siatki] okna Properties pokazanego na rysunku 8 (standardowym wyborem początkowym jest internalMesh [siatka wewnętrzna]).
Obiekt geometryczny może być wyświetlony w oknie Layout#1 w postaci Surface [powierzchnia], co odczytujemy w tytule zakładki na trzecim od góry pasku ekranu głównego. Do innej reprezentacji pola obliczeniowego przechodzimy wybierając w tej zakładce 3D glyphs [strzałki 3D], Outline [szkic], Points [punkty], Surface with edges [powierzchnia z krawędziami], Volume [objętość] albo Wireframe [siatka]. Rodzaj informacji wyświetlanej na kolorowo na obiekcie geometrycznym (w obszarze obliczeniowym) zmieniamy w innej zakładce trzeciego paska, która pierwotnie zawiera wybór vtkBlockColors [kolory bloków vtk]. Można tę opcję zmienić na Solid Color [kolor jednolity] albo na jeden z parametrów płynu, np. p [ciśnienie], U [pole prędkości], itd. (przy czym są do wyboru dwie metody prezentacji parametrów przepływowych: dane węzłowe – mały romb, dane uśredniane objętościowo – duży sześcian). Gdy parametr jest wielkością wektorową, w sąsiedniej zakładce mamy do wyboru opcje: Magnitude [moduł wektora] lub jedną z jego składowych X, Y albo Z. Po dokonaniu wyboru, wyświetli się w głównym oknie także kolorowa legenda, której zakres liczbowy można uaktualniać przyciskiem Rescale [przeskaluj], znajdującym się w oknie Properties, lub przyciskiem z zieloną obustronną strzałką – usytuowanym również na trzecim pasku okna głównego. Zestaw parametrów, możliwych do wyświetlania na obiekcie geometrycznym zależy od zaznaczenia dokonanego w zakładce Volume Fields [pola objętościowe] okna Properties (Rys. 9).

Legenda może być przesunięta w dowolne miejsce za pomocą myszy. Wyświetlany obiekt geometryczny obracamy za pomocą myszy albo manipulujemy nim za pomocą ikonek z trzeciego paska. Najczęściej używane sposoby modyfikacji geometrii to: Zoom to Box [powiększanie do ramki] oraz ukierunkowanie wzdłuż osi +X lub -X, itd. Cofnięcie operacji powiększenia uzyskujemy przyciskiem Reset (ikonka ze skrzyżowanymi strzałkami), a cofnięcie skutków manipulacji – za pomocą Camera Undo z zakładki głównej Edit. We wszystkich przypadkach nazwa funkcji realizowanej za pomocą ikonki wyświetlana jest po jej wskazaniu. Przy pomocy kombinacji przycisków F11/Esc (z klawiatury komputera) powiększymy okno graficzne do maximum lub cofniemy tę operację.
Przykład obliczeniowy
Wybrany do prezentacji przykład obliczeniowy przepływu powietrza przez rozgałęzienie przewodów opisywany jest za pomocą modelu płynu nieściśliwego, gazu doskonałego pod względem termodynamicznym. Zakłada się, że przepływ płynu ma charakter turbulentny, opisywany modelem RANS (Reynolds averaged Navier-Stokes) o nazwie kEpsilon, i jest to standardowy model Laundera i Spaldinga opisany w literaturze [1, 2]. Kanały mają przekrój kwadratowy o boku 0,02 m i długościach 0,2 m, a przekroje graniczne zdefiniowane są następująco: wlot inlet oraz wyloty outlet1 i outlet2. Warunki początkowe zdefiniowano za pomocą nadwyżki ciśnienia całkowitego, które w przekroju wlotowym wzrasta od wartości 10 do 40 m2/s2, a w przekrojach wylotowych utrzymywane jest na stałym poziomie 10 (outlet1) oraz 0 (outlet2). Pole prędkości scharakteryzowane jest na brzegach za pomocą zerowego gradientu lub zerowej wartości w przypadku napływu z zewnątrz. Równania przepływu rozwiązywane są algorytmem PIMPLE (zaimplementowanym w pakiecie pod nazwą pimpleFoam), który stanowi kombinację dwóch popularnych metod: SIMPLE [3] oraz PISO [4]. Obliczenia realizowane są z krokiem czasowym timeStep = 0.001 s, zapisywane w odstępach writeInterval = 0,1 s, do chwili końcowej endTime = 1,5 s. Maksymalna wartość liczby Couranta, stanowiącej kryterium stabilności obliczeń, wynosi maxCo = 5 (plik controlDict).
Wyniki obliczeń możemy analizować w sposób statyczny, wyświetlając dane z konkretnej chwili czasu, lub na sposób dynamiczny – wywołując ciągłą sekwencję danych. Pierwszy sposób realizowany jest przy wykorzystaniu standardowych ikonek sterujących „przewijaniem” danych, umieszczonych na drugim od góry pasku okna głównego, lub po prostu przez przestawienie cyfry reprezentującej kolejny krok czasowy – w sąsiednim okienku. Płynną sekwencję wyników obejrzymy po naciśnięciu ikonki >, a zatrzymamy standardowym przyciskiem pauzy ||. Przykładowy rozkład ciśnienia powietrza w kanale w chwili końcowej symulacji zilustrowano na rysunku 10.

Inną możliwością analizy wyników jest obserwacja linii prądu. Po wybraniu ikonki streamlineTracer i po wprowadzeniu jednej zmiany w oknie Properties, tzn. zmiany współrzędnej X punktu „zasiewu” (seeds), przesuwając go w kierunku rozgałęzienia uzyskano przebieg linii prądu widoczny na rysunku 11.

Prezentowane na ekranie wyniki można zapisać w pliku, po wywołaniu z głównej zakładki File polecenia Save Screenshot i zaakceptowaniu proponowanych ustawień przyciskiem Ok (ewentualnie zmieniając rozdzielczość i/lub jakość), a następnie, po podaniu nazwy i typu pliku (standardowo .png), którego docelowe usytuowanie odczytujemy w górnej części wywołanego okienka (Rys. 12).

Opisana metodologia użytkowania programu graficznego pakietu OpenFOAM umożliwia zilustrowanie przebiegu zmienności pól fizycznych i linii prądu w obszarze obliczeniowym. Pozwala to na dokonanie ogólnej oceny funkcjonowania analizowanego układu przepływowego. Do wykorzystania w pełni potencjału programu graficznego może jednak być potrzebne studium oryginalnych podręczników użytkowania pakietu.
dr inż. Krzysztof Nakonieczny
komplab@fr.pl
Literatura:
[1] Launder B.E.: Spalding D.B.: Mathematical Models of Turbulence, Academic Press, London, 1972
[2] Launder B.E.: Spalding D.B.: The numerical computation of turbulent flows, Computer Methods in Applied Mechanics and Engineering, 3/1974
[3] Gryboś R.: Podstawy mechaniki płynów, Część 2, Wydawnictwo Naukowe PWN, Warszawa, 1998
[4] Issa R.I.: Solution of the implicitly discretised fluid flow equations by operator-splitting, Journal of Computational Physics 62 (1) 1986
[5] openfoam.org
artykuł pochodzi z wydania 7/8 (130/131) lipiec/sierpień 2018