[Yt-svn] yt: Re-cythonizing with a fix for the FloatDivision bug in the n...

hg at spacepope.org hg at spacepope.org
Tue Nov 9 08:24:10 PST 2010


hg Repository: yt
details:   yt/rev/94fb40d8b41a
changeset: 3510:94fb40d8b41a
user:      Matthew Turk <matthewturk at gmail.com>
date:
Tue Nov 09 08:24:06 2010 -0800
description:
Re-cythonizing with a fix for the FloatDivision bug in the non-ortho rays.

diffstat:

 yt/utilities/_amr_utils/RayIntegrators.pyx |    34 +-
 yt/utilities/amr_utils.c                   |  4789 ++++++++++++---------------
 2 files changed, 2182 insertions(+), 2641 deletions(-)

diffs (truncated from 15473 to 300 lines):

diff -r 2bf5524cb6bf -r 94fb40d8b41a yt/utilities/_amr_utils/RayIntegrators.pyx
--- a/yt/utilities/_amr_utils/RayIntegrators.pyx	Mon Nov 08 21:15:09 2010 -0800
+++ b/yt/utilities/_amr_utils/RayIntegrators.pyx	Tue Nov 09 08:24:06 2010 -0800
@@ -138,23 +138,29 @@
     # Do left edge then right edge in each dim
     cdef int i, x, y
     cdef np.float64_t tl, tr, intersect_t, enter_t, exit_t, dt_tolerance
-    cdef np.ndarray[np.int64_t,   ndim=1] step = np.empty((3,), dtype=np.int64)
-    cdef np.ndarray[np.int64_t,   ndim=1] cur_ind = np.empty((3,), dtype=np.int64)
-    cdef np.ndarray[np.float64_t, ndim=1] tdelta = np.empty((3,), dtype=np.float64)
-    cdef np.ndarray[np.float64_t, ndim=1] tmax = np.empty((3,), dtype=np.float64)
-    cdef np.ndarray[np.float64_t, ndim=1] intersect = np.empty((3,), dtype=np.float64)
+    cdef np.float64_t iv_dir[3], tdelta[3], tmax[3], intersect[3]
+    cdef np.int64_t step[3], cur_ind[3]
     intersect_t = 1
     dt_tolerance = 1e-6
     # recall p = v * t + u
     #  where p is position, v is our vector, u is the start point
     for i in range(3):
         # As long as we're iterating, set some other stuff, too
-        if(v[i] < 0): step[i] = -1
-        else: step[i] = 1
+        if(v[i] < 0):
+            step[i] = -1
+        elif (v[i] == 0):
+            step[i] = 1
+            tmax[i] = 1e60
+            iv_dir[i] = 1e60
+            tdelta[i] = 1e-60
+            continue
+        else:
+            step[i] = 1
         x = (i+1)%3
         y = (i+2)%3
-        tl = (left_edge[i] - u[i])/v[i]
-        tr = (right_edge[i] - u[i])/v[i]
+        iv_dir[i] = 1.0/v[i]
+        tl = (left_edge[i] - u[i])*iv_dir[i]
+        tr = (right_edge[i] - u[i])*iv_dir[i]
         if (left_edge[x] <= (u[x] + tl*v[x]) <= right_edge[x]) and \
            (left_edge[y] <= (u[y] + tl*v[y]) <= right_edge[y]) and \
            (0.0 <= tl < intersect_t):
@@ -170,15 +176,15 @@
         intersect_t = 0.0
     if not (0 <= intersect_t <= 1): return
     # Now get the indices of the intersection
-    intersect = u + intersect_t * v
     for i in range(3):
+        intersect[i] = u[i] + intersect_t * v[i]
         cur_ind[i] = np.floor((intersect[i] + 1e-8*dx[i] - left_edge[i])/dx[i])
-        tmax[i] = (((cur_ind[i]+step[i])*dx[i])+left_edge[i]-u[i])/v[i]
+        tmax[i] = (((cur_ind[i]+step[i])*dx[i])+left_edge[i]-u[i])*iv_dir[i]
         if cur_ind[i] == grid_mask.shape[i] and step[i] < 0:
             cur_ind[i] = grid_mask.shape[i] - 1
-        if step[i] > 0: tmax[i] = (((cur_ind[i]+1)*dx[i])+left_edge[i]-u[i])/v[i]
-        if step[i] < 0: tmax[i] = (((cur_ind[i]+0)*dx[i])+left_edge[i]-u[i])/v[i]
-        tdelta[i] = (dx[i]/v[i])
+        if step[i] > 0: tmax[i] = (((cur_ind[i]+1)*dx[i])+left_edge[i]-u[i])*iv_dir[i]
+        if step[i] < 0: tmax[i] = (((cur_ind[i]+0)*dx[i])+left_edge[i]-u[i])*iv_dir[i]
+        tdelta[i] = (dx[i]*iv_dir[i])
         if tdelta[i] < 0: tdelta[i] *= -1
     # The variable intersect contains the point we first pierce the grid
     enter_t = intersect_t
diff -r 2bf5524cb6bf -r 94fb40d8b41a yt/utilities/amr_utils.c
--- a/yt/utilities/amr_utils.c	Mon Nov 08 21:15:09 2010 -0800
+++ b/yt/utilities/amr_utils.c	Tue Nov 09 08:24:06 2010 -0800
@@ -1,4 +1,4 @@
-/* Generated by Cython 0.13 on Sun Oct 31 12:35:26 2010 */
+/* Generated by Cython 0.13.beta0 on Tue Nov  9 08:21:49 2010 */
 
 #define PY_SSIZE_T_CLEAN
 #include "Python.h"
@@ -151,11 +151,6 @@
 #endif
 
 #if PY_MAJOR_VERSION >= 3
-  #define PyBoolObject PyLongObject
-#endif
-
-
-#if PY_MAJOR_VERSION >= 3
   #define __Pyx_PyNumber_Divide(x,y)         PyNumber_TrueDivide(x,y)
   #define __Pyx_PyNumber_InPlaceDivide(x,y)  PyNumber_InPlaceTrueDivide(x,y)
 #else
@@ -383,7 +378,7 @@
 
 typedef npy_cdouble __pyx_t_5numpy_complex_t;
 
-/* "/sdata/cemoody/code/yt/yt/utilities/_amr_utils/VolumeIntegrator.pyx":76
+/* "/Users/matthewturk/yt/yt/yt/utilities/_amr_utils/VolumeIntegrator.pyx":76
  * cdef class VectorPlane
  * 
  * cdef struct FieldInterpolationTable:             # <<<<<<<<<<<<<<
@@ -403,7 +398,7 @@
   int pass_through;
 };
 
-/* "/sdata/cemoody/code/yt/yt/utilities/_amr_utils/VolumeIntegrator.pyx":89
+/* "/Users/matthewturk/yt/yt/yt/utilities/_amr_utils/VolumeIntegrator.pyx":89
  *     int pass_through
  * 
  * cdef void FIT_initialize_table(FieldInterpolationTable *fit, int nbins,             # <<<<<<<<<<<<<<
@@ -418,7 +413,7 @@
   int pass_through;
 };
 
-/* "/sdata/cemoody/code/yt/yt/utilities/_amr_utils/QuadTree.pyx":39
+/* "/Users/matthewturk/yt/yt/yt/utilities/_amr_utils/QuadTree.pyx":39
  *     void *alloca(int)
  * 
  * cdef struct QuadTreeNode:             # <<<<<<<<<<<<<<
@@ -435,7 +430,7 @@
   struct __pyx_t_2yt_9utilities_9amr_utils_QuadTreeNode *children[2][2];
 };
 
-/* "/sdata/cemoody/code/yt/yt/utilities/_amr_utils/VolumeIntegrator.pyx":74
+/* "/Users/matthewturk/yt/yt/yt/utilities/_amr_utils/VolumeIntegrator.pyx":74
  *                                        np.float64_t *data, np.float64_t *grad)
  * 
  * cdef class VectorPlane             # <<<<<<<<<<<<<<
@@ -467,7 +462,7 @@
   __pyx_t_5numpy_float64_t *y_vec;
 };
 
-/* "/sdata/cemoody/code/yt/yt/utilities/_amr_utils/DepthFirstOctree.pyx":36
+/* "/Users/matthewturk/yt/yt/yt/utilities/_amr_utils/DepthFirstOctree.pyx":36
  *         self.refined_pos = 0
  * 
  * cdef class OctreeGrid:             # <<<<<<<<<<<<<<
@@ -486,7 +481,7 @@
   int offset;
 };
 
-/* "/sdata/cemoody/code/yt/yt/utilities/_amr_utils/QuadTree.pyx":99
+/* "/Users/matthewturk/yt/yt/yt/utilities/_amr_utils/QuadTree.pyx":99
  *     free(node)
  * 
  * cdef class QuadTree:             # <<<<<<<<<<<<<<
@@ -503,7 +498,7 @@
   __pyx_t_5numpy_int64_t top_grid_dims[2];
 };
 
-/* "/sdata/cemoody/code/yt/yt/utilities/_amr_utils/VolumeIntegrator.pyx":543
+/* "/Users/matthewturk/yt/yt/yt/utilities/_amr_utils/VolumeIntegrator.pyx":543
  *             tf.eval_transfer(dt, self.dvs, rgba, grad)
  * 
  * cdef class GridFace:             # <<<<<<<<<<<<<<
@@ -520,7 +515,7 @@
   __pyx_t_5numpy_float64_t right_edge[3];
 };
 
-/* "/sdata/cemoody/code/yt/yt/utilities/_amr_utils/DepthFirstOctree.pyx":54
+/* "/Users/matthewturk/yt/yt/yt/utilities/_amr_utils/DepthFirstOctree.pyx":54
  *         self.offset = offset
  * 
  * cdef class OctreeGridList:             # <<<<<<<<<<<<<<
@@ -533,7 +528,7 @@
   PyObject *grids;
 };
 
-/* "/sdata/cemoody/code/yt/yt/utilities/_amr_utils/DepthFirstOctree.pyx":30
+/* "/Users/matthewturk/yt/yt/yt/utilities/_amr_utils/DepthFirstOctree.pyx":30
  * cimport cython
  * 
  * cdef class position:             # <<<<<<<<<<<<<<
@@ -547,7 +542,7 @@
   int refined_pos;
 };
 
-/* "/sdata/cemoody/code/yt/yt/utilities/_amr_utils/VolumeIntegrator.pyx":118
+/* "/Users/matthewturk/yt/yt/yt/utilities/_amr_utils/VolumeIntegrator.pyx":118
  *     return (bv + dd*dy*fit.idbin)
  * 
  * cdef class TransferFunctionProxy:             # <<<<<<<<<<<<<<
@@ -568,7 +563,7 @@
   PyObject *my_field_tables;
 };
 
-/* "/sdata/cemoody/code/yt/yt/utilities/_amr_utils/VolumeIntegrator.pyx":299
+/* "/Users/matthewturk/yt/yt/yt/utilities/_amr_utils/VolumeIntegrator.pyx":299
  *             tv[offset + k] = fv[k]
  * 
  * cdef class PartitionedGrid:             # <<<<<<<<<<<<<<
@@ -593,7 +588,7 @@
   int n_fields;
 };
 
-/* "/sdata/cemoody/code/yt/yt/utilities/_amr_utils/VolumeIntegrator.pyx":575
+/* "/Users/matthewturk/yt/yt/yt/utilities/_amr_utils/VolumeIntegrator.pyx":575
  *         return 1
  * 
  * cdef class ProtoPrism:             # <<<<<<<<<<<<<<
@@ -613,7 +608,7 @@
 };
 
 
-/* "/sdata/cemoody/code/yt/yt/utilities/_amr_utils/VolumeIntegrator.pyx":299
+/* "/Users/matthewturk/yt/yt/yt/utilities/_amr_utils/VolumeIntegrator.pyx":299
  *             tv[offset + k] = fv[k]
  * 
  * cdef class PartitionedGrid:             # <<<<<<<<<<<<<<
@@ -629,7 +624,7 @@
 static struct __pyx_vtabstruct_2yt_9utilities_9amr_utils_PartitionedGrid *__pyx_vtabptr_2yt_9utilities_9amr_utils_PartitionedGrid;
 
 
-/* "/sdata/cemoody/code/yt/yt/utilities/_amr_utils/QuadTree.pyx":99
+/* "/Users/matthewturk/yt/yt/yt/utilities/_amr_utils/QuadTree.pyx":99
  *     free(node)
  * 
  * cdef class QuadTree:             # <<<<<<<<<<<<<<
@@ -646,7 +641,7 @@
 static struct __pyx_vtabstruct_2yt_9utilities_9amr_utils_QuadTree *__pyx_vtabptr_2yt_9utilities_9amr_utils_QuadTree;
 
 
-/* "/sdata/cemoody/code/yt/yt/utilities/_amr_utils/VolumeIntegrator.pyx":222
+/* "/Users/matthewturk/yt/yt/yt/utilities/_amr_utils/VolumeIntegrator.pyx":222
  *             #rgba[i+3] += trgba[i] * (1.0 - rgba[i+3])*dt*trgba[i+3]
  * 
  * cdef class VectorPlane:             # <<<<<<<<<<<<<<
@@ -662,7 +657,7 @@
 static struct __pyx_vtabstruct_2yt_9utilities_9amr_utils_VectorPlane *__pyx_vtabptr_2yt_9utilities_9amr_utils_VectorPlane;
 
 
-/* "/sdata/cemoody/code/yt/yt/utilities/_amr_utils/VolumeIntegrator.pyx":543
+/* "/Users/matthewturk/yt/yt/yt/utilities/_amr_utils/VolumeIntegrator.pyx":543
  *             tf.eval_transfer(dt, self.dvs, rgba, grad)
  * 
  * cdef class GridFace:             # <<<<<<<<<<<<<<
@@ -676,7 +671,7 @@
 static struct __pyx_vtabstruct_2yt_9utilities_9amr_utils_GridFace *__pyx_vtabptr_2yt_9utilities_9amr_utils_GridFace;
 
 
-/* "/sdata/cemoody/code/yt/yt/utilities/_amr_utils/VolumeIntegrator.pyx":575
+/* "/Users/matthewturk/yt/yt/yt/utilities/_amr_utils/VolumeIntegrator.pyx":575
  *         return 1
  * 
  * cdef class ProtoPrism:             # <<<<<<<<<<<<<<
@@ -690,7 +685,7 @@
 static struct __pyx_vtabstruct_2yt_9utilities_9amr_utils_ProtoPrism *__pyx_vtabptr_2yt_9utilities_9amr_utils_ProtoPrism;
 
 
-/* "/sdata/cemoody/code/yt/yt/utilities/_amr_utils/VolumeIntegrator.pyx":118
+/* "/Users/matthewturk/yt/yt/yt/utilities/_amr_utils/VolumeIntegrator.pyx":118
  *     return (bv + dd*dy*fit.idbin)
  * 
  * cdef class TransferFunctionProxy:             # <<<<<<<<<<<<<<
@@ -957,7 +952,7 @@
 
 static PyObject *__Pyx_Import(PyObject *name, PyObject *from_list); /*proto*/
 
-static CYTHON_INLINE PyObject *__Pyx_PyInt_to_py_Py_intptr_t(Py_intptr_t);
+static CYTHON_INLINE PyObject *__Pyx_PyInt_to_py_npy_intp(npy_intp);
 
 static CYTHON_INLINE npy_int32 __Pyx_PyInt_from_py_npy_int32(PyObject *);
 
@@ -1833,7 +1828,7 @@
 static PyObject *__pyx_int_3;
 static PyObject *__pyx_int_15;
 
-/* "/sdata/cemoody/code/yt/yt/utilities/_amr_utils/DepthFirstOctree.pyx":31
+/* "/Users/matthewturk/yt/yt/yt/utilities/_amr_utils/DepthFirstOctree.pyx":31
  * 
  * cdef class position:
  *     cdef public int output_pos, refined_pos             # <<<<<<<<<<<<<<
@@ -1925,7 +1920,7 @@
   return __pyx_r;
 }
 
-/* "/sdata/cemoody/code/yt/yt/utilities/_amr_utils/DepthFirstOctree.pyx":32
+/* "/Users/matthewturk/yt/yt/yt/utilities/_amr_utils/DepthFirstOctree.pyx":32
  * cdef class position:
  *     cdef public int output_pos, refined_pos
  *     def __cinit__(self):             # <<<<<<<<<<<<<<
@@ -1941,7 +1936,7 @@
     __Pyx_RaiseArgtupleInvalid("__cinit__", 1, 0, 0, PyTuple_GET_SIZE(__pyx_args)); return -1;}
   if (unlikely(__pyx_kwds) && unlikely(PyDict_Size(__pyx_kwds) > 0) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "__cinit__", 0))) return -1;
 
-  /* "/sdata/cemoody/code/yt/yt/utilities/_amr_utils/DepthFirstOctree.pyx":33
+  /* "/Users/matthewturk/yt/yt/yt/utilities/_amr_utils/DepthFirstOctree.pyx":33
  *     cdef public int output_pos, refined_pos
  *     def __cinit__(self):
  *         self.output_pos = 0             # <<<<<<<<<<<<<<
@@ -1950,7 +1945,7 @@
  */
   ((struct __pyx_obj_2yt_9utilities_9amr_utils_position *)__pyx_v_self)->output_pos = 0;
 
-  /* "/sdata/cemoody/code/yt/yt/utilities/_amr_utils/DepthFirstOctree.pyx":34
+  /* "/Users/matthewturk/yt/yt/yt/utilities/_amr_utils/DepthFirstOctree.pyx":34
  *     def __cinit__(self):
  *         self.output_pos = 0
  *         self.refined_pos = 0             # <<<<<<<<<<<<<<
@@ -1964,7 +1959,7 @@
   return __pyx_r;
 }
 
-/* "/sdata/cemoody/code/yt/yt/utilities/_amr_utils/DepthFirstOctree.pyx":37
+/* "/Users/matthewturk/yt/yt/yt/utilities/_amr_utils/DepthFirstOctree.pyx":37
  * 
  * cdef class OctreeGrid:
  *     cdef public object child_indices, fields, left_edges, dimensions, dx             # <<<<<<<<<<<<<<



More information about the yt-svn mailing list