Як працює симуляція рідини методом SPH: математика за частинками рідини

Справжні рідини неперервні — нескінченна кількість молекул взаємодіє одночасно. SPH перетворює це на щось, з чим може впоратися комп'ютер: скінченну множину частинок, кожна з яких несе частку маси, імпульсу й енергії рідини. Ось як працює ця математика.

Проблема симуляції рідин

Поведінка рідини описується рівняннями Нав'є-Стокса — набором диференціальних рівнянь у частинних похідних, що пов'язують швидкість, тиск, густину та в'язкість у неперервному середовищі. Проблема — саме слово неперервному. Справжня вода містить приблизно 3 × 1025 молекул на літр. Симулювати кожну з них неможливо.

Для розв'язання цієї проблеми існують дві широкі стратегії. Сітчасті методи (ейлерів підхід) ділять простір на фіксовані комірки й відстежують, як рідина тече між ними. Частинкові методи (лагранжів підхід) рухаються разом із рідиною, відстежуючи пакунки маси в міру їхнього переміщення в просторі.

Метод згладжених частинок гідродинаміки (SPH) — найпоширеніший частинковий метод. Він був винайдений у 1977 році Люсі та Гінголдом і Монаганом для астрофізичних симуляцій, а згодом адаптований для гідродинаміки. Його ключова перевага — природна обробка вільних поверхонь — меж між рідиною і порожнім простором, які, як відомо, надзвичайно складні для сітчастих методів.

Ядро SPH: розподіл точкових мас в об'єми

Основний математичний прийом у SPH — це функція ядра W(r, h), також звана ядром згладжування. Кожна частинка має довжину згладжування h — радіус впливу. Ядро визначає, як властивість, що несеться в точці, розподіляється по навколишньому об'єму.

Ядро повинне задовольняти кілька властивостей:

Кубічне сплайн-ядро, запроваджене Монаганом, — найпоширеніший вибір. Воно гладке, обчислювально дешеве і добре поводиться чисельно. Ядра Poly6 і Spiky, запроваджені Мюллером та ін. у їхній знаковій статті 2003 року про інтерактивний SPH, використовуються спеціально для обчислення густини й тиску відповідно — ключова ідея, що суттєво покращує стабільність симуляції.

Оцінка величин за частинками

Маючи ядро, можна оцінити будь-яку скалярну чи векторну величину A в точці r, підсумовуючи внески від усіх сусідніх частинок j:

A(r) = Σⱼ mⱼ (Aⱼ / ρⱼ) W(r − rⱼ, h)

Де mⱼ — маса частинки j, Aⱼ — значення A, яке несе ця частинка, ρⱼ — її густина, а W — ядро. Сама густина оцінюється так само:

ρ(r) = Σⱼ mⱼ W(r − rⱼ, h)

Похідні обчислюються аналітично шляхом диференціювання ядра — скінченні різниці не потрібні. Градієнт A у частинці i:

∇A(rᵢ) = Σⱼ mⱼ (Aⱼ / ρⱼ) ∇W(rᵢ − rⱼ, h)

Це і є математичний механізм, який перетворює неперервні рівняння Нав'є-Стокса на дискретну систему частинок.

Сила тиску

Рідина чинить опір стисканню. Коли частинки надто зближуються, густина зростає вище рівноважного значення ρ₀, і відновлювальна сила тиску розштовхує їх. Це обчислюється через рівняння стану — найпростіше з них це закон ідеального газу:

p = k(ρ − ρ₀)

Де k — стала жорсткості. Більше k робить рідину більш нестисливою, але може спричинити чисельну нестабільність (частинки різко «підстрибують»). Справжній нестисливий SPH використовує складніші розв'язувачі тиску (PCISPH або DFSPH), які ітеративно забезпечують нульову дивергенцію — ціною вищої обчислювальної вартості.

Сила тиску на частинку i від сусідів j дорівнює:

fᵢ_pressure = −mᵢ Σⱼ mⱼ ((pᵢ + pⱼ) / (2ρⱼ)) ∇W(rᵢ − rⱼ, h)

Симетризований член тиску (pᵢ + pⱼ)/2 важливий — він забезпечує виконання третього закону Ньютона і збереження повного імпульсу системи.

Сила в'язкості

Справжні рідини чинять опір зсуву — це і є в'язкість. Без неї частинки рідини, що проходять поруч одна з одною, не передають жодної енергії, і симуляція виглядає радше як бульбашки, ніж як вода. В'язкісний член SPH додає демпфувальну силу, пропорційну різниці швидкостей між сусідніми частинками:

fᵢ_viscosity = μ Σⱼ mⱼ ((vⱼ − vᵢ) / ρⱼ) ∇²W(rᵢ − rⱼ, h)

Де μ — коефіцієнт динамічної в'язкості, а ∇²W — лапласіан ядра. Мюллер та ін. запропонували спеціальне ядро для цього члена, чий лапласіан завжди додатний — це уникає нестабільностей зі зміною знаку, які турбували попередні реалізації.

Поверхневий натяг

Вода утворює краплі, тому що внутрішні молекули притягуються однаково в усіх напрямках, тоді як поверхневі молекули відчувають сумарну силу, спрямовану всередину. У SPH це моделюється за допомогою кольорового поля — скаляра, що дорівнює 1 усередині рідини й 0 поза нею. Градієнт цього поля спрямований до поверхні рідини; його кривизна визначає силу поверхневого натягу.

Поверхневий натяг — те, що робить симуляції рідини SPH красивими: вода збирається в краплі, краплі зливаються, а тонкі плівки природно розриваються. Без нього частинки рідини розсіюються в безформну хмару.

Чому SPH добре підходить для течій із вільною поверхнею

Сітчасті методи відстежують, які комірки сітки містять рідину, а які порожні. У міру руху поверхні комірки потрібно класифікувати, заповнювати й спорожняти — завдання обліку, що вимагає спеціальних методів, таких як Volume of Fluid (VOF) або підходи Level Set.

У SPH немає сітки. Частинки і є рідиною. Куди рухаються частинки, туди природно й слідує поверхня рідини. Розбризкування, злиття, розпад, утворення крапель — усе це виникає автоматично з динаміки частинок без будь-якого явного відстеження поверхні.

Це робить SPH методом вибору для:

Подивіться на SPH у дії прямо у браузері — інтерактивна симуляція на /fluid/ запускає тисячі частинок у реальному часі. Спробуйте наливати рідину під різними кутами або додавати перешкоди, щоб побачити, як потік розділяється і возз'єднується.

Виклик продуктивності

Наївний алгоритм SPH перевіряє кожну частинку відносно кожної іншої, щоб знайти сусідів у межах радіуса 2h. Це O(n²) роботи — подвоєння кількості частинок вчетверо збільшує обчислення.

На практиці всі реалізації SPH реального часу використовують просторове хешування: простір ділиться на комірки розміром 2h, і кожна частинка призначається комірці. Запити сусідів потребують перевірки лише 27 навколишніх комірок (у 3D). Це знижує складність до O(n) у середньому для рівномірно розподілених частинок.

Навіть так, тисячі частинок на кадр близькі до межі можливостей CPU для симуляції реального часу. Сучасний високоточний SPH використовує обчислювальні шейдери GPU, щоб виконувати пошук сусідів і обчислення сил паралельно на тисячах потоків GPU одночасно, дозволяючи мільйонам частинок працювати в інтерактивному темпі.

Часті запитання

Що таке метод згладжених частинок гідродинаміки (SPH)?

Smoothed Particle Hydrodynamics (SPH) — це метод обчислювальної гідродинаміки, який представляє рідини як сукупність дискретних частинок, а не фіксовану сітку. Кожна частинка несе такі властивості, як маса, густина, тиск і швидкість, а взаємодії обчислюються шляхом згладжування цих властивостей за допомогою функції ядра.

Як працює сила тиску в SPH?

У SPH тиск у кожній частинці обчислюється з її локальної густини за допомогою рівняння стану. Сила градієнта тиску виштовхує частинки з областей високого тиску в області низького тиску, запобігаючи стисканню. Це наближається шляхом підсумовування зважених внесків від сусідніх частинок у межах радіуса ядра згладжування.

Що таке ядро згладжування в SPH?

Ядро згладжування (також зване ваговою функцією або функцією ядра) визначає, наскільки сильно сусідні частинки впливають одна на одну залежно від відстані. Популярні варіанти включають кубічний сплайн-ядро та ядро Вендланда. Ядро повинне бути симетричним, нормалізованим і наближатися до дельта-функції Дірака, коли довжина згладжування прямує до нуля.

Як моделюється в'язкість у SPH?

В'язкість у SPH зазвичай моделюється як штучний в'язкісний член, доданий до обчислення сили між парами частинок. В'язка сила чинить опір відносному руху між сусідніми частинками, згладжуючи різниці швидкостей. Цей член запобігає взаємопроникненню частинок і стабілізує симуляцію.

Що визначає кількість частинок у симуляції SPH?

Кількість частинок — це компроміс між точністю і обчислювальною вартістю. Більше частинок дає вищу роздільну здатність і плавніші результати, але масштабується як O(N log N) для пошуку сусідів. Типові інтерактивні симуляції використовують від 1 000 до 100 000 частинок, тоді як продакшн-симуляції для фільмів — мільйони.

Що таке рівняння неперервності в симуляції рідини?

Рівняння неперервності стверджує, що маса має зберігатися — що втекло, те й вийшло. У SPH воно керує тим, як густина змінюється з часом залежно від швидкостей частинок та їхніх сусідів. Воно гарантує, що симуляція протягом усього обчислення дотримується фізичного закону збереження маси.

Як працює поверхневий натяг у SPH?

Поверхневий натяг у SPH моделюється за допомогою сил притягання між частинками на поверхні рідини. Частинки на межі мають менше сусідів, ніж внутрішні частинки, що створює дисбаланс, який притягує поверхневі частинки всередину, імітуючи молекулярні сили, відповідальні за реальний поверхневий натяг.

Які обмеження має SPH для симуляції рідини?

SPH має труднощі з нестабільністю розтягу (штучне злипання частинок), підтримкою нестисливості (часто вимагає малих кроків за часом), граничними умовами (стіни складно реалізувати) та обчислювальною вартістю для сцен високої роздільної здатності. Такі техніки, як position-based fluids чи сітчасті методи, часто доповнюють SPH для різних сценаріїв.

У чому різниця між SPH і сітчастими симуляціями рідини?

Сітчасті методи (наприклад, скінченні різниці чи скінченні об'єми) розв'язують рівняння рідини на фіксованих просторових сітках, що робить їх ефективними для великих однорідних областей рідини. SPH є лагранжевим — він рухається разом із рідиною — що робить його природним для вільних поверхонь, розбризкування й великих деформацій, але менш ефективним для об'ємних областей рідини.

Як оптимізується пошук сусідів у SPH?

Наївний пошук сусідів має складність O(N²), оскільки кожна частинка повинна перевірити кожну іншу. Симуляції SPH використовують просторове хешування, рівномірні сітки або k-d дерева, щоб знизити це до O(N log N) або навіть O(N) на практиці. Кожній частинці потрібно перевіряти лише сусідів у межах радіуса ядра згладжування h.