Почему востребовано моделирование плазмы
Плазма — это заряженный газ, некоторую долю которого составляют ионы и электроны. Она бывает горячей и холодной, при этом граница деления интуитивно непонятна. Холодная плазма обычно используется в промышленности. Горячая плазма — такая, как на солнце или в реакторах будущего.
Моделирование плазмы востребовано потому, что технологии и их реализация «в железе» достаточно дорогостоящие. Гораздо дешевле проверить работоспособность идеи, подобрать оптимальную конфигурацию разряда, оценить эффективность системы заранее, чем несколько раз переделывать установку.
Исследования в любой научной области имеют три подхода: эксперимент, теория и математическое моделирование. Обычно в научных институтах программному обеспечению уделяется меньше внимания, чем теории и эксперименту. Эксперимент считается «настоящей деятельностью», целью, подтверждением теории, главным критерием. Теория считается «настоящей наукой». А моделирование вроде как нужно, но часто некому этим заниматься. Поэтому оно широко применяется там, где эксперимент пока невозможен, либо иногда в технологиях, где внимание уделяют оптимизации.
Кто и как разрабатывает ПО в НИИ
В научных учреждениях ПО разрабатывают не программисты, а ученые или их студенты. В нашей научной группе сложилась уникальная ситуация: наши студенты и есть программисты. В научном ПО обычно главное, чтобы оно работало и результат моделирования совпадал с экспериментом. Стандартной практикой, например, является полное отсутствие пользовательского интерфейса и текстовый формат входных и выходных данных. Иногда проводится постобработка результатов скриптами ради визуализации, которая помогает пониманию физики и публикации в журналах.
Код пишется долго, потому что физику можно описывать сколь угодно подробно. Релизами мы называем версии, которые более-менее устойчиво дают одинаковый результат при одинаковых входных данных. В большей части задач присутствуют вопросы сходимости решения.
В нашей команде есть физик (без него успеха точно не будет), математик, программисты и тестировщик, который будет запускать ПО. Он говорит, что надо доработать, чтобы версия была не хуже предыдущей, проводит расчеты и анализирует результаты по договорам с заказчиками.
Нетривиальные задачи нашего ПО
Наше ПО называется KITe (Kinetic Transport), написано на С++. Оно предназначено для моделирования транспорта примеси в фоновом газе или слабоионизованной плазме низкого давления, а также для моделирования емкостного высокочастотного (ВЧ) разряда в произвольных 3D-геометриях. Моделирование транспорта примеси уже применялось для расчета скорости загрязнения диагностических зеркал экспериментального термоядерного реактора ИТЭР. Моделирование ВЧ-разряда предполагается проводить для расчета эффективности очистки тех самых диагностических зеркал, а также для задач напыления пленок ВЧ-магнетронами.
KITe использует кинетический подход и метод PIC (частиц в ячейках): каждая частица моделируется в коде по отдельности, с пересчетом координат и скорости на малых шагах времени, с учетом столкновений с другими частицами, со стенками, влияния магнитного и электрического (в т. ч. самосогласованного) полей. Такой подход более ресурсоемкий и потому менее популярный, чем гидродинамический, применимый при высоких давлениях.
С технической стороны можно выделить несколько нетривиальных задач, решаемых в коде. Во-первых, организация параллельной работы кода. Для быстродействия его основной части организована параллельность по потокам, но используемая библиотека для решения СЛАУ (система линейных алгебраических уравнений) рассчитана на параллельность по процессам.
Во-вторых, отдельную сложность представляет расчет самосогласованных электрических полей в разряде. Он требует решения дифференциального уравнения с хитрыми граничными условиями на треугольной расчетной сетке. Далее, имея желание сделать расчеты достаточно быстрыми (для нас «быстрыми» означает порядка суток времени вычислительного кластера), мы решаем задачу оптимизации распределения частиц по скоростям.
Отдельного внимания заслуживает менеджер частиц, призванный в первую очередь уменьшить объем потребляемой памяти при расчете. При моделировании взаимодействия частицы со стенкой для определения треугольника поверхностной сетки, в котором произошло столкновение, используется дерево BVH (Bounding Volume Hierarchy). Наконец, дополнительное ускорение работы достигается с помощью инструмента Intel AVX (Advanced Vector Extensions). KITe имеет пользовательский интерфейс, с помощью которого можно настроить все входные параметры расчета и визуализировать результаты с небольшой постобработкой.
Заключение
KITe уже позволяет решать ряд важных задач и имеет хороший потенциал для расширения применимости. Если у вас есть подходящие задачи или умение и желание добавить в KITe функциональности, будем рады сотрудничеству!
Конечно, в жизни команды разработчиков в научном институте есть много плюсов. Никто кроме собственного тимлида не скажет вам, что делать, потому что никто больше в этом не разбирается. Ученые будут бурно радоваться вашим результатам, даже если они немного противоречат предыдущим. Вы сможете сами выбирать тактику, стратегию и людей в команду. И даже находить заказчиков на ваше ПО или результаты расчетов! А также коллег из других институтов, экспертов, консультантов и других нужных людей, если они вам вдруг понадобятся.
Кроме моделирования программирование нужно и в других сферах работы научного института. Например, в обработке результатов эксперимента, в численном решении уравнений теоретиков, в организации процесса публикации научных журналов и в разработке сайта института. Задач очень много, и вы можете решать любую.