- •РЕФЕРАТ
- •Записка к выпускной квалификационной работе изложена на 107 стр. машинописного текста, состоит из 3 разделов и включает 24 рисунка.
- •СОДЕРЖАНИЕ
- •ОПРЕДЕЛЕНИЯ, ОБОЗНАЧЕНИЯ И СОКРАЩЕНИЯ
- •ВВЕДЕНИЕ
- •1 Анализ задачи создания пользовательского интерфейса для OpenFOAM
- •1.1 Взаимодействие пользователя с OpenFOAM в процессе моделирования задачи
- •1.1.1 Предпроцессинг
- •1.1.2 Решение задачи и пост-процессинг
- •1.2 Основные требования к пользовательскому интерфейсу OpenFOAM
- •1.3 Функционал пользовательского интерфейса OpenFOAM
- •2 Определение средств для реализации пользовательского интерфейса OpenFOAM
- •2.1 Выбор операционной системы
- •2.2 Выбор языка программирования
- •2.3 Выбор IDE
- •3 Разработка пользовательского интерфейса для OpenFOAM
- •3.1 Структура приложения-интерфейса для OpenFOAM
- •3.2 Разработка классов объектов, хранящих информацию из файлов кейса OpenFOAM
- •3.2.1 Формат файлов кейсов OpenFOAM
- •3.2.2 Разработка абстрактного базового класса Dict
- •3.2.3 Разработка класса ControlDict
- •3.2.4 Разработка класса BlockMeshDict
- •3.2.5 Разработка класса Boundary
- •3.2.6 Разработка класса Field
- •3.2.7 Разработка класса Constant
- •3.2.8 Разработка класса SetFieldsDict
- •3.3 Разработка графического пользовательского интерфейса приложения
- •3.3.1 Внешний вид приложения
- •3.3.2 Вкладка «control»
- •3.3.2 Вкладка «blockMesh»
- •3.3.3 Вкладка «boundary»
- •3.3.4 Вкладка «Поля»
- •3.3.5 Вкладка «setFields»
- •3.3.6 Вкладка «Константы»
- •3.3.7 Вкладки «fvSolution» и «fvSchemes»
- •3.3.8 Вкладка «Запуск»
- •Заключение
- •СПИСОК ЛИТЕРАТУРЫ
- •ПРИЛОЖЕНИЕ А
- •Листинги ключевых частей программы
3 Разработка пользовательского интерфейса для OpenFOAM
Как уже было сказано в разделе 1, разрабатываемое приложение должно позволять редактировать некоторые файлы кейсов OpenFOAM используя GUI, а также запускать решатель и визуализатор. Поэтому задачу разработки приложения можно разделить на две части:
1)разработка парсеров файлов кейсов OpenFOAM;
2)разработка графического интерфейса, посредством которого данные редактируются и сохраняются, запускается решатель и визуализатор. Прежде, чем приступать к выполнению этих задач, необходимо определить
общую структуру приложения.
3.1 Структура приложения-интерфейса для OpenFOAM
Структура разрабатываемого приложения представлена на рисунке 2.
23
Рисунок 2 – Структура приложения, предоставляющего графический интерфейс к OpenFOAM
Приложение включает в себя набор объектов разных классов (на рисунке 2 – Control, Schemes и т.д.), которые содержат информацию о соответствующих файлах кейса OpenFOAM. При этом текстовые данные хранятся в этих объектах в виде текста, численные – в виде целого или дробного числа, информация перечислимого типа – в переменных целого типа. Чтение из файлов (направление стрелки от файла к объекту внутри приложения) производится при помощи функций-парсеров данных объектов. В процессе чтения данных из файла производится синтаксический анализ данных в соответствующих файлах и параллельно заполняется данными объект внутри приложения. При записи данных в файл производится очистка содержимого существующего файла и заполнение его
информацией в нужном формате из объекта внутри приложения (стрелка в 24
обратную сторону). Объекты одного типа, такие, как файлы полей и константы, хранятся в списке с той целью, чтобы можно было быстро и легко добавить новый объект или удалить существующий.
Кроме информации из файлов кейса OpenFOAM в памяти приложения хранится путь к директории кейса. Этот путь считывается (на рисунке 2 – стрелка к приложению) при открытии существующего кейса для редактирования, либо задается пользователем, если тот пожелает сохранить редактируемый кейс в нужном ему месте (стрелка в обратную сторону). Путь к кейсу также используется при запуске решателя и визуализатора (на рисунке – функции «запустить решатель» «запустить визуализатор»), он включается в команду запуска как один из параметров. Как видно из рисунка, все взаимодействие пользователя с кейсом OpenFOAM, включая запуск решателя и визуализатора, осуществляется через графический пользовательский интерфейс.
После описания общей структуры приложения можно приступить к разработке отдельных его частей.
3.2 Разработка классов объектов, хранящих информацию из файлов кейса OpenFOAM
Файлы различных типов в кейсе OpenFOAM различаются по своей структуре, однако их синтаксис схож между собой. Для разработки классов объектов с информацией о кейсе OpenFOAM необходимо сначала изучить общий формат его файлов.
3.2.1 Формат файлов кейсов OpenFOAM
Формат ввода/вывода файлов кейса указан на сайте разработчика в руководстве пользователя [2]. Общие правила синтаксиса для файлов кейса таковы:
∙столбцы не имеют определенного значения (то есть от номера столбца не зависит то, что OpenFOAM ожидает там увидеть), и нет необходимости явно указывать продолжение строки;
25
∙строки не имеют определенного значения (аналогично столбцам), за исключением символа однострочного комментария //, текст после которого OpenFOAM пропускает до конца текущей строки;
∙многострочный комментарий заключен между символами начала /* и конца */ многострочного комментария.
Для определения данных OpenFOAM использует такой тип файлов как словари (dictionaries). В словарях данные вводятся в следующем формате:
<ключевоеСлово> <данные1> … <данныеN>;
В основном после ключевого слова указывается только одна единица данных:
<ключевоеСлово> <данные>;
Кроме того, словари поддерживают вложенность друг в друга для иерархического ввода данных, то есть один словарь может содержать один или более подсловарей. Для этого используется следующий формат:
<имяПодсловаря>
{
… данные …
}
Все файлы кейса начинаются с заголовочного подсловаря с названием “FoamFile”, содержащего стандартный набор данных. Они перечисленных в таблице 2.
Таблица 2 — Данные заголовочного подсловаря FoamFile
Ключевое слово |
Описание |
|
|
|
Пример данных |
version |
Версия формата |
|
2.0 |
||
format |
Формат |
|
данных, |
ascii |
|
|
текстовый |
|
(ascii) |
или |
|
|
двоичный (binary) |
|
|
||
location |
Путь |
к |
|
файлу, |
“system” |
|
заключенный в кавычки |
|
|||
class |
Класс |
|
OpenFOAM, |
dictionary |
|
|
построенный |
на |
основе |
|
|
|
данных файла |
|
|
||
object |
Имя файла |
|
|
|
controlDict |
26
В листинге 1 приведен пример словаря fvSolution (без заголовочного подсловаря FoamFile).
Листинг 1 — Пример словаря fvSolution.
solvers |
|
|
{ |
|
|
p |
|
|
{ |
|
|
solver |
|
PCG; |
preconditioner |
DIC; |
|
tolerance |
|
1e-06; |
relTol |
|
0; |
} |
|
|
U |
|
|
{ |
|
|
solver |
|
PBiCG; |
preconditioner |
DILU; |
|
tolerance |
|
1e-05; |
relTol |
|
0; |
} |
|
|
} |
|
|
PISO |
|
|
{ |
|
|
nCorrectors |
2; |
|
nNonOrthogonalCorrectors 0; |
||
pRefCell |
0; |
|
pRefValue |
0; |
|
} |
|
|
Вданном примере словарь fvSolution включает в себя два подсловаря, solvers
иPISO. Подсловарь solvers содержит, в свою очередь, два подсловаря, p (давление)
иU (скорость). В них указываются настройки решателей уравнений для данных физических величин. В подсловаре PISO прописываются настройки алгоритма.
Вфайлах кейса OpenFOAM также могут встретиться данные такого формата, как список. В списке могут указываться, например, координаты точки в пространстве, значения неоднородного поля и другие данные. Содержимое списка заключается в круглые скобки. Список может форматироваться следующими тремя способами.
1)Простой способ. За ключевым словом сразу идут круглые скобки:
<имяСписка>
{
…данные …
}
27
2)С указанием количества элементов. Перед круглыми скобками указывается количество элементов в списке:
<имяСписка>
<количество>
{
…данные …
}
3)С указанием типа. После имени списка указывается имя типа элементов списка, заключенное в угловые скобки. Например, для элементов типа scalar
список будет выглядеть так:
<имяСписка>
List<scalar>
<количество> //опционально
{
… данные …
}
Обратите внимание, что <scalar> в этом примере – не обобщение, а пример конкретного текста.
Поля в OpenFOAM бывают скалярными, векторными и тензорными. Скалярное значение записывается просто дробным числом, вектор – списком из трех элементов, тензор – списком из девяти элементов, при этом можно как разделять элементы символом переноса на другую строку, так и не разделять.
Для физических величин в файлах кейса необходимо указывать также их размерность. Она задается в виде семи чисел в квадратных скобках. К примеру, размерность для скорости (м/с) задается так:
[0 1 -1 0 0 0 0]
Каждое из чисел представляет собой показатель степени одной из элементарных единиц измерения. Для скорости – метр в первой степени, секунда – в минус первой. Элементарные единицы измерения величин в OpenFOAM приведены в таблице 3.2.1.2.
28