Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Diplom3.pdf
Скачиваний:
143
Добавлен:
09.02.2015
Размер:
1.48 Mб
Скачать

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

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]