- EN: This page is not translated to English.
Uruchamianie
ANSYS Fluent może być wykonywany zarówno w trybie wsadowym jak i interakcyjnie.
Praca w trybie wsadowym wymaga wcześniejszego przygotowania pliku zawierającego dane opisujące model oraz poleceń sterujących wykonaniem programu.
Taki plik jest następnie wykorzystany jako plik wejściowy dla przebiegu.
Najczęściej tryb interakcyjny stosuje się na etapie definiowania modelu, wykonywania początkowych obliczeń oraz postprocessingu.
Tryb wsadowy natomiast jest bardzo przydatny podczas wykonywania dużej liczby obliczeń iteracyjnych.
Działanie programu ANSYS Fluent rozpoczyna się poleceniem fluent
uzupełnionym o listę argumentów.
ANSYS Fluent może działać w wersji pojedynczej precyzji oraz w podwójnej precyzji. W większości przypadków, solver działający w pojedynczej precyzji daje wystarczająco dokładne wyniki. Rozpoczynając działanie Fluenta w wierszu poleceń można wskazać zarówno precyzję, z jaką będą wykonywane obliczenia, jak i wymiar przestrzenny modelu (2D lub 3D). W szczególności:
fluent 2d
uruchamia solver dwuwymiarowy i działający w pojedynczej precyzji.fluent 3d
uruchamia solver trójwymiarowy, działający w pojedynczej precyzji.fluent 2ddp
uruchamia solver dwuwymiarowy, działający w podwójnej precyzji.fluent 3ddp
uruchamia solver trójwymiarowy, działający w podwójnej precyzji.
Uruchamianie obliczeń w trybie tekstowym
Tekstowy system menu jest interfejsem hierarchicznym. Struktura systemu menu jest podobna do struktury katalogowej na dysku. W chwili rozpoczęcia działania programu użytkownik znajduje się na poziomie najwyższym. Ponieważ bazuje się tylko na tekście, łatwo jest wpływać na działanie programu za pomocą standardowych narzędzi przeznaczonych do działania na tekstach. W szczególności to co zostało wprowadzone może być zapisane do pliku, zmodyfikowane za pomocą edytora, a następnie ponownie wczytane i wykonane. Aby wyświetlić spis poleceń dostępnych na bieżącym poziomie, należy nacisnąć na Enter. Nazwy kolejnych poziomów menu, w odróżnieniu od nazw poleceń, są zakończone znakiem /.
Sposób uruchomienia Fluenta w trybie tekstowym zależy od systemu operacyjnego. Poniżej podany jest sposób odpowiedni dla komputerów pracujących w systemie Linux. Aby uruchomić program należy wprowadzić polecenie:
fluent inne_opcje -g -i inputfile > outputfile
Znaczenie kolejnych elementów polecenia:
-g
wskazuje, że program ma być uruchomiony z pominięciem graficznego interfejsu użytkownika;-i
poprzedza nazwę pliku sterującego wykonywaniem zadania we Fluencie;inputfile
jest nazwą pliku, w którym znajdują się polecenia sterujące. Są to odpowiedniki poleceń, jakie można wprowadzać podczas pracy w trybie interaktywnym;outputfile
jest plikiem, w którym zostanie umieszczone to, co pojawiłoby się na konsoli podczas pracy w trybie interakcyjnym (komunikaty, raporty o residuach, itd);inne_opcje
oznacza inne opcje wywołania Fluenta, w szczególności zdefiniowanie wymiaru zadania (2d, 3d), podwójnej precyzji obliczeń (2ddp, 3ddp) oraz ustawienia niezbędne podczas obliczeń wykorzystujących większą liczbę procesów.
Plik inputfile
W przypadku programu Fluent dobrym rozwiązaniem jest skorzystanie z kombinacji plików .cas oraz tekstowego pliku wejściowego, poniżej oznaczanego nazwą inputfile. W pliku .cas znajduje się opis modelu (siatka obliczeniowa, definicje parametrów, warunki brzegowe, itd.) i plik ten najczęściej tworzy się korzystając z interfejsu graficznego. Natomiast w pliku inputfile umieszcza sie dodatkowe polecenia sterujące realizacją obliczeń.
Plik inputfile może być plikiem typu journal utworzonym podczas wcześniejszych sesji Fluenta, lub też plikiem utworzonym za pomocą edytora tekstowego. W każdym przypadku plik ten może zawierać tylko polecenia interfejsu tekstowego.
rc example.cas # wczytanie pliku zawierającego definicję zadania (geometria, warunki brzegowe, inne ustawienia, itd)
solve/init/init # inicjalizacja solvera
it 50 # wykonanie 50 iteracji
wd example50.dat # zapisanie wyników do pliku example50.dat
it 50 # wykonanie kolejnych 50 iteracji
wd example100.dat # zapisanie wyników do pliku example100.dat
exit
W powyższym pliku wykorzystano standardowe aliasy: it jest aliasem dla sekwencji poleceń solve/iterate, rc jest aliasem polecenia file/read-case, wd jest aliasem równoważnym file/write-data, itd.
W ogólnym przypadku w pliku inputfile można umieścić znacznie więcej poleceń. Kolejny przykład dotyczy zagadnienia ewolucyjnego:
read-case example.cas # wczytanie pliku zawierającego opis zadania (tu: example.cas);
solve/init/init # inicjalizacja solvera
solve/set/time-step
0.001 # zdefiniowanie długości kroku czasowego (0.001 s)
solve/dual-time-iterate
10 # wykonanie obliczeń dla 10 kroków czasowych
500 # w każdym kroku wykona się maksymalnie 500 iteracji
write-data Model.dat # zapisanie wyników do pliku
exit # zakończenie działania programu
yes
Ostatnia linia w przykładzie (yes) jest niezbędna, bowiem przed zakończeniem działania Fluent wyświetla komunikat:
The current case and data have not been saved. Ok to discard?
Przykład skryptu kolejkowego
Zadania obliczeniowe na komputerach w ICM są uruchamiane za pośrednictwem systemu kolejkowego SLURM. Pliki wsadowe należy rozpakować w folderze w którym znajduje się poniższy skrypt kolejkowy.
Okeanos
#!/bin/bash -l
#SBATCH -J __JOBNAME__
#SBATCH -N __NUMBER_OF_NODES__ # wedle potrzeb
#SBATCH --ntasks-per-node 24 # liczba procesow MPI per wezel=24 (czyli 2 procesory po 12 rdzeni)
#SBATCH -A __ACCOUNT_NAME_GXXX__
#SBATCH -p okeanos
#SBATCH --hint=nomultithread
#SBATCH --mem=32gb
APP_VERSION="22.1"
module load apps/fluent/$APP_VERSION
LOG_FILE="fluent_log-${SLURM_JOB_ID}.out"
echo "the LOG_FILE is ${LOG_FILE}"
fluent -g 2ddp -mpi=cray -t$SLURM_NTASKS -i ./fluent/test.journal > ${LOG_FILE}
echo "The job ran for: `sacct -j $SLURM_JOB_ID -o Elapsed | sed -n '3p'`"
echo "Core-hours used : `sacct -j $SLURM_JOB_ID -o UserCPU | sed -n '3p'`"
echo "Job id: ${SLURM_JOB_ID}, SLURM_NTASKS_PER_NODE: ${SLURM_NTASKS_PER_NODE}, SLURM_NNODES: ${SLURM_NNODES}"
Topola
#!/bin/bash -l
#SBATCH -J __JOBNAME__
#SBATCH -N __NUMBER_OF_NODES__
#SBATCH --ntasks-per-node 28
#SBATCH -A __ACCOUNT_NAME_GXXX__
#SBATCH -p topola
#SBATCH --hint=nomultithread
#SBATCH --mem=32gb
APP_VERSION="22.1"
module load apps/fluent/$APP_VERSION
LOG_FILE="fluent_log-${SLURM_JOB_ID}.out"
echo "the LOG_FILE is ${LOG_FILE}"
fluent -g 2ddp -mpi=intel -pinfiniband -t$SLURM_NTASKS -i ./fluent/test.journal > ${LOG_FILE}
echo "The job ran for: `sacct -j $SLURM_JOB_ID -o Elapsed | sed -n '3p'`"
echo "Core-hours used : `sacct -j $SLURM_JOB_ID -o UserCPU | sed -n '3p'`"
echo "Job id: ${SLURM_JOB_ID}, SLURM_NTASKS_PER_NODE: ${SLURM_NTASKS_PER_NODE}, SLURM_NNODES: ${SLURM_NNODES}"
Uwagi
Zadanie należy zlecić wykonując komendę sbatch job.sl
.
Operacyjność aplikacji zainstalowanych na komputerach ICM można sprawdzić na stronie CI.
-g
oznacza wyłączenie trybu graficznego.-i inputfile
wskazuje ścieżkę do pliku wsadowego.-pinfiniband
oznacza wykorzystanie komunikacji pomiędzy węzłami poprzez infiniband.- Operacyjność aplikacji zainstalowanych na komputerach ICM można sprawdzić tu.
Z podanych wartości wynika, że na jeden węzeł przypadają 24/28 procesy.
Wartość ta związana jest z ilością rdzeni (CPU) dostępnych na węźle obliczeniowym.
Ustawiając --ntasks-per-node=NUMBER_OF_PHYSICAL_CPU_PER_NODE (patrz przyklad topola/okeanos)
oraz --hint=nomultithread
przypisujemy jeden rdzeń per wątek (1 thread per cpu), czyli nie korzystami z technologii
hyperthreading (HT).
Wydajność HT zależy m.in. od proporcji obliczeń / wczytywania danych przez procesor.
W wielu aplikacjach inżynierskich obciążenie procesora jest zdominowane obliczeniami i profit z HT jest niewielki.
W przypadku fluent'a:
<https://storage.ansys.com/corp/2012/April/it/best_practice.pdf> # source
Hyper-Threading can improve performance, but only by a relatively
small amount (about 3% to 8%). It will also consume twice as many
licenses. If ANSYS Fluent customers have a limited number of licenses,
Hyper-Threading is not recommended.