Skip to content

Commit 0b6b282

Browse files
committed
mpi: Fix index_glb_to_loc_unsafe using base
1 parent 649aec2 commit 0b6b282

3 files changed

Lines changed: 44 additions & 31 deletions

File tree

devito/data/decomposition.py

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -466,6 +466,7 @@ def index_glb_to_loc_unsafe(self, glb_idx, rel=True):
466466
glb_max = self.glb_max
467467

468468
base = loc_abs_min if rel else 0
469+
glb_min = 0
469470

470471
# index_glb_to_loc(index)
471472
# -> Base case, empty local subdomain
@@ -477,8 +478,8 @@ def index_glb_to_loc_unsafe(self, glb_idx, rel=True):
477478
# -> Do the actual conversion
478479
if loc_abs_min <= glb_idx <= loc_abs_max:
479480
return glb_idx - base
480-
# elif glb_min <= glb_idx <= glb_max:
481-
# return base
481+
elif glb_min <= glb_idx <= glb_max:
482+
return glb_idx - base
482483
else:
483484
# This should raise an exception when used to access a numpy.array
484485
return glb_idx

devito/petsc/equations.py

Lines changed: 10 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
from sympy import Eq
12
from devito.symbolics import retrieve_indexed, retrieve_dimensions
23
from devito.petsc import EssentialBC
34
from devito.types.dimension import CustomBoundSubDimension
@@ -26,15 +27,17 @@ def lower_exprs_petsc(expressions, **kwargs):
2627
halo_size_left = indexeds[0].function._size_halo[d].left
2728
halo_size_right = indexeds[0].function._size_halo[d].right
2829

29-
grid = indexeds[0].function.grid
3030

31-
from devito.petsc.types.dimension import SubDimMax
31+
from devito.petsc.types.dimension import SubDimMax, SubDimMin
32+
33+
3234

3335
# TODO: change name..
3436

35-
# global_rtkn = kwargs.get(d.rtkn.name, d.rtkn.value)
36-
# in theory this class shoulod just take in d directly
37+
# in theory this class shoulod just take in d
38+
# TODO: use unique name
3739
subdim_max = SubDimMax(d.name + '_max', subdim=d, thickness=d.thickness)
40+
subdim_min = SubDimMin(d.name + '_min', subdim=d, thickness=d.thickness)
3841

3942
# from IPython import embed; embed()
4043

@@ -43,7 +46,7 @@ def lower_exprs_petsc(expressions, **kwargs):
4346
parent=d.parent,
4447
thickness=d.thickness,
4548
local=d.local,
46-
custom_left=Max(d.ltkn, d.parent.symbolic_min - halo_size_left),
49+
custom_left=Max(subdim_min, d.parent.symbolic_min - halo_size_left),
4750
custom_right=Min(subdim_max, d.parent.symbolic_max + halo_size_right)
4851
)
4952
mapper[d] = new_dim
@@ -60,8 +63,8 @@ def lower_exprs_petsc(expressions, **kwargs):
6063

6164
additional_exprs.append(new_e)
6265

66+
# return expressions + additional_exprs
6367
return expressions + additional_exprs
64-
# return expressions
65-
68+
6669

6770

devito/petsc/types/dimension.py

Lines changed: 31 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -19,39 +19,48 @@ def subdim(self):
1919

2020
def _arg_values(self, grid=None, **kwargs):
2121

22-
# # global rtkn
23-
# grtkn = kwargs.get(self.subdim.rtkn.name, self.subdim.rtkn.value)
24-
25-
# g_x_M = grid.distributor.decomposition[self.subdim.parent].glb_max
26-
# val = grid.distributor.decomposition[self.subdim.parent].index_glb_to_loc(g_x_M - grtkn)
27-
28-
# return {self.name: int(val)}
29-
30-
3122
dist = grid.distributor
32-
rank = dist.myrank
33-
comm = dist.comm
3423

3524
# global rtkn
3625
grtkn = kwargs.get(self.subdim.rtkn.name, self.subdim.rtkn.value)
37-
26+
# print(g_x_M)
3827
# decomposition info
3928
decomp = dist.decomposition[self.subdim.parent]
4029
g_x_M = decomp.glb_max
30+
# print(g_x_M)
4131
val = decomp.index_glb_to_loc_unsafe(g_x_M - grtkn)
32+
print(val)
33+
34+
35+
return {self.name: int(val)}
36+
37+
38+
39+
class SubDimMin(Thickness):
40+
"""
41+
"""
42+
43+
def __init_finalize__(self, *args, **kwargs):
44+
self._subdim = kwargs.pop('subdim')
45+
self._dtype = self._subdim.dtype
46+
47+
super().__init_finalize__(*args, **kwargs)
48+
49+
@property
50+
def subdim(self):
51+
return self._subdim
4252

53+
def _arg_values(self, grid=None, **kwargs):
4354

44-
print(
45-
f"[Rank {rank}] "
46-
f"grtkn={grtkn}, "
47-
f"g_x_M={g_x_M}, "
48-
f"glb_idx={g_x_M - grtkn}, "
49-
f"loc_val={val}",
50-
flush=True
51-
)
55+
dist = grid.distributor
5256

53-
if val is None:
54-
return {}
57+
# global ltkn
58+
gltkn = kwargs.get(self.subdim.ltkn.name, self.subdim.ltkn.value)
59+
60+
# decomposition info
61+
decomp = dist.decomposition[self.subdim.parent]
62+
g_x_m = decomp.glb_min
63+
val = decomp.index_glb_to_loc_unsafe(g_x_m + gltkn)
5564

5665
return {self.name: int(val)}
5766

0 commit comments

Comments
 (0)