Файлы-словари OpenFOAM

Общий формат файлов-словарей OpenFOAM

Итак, в OpenFOAM существует единый текстовый формат для ввода и вывода данных. На английском файлы называются dictionary files. В рамках этой статьи, я буду называть их прсто файлы-словари либо файлы. Как правило, суть ясна из контекста или от него не зависит. Формат файлов-словарей является общим для всех файлов, используемых при работе с OpenFOAM. Это и файлы с исходными данными для генерации сетки, или файлы, сетки после её генерации утилитой blockMesh. или файлы настроек решателя. Этот же формат у результирующих файлов решения задачи, размещенных в папках временных шагов. Решатель автоматически сохраняет их в процессе решения задачи, используя встроенный функционал генерации и чтения файлов-словарей.

Информация об этом формате на английском языке доступна в официальной документации по пакету на сайте. Это документация по версии openfoam.org, однако она остается в силе и для файлов-словарей версии openfoam.com. Кстати, о разнице в версиях OpenFOAM и о соглашениях в нумерации версий можно прочитать на форуме cfd-online.com. Причина того, что версии две, те же самые, по которым есть множество версий Linux: «Почему нет?»

Комментарии в файлах-словарях оформляются так же, как в С++ (// и /*…*/).

Типы записей в файлах-словарях

Четыре типа записей: словари, списки, поля, отдельные переменные (скаляр, вектор или тензор). Списки и словари могут включать другие типы, например векторы или скаляры.

1. Словари

Предназначение: Хранить набор пар имя-значение. Как правило, содержит текстовые и числовые параметры, заголовок, настройки решателей.
Отличить можно по наличию фигурных скобок {…}.

Примеры: Словарь FoamFile является заголовком в каждом файле OpenFOAM.

Файлы-словари OpenFOAM. Примеры записей. Словарь FoamFile
Примеры. Словарь FoamFile. Class — это наименование класса в объект которого превращаются данные, принятые из файла. Object — это имя файла.


Ещё пример: blockMeshSample05/system/fvSchemes и fvSolutions содержат словари в качестве всех записей.

2. Списки

Предназначение: Список параметров. Число элементов списка м.б. либо задано, либо нет. Тип элементов списка тоже может быть задан.
Отличить можно по наличию круглых скобок и точки с заптяой (…); В них заключены элементы списка.

Примеры: См. списки Vertices и Blocks в файле blockMeshSample05/system/blockMeshDict — это списки вершин и блоков. Они заданы для того, чтобы утилита blockMesh построила по этим данным сетку.

Примеры. Список vertices в файле blockMeshDict (отрывок). Список состоит из векторов (0 0 0), (2 0 0) и т.д.

Или, например, список с указанием числа элементов списка (19456 точек) см. файл: blockMeshSample05/constant/polymesh/points

Примеры. Файл constant/polyMesh/points, содержащий вершины сгенерированной сетки (отрывок).

3. Поля (физические)

Предназначение: Поле состоит из нескольких записей. Задается по отдельности наружное поле и внутреннее.
Отличить можно по наличию ключевых слов dimensions, internalField, boundaryField.

Примеры: См. файлы p и U в папке blockMeshSample05/0 (в этой папке заданы поля во внутренней области и на границах в нулевой момент времени)

Файлы-словари OpenFOAM. Примеры. Поле в файле начальных условий
Примеры. Поле в файле начальных условий (отрывок). Обратите внимание на то, что в файле, характеризующем скалярное поле, параметр Class в словаре FoamFile имеет значение volScalarField.

4. Отдельные переменные

Предназначение: Просто пара имя-значение. Если значение состоит из одной цифры, это скаляр. Из трех — вектор, а из 9 — тензор. Могут иметь размерность заданную в показателях степени базовых единиц измерения системы СИ. Например [0 2 -1 0 0 0 0] слева направо: кг, метр, секунда, кельвин, моль, ампер, кандела. Указанная единица измерения означает [m^2/s]

Примеры: См. controlDict в папке blockMeshSample05/system

Примеры. Записи в файле controlDict
Примеры. Записи в файле controlDict (отрывок).

Отдельная переменная с размерностью: см. файл blockMeshSample05/constant/transportProperties

Примеры. Скаляр с размерностью в transportProperties

Архив с файлами примеров взят из видео по blockMesh на YouTube.

Об отступах и не особой строгости формата

Файлы-словари OpenFOAM являются текстовыми файлами (ASCII). Для их редактирования подходит vim, nano, gedit или любой другой текстовый редактор. В формате нет необходимых отступов или табуляции и пустых строк. Определение пары ключевое «слово и значение» может быть разбито на две строки, если это нужно для удобочитаемости файла. Также, нет необходимости ставить спец-символы продолжения строки при переносе. Обязательным является наличие заголовка в начале файла, а также пробела между ключевым словом и значением.

Итак, с точки зрения отступов и размещения ключевых слов, файлы-словари имеют относительно свободный формат. Посмотрите на следующие фрагменты файла blockMeshDict:

Файлы-словари OpenFOAM. Удобная для чтения форма записи
Удобная для чтения форма записи файла-словаря blockMeshDict. Ключевое слово hex определяет блок, в котором строится сетка путем перечисления в определенном порядке его вершин и количества ячеек по каждому из трех направлений локальной системы координат блока. Ключевое слово simpleGrading характеризует неравномерность длины ребра ячеек по каждому направлению. Это используется при необходимости сгущения сетки.
Форма записи в одну строку
Форма записи того же фрагмента файла-словаря blockMeshDict в одну строку. Показан список blocks, состоящий из одного блока.

Оба приведенных фрагмента одинаково работают при генерации сетки утилитой blockMesh. В принципе, чтение словарного файла и генерация сетки сработает если в одном словаре описать его элементы по-разному, но вряд-ли это может пригодиться:

Разные формы записи в одном словаре граничных условий
Разные формы записи словарей в одном списке граничных условий boundary.

Программирование ввода-вывода в OpenFOAM

С точки зрения программирования, работа с файлами-словарями OpenFOAM осуществляется методами класса IOdictionary.

Для изучения принципов работы с OpenFOAM на уровне программирования, рекомендуется обратиться к примерам. В частности, для изучения работы с файлами-словарями, к примеру номер 01 «Input-Output». Я проверял компиляцию и работу этого примера с текущей версией OpenFOAM-v2106.

В заключении об остальных примерах

Итак, мы рассмотрели то, что для работы с вводом и выводом в OpenFOAM используется единый формат файлов-словарей, которые могут содержать разного типа данные. Рассмотрели, какие могут быть данные и рассмотрели специфику и строгость формата.

OpenFOAM устанавливается с большим количеством примеров в папке tutorial. Самые простые- в папке \tutorials\incompressible\icoFoam и \tutorials\basic.

Суть работы с OpenFOAM сводится, как правило, к работе именно с текстовыми файлами-словарями. Благодаря этой характеристике, пакет с одной стороны не удобен, а с другой, его интерфейс предельно прост и не требует изучения. Другое дело — знание различных типов записей, которые должны быть или могут быть приведены в конфигурационных файлах-словарях при формировании задачи в OpenFOAM.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Этот сайт использует Akismet для борьбы со спамом. Узнайте, как обрабатываются ваши данные комментариев.