Od żłobka do przedszkola - mini szkolenie z użytkowania pakietu OpenFOAM Karol Wędołowski 06.04.2011 Część 2. Struktura case'u na przykładzie przepływu w zagłębieniu 1. Potrzebne katalog i pliki W tej części szkolenia będziemy potrzebowali katalogu cavity zawierającego pliki niezbędne do uruchomienia omawianego case'u. Można go pobrać z następującej ścieżki: /mnt/local/kamil/wymiana/of_szkolenie0/cavity dla przypomnienia cp -r /mnt/local/kamil/wymiana/of_szkolenie0/cavity $HOME ) 2. Solver Do rozwiązywania przepływu w zagłębieniu będziemy używali solvera icofoam. Rozwiązuje on zmienne w czasie równania Navier-Sotkes'a dla nieściśliwego przepływu laminarnego. Nie ma możliwości używania w nim modeli turbulencji. Z tego powodu jedynymi zmiennymi używanymi w symulacji będą pola prędkości i ciśnienia. 3. Co potrzeba do symulacji? Do wykonania symulacji zawsze potrzebna jest siatka obliczeniowa. Informacje o niej znajdują się w katalogu constant/polymesh. Ogólniej w katalogu constant znajdują się parametry stałe w czasie całej symulacji na przykład lepkość w pliku transportproperties). Potrzebne są też warunki początkowe i brzegowe dla naszej symulacji. Znajdują się one w katalogu 0, chociaż liczba ta może być dowolna o tym za chwilę). Trzeci katalog w naszej symulacji to system. Tutaj znajdują się wszystkie informacje na temat czasu w symulacji chwila początkowa, końcowa, krok czasowy, momenty zapisu wyników), użytych schematów dyskretyzacji, oraz solverów macierzowych i parametrów używanych w odpowiednim algorytmie numerycznym. Ale po kolei... 3a. Katalog constant Znajduje się tu podkatalog polymesh. W nim znajdziemy wszystkie informacje o siatce użytej w symulacji. Zajrzyjmy do środka. Plikiem służącym do komunikacji z użytkownikiem jest blockmeshdict. Służy on jako plik wsadowy do aplikacji blockmesh tworzącej proste siatki. Jego struktura będzie omówiona w następnej części. Pozostałe pliki w katalogu polymesh zostają utworzone po uruchomieniu aplikacji blockmesh. Opisują one między innymi wszystkie punkty siatki points), ściany komórek faces) i brzegi domeny boundary). Pliki owner i neighbour nie są istotne z punktu widzenia uzytkownika.
Zawartość pliku blockmeshdict /*--------------------------------*- C++ -*----------------------------------*\ ========= \\ / F ield OpenFOAM: The Open Source CFD Toolbox \\ / O peration Version: 1.7.1 \\ / A nd Web: www.openfoam.com \\/ M anipulation \*---------------------------------------------------------------------------*/ FoamFile version 2.0; format ascii; class dictionary; object blockmeshdict; converttometers 0.1; vertices 0 0 0) 1 0 0) 1 1 0) 0 1 0) 0 0 0.1) 1 0 0.1) 1 1 0.1) 0 1 0.1) blocks hex 0 1 2 3 4 5 6 7) 20 20 1) simplegrading 1 1 1) edges patches wall movingwall 3 7 6 2) ) wall fixedwalls 0 4 7 3) 2 6 5 1) 1 5 4 0) ) empty frontandback 0 3 2 1) 4 5 6 7) ) mergepatchpairs // ************************************************************************* //
Rysunek1. Siatka utworzona przez blockmesh. 3b. Katalog system Najważniejszym plikiem jest tu controldict. Zapisujemy w nim istotne informacje dotyczące czasu symulacji. Poniżej fragment tego pliku dla omawianej symulacji. location "system"; object controldict; application startfrom icofoam; starttime; starttime 0; stopat endtime; endtime 0.5; deltat 0.005; writecontrol timestep; writeinterval 20; purgewrite 0; fragment pliku controldict
Najważniejsze parametry: startfrom określa początek symulacji np. starttime wartość podana niżej explicite) lub latesttime ostatni zapisany moment symulacji) endtime moment zakończenia symulacji deltat krok czasowy writeinterval okres, co który zostaną zapisane wyniki symulacji Dwa pozostałe pliki fvschemes i fvsolutions zawierają informację odpowiednio o schematach dyskretyzacji i metodach rozwiązywania powstałych równań macierzowych. Przyjrzymy się jedynie pliku fvschemes. location "system"; object fvschemes; ddtschemes default gradschemes default gradp) divschemes default divphi,u) Euler; Gauss linear; Gauss linear; none; Gauss linear; Fragment pliku fvschemes Każdy operator różniczkowy ma zdefiniowane schematy dla różnych zmiennych. Słowo Gauss oznacza, że korzysta się tu ze wzoru Gaussa na zamianę całek objętościowych na powierzchniowe. Aby zobaczyć dostępne schematy najlepiej wpisać byle co na przykład zamiast linear ddss i uruchomić solver. 3c. Katalog 0 W tym katalogu znajdziemy dwa pliki U i p, zawierające informacje o warunkach brzegowych i początkowych dla prędkości i ciśnienia. Spójrzmy na ich strukturę. class volvectorfield; object U; dimensions [0 1-1 0 0 0 0]; internalfield uniform 0 0 0
boundaryfield movingwall fixedvalue; value uniform 1 0 0 fixedwalls fixedvalue; value uniform 0 0 0 frontandback empty; Fragment pliku U W pliku U znajdziemy informację o tym czy jest to pole skalarne, wektorowe, czy tensorowe, jaką posiada jednostkę, o jego wartości w chwili 0 i rodzaju warunków brzegowych. class rodzaj pola volscalarfield, volvectorfield, voltensorfield) dimensions jednostka [kg m s K mol Amper Lumen], każda w odpowiedniej potędze ) np. [0 1-1 0 0 0 0] m/s internalfield pole wewnątrz domeny, uniform oznacza że jest to pole jednorodne o danej wartości. W innym przypadku należy podać wartość pola w każdej komórce. boundaryfield dla każdego brzegu podany jest rodzaj warunku brzegowego i wartość odpowiednich parametrów. Empty oznacza, że symulacja jest dwuwymiarowa. class volscalarfield; object p; dimensions [0 2-2 0 0 0 0]; internalfield uniform 0; boundaryfield movingwall fixedwalls zerogradient; zerogradient; frontandback empty; Fragment pliku p
4. Uruchomienie symulacji Najpierw tworzymy siatkę poleceniem blockmesh z poziomu katalogu cavity. Jeżeli nie wystąpił żaden błąd możemy uruchomić symulację, wpisując w terminalu icofoam. Na ekranie pojawią się informacje o przebiegu symulacji, np. poziomy niedokładności solverów oraz wartość liczby Couranta średnia i maksymalna). Liczba ta dla części schematów czasowych musi być mniejsza od 1 w każdej komórce. W konkretnej komórce dana jest ona wzorem Cu= t U x gdzie t oznacza krok czasowy, x rozmiar komórki w kierunku przepływu, a U wartość prędkości przepływu w komórce. Jeżeli nie pojawił się żaden błąd możemy obejrzeć wyniki w programie Paraview.