[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