diff --git a/boxtree/pyfmmlib_integration.py b/boxtree/pyfmmlib_integration.py index e69b225e659bdb99d52f69499cd8a9d6a73fbfa7..833918f5699ff1fd0220a7c096104e5380e41966 100644 --- a/boxtree/pyfmmlib_integration.py +++ b/boxtree/pyfmmlib_integration.py @@ -396,13 +396,16 @@ class FMMLibExpansionWrangler(object): mpmp = self.get_translation_routine("%ddmpmp") - # 2 is the last relevant source_level. - # 1 is the last relevant target_level. - # (Nobody needs a multipole on level 0, i.e. for the root box.) - for source_level in range(tree.nlevels-1, 1, -1): - start, stop = level_start_source_parent_box_nrs[ - source_level:source_level+2] + # nlevels-1 is the last valid level index + # nlevels-2 is the last valid level that could have children + # + # 3 is the last relevant source_level. + # 2 is the last relevant target_level. + # (because no level 1 box will be well-separated from another) + for source_level in range(tree.nlevels-1, 2, -1): target_level = source_level - 1 + start, stop = level_start_source_parent_box_nrs[ + target_level:target_level+2] for ibox in source_parent_boxes[start:stop]: parent_center = tree.box_centers[:, ibox] diff --git a/test/test_fmm.py b/test/test_fmm.py index 92ab690da9ebcf413162f41d103c7672d3066e28..c179dbc33a5807734f676f690be6736c0ee35f26 100644 --- a/test/test_fmm.py +++ b/test/test_fmm.py @@ -89,12 +89,16 @@ class ConstantOneExpansionWrangler(object): source_parent_boxes, mpoles): tree = self.tree - # 2 is the last relevant source_level. - # 1 is the last relevant target_level. - # (Nobody needs a multipole on level 0, i.e. for the root box.) - for source_level in range(tree.nlevels-1, 1, -1): + # nlevels-1 is the last valid level index + # nlevels-2 is the last valid level that could have children + # + # 3 is the last relevant source_level. + # 2 is the last relevant target_level. + # (because no level 1 box will be well-separated from another) + for source_level in range(tree.nlevels-1, 2, -1): + target_level = source_level - 1 start, stop = level_start_source_parent_box_nrs[ - source_level:source_level+2] + target_level:target_level+2] for ibox in source_parent_boxes[start:stop]: for child in tree.box_child_ids[:, ibox]: if child: