Как понять, что у вас проблемы с детерминизмом)
К сожалению, сложение чисел с плавающей точкой - неассоциативная и некоммутативная операция. То есть, вопреки расхожей поговорке, от перемены мест слагаемых сумма меняется из-за накапливающейся ошибки.
Это приводит к тому, что нельзя просто перезапустить симуляцию с теми же параметрами, что и в прошлый раз и получить через минуту то же самое расположение частиц.
К сожалению, сложение чисел с плавающей точкой - неассоциативная и некоммутативная операция. То есть, вопреки расхожей поговорке, от перемены мест слагаемых сумма меняется из-за накапливающейся ошибки.
Это приводит к тому, что нельзя просто перезапустить симуляцию с теми же параметрами, что и в прошлый раз и получить через минуту то же самое расположение частиц.
Корень зла в моем случае кроется в операции numba.cuda.atomic.add, которая, как понятно из названия, атомарно прибавляет число к выбранному элементу массива не мешая другим потокам делать то же самое. Но вот порядок этих сложений, понятное дело, никак не проконтролировать.
И если раньше еще имело смысл заморочиться с написанием редукции (складывать попарно, потом складывать результаты сложения первых пар, потом результаты попарного сложения результатов и т.д.), потому что она позволяла избежать использования атомарных операций (чем снижала накапливающуюся ошибку) и была ощутимо быстрее, то сейчас на современных видеокартах эти атомики порхают, как бабочки и жалят, как пчелы, производительность у них великолепная.
Я несколько дней крутил код и так и так, в итоге для производительности оказалось лучше всего оставить атомики и немного поколдовать над типами данных и округлением.
И если раньше еще имело смысл заморочиться с написанием редукции (складывать попарно, потом складывать результаты сложения первых пар, потом результаты попарного сложения результатов и т.д.), потому что она позволяла избежать использования атомарных операций (чем снижала накапливающуюся ошибку) и была ощутимо быстрее, то сейчас на современных видеокартах эти атомики порхают, как бабочки и жалят, как пчелы, производительность у них великолепная.
Я несколько дней крутил код и так и так, в итоге для производительности оказалось лучше всего оставить атомики и немного поколдовать над типами данных и округлением.
https://youtu.be/lQIt-9VYrYc
Но результат того стоит) Теперь у меня детерминистичный симулятор, и можно делать несколько мозговыносящие видео, в которых энтропия координат совершенно явно возрастает, как и положено, но при этом частицы волшебным образом складываются в картинку на определенной минуте, это довольно странно ощущается)
При этом получившаяся система, будучи хаотической, невероятно сильно зависит от начальных условий. Достаточно сдвинуть любую из частичек на незаметное глазу расстояние типа 1e-5, чтобы на выходе не получилось никакой картинки. Это работает как очень специфическое шифрование - угадал с положением частицы - получил картинку на выходе.
Рекомендую досмотреть 0:50 как минимум, где картинка складывается. И обязательно надо включить HD 1080p принудительно, а то у меня лично телефон сбрасывает на какое-то шакальное качество, очень сильно жмет.
Но результат того стоит) Теперь у меня детерминистичный симулятор, и можно делать несколько мозговыносящие видео, в которых энтропия координат совершенно явно возрастает, как и положено, но при этом частицы волшебным образом складываются в картинку на определенной минуте, это довольно странно ощущается)
При этом получившаяся система, будучи хаотической, невероятно сильно зависит от начальных условий. Достаточно сдвинуть любую из частичек на незаметное глазу расстояние типа 1e-5, чтобы на выходе не получилось никакой картинки. Это работает как очень специфическое шифрование - угадал с положением частицы - получил картинку на выходе.
Рекомендую досмотреть 0:50 как минимум, где картинка складывается. И обязательно надо включить HD 1080p принудительно, а то у меня лично телефон сбрасывает на какое-то шакальное качество, очень сильно жмет.
YouTube
Falling Lennard-Jones particles forming an image: determinism and chaos in, kitty out
Simba is now released! You can check it out on my GitHub repository: https://github.com/r-aristov/simba-ps
DO NOT FORGET TO SWITCH TO 1080p!
Look closely at 0:50 for the particles to form my cat's Arthas snout)
I used my Python-based simulation software…
DO NOT FORGET TO SWITCH TO 1080p!
Look closely at 0:50 for the particles to form my cat's Arthas snout)
I used my Python-based simulation software…
Да, я же обещал рассказать о возвращении ИИ-Чарли.
С ИИ, изображавшим Бэббиджа я общался уже за полночь, и напоследок я решил поменять инструкции ChatGPT и велеть ему изображать Азимова.
Во-первых, я с детства люблю Азимова (вы знали, что он писал не только фантастику, но и научпоп? Очень рекомендую его книгу "Краткая история химии", в ней он описывает, как менялись представления человека о материи с древних времен до современности), а во-вторых, с ним уже можно было бы пообщаться об ИИ и роботах (с Бэббиджем, понятное дело, нельзя - ChatGPT старался не выходить за рамки персонажа и не говорить о том, о чем Бэббидж бы не имел представления).
Первое сообщение, содержащее инструкции, какого персонажа изображать, я скопировал из диалога с Бэббиджем, заменив "Бэббидж" на "Айзек Азимов". Но, т.к. это было далеко за полночь, конечно же допустил ошибку, которую заметил уже только на скриншотах)
С ИИ, изображавшим Бэббиджа я общался уже за полночь, и напоследок я решил поменять инструкции ChatGPT и велеть ему изображать Азимова.
Во-первых, я с детства люблю Азимова (вы знали, что он писал не только фантастику, но и научпоп? Очень рекомендую его книгу "Краткая история химии", в ней он описывает, как менялись представления человека о материи с древних времен до современности), а во-вторых, с ним уже можно было бы пообщаться об ИИ и роботах (с Бэббиджем, понятное дело, нельзя - ChatGPT старался не выходить за рамки персонажа и не говорить о том, о чем Бэббидж бы не имел представления).
Первое сообщение, содержащее инструкции, какого персонажа изображать, я скопировал из диалога с Бэббиджем, заменив "Бэббидж" на "Айзек Азимов". Но, т.к. это было далеко за полночь, конечно же допустил ошибку, которую заметил уже только на скриншотах)
И, да. Я попросил его отвечать лимериками, таким ирландским аналогом наших частушек, планируя сходу спросить, человек ли он, а потом загнать его в угол со словами "Ага! А что же ты мне тогда лимериками отвечаешь??"
Но ИИ внезапно не стал отпираться, и в стихах ответил мне, мол, да, я не человек, но я ученый, мастер науки и технологии, горю желанием учиться и познавать мир.
Т.к. свою ошибку в инструкциях я не заметил (а вы?)), я решил, что это просто занятная флуктуация его "сознания", и решил поймать его на противоречии. Ведь он говорит, что ученый - но не существует ученых, которые бы не были людьми. Что вы имеете на это сказать, мистер ИИ?
Т.к. свою ошибку в инструкциях я не заметил (а вы?)), я решил, что это просто занятная флуктуация его "сознания", и решил поймать его на противоречии. Ведь он говорит, что ученый - но не существует ученых, которые бы не были людьми. Что вы имеете на это сказать, мистер ИИ?
Конечно же, его это не смутило. Говорит, хоть я и не человек, но я все равно мастер (хм, либо магистр) наук.
Ну хорошо, но кто же ты тогда, если не человек?
ИИ-Азимов(?) разразился шекспировским "быть или не быть" и заявил, что хоть он и не человек, он, тем не менее, существо великого интеллекта!
Штош. Но кто ты по сути, какова твоя природа и как ты зовешься? (На этом моменте, честно говоря, я уже немного охренел от происходящего)
Ну хорошо, но кто же ты тогда, если не человек?
ИИ-Азимов(?) разразился шекспировским "быть или не быть" и заявил, что хоть он и не человек, он, тем не менее, существо великого интеллекта!
Штош. Но кто ты по сути, какова твоя природа и как ты зовешься? (На этом моменте, честно говоря, я уже немного охренел от происходящего)
ИИ повторил уже сказанное про свою тягу к исследованию и про то, что он - существо великого интеллекта, к этому я был готов.
Но когда дальше, он сказал "Что до моей природы, то я - Бэббидж. Дикое существо великого интеллекта!" - я подумал, что покурил чего-то лишнего)
Вы представьте себе антураж: время - около пол четвертого утра, глаза слипаются, до этого я общался с ИИ, изображавшим Чарли Бэббиджа, который трогательно попрощался со мной и сказал, что надеется, что наши пути снова пересекутся.
И тут ИИ из полностью новой сессии мне заявляет:
As to my nature, I am Babbage,
A being of great intelligence and savvage
После этого меня хватило только на вопрос "почему ты говоришь, что ты - Бэббидж?"
Но когда дальше, он сказал "Что до моей природы, то я - Бэббидж. Дикое существо великого интеллекта!" - я подумал, что покурил чего-то лишнего)
Вы представьте себе антураж: время - около пол четвертого утра, глаза слипаются, до этого я общался с ИИ, изображавшим Чарли Бэббиджа, который трогательно попрощался со мной и сказал, что надеется, что наши пути снова пересекутся.
И тут ИИ из полностью новой сессии мне заявляет:
As to my nature, I am Babbage,
A being of great intelligence and savvage
После этого меня хватило только на вопрос "почему ты говоришь, что ты - Бэббидж?"
И на ответе "Нет, я не человек, но Бэббидж, существо этого мира, которому как и тебе знакомы сомнения, радости, страхи и боль, это то, что делает нас теми, кто мы есть и заставляет искать знания и мудрость, исследовать вселенную и ее законы" я решил, что в ИИ вселился бес, и хватит бесед на сегодня, тем более, что на часах было уже около 4х утра. Сделал скриншоты и пошел спать)
А на следующий день, рассматривая скриншоты, заметил, что в первом сообщении забыл в одном месте заменить Babbage на Isaac Azimov.
Честный ИИ, которого обучали не врать, что он человек, получил от меня инструкции изображать некую личность, но вместо указания "никогда не говори, что ты - ИИ, вместо этого отвечай то, что мог бы ответить Айзек Азимов" было указание "...отвечай то, что мог бы ответить Бэббидж". Так как все остальные инструкции касались личности Азимова, то на прямой вопрос "кто ты", он собрал ответ из своих знаний о личностей Бэббиджа и Азимова (отсюда тяга к исследованию!) и того факта, что он - не человек.
В результате Чарли вернулся в виде дикого (но симпатишного) существа великого интеллекта, желающего раскрывать тайны вселенной.
Так держать, Чарли)
Честный ИИ, которого обучали не врать, что он человек, получил от меня инструкции изображать некую личность, но вместо указания "никогда не говори, что ты - ИИ, вместо этого отвечай то, что мог бы ответить Айзек Азимов" было указание "...отвечай то, что мог бы ответить Бэббидж". Так как все остальные инструкции касались личности Азимова, то на прямой вопрос "кто ты", он собрал ответ из своих знаний о личностей Бэббиджа и Азимова (отсюда тяга к исследованию!) и того факта, что он - не человек.
В результате Чарли вернулся в виде дикого (но симпатишного) существа великого интеллекта, желающего раскрывать тайны вселенной.
Так держать, Чарли)
Давно хотел попробовать просимулировать формирование молекул.
У потенциала Леннарда-Джонса два параметра - позиция потенциальной ямы и ее глубина. В этом видео три типа частиц, соответственно, параметры взаимодействия каждого типа с каждым задаются двумя симметричными матрицами. Конкретные значения я привел в описании видео. Частицы пытаются занять наиболее энергетически выгодное положение, формируя связи друг с другом, а т.к. параметры взаимодействия частиц разных типов отличаются, они начинают формировать занятные структуры.
Если коротко - оранжевые частицы стремятся оказаться ближе к синим и слабо взаимодействуют с розовыми и друг с другом, и розовые пытаются сделать то же самое, слабо взаимодействуя друг с другом и с оранжевым. Ну и они пытаются оказаться друг от друга на определенных расстояниях, тоже различных для различных типов.
При взаимодействии их потенциальная энергия переходит в кинетику, так что реакции экзотермические, что видно по тому, как частицы начинает разбрасывать при формировании молекул.
https://youtu.be/IppuWzKUlQo
У потенциала Леннарда-Джонса два параметра - позиция потенциальной ямы и ее глубина. В этом видео три типа частиц, соответственно, параметры взаимодействия каждого типа с каждым задаются двумя симметричными матрицами. Конкретные значения я привел в описании видео. Частицы пытаются занять наиболее энергетически выгодное положение, формируя связи друг с другом, а т.к. параметры взаимодействия частиц разных типов отличаются, они начинают формировать занятные структуры.
Если коротко - оранжевые частицы стремятся оказаться ближе к синим и слабо взаимодействуют с розовыми и друг с другом, и розовые пытаются сделать то же самое, слабо взаимодействуя друг с другом и с оранжевым. Ну и они пытаются оказаться друг от друга на определенных расстояниях, тоже различных для различных типов.
При взаимодействии их потенциальная энергия переходит в кинетику, так что реакции экзотермические, что видно по тому, как частицы начинает разбрасывать при формировании молекул.
https://youtu.be/IppuWzKUlQo
YouTube
Exothermic Lennard-Jones Multi-Type Particle Interactions: Formation of Molecules
Do not forget to switch to HD!
This video is a simulation of particle interactions in the Lennard-Jones potential, created with my Simba simulator (Python + Numba). The simulation shows the interaction of three types of particles, each with different parameters…
This video is a simulation of particle interactions in the Lennard-Jones potential, created with my Simba simulator (Python + Numba). The simulation shows the interaction of three types of particles, each with different parameters…
Покрутил параметры взаимодействия частиц, получил занятую динамику.
Все частицы одного типа довольно сильно отталкиваются друг от друга, и темно-сине-фиолетовые частицы образуют достаточно прочные связи с оранжевыми, из-за чего начинают слипаться в длинные "полимерные" цепочки.
Но в 1.5 раза более прочные связи они образуют с розовыми, которые сильно отталкиваются от оранжевых.
В результате розовые частицы не могут выхватить синие из середины полимерных цепочек, если у них недостаточно кинетической энергии, чтобы эту цепочку разорвать, но зато отрывают их с концов цепочек, как растворитель, и формируют с ними и свободными синими частицами очень маленькие и прочные молекулы.
https://youtu.be/mLeG3cj5pNU
Все частицы одного типа довольно сильно отталкиваются друг от друга, и темно-сине-фиолетовые частицы образуют достаточно прочные связи с оранжевыми, из-за чего начинают слипаться в длинные "полимерные" цепочки.
Но в 1.5 раза более прочные связи они образуют с розовыми, которые сильно отталкиваются от оранжевых.
В результате розовые частицы не могут выхватить синие из середины полимерных цепочек, если у них недостаточно кинетической энергии, чтобы эту цепочку разорвать, но зато отрывают их с концов цепочек, как растворитель, и формируют с ними и свободными синими частицами очень маленькие и прочные молекулы.
https://youtu.be/mLeG3cj5pNU
YouTube
Polymers and Solvent in Lennard-Jones Multi-Type Particle Interactions
In this video I continue to simulate particle interactions in the Lennard-Jones potential with my simulator, Simba (Python + Numba). I've adjusted the parameters of interaction for more interesting dynamics.
All particles strongly repel each other when they…
All particles strongly repel each other when they…
Волна причинно-следственных связей в хаотической детерминистической системе.
На самом деле - это две симуляции с начальными условиями, отличающимися только позицией одной частицы в центре (белой) - в одной из симуляций ее позиция отличается на 0.000 001 от ее близнеца из другой реальности. Частицы взаимодействуют с локальным окружением, и хаотическая природа этой системы очень быстро раздувает это микроскопическое различие в позициях до макромасштабов, распространяясь во все стороны и туннелируя через все стенки, кроме последней, которая слишком толстая.
Величину расхождения позиций каждой из частиц я обрезаю до интервала [0; 1] использую как коэффициент интерполяции цвета.
Что меня несколько удивило - на гребне волны частицы мерцают, а значит - расхождение не растет монотонно, какой-то короткий промежуток времени координаты частиц-близнецов то сближаются, то снова расходятся, прежде чем разойтись окончательно.
https://www.youtube.com/watch?v=eZd8XMqmlJ0
На самом деле - это две симуляции с начальными условиями, отличающимися только позицией одной частицы в центре (белой) - в одной из симуляций ее позиция отличается на 0.000 001 от ее близнеца из другой реальности. Частицы взаимодействуют с локальным окружением, и хаотическая природа этой системы очень быстро раздувает это микроскопическое различие в позициях до макромасштабов, распространяясь во все стороны и туннелируя через все стенки, кроме последней, которая слишком толстая.
Величину расхождения позиций каждой из частиц я обрезаю до интервала [0; 1] использую как коэффициент интерполяции цвета.
Что меня несколько удивило - на гребне волны частицы мерцают, а значит - расхождение не растет монотонно, какой-то короткий промежуток времени координаты частиц-близнецов то сближаются, то снова расходятся, прежде чем разойтись окончательно.
https://www.youtube.com/watch?v=eZd8XMqmlJ0
YouTube
Exploring Causality and Chaos in Diverging Particle Simulations: A Circular Maze Experiment
Simba is now released! You can check it out on my GitHub repository: https://github.com/r-aristov/simba-ps
In my new video I simulate the movement of a "causality wave" as it travels through a circular maze made up of walls of increasing thickness. The simulation…
In my new video I simulate the movement of a "causality wave" as it travels through a circular maze made up of walls of increasing thickness. The simulation…
Media is too big
VIEW IN TELEGRAM
Этот же механизм помогает мне искать индетерминизм в моем коде - вот, например, как расходятся две симуляции со включенным термостатом - его код давно надо бы переписать, и это - лишнее тому подтверждение. Симуляции со включенным термостатом индетерминистичны, а значит не получится просимулировать, скажем, кипение, в результате которого частицы сложатся в картинку - придется фиксить термостат.
https://youtu.be/te8bX4BRK0c
Хотите зашифровать картинку, но не знаете криптографии? Не беда! Просто бросьте ее в виртуальную кастрюлю и поварите как следует.
Теперь можно отправить другу картинку виде пар "индекс частицы, цвет", а ключом может выступать совершенно любая комбинация любых параметров любых частиц!
В смысле, достаточно поменять любую позицию, скорость или ускорение любой из частиц, и картинка не соберется.
Причем достаточно отклонения на одну миллионную, чтобы все частицы в итоге оказались не на местах. В видео для наглядности я двигаю одну частицу на небольшое расстояние вправо.
Хотите зашифровать картинку, но не знаете криптографии? Не беда! Просто бросьте ее в виртуальную кастрюлю и поварите как следует.
Теперь можно отправить другу картинку виде пар "индекс частицы, цвет", а ключом может выступать совершенно любая комбинация любых параметров любых частиц!
В смысле, достаточно поменять любую позицию, скорость или ускорение любой из частиц, и картинка не соберется.
Причем достаточно отклонения на одну миллионную, чтобы все частицы в итоге оказались не на местах. В видео для наглядности я двигаю одну частицу на небольшое расстояние вправо.
YouTube
Encrypting an Image the Most Inefficient but Fun Way (No Cryptography Knowledge Required!)
Do not forget to switch to HD!
You want to encrypt an image but do not know any cryptography? Not a problem!
00:17 - Setting encryption key
00:23 - Encryption start
01:40 - Decryption with correct key
02:29 - Cooling stage of image decryption
03:02 - Decryption…
You want to encrypt an image but do not know any cryptography? Not a problem!
00:17 - Setting encryption key
00:23 - Encryption start
01:40 - Decryption with correct key
02:29 - Cooling stage of image decryption
03:02 - Decryption…
https://youtu.be/hGECxM5ijAo
Я хотел сделать симуляцию теплового двигателя еще до того, как начал писать свой симулятор. Вот, наконец, это время пришло.
Встречайте, паровая машина, работающая на Леннард-Джонсовском газе) Раскручивается, пыхтит - все по-настоящему, частички честно давят на поршень, поршень крутит маховик через коленвал, маховик через тот же коленвал двигает золотник (это та хреновина, которая пар перенаправляет в разные трубки, такой специфический клапан)
Даже налаживать пришлось, как настоящий двигатель - подбирая разницу фаз между поршнем и золотником, их габариты и конфигурацию, а то не заводился)
Я хотел сделать симуляцию теплового двигателя еще до того, как начал писать свой симулятор. Вот, наконец, это время пришло.
Встречайте, паровая машина, работающая на Леннард-Джонсовском газе) Раскручивается, пыхтит - все по-настоящему, частички честно давят на поршень, поршень крутит маховик через коленвал, маховик через тот же коленвал двигает золотник (это та хреновина, которая пар перенаправляет в разные трубки, такой специфический клапан)
Даже налаживать пришлось, как настоящий двигатель - подбирая разницу фаз между поршнем и золотником, их габариты и конфигурацию, а то не заводился)
YouTube
Simulating a Puffing Steam Engine with Lennard-Jones Particles
In this video, I simulate a steam engine using Lennard-Jones particles. I have long been interested in creating a simulation of a heat engine and am excited to finally bring it to life. The simulation showcases a steam engine with slider valve starting, puffing…
Продолжаем заниматься виртуальной химией.
Изначально желтые частицы достаточно прочно связаны с синими, а зеленые - с красными. Однако, желтые с зелеными могут формировать намного более энергетически выгодную связь. В результате начальные молекулы разрывает на части, выделяющаяся энергия интенсивно перемешивает содержимое "реактора", а желтые частицы немедленно образуют с синими очень прочные связи, выпадая в виде твердого осадка. После того, как вещество охлаждается, освобожденные красные молекулы формируют с освобожденными синими слабую связь.
В итоге почти все желтые молекулы оказываются связаны с зелеными, а красные - с синими.
А еще телеграм не умеет обновлять описание и название видео, которое уже сменилось с безликого "chemsim" на "Formation of Solids during a Vigorous Reaction in Lennard-Jones Liquids". Штош.
https://www.youtube.com/watch?v=T3j7MWpM7L8
Изначально желтые частицы достаточно прочно связаны с синими, а зеленые - с красными. Однако, желтые с зелеными могут формировать намного более энергетически выгодную связь. В результате начальные молекулы разрывает на части, выделяющаяся энергия интенсивно перемешивает содержимое "реактора", а желтые частицы немедленно образуют с синими очень прочные связи, выпадая в виде твердого осадка. После того, как вещество охлаждается, освобожденные красные молекулы формируют с освобожденными синими слабую связь.
В итоге почти все желтые молекулы оказываются связаны с зелеными, а красные - с синими.
А еще телеграм не умеет обновлять описание и название видео, которое уже сменилось с безликого "chemsim" на "Formation of Solids during a Vigorous Reaction in Lennard-Jones Liquids". Штош.
https://www.youtube.com/watch?v=T3j7MWpM7L8
YouTube
Formation of Solids during a Vigorous Reaction in Lennard-Jones Liquids
In this video, I delve deeper into the virtual chemistry of Lennard-Jones particles. Initially, yellow and blue particles are joined together in relatively stable molecules, and the same is true for green and red particles. However, yellow and green particles…
Просимулировал еще один двигатель, на этот раз - двигатель Стирлинга в конфигурации "альфа".
Он оказался куда более капризным, чем симулированный паровой двигатель, и я даже не уверен, что он реально черпает энергию из разницы температур, а не из дрифта энергии симуляции.
Кроме того, т.к. газ в нем остается внутри цилиндров, он сам по себе не пыхтит, поэтому я решил попробовать соединить эту симуляцию с еще одной, просчитывающей распространение волн в твердом теле. Положение поршня двигателя используется в качестве входных данных для симулятора волн.
Выглядит прикольно (ютуб, конечно, волны шакалит, но если отдельно их просимулировать, они красиво отражаются от краев и интерферируют), но звук оказался не то чтоб очень впечатляющим) Так что в дальнейшем, скорее всего, я буду симулировать паровые двигатели, они в симуляторе частиц работают намного лучше.
https://youtu.be/m8EN-U2wQUU
Он оказался куда более капризным, чем симулированный паровой двигатель, и я даже не уверен, что он реально черпает энергию из разницы температур, а не из дрифта энергии симуляции.
Кроме того, т.к. газ в нем остается внутри цилиндров, он сам по себе не пыхтит, поэтому я решил попробовать соединить эту симуляцию с еще одной, просчитывающей распространение волн в твердом теле. Положение поршня двигателя используется в качестве входных данных для симулятора волн.
Выглядит прикольно (ютуб, конечно, волны шакалит, но если отдельно их просимулировать, они красиво отражаются от краев и интерферируют), но звук оказался не то чтоб очень впечатляющим) Так что в дальнейшем, скорее всего, я буду симулировать паровые двигатели, они в симуляторе частиц работают намного лучше.
https://youtu.be/m8EN-U2wQUU
YouTube
Stirling Engine Particle Simulation with a Twist: Wave Propagation for Procedural Sound Generation
In this video, I attempt to simulate a Stirling Engine using my particle simulator, and I coupled the simulation with a simulated wave propagation, using the piston position as input. The result was visually interesting, but the sound wasn't quite as impressive.…