Препроцессор для моделирования физических процессов

Блог 17 декабря 2017

Теги: физика,программирование,C++

При моделировании физических процессов традиционным является разбиение задачи на обработку в 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-файлы или файлы заполнения пространства.

Комментарии

yura: 06-01-2018 18:43

Молодец, добавь пару картинок с результатами, может видео

Добавить комментарий могут только авторизованные пользователи. Авторизоваться
Комментарий

Оценка





Авторизоваться через https://www.pvobr.ru
Логин
Пароль
Регистрация

Авторизоваться через соцсети
Наверх