Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Very drafty work towards new tree build #22

Draft
wants to merge 90 commits into
base: main
Choose a base branch
from
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
90 commits
Select commit Hold shift + click to select a range
d32eb93
Expose bounding box from tree builder
xywei Nov 11, 2017
f8f2123
Expose bounding box from tree builder
xywei Nov 11, 2017
c42bf1d
Merge branch 'master' of gitlab.tiker.net:xywei/boxtree
xywei Feb 8, 2018
8012d88
Run through yapf
xywei Feb 8, 2018
b8030db
Swap in yapf formatted tree builder from upstream
xywei Feb 8, 2018
0485537
Reapply changes
xywei Feb 8, 2018
1140251
Restart from current master
xywei Feb 8, 2018
d1bce1d
Re-apply changes, with minimal diff
xywei Feb 8, 2018
c415033
Merge branch 'master' of gitlab.tiker.net:inducer/boxtree
xywei May 6, 2018
9daca09
Merge branch 'master' of gitlab.tiker.net:inducer/boxtree
xywei May 27, 2018
5611f0a
Merge branch 'master' of gitlab.tiker.net:inducer/boxtree
xywei Jun 11, 2018
b777717
Add uniform boxtree
xywei Jun 17, 2018
6abfae2
Improve boxtree plotting
xywei Jun 18, 2018
4e7aa05
Implement getters for centers and measures
xywei Jun 19, 2018
8e45e8e
Merge branch 'master' of gitlab.tiker.net:xywei/boxtree
xywei Jun 19, 2018
b2bbe01
Adding quad info
xywei Jun 19, 2018
93e3f85
Sync
xywei Jun 24, 2018
1585a09
Quad points in the dicionary order for each box
xywei Jun 24, 2018
4f6e545
Bug fixes
xywei Jun 25, 2018
aaaeb68
Bug fix
xywei Jun 25, 2018
1650321
Add neighborhood info to BoxTree
xywei Jun 27, 2018
9a8bdd8
Remove redundant print
xywei Sep 10, 2018
47a3807
Merge bbox interface updates
xywei Sep 10, 2018
030726c
Merge branch 'bbox_interface'
xywei Sep 10, 2018
ea1c87a
Bug fix
xywei Sep 10, 2018
da3a40e
Merge branch 'bbox_interface'
xywei Sep 10, 2018
38eacfc
Bug fixes
xywei Sep 10, 2018
daa1f92
Merge branch 'master' of gitlab.tiker.net:inducer/boxtree
xywei Oct 20, 2018
6cbd718
Merge branch 'master' of gitlab.tiker.net:inducer/boxtree
xywei Jan 22, 2019
14200f1
Merge branch 'master' of gitlab.tiker.net:inducer/boxtree
xywei Jan 27, 2019
b027650
Syntax fixes
xywei Jan 27, 2019
5a36aad
Merge branch 'master' of gitlab.tiker.net:inducer/boxtree
xywei Mar 16, 2019
308ba1b
Merge branch 'master' of gitlab.tiker.net:inducer/boxtree
xywei Sep 1, 2019
459a9ea
Add dependency on modepy
xywei Sep 6, 2019
a331a13
Fix quad naming
xywei Sep 6, 2019
09b8a3e
Merge branch 'master' of gitlab.tiker.net:inducer/boxtree
xywei Feb 17, 2020
9f54c16
Merge branch 'master' of gitlab.tiker.net:inducer/boxtree
xywei May 7, 2020
abad14c
Merge branch 'master' of gitlab.tiker.net:xywei/boxtree
xywei Jul 8, 2020
5c7220c
Merge branch 'master' of gitlab.tiker.net:inducer/boxtree
xywei Jul 8, 2020
59eaa00
Merge branch 'master' of gitlab.tiker.net:inducer/boxtree into master
xywei Jul 29, 2020
2b5148c
Very drafty work towards new tree build
inducer Jan 19, 2021
d7874df
Level-restriction, refine/coarsening, and some IOs
xywei Mar 2, 2021
d81a516
Merge branch 'master' of gitlab.tiker.net:xywei/boxtree into tree-bui…
xywei Mar 2, 2021
ea21bc9
Revert "Merge branch 'master' of gitlab.tiker.net:xywei/boxtree into …
xywei Mar 2, 2021
a48fd75
Merge branch 'master' of github.com:inducer/boxtree into tree-build-r…
xywei Mar 2, 2021
4941131
Merge branch 'master' into tree-build-refactor
inducer Mar 2, 2021
b7899e7
Merge branch 'main' into tree-build-refactor
inducer Mar 16, 2021
3b2dbb7
Enable building uniform mesh for volumential
xywei Apr 20, 2021
8f7f36d
Merge upstream changes
xywei Apr 20, 2021
ad891da
Save adaptive tree for the next PR
xywei Apr 20, 2021
5ad0b3f
Fix quotes and blank lines
xywei Apr 20, 2021
cdab29d
Fix typo
xywei Apr 20, 2021
3bddbe7
Document refine/coarsen flags
xywei Apr 20, 2021
36be3d6
Fix typo
xywei Apr 20, 2021
95c170f
Document coarsening behavior
xywei Apr 20, 2021
902b435
Warn on ignored coarsening flags
xywei Apr 20, 2021
d0586fc
Revert changes in demo.py (need pr2)
xywei Apr 20, 2021
5170b30
Extract distribute_quadrature_rule into a free function
xywei Apr 20, 2021
b521e90
Merge branch 'main' of github.com:inducer/boxtree into tree-build-ref…
xywei Feb 11, 2022
a3d819a
Upstream updates and address review comments
xywei Feb 11, 2022
28b0852
Flake8 fixes
xywei Feb 11, 2022
93b214f
Merge branch 'tree-build-refactor' of github.com:xywei/boxtree into t…
xywei Feb 11, 2022
ab482c0
Merge branch 'tree-build-refactor-1' of github.com:xywei/boxtree into…
xywei Feb 11, 2022
e93b6de
Add modepy to requirements.txt
xywei Feb 11, 2022
5b6b73d
Flake8 fixes
xywei Feb 11, 2022
de03629
Fix 3d quadrature weights generation, add more tests
xywei Feb 11, 2022
d636ec9
Update documentation, misc fixes
xywei Feb 21, 2022
b7c0d30
Make TreeOfBoxes a base class to Tree
xywei Feb 21, 2022
39d0b3f
Fix super() usage
xywei Feb 21, 2022
413db27
Make mesh with redundant vertices
xywei Mar 14, 2022
3dea2b4
Comment on the state of meshgen
xywei Mar 22, 2022
07e8bc3
Merge branch 'main' of github.com:inducer/boxtree into tree-build-ref…
xywei Mar 22, 2022
a1eae09
Fix quadrature weights from tob
xywei Mar 23, 2022
47a0f64
Add meshmode to requirements.txt
xywei Apr 6, 2022
aa1e653
Merge branch 'main' of github.com:inducer/boxtree into tree-build-ref…
xywei Apr 6, 2022
278ba81
Remove force_device_scalars from actx construction
xywei Apr 6, 2022
3c64ff8
Add arraycontext to requirements.txt
xywei Apr 6, 2022
a609966
Address some reviews
xywei Apr 18, 2022
440bc2f
Make coarsener throw exception by default on ignored flags
xywei Apr 18, 2022
ec6b846
Refactors, and make boxes level-ordered
xywei May 2, 2022
91df1a8
Fix doc and typing
xywei May 4, 2022
f7a93e2
Updates from main
xywei May 4, 2022
408d73f
Fix dependencies
xywei May 4, 2022
ff8cea1
Fix doc build in nitpicky mode
xywei May 8, 2022
d8a882c
Current state
xywei May 16, 2022
62718e7
Add missing file
xywei May 16, 2022
e893ab9
Merge branch 'main' of github.com:inducer/boxtree into tree-build-ref…
xywei May 31, 2022
7bd9f3c
(borken) status update
xywei May 31, 2022
a4ae4ce
Fix mesh export from tobs
xywei Aug 8, 2022
e037e8e
Make traversal build succeed on TreeOfBoxes (?)
inducer Aug 29, 2022
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
10 changes: 2 additions & 8 deletions boxtree/traversal.py
Original file line number Diff line number Diff line change
Expand Up @@ -1792,10 +1792,6 @@ def get_kernel_info(self, dimensions, particle_id_dtype, box_id_dtype,
"same_level_non_well_sep_boxes_starts"),
VectorArg(box_id_dtype,
"same_level_non_well_sep_boxes_lists"),
VectorArg(coord_dtype, "box_target_bounding_box_min",
with_offset=False),
VectorArg(coord_dtype, "box_target_bounding_box_max",
with_offset=False),
VectorArg(particle_id_dtype, "box_source_counts_cumul"),
ScalarArg(particle_id_dtype,
"from_sep_smaller_min_nsources_cumul"),
Expand Down Expand Up @@ -2034,9 +2030,7 @@ def extract_level_start_box_nrs(box_list, wait_for):
tree.stick_out_factor, target_boxes,
same_level_non_well_sep_boxes.starts,
same_level_non_well_sep_boxes.lists,
tree.box_target_bounding_box_min.data,
tree.box_target_bounding_box_max.data,
tree.box_source_counts_cumul,
tree.box_source_counts_cumul if with_extent else None,
_from_sep_smaller_min_nsources_cumul,
)

Expand Down Expand Up @@ -2192,4 +2186,4 @@ def extract_level_start_box_nrs(box_list, wait_for):

# }}}

# vim: filetype=pyopencl:fdm=marker
# vim: fdm=marker
113 changes: 109 additions & 4 deletions boxtree/tree.py
Original file line number Diff line number Diff line change
Expand Up @@ -28,11 +28,12 @@

.. autoclass:: Tree

.. currentmodule:: boxtree.tree
.. autoclass:: TreeOfBoxes

Tree with linked point sources
------------------------------

.. currentmodule:: boxtree.tree

.. autoclass:: TreeWithLinkedPointSources

.. autofunction:: link_point_sources
Expand Down Expand Up @@ -83,9 +84,11 @@

import pyopencl as cl
import numpy as np
import numpy.typing as npt
from boxtree.tools import DeviceDataRecord
from cgen import Enum
from pytools import memoize_method
from dataclasses import dataclass

import logging
logger = logging.getLogger(__name__)
Expand All @@ -111,9 +114,106 @@ class box_flags_enum(Enum): # noqa
# }}}


# {{{ tree of boxes

@dataclass
class TreeOfBoxes:
"""A quad/octree tree of abstract boxes. Lightweight trees handled with
:mod:`numpy`, intended for mesh adaptivity.

.. attribute:: dimensions

.. attribute:: nlevels

.. attribute:: nboxes

.. attribute:: root_extent

(Scalar) extent of the root box.

.. attribute:: box_centers

dim-by-nboxes :mod:`numpy` array of the centers of the boxes.

.. attribute:: box_parent_ids

:mod:`numpy` vector of parent box ids.

.. attribute:: box_child_ids

(2**dim)-by-nboxes :mod:`numpy` array of children box ids.

.. attribute:: box_levels

:mod:`numpy` vector of box levels in non-decreasing order.

.. automethod:: __init__

.. automethod:: get_leaf_flags

.. automethod:: leaf_boxes
"""
box_centers: npt.NDArray
root_extent: npt.NDArray
box_parent_ids: npt.NDArray
box_child_ids: npt.NDArray
box_levels: npt.NDArray

def __post_init__(self):
if isinstance(self.box_centers, cl.array.Array):
bcenters = self.box_centers.get()
else:
bcenters = self.box_centers
lows = bcenters[:, 0] - 0.5*self.root_extent
highs = lows + self.root_extent
self.bounding_box = [lows, highs]
self.dim = self.box_centers.shape[0]

# {{{ dummy interface for TreePlotter

@property
def dimensions(self):
return self.dim

def get_box_size(self, ibox):
lev = self.box_levels[ibox]
box_size = self.root_extent * 0.5**lev
return box_size

def get_box_extent(self, ibox):
box_size = self.get_box_size(ibox)
extent_low = self.box_centers[:, ibox] - 0.5*box_size
extent_high = extent_low + box_size
return extent_low, extent_high

# }}} End dummy interface for TreePlotter

@property
def nboxes(self):
return self.box_centers.shape[1]

@property
def nlevels(self):
# level starts from 0
if isinstance(self.box_levels, cl.array.Array):
return int(max(self.box_levels).get()) + 1
else:
return max(self.box_levels) + 1

def get_leaf_flags(self):
# box_id -> whether the box is leaf
return np.all(self.box_child_ids == 0, axis=0)

def leaf_boxes(self):
boxes = np.arange(self.nboxes)
return boxes[self.get_leaf_flags()]

# }}}


# {{{ tree data structure

class Tree(DeviceDataRecord):
class Tree(DeviceDataRecord, TreeOfBoxes):
r"""A quad/octree consisting of particles sorted into a hierarchy of boxes.
Optionally, particles may be designated 'sources' and 'targets'. They
may also be assigned radii which restrict the minimum size of the box
Expand Down Expand Up @@ -400,7 +500,6 @@ class Tree(DeviceDataRecord):

.. automethod:: get
"""

@property
def dimensions(self):
return len(self.sources)
Expand Down Expand Up @@ -440,6 +539,12 @@ def get_box_extent(self, ibox):
extent_high = extent_low + box_size
return extent_low, extent_high

def get_leaf_flags(self):
raise NotImplementedError

def leaf_boxes(self):
raise NotImplementedError

# {{{ debugging aids

# these assume numpy arrays (i.e. post-.get()), for now
Expand Down
Loading