[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