Тестовые скрипты:
Запуск расчетов:
Последняя версия OpenFOAM расположена в /usr/local/OpenFOAM/openfoam
. Последняя версия third party software для OpenFOAM - в /usr/local/OpenFOAM/thirdparty
(в первую очередь стоит упомянуть ParaView). Расчеты могут выполняться как последовательно, так и параллельно (с использованием MPI). Для начала работы с OpenFOAM нужно добавить следующую строчку в файл ~/.bashrc
:
source ~/.bashrc.openfoam
Содержимое файла ~/.bashrc.openfoam
:
export FOAM_INST_DIR=/usr/local/OpenFOAM
source ${FOAM_INST_DIR}/openfoam/etc/bashrc
# For Qt libs
export LD_LIBRARY_PATH=${FOAM_INST_DIR}/qt/lib/:$LD_LIBRARY_PATH
# Use this version of MPI for OpenFOAM
export PATH=${FOAM_INST_DIR}/mpi/bin/:$PATH
# For Intel libraries (compiled with Intel compilers)
source /usr/local/intel/mkl/bin/mklvars.sh intel64
source /usr/local/intel/bin/compilervars.sh intel64
Теперь можно перейти к примеру. Тестовые задачи расположены в папке /usr/local/OpenFOAM/OpenFOAM-2.1.0/tutorials
. Рассмотрим задачу - расчет течения жидкости в каверне. Данные для задачи хранятся в директории /usr/local/OpenFOAM/OpenFOAM-2.1.0/tutorials/incompressible/icoFoam/cavity
. Скопируем данный каталог в директорию ~/examples/openfoam/
для проведения расчетов:
mkdir ~/examples/openfoam/
cp -r /usr/local/OpenFOAM/OpenFOAM-2.1.0/tutorials/incompressible/icoFoam/cavity ~/examples/openfoam/
Теперь перейдем в папку ~/examples/openfoam/cavity/
. До конца этого примера мы будем работать в ней:
cd ~/examples/openfoam/cavity/
Перед расчетом необходимо выполнить команду blockMesh для формирования сетки. Для проверки можно использовать команду checkMesh.
blockMesh
checkMesh
Все. Теперь осталось запустить расчет при помощи команды icoFoam:
icoFoam
На самом деле OpenFOAM содержит множесто программ (solvers) для различных расчетов. Так, в следующем примере мы будем использовать программу pisoFoam. Теперь рассмотрим запуск расчета на кластере. Мы возьмем пример pitzDaily:
cp -r /usr/local/OpenFOAM/OpenFOAM-2.1.0/tutorials/incompressible/pisoFoam/les/pitzDaily/ ~/examples/openfoam/
cd ~/examples/openfoam/pitzDaily/
Запускаем blockMesh для формирования сетки. И снова мы можем проверить результат при помощи команды checkMesh.
blockMesh
checkMesh
Если все получилось удачно (Mesh OK), идем дальше. Теперь нужно произвести декомпозицию задачи. Для этого нам нужно создать файл decomposeParDict
в папке system
(~/examples/openfoam/pitzDaily/system/
). Этот файл содержит сведения о том как именно разбить задачу для параллельного выполнения. Мы возьмем уже существующий файл из примера dambreak:
cp /usr/local/OpenFOAM/OpenFOAM-2.1.0/tutorials/multiphase/interFoam/laminar/damBreak/system/decomposeParDict ~/examples/openfoam/pitzDaily/system/
Теперь запустим собственно разбиение задачи (в данном примере на 4 части):
decomposePar
После этого мы готовы запустить расчет на кластере. Для этого используем скрипты ~/submit-tp
и ~/submit-openfoam.sh
(непосредственно для расчетов используется программа pisoFoam):
~/submit-tp -n 4 -f "~/submit-openfoam.sh ~/examples/openfoam/pitzDaily/ pisoFoam"
Для скрипта ~/submit-openfoam.sh
сначала указывается директория с данными, затем команда (solver) с опциями, которая будет выпонять вычисления. Опцию "-parallel" указывать не нужно - она будет добавлена при запуске расчетов. Указанная команда запустит счет на 4 ядрах. Обратите внимание, что задействованных ядер должно быть ровно числу участков, на которые поделена задача при помощи decomposePar (в нашем случае их 4, это указывается в файле decomposeParDict). Расчет завершится ошибкой, если указать другое число ядер (как меньшее, так и большее). Содержимое ~/submit-openfoam.sh
:
#!/bin/bash
DIRECTORY="$1"
shift
COMMAND_WITH_OPTIONS="$*"
cd $DIRECTORY
NP=`cat $PBS_NODEFILE | wc -l`
time ${FOAM_INST_DIR}/mpi/bin/mpirun --hostfile $PBS_NODEFILE -np $NP $COMMAND_WITH_OPTIONS -parallel
В директории, где запускался скрипт, по окончании вычисления будут располагаться файлы (примерные названия):
[gajduchok@v339 pitzDaily]$ ls -l job*
-rw------- 1 gajduchok users 44 Mar 19 17:00 job.1332161937.e24146
-rw------- 1 gajduchok users 896892 Mar 19 17:00 job.1332161937.o24146
В них содержится стандартный вывод и ошибки (если есть), выданные в процессе вычислений. Результат вычислений будет располагаться в директории ~/examples/openfoam/pitzDaily/
. Обратимся к нему. Сперва необходимо объединить результаты, полученные на отдельных ядрах. Для этого вызовем команду:
reconstructPar
Вот и все. Теперь можно просмотреть результат. Визуализацией занимается программа ParaView. Для ее вызова в OpenFOAM есть стандратный скрипт - paraFoam. Его и вызываем:
paraFoam
Появится окно программы paraView (если вы используете ssh, не забудьте про опцию "-X" при подключении к своей машине для запуска графических приложений: ssh user@hostname -X). Нажмите на кнопку "Apply" во вкладке "Properties" панлеи "Object Inspector" (слева внизу). Затем перейдите во вкладку "Display" той же панели и выберите из списка "Color by" то, что необходимо отображать. Например, "U". Для просмотра движения жидкости в трубе нажмите кнопку "Play". Для перехода к конкретному моменту времени можно воспользоваться панелью "Time" (справа вверху) и задать нужный момент (один из тех, для которых проводился расчет).