Skip to content

Commit 4da76f9

Browse files
Fixed incontinence with octree.h and particle.h
1 parent bda66cc commit 4da76f9

1 file changed

Lines changed: 16 additions & 10 deletions

File tree

src/gravity/octree.h

Lines changed: 16 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -95,22 +95,28 @@ inline void bhAccel(Octree* node, const Particle& p, real theta,
9595
{
9696
if (!node || node->m == 0) return;
9797

98+
constexpr real G = real(6.67430e-11);
99+
constexpr real eps = real(1e-6);
100+
98101
real dx = node->cx - p.x;
99102
real dy = node->cy - p.y;
100103
real dz = node->cz - p.z;
101104

102-
real dist2 = dx*dx + dy*dy + dz*dz + real(1e-6);
103-
real dist = std::sqrt(dist2);
105+
// same softening style as Gravity(): + eps^2
106+
real distSq = dx*dx + dy*dy + dz*dz + eps*eps;
107+
real dist = std::sqrt(distSq);
104108

105109
// Barnes–Hut acceptance criterion
106-
if (node->leaf || (node->size / dist) < theta) {
107-
constexpr real G = real(6.67430e-11);
108-
real inv = real(1) / (dist2 * dist); // 1 / r^3
109-
real f = G * node->m * inv;
110-
111-
ax += dx * f;
112-
ay += dy * f;
113-
az += dz * f;
110+
// node->size is half-width → full size = 2*size
111+
if (node->leaf || ( (node->size * real(2)) / dist ) < theta) {
112+
real invDist = real(1) / dist;
113+
real invDist3 = invDist * invDist * invDist; // 1 / r^3
114+
115+
real fac = G * node->m * invDist3;
116+
117+
ax += dx * fac;
118+
ay += dy * fac;
119+
az += dz * fac;
114120
return;
115121
}
116122

0 commit comments

Comments
 (0)