Вообще, сам того не ожидая, я начал замечать очень много интересных деталей и смотреть на вещи совершенно по-новому, когда сам своими руками написал пик код. В этом посте я хочу поделиться одним интересным наблюдением про уравнения Максвелла, которое некоторым может помочь взглянуть на них немного с другой более интуитивной стороны, а для некоторых это будет, что-то в духе “пффф, да я всегда это знал, новость он мне тут рассказывает”. Поэтому заранее хочу оговориться: мне похуй. И так поехали.
Давайте по-порядку, что такое “пик код”? Возможно когда-нибудь я более подробно про это напишу, но здесь дам какое-то простое представление, так как напрямую к теме это не имеет отношения. Представьте, что вам надо предсказать поведение некоторого ионизированного газа (плазмы), учитывая все мельчайшие взаимодействия всех составляющих эту плазму частиц и электромагнитных полей. Это можно сделать с помощью уравнений (те, кто знаком с системой Максвелла-Власова, знают о чём речь), думая о частицах и действующих на них силах отдельно от полей, либо это можно сделать, думая о плазме как о жидкости с некоторой температурой, давлением, плотностью и т.д., соответственно решая уравнения жидкости (это называется магнитная гидродинамика, или МГД). В обоих случаях более-менее всё что можно было решить ручками (аналитически) уже давно решено, и новому поколению остаётся лишь писать код для симуляций, которые эти уравнения решают численно на суперкомпьютерах с различными трюками, ухищрениями и т.д.
В рамках этой парадигмы отказа от аналитики и полной зависимости от компьютерных симуляций в последние 20 лет начали активно возникать так называемые particle-in-cell алгоритмы (“pic”, далее “пик”, потому что, почему бы и нет), которые по сути думают о плазме как о наборе частиц, соответственно просто толкая частицы по второму закону Ньютона с силой, которая определяется из ЭМ полей. Сами же поля эволюционируют по уравнениям Максвелла, где плотность заряда и ток берутся из тех самых частиц. Таким вот красивым образом можно симулировать раннее практически недостижимые для симуляций вещи и узнавать гораздо больше, чем это можно сделать в рамках того же МГД (у пик есть свои ограничения и фейлы, но я о них тактично промолчу). Просто оставлю тут эту красивую картинку с пересоединием, которая у меня ещё на офисе висит, симуляция которой заняло всего около 20 часов на 500 ядрах (это 20000x20000 клеток!).
Так вот… Как и в реальном мире, в симуляции заряженные частицы плазмы составляют плотность заряда $$\rho$$ и плотность тока $$\boldsymbol{j}$$. Скажем, если у вас сколько-то там электронов общим зарядом в 1 Кулон в кубике размером с 1 кубический м, то плотность заряда равна 1 Кулону на кубический м (извиняюсь за СИ :(, больше не буду). Если вся эта хрень (все эти электроны) ещё и движутся в одном и том же направлении со скоростью 1 м/с, то плотность тока в этой точке равна будет 1 Ампер на кубический метр (всё, вот больше СИ точно не будет).
Зная $$\rho$$, мы можем решить одно из уравнений Максвелла (уравнение Пуассона) и получить электрическое поле: $$\nabla\cdot\boldsymbol{E} = 4\pi \rho$$. Далее, зная ток, $$\boldsymbol{j}$$, можно его и магнитное поле подставить в ещё одно уравнение Максвелла (закон Ампера) и получить эволюцию электрического поля:
Далее, зная электрическое поле, можно найти эволюцию магнитного поля (закон Фарадея):
Зная $$\boldsymbol{E}$$ и $$\boldsymbol{B}$$ можно узнать какие силы действуют на частицы, толкнуть частицы с этой силой, пересчитать токи, плотности заряда и всё по новой. Так примерно работает пик код.
И на самом деле, когда ты начинаешь задумываться как оно там в реальности работает, а уж тем более когда ты пишешь его сам – открываются интересные аспекты, на которые ты (ну… я) раннее не обращал внимание. На самом деле уравнений Максвелла не четыре, а два! Точнее сказать так: на самом деле (скорее всего) природа решает только два уравнения Максвелла (только уравнения на эволюцию полей).
Представьте, что Вселенная стартует с нулевым зарядом (в пик кодах обычно так и происходит), т.е., например, каждый электрон с зарядом $$-q$$ находится в абсолютно той же точке, что и, скажем, протон, с зарядом $$+q$$ (ну или очень близко). Из-за этого во всех точках пространства плотность заряда по сути нулевая. Это значит, что в начале нет никакого электрического поля, т.е., $$\boldsymbol{E} = 0$$, и решать уравнение Пуассона для этого нам необязательно. Далее эти электроны и протоны могут разлететься как угодно, бесконечно летать вокруг, рожать какие-угодно электрические и магнитные поля. Но! Вы можете проверить и убедиться сами (например, используйте уравнение непрерывности, думая о частицах как о жидкости), природе при этом вообще не нужно решать уравнение Пуассона и вообще знать о нём. Природа может и дальше решать (гиперболические) уравнения эволюции (законы Ампера и Фарадея) и вообще не задумываться об уравнении Пуассона.
Более обще это утверждение звучит так: если вы стартуете с некоторым суммарным зарядом в замкнутой системе и решаете только два уравнения эволюции (и уравнения движения частиц, конечно же) – то поля будут эволюционировать таким образом, что этот заряд будет сохраняться и уравнение Пуассона будет автоматически выполняться всегда! Это по сути концептуально меняет смысл уравнения Пуассона, превращая его не в уравнение, а в начальное условие: природа/пик код по сути должны решить это уравнение только один раз в самом начале.
А куда делось уравнение $$\nabla\cdot\boldsymbol{B}=0$$? На самом деле из закона Фарадея (см выше) легко заметить, что $$\partial_t \nabla\cdot\boldsymbol{B} = 0$$ тождественно, так как $$\nabla\cdot(\nabla\times\boldsymbol{E}) = 0$$ по определению. Иными словами, если вы в самом начале жизни Вселенной (или симуляции) задаёте магнитное поле, для которого $$\nabla\cdot\boldsymbol{B}=0$$, то это уравнение так же выполняется во все следующие моменты времени тождественно!
У меня очень долго в голове не умещалось, каким образом природа может “знать” о существовании этих двух законов, ни разу не решая их. На самом деле начал я это понимать, когда писал пик код. Попробую здесь коротко объяснить. Наверное, самое простое интуитивное объяснение этому состоит в том, что магнитные и электрические поля, на самом деле “живут” не в самом пространстве (в каждой точке пространства), а в касательном простанстве в каждой точке. Если от этого не стало легче, то вот как это эксплуатируется в пик (и даже в МГД) кодах. Как легко догадаться, в симуляциях мы дискретизируем пространство, разбивая его на кубики, и в каждом кубике, вместо того, чтобы хранить значения полей в клетках, можно хранить их значения на рёбрах куба и гранях (рис ниже). Если вы сделаете таким образом, то… чудо… действительно уравнение Пуассона и уравнение $$\nabla\cdot\boldsymbol{B}=0$$ выполняются автоматически в процессе эволюции!
Короче, я знаю, что для многих это и так всегда было очевидно, но для меня это был способ взглянуть на всё это под другим интересным углом. Если интересны подобного рода наблюдения, коих у меня, наверное, много, если подумать, то пишите – буду делиться иногда.
PS. Понятно, что сказанное мной легко, просто и давно формализовано в терминах всяких симметрий, инвариантов и прочей поеботы. Да, это всё зашито в ковариантном представлении электромагнитного поля и уравнений Максвелла, не умничайте. Я не умею мыслить в формализме ковариантных матриц и производных и в терминах жизни в касательном расслоении.
cd ~