Саентач, где-то полгода назад я тут создавал тред о симуляции связанных пружинками пластинок, какие у них резонансные частоты и так далее. Сейчас опять закончилась сессия, и я решил повспоминать питон и попрогать что-нибудь интересное. Хочу сделать что-то отдаленное похожее на протопланетный диск. Чтобы множество частичек притягивались друг к другу за счет гравитации и формировали "тела" разных масс, вращающихся по своим орбитам. Пока ничего отдаленно похожего не это нет, может здесь мне и помогут.
Я хочу, чтобы частички могли слипаться и удерживаться. Для этого решил ввести "межмолекулярные" взаимодействия. В итоге между частичками есть: 1) Гравитационная сила, пропорциональная G/r (вроде так она должна выглядеть в плоском мире). Потенциал - Gln(r). 2) Сила, сформированная потенциалом Морзе. Сам потенциал имеет вид (1-exp(-a(r-r0))^2. Сила выглядит немного посложнее.
Какие сейчас есть проблемы: 1) Не факт, что потенциал Морзе оптимален в моем случае. Надо подумать, чем его можно заменить. 1) Надо как-то подобрать параметры G, a и r0, чтобы все это выглядело нормально и задуманный протопланетный диск мог при этих параметрах эволюционировать. 2) Надо подумать о способе интегрирования. Сейчас у меня простой алгоритм Рунге-Кутты, который я попробовал сделать симплектным для сохранения энергии в системе. 3) С интегратором связана и другая проблема. При не очень маленьких шагах dt одна частица может сильно налететь на другую, в результате чего на следующем шагу между ними появляется огромная сила оттакливания. Они отскакивают друг от друга в разные стороны с большой скоростью - никаким законом сохранения энергии здесь и не пахнет. По этой самой причине я отказался от потенциала Леннарда-Джонса - там он еще круче, поэтому это проблема выражена ярче. 4) Скопления из трех и больше частичек нестабильны и периодически выкидывают кого-то из себя. По-моему, это не очень хорошо. Видимо, надо как-то убирать из них энергию, смоделировав испускание излучения с колебательных/электронных уровней молекул. 5) Надо подумать об оптимизации. Сейчас вся оптимизация заканчивается на обрубании межмолекулярных сил при относительно большом расстоянии. В принципе я думаю поделать плоскость на квадраты, в каждом квадрате считать межмолекулярные силы между частицами в этом и соседних квадратах; а гравитацию считать только между квадратами.
Может, еще по ходу дела в голову придут другие проблемы и задачи. На видео - частички на небольшом друг от друга расстоянии. Сам код находится здесь: https://github.com/grogno/Proto/blob/master/Proto.py Требуется pygame и numba
>>364631 Сейчас никакие, просто бесконечная ячейка. Думаю в будущем убирать частицы, улетевшие за границу.
Вот, кстати, как изменяется суммарна энергия системы типа как на видео в ОП-посте от времени. Скачки обусловлены ростом кинетической энергии. Видимо, это как раз то, что я в пункте 3) описывал. Функция для подсчета энергии лежит там же на гитхабе. Если бы кто-нибудь проверил, было бы неплохо.
Параметры: G = 1e-4 #Гравитационная постоянная a = 10 #Жесткость потенциала Морзе r0 = 0.1 #Равновесное расстояние в потенциала Морза world_size = 1 #Размер мира симуляции dt = 0.00001 #Размер шага по времени
>>364637 Здесь вообще нет речи о честной симуляции. Просто игрушка.
>>364642 Что не так? Я только начал это все делать, сначала хочу определиться с общими принципами, на которых все будет строиться. Ну а потом уже граничные условия поставлю.
>>364647 Спасибо, анон, за вторую ссылку. Я подозревал, что что-то подобное с сеткой должно уже было давным-давно быть придумано, но не видел этот алгоритм. Возьму на перспективу. Я знаю, что тематика очень сложная, но я не ставлю никаких научных задач.
>>364649 В моем случае 1/r даже на руку. Я хочу принципиально два разных типа взаимодействий: глобальное притяжение на больших расстояниях и "межмолекулярные" силы на коротких. Поскольку я нормальный потенциал Леннарда-Джонса уже заменил более плавным потенциалом Морзе, то надо сделать еще более плавной гравитацию. Несколько шагов между прорисовками сделал, спасибо.
Я нашел у себя в коде одну большую ошибку в воплощении метода Рунге-Кутты. Сейчас все исправил, теперь система ведет себя стабильнее. Еще понял причину резких отскоков частиц друг от друга: замена гравитации с G/r на G/(r+0.005) помогла это вылечить. Еще добавил стенки у симуляции. Частицы отскакивают от стенок со случайными скоростями в соответствии с распределением Больцмана. Все залил на гитхаб.
На видео - 200 частиц в мире 10х10 с r0=0,1. От стенок частички отскакивают с очень маленькими скоростями. По сути частицы начинают конденсироваться в капельки, в результате чего выделяется энергия. Эта энергия переходит в кинетическую энергию выстреливающих из капли частиц, которые долетают до стенки, там останавливаются и уже остывшие опять попадают в капли. Гравитацию здесь я не включал.
>>364748 А если заменить силу отталкивания расчётом упругого(или не совсем, с каким-нибуть коэфициентом неупругости) столкновения при расстоянии между частицами<размера, не будет так проще?
>>364775 Как докажут-так сразу. Я почему спросил, в пространстве с 1/r гравитацией этот самый "протопланетный диск" может вести себя не так, как он ведёт себя в нормальном мире. Как минимум частицы не могут улететь из системы навсегда(потенциал неограниченно растёт при росте r), возможно будут и другие отличия
>>364776 >Как минимум частицы не могут улететь из системы навсегда(потенциал неограниченно растёт при росте r), возможно будут и другие отличия Ну, можно просто убирать те частицы, которые улетели достаточно далеко, например. ОП же все это делает по фану. Когда-нибудь и до боле сложных симуляций дойдут руки, я уверен.
>>364774 >То есть ты рассматриваешь выдуманный мир, и ни на что большее не претендуешь? Именно. Хочу посмотреть, какие эффекты в такой симуляции возможны, как вообще себя будет вести система. > Как минимум частицы не могут улететь из системы навсегда Тоже думал над этим. На самом деле проблемы поставить 1/r2 нет никакой, и я обязательно это попробую. Но пока мне 1/r кажется оптимальнее.
Сейчас решил посмотреть на, как вообще частички организуются в своих агломератах. Регулируя температуру стенки (она влияет на скорость отталкивающихся от нее частиц, которые получают масквелловское распределение), можно получить и псевдокристалл, и жидкость, и газ. Не уверен только, насколько эти процессы равновесны и соответствуют ли им определенные температуры.
>>364780 r - это расстояние в местной системе координат. Его определение уже учитывает переход от 3D к 2D. Протопланетные диски вращаются в плоскости, но подчиняются трехмерным законам. Для быстроты счета все средства хороши, но сможешь ли ты интуитивно оценивать "правдоподобность" результатов и будет ли смысл в их интерпретации? Определись.
>>364802 Ты говоришь о нефизичности силы 1/r, хотя у меня тут масштабы гравитации и межмолекулярных взаимодействий очень близки. То есть физичности в этой симуляции вообще нет никакой. Я не ради нее все это делаю. Хотя посмотреть на кристаллизацию, плавление и кипение этой капельки мне приятно.
>>364760 Да, попробую просто неупругое взаимодействие вместо потенциала Морзе ввести. А то при сближении частицы разгоняются, и все начинает разлетаться. Еще вариант ввести "излучение", чтобы при больших относительных скоростях энергия убиралась. Пока нет вообще идей, как это сделать.
>>364813 Попробуй в качестве эксперимента ввести СТО с удобной тебе "скоростью света". Ради пересчета массы на больших скоростях. Тогда закачка энергии в частицы не приведет к их бесконечному ускорению.
>>364814 Что-то это адово. Тем более скорости и так конечны, но быстрые частицы не формируют агрегаты, которые я так хочу получить.
Еще я не совсем не физик, поэтому задам глупый вопрос. Почему галактики вращаются? Если я хочу сделать свою систему вращающейся, мне надо в начальных условиях ее закрутить с такой скоростью, чтобы центробежная сила на перефирии примерно равнялась гравитации?
>>364816 Потому что начальное вращение+закон сохранения момента импульса. Тебе достаточно просто дать всем частицам начальную скорость. Слишком быстрые улетят на бесконечность, остальные будут вращатся по эллипсам, и после долгих лет столкновений эллипсы перейдут в окружности. Я потому и предлагал считать столкновения, в них импульс и момент импульса сохраняются по определению. А потерянную на неупругость энергию можно учесть как разогрев столкнувшихся кусочков, впрочем тебе это пока не нужно. Только учти, что неупруго сталкиваться могут разве что пылинки/камешки протодиска. Звёзды галактики практически не сталкиваются и взаимодействуют только гравитацией, без столкновений(размеры звёзд намного меньше расстояний), молекулы и атомы сталкиваются исключительно упруго, и никакой гравитацией там не пахнет, зато электромагнитные силы дают интересные потенциалы вида 1/r^m-1/r^n
>>364884 Прости, не так понял. Но все же механика самопроизвольного сжатия изначально рандомного скопления звезд или частиц пыли во вращающийся диск нетривиальна. На коленке такое не смоделируешь.
>>364914 Ну в диск они сами по себе не сожмутся, вращение в одной плоскости должно быть изначально. А может и нет, возможно вековые взаимодействия звёзд/пылинок выравнивают орбиты в одну плоскость. Действительно, вопрос "получится ли из облака хаотично движущихся частиц диск" нетривиальный, и решить его можно лишь хорошим моделированием с учётом продолжительного времени.
>>364918 Ну вот мы же имеем наблюдение, что все галактики вращаются, причем с довольно большой скоростью. "Общее вращение", как бы мы его ни определили, у изначального облака пыли будет около нуля, если там все случайно распределено. Т.е. даже если у него и будет некая ось, вокруг которой, случайно, вращается больше частиц, чем вокруг других, разница эта будет крайне мала. Там имеет место какая-то самоорганизация этого движения, которая усиливает изначальное вращение. В интернете пишут, что это связано с приливными силами, но подробного вывода я не нашел.
>>364932 Это для твердых тел только применимо. Под действием гравитации вращение начинается легко: представь две звезды, медленно летящие навстречу друг другу, и при встрече образующие двойную систему. Вращение появилось из ниоткуда, причем оно может быть очень быстрым.
>>364937 Если они летели строго навстречу-они столкнутся. Если же их скорости направлены не строго по одной прямой-это и даёт момент импульса, и в дальнейшем он таким и останется
Хотя, может еще вот такая аналогия подойдет: набрал ты ванну воды, дождался пока она стала почти полностью спокойной, только тепловое движение молекул осталось. Потом выдергиваешь пробку, и наблюдаешь как образуется воронка, которая завлекает в это круговое движение всю воду в ванне. Сжатие облака в галактику - это как вытекание воды через воронку, и механизм появления углового момента, видимо, аналогичен.
>>364944 Что я тут должен увидеть? Момент импульса замкнутых систем сохраняется, это 100%, это следствие изотропности пространства, и даже гравитационный коллапс в чёрную дыру не нарушает этого. Приливные эффекты могут перераспределить этот момент между телами в галактике, но изменить его может только внешнее возмущение По ссылке мне предлагают купить эту статью/книгу за 40$ >>364946 Вытекающая вода-не замкнутая система, аналогия неуместна.
>>364949 Галактика тоже незамкнута. При ее формировании вещество может быть выброшено за ее пределы. Прочитай текст на картинке, я тебе заскринил выводы статьи. Ты мне сейчас пытаешься пересказывать школьные истины, которые я прекрасно знаю. А я тебе пытаюсь объяснить, как вращение галактик появляется при этих условиях. Твои возражения это уровень "энтропия может только возрастать, поэтому появление жизни невозможно". Или "масса притягивает массу, поэтому вселенная должна сжаться в точку". Реальные процессы несколько сложнее этих примитивных обобщений.
>>364952 >Галактика тоже незамкнута. При ее формировании вещество может быть выброшено за ее пределы. Не спорю. Но речь не об этом >Прочитай текст на картинке, я тебе заскринил выводы статьи. Перечитал, слабо понял, о чём суть. Что-то куда-то конденсируется, какие-то пертурбации. >Ты мне сейчас пытаешься пересказывать школьные истины, которые я прекрасно знаю. А я тебе пытаюсь объяснить, как вращение галактик появляется при этих условиях. Ты начал мне рассказывать про вращение, которое появляется из ниоткуда какой-то самоорганизацией, потом про то, что ЗСМИ работает лишь для твёрдых тел и звёзды, пролетающие мимо и обьединяющиеся в двойную систему(что само по себе практически невозможно, после пролёта мимо друг друга они разлетятся с теми же скоростями, изменив лишь направление, за вычетом незначительной энергии, потерянной на гравитационные волны), после этого тыкнул статью. Я не спорю, что самоорганизация может происходить, более того, я рассматривал этот вариант выше >>364914. Может быть момент импульса центрального тела приливными взаимодействиями передаётся удалённым телам, может происходит выбрасывание вещества, движущегося в другой плоскости, но это ни в коем случае не "вращение из ниоткуда"
Вот что сейчас получилось. Примерно то, что хотел сделать, только пока в маленьких масштабах. Здесь потенциал Леннарда-Джонса между частицами. Быстро образовались агрегаты (на первом видео), а через некоторое время осталось только два больших кристалла, которые до сих пор вращаются и пока не сталкиваются.
Рано радовался я. То, что получилось в >>364966 - вызвано большим шагом по времени. Уменьшил шаг в 10 раз, и теперь частицы просто так друг с другом не слипаются, что, в общем-то, логично. Нужно отводить энергию от них.
>>365036 Создай их с изначально меньшей энергией, посмотри что выйдет, ну или введи механизм остывания излучением. По идее, тогда частицы не смогут выйти из потенциальной ямы
>>365040 Так я их создаю изначально диссоциированными, она разогреваются уже в результате агрегации. Я не знаю, какую идею заложить в основу излучения. Остывать должно только связанные атомы, и надо реализовать это максимально эффективно с точки зрения скорости расчета. Ввести вязкое трение для близких частиц?
>>365055 >Я не знаю, какую идею заложить в основу излучения. Простейший вариант-ввести некую среднюю энергию, и каждый шаг времени для каждой частицы пересчитывай энергию, E'=(E-E0)x0.99999+E0. Это не соответствует реальности, но это просто. Вариант сложнее(ненамного)-рассчитывать полное излучение твоей системы как абсолютно чёрного тела(определяя температуру через энергию частиц) и отнимать энергию этого излучения.
>>365091 Не, твои варианты приведут к тому, что будет меняться поступательная энергия в том числе и крупных агломератов. Нужно, чтобы агломератов остывали, но не тормозились. И в явном виде энергия нигде е фигурирует — только положние и скорость. Влиять можно введением только какой-то хитрой силы трения. Вообще думаю пока оптимизацией заняться, может попытаться на GPU считать
>>365242 Вот тогда такой вариант. Рассматриваешь "столкновение" частиц(когда они на достаточно малом расстоянии, ниже равновесного, и сближаются) Далее ты, не нарушая закона сохранения импульса, забираешь часть энергии у этих частиц, типа на возбуждение атома, и затем на излучение. После чего разворачиваешь скорости(как если бы они "столкнулись" и теперь разлетаются)
Хочу сделать что-то отдаленное похожее на протопланетный диск. Чтобы множество частичек притягивались друг к другу за счет гравитации и формировали "тела" разных масс, вращающихся по своим орбитам. Пока ничего отдаленно похожего не это нет, может здесь мне и помогут.
Я хочу, чтобы частички могли слипаться и удерживаться. Для этого решил ввести "межмолекулярные" взаимодействия. В итоге между частичками есть:
1) Гравитационная сила, пропорциональная G/r (вроде так она должна выглядеть в плоском мире). Потенциал - Gln(r).
2) Сила, сформированная потенциалом Морзе. Сам потенциал имеет вид (1-exp(-a(r-r0))^2. Сила выглядит немного посложнее.
Какие сейчас есть проблемы:
1) Не факт, что потенциал Морзе оптимален в моем случае. Надо подумать, чем его можно заменить.
1) Надо как-то подобрать параметры G, a и r0, чтобы все это выглядело нормально и задуманный протопланетный диск мог при этих параметрах эволюционировать.
2) Надо подумать о способе интегрирования. Сейчас у меня простой алгоритм Рунге-Кутты, который я попробовал сделать симплектным для сохранения энергии в системе.
3) С интегратором связана и другая проблема. При не очень маленьких шагах dt одна частица может сильно налететь на другую, в результате чего на следующем шагу между ними появляется огромная сила оттакливания. Они отскакивают друг от друга в разные стороны с большой скоростью - никаким законом сохранения энергии здесь и не пахнет. По этой самой причине я отказался от потенциала Леннарда-Джонса - там он еще круче, поэтому это проблема выражена ярче.
4) Скопления из трех и больше частичек нестабильны и периодически выкидывают кого-то из себя. По-моему, это не очень хорошо. Видимо, надо как-то убирать из них энергию, смоделировав испускание излучения с колебательных/электронных уровней молекул.
5) Надо подумать об оптимизации. Сейчас вся оптимизация заканчивается на обрубании межмолекулярных сил при относительно большом расстоянии. В принципе я думаю поделать плоскость на квадраты, в каждом квадрате считать межмолекулярные силы между частицами в этом и соседних квадратах; а гравитацию считать только между квадратами.
Может, еще по ходу дела в голову придут другие проблемы и задачи.
На видео - частички на небольшом друг от друга расстоянии.
Сам код находится здесь: https://github.com/grogno/Proto/blob/master/Proto.py
Требуется pygame и numba