OpenFOAM Tutorial, Short and Sweet/ru
Что такое OpenFOAM?
OpenFOAM — это ведущее программное обеспечение CFD с открытым исходным кодом, которое очень хорошо известно во всем мире и среди широкого круга инженеров и исследователей. Будучи бесплатным и с открытым исходным кодом, а также имея возможность решать практически любые задачи, от сложных структур потока жидкости и теплопередачи до горения и химических реакций, OpenFOAM стал одним из самых популярных программных продуктов среди инженеров-механиков.
Цель этого руководства — дать вам краткое представление о том, как загрузить и установить программное обеспечение, как оно работает, как использовать учебные проекты и первичные коды, а также как изменять первичные коды для моделирования сложной структуры потока жидкости.
Как загрузить и установить OpenFOAM?
Предпочтительно, лучший способ использовать это программное обеспечение — установить его на операционные системы Linux; и наиболее предпочтительная версия Linux для запуска OpenFOAM — это последняя версия Ubuntu на данный момент. Для тех, кто использует разные версии Windows или Mac в качестве операционной системы на своих ноутбуках или компьютерах, самым простым способом использовать OpenFOAM будет установка виртуальной машины вместо использования двух разных операционных систем на одном компьютере.
Следующая ссылка перенаправит вас на страницу загрузки веб-сайта ORACLE Virtual Machine, где вы найдете прямые ссылки для загрузки установочных пакетов ORACLE VM для различных операционных систем: https://www.virtualbox.org/wiki/Downloads
После установки виртуальной машины на ваш компьютер вы можете легко установить операционную систему Ubuntu на виртуальную машину, следуя следующим инструкциям:
Как запустить виртуальную машину Ubuntu Desktop с помощью VirtualBox
Как установить Ubuntu на VirtualBox в Windows
Как установить Ubuntu на MacOS с помощью VirtualBox
Теперь все готово для загрузки и установки программного обеспечения OpenFOAM. Самый простой способ загрузить и установить OpenFOAM — открыть терминал в ОС Ubuntu, скопировать и вставить следующие команды:
- Чтобы добавить OpenFOAM в список репозиториев программного обеспечения для поиска и загрузки программного обеспечения OpenFOAM (этот этап необходимо выполнить только один раз для каждого компьютера):
sudo sh -c "wget -O - https://dl.openfoam.org/gpg.key > /etc/apt/trusted.gpg.d/openfoam.asc"
sudo add-apt-repository http://dl.openfoam.org/ubuntu
2. Чтобы обновить список пакетов «apt» для загрузки OpenFOAM:
sudo apt-get обновление
3. Чтобы установить последнюю версию OpenFOAM (этот код относится к OpenFOAM версии 10 и новейшей версии ParaView):
sudo apt-get -y установить openfoam10
4. Поскольку пакеты OpenFOAM периодически перекомпилируются в новый пакет, вам следует ввести следующие строки для исправления вашего программного обеспечения:
sudo apt-get обновление
sudo apt-get обновление
Процесс установки завершен, и программное обеспечение OpenFOAM готово к запуску. По любым возможным проблемам установки вы можете обратиться к разделу « Распространенные проблемы установки» .
Как запустить нашу первую симуляцию в OpenFOAM
Во-первых, мы должны знать, как работает OpenFOAM. После завершения процесса установки вы можете найти папку с именем OpenFOAM в адресе установки, которая содержит все коды и файлы, необходимые для запуска ваших симуляций. Как самые важные папки, «applications» и «tutorials» соответственно содержат все исходные коды для различных решателей и многочисленные примеры простых и сложных примеров в области гидродинамики, теплопередачи, горения и т. д. Основной способ смоделировать каждый сложный пример с помощью OpenFOAM — найти наиболее похожий пример для нашей основной проблемы и изменить коды, чтобы создать наиболее близкую модель к нашему основному примеру, который будет обсуждаться позже. Но на данный момент самый простой способ запустить нашу первую симуляцию с помощью OpenFOAM — использовать один из доступных примеров.
В качестве базовой проблемы для изучения того, как настроить случай, применить начальные значения, настроить граничные условия и сетку, а также смоделировать проблему, мы будем использовать учебник локтя, который можно найти в каталоге «OpenFOAM/tutorials/incompressible/icoFoam/elbow». Важно отметить, что решатель icoFoam является одним из основных решателей переходных процессов для ньютоновских, несжимаемых, ламинарных потоков жидкости. На следующем рисунке показано, как выглядит исследование случая OpenFOAM.

Папка «zero» содержит начальные условия моделирования, и в этом случае есть только два файла с именами «P» и «U», представляющие начальные поля давления и скорости соответственно. Папка «constant» содержит только файл «physicalproerties», определяющий величину кинематической вязкости. В папке «system» вы обычно найдете файлы для управления процессом моделирования, что дает вам контроль над схемой решения, временными шагами и схемами дискретизации. И последнее, но не менее важное: файл «elbow.msh» определяет область решения исследования случая (геометрию и сетку). Для первого моделирования нам не нужно вносить никаких изменений в эти файлы, но мы обсудим, как это сделать позже в следующих моделированиях.
После просмотра вышеупомянутых файлов (и внесения любых необходимых изменений) наш пример готов к моделированию. Чтобы начать моделирование, откройте путь к учебнику с помощью терминала, а затем вызовите команду {fluentMeshToFoam «имя файла сетки»}, чтобы создать геометрию и применить сетку к домену. Теперь, когда геометрия и сетка созданы, вы можете вызвать команду {paraview &}, чтобы открыть программное обеспечение paraview и визуально экспортировать то, что вы сделали до сих пор. После того, как программное обеспечение paraview откроется, перейдите по пути {File/Open/(папка учебника)/system/controldict}, откройте файл «controldict», а затем нажмите кнопку «Apply». Геометрия и сетка будут спроецированы следующим образом:
Теперь, когда мы настроили случай и импортировали сетку, пришло время запустить симуляцию и посмотреть результаты. Чтобы запустить симуляцию, вернитесь в терминал, введите {icoFoam} и нажмите Enter, и симуляция будет запущена. После остановки симуляции откройте программное обеспечение Paraview и импортируйте свое решение через каталог {File/Open//(папка учебника)/system/controldict}, а затем нажмите кнопку «Применить». Решение теперь готово, и вы можете экспортировать различные типы контуров и другие графические результаты из программного обеспечения Paraview следующим образом:
Чтобы получить более точные результаты и контуры, иногда необходимо применить большее количество ячеек к области решения. Для этого после вызова вашего файла сетки с помощью команды {fluentMeshToFoam} вы можете увеличить количество ячеек в рамках той же стратегии сетки с помощью {refineMesh -overwrite}, что увеличит количество ячеек за счет уменьшения размера ячейки и перезапишет новый файл сетки.
После завершения уточнения вы увидите отчет о процессе уточнения в терминале, который содержит информацию о том, как было применено уточнение, и подробности о новой уточненной сетке. Написав команду {icoFoam} в терминале, симуляция начнет работать с использованием нового файла сетки. На следующих рисунках показана структура ячеек и результаты симуляции в новом файле уточненной сетки:
Как создать домен решения с помощью blockMesh?
В этой части руководства мы научимся создавать собственную геометрию, а затем применять ячейки для решения нашей задачи с помощью любого связанного решателя. В качестве первого шага, аналогично предыдущим частям руководства, мы выберем наиболее похожее руководство к нашей задаче. В каждом руководстве в каталоге OpenFOAM есть папка с именем system, содержащая blockMeshDict, controlDict, fvSchemes и fvSolution. Файл blockMeshDict содержит всю информацию о геометрии и сетке области решения.
Чтобы было легче понять, мы выбираем учебник в качестве ссылки для модификации. В качестве простого примера подойдет "rhoPimpleFoam/laminar/forwardstep", который является ламинарным сжимаемым звуковым/сверхзвуковым решателем.
Чтобы изменить область задачи, необходимо внести некоторые изменения в файл blockMeshDict. Наиболее важными разделами внутри файла blockMeshDict являются вершины, блоки и граница. Вершины — это расположение узлов, которые представляют углы геометрии, а любое из трех чисел внутри скобок представляет расстояние узла от начала координат в направлениях X, Y и Z. Например, вершины решателя "rhoPimpleFoam/laminar/forwardstep" выглядят следующим образом:
вершины
(
(0 0 -0,05)
(0,6 0 -0,05)
(0 0,2 -0,05)
(0,6 0,2 -0,05)
(3 0,2 -0,05)
(0 1 -0,05)
(0,6 1 -0,05)
(3 1 -0,05)
(0 0 0,05)
(0,6 0 0,05)
(0 0,2 0,05)
(0,6 0,2 0,05)
(3 0,2 0,05)
(0 1 0,05)
(0,6 1 0,05)
(3 1 0,05)
);
После определения геометрии по вершинам, мы применим сетку к геометрии с помощью раздела "blocks". В этом разделе вам нужно будет написать что-то похожее на следующие строки:
hex (0 1 3 2 8 9 11 10) (25 10 1) простая оценка (1 1 1)
hex (2 3 6 5 10 11 14 13) (25 40 1) простая оценка (1 1 1)
hex (3 4 7 6 11 12 15 14) (100 40 1) простая оценка (1 1 1)
Каждая геометрия может быть разделена на более простые геометрии, которые соединены друг с другом. Первая скобка в каждой строке содержит количество вершин, которые составляют блок, часть основной геометрии, если они соединены друг с другом. Вторая скобка показывает количество ячеек на краях каждого блока в направлениях X, Y и Z соответственно. И, наконец, последняя скобка может использоваться всякий раз, когда требуется смещенная сетка. При изменении третьей скобки концентрация ячеек на краях изменится.
Следующая важная часть файла blockMeshDict — раздел границ. В этом разделе будут определены местоположение и тип границ. В качестве примера представлена часть границ упомянутого руководства:
граница
(
впускной
{
тип патч;
лица
(
(0 8 10 2)
(2 10 13 5)
);
}
выход
{
тип патч;
лица
(
(4 7 15 12)
);
}
нижний
{
тип симметрииПлоскость;
лица
(
(0 1 9 8)
);
}
вершина
{
тип симметрииПлоскость;
лица
(
(5 13 14 6)
(6 14 15 7)
);
}
препятствие
{
тип стены;
лица
(
(1 3 11 9)
(3 4 12 11)
);
}
);
«Patch» — это тип граничного условия, который мы в основном используем для входных и выходных границ. Всякий раз, когда наша геометрия симметрична и может быть отражена на одной из границ, мы будем использовать «symmetryplane» в качестве типа границы. Аналогично, когда нам нужно применить граничное условие без проскальзывания к поверхности, мы назначаем граничный тип «wall» ребру или поверхности. Кроме того, еще одним важным принципом здесь является использование правила правой руки для введения граничных узлов, что оказывает прямое влияние на направление вектора нормали границы.
После определения геометрии и сетки путем изменения файла blockMeshDict мы выполним команду "blockMesh", которая создает геометрию и сетку. Открыв файл "boundary" в каталоге "rhoPimpleFoam/laminar/forwardstep/constant/polymesh", мы можем увидеть точные граничные условия, примененные к каждой грани геометрии в соответствии с тем, что мы определили в файле "blockMeshDict".
Последний шаг — запустить решатель и извлечь результаты с помощью программного обеспечения Paraview. Результаты упомянутого руководства показаны ниже, чтобы лучше понять, что мы определили во время этого сеанса.
Исследование конвергенции сетей
В этом разделе мы собираемся проверить влияние размера сетки на результаты моделирования. Для этого выбрана задача ударной трубы, которую необходимо решить решателем "rhoCentralFoam", который является сжимаемым, однофазным, переходным, неизотермическим решателем с возможностью решения как переходных, так и ламинарных потоков жидкости. Геометрия этой задачи представляет собой прямоугольный канал шириной и глубиной 2 метра и длиной 10 метров. Кроме того, задача является одномерной, а режим течения считается ламинарным, а жидкость - идеальным газом. Задача считалась переходной и решалась в течение 7 мс.
Чтобы сравнить результаты сетки низкого разрешения с сеткой высокого разрешения, согласно предыдущей части этого руководства, отдельно определяются две прямоугольные трубки с 100 и 1000 ячейками в направлении X и только по одной ячейке в направлениях Y и Z.
Для моделирования условий ударной трубы мы назначаем две различные величины давления, а именно 0 и 100000 Па, первой и второй половине прямоугольного канала соответственно. Для этого мы изменяем файл "setFieldsDict" следующим образом:
/*--------------------------------*- С++ -*----------------------------------*\
========= |
\\ / Поле | OpenFOAM: набор инструментов CFD с открытым исходным кодом
\\ / Эксплуатация | Сайт: https://openfoam.org
\\ / А | Версия: 10
\\/ Манипуляция |
\*----------------------------------------------------------------------------*/
FoamFile
{
формат ascii;
словарь класса;
местоположение «система»;
объект setFieldsDict;
}
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
defaultFieldValues
(
volVectorFieldValue U (0 0 0)
volScalarFieldValue T 348.432
volScalarFieldValue p 0
);
регионы
(
boxToCell
{
ящик (0 -1 -1) (5 1 1);
fieldValues
(
volScalarFieldValue T 278.746
volScalarFieldValue p 100000
);
}
);
Затем мы должны выполнить команду "setFields" в терминале, чтобы инициализировать параметры в области решения. Следующим шагом будет решение проблемы с использованием "rhoCentralFoam" для двух различных стратегий сетки. После выполнения команды "rhoCentralFoam" в терминале окончательные результаты будут доступны через программное обеспечение Paraview следующим образом:
- Контур давления ударной трубы с 100 ячейками для каждого временного шага
- Контур давления ударной трубы с 1000 ячеек для каждого временного шага
Чтобы лучше понять разницу между вышеуказанными галереями, давайте рассмотрим физику ударной трубы. Инициализируя и применяя две разные величины давления к двум разным зонам трубы, мы создали зоны высокого и низкого давления, которые отделены друг от друга воображаемым барьером. Когда начинается переходное моделирование, воображаемый барьер исчезает, и жидкость течет к зоне низкого давления и имитирует удар в трубе. Разницу между сетками высокого и низкого разрешения можно легко увидеть, сравнив приведенные выше изображения. Сетка низкого разрешения имитирует удар (переходную зону между частями высокого и низкого давления) в пределах нескольких ячеек (контрольных объемов), что означает расстояние в сантиметровом масштабе, что не является физически точным, в то время как сетка высокого разрешения моделирует удар менее чем в одном миллиметре трубы. Этот простой пример показывает, какую точность может добавить высококачественная сетка к моделированию. Следовательно, первым шагом в численном моделировании будет проверка точности сетки путем применения процедуры независимости сетки.
For those who need to know, the grid independence check means to make sure that the grid is fine enough so that any slight increase in the number of meshes will not change the results of the simulation. In other words, the grid is precise enough that the results of the simulation are independent of the mesh size.
Combination of Tutorials
As I mentioned before, we almost always make our projects by combining and modifying different tutorials. In this section, in order to gain a better understanding of the concept of diffusion and convection terms of the energy equation, we will combine and then modify "scalarTransportFoam" solver and "forwardStep" tutorial that can be find in "OpenFoam-10/tutorials/basic" and "OpenFoam-10/tutorials/compressible/rhoPimpleFoam/laminar" directories respectively.
The aim of this session is to solve the solution domain of "forwardStep" problem using "scalarTransportFoam" solver to show the role of different terms in the energy equation. The first step is to copy the "forwardStep" folder to the solver's directory. Then we should apply some modifications to the "forwardStep" problem to be solvable by the new solver. To do so, we compare the "forwardStep" case to one of the tutorials available in the solver's directory.
Starting with the "0" folder, our solver only needs temperature and velocity fields to solve the energy equation in the fluid flow, so we will delete the "P" (pressure) file from the "forwardStep" problem. In the "constant" folder of the "forwardStep" problem, there is a "momentumTransport" file which is not necessary for the solver and it is better to be deleted. There is also a "physicalProperties" file which must be replaced by the same file from the solver's directory because the solver needs only the diffusivity to solve the energy equation. The last and most important folder, system, contains three files namely "controlDict", "fvSchemes", and "fvSolution" that must be replaced in the "forwardStep" case. "controlDict" file controls the start and stop time of the solution plus the number and the size of time steps. The "fvScheme" file defines different discretization methods and numerical schemes for terms such as derivatives that appear in the equation, and the "fvSolution" file contains the coupling methods between scalars, numerical methods, and the tolerance and convergence criteria of the solution.
Теперь мы исследуем влияние конвективных и диффузионных условий на температурное поле потока жидкости, изменяя граничные условия путем модификации файлов "T" и "U" в папке "0" "forwardStep". Следующие рисунки (слева направо) представляют температурное поле потока жидкости при чистой конвекции, чистой диффузии и комбинации конвекции и диффузии соответственно.
Для моделирования состояния чистой диффузии температура считалась равной нулю по всей области, за исключением левой стенки, которая установлена на 10 Кельвинов, скорость равна нулю по всей области, а коэффициент диффузии был установлен на 0,05. Напротив, для моделирования чистой конвекции скорость равна 0,2 м/с в положительном направлении x с температурой на входе 10 Кельвинов, а коэффициент диффузии равен нулю. Наконец, чтобы показать комбинацию эффектов диффузии и конвекции, скорость реализована равной 0,2 м/с в отрицательном направлении x, а коэффициент диффузии установлен на 0,05. Интересно отметить, что в результате чистой конвекции можно увидеть некоторые фундаментальные проблемы, связанные с дискретизацией и численными методами, применяемыми при моделировании. В следующих разделах мы поговорим о различиях между этими схемами и их влиянии на решение.