Слайд 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Положение фазы α при определенном времени 
