Comments 30
И под конец небольшой бонус — несколько красивых скриншотов, снятых в программеа гифок/коротких видео снятых в программе — нет?
Метод конечных разностей обычный со схемой по потоку первого порядка точности. Элементарные жидкие объемы названы какими-то частицами. Это Эйлеров подход, мы следим за параметрами точек в пространцстве мы не следим ни за какими частицами!
Замыкание уравнений очень странное, я очень рад за теорему Гельмгольца но это нифига не физично.
Граничные условия… это вообще что за хрень. Почему у вас дивергенцией названо среднее между двумя пристенными ячейками? Нафига дивиргенция? Вы уж либо условие прилипания поставьте, либо мягкие граничные условия второго рода, если хотите, чтобы все втекало и вытекало свободно.
Ужасный стиль.
Они не создаются в явном виде, а сам метод нужен для стабильного решения с любым сколь угодно большим шагом по времени. У конечно-разгстных схем cfl ниже единицы почти везде, что очень печально для скорости. Оригинальный папер по этому методу:
https://www.researchgate.net/publication/2486965_Stable_Fluids
Никак. Из центра ячеек виртуальные частицы назад во времени трассируются, затем в месте «приземления» линейной интерполяцией по окружающим ячейкам забирается значение (скорости и остальных полей).
Ну здесь же есть и прелесть. Сколько бы ни было стоков и источников, у нас фиксированный объем вычислений. А симулировать их можно давлением и применяемой силой, насколько я понимаю. Так как у нас есть краситель — источник будет окрашивать какую-то область цветом, который будет со временем утекать.
Вообще, мне очень нравится эта игрушка: paveldogreat.github.io/WebGL-Fluid-Simulation. Там используется чуть больше пост-эффектов, но в итоге можно очень надолго залипнуть
wavelet turbulence
Есть у меня задача по плазме, я её решал приближенными методами. Если вдруг найдется софт, который можно адаптировать под задачу, то было бы инетерсно его посмотреть.
Задача касается дробных эффектов, которые возникают изза того, что присутствует фоновая радиация.
Их нельзя учитывать усреднено, как просто сплошную среду, так как есть экспоненциальные зависимости. Нужно учитывать эти электроны поштучно. Если есть какая-то открытая готовая модель газового разряда, которую можно дописать, чтобы учитывать дробные эффекты, то было бы хорошо.
Писать все нуля не охота, так как нужно очень хорошо разбираться в этих расчетах. Частично задача решается через теорию перколяции, без диф-уравнений. Более честно было бы решить её через решение уравнений Пуассона с поштучным учетом частиц.
Охрененная работа, огромное спасибо!
А есть аналогичная восхитительная имплементация для 3D?
Есть планы написать про SPH для 3D случая, однако самый простой способ — взять текущий код и расширить его для трёхмерного случая, код kernel.cu практически не поменяется. Также у Nvidia есть соответствующая статья: https://developer.nvidia.com/gpugems/GPUGems3/gpugems3_ch30.html
я не могу найти подобные готовые имплементации на github.com или bitbucket.com, к сожалению. Было бы чудесно, если бы вы смогли выложить в открытый доступ подобный проект на одной из этих открытых платформ.
А вот если Вы конвективный член (\vec{v}\cdot\nabla)\vec{v}, что стоит с минусом сразу справа от знака равенства, перенесете в левую часть, она как раз и даст ускорение — полную производную скороcти по времени.
Уравнение Навье-Стокса и симуляция жидкостей на CUDA