Слайд 2Что такое OpenFOAM:
Среда разработки и численного решения задач МСС
Основной язык программирования —
C++
Операционная система — любая POSIX совместимая
Полностью модульная платформа, реализующая метод конечных объёмов для решения дифференциальных уравнений в частных производных
Слайд 4Задачи OpenFOAM:
Гидродинамика ньютоновских и неньютоновских вязких жидкостей как в несжимаемом, так и
сжимаемом приближении с учётом конвективного теплообмена и действием сил гравитации. Для моделирования турбулентных течений возможно использование RANS-моделей, LES- и DNS-методов. Возможно решение дозвуковых, околозвуковых и сверхзвуковых задач;
Задачи теплопроводности в твёрдом теле;
Многофазные задачи, в том числе с описанием химических реакций компонент потока;
Задачи, связанные с деформацией расчётной сетки;
Сопряжённые задачи;
Некоторые другие задачи, при математической постановке которых требуется решение дифференциальных уравнений в частных производных в условиях сложной геометрии среды;
Распараллеливание расчёта как в кластерных, так и многопроцессорных системах.
Слайд 5Достоинства и недостатки:
Помимо основных модулей, существуют специализированные модули:
Несжимаемые течения;
Сжимаемые течения;
Многофазные течения;
Моделирование методом
крупных вихрей и прямое численное моделирование
Горение;
Задачи молекулярной динамики;
Методы частиц в ячейках;
Теплопередача;
Прямое статистическое моделирование;
Электромагнитные поля;
Твердые тела
Финансы
Слайд 6Основные уравнения:
Основные уравнения: законы сохранения массы, импульса, скаляров и объема в
интегральной форме (справедливы для любой сплошной среды – различаются только замыкающие законы):
Слайд 7Метод конечных объемов
Метод конечных объемов (FVM) используется для аппроксимации законов сохранения
Вычислительная
область разбивается на конечное число непересекающихся контрольных объемов произвольной многогранной формы
Структура данных:
Вершины
Ребра (соединяют вершины)
Грани (замкнутый многоугольник из ребер)
Ячейки (объемы ограниченные гранями)
Слайд 8В методе конечных объемов используются три уровня аппроксимации:
Аппроксимация интегралов по поверхности,
объему и времени
Интерполяция в точках, отличных от расчетных (центры контрольных объёмов)
Численное дифференцирование (аппроксимация градиентов)
Простейшие аппроксимации второго порядка точности
Метод средней точки для интегралов (Midpoint rule);
Линейная интерполяция;
Центральные разности (линейные функции формы).
Слайд 9volScalarField phiEqn
(
fvm::ddt(rho,phi)
+
fvm::div(F,phi)
fvm:: laplacian(gamma,phi)
==
Su + fvm::Sp(Sp,phi)
);
F = linearInterpolate(U)& mesh.Sf()
Код OpenFOAM:
Код OpenFOAM
В терминах языка
С++ большинство математических дифференциальных и тензорных операторов в программном коде уравнений может быть представлено в удобочитаемой форме.
Слайд 10Структура и средства OpenFOAM
Иерархия средств OpenFOAM
Одно из преимуществ OpenFOAM — гибкая ориентация
на пользователя:
Продвинутому пользователю и разработчику — средства решения задач механики сплошных сред в виде классов C++.
Инженеру — набор небольших программ (решателей и утилит), предназначенных для решения задач узкого круга (и соответственно, ограниченным набором исходных данных)
Слайд 11Иерархия решателей (моделей МСС) OpenFOAM
Находятся в папке $FOAM_APP/solvers:
DNS - Прямое численное моделирование
Basic
– Простейшие уравнения
Combustion – Задачи с горением
Compressible - Сжимаемые задачи (в т.ч. с M=1 и M>1)
DiscreteMethods – Дискретные методы
Electromagnetics – электромагнетизм
Financial – финансовые
HeatTransfer – Тепло- и массо- обмен
Incompressible – Несжимаемые течения
Lagrangian – Течение жидкости с учетом движения отдельных частиц
Multiphase – Многофазные течения
StressAnalysis – Анализ прочности
Слайд 13Иерархия утилит OpenFOAM
Находятся в папке $FOAM_APP/utilities:
ErrorEstimation – Оценка погрешности численного решения уравнений
Mesh
– утилита для работы с сеткой
PostProcessing - Обработка результатов расчетов
Preprocessing – Подготовка исходных данных
Miscellaneous – Разнообразные утилиты, не отнесенные к другим группам
Surface – Работа с поверхностями сеток
ParallelProcessing – Декомпозиция и сбор расчетной области при параллельных вычислениях
Thermophysical – Расчет термодинамических параметров
Слайд 14Используемые численные методы
Структура OpenFOAM является полностью модульной, каждый этап численного решения базовых
уравнений выносится в отдельный модуль:
Дискретизация расчётной области (создание сетки)
Дискретизация уравнений по времени и пространству
Методы решения систем линейных алгебраических уравнений
Граничные условия (в том числе пристеночные функции)
Модели турбулентности (Reynolds-Averaged Stresses, Large Eddy
Simulation)
Контроль качества сетки
Контроль сходимости решения
Слайд 15Аспекты решения практических задач
Решаемая в OpenFOAM задача обязательно содержит:
Начальные и граничные условия
(каталог 0)
Расчетную сетку и физические свойства (каталог constant)
Параметры интегрирования уравнений (каталог system)
Слайд 16Для исследователя важно:
Правильно задать размерность
Корректно задать граничные условия
Проверить качество сетки
Уметь анализировать процесс
сходимости
Слайд 17При постановке задачи в OpenFOAM используется основная структурная единица — словарь (dictionary).
Словарь
(dictionary) — формализованное описание исходных данных в виде текстового файла состоит из:
Содержимого
Заголовка
Слайд 18Содержимое может включать в себя:
Описание под-словарей (sub-dictionary) — фигурные скобки {}
Списки (именованные
и анонимные) — круглые скобки ()
Ключи — имя и значение переменной
Описание размерности (может входить в состав ключа) — квадратные скобки []
Динамические описания — исходный код на C++, переменные
Комментарии в стиле C++ - //, /* ... */;
Слайд 19Главные элементы заголовка — имя словаря (object), его расположение в иерархии случая
(location) и тип словаря — class.
Слайд 20Основные единицы словаря OpeFOAM
Под-словарь (sub-dictionary) выделяется фигурными скобками, ключ — включает
в себя имя и значение (иногда размерность) и точку с запятой.
Списки перечисляются в круглых скобках, разделителем служит пробел
Слайд 21Основные единицы словаря: размерности OpeFOAM
Размерность указывается в квадратных скобках
Слайд 22Динамические описания OpenFOAM
Можно использовать переменные, которые содержат заданное значение или значение под-словаря
Подключать текстовые файлы
Слайд 23Динамические описания OpenFOAM
Или программировать пользовательские подпрограммы
inlet
{
type codedFixedValue; redirectType
swirl;
code
#{
const vector axis(1, 0, 0); vectorField v = 2.0*this->patch().Cf() ^ axis;
v.replace(vector::X, 1.0); operator==(v);
#};
value $internalField;
}
Слайд 26Связь с другими проектами
SALOME – пакет для работы с геометрией и сетками
Основное
окно (1,центр), дерево объектов (2, слева), окно сообщений системы (3, снизу), меню (4, сверху), панель инструментов (5, между меню и основным окном)
Слайд 27Связь с другими проектами
ParaView – пакет для визуализации результатов и расчетных сеток,
поставляется по умолчанию вместе с OpenFOAM
Слайд 28Ответвления
BlueCFD— кросс-компилированная версия OpenFOAM для запуска на операционных системах Windows, производная от
OpenFlow. Включает в себя дополнительные инструменты и функциональность, используемые в OpenFOAM. Разработка поддерживается компанией blueCAPE.
FreeFOAM— версия OpenFOAM независящая от операционной системы, портативна и более удобна для установки. Проект развивается параллельно с официальными выпусками OpenCFD и не имеет дополнительного функционала. Для сборки использует CMake.
OpenFlow это исходный код дополнения для кросс-компилированного дистрибутива OpenFOAM, работающего на операционных системах Windows. Компоненты OpenFOAM в blueCFD разработаны на основе исходного кода OpenFlow. Разработка поддерживается компанией Symscape.
OpenFOAM-extend поддерживается Wikki Ltd. Эта ветка включает в себя разработки сообщества, большая часть которых может быть установлена в официальную версию OpenFOAM с минимальными изменениями. Ветка разрабатывается параллельно с официальной версией OpenFOAM, но в последних версиях выпуски extend ветки отстают на один-два года.
Слайд 29Пример «Прорыв плотины»
Мы будем решать упрощенную двумерную задачу прорыва плотины с использованием
решателя interFoam. Особенностью задачи является нестационарное течение двух жидкостей, разделенных интерфейсом, или свободной поверхностью.
Испытательная установка состоит из столба воды находящегося в состоянии покоя, расположенной позади мембраны, на левой стороне бака. В момент времени T = 0 с, мембрана удаляется, а столб воды падает. Во время распада, вода воздействует на препятствие на дне резервуара и создает сложную структуру потока, в том числе несколько захваченных карманов воздуха. Геометрия и начальная установка показана на рисунке.
Слайд 30Граничные условия
Пользователь может исследовать геометрии границ, порожденную blockMesh путем просмотра граничного
файла в постоянном каталоге / Polymesh. Файл содержит список из 5 граничных патчей:
leftWall (левая стена)
rightWall (правая стена)
lowerWall (нижняя стена)
атмосфера
defaultFaces (стены по умолчанию)
Слайд 31Положение фазы α при определенном времени