Моделирование жидкости с использованием гидродинамики гладких частиц
На самом деле, я разрабатываю симулятор SPH с использованием C++ и openGL. Есть несколько проблем, с которыми я столкнулся прямо сейчас,
Я создаю частицы инициирующей жидкости на одной стороне коробки (я делаю коробку как граничный объем), формирую их как коробку и задаю начальную скорость, равную нулю. Затем я запускаю основной цикл, альт, жидкости начинают двигаться, и здесь происходят странные явления. Жидкости начинают распространяться по всем направлениям.
Пожалуйста, посмотрите на картинку:
http://i278.photobucket.com/albums/kk86/anggytrisnawan/Screenshot-UntitledWindow-2.png
Эта фотография сделана через несколько секунд после начала симуляции. Это кажется странным для меня. Вот параметр, который я использовал для симуляции:
#define H 0.040 // Smoothing Length
#define Rho0 1000 // (kg/m^3) water particle rest density
#define Mass 0.012 // (kg)
#define DT 0.001 // time step
#define TotalParticles 5000 // total number of particle
Примечание: в настоящее время я не рассчитываю силу поверхностного натяжения.
РЕШЕНО: Моя вина здесь... они перекрывают друг друга в начале.. так что сила давления заставляет их распространяться..
2 ответа
Из предоставленного вами изображения кажется, что моделирование началось со всех частиц в одном углу. Поскольку частицы, по-видимому, должны иметь некоторый потенциал отталкивания, чтобы не перекрывать друг друга, после начала моделирования это отталкивание заставит частицы разойтись.
Опять же, вы не показали никакого кода, так что выше это просто квалифицированная догадка.
Каковы значения граничных условий, то есть, при каких числовых координатах находятся пределы ящика? Я предполагаю, что ваша симуляция уходит в определенном направлении из-за систематических ошибок округления.
Если я смотрю на картинку, у меня создается впечатление, что я смотрю вниз в направлении -Z, а нижний левый угол рамки находится в точке (0, 0, 0). Если это так, то ваша симуляция частиц не является консервативной, то есть имеет тенденцию толкать частицы к числовому 0, как если бы существовало силовое поле.