/** * Determine which subcell to select. * Combination of intcoord and oldSubindex. * * @param t the root of the tree */ public int subindex(BTree tree, int l) { MathVector xp = MathVector.makeMathVector(); double imxv = (double)Node.IMAX; double xsc = (pos.value(0) - tree.rmin.value(0)) / tree.rsize; xp.setValue(0, Math.Floor(imxv * xsc)); xsc = (pos.value(1) - tree.rmin.value(1)) / tree.rsize; xp.setValue(1, Math.Floor(imxv * xsc)); xsc = (pos.value(2) - tree.rmin.value(2)) / tree.rsize; xp.setValue(2, Math.Floor(imxv * xsc)); int i = 0; for (int k = 0; k < MathVector.NDIM; k++) { if (((int)xp.value(k) & l) != 0) //This used val & 1 != 0 so if there is a problem look here { i += Cell.NSUB >> (k + 1); } } return(i); }
/** * Compute integerized coordinates. * * @return the coordinates or null if rp is out of bounds */ public MathVector intcoord(MathVector vp) { MathVector xp = MathVector.makeMathVector(); double imxv = (double)Node.IMAX; double xsc = (vp.value(0) - rmin.value(0)) / rsize; if (0.0 <= xsc && xsc < 1.0) { xp.setValue(0, Math.Floor(imxv * xsc)); } else { return(null); } xsc = (vp.value(1) - rmin.value(1)) / rsize; if (0.0 <= xsc && xsc < 1.0) { xp.setValue(1, Math.Floor(imxv * xsc)); } else { return(null); } xsc = (vp.value(2) - rmin.value(2)) / rsize; if (0.0 <= xsc && xsc < 1.0) { xp.setValue(2, Math.Floor(imxv * xsc)); } else { return(null); } return(xp); }