-
Notifications
You must be signed in to change notification settings - Fork 0
[mesh] snappyHexMesh
Файлы, которые могут пригодиться: OpenFOAM-for-new-users/preProcessing/snappyHexMesh/
Для решения проекта (от построения сетки до самого расчёта) в ПК OpenFOAM требуется как минимум две папки: mesh/ и case/. В данном случае присутствует и директория geometry/ .
cd mesh/
В OpenFOAM (а в частности, в генераторе сетки snappyHexMesh
) в допустимы форматы геометрии:
- .stl
- .obj
Таким образом, для генерирования сетки произвольной формы в после их построения в CAD их нужно сохранить (сконвертировать) в допустимых форматах в папку ../geometry
.
cd system/
gedit blockMeshDict &
При генерировании сетки в утилите snappyHexMesh первоначальным этапом является создание фоновой сетки с помощью утилиты blockMesh
. Фоновая сетка представляет собой параллелепипед, размеры которого должны быть больше 3D-модели геометрии (см. рисунок). Таким образом в словаре blockMeshDict
в vertices()
указываются координаты точек 0-7, таким образом, чтобы параллелепипед ограничивал собой расчётную геометрию. С помощью convertToMeters
указывается размерность выставляемых координат по отношению к метрам.
Порядок расположения точек в словаре blockMeshDict
В blocks ( )
:
-
hex (0 1 2 3 4 5 6 7)
- порядок чтения точек утилитой точек -
(10 5 10)
- количество ячеек вдоль осей координат:(x z y)
-
simpleGrading (1 1 1)
- измельчение сетки вдоль осей координат (отношение вдоль их минимального размера ячейки к максимальному).
Сетка создаваемая с помощью утилиты blockMesh не является основной, а только определяющей максимальные размеры ячеек, поэтому допустимо делать её грубой.
Файлы .stl сохраняем в cd ../../geometry
.
Для упрощения проведения расчёта рекомендуется разбивать геометрию на несколько разных .stl файлов, в особенности, для поверхностей впуска/выпуска (напр.: inlet.stl, outlet.stl, anyGeometry.stl
) - что значительно облегчает задание граничных условий.
cd ../mesh/system
gedit surfaceFeatureExtractDict &
В данном словаре определяется для каждого .stl файла какие поверхности мы хотим использовать как определяющие при удалении внешней/внутренней сетки и каким образом мы их загружаем:
-
extractionMethod
- указывает как обрабатывать файл: как объемный (extractFromFile
) или как поверхностный (extractFromSurface
). Рекомендуются настройки по умолчанию. -
includedAngle
– угол между поверхностями для для последующего наложения (измельчения) на них сетки. Больше этого угла поверхности не выбираются.
Словарь сохраняет файлы в формате .eMesh в cd ../mesh/constant/triSurface/ , которые и используются для последующего наложения на них сетки.
gedit snappyHexMeshDict &
Указываются все файлы .stl , с которыми работаем в виде: anyGeometry.stl{...}
, где внутри указывается вид конечных элементов, например: type triSurfaceMesh;
и название файла (здесь .stl файл можно переименовать или продублировать), к которому будем обращаться в настройках словаря ниже: name anyGeometry;
Также здесь можно указывать указывать объекты для измельчения сетки (refinementRegions) - цилиндры, сферы и проч. - https://www.openfoam.com/documentation/cpp-guide/html/guide-meshing-snappyhexmesh-geometry.html
-
maxGlobalCells
– максимальное число ячеек, при достижении которого разбиение прекращается. - nCellsBetweenLevels – количество буферных слоев между различными слоями улучшения сетки.
nCellsBetweenLevels 1;
- нормальное разбиение 2:1, большее число приводит к меньшему измельчению. - features(…) – измельчение сетки основанное на гранях. Прямое уточнение измельчения на грани элемента(ов). Определяет степень измельчения для каждой ячейки, пересённой поверхностями опредёнными с помощью
surfaceFutureExtractDict
(в частности, с помощьюincludedAngle
).
Так как сути это featureEdgeMesh
(сетка на поверхности геометрии), читаемая из ../constant/triSurface
, то внутри требуется указать название файлов .eMesh с которыми будет работать подутилита и степень измельчения сетки level
:
{
file "inlet.eMesh";
level 0;
}
{
file "any_geometry.eMesh";
levels ((0.001 3) (0.005 2));
}
level <число>;
- указывает степень измельчения сетки прямо на поверхности. 0 - размер ячеек по настройкам из blockMeshDict (без улучшения).
levels ( (<расстояние> <level>) )
– указывает степень измельчения сетки на расстоянии от поверхности.
refinementSurfaces {…}
– измельчение сетки по опорным поверхностям.
Вызываются опорные поверхности по именам установленным в geometry {...}
(см. 1.3.1), например:
any_geometry { level (0 2); }
, где в level (<min> <max>)
указывается минимальная и максимальная степени измельчения сетки.
refinementRegions {…}
– измельчение сетки по опорным областям (если таковые есть).
Указываются параметры областей для улучшения сетки, созданных в geometry {...}
и вызов их по имени определяемом там же (см. 1.3.1), например: yourRegion{...}
, где внутри указывается тип разбиения сетки:mode inside; -
внутри,mode distance; -
на расстоянии от области.
Также должна быть указана степень измельчения (аналогично levels
во features(...)
): levels ( (<расстояние> <степень>) );,
где в случае измельчение сетки внутри области (mode inside;
) <расстояние>
игнорируется.
locationInMesh(<x> <y> <z>)
– оставляет сетку внутри/вне загруженной геометрии.
Указывается точка внутри/вне геометрии, в зависимости от того в какой области должна быть сетка (внутри/вне геометрии). Не должна лежать на поверхности!
relativeSizes
– указывает является ли заданная толщина слоя относительной к неизмельчённой ячейке или абсолютной.
layers{...}
– подсловарь содержит входы (названия) для каждого патча, на котором должны применяться слои, и количество требуемых поверхностных слоев ( nSurfaceLayers
).
Имя патча используется, потому что добавление слоев относится к существующей сетке, а не к геометрии поверхности; следовательно, применяется к патчу, а не к области поверхности.
Для определённого патча:
"inlet_.*"
{
nSurfaceLayers 2;
}
Для всех областей:
"_.*"
{
nSurfaceLayers 2;
}
Параметры разбиения
Существует 4 параметра разбиения пространства на слои expansionRatio
, firstLayerThickness
, finalLayerThickness
, thickness
- использовать можно только одовременно два, иначе будет ошибка переопределения.
expansionRatio
- коэффициент расширения слоёв (отношение размеров от слоя к слою)
firstLayerThickness
- толщина ближнего от стенки слоя
finalLayerThicknesss
- толщина дальнего от стенки слоя
thickness
- толщина всех слоёв (лучше указывать в совокупности с абсолютными размерами в соответсвии с данными из relativeSizes false)
minThickness
- минимальная общая толщина всех слоев, меньше которой поверхность не разбивается
cd ../
sh firstMesh.sh
Для генерирования сетки в папке mesh/
располагается несколько скриптов, краткое описание каждого:
firstMesh.sh
- скрипт для копирования .stl
файлов из ../geometry/Orig/
их масштабирования из м в мм (snappyHexMesh считает геометрию построенную (оразмеренную) на миллиметрах как метры), генерации сетки, сигнала о завершении и вызова paraView.
remesh.sh
- скрипт для регенерации сетки по уже созданным файлам в constant/extendedFeatureEdgeMesh
и в constant/triSurface .
hardRemesh.sh
- скрипт для генерации сетки заново с копированием файлов геометрии из ../geometry/Orig/ .
toPrepareMesh.sh
- скрипт, открывающий все файлы для настройки сетки.
Расчёт на сетке созданной snappyHexMesh (на примере решателя simpleFoam)
Все настройки решателя и граничные условия взяты по умолчанию из: OpenFOAM/tutorials/incompressible/simpleFoam/pitzDaily/
- Температура
cd ../case/0
gedit transportProperties
Особенностью расчёта является задание температуры через кинематическую вязкость среды. Таким образом, например, температура , будет задана как кинематическая вязкость воздуха
.
- Давление
Так как плотность постоянна - решатель выдаёт избыточное давление относительно плотности, таким образом:
cd ../
sh firstRun.sh
Для запуска расчёта в папке case/
располагается несколько скриптов, краткое описание каждого:
firstRun.sh
- скрипт для копирования файлов сетки из ../mesh/constant/polyMesh
, запуска расчёта, сигнала о завершении и вызова paraView.
hardRerun.sh
- скрипт для копирования файлов оригинальных (без каких-либо изменений) начальных условий, копирования файлов сетки заново из ../mesh/constant/polyMesh
, запуска расчёта, сигнала о завершении и вызова paraView.
toPrepareCase.sh
- скрипт, открывающий все файлы для настройки решателя.
Для простого перезапуска расчёта в Терминале ввести:
simpleFoam
postProcess -func "patchAverage(p,name=inlet)" -latestTime
paraview case.foam &
Таким образом были получены поля скоростей и давлений:
- 🔗 ссылка на внешний источник
- 📖 документация OpenFOAM
- 🔻 обучающий кейс OpenFOAM (в tutorials/)
- 📝 статья на OpenFOAMWiki
- 📄 статья на Википедии
- 💩 обсуждение на CFD Online
СОДЕРЖАНИЕ
Содержание только по статьям внутри Wiki (внешних ссылок в нём нет).