[yt-svn] commit/yt: ngoldbaum: Merged in brittonsmith/yt (pull request #1972)
commits-noreply at bitbucket.org
commits-noreply at bitbucket.org
Wed Feb 24 11:33:23 PST 2016
1 new commit in yt:
https://bitbucket.org/yt_analysis/yt/commits/dda193582d6c/
Changeset: dda193582d6c
Branch: yt
User: ngoldbaum
Date: 2016-02-24 19:33:14+00:00
Summary: Merged in brittonsmith/yt (pull request #1972)
Porting c function, FindBindingEnergy, to Cython
Affected #: 2 files
diff -r cef8aa8a3bb23ecdc6cd8f91d3bdf1701fb1608e -r dda193582d6c210518df5d127cef1a7294dca692 yt/analysis_modules/level_sets/clump_validators.py
--- a/yt/analysis_modules/level_sets/clump_validators.py
+++ b/yt/analysis_modules/level_sets/clump_validators.py
@@ -13,7 +13,8 @@
# The full license is in the file COPYING.txt, distributed with this software.
#-----------------------------------------------------------------------------
-from yt.utilities.data_point_utilities import FindBindingEnergy
+from yt.utilities.lib.misc_utilities import \
+ gravitational_binding_energy
from yt.utilities.operator_registry import \
OperatorRegistry
from yt.utilities.physical_constants import \
@@ -64,11 +65,12 @@
(bulk_velocity[2] - clump["all", "particle_velocity_z"])**2)).sum()
potential = clump.data.ds.quan(G *
- FindBindingEnergy(clump["gas", "cell_mass"].in_cgs(),
- clump["index", "x"].in_cgs(),
- clump["index", "y"].in_cgs(),
- clump["index", "z"].in_cgs(),
- truncate, (kinetic / G).in_cgs()),
+ gravitational_binding_energy(
+ clump["gas", "cell_mass"].in_cgs(),
+ clump["index", "x"].in_cgs(),
+ clump["index", "y"].in_cgs(),
+ clump["index", "z"].in_cgs(),
+ truncate, (kinetic / G).in_cgs()),
kinetic.in_cgs().units)
if truncate and potential >= kinetic:
@@ -76,7 +78,7 @@
if use_particles:
potential += clump.data.ds.quan(G *
- FindBindingEnergy(
+ gravitational_binding_energy(
clump["all", "particle_mass"].in_cgs(),
clump["all", "particle_position_x"].in_cgs(),
clump["all", "particle_position_y"].in_cgs(),
diff -r cef8aa8a3bb23ecdc6cd8f91d3bdf1701fb1608e -r dda193582d6c210518df5d127cef1a7294dca692 yt/utilities/lib/misc_utilities.pyx
--- a/yt/utilities/lib/misc_utilities.pyx
+++ b/yt/utilities/lib/misc_utilities.pyx
@@ -13,12 +13,13 @@
# The full license is in the file COPYING.txt, distributed with this software.
#-----------------------------------------------------------------------------
+from yt.funcs import get_pbar
import numpy as np
from yt.units.yt_array import YTArray
cimport numpy as np
cimport cython
cimport libc.math as math
-from libc.math cimport abs
+from libc.math cimport abs, sqrt
from yt.utilities.lib.fp_utils cimport fmin, fmax, i64min, i64max
from yt.geometry.selection_routines cimport _ensure_code
@@ -974,6 +975,51 @@
else:
dest[i,j,k] = dsp
+ at cython.cdivision(True)
+ at cython.boundscheck(False)
+ at cython.wraparound(False)
+def gravitational_binding_energy(
+ np.float64_t[:] mass,
+ np.float64_t[:] x,
+ np.float64_t[:] y,
+ np.float64_t[:] z,
+ int truncate,
+ np.float64_t kinetic):
+
+ cdef int q_outer, q_inner, n_q, i
+ cdef np.float64_t mass_o, x_o, y_o, z_o
+ cdef np.float64_t mass_i, x_i, y_i, z_i
+ cdef np.float64_t this_potential, total_potential
+ total_potential = 0.
+
+ i = 0
+ n_q = mass.size
+ pbar = get_pbar("Calculating potential for %d cells" % n_q,
+ 0.5 * (n_q**2 - n_q))
+ for q_outer in range(n_q - 1):
+ this_potential = 0.
+ mass_o = mass[q_outer]
+ x_o = x[q_outer]
+ y_o = y[q_outer]
+ z_o = z[q_outer]
+ for q_inner in range(q_outer + 1, n_q):
+ mass_i = mass[q_inner]
+ x_i = x[q_inner]
+ y_i = y[q_inner]
+ z_i = z[q_inner]
+ this_potential += mass_o * mass_i / \
+ sqrt((x_i - x_o) * (x_i - x_o) +
+ (y_i - y_o) * (y_i - y_o) +
+ (z_i - z_o) * (z_i - z_o))
+ i += n_q - q_outer
+ pbar.update(i)
+ total_potential += this_potential
+ if truncate and total_potential / kinetic > 1.:
+ break
+ pbar.finish()
+
+ return total_potential
+
# The OnceIndirect code is from:
# http://stackoverflow.com/questions/10465091/assembling-a-cython-memoryview-from-numpy-arrays/12991519#12991519
# This is under the CC-BY-SA license.
Repository URL: https://bitbucket.org/yt_analysis/yt/
--
This is a commit notification from bitbucket.org. You are receiving
this because you have the service enabled, addressing the recipient of
this email.
More information about the yt-svn
mailing list