Комментарии 9
Мне кажется вы всё-таки лукавите. "Случайно" изобретаете волновое уравнение, хотя в константах явно указана FLOW_RATE < 0.25 и вообще знаете что такое "Лаплассиан".
Следующий шаг - это неотражающие граничные условия реализовать. Вот где самое интересное, особенно на гексагональной сетке.
Справедливое замечание. Лапласиан я знал — это стандартный оператор. Но я не знал что из него выйдет интерференция без дополнительных условий, фазовый переход без термодинамики, и чётность счётчика частиц без закона сохранения. Именно это я имел в виду под ‘вышло само’ — не незнание инструмента, а неожиданность результата.
Это всё красиво, но в коде де-факто решается конечными разностями уравнение реакции-диффузии с кубическим потенциалом. Иногда называется оно уравнением Фитц-Хью - Нагумо. Есть более простой вариант - уравнение Колмогорова-Фишера.
А описанные эффекты формирования паттернов и наложения волн и не надо никуда закладывать. Интерференция, например, это просто суммирование двух гармонических волн с разными фазами.
Спасибо — это самый точный комментарий под статьёй. Вы правы что терминология размыта.
Уточню: у меня есть явное поле скоростей velocity[][], то есть уравнение второго порядка по времени — ∂²φ/∂t² = c²·Δφ − λ(φ²−V²)φ. Это затухающее уравнение Клейна-Гордона с φ⁴ потенциалом, не реакция-диффузия. FitzHugh-Nagumo и Колмогоров-Фишер — первый порядок, там нет волн, только диффузия. Хотя в пределе сильного затухания мои решения, наверное, к Allen-Cahn и сходятся.
Про интерференцию — согласен полностью, это суперпозиция и она неизбежна из линейности. Стоило написать точнее.
Но чётность числа доменных стенок и сохранение топологического заряда — это уже не суперпозиция. Это топология. Вот это меня и удивило по-настоящему.
Второй производной по времени у вас не вижу для гиперболического уравнения, в ней должны быть два временных слоя при расчете newPhi.
Но посыл и моделирование всё равно интересные. Ведь примерно таким и пытаемся описать реальность. Шрёдингер с вашим потенциалом при V=0, например, становится уравнением, известным как НуШ и имеющим солитонные решения.
Спасибо за уточнение! У меня реализован leapfrog через явное поле velocity[][] — это эквивалент двух временных слоёв, просто в форме Верле а не через phi_prev. Согласен что в тексте статьи это стоило показать явно.
Про НуШ — это неожиданно красиво. То есть мои численные солитоны при V→0 должны сходиться к аналитическим решениям НуШ? Если так — это готовый тест на точность симулятора. Буду проверять.
А, вот leap‑frog не разглядел. Не большой спец в этих методах, всю жизнь только параболические уравнения моделировал.
К нелинейному Шрёдингеру не сойдётся, так как это комплексное уравнение с первой производной по времени и чуть другими свойствами.
У вас, выходит, действительно некоторая модификация Клейна‑Гордона на самом деле. Стандарт в квантовой теории поля для скалярных частиц, вплоть до бозонов Хиггса, смотря какой потенциал заложен — у вас как раз очень похоже на хиггсовский.
Можно для тестирования поперебирать другие варианты потенциалов, для которых прописана аналитика. Или забабахать sin‑Гордона (уравнение «синус‑Гордона»), в котором известно много красивых нелинейных волн.
Это классическое (или, если угодно, одночастичное) поле. Квантовое поле так просто не отмоделировать.
Любопытно, что у Вас всякие неустойчивости не полезли: в том виде, в каком временная зависимость в коде формируется, навскидку тяжело сказать, как управлять параметрами моделирования в нелинейном случае. Впрочем, если у Вас, в самом деле, сходится к кипящему вакууму, то, возможно это оно и есть. В диссипативной системе все временные зависимости должны умирать.
Паттерн, который возникает в конце, скорее всего артефакт дискретизации. На квадратной решетке (двудольный граф) вполне можно представить стационарное решение в виде шахматной доски. Если плоскость триангулировать, то такие решения должны исчезнуть из-за нечетных циклов на решетке. А вот почему крупномасштабные стационарные структуры не возникли - непонятно. Может в моделируемую плоскость не влезают.
Но, конечно, моделирование забавное. На нелинейное поле можно смотреть часами.

Я написал симулятор квантового поля на Java. Вот что из этого вышло