[Yt-svn] yt: 5 new changesets

hg at spacepope.org hg at spacepope.org
Sat Jun 5 13:22:17 PDT 2010


hg Repository: yt
details:   yt/rev/1cfdc7cd42a4
changeset: 1729:1cfdc7cd42a4
user:      Stephen Skory <stephenskory at yahoo.com>
date:
Thu Jun 03 11:43:20 2010 -0700
description:
Changing the name of the structure function generator to TwoPointFunctions.py.

hg Repository: yt
details:   yt/rev/61a893a641ba
changeset: 1730:61a893a641ba
user:      Stephen Skory <stephenskory at yahoo.com>
date:
Thu Jun 03 12:03:55 2010 -0700
description:
adding s to the end of the class name

hg Repository: yt
details:   yt/rev/e3f4176d141e
changeset: 1731:e3f4176d141e
user:      Stephen Skory <stephenskory at yahoo.com>
date:
Fri Jun 04 12:48:07 2010 -0700
description:
Committing recent kDtree changes before I make more.

hg Repository: yt
details:   yt/rev/918541af4d30
changeset: 1732:918541af4d30
user:      Stephen Skory <stephenskory at yahoo.com>
date:
Sat Jun 05 13:19:20 2010 -0700
description:
Adding various changes to enable two-point correlation functions.

hg Repository: yt
details:   yt/rev/250e3ad1a5fa
changeset: 1733:250e3ad1a5fa
user:      Stephen Skory <stephenskory at yahoo.com>
date:
Sat Jun 05 13:22:08 2010 -0700
description:
Merging.

diffstat:

 yt/extensions/MergerTree.py                           |    9 +-
 yt/extensions/kdtree/fKD.f90                          |  173 ++++-
 yt/extensions/kdtree/fKD.v                            |   42 +-
 yt/extensions/kdtree/fKD_source.f90                   |   10 +-
 yt/extensions/opengl_widgets/calculateRay.vertex.glsl |   63 +
 yt/extensions/opengl_widgets/colormap.fragment.glsl   |   12 +
 yt/extensions/opengl_widgets/framebuffer.vertex.glsl  |   12 +
 yt/extensions/opengl_widgets/mip.fragment.glsl        |  135 +++
 yt/extensions/opengl_widgets/mip_viewer.py            |  450 +++++++++++++
 yt/extensions/opengl_widgets/rendering_contexts.py    |   88 ++
 yt/lagos/OutputTypes.py                               |   19 +-
 yt/lagos/StructureFunctionGenerator.py                |  750 ----------------------
 yt/lagos/TwoPointFunctions.py                         |  796 +++++++++++++++++++++++
 yt/lagos/__init__.py                                  |    2 +-
 yt/lagos/parallelHOP/parallelHOP.py                   |    9 +-
 yt/mods.py                                            |    2 +-
 16 files changed, 1795 insertions(+), 777 deletions(-)

diffs (truncated from 2821 to 300 lines):

diff -r 5f2eeda09fa5 -r 250e3ad1a5fa yt/extensions/MergerTree.py
--- a/yt/extensions/MergerTree.py	Thu Jun 03 11:06:11 2010 -0700
+++ b/yt/extensions/MergerTree.py	Sat Jun 05 13:22:08 2010 -0700
@@ -24,10 +24,13 @@
 """
 
 import yt.lagos as lagos
-from yt.extensions.kdtree import *
 from yt.lagos.HaloFinding import HaloFinder
 from yt.logger import lagosLogger as mylog
 import yt.extensions.HaloProfiler as HP
+try:
+    from yt.extensions.kdtree import *
+except ImportError:
+    mylog.debug("The Fortran kD-Tree did not import correctly.")
 
 import numpy as na
 import os, glob, md5, time, gc, sys
@@ -303,7 +306,7 @@
         fKD.nn = 5
         fKD.sort = True
         fKD.rearrange = True
-        create_tree()
+        create_tree(0)
 
         # Find the parent points from the database.
         parent_pf = lagos.EnzoStaticOutput(parentfile)
@@ -330,7 +333,7 @@
             candidates[row[0]] = nIDs
         
         del fKD.pos, fKD.tags, fKD.dist
-        free_tree() # Frees the kdtree object.
+        free_tree(0) # Frees the kdtree object.
         
         self.candidates = candidates
         
diff -r 5f2eeda09fa5 -r 250e3ad1a5fa yt/extensions/kdtree/fKD.f90
--- a/yt/extensions/kdtree/fKD.f90	Thu Jun 03 11:06:11 2010 -0700
+++ b/yt/extensions/kdtree/fKD.f90	Sat Jun 05 13:22:08 2010 -0700
@@ -1,21 +1,59 @@
-subroutine create_tree()
+subroutine create_tree(treeID)
     use kdtree2_module
     use fKD_module
+    use tree_setmodule
     use kdtree2module
     use tree_nodemodule
     use intervalmodule
     
+    integer, intent (in), optional         :: treeID
+    
+    integer :: ID
+    
+    if (present(treeID)) then
+       ID = treeID
+    else
+       ID = -1
+    end if
+    
     ! create a kd tree object
+    
+    if (ID == 1) then
+        t1%tree2 => kdtree2_create(t1%pos,sort=t1%sort,rearrange=t1%rearrange)
+    elseif (ID == 2) then
+        t2%tree2 => kdtree2_create(t2%pos,sort=t2%sort,rearrange=t2%rearrange)
+    else
+        tree2 => kdtree2_create(pos,sort=sort,rearrange=rearrange)
+    end if
 
-     tree2 => kdtree2_create(pos,sort=sort,rearrange=rearrange)  ! this is how you create a tree. 
-     return
+    return
 
 end subroutine create_tree
 
+subroutine add_tree(treeID)
+    use kdtree2_module
+    use fKD_module
+    use tree_setmodule
+    use kdtree2module
+    use tree_nodemodule
+    use intervalmodule
+    
+    integer :: treeID
+    
+    if (treeID == 1) then
+        t1 => Newtree_set()
+    elseif (treeID == 2) then
+        t2 => Newtree_set()
+    end if
+    
+    return
+
+end subroutine add_tree
 
 subroutine find_nn_nearest_neighbors()
      use kdtree2_module
      use fKD_module
+     use tree_setmodule
      use kdtree2module
      use tree_nodemodule
      use intervalmodule
@@ -24,7 +62,6 @@
      type(kdtree2_result),allocatable :: results(:) ! nearest neighbors
      !integer, parameter  :: nn ! number of nearest neighbors found
 
-
      allocate(results(nn)) 
 
      call kdtree2_n_nearest(tp=tree2,qv=qv,nn=nn,results=results) 
@@ -48,13 +85,14 @@
     ! nearest neighbors.
     use kdtree2_module
     use fKD_module
+    use tree_setmodule
     use kdtree2module
     use tree_nodemodule
     use intervalmodule
     
     integer :: k, number
     type(kdtree2_result),allocatable :: results(:)
-    
+
     allocate(results(nn))
 
     number = size(qv_many,2)
@@ -70,17 +108,117 @@
 
 end subroutine find_many_nn_nearest_neighbors
 
+subroutine find_r_nearest()
+    ! Given an input array of a point (qv), find the number, fortran indices and
+    ! squared distances to all neighbors within (radius) of (qv).
+    ! The number of neighbors with indices and radius returned is set by
+    ! (radius_n), and if this is smaller than (nfound) when returned,
+    ! there are neighbors missing from the results.
+    ! Store the results in (dist) and (tags).
+    use kdtree2_module
+    use fKD_module
+    use tree_setmodule
+    use kdtree2module
+    use tree_nodemodule
+    use intervalmodule
+    
+    integer :: k
+    type(kdtree2_result),allocatable :: results(:) ! nearest neighbors
+    
+    allocate(results(radius_n))
+    nfound = 0
+    
+    ! do it.
+    call kdtree2_r_nearest(tp=tree2,qv=qv,r2=radius,nfound=nfound,nalloc=radius_n,results=results)
+    
+    tags(:) = results%idx
+    dist(:) = results%dis
+    
+    deallocate(results)
+    return
+
+end subroutine find_r_nearest
+
+subroutine find_many_r_nearest(treeID)
+    ! Given an input array of a points (qv_many), find the number, fortran indices and
+    ! squared distances to all neighbors within (radius) of (qv).
+    ! The number of neighbors with indices and radius returned is set by
+    ! (radius_n), and if this is smaller than (nfound) when returned,
+    ! there are neighbors missing from the results.
+    ! Store the results in (dist) and (tags).
+    use kdtree2_module
+    use fKD_module
+    use tree_setmodule
+    use kdtree2module
+    use tree_nodemodule
+    use intervalmodule
+
+    integer, intent (in), optional         :: treeID
+    
+    integer :: ID
+    integer :: k, number
+    type(kdtree2_result),allocatable :: results(:) ! nearest neighbors
+
+    
+    if (present(treeID)) then
+       ID = treeID
+    else
+       ID = -1
+    end if    
+
+    if (ID==1) then
+        allocate(results(t1%radius_n))
+        number = size(t1%qv_many,2)
+        do k=1, number
+            t1%qv(:) = t1%qv_many(:,k)
+            t1%nfound = t1%nfound_many(k)
+            call kdtree2_r_nearest(tp=t1%tree2,qv=t1%qv,r2=t1%radius,nfound=t1%nfound,nalloc=t1%radius_n,results=results)
+            t1%nfound_many(k) = t1%nfound
+            t1%nn_tags(:, k) = results%idx
+            t1%nn_dist(:, k) = results%dis
+        end do
+    elseif (ID==2) then
+        allocate(results(t2%radius_n))
+        number = size(t2%qv_many,2)
+        do k=1, number
+            t2%qv(:) = t2%qv_many(:,k)
+            t2%nfound = t2%nfound_many(k)
+            call kdtree2_r_nearest(tp=t2%tree2,qv=t2%qv,r2=t2%radius,nfound=t2%nfound,nalloc=t2%radius_n,results=results)
+            t2%nfound_many(k) = t2%nfound
+            t2%nn_tags(:, k) = results%idx
+            t2%nn_dist(:, k) = results%dis
+        end do
+    else
+        allocate(results(radius_n))
+        number = size(qv_many,2)
+        do k=1, number
+            qv(:) = qv_many(:,k)
+            nfound = nfound_many(k)
+            call kdtree2_r_nearest(tp=tree2,qv=qv,r2=radius,nfound=nfound,nalloc=radius_n,results=results)
+            nfound_many(k) = nfound
+            nn_tags(:, k) = results%idx
+            nn_dist(:, k) = results%dis
+        end do
+    end if
+    
+    deallocate(results)
+    return
+
+end subroutine find_many_r_nearest
+
 subroutine find_all_nn_nearest_neighbors()
     ! for all particles in pos, find their nearest neighbors and return the
     ! indexes and distances as big arrays
     use kdtree2_module
     use fKD_module
+    use tree_setmodule
     use kdtree2module
     use tree_nodemodule
     use intervalmodule
-
+    
     integer :: k
     type(kdtree2_result),allocatable :: results(:) ! nearest neighbors
+
     allocate(results(nn))
     
     do k=1,nparts
@@ -99,6 +237,7 @@
     ! for a chunk of the full number of particles, find their nearest neighbors
     use kdtree2_module
     use fKD_module
+    use tree_setmodule
     use kdtree2module
     use tree_nodemodule
     use intervalmodule
@@ -123,6 +262,7 @@
     ! their density. Return only nMerge nearest neighbors.
     use kdtree2_module
     use fKD_module
+    use tree_setmodule
     use kdtree2module
     use tree_nodemodule
     use intervalmodule
@@ -172,16 +312,33 @@
 
 end subroutine chainHOP_tags_dens
 
-subroutine free_tree()
+subroutine free_tree(treeID)
     use kdtree2_module
     use fKD_module
+    use tree_setmodule
     use kdtree2module
     use tree_nodemodule
     use intervalmodule
+
+    integer, intent (in), optional         :: treeID
+    
+    integer :: ID
+    
+    if (present(treeID)) then
+       ID = treeID
+    else
+       ID = -1
+    end if
     
     ! this releases memory for the tree BUT NOT THE ARRAY OF DATA YOU PASSED
     ! TO MAKE THE TREE.  
-    call kdtree2_destroy(tree2)
+    if (ID == 1) then
+        call kdtree2_destroy(t1%tree2)
+    elseif (ID == 2) then
+        call kdtree2_destroy(t2%tree2)
+    else
+        call kdtree2_destroy(tree2)
+    end if
     
     ! The data to make the tree has to be deleted in python BEFORE calling
     ! this!
diff -r 5f2eeda09fa5 -r 250e3ad1a5fa yt/extensions/kdtree/fKD.v
--- a/yt/extensions/kdtree/fKD.v	Thu Jun 03 11:06:11 2010 -0700
+++ b/yt/extensions/kdtree/fKD.v	Sat Jun 05 13:22:08 2010 -0700



More information about the yt-svn mailing list