Введение
Здравствуйте меня зовут Роман, я занимаюсь обеспечение пожарной безопасности в зданиях и сооружениях более 15 лет, основной профиль моей деятельности — это моделирование развития пожара.
В основном моделирование развития пожара провожу в специализированном программном обеспечении Fire Dynamics Simulator (FDS), оно используется от Японии до США при обосновании отступлений требований пожарной безопасности.
При моделировании развития пожара очень много времени занимает обработка результатов моделирования. В цикле статей я хочу поделиться способами обработки данных, которые использую при работе.
Статья ориентирована на специалистов, которые уже используют FDS в работе. Подробности моделирования развития пожара с помощью FDS в данной статьи не будут рассматриваться.
Эта статья — вторая из серии. Ссылка на первую статью.
Интенсивность тепловыделения
При моделировании FDS создаёт несколько файлов, одни из них является файл оканчивающийся на _hrr.csv
. Этот файл содержит некоторую информацию о моделировании, такую как о выделенном тепле, массе и потерях энергии. Через этот файл возможно оценить правильность настроек моделирования.
Согласно, технической документации на FDS? для задания обычной газовой горелки можно использовать параметр HRRPUA
. HRRPUA
необходимо задавать значения в единицах измерения . Для примера возьмём моделирование горения при условии, что горелка должна обеспечивать интенсивность тепловыделения (далее — HRR) 63
. Чтобы установить соответствующее значение
HRRPUA
, необходимо разделить HRR на площадь горения, то есть на площадь, в которую будет подаваться горючий газ. Горелка в примере представляет собой квадрат с размерами стороны 0,4 . Таким образом, значение
HRRPUA
составит:
.
Несмотря на кажущуюся простоту задачи, повторный анализ результатов остаётся необходимым. Во-первых — исключение вероятности ошибок, допущенных в ходе вычислений. Во-вторых, в FDS все OBST
и VENT
должны быть согласованы с размерами ячеек сетки, которые задаются в MESH
. В случаях, когда VENT
не согласуется с размерами ячеек FDS автоматически корректирует их положение. Площадь VENT
может измениться, а следовательно, и количество горючего газа, поступающего в область.
Импорт данных
Для первичной обработки данных я использую Jupyter Notebook. На примере него я буду рассказывать свои действия. Код в виде блокнота Jupyter Notebook'а и примеры данных будут лежать по ссылке.
Нас интересует содержание столбца «HRR» файл, оканчивающийся на hrr.csv
. Структура файла, оканчивающийся на hrr.csv
:
первая строка содержит единицы измерения данных в соответствующем столбце;
вторая строка — заголовки столбцов;
с третьей строки идут сами данные. Существует множество способов чтения CSV-файлов с помощью Python, в данном примере мы рассмотрим чтение данных с помощью библиотеки Pandas.
В прошлой статье я не упомянул о правилах импорта данных. Сначала необходимо указать путь к файлу. В Python это можно сделать множеством способов, в данном примере мы будем использовать библиотеку os
. С помощью os.path.join("ваш", "путь", "здесь") указываются метки файлов в виде каталогов, разделённые запятыми, создаёт путь, подходящий операционной системы, в которой выполняется этот скрипт. Это полезно при совместном использовании скрипта на различных операционных системах, например, при использовании скрипта на Windows и Linux.
Библиотека matplotlib
предназначена для построения различных графиков
Потом файл считывается, как DataFrame
, используя библиотеку Pandas. Библиотеки в Python, как правило, импортируются в начале файла. Импортируем библиотеку import pandas as pd
. В библиотеки Pandas есть метод read_csv()
этот метод должен получить путь к файлу, в нашем случае данный путь будет получен из переменой hrr_path
. Кроме, данному методу необходимо передать значение строки, которая будет использоваться в качестве заголовков столбцов. Поскольку первая строка содержит единицы измерения, а заголовки столбцов находятся во второй строке, мы устанавливаем header=1
(нумерация в Python начинается с 0). DataFrame
предоставляют возможность просмотреть 5 первых строк head()
либо 5 последних строк tail()
.
В качестве примера прочитаем файл Example 2_hrr.csv
.
# необходимые библиотеки
import os
import matplotlib
import matplotlib.pyplot as plt
import numpy as np
import pandas as pd
# Указать путь к файлу
hrr_path = os.path.join("Example 2_hrr.csv")
# Прочитать CSV-файл как Pandas DataFrame.
hrr_df = pd.read_csv(hrr_path, header=1)
# Показать результат первых 5 строчек
hrr_df.head()

С помощью DataFrame
можно получить доступ к отдельным столбцам по их заголовкам, например, используя hrr_df["Time"]
. Если заголовок столбца представляет собой непрерывную строку, т.е. без пробелов, можно также получить доступ к столбцу напрямую, hrr_df.HRR
.

# Получение доступа к отдельным столбцам
hrr_df.HRR

Используя list(DataFrame)
, можно получить список с заголовками столбцов.
# Список с заголовками столбцов
list(hrr_df)

Сравните моделирование с целевым показателем
Чтобы сравнить результаты моделирования с целевым показателем, мы просто отобразим динамику HRR с течением времени. Обратившись к началу статьи, мы вспомним, что целевым показателем является значение 63 . Для наглядности мы также нарисуем пунктирную линию, отражающую целевое значение.
# Пунктирная линия с целевым показателем 63 кВт
plt.plot([0, 63],
[63, 63],
color="k", alpha=0.4,
linestyle="--",
label="Цель")
# График с результатами моделирования
plt.plot(hrr_df["Time"],
hrr_df.HRR,
label="Моделирование")
# Метаданные графика
plt.xlabel("Время, с")
plt.ylabel("HRR, кВт")
plt.legend()
plt.grid()

Вывод
В статье показан этап обработки результатов моделирования в FDS с использованием Python и Jupyter Notebook. Рассмотрены принципы работы с файлами, которые создаются автоматически при задании горения в FDS их импорт и первичная фильтрация данных.