При моделировании физических процессов традиционным является разбиение задачи на обработку в 3-х модулях, к которым относятся:
- препроцессор (назначение – задание исходных данных решаемой проблемы),
- процессор или решатель (собственно моделирование),
- постпроцессор (визуализация результатов моделирования).
Разработан препроцессор BEAT, особенностями которого являются:
- выходные данные: управляющий ini-файл для процессора и по желанию файл заполнения пространства,
- имеется простой графический редактор,
- настраиваемое количество физических параметров (например, давление, температура, скорость и т.д.),
- настраиваемое количество материалов (например, воздух, метан, пропан и т.д.),
- настраиваемое количество переменных ini-файла (например, величина обратная числу Куранта , тип реконструкции, способ решения задачи Римана и т.д.).
Препроцессор реализован на основе библиотек с открытым исходным кодом Qt (кроссплатформенный инструментарий разработки ПО на языке программирования C++, сайт https://www.qt.io/) и VTK (кроссплатформенная программа для трёхмерного моделирования, обработки изображений и прикладной визуализации, сайт http://www.vtk.org/).
Выбор этих библиотек обеспечивает высокую скорость обработки. Например, генерация файла заполнения пространства 100 х100 х100 точек составляет около 10 секунд на обычном компьютере Pentium G6950, 2 ядра, 2.7 GHz . Для сравнения, это примерно в 30 раз быстрее, чем в первоначальном варианте препроцессора при использовании модуля GEOM из пакета SALOME (платформа с открытым исходным кодом для предварительной и пост-обработки задач численного моделирования, сайт http://www.salome-platform.org/).
Настраиваемость препроцессора обеспечивается управляющим файлом beat.ini, который в стандартном варианте имеет вид:
separa=;
#[Features]
features=Физические свойства
pressure=100000 |double {0,1000000000} |давление в Па
temperature=293 |double {0,1000000000} |температура в К
velocityX=0 |double {-100000,100000} |скорость м/сек по оси X
velocityY=0 |double {-100000,100000} |скорость м/сек по оси Y
velocityZ=0 |double {-100000,100000} |скорость м/сек по оси Z
#[Parameters]
dialog_0=параметры расчета 1
Cu=4|double {0.001,100}|величина обратная числу Куранта
tMax=0.05|double {0,3600}|Максимальное время в секундах от начала процесса, до момента окончания расчета
nRaspad=1 |combo { 0:акустическое приближение,1:решатель Роу,2:решатель Ошера} |задает способ решения задачи Римана
dialog_1=параметры расчета 2
dGridExp=0.5 |double |параметр определяющий размеры расчетной области, при перестроении сетки
LX=1 |double |левая х-координата области, в которой будут рассчитаны поля максимального давления, максимальной температуры и импульса
RX=11 |double |правая х-координата области, в которой будут рассчитаны поля максимального давления, максимальной температуры и импульса
LY=1 |double |левая y-координата области, в которой будут рассчитаны поля максимального давления, максимальной температуры и импульса
RY=11 |double |правая y-координата области, в которой будут рассчитаны поля максимального давления, максимальной температуры и импульса
dh_pressure_field=1.1 |double |z – координата, для которой рассчитываются и выводятся поля максимального давления, максимальной температуры и импульса
dialog_2=параметры расчета 3
nOutImpulse = 250 |int |Количество шагов интегрирования газодинамических уравнений, через которые происходит вывод полей максимального давления, максимальной температуры и импульса
NXD = 100 |int |количество проекций на ось x точек, в которых регистрируется максимальное давление, максимальная температура и импульс
NYD = 100 |int |количество проекций на ось y точек, в которых регистрируется максимальное давление, максимальная температура и импульс
nTurbulenceOn = 0 |int |параметр включающий и выключающий решение уравнений для «подсеточной» турбулентности в программе.
dOutTime = 0.001 |double |Время между двумя последовательными выводами временных срезов
nGK = 1 |int {0,5} |задает тип реконструкции, 0 – метод Годунова, 1 – метод Годунова-Колгана, 2..5 – число итераций реконструкции.
Ограничения на beat.ini:
Содержит строки вида ключ = значение;
# в первом символе означает комментарий;
строки без = игнорируются;
После #[Features] значение разбивается на зоны с помощью | ;
количество зон должно быть 3;
зона 1 - значение по умолчанию;
зона 2 - описание типа;
зона 3 - текст метки в диалоге;
формат типа : тип и дополнительно может быть текст в {} ;
тип бывает double, string, slider, combo, int .
Пример описания типа
int {0,5}
в {} через запятую минимальное и максимальное значение данной переменной для double, slider, int.
для combo через запятую значения для селектора QComboBox, причем в формате value:text
Пример описания параметра
test=2 |combo {1:aaa,2:bbb,3:ccc,4:ddd} |my combo
параметр с названием test будет визуализирован как селектор с меткой my combo и парами: значение (текст ) вида 1(aaa), 2(bbb),3(ccc),4(ddd). Начальное значение = 2.
Препроцессор в начале работы загружает файл beat.ini и настраивает свои структуры данных. Появляется интерфейс пользователя как на рис.1. (Локализация обеспечивается средствами Qt).

Рис.1. Стартовый интерфейс препроцессора
Вверху меню команд.
Слева расположена древовидная структура из секций, содержащих объекты.
Секций пока три: Геометрия, Датчики, Параметры задачи.
Справа окно для визуализации условий задачи.
Первым делом надо сформулировать условия задачи (проекта). Вызываем из меню Проект/Задать проект. Появляется диалоговое окно как на рис.2

Рис.2. Основные параметры задачи
Задаем число точек по каждой оси, число процессоров для расчета по каждой оси, потом рабочую область (рис.3), материалы (рис.4).

Рис.3. Задание рабочей области

Рис.4. Задание материалов
После этого можно приступить к определению геометрии задачи.
Команды создания геометрических примитивов включают: Добавить сферу, Добавить ящик, Добавить цилиндр, Добавить тетраэдр, Добавить poly-объект, Добавить датчик. После создания геометрического объекта его можно редактировать и задавать физические свойства.
Например, создаем сферу с газом (рис.5).

Рис.5. Создание сферы
Появляется объект как на рис.6

Рис.6. Результат добавления сферы
После этого можно задать физические свойства у нового объекта (рис.7).

Продолжая в том же духе, добавляем геометрические примитивы, приходим к состоянию, как на рис.8.
;
Рис.8. Итоговая геометрия (строения и облако газа повышенного давления)
Затем уточняем параметры задачи с помощью диалогов, как на рис.9.

Рис.9. Ввод параметров задачи
После этого с помощью команд меню можно сохранить состояние задачи (проекта) в ini-файле. С возможностью последующего редактирования с помощью Файл/открыть проект. Пример ini-файла:
#BEAT generated
pProblemName=ach2
NX_SHOCK=10
NY_SHOCK=10
NZ_SHOCK=10
nCheckFiles=2
nBoundary_0=2
nBoundary_1=2
nBoundary_2=2
nBoundary_3=2
nBoundary_4=0
nBoundary_5=1
nNXProcessors=1
nNYProcessors=1
nNZProcessors=2
x_0=-200
y_0=-200
z_0=0
x_1=200
y_1=200
z_1=300
NS=2
material_0=air.mat
material_1=propane.mat
Cu=5.4
tMax=1.33
nRaspad=2
dGridExp=0.5
LX=1
RX=12
LY=1
RY=13
dh_pressure_field=1.133
nOutImpulse=250
NXD=105
NYD=110
nTurbulenceOn=0
dOutTime=0.0012
nGK=1
#[GEOM]
features=pressure,temperature,velocityX,velocityY,velocityZ
sphere=0,0,15.2,15.2,0,1e+06,294,2,0,0,s1
box=-48.485,71.245,4,34.15,16.71,8,-1,100000,293,0,0,0,box0
box=-14.9,75.75,4,4.68,11.56,8,-1,100000,293,0,0,0,box1
box=56.64,72.845,4,95.5,17.51,8,-1,100000,293,0,0,0,box2
box=164.565,71.575,4,30.81,19.11,8,-1,100000,293,0,0,0,box3
box=216.655,69.265,4,33.41,14.23,8,-1,100000,293,0,0,0,box4
box=-113.61,9.955,4,12.16,46.51,8,-1,100000,293,0,0,0,box5
box=159.155,3.205,4,149.23,11.63,8,-1,100000,293,0,0,0,box6
box=-70.54,-41.43,4,6.08,14.7,8,-1,100000,293,0,0,0,box7
box=92.895,-53.895,4,30.07,34.95,8,-1,100000,293,0,0,0,box8
box=-113.275,-62.345,4,9.49,24.73,8,-1,100000,293,0,0,0,box9
box=-44.745,-64.26,4,55.67,15.3,8,-1,100000,293,0,0,0,box10
box=206.47,-63.085,4,51.12,12.43,8,-1,100000,293,0,0,0,box11
box=-73.14,-160.695,4,44.44,19.43,8,-1,100000,293,0,0,0,box12
box=-22.25,-208.705,4,142.88,24.99,8,-1,90000,333,0,0,0,box13
tetra=50,50,50,100,50,50,50,100,50,50,50,100,0,1e+06,293,0,0,0,t1
default=0,100000,290,10,20,30,media2
nGadgets=3
gadgetX_0=30
gadgetY_0=0
gadgetZ_0=0
gadgetX_1=0
gadgetY_1=70
gadgetZ_1=0
gadgetX_2=0
gadgetY_2=0
gadgetZ_2=-20
Генерация файла заполнения пространства является дополнительной опцией. Этот файл содержит информацию о свойствах точек внутри рабочей области. Пока используется равномерное разбиение рабочей области.
Разработанную геометрию можно сохранить в формате vtp (используется программой визуализации ParaView компании Kitware) и загрузить в другой проект, создав в нем poly-объект и указав путь к vtp-файлу.
Настраиваемость препроцессора BEAT позволяет использовать его совместно с различными процессорами, использующими ini-файлы или файлы заполнения пространства.