Войти
ПрограммированиеСтатьиФизика

Гидродинамика Шрёдингера на пальцах (2 стр)

Автор:

Гидродинамика Шрёдингера

Как представить волновую функцию


В первую очередь заметим, что уравнение Шрёдингера будет формулироваться относительно неизвестной величины, называемой волновой функцией \(\Psi(\vec x, t)\). Эта функция может состоять из одной или нескольких комплексных компонент. В самом простом случае компонента одна, используем для неё маленький символ \(\psi(\vec x, t) = \psi_{re}(\vec x, t) +i\psi_{im}(\vec x, t)\), здесь \(\psi_{re}\) — действительная часть волновой функции, \(i\psi_{im}\) — мнимая. Напрашивается вопрос — откуда вообще может взяться мнимая часть у величины, описывающей реальный физический процесс? Ничего страшного, это далеко не самый странный парадокс, который мы сегодня рассмотрим. Более того, в квантовой физике ни реальную, ни мнимую часть волновой функции в явном виде наблюдать принципиально невозможно. В квантовой физике можно наблюдать только величину:
\(\bar \psi \psi= (\psi_{re}-i\psi_{im})(\psi_{re}+i\psi_{im})=\psi^2_{re}-i^2\psi^2_{im}=\psi^2_{re}+\psi^2_{im}=|\psi|^2\)
Эта величина определяет вероятность нахождения частицы в точке пространства. При этом сами компоненты (и абсолютное значение фазы, то есть угла поворота) комплексной функции никакой роли не играют. Более того, если в квантовой физике фазу всех частиц (или в случае гидродинамики поля течений) сдвинуть на постоянную величину, то вообще ничего не поменяется.

Вопрос, который нужно себе задать перед тем, как приступать к рассмотрению уравнения Шрёдингера — это как вообще соединить неизвестные из уравнения Навье-Стокса (скорость, давление) с неизвестными из уравнения Шрёдингера (волновая функция). И что вообще обозначает эта волновая функция? К сожалению, мне не известно простое и наглядное объяснение того, как коротко и ясно описать, что значит волновая функция. Однако, я приведу несколько её ключевых свойств, вытекающих из преобразования Маделунга, который, напомню, неким образом преобразовал скорость к волновой функции.

Первое замечание — модуль волновой функции при моделировании гидродинамики будет обозначать плотность жидкости в точке. В случае несжимаемой жидкости плотность постоянна, поэтому можно её принять за единицу:
\(|\psi|^2=\bar \psi \psi=1\)
Это значит, что если представить волновую функцию в полярном представлении, то есть: \(\psi=r\cdot e^{i\phi}\), то \(r=1\). Напомню, что любое комплексное число \(c=a+ib\) всегда можно разложить в виде \(c=\sqrt{a^2+b^2}e^{i \cdot \arctan(b / a)}=r\cdot e^{i\Theta}\), при этом \(r=\sqrt{a^2+b^2}=|\psi|\) будет определять модуль числа \(c\), а \(\Theta =\arctan(b / a)\) будет определять угол на комплексной плоскости, который ещё называется фазой. При этом широко используется соотношение комплексной экспоненты: \(e^{i\phi}=\cos(\phi)+i \sin(\phi)\). Умножение же некоторого комплексного числа \(c\) на комплексную экспоненту \(c \cdot e^{i\phi}\) эквивалентно повороту числа \(c\) на комплексной плоскости на угол \(\phi\).
То есть в случае гидродинамики вектор волновой функции будет только вращаться, его длина будет постоянной.

Следующее замечание — квантовомеханическое уравнение шрёдингера может быть записано для сложной волновой функции \(\Psi=[\psi_1, \psi_2,...,\psi_N]\), состоящей из произвольного количества компонент (каждая компонента \(\psi_i\)— комплексное число). Состояние жидкости может быть также описано волновой функцией из разного количества компонент. Авторы метода попробовали одну компоненту и заметили, что оно ведёт себя как-то не так. Попробовали две компоненты и вуаля — заработало нормально. Почему две? Почему не три? Почему не 17? Что это значит? — это открытые вопросы, на которые ни я, ни автор оригинальной статьи ответов не знают. Мы же будем далее полагать, что наша волновая функция состоит из двух компонент : \(\Psi = \{\array{ \psi_1 \\ \psi_2}\). Тогда условие непрерывности будет формулироваться так: \(|\Psi|^2 = \bar \Psi^T\Psi=|\psi_1|^2+|\psi_2|^2=1\)

Ещё одно свойство волновой функции установил тот же самый Маделунг — если фаза волновой функции в объёме постоянна, то эта волновая функция описывает нулевую скорость в этом объёме. То есть скорость будет в тех областях, где пространственно меняется волновая функция. Более того, забегая вперёд, скажу, что скорость будет типично определяться направлением увеличения фазы волновой функции. Например, если мы захотим задать постоянную скорость слева направо в некотором объёме, мы зададим волновую функцию, у которой фаза в этом объёме справа больше, чем фаза слева. Другими словами, вектор скорости жидкости определяется пространственным градиентом фазы волновой функции. Вот так выглядит пример скорости на нескольких первых шагах для таких же начальных условий, как на видосе с предыдущей страницы:
Изображение Изображение Изображение Изображение
Здесь показан срез первой компоненты (на вторую для простоты забьём) волновой функции двух шаровых объёмов, в которых скорость задана навстречу друг другу. Красным и зелёным каналами показаны действительная и мнимая компоненты волновой функции. Обратите внимание, что волновая функция — повсюду константа, а внутри кругов у них фаза нарастает навстречу друг другу. Интересным следствием такого представления является тот факт, что максимально возможная скорость, которую можно описать такой системой, определяется разрешением сетки — если разница фаз двух соседних текселей попробовать сделать больше \(\pi\), то она перескакивает период и становится меньше.

С течением времени волновая функция разъезжается, но количество периодов, на которое меняется фаза волновой функции, будет постоянным, а значит, у скорости будет сохраняться циркуляция. Другими словами, если же на замкнутом пути фаза волновой функции набегает какую-то величину (не ноль), это значит, что внутри этого пути где-то проходит жгут с вихрем. Вдумайтесь — это значит, что волновая функция описывает не сами значения скорости, а топологию этих значений. То есть она описывает пути, по которым циркулирует жидкость, которые остаются стабильными при моделировании, что позволяет результирующему методу подолгу сохранять мелкие турбулентные завихрения даже на грубой сетке.

Поясню, почему так происходит. Представьте себе мысленную замкнутую траекторию, которая проходит по волновой функции. Так как траектория замкнутая, то мы всегда придём в ту же точку, откуда начали. Это значит, что мы закончим на той же фазе, на которой начали. Это означает, что за весь путь суммарное смещение фазы будет либо нулевым, либо кратным \(2\pi\). Если смещение нулевое, то внутри траектории нету вихревого жгута, иначе — есть. Так вот набегаение фазы, которое всегда кратно \(2\pi\), сохранять гораздо проще и стабильнее, чем пытаться сохранять энергию потока или импульс, которые могут применять произвольные значения. То есть волновая функция описывает топологию потока, а не только его структуру. Это как сказать, что объект топологически эквивалентен тору (или восьмёрке, например), вместо того, чтобы пытаться описать его конкретную поверхность.

И последнее свойство волновой функции в гидродинамике, которое я считаю определяющим как для понимания, как это работает, так и для эффективной реализации метода. Помните, как влияет давление на скорость в классической гидродинамике?
\(\vec u=\vec u^* + \vec \nabla p\)
То есть градиент давления определяет то, куда "расталкивается" скорость. Так вот на поле скоростей, описанное волновой функцией \(\Psi^*\), поле давления \(p\) влияет так:
\(\Psi=e^{-\frac{ip}{h}}\Psi*\), здесь \(h\) — постоянная Планка, которая ещё не раз всплывёт далее.

Именно последнее уравнение я считаю определяющим уравнением всей затеи. Мы его принимаем без вывода и доказательства (трудненько), но на пальцах его суть в том, что применение давления поворачивает фазу волновой функции в каждой точке на величину, определяемую этим давлением. Напомню, потому что умножение на комплексную экспоненту — это поворот на комплексной плоскости. Всё встаёт на свои места — если у давления есть градиент, то и фаза будет меняться по этому градиенту, а градиент фазы, как мы уже раньше установили — это скорость. То есть применение градиента давления изменяет градиент скорости. То есть фазу волновой функции в точке можно интуитивно представить как суммарное влияние давления, накопленное в этой точке пространства. Причём это точная формула, а не приближённая. Именно на этом свойстве, ещё даже не вводя в разговор уравнение Шрёдингера, можно составить представление, насколько глубже волновая функция описывает состояние жидкости, чем просто скорость. Вместо хранения скорости в явном виде, она хранит накопленное влияние давления на неё. То есть вместо того, чтобы считать, как скорость поменяется после применения давления через приближённый расчёт градиента давления, мы просто смещаем фазу волновой функции без погрешности. Мы выполняем меньше преобразований, храним состояние жидкости в более ёмком представлении, а если надо будет, можем посчитать по нему скорость.

Уравнение Шрёдингера


Пришло время, наконец, завезти в статью само Уравнение. Мы будем использовать уравнение Шрёдингера в таком виде:
\(\frac{\partial d \Psi}{\partial t} =-\frac{ih}{2}\vec \nabla^2 \Psi\), дополненное уравнением непрерывности:
\(Re(\bar \Psi^T i \vec \nabla^2\Psi)=0\)
Здесь \(h\) — мистическая постоянная Планка, которая опять откуда-то всплыла. Второе уравнение подозрительно напоминает уравнение непрерывности \(\vec \nabla \vec u = 0\), и это не удивительно, так как далее выяснится, что \(\vec \nabla \vec u=-hRe(\bar \Psi^T i \vec \nabla^2\Psi)\). Ну а первое уравнение — то самое, уравнение Шрёдингера. Как бы страшно оно ни звучало, само уравнение Шрёдингера решить на удивление нетрудно (по сравнению с остальными частями программы). Более того, если разложить волновую функцию на гармоники, используя fast fourier transform, то это уравнение можно решить точно (с точностью плавающей точки). Сложность на самом деле только во втором уравнении, являющемся уравнением непрерывности. А для его решения будет использоваться тот же самый подход, что и в классическом солвере, через нахождение давления через решение уравнения Пуассона:
\(\vec \nabla^2 p=-\vec \nabla u^*\)
Далее вспомним, что мы можем посчитать \(\vec \nabla u^*\) через формулу \(\vec \nabla \vec u=-hRe(\bar \Psi^T i \vec \nabla^2\Psi)\). И на самом деле вуаля. Система замкнулась. Больше-то нам ничего не надо, чтобы решить полученную систему! То есть решение точно так же будет состоять из фазы адвекции, которой на этот раз соответствует решения уравнения Шрёдингера, а потом проекции, чтобы гарантировать уравнение непрерывности. Таким образом, можно составить полную схему алгоритма.

Адвекция

Сначала мы решаем уравнение Шрёдингера:
\(\frac{\partial d \Psi}{\partial t} =-\frac{ih}{2}\vec \nabla^2 \Psi\)
я решаю через fft, но на самом деле пробовал решать и без него, просто в лоб посчитав лапласиан и посчитав изменение волновой функции. Даже так работает, только разваливается через несколько секунд. Но для тестов сойдёт.

Проекция

Далее считаем давление из уравнения:
\(\vec \nabla^2 p = -hRe(\bar \Psi^T i \vec \nabla^2\Psi)\) — правая часть этого уравнения легко считается через конечно-разностную аппроксимацию, левую часть считаем тем же солвером Пуассона, что и для стандартного метода. Имея давление, просто применяем его к волновой функции по нашей любимой формуле:
\(\Psi \leftarrow e^{-\frac{ip}{h}}\Psi\)
И далее переходим к адвекции на следующем временном шаге, зациклив процесс.

Что осталось за кадром


Я умышленно опустил некоторые достаточно важные шаги — например, задание начальных условий. Или, например, тот факт, что расчёт дивергенции скорости по формуле \(\vec \nabla u =-hRe(\bar \Psi^T i \vec \nabla^2\Psi)\) на самом деле даёт так себе результаты и лучше её считать немного по-другому. Обо всём этом можно при желании посчитать в исходной статье и оно, как я считаю, не слишком влияет на обзорное понимание метода. Я бы хотел обратить именно на особенности и на качественные отличия гидродинамики Шрёдингера от Навье-Стокса.

Свойства полученного метода


Первое свойство, которое сразу бросается в глаза при написании метода — даже на этапах отладки, даже пока в нём не исправлены все баги, видно, насколько глубоко в его мат.модели заложена турбулентность. Из-за того, что поле скоростей вокруг вихревых жгутов описывается не в явном виде, склонном к размазыванию, а через набегаение фазы, которое не меняется во время моделирования, вихри оказываются очень стабильными. При этом слияние и разделение вихрей происходит автоматически без выполнения явных операций над топологией. Для сравнения рассмотрим задачу столкновения двух объёмов, которым изначально присвоена скорость навстречу друг другу под углом. Расчёт стандартным методом, основанным на хранении скорости, выглядит так:
Изображение
Этот расчёт, как и все остальные, считается на сетке 1283, в реальном времени на моей ноутбучной GTX1060. Вычисление ведётся в compute shader'е на vulkan'е. Для визуализации используются частицы, которые увлекаются полем скоростей. На анимации видно типичное поведение методов, основанных на хранении скорости в явном виде — поведение жидкости выглядит очень вязко. Чтобы получить турбулентные эффекты нужно было бы сильно увеличивать размер сетки, увеличивая как расход памяти, так и время вычисления. А вот так выглядит тот же расчёт для солвера Шрёдингера при h=0.04 на сетке того же разрешения:
Изображение
Видно, насколько много образуется мелких турбулентных течений, которые так трудно получить другими методами. Ещё одно интересное свойство — солвер Шрёдингера абсолютно устойчив и расчёт остаётся стабильным для, вообще говоря, произвольных параметров, включая огромный шаг по времени или огромные скорости. Эти параметры влияют, однако, на точность, и результаты расчёта получаются немного разными, если считать с dt=0.01с или dt=0.1с, но я затрудняюсь сказать, в чём именно качественное различие и как определить оптимальное значения шага времени.

Следующее принципиально важное свойство гидродинамики Шрёдингера — в ней присутствует параметр \(h\), который никуда не девается. Этого параметра нет в уравнении идеальной жидкости, откуда он берётся и какой его физический смысл в гидродинамике — открытый вопрос. Однако, он имеет совершенно неиллюзорное влияние на результирующее поведение жидкости. Например, вот так выглядит т.н. задача распада разрыва (две половины пространства толкаются в разные стороны) для h=0.1 и для h=0.06 и h=0.03 соответственно:
ИзображениеИзображениеИзображение
Обратите внимание, что бОльшие значения h порождают бОльшие по масштабу турбулентные вихри. Малые значения параметра h порождают мелкие вихри, если их размер становится меньше ячейки расчётной сетки, они "проглатываются" методом. Для сравнения в классическом солвере для таких данных вихрей не образуется вообще:
Изображение
Выдвигается гипотеза, что при уменьшении параметра \(h\) к нулю, поведение жидкости устремится к поведению идеальной жидкости, подчиняющейся уравнению Эйлра, однако, не совсем понятно, почему поведение жидкости вообще получается различным при различных значениях h и что именно обозначает это различие с физической точки зрения.

Другой интересный вопрос — если гидродинамику можно моделировать уравнениями квантмеха, это значит, что и уравнения квантмеха описывают движения некой жидкости. Каков физический смысл этой жидкости? Уверен, некоторые читатели уже давно внутренне кричат в монитор : "ДА ЭТО ЖЕ ЭФИР!!1". Спешу огорчить — вероятно, нет, либо этот эфир выглядит совсем не так, как хочется его представить. Например, нашим уравнениям гидродинамики соответствует квантовая система, состоящая из одной частицы. И "течёт" в этом случае, судя по всему, поле её плотности распределения в пространстве. То есть жидкость, судя по всему, описывает не пространство, а одну частицу. Однако, реальные квантовый системы состоят из множества взаимодействующих частиц, и остаётся открытым вопросом, существует ли гидродинамическая аналогия и для этого случая. Если существует, то, вероятно, она бы описывала характер течения многомерной жидкости, и если у нас N частиц, то жидкость будет 3N-мерная, и натянуть на это концепцию эфира будет трудненько.

Заключение


В этой статье я постарался насколько смог доступно рассказать, как работает стандартный проекционный солвер уравнений гидродинамики, основанный на скоростях, и как работает новый подход, в котором вместо поля скоростей используется волновая функция, а вместо уравнения Навье-Стокса — уравнение Шрёдингера. Очевидно, что у нового метода есть большое количество преимуществ, которые невозможно было получить ранее. Однако, вместе с ними он порождает и огромное количество вопросов: почему у волновой функции именно две компоненты? Какой физический смысл имеет параметр h? Что обозначает математическая связь уравнений гидродинамики и квантовой физики? Имеет ли физический смысл жидкость, описываемая уравнением Шрёдингера в квантовой механике? Какое применение в будущем найдёт этот метод?
Страницы: 1 2

#GPGPU, #физика, #гидродинамика

9 октября 2019 (Обновление: 30 окт. 2019)

Комментарии [97]