Введение
Моделирование кинетики частиц и химических реакций в низкотемпературной плазме является важным инструментом как в фундаментальных исследованиях, так и при решении прикладных задач плазмохимии. Библиотека AutoPlasma [1], разработанная автором, предоставляет гибкие средства для численного расчёта параметров плазмы с возможностью выбора высокопроизводительных вычислительных бэкендов (Numba, Taichi). Однако библиотека не имеет встроенного графического интерфейса, что ограничивает её применение кругом специалистов, готовых работать исключительно через конфигурационные файлы и программный код.
Для устранения этого ограничения было разработано кроссплатформенное оконное приложение, предоставляющее удобный доступ ко всем функциям AutoPlasma: загрузку входных данных, редактирование параметров модели, запуск расчётов, визуализацию результатов в виде таблиц и графиков, а также экспорт данных. Приложение построено на современном фреймворке Flet и строго следует архитектурному паттерну Model-View-Controller (MVC), что обеспечивает модульность, тестируемость и простоту дальнейшего развития.
Архитектура приложения и используемые технологии
Приложение реализовано в соответствии с паттерном MVC [4], который чётко разделяет ответственность между компонентами (рис. 1). Модель (Model) инкапсулирует экземпляр класса PlasmaFacade — главного интерфейсного класса библиотеки AutoPlasma — и всю бизнес-логику: загрузку файлов конфигурации, получение и установку значений параметров, запуск вычислительного процесса и хранение полученных результатов. Модель реализует паттерн «наблюдатель», что позволяет всем зарегистрированным представлениям автоматически обновляться при изменении состояния.
Рис. 1. Архитектура приложения на основе паттерна MVC
Контроллер (Controller) выступает посредником между пользовательским интерфейсом и моделью: он принимает действия (нажатия кнопок, ввод в поля) и вызывает соответствующие методы модели. Контроллер не содержит собственного состояния и не обращается к фасаду напрямую, что упрощает замену или модификацию как модели, так и представлений.
Представления (View) реализованы с использованием фреймворка Flet [2], который позволяет создавать нативные по внешнему виду и поведению приложения для Windows, Linux и macOS на языке Python. Каждое представление подписывается на уведомления от модели и при получении сигнала об изменении перестраивает свой интерфейс, запрашивая актуальные данные через контроллер. Для построения графиков используется библиотека Matplotlib [3], результаты расчётов экспортируются в форматы CSV и YAML.
Вычислительная производительность AutoPlasma обеспечивается за счёт компиляции критических участков кода с помощью Numba или Taichi (выбор бэкенда осуществляется пользователем). Асинхронные операции загрузки файлов и запуска расчётов реализованы с использованием библиотеки asyncio, однако выполнение кода Taichi требует синхронного режима, что приводит к кратковременной блокировке интерфейса на время расчёта, что является допустимым компромиссом.
Особенности реализации
Вся коммуникация с библиотекой AutoPlasma ведётся исключительно через методы класса PlasmaFacade. Такой подход скрывает внутреннюю сложность и изолирует приложение от изменений во внутренней структуре библиотеки. Пример инициализации фасада и загрузки данных:
self._facade = PlasmaFacade()
self._facade.load_simulation_data(filepath)
self._facade.load_process_data(filepath)
self._facade.load_reactions(filepath)
Модель хранит внутренние словари параметров симуляции и процесса, где для каждого параметра помимо значения сохраняются флаг корректности и текст ошибки. При загрузке файлов или после изменения значения через интерфейс словари обновляются путём вызова методов фасада get_simulation_parameter_value и get_process_parameter_value. Это позволяет представлениям мгновенно отображать валидацию (например, красный индикатор с всплывающей подсказкой) без дополнительных обращений к фасаду.
Ниже на рисунке 2 представлена оконная форма со списком параметров и возможностью запуска расчета:
Рис. 2. Оконная форма одиночного запуска со списком параметров
Одной из нетривиальных задач стала работа с долями компонентов газовой смеси (словарь y_dict). Фасад проверяет равенство суммы долей единице при установке каждого отдельного значения, что делает невозможным пошаговое редактирование: при вводе, например, значения 0.5 для аргона сумма становится 0.5, фасад отклоняет изменение и сбрасывает поле. Для решения проблемы реализована кнопка «Применить доли», которая собирает все текущие значения из полей ввода и отправляет их в фасад одним вызовом:
def _apply_y_dict(self, e):
current = {gas: tf.value for gas, tf in self._y_dict_fields.items()}
self._controller.set_y_dict(current)
После нажатия кнопки фасад проверяет сумму один раз и принимает все значения, если условие выполнено.
Параметры симуляции с булевым типом (например, do_consistent_n_e, do_ions) отображаются не текстовыми полями, а элементами ft.Checkbox. При изменении состояния чекбокса в фасад передаётся строка «true» или «false»:
cb = ft.Checkbox(label=info.name, value=value.lower() == «true»)
cb.on_change = lambda e, pn=param_name: self._controller.set_simulation_param(pn, str(e.control.value).lower())
Список плазмохимических реакций отображается в виде таблицы ft.DataTable (рис. 3). Редактирование доступно только для константы A (предэкспоненциальный множитель), так как фасад предоставляет методы для получения и установки именно этого параметра. Остальные константы остаются нередактируемыми, что соответствует текущим возможностям библиотеки.
Рис. 3. Оконная форма с реакционной схемой
После завершения расчёта модель сохраняет результаты в атрибуте _last_results. Представления SingleRunView и ResultsView, подписавшись на модель, автоматически обновляются: строят таблицу финальных концентраций компонентов и столбчатую диаграмму с помощью Matplotlib (рис. 4).
Рис. 4. Оконная форма с графиком результатов расчета
Для экспорта данных предусмотрены кнопки сохранения в CSV и YAML.
Ключевые фрагменты кода
Ниже приведён фрагмент контроллера, демонстрирующий асинхронный запуск расчёта без блокировки основного потока интерфейса:
async def run_single_simulation(self) -> None:
self._set_status(«Запуск симуляции»...)
results = await asyncio.to_thread(self._model.run_simulation)
self._model.set_last_results(results)
self._set_status(«Расчёт завершён»)
Пример подписки представления на обновления модели:
class SimulationParamsView:
def __init__(self, model, controller):
self._model = model
self._model.register_observer(self.update)
Результаты
Разработанное приложение успешно интегрирует вычислительные возможности библиотеки AutoPlasma в интуитивно понятный графический интерфейс. Применение паттерна MVC обеспечило чёткое разделение обязанностей: модель полностью изолирует логику работы с плазмохимическими данными, контроллер управляет потоком действий, а представления, построенные на Flet, отвечают только за отображение. Такой подход упрощает поддержку кода и позволяет при необходимости заменить библиотеку визуализации или фреймворк GUI без переписывания бизнес-логики.
Использование фасада PlasmaFacade в качестве единственной точки входа в AutoPlasma позволило абстрагироваться от внутренних изменений библиотеки и сосредоточиться на интерфейсных задачах. Реализация наблюдателя обеспечила автоматическую синхронизацию всех открытых представлений, избавив разработчика от необходимости ручного обновления элементов интерфейса.
Кроссплатформенность, достигаемая благодаря Flet, делает приложение доступным для исследователей, работающих в различных операционных системах. Возможность визуального редактирования параметров, мгновенная валидация вводимых значений и наглядное представление результатов расчётов существенно снижают порог вхождения для новых пользователей библиотеки AutoPlasma.
Заключение
В результате работы создано полнофункциональное кроссплатформенное приложение для моделирования плазмохимических процессов, объединяющее мощный вычислительный инструментарий библиотеки AutoPlasma и современный графический интерфейс на базе Flet. Приложение реализует паттерн MVC, использует фасад для изоляции сложности модели и поддерживает все ключевые операции: загрузку конфигураций, редактирование параметров с проверкой корректности, запуск расчётов, визуализацию и экспорт данных. Полученный программный продукт может найти применение как в научных исследованиях в области физики низкотемпературной плазмы, так и в образовательном процессе при изучении численных методов плазмохимии.
Дальнейшее развитие проекта предполагает расширение возможностей визуализации (построение временных зависимостей концентраций), интеграцию с облачными хранилищами для обмена конфигурациями и реализацию пакетного режима запуска серии расчётов.
Литература:
- AutoPlasma: библиотека для моделирования низкотемпературной плазмы. — URL: https://github.com/username/autoplasma (дата обращения: 15.04.2026).
- Flet documentation. — URL: https://flet.dev/docs/ (дата обращения: 16.04.2026).
- Matplotlib: Visualization with Python. — URL: https://matplotlib.org/ (дата обращения: 16.04.2026).
- Gamma, E. Приёмы объектно-ориентированного проектирования. Паттерны проектирования / Э. Гамма, Р. Хелм, Р. Джонсон, Дж. Влиссидес. — СПб.: Питер, 2020. — 368 с.

