[yt-dev] Issue #796: Clump finding fails for uniform grid data (yt_analysis/yt)

Kacper Kowalik issues-reply at bitbucket.org
Tue Mar 4 09:31:05 PST 2014


New issue 796: Clump finding fails for uniform grid data
https://bitbucket.org/yt_analysis/yt/issue/796/clump-finding-fails-for-uniform-grid-data

Kacper Kowalik:

Following script:
```
#!python

import numpy as np
from yt.frontends.stream.api import load_uniform_grid
from yt.mods import amods


def gaussian(size, sigma):
    il = size // 2
    x, y, z = np.mgrid[-il + 1:il + 1, -il + 1:il + 1, -il + 1:il + 1]
    sg2 = 2.0 * sigma ** 2
    return np.exp(-(x ** 2 + y ** 2 + z ** 2) / sg2) / (np.pi * sg2)


def diag_shift(tab, n):
    a = np.roll(tab, int(n), axis=0)
    a = np.roll(a, int(n), axis=1)
    return np.roll(a, int(n), axis=2)

N = 64
dims = [N, N, N]
dens = np.ones(dims) \
    + 50.0 * diag_shift(gaussian(N, 5.0), -12) \
    + 10.0 * diag_shift(gaussian(N, 3.0), 10)

data = dict(Density=dens)
bbox = np.array([[-1.0, 1.0], [-1.0, 1.0], [-1.0, 1.0]])
pf = load_uniform_grid(data, dens.shape, 1.0, bbox=bbox, nprocs=2)

field = "Density"
step = 4

data_source = pf.h.all_data()

c_min = 10 ** np.floor(np.log10(data_source[field]).min())
c_max = 10 ** np.floor(np.log10(data_source[field]).max() + 1)

function = 'self.data["%s"].size > 20' % field

master_clump = amods.level_sets.Clump(data_source, None, field,
                                      function=function)
master_clump.clear_clump_info()
master_clump.add_info_item('self.data["%s"].size' % field,
                           '"Cells: %d" % value')
master_clump.add_info_item(
    '(self.data["%s"] * self.data["CellVolume"]).sum()' % field,
    '"Mass: %e g" % value')
master_clump.add_info_item(
    'self.data["%s"].mean()' % field, '"Mean density: %e" % value')

amods.level_sets.find_clumps(master_clump, c_min, c_max, step)
```

fails with


```
#!bash

P000 yt : [INFO     ] 2014-03-04 18:27:59,250 Parameters: current_time              = 0.0
P000 yt : [INFO     ] 2014-03-04 18:27:59,250 Parameters: domain_dimensions         = [64 64 64]
P000 yt : [INFO     ] 2014-03-04 18:27:59,251 Parameters: domain_left_edge          = [-1. -1. -1.]
P000 yt : [INFO     ] 2014-03-04 18:27:59,252 Parameters: domain_right_edge         = [ 1.  1.  1.]
P000 yt : [INFO     ] 2014-03-04 18:27:59,252 Parameters: cosmological_simulation   = 0.0
Finding clumps: min: 1.000000e+00, max: 1.000000e+01, step: 4.000000
P000 yt : [INFO     ] 2014-03-04 18:27:59,933 Linking node (2) contours.
  Couldn't find  4607182418800017408
  Inspected  2
Exception RuntimeError: RuntimeError() in 'yt.utilities.lib.ContourFinding.construct_boundary_relationships' ignored
P000 yt : [INFO     ] 2014-03-04 18:28:00,008 Linked.
P000 yt : [INFO     ] 2014-03-04 18:28:00,008 Starting 'Updating joins ... '
P000 yt : [INFO     ] 2014-03-04 18:28:00,026 Finishing 'Updating joins ... '
Investigating 2 children.
Finding clumps: min: 4.000000e+00, max: 1.000000e+01, step: 4.000000
Traceback (most recent call last):
  File "clumps_issue.py", line 49, in <module>
    amods.level_sets.find_clumps(master_clump, c_min, c_max, step)
  File "yt/analysis_modules/level_sets/clump_handling.py", line 180, in find_clumps
    find_clumps(child, min_val*d_clump, max_val, d_clump)
  File "yt/analysis_modules/level_sets/clump_handling.py", line 171, in find_clumps
    clump.find_children(min_val)
  File "yt/analysis_modules/level_sets/clump_handling.py", line 110, in find_children
    nj, cids = identify_contours(self.data, self.field, min_val, max_val)
  File "yt/analysis_modules/level_sets/contour_finder.py", line 31, in identify_contours
    for (g, node, (sl, dims, gi)) in data_source.tiles.slice_traverse():
  File "yt/data_objects/data_containers.py", line 442, in tiles
    self._tree = AMRKDTree(self.pf, data_source=self)
  File "yt/utilities/amr_kdtree/amr_kdtree.py", line 162, in __init__
    data_source=data_source)
  File "yt/utilities/amr_kdtree/amr_kdtree.py", line 69, in __init__
    self.build()
  File "yt/utilities/amr_kdtree/amr_kdtree.py", line 83, in build
    grids = np.array([b for b, mask in self.data_source.blocks if b.Level == lvl])
  File "yt/data_objects/data_containers.py", line 451, in blocks
    o = self._current_chunk.objs[0]
AttributeError: 'NoneType' object has no attribute 'objs'

```

using `yt-3.0` rev `3e8b733c9ee9`





More information about the yt-dev mailing list