Жидкость¶
Описание¶
Гидродинамика сглаженных частиц (ГСЧ) — это один из распространенных методов моделирования жидкостей и газов. Он отличается простотой программирования и понимания процесса в отличие от моделирования на сетке. Этот метод был впервые предложен для моделирования астрофизических явлений, но сейчас используется также для моделирования жидкостей, газов и процессов деформации в твердых телах.
При моделировании ГСЧ жидкость представляется набором частиц, каждая из которых обладает набором физических характеристик, как-то: положение \(\mathbf{r}_i\), скорость \(\mathbf{v}_i\), масса \(m_i\). По этим значениям для частиц восстанавливается значение физических величин во всех точках простанства. Для частиц определяется длина сглаживания \(h\), на расстоянии которой свойства частиц «сглаживаются».
Вклад каждой частицы в значение физической величины в точке \(\mathbf{r}\) определяется так называемой функцей ядра \(W(\mathbf{r} - \mathbf{r}_i, h)\). Чаще всего в качестве функции ядра используются Гауссова функция и полиномиальные сплайны. Значения последних равны нулю для частиц, расположенных дальше, чем на \(h\) от точки \(\mathbf{r}\). Это позволяет эффективнее расчитывать модель, игнорируя ничтожно малый вклад далёких частиц.
Любая физическая величина в точке \(\mathbf{r}\) может быть рассчитана по следующей формуле:
где \(A_j\) — значение величины в точке \(\mathbf{r}_j\), \(\rho_j\) — плотность частиц в точке \(\mathbf{r}_j\). Например, плотность может быть вычислена следующим образом:
Для расчёта движения частиц в ГСЧ моделируются силы давления, вязкости и поверхностного натяжения.
Давление для частицы расчитывается исходя из её плотности:
где \(\rho_0\) — это плотность окружающей среды, а \(k\) — коэффициент жесткости (сжимаемости). Этот параметр необязателен, но позволяет точнее настроить систему. Сила давления расчитывается по следующей формуле:
Вязкость — это эффект, который возникает при «трении» слоёв жидкость друг о друга. Сила вязкости зависит от скоростей соседних частиц и вычисляется по формуле:
где \(\mu\) — коэффициент вязкости.
Сила поверхностного натяжения расчитывается следующим образом:
где \(\sigma\) — коэффициент поверхностного натяжения.
Для различных величин могут использоваться различные функции ядра, наиболее точно описывающие вклад соседних частиц. Для большинства величин достаточно хорошо подходит функция \(W_{poly6}\):
Тем не менее, для лучшего эффекта несжимаемой жидкости при расчёте плотности лучше воспользоваться специальной функцией ядра:
Таким образом, моделирование заключается в пошаговой обработке системы частиц. Каждый шаг включает в себя для каждой частицы:
- нахождение соседних частиц;
- вычисление плотности;
- вычисление давления;
- расчёт сил: давление, вязкость и поверхностное натяжение;
- добавление гравитации и расчёт ускорения;
- пересчет скорости и положения;
- проверку ограничений (стенки);
- отрисовку.
Минимальные требования (базовая часть)¶
Базовая реализация проекта, в которой должны разбираться все участники, должна содержать:
- визуализацию и моделирование заданной сцены с жидкостью;
- загрузку начального состояния сцены из файла.
Расширенный интерфейс (дополнительная часть)¶
Расширенный интерфейс должен добавлять хотя бы 2 различные возможности к базовому интерфейсу. Ниже перечислены возможные варианты расширения интерфейса, однако этим списком они не ограничены:
- меню выбора сцены;
- меню выбора способа моделирования (различные ядровые функции);
- редактор сцены;
- настройки свойств жидкости;
- управление моделированием:
- пауза/продолжение;
- ускорение/замедление;
- перемотка;
- интерфейс сохранения/загрузки текущего состояния сцены;
- отображение поверхности жидкости;
- и т.д.
Расширенные возможности моделирования (дополнительная часть)¶
Расширенное моделирование должно добавлять хотя бы 2 различные возможности к базовому моделированию жидкости:
- оптимизация расчёта:
- быстрое нахождение соседних частиц;
- автоматически подстраиваемая под каждую частицу длина сглаживания (чтобы в её окрестности всегда находилось примерно одно и то же кол-во частиц);
- многофазные жидкости (разнородные частицы, вязкость и поверхностное натяжение действует только между частицами одного типа);
- взаимодействие с движущимися объектами (мяч, пропеллер и т.п.);
- и т.д.
Работа с базой данных (дополнительная часть)¶
Модуль для работы с базой данных должен предоставлять хотя бы 2 различных возможности:
- база сцен;
- база жидкостей и других объектов сцены;
- и т.д.