В прошлом году в связи с пандемией мы проводили онлайн конференцию, и для неё делали логотип, который был, мягко говоря, так себе. Под катом рассказ о том, как мы его прокачали для конференции этого года при помощи небольшого количества квантовой механики, метода Монте-Карло, Python и Gnuplot.

Немного предыстории

2020 год, короновирус набирает силу, ограничения вводятся, и для поддержания уровня научной дискуссии, улучшения научного сотрудничества среди русскоязычных учёных, разбросанных по всему миру, мы организовывали онлайн мини-симпозиум по вычислительной химии. Но что за конференция без логотипа? И собрав в кулак все художественные (от слова "худо") возможности оргкомитета конференции, в Inkscape был выстрадан логотип:

Изначальный логотип, который мы сделали при помощи Inkscape и Jmol+Gimp (для рисования фуллеренов).

Содержание простое: в верхней левой части у нас есть светлячок, который по совместительству d-образная орбиталь, справа летают бакминстерфуллерены, слева внизу присутствует стилизованный гауссовообразный лазерный импульс. Ну и в самом низу олицетворение всея квантовой механики: буква ψ, привычно обозначающая волновую функцию, и эта буква стилизована под факел. Несмотря на присутствие огня внутри картинки, сам логотип получился далеко не огонь. Поэтому в этом году мы предприняли попытку to Pimp My Ride Logo.

Рисуем светлячка из настоящих орбиталей

Основным элемента логотипа, который был в 2020 году, был светлячок-орбиталь. Его мы и захотели сохранить и улучшить. И что может быть более крутым, чем настоящая орбиталь?

Поэтому мы решили собрать нового светлячка из настоящих орбиталей. Ограничиться решили несколькими составными частями:

  • крылья,

  • туловище,

  • голова,

  • и последним элементом было свечение туловища, собственно огонь.

Все эти штуки мы решили представить в виде каких-то орбиталей ψ (волновых функций), зависящих от координат (x,y,z)=r. Красивой и простейшей идеей показалось отобразить квантовость при помощи семплирования по методу Метрополиса. Волновая функция в данном случае была бы представлена как траектория точек r0, r1, r2, ..., rN, N - это длина траектории. В каждой из этих точек нам ещё известно значение волновой функции ψn=ψ(rn). Сам алгоритм семплирования простейший, и пишется на Python за три минуты:

  • находясь в точке rn мы генерируем новую пробную точку rtrial,

  • вероятность принятия новой точки равна pacc = |ψtrial|2/|ψn|2, генерируя значение q из равномерного распределения от 0 до 1, мы сравниваем pacc и q: если pacc<q, то мы остаёмся в той же точке (), а если нет, то переходим в новую точку ().

Крылья

Начать решили с крыльев. d-орбитали можно записать по разному. Мы решили начать с орбитали dxy