Transcript OpenFOAM

Учебный курс по открытым
пакетам
М.Крапошин, О. Самоваров,
С.Стрижак
Задачи МСС
Автомобилестроение
Нефтегазовая промышленность
Энергомашиностроение
Гидродинамика судна
Климат контроль
Гидравлика русла
Ядерная энергетика
Биомеханика
Двигателестроение
Космонавтика
Свободное Программное Обеспечение для задач МСС
Основные этапы и модули при решении задач МСС
ОpenFOAM — свободно распространяемое программное обеспечение для
проведения численных расчетов.
OpenFOAM — объектно-ориентированная платформа,
реализованная на языке программирования С++.
ОpenFOAM – перспективное и динамично развивающиеся открытое
программное обеспечение для моделирования задач механики
сплошных сред. В его разработке и развитии принимают участие
десятки организаций и сотни разработчиков по всему миру.
OpenFOAM – обладает большой функциональностью и удовлетворяет
всем основным требованиями, предъявляемым к современному
программному обеспечению для расчета промышленных задач
Разработан в Imperial College of Science. London. UK. 1991-2003
Открытие кода OpenFOAM в 2004 г. на условиях GPL
Входит в состав CAE Linux
Форум на www.cfd-online.com
Всего около 3000 пользователей в мире.
Основные возможности
пакета OpenFoam
• Mетод контрольного объема на базе многогранных ячеек c поддержкой
подвижных сеток;
• URANS/LES/DNS моделирование;
* SIMPLE/PISO/PIMPLE алгоритмы для связи уравнений скорости и давления;
* Несжимаемые/сжимаемые и стационарные/нестационарные потоки ;
* Однофазные, двухфазные и многофазные потоки;
* Лагранжева модель для расчета движения частиц;
* Модели турбулентности: k-e, k-w, k-w SST, SA, LES, DES. Всего 15 моделей;
* Модели теплообмена, испарения, горения, распыливания топлива;
• Различные термо-физические свойства среды, учет реальных свойств газов;
• Сопряженные задачи (жидкость – тело);
• Решение уравнений движения тела с 6 степенями свободы;
• Решение задач динамики разряженного газа;
* Многоблочная сетка и декомпозиция расчетной области (Metis, Scotch);
* Параллельная версия (до 2000 ядер), поддержка версий MPI. ;
* Поддержка структурированной/неструктурированной сетки;
* Импорт сеток из различных коммерческих и открытых пакетов.
OpenFoam. История.
•
Предшественник текущей системы – Коммерческий код FOAM. Продавался в UK
компанией Nabla Ltd
•
Разработчиком указанного пакета являются ученики профессора Imperial College, London
А. Госмена: H. Weller и H. Jasak
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
Литература:
- Госмен А.М. и др. Численные методы исследования течений вязкой жидкости.
М.: Мир., 1972, 323 с.
- Weller, H.G.; Tabor G.; Jasak, H. and Fureby, C.: A Tensorial Approach to CFD using
Object Orientated Techniques, Computers in Physics, 1998 v. 12 n. 6, pp 620 – 631
- Ferziger J.H., Peric M., Computational Methods for Fluid Dynamics. Springer-Verlag,
Berlin et al.: Springer, 2002. – 423p
Дальнейшая разработка компанией OpenCFD, UK http://www.openfoam.com
Компания OpenCFD. Ltd. UK проводит консалтинг и обучение по всему миру
Альтернативная версия “extend”. Разрабатывается научным сообществом.
Конференции пользователей:
1 конференция - Загреб 2006
4 конференция – Монреаль 2009
2 конференция - Загреб 2007
5 конференция– Гетеборг 2010
3 конференция - Милан 2008
6 конференция – Penn State University 2011
Летняя школа для аспирантов в Загребе 2008,2009,2010. Подготовлено около 20
диссертаций. Выполняются магистерские работы.
Open Source Conferences при участии OpenCFD, Ltd - 2007,2008, 2009, 2010
Различные версии OpenFoam
• OpenFoam-1.7 www.openfoam.org. Разработчик OpenCFD Ltd.
• OpeFoam-1.7.x – исправленная версия с патчами.
www.openfoam.org. Разработчик OpenCFD Ltd.
• http://Git – git.or.cz
• OpenFOAM-1.6-dev. Расширенная версия, разрабатывается
H.Jasak. http://openfoam-extend.svn.sourceforge.net/
•
OpenFOAM-1.6-extend. Разрабатывается пользователями.
http://openfoam-extend.svn.sourceforge.net/
OpenFOAM (Field Operation and Manipulation)
Открытое «ядро» и доступность кода
•
Установка на LINUX (RHEL,SUSE,OpenSuse, Dеbian, Ubuntu, CentOS, CAELinux)
•
•
•
Использование возможностей объектно-ориентированного программирования на C++;
В программном коде используется базовая единица: класс.
Основные исследуемые объекты: расчетная область, преобразования в тензорной и линейной
алгебре, решатели, математические операции для УРЧП (дискретизация, дифференцирование,
интегрирование, интерполяция);
Представление уравнений МСС с помощью естественного языка программирования;
Решение уравнений эллиптического, параболического, гиперболического типа;
Разбиение кода на небольшие самостоятельные единицы;
Совместимость с доступными открытыми кодами и компиляторами (gcc,python);
Возможность разработки собственных модулей (граничные условия, библиотеки модели среды,
решатели, утилиты).
Около 1 миллиона строк исходного кода
•
•
•
•
•
•
Инсталляция OpenFoam
$cd OpenFOAM/
$tar xzf OpenFOAM-1.6.General.gtgz
$tar xzf OpenFOAM-1.6.linux64GccDPOpt.gtgz
$tar xzf ThirdParty-1.6.General.gtgz
$tar xzf ThirdParty-1.6.linux64Gcc.gtgz
Настройка окружения:
[user1@WorkStation ~]$ cat .bashrc
# .bashrc
# Source global definitions
if [ -f /etc/bashrc ];
then
. /etc/bashrcfi
# User specific aliases and functions
export FOAM_INST_DIR=/home/user1/OpenFOAM
foamDotFile=$FOAM_INST_DIR/OpenFOAM-1.6/etc/bashrc
if
[ -f $foamDotFile ]; then
. $foamDotFile
fi
Инсталляция OpenFoam
[cfd1@master ~]$ foamInstallationTest
Executing /home/cfd1/OpenFOAM/OpenFOAM-1.6/bin/foamInstallationTest:
Checking basic setup...
------------------------------------------------------------------------------Shell:
bash
Host:
master.bmstu.ru
OS:
Linux version 2.6.18-92.el5xen
------------------------------------------------------------------------------Checking main OpenFOAM env variables...
------------------------------------------------------------------------------Environment_variable Set_to_file_or_directory
Valid
Crit
------------------------------------------------------------------------------$WM_PROJECT_INST_DIR /home/cfd1/OpenFOAM
yes
yes
$WM_PROJECT_USER_DIR /home/cfd1/OpenFOAM/cfd1-1.6
no
no
$WM_THIRD_PARTY_DIR /home/cfd1/OpenFOAM/ThirdParty-1.6
yes
yes
------------------------------------------------------------------------------Checking the OpenFOAM env variables set on the PATH...
------------------------------------------------------------------------------Environment_variable Set_to_file_or_directory
Valid Path Crit
------------------------------------------------------------------------------$WM_PROJECT_DIR
/home/cfd1/OpenFOAM/OpenFOAM-1.6
yes yes yes
$FOAM_APPBIN
...1.6/applications/bin/linux64GccDPOpt yes yes yes
$FOAM_SITE_APPBIN ...penFOAM/site/1.6/bin/linux64GccDPOpt no
no
$FOAM_USER_APPBIN ...1.6/applications/bin/linux64GccDPOpt no
no
$WM_DIR
/home/cfd1/OpenFOAM/OpenFOAM-1.6/wmake yes yes yes
-------------------------------------------------------------------------------
Структура OpenFOAM
*
*
*
*
*
*
*
*
applications: исходные и исполняемые файлы
- Solvers
- Utilities
- Bin
- Test
bin: базовые исполняемые скрипты
doc: pdf и Doxygen файлы
- Doxygen
- Guides-a4
lib: откомпилированные библиотеки
src – исходные файлы
test – тестовые файлы
tutorials – примеры
Wmakes – утилиты для компиляции
Некоторые стандартные решатели в OpenFOAM
1) boundaryFoam – 1D решатель для создания пограничного слоя
2) icoFoam – решатель для несжимаемого, ламинарного потока
3) laplacianFoam – решение уравнение Лапласа
4) rhoCentralFoam - решатель для невязкого сжимаемого потока centralupwind schemes of Kurganov and Tadmor
5) simpleFoam - решатель для стационарного несжимаемого, турбулентного
потока. Алгоритм SIMPLE.
6) pisoFoam – решатель для нестационарного несжимаемого турбулентного
потока. Алгоритм PISO.
7) sonicFoam - решатель для нестационарного сжимаемого турбулентного
потока.
8) buoyantSimpleFoam – решатель для моделирования конвективных потоков
9) fireFoam – решатель для моделирования турбулентного пламени
10) dsmcFoam DSMC= Direct Simulation Monte-Carlo – решатель для
моделирования динамики разряженного газа
11) channelFoam – LES solver for channel only
12) dnsFoam – прямое численное моделирование изотропной турбулентности
Некоторые стандартные решатели в OpenFOAM
13) pimpleFoam - Large time-step transient solver for incompressible, flow using the
PIMPLE (merged PISO-SIMPLE) algorithm
14) pimpleDymFoam - Transient solver for incompressible, flow of Newtonian fluids on
a moving mesh using the PIMPLE (merged PISO-SIMPLE) algorithm
15) nonNewtonianicoFoam – icoFaom для неньютоновсих жидкостей
16) MRFsimpleFOAM – решатель для вращающихся сеток
17) rhopisoFoam – Transient PISO solver for compressible, laminar or turbulent flow
18) rhopimpleFoam - Transient solver for laminar or turbulent flow of c ompressible fluids
for HVAC and similar applications
19) rhosimpleFoam - Steady-state SIMPLE solver for laminar or turbulent RANS flow of
compressible fluids
20) rhoSonicFoam - Density-based compressible flow solver
21) sonicDymSonic - Transient solver for trans-sonic/supersonic, laminar or
turbulent flow of a compressible gas with mesh motion
23) rhoPoroussimpleFoam - Steady-state solver for turbulent flow of compressible fluids
with RANS turbulence modelling, and implicit or explicit porosity treatment
24) rhoReactingFoam - Density-based thermodynamics variant of the reactingFoam
solver
Схемы дискретизации в OpenFOAM
•
Дискретизация конвективных членов:
Центральные схемы:
- Linear – central differencing (CD) ( Second order, unbounded )
Midpoint
Схемы по потоку:
Upwind differencing (UD) ( First order, bounded )
LinearUpwind
skewLinear
QUICK ( First/second order, bounded )
•
Схемы дискретизации по времени:
-
Эйлера ( 1и 2 порядок);
Кранка-Никольсона (2 порядок);
Обратная (backward);
Ограниченная обратная
Схемы дискретизации
диффузионных членов:
Схемы минимизации полной вариации - TVD:
-
LimitedLinear
vanLear
MUSCL
limitedCubic
Схемы нормализации переменных
(NVD – normalized variable diagram)
SFCD (self-filtered central differencing )
( Second order, bounded )
-
Gamma & GammaV (Схемы H.Jasak)
( First/second order, bounded )
-
Gauss linear – 2 порядок
Gauss limited linear
leastSquares
Fourth – 4 порядок
Более 50 различных комбинаций
расчетных схем
Схемы дискретизации для неструктурированных сеток
- Центральная схема. Второй порядок точности, но дает осцилляции
- Схемы высокого порядка, учитывающие транспортные свойства течения
Информация поступает из области вверх по потоку. Отсутствие осцилляций.
Но могут быть привнесены неточности расчета.
- Существует большое количество точных схем: TVD, NVD семейство.
Схема Gamma
 f      f CD  1       f UD  egamma
0      1
Решатели СЛАУ
Для симметричных матриц:
- метод сопряженных градиентов с предобуславливанием типа неполной
факторизации;
- ICCG (метод неполного разложения Холецкого);
- метод сопряженных градиентов с диагональным
предобуславливанием – DCG.
- алгебраический многосеточный метод – GAMG (для p).
Для несимметричных матриц:
- метод био-сопряженных градиентов с предобуславливанием - ICCG
(метод неполного разложения Холецкого);
- метод Гаусса-Зейделя.
Описание метода сопряжённых градиентов
Постановка задачи
Будем строить следующий вычислительный
алгоритм МСГ:
r 0  f  Ax0
Решение систем линейных алгебраических уравнений
– классическая задача вычислительных методов.
Особый интерес представляют матрицы разреженного
вида, которые получаются в результате конечноразностной,конечно-элементной или конечнообъемной аппроксимации.
Такие матрицы приходится хранить в каком-то особом
формате, так как даже при аппроксимации небольших
задач размерность матрицы системы становится
непосильной задачей для современных параллельных
компьютеров.
В рамках работы остановимся на решении СЛАУ
итерационными методами, где основной операцией
является умножение матрицы на вектор.
В качестве метода решения рассмотрим метод
сопряжённых градиентов с диагональным
предобуславливанием для ускорения сходимости
системы уравнений.
В качестве аппроксимации будем рассматривать
метод конечных объемов.
z 0  d 1r 0
Далее для k=1,2,… производятся следующие
вычисления:
d r

 Az
1 k 1
k
k 1
, r k 1 
, z k 1 
xk  xk 1  k z k 1
r k  r k 1  k Az k 1
k 
d
d
r , rk 
1 k
1 k 1
r
, r k 1 
z k  d 1r k  k z k 1
Выход из итерационного процесса будем осуществлять по
достижении большого количества итераций или по
достижению малости относительной невязки:
r
f

Основные утилиты
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
foamInstallationTest – проверка инсталляции OF
checkMesh -allTopology –all Geometry – проверка сетки
mirrorMesh – построение зеркальной сетки
makeAxialMesh -axis ... -wedge ... foamLog log – скрипт, использующий grep, awk , sed, для извлечения данных из log
файла.
foamJob <solver> - утилита для контроля заданий
yPlusRAS/yPlusLES – определение значения yPlus для RANS/ LES
foamCalc – расчет различных параметров поля
Mach – расчет локального числа Маха в каждый момент времени
streamFunction – расcчитывает линии тока по значениям U
particleTracks - generate particle tracks for lagrangian calculations.
decomposePar – декомпозиция расчетной области
reconstructPar – объединение расчетных областей
fluentMeshToFoam, fluent3DMeshToFoam – трансляция сетки из формата Fluent
Sample – построение графиков
Gnuplot – построение графиков с помощью доп. утилиты Linux
foamToVTK – подготовка файлов для обработки в Paraview в формате VTK
pyFoam – построение графиков во время счета. Утилита написана на Python.
polyDualMesh – утилита для построения сеток на базе многогранников
Примеры граничных условий
Название ГУ
Описание
Граничные условия, дочерние (derived) по отношению к смешанному
fixedValue
ГУ 1-го рода. Необходимо задать фиксированное значение на входе. Условие Дирихле.
fixedGradient
ГУ 2-го рода. Необходимо задать градиент величины на границе.
zeroGradient
ГУ 2-го рода. Нулевой градиент на границе. Условие Неймана.
inletOutlet
действует как ГУ 1-ого рода, если массовый (объемный) поток входит в расчетную
область и как ГУ 2-ого рода, если поток выходит из расчетной области.
Иными словами, zeroGradient если жидкость выходит из расчетной области и
фиксированное значение (inletValue) если входит
outletInlet
обратно inletOutlet
Иными словами, zeroGradient если жидкость входит в расчетную область и
фиксированное значение (outletValue) если выходит из нее
Mixed, symmentry plane,
periodic and cyclic
Смешанное условие, условие симметрии, переодическое и циклическое условие
freestream,
frestreamPressure
Условие свободного потока
Примеры граничных условий
Название ГУ
Описание
Граничные условия, дочерние (derived) по отношению к смешанному
rotation
ГУ 1-го рода. Необходимо задать значение вращения, данные вокруг оси. Условие
Дирихле.
profile1DfixedValue
ГУ 1-го рода. Необходимо задать файл с данными. Можно использовать для закрутки.
activeBaffleVelocity
Combines cyclic and wall patches so that the flow throught the patch can be controlled
buoyantPressureFvPatch
ScalarField
New Buoyancy pressure boundary condition now supports =pd= to =p=
uniformDensityHydrostatic
Pressure
Boundary condition for pressure to aid the transition from = pd= to =p=
jumpCyclic
Cyclic condition with an additional jum in value
fan
Specialisation of jumpCyclic, applying prescibed jump in pressure to simulate a fan within a
mesh
Turbulent flow inlet
Mixing length and frequency
Модели турбулентности для несжимаемых течений
1) kEpsilon
Standard high-
model
2) kOmega
Standard high-
model
-SST model
3) kOmegaSST
4) RNGkEpsilon
RNG
5) NonlinearKEShih
Non-linear Shih
6) LienCubicKE
Lien cubic
7) qZeta
model
model
model
model
8) LaunderSharmaKE
Launder-Sharma low-
model
9) LamBremhorstKE
Lam-Bremhorst low-
10) LienCubicKELowRe
Lien cubic low-
11)LienLeschzinerLowRe
Lien-Leschziner low-
12) LRR
Launder-Reece-Rodi RSTM
model
model
model
13) LaunderGibsonRSTM Launder-Gibson RSTM with wall-reflection terms
14) realizableKE
Realizable
model
15) SpalartAllmaras
Spalart-Allmaras 1-eqn mixing-length model
Модели пристеночных функций
Для различных величин:
–
–
–
–
–
–
nut: nutWallFunction,
mut: muWallFunction,
epsilon: epsilonWallFunction,
omega: omegaWallFunction,
k, q, R: kqRWallFunction.
nut – nutSpalartAllmarasWallFunction.
Для температуры:
– alphat: alphatWallFunction.
Модели турбулентности для LES
1) Smagorinsky
Smagorinsky model
2) Smagorinsky2
Smagorinsky model with 3-D filter
3) dynSmagorinsky
Dynamic Smagorinsky
4) scaleSimilarity
Scale similarity model
5) mixedSmagorinsky
Mixed Smagorinsky/scale similarity model
6) dynMixedSmagorinsky
Dynamic mixed Smagorinsky/scale similarity model
7) kOmegaSST
8) oneEqEddy
-SST scale adaptive simulation (SAS) model
-equation eddy-viscosity model
9) dynOneEqEddy
Dynamic
-equation eddy-viscosity model
10) locDynOneEqEddy
Localised dynamic
11) spectEddyVisc
Spectral eddy viscosity model
12) LRDDiffStress
LRR differential stress model
13) DeardorffDiffStress
Deardorff differential stress model
14) SpalartAllmaras
Spalart-Allmaras model
15) SpalartAllmarasDDES
Spalart-Allmaras delayed detached eddy simulation (DDES) model
16) SpalartAllmarasIDDES
Spalart-Allmaras improved DDES (IDDES) model
-equation eddy-viscosity model
LES параметры
LES deltas
PrandtlDelta
Prandtl delta
cubeRootVol
Delta
Cube root of cell
volume delta
smoothDelta
Smoothing of delta
LES filters
laplaceFilter
Laplace filters
simpleFilter
Simple filter
anisotropicFilter
Anisotropic
filter
Различные граничные условия для входа потока:
Random fluctuations
Литература. Волков К.Н., Емельянов В.Н.. Моделирование крупных вихрей в расчетах
турбулентных течений. – М.: Физматлит. 2008. – 368 с.
RAS turbulence models for compressible fluids
•
•
•
•
•
•
•
•
•
laminar Dummy turbulence model for laminar flow
kEpsilon Standard model
kOmegaSST model
RNGkEpsilon RNG model
LaunderSharmaKE Launder-Sharma low- model
LRR Launder-Reece-Rodi RSTM
LaunderGibsonRSTM Launder-Gibson RSTM
realizableKE Realizable model
SpalartAllmaras Spalart-Allmaras 1-eqn mixing-length
model
Размерность физических величин
No.
Характеристика
Единица измерения
Символ
1
Масса
килограмм
Кг
2
Длина
Метр
М
3
Время
секунда
С
4
Температура
Кельвин
К
5
Количество вещества
моль
Моль
6
Ток
Ампер
A
7
Сила света
кандела
Кд
Утилиты для работкой с сеткой
blockMesh
- A multi-block mesh generator
extrude2DMesh
- Takes 2D mesh (all faces 2 points only, no front and back faces) and creates a 3D mesh by
extruding with specified thickness
Extrude
Mesh
- Extrude mesh from existing patch (by default outwards facing normals; optional flips faces)
or from patch read from file
snappyHex
Mesh
-
Automatic split hex mesher. Refines and snaps to surface
Трансляторы результатов расчета
foamDataToFluent
Translates OPENFOAM®data to Fluent format
foamToEnsight
Translates OPENFOAM®data to EnSight format
foamToEnsightParts
Translates OPENFOAM®data to Ensight format. An Ensight part is
created for each cellZone and patch
foamToFieldview9
Write out the OPENFOAM®mesh in Version 3.0 Fieldview-UNS format
(binary)
foamToGMV
Translates foam output to GMV readable files
foamToVTK
Legacy VTK file format writer
foamToTecplot
Translates OPENFOAM®data to Tecplot format
Пример структуры директории задачи
Основные уравнения
• Основные уравнения: законы сохранения массы, импульса,
скаляров и объема в интегральной форме (справедливы для
любой сплошной среды – различаются только замыкающие
законы):
Метод контрольного объема в OpenFOAM
Метод конечных объемов, I
•
Метод конечных объемов (FVM) используется для аппроксимации
законов сохранения
•
Вычислительная область разбивается на конечное число
непересекающихся контрольных объемов произвольной
многогранной формы
•
Структура данных:
– Вершины
– Ребра (соединяют вершины)
– Грани (замкнутый многоугольник из ребер)
– Ячейки (объемы ограниченные гранями)
Метод конечных объемов, II
• В методе конечных объемов используется три уровня
аппроксимации:
– Аппроксимация интегралов по поверхности, объему и
времени
– Интерполяция в точках, отличных от расчетных (центры
ячеек)
– Численное дифференцирование (аппроксимация
градиентов)
• Простейшие аппроксимации второго порядка точности
(применимые для контрольного объема произвольной
формы):
– Метод средней точки для интегралов (Midpoint rule),
– Линейная интерполяция,
– Центральные разности (линейные функции формы).
Метод решения
•
Конвективные потоки требуют линеаризации:
•
Отложенная коррекция (“deferred correction”) используется для
упрощения применения схем высокого порядка, для неортогональных
сеток и т.д.
•
Градиенты аппроксимируются с помощью формулы ГауссаОстроградского или с помощью полиномов
Метод решения
• Для каждой ячейки получается одно алгебраическое уравнение,
связывающее значение переменной в центре ячейки с
переменными в соседних ячейках
• Для всей вычислительной области получается система линейных
уравнений
• Используется связанный (“coupled”; все переменные образуют
один вектор неизвестных) или последовательный (“segregated”;
уравнения для каждой переменной решаются по очереди) метод
решения
• В последовательном методе решения для связи скорости,
давления и плотности используются алгоритмы PISO или SIMPLE
• Системы линейных уравнений решаются либо методом
сопряженных градиентов, либо алгебраическим многосеточным
методом
МКО. Многогранники
МКО. Основы метода. Расчетная ячейка
• Объем ячейки – Vp
• Узел P располагается в центре ячейки xp
• Для каждой ячейки существует ячейка-сосед, граничащая с каждой
стороной. Соседняя ячейка – N
• Центр стороны – f. Используется теорема о среднем
• Вектор к стороне f определяется как Df=PN
• Поверхностный вектор Sf равен величине площади стороны
• Sf рассчитывается с помощью интеграла
• Центр ячейки (узел P) должен находится внутри ячейки
• Объем ячейки и площадь стороны рассчитываются путем
декомпозиции на пирамиды и треугольники
• Типы сторон в сетке: внутренние и граничные
• Дискретизация базируется на интегральной форме транспортного
уравнения для каждой ячейки
Литература. Патанкар С. Численные методы решения задач теплообмена и
динамики жидкости. М., Энергоатомиздат, 1984, 152 с.
МКО. Основы метода.
•
•
•
•
•
•
•
Операции с поверхностными и векторными интегралы
Выбор P и f обеспечивает второй порядок точности
Дискретизация второго порядка для переменной Ф по пространству
Дискретизация второго порядка для переменной Ф по времени
Наличие специальной функции для FVM “shape function”
Поддержка многогранных ячеек
Нет спецификации на тип ячеек (тетраэдры, призмы, пятигранники и
т.д. )
• Использование теоремы Гаусса для аппроксимации объемных
интегралов над дивергенцией и градиент операторами.
• Дискретизация производной по времени, конвективного члена,
оператора градиент, диффузионного члена, источникового члена
Литература Ferziger J.H., Peric M., Computational Methods for Fluid Dynamics.
Springer-Verlag, Berlin et al.: Springer, 2002. – 423p
Основы МКО
• Как структура сетки влияет на алгоритм?
• Фf зависит от значений в узлах P, N. Расчет
поверхностного интеграла?
• Структурированная сетка: Восток, Запад, Север,
Юг. Нумерация индексов: n+1, n-1, n+colDim, ncolDim
• Блочно-структурированная и адаптивная сетки : 2
опции
• Сетка на базе тетраэдров: для каждого тетраэдра
сохранить 4 индекса соседних ячеек для 4 сторон
в нужном порядке
• Неструктурированная сетка: забыть о блоках, для
каждой ячейки хранить индексы соседних ячеек
• Смешанная сетка: тетраэдры имеют только 4
соседа, “кирпич” имеет шесть. 2 опции.
• Сетка на базе многогранников:
МКО. Основы метода.
• Процедура интерполяции для получения значения Фf для
конвективного слагаемого
• Фf зависит от двух узлов: P и N. Решение в узле P зависит от N, и
наоборот. Мы получаем матрицу с недиогональными
коэффициентами
• Центральная схема. Второй порядок точности, но осцилляции
• Схемы высокого порядка, учитывающие транспортные свойства
течения. Информация поступает из области вверх по потоку.
Отсутствие осцилляций. Но могут быть привнесены неточности
расчета
• Существует большое количество точных схем: TVD, NVD семейство.
Реализация слагаемых для ДУ
Различные операторы
Основные классы в OpenFoam
•
•
•
•
•
•
•
•
•
•
Классы для тензорного исчисления : scalarField, vectorField, tensorField.
Класс – space & time
Классы для геометрических тензорных полей: volScalarField, volVectorField,
volTensorField.
Класс tensor-derivative: finiteVolumeCalculus (fvc) - дифференцирование,
finiteVolumeMethod (fvm)- дискретизация.
Классы для дифференциальных уравнений: fvMatrixScalar, fvMatrixVector
Класс для геометрических полей:
fvMesh – поддерживает FVM дискретизацию, polyMesh – многогранные
сетки (комбинация всех точек, сторон, ячеек, граничных сторон);
dynamicFvMesh , dynamicMotionSolverFvMesh - динамические сетки;
Класс для граничных условий: patchField
Класс для матриц: lduMatrix
Пример класса на C++
class name {
public:
declaration of public member functions and member data
private:
declaration of hidden member functions and member data
};
public признаки видимы снаружи класса
private признаки видимы внутри класса
Пример класса на C++ в OF
class vector
{
// Private Data
// Components
double V[3];
public:
//component labeling enumeration
enum components {X, Y,Z};
// Constructors
//Construct null
vector () {}
// Construct given three scalars
vector (const double & Vx, const double& Vy, const double & Vz)
{
V[X]=Vx ; V[Y]=Vy ; V[Z]=Vz ;
}
//Destructor
~vector [];
Тестовые примеры в OpenFOAM. Обратный уступ.
LES model. 1 equation.
Р.В. Питц, Дж.У. Дейли. Горение в турбулентном слое смешения за уступом.
Аэрокосмическая техника. 1984. N7. с.74-82
Пример pitzDailyParallel
[cfd1@master simpleFoam]$ cd pitzDailyParallel/
[cfd1@master pitzDailyParallel]$ ll
total 12
drwxr-xr-x 2 cfd1 sm3 4096 Dec 22 16:43 0
drwxr-xr-x 3 cfd1 sm3 4096 Dec 22 16:43 constant
drwxr-xr-x 2 cfd1 sm3 4096 Dec 22 16:48 system
[cfd1@master pitzDailyParallel]$
[cfd1@master pitzDailyParallel]$ cd system/
[cfd1@master system]$ ll
total 16
-rw-r----- 1 cfd1 sm3 1222 Dec 22 16:43 controlDict
-rw-r----- 1 cfd1 sm3 1206 Dec 22 16:48 decomposeParDict
-rw-r----- 1 cfd1 sm3 1877 Dec 22 16:43 fvSchemes
-rw-r----- 1 cfd1 sm3 1940 Dec 22 16:43 fvSolution
Подготовка задачи. Требует времени!
[cfd1@master system]$ more controlDict
/*--------------------------------*- C++ -*----------------------------------*\
| =========
|
|
| \\
/ F ield
| OpenFOAM: The Open Source CFD Toolbox
| \\ / O peration | Version: 1.6
|
| \\ / A nd
| Web:
www.OpenFOAM.org
|
| \\/ M anipulation |
|
\*---------------------------------------------------------------------------*/
FoamFile
{
version 2.0;
format
ascii;
class
dictionary;
location "system";
object
controlDict;
}
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
application icoFoam;
startFrom
startTime;
startTime
0;
stopAt
endTime;
endTime
5;
deltaT
0.005;
writeControl timeStep;
writeInterval 100;
purgeWrite
0;
writeFormat ascii;
writePrecision 6;
writeCompression uncompressed;
timeFormat
general;
timePrecision 6;
runTimeModifiable yes;
|
Файл fvSolutions. Выбор решателей для СЛАУ.
|\*---------------------------------------------------------------------------*/
FoamFile{ version 2.0; format
ascii;
class
dictionary;
location "system";
object
fvSolution;}
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
Solvers
p
{
solver
PCG;
preconditioner DIC;
tolerance
1e-06;
relTol
0.01; }
U
{
solver
PBiCG;
preconditioner DILU;
tolerance
1e-05;
relTol
0.1; }
k
{
solver
PBiCG;
preconditioner DILU;
tolerance
1e-05;
relTol
0.1; }
Файл fvSchemes. Определение схем дискретизации.
ddtSchemes
{
default
steadyState;}
gradSchemes
{
default
Gauss linear;
grad(p)
Gauss linear;
grad(U)
Gauss linear;}
divSchemes
{ default
none; div(phi,U)
Gauss upwind; div(phi,k)
Gauss upwind; div(phi,epsilon) Gauss
upwind; div(phi,R)
Gauss upwind; div(R)
Gauss linear; div(phi,nuTilda) Gauss upwind;
div((nuEff*dev(grad(U).T()))) Gauss linear;}
laplacianSchemes
{ default
none; laplacian(nuEff,U) Gauss linear corrected; laplacian((1|A(U)),p) Gauss linear
corrected; laplacian(DkEff,k) Gauss linear corrected; laplacian(DepsilonEff,epsilon) Gauss linear corrected;
laplacian(DREff,R) Gauss linear corrected; laplacian(DnuTildaEff,nuTilda) Gauss linear corrected;}
interpolationSchemes
{
default
linear;
snGradSchemes {
fluxRequired
{
interpolate(U) linear;}
default
default
corrected;}
no;
p
;}
[user1@SM3 forwardStep]$ foamLog log
Using:
log
: log
database : /home/user1/OpenFOAM/OpenFOAM-1.6/bin/foamLog.db
awk file : ./logs/foamLog.awk
files to : ./logsExecuting: awk -f ./logs/foamLog.awk log
Generated XY files for:
executionTime
Rho
rhoE
rhoE
FinalRes
rhoEIters
rhoFinalResrhoIters
rhoUx
rhoUx
FinalRes
rhoUx
Iters
rhoUy
rhoUy
FinalRes
rhoUy
ItersSeparator
Time
Утилита checkMesh
Create time
Create polyMesh for time = 0
Time = 0
Mesh stats
points:
62054
faces:
672802
internal faces: 649206
cells:
330502
boundary patches: 3
point zones:
0
face zones:
1
cell zones:
1
Overall number of cells of each type:
hexahedra: 0
prisms:
0
wedges:
0
pyramids:
0
tet wedges: 0
tetrahedra: 330502
polyhedra: 0
Checking topology...
Boundary definition OK.
Point usage OK.
Upper triangular ordering OK. Face vertices OK.
Number of regions: 1 (OK).
Утилита checkMesh
Checking patch topology for multiply connected surfaces ...
Patch
Faces Points Surface topology
inlet
412
232
ok (non-closed singly connected)
outlet
5736 2894 ok (non-closed singly connected)
SOL
17448 8726 ok (closed singly connected)
Checking geometry...
Overall domain bounding box (-2 -0.679981 -0.679997) (2 0.68 0.68)
Mesh (non-empty, non-wedge) directions (1 1 1)
Mesh (non-empty) directions (1 1 1)
Boundary openness (-2.18538e-19 4.49199e-19 -2.47128e-19) OK.
Max cell openness = 1.65939e-16 OK.
Max aspect ratio = 11.0456 OK.
Minumum face area = 1.26182e-07.
Maximum face area = 0.00694694.
Face area magnitudes OK.
Min volume = 5.42529e-11.
Max volume = 0.000201659. Total volume = 5.79848.
Cell volumes OK.
Mesh non-orthogonality Max: 61.0149 average: 13.3286
Non-orthogonality check OK.
Face pyramids OK.
Max skewness = 0.913121 OK.
Mesh OK.
End
Невязки
Time = 0.2
Courant Number mean: 0.100721 max: 13.8157
DILUPBiCG: Solving for Ux, Initial residual = 2.46858e-06, Final residual = 2.46858e-06, No
Iterations 0
DILUPBiCG: Solving for Uy, Initial residual = 0.000207349, Final residual = 1.28247e-05, No
Iterations 1
DILUPBiCG: Solving for Uz, Initial residual = 0.000175251, Final residual = 1.0187e-05, No
Iterations 1
DICPCG: Solving for p, Initial residual = 0.00113702, Final residual = 1.11777e-05, No Iterations
25time step continuity errors : sum local = 8.16859e-09, global = -2.35699e-11, cumulative =
1.34233e-06
DICPCG: Solving for p, Initial residual = 0.000384734, Final residual = 9.696e-07, No Iterations
56time step continuity errors : sum local = 7.08705e-10, global = -5.94421e-11, cumulative =
1.34227e-06
DILUPBiCG: Solving for omega, Initial residual = 9.80641e-06, Final residual = 9.80641e-06, No
Iterations 0
DILUPBiCG: Solving for k, Initial residual = 2.54185e-05, Final residual = 6.81117e-07, No
Iterations 1
bounding k, min: -3.21164 max: 256.226 average: 5.59675
ExecutionTime = 11256.6 s ClockTime = 11294 sEnd
Gnuplot. Скрипты.
set logscale y
set title "Residuals“
set ylabel 'Residual‘
set xlabel 'Iteration‘
plot "< cat log | grep 'Solving for Ux' | cut -d'
' -f9 | tr -d ','" title 'Ux'
with lines,\
"< cat log | grep 'Solving for Uy' | cut -d' ' -f9
| tr -d ','" title 'Uy'
with lines,\
"< cat log | grep 'Solving for Uz' | cut -d' ' -f9
| tr -d ','" title 'Uz'
with lines,\
"< cat log | grep 'Solving for omega' | cut -d'
' -f9 | tr -d ','" title 'omega'
with lines,\
"< cat log | grep 'Solving for k' | cut -d' ' -f9 |
tr -d ','" title 'k'
with lines,\
"< cat log | grep 'Solving for p' | cut -d' ' -f9 |
tr -d ','" title 'p' with lines
pause 1
reread
set yr [0:1]
set xr [0:0.01]
set key bottom right
set xlabel "Simulationtime [s]“
set ylabel "forceCoeff [-]“
set title "Plot of forceCoeffs over
simulationtime“
set gridplot
"./forceCoeffs/0.0005/forceCoeffs.
dat" using ($1):($3) with lines title
"lift_coeff",\
"./forceCoeffs/0.0005/forceCoeffs.
dat" using ($1):($2) with lines title
"drag_coeff“
pause 1
reread
Построение графиков с помощью gnuplot
Расчет выполнен с pisoFoam, SA модель турбулентности
Невязки для Ux,Uy,Uz, p, nuTilda
Утилита ‘yPlusRAS’
Time = 0.2
Reading field U
Reading/calculating face flux field phi
Selecting incompressible transport model
Newtonian
Selecting RAS turbulence model kOmegaSST
kOmegaSSTCoeffs
{
alphaK1
0.85034;
alphaK2
1;
alphaOmega1 0.5;
alphaOmega2 0.85616;
gamma1
0.5532;
gamma2
0.4403;
beta1
0.075;
beta2
0.0828;
betaStar
0.09;
a1
0.31;
c1
10;
}
Patch 2 named SOL y+ : min: 0.282185 max:
200.545 average: 19.758
Writing yPlus to field yPlus
End
Запуск задач pitzDaily
счет в параллельном режиме
- Копирование примера и файла
$cp –r pitzDaily $FOAM_RUN/pitzDailyParallel
$cp pitzDailyExptInlet/system/decomposePartDict pitzDailyParallel/system
-
Настройка файла system/decomposeParDict
Выбор метода декомпозиции области
Сформировать файл ‘machines’
Использовать утилиты decomposePar, reconstructPar
$ decomposePar
[cfd1@master cavityParallel]$ more machines
n3 cpu=8
n4 cpu=8
$ mpirun --hostfile machines -np 16 icoFoam -parallel > log &
$ reconstructPar
на
Декомпозиция расчетной области. Выбор модели.
[cfd1@master system]$ more decomposeParDict
/*--------------------------------*- C++ -*----------------------------------*\
| =========
|
|
| \\
/ F ield
| OpenFOAM: The Open Source CFD Toolbox
| \\ / O peration | Version: 1.6
|
| \\ / A nd
| Web:
www.OpenFOAM.org
|
| \\/ M anipulation |
|
\*---------------------------------------------------------------------------*/
FoamFile
{
version 2.0;
format
ascii;
class
dictionary;
location "system";
object
decomposeParDict;
}
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
numberOfSubdomains 4;
method
hierarchical;
simpleCoeffs
{
n
( 2 1 1 );
delta
0.001;
}
hierarchicalCoeffs
{
n
( 2 2 1 );
delta
0.001;
order
xyz;
}
metisCoeffs
{
}
manualCoeffs
{
dataFile
"";
}
distributed no;
roots
( );
// ************************************************************************* //
|