Fixed representation and walking of arbitrary sized OctTree
This commit is contained in:
parent
bdb9825213
commit
a4ffa66b8d
@ -32,6 +32,17 @@ OctTree::OctTree(const FCoordinates *particles, octPtr numParticles,
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
lenNorm = 0;
|
||||||
|
for (octPtr i = 0; i < numParticles; i++)
|
||||||
|
{
|
||||||
|
for (int j = 0; j < 3; j++)
|
||||||
|
{
|
||||||
|
float delta = particles[i][j]-xMin[j];
|
||||||
|
if (delta > lenNorm)
|
||||||
|
lenNorm = delta;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
cout << xMin[0] << " " << xMin[1] << " " << xMin[2] << " lNorm=" << lenNorm << endl;
|
||||||
|
|
||||||
cells = new OctCell[numCells];
|
cells = new OctCell[numCells];
|
||||||
Lbox = (float)(octCoordTypeNorm+1);
|
Lbox = (float)(octCoordTypeNorm+1);
|
||||||
@ -94,11 +105,14 @@ void OctTree::insertParticle(octPtr node,
|
|||||||
}
|
}
|
||||||
|
|
||||||
for (int j = 0; j < 3; j++)
|
for (int j = 0; j < 3; j++)
|
||||||
if ((octPtr)(particles[particleId][j]*Lbox) > icoord[j])
|
{
|
||||||
|
float treePos = (particles[particleId][j]-xMin[j])*Lbox/lenNorm;
|
||||||
|
if ((octPtr)(treePos) > icoord[j])
|
||||||
{
|
{
|
||||||
octPos |= (1 << j);
|
octPos |= (1 << j);
|
||||||
ipos[j] = 1;
|
ipos[j] = 1;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if (cells[node].children[octPos] == emptyOctCell)
|
if (cells[node].children[octPos] == emptyOctCell)
|
||||||
{
|
{
|
||||||
|
@ -77,10 +77,10 @@ namespace CosmoTool
|
|||||||
for (int j = 0; j < 3; j++)
|
for (int j = 0; j < 3; j++)
|
||||||
{
|
{
|
||||||
center[j] = icoord[j]/(2.*octCoordCenter);
|
center[j] = icoord[j]/(2.*octCoordCenter);
|
||||||
realCenter[j] = center[j]*lenNorm+xMin[j];
|
realCenter[j] = xMin[j] + center[j]*lenNorm;
|
||||||
}
|
}
|
||||||
|
|
||||||
f(realCenter, cells[node].numberLeaves, halfNodeLength/(float)octCoordCenter,
|
f(realCenter, cells[node].numberLeaves, lenNorm*halfNodeLength/(float)octCoordCenter,
|
||||||
cells[node].children[0] == invalidOctCell, // True if this is a meta-node
|
cells[node].children[0] == invalidOctCell, // True if this is a meta-node
|
||||||
false);
|
false);
|
||||||
|
|
||||||
@ -104,7 +104,7 @@ namespace CosmoTool
|
|||||||
}
|
}
|
||||||
|
|
||||||
f(realCenter,
|
f(realCenter,
|
||||||
1, halfNodeLength/(2.*octCoordCenter),
|
1, lenNorm*halfNodeLength/(2.*octCoordCenter),
|
||||||
false, true);
|
false, true);
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user