12 const std::vector<RigidBody>& bodies,
15 const float h = params.
h;
16 const float alpha = params.
alpha_T;
17 const float m = params.
mass;
18 const float h_conv = params.
h_conv;
19 const float supp_sq = 4.0f * h * h;
20 const float eps2 = 0.01f * h * h;
21 const int n =
static_cast<int>(particles.size());
23 for (
int i = 0; i < n; ++i) {
27 grid.
query(pi.x, pi.y, [&](
int j) {
30 const float rx = pi.x - pj.
x, ry = pi.y - pj.
y;
31 const float r2 = rx * rx + ry * ry;
32 if (r2 >= supp_sq || r2 < 1e-10f)
return;
33 const float r = std::sqrt(r2);
35 dT += 2.0f * alpha * (m / pj.
density)
37 * rij_dot_gradW / (r2 + eps2);
41 const float dx = pi.x - body.x, dy = pi.y - body.y;
42 const float d = std::sqrt(dx * dx + dy * dy);
43 if (d < body.radius + 2.0f * h) {
44 const float excess = std::max(0.0f, d - body.radius);
45 const float phi = 1.0f - excess / (2.0f * h);
46 dT += h_conv * (body.temperature - pi.temperature) * phi;
A single SPH fluid particle (float precision for performance)
float density
SPH density rho_i [kg/m^3].
A rigid spherical body that interacts with fluid particles.