Skip to content

Commit 649aec2

Browse files
committed
progress with unsafe index global to local
1 parent 7b0d38e commit 649aec2

3 files changed

Lines changed: 67 additions & 8 deletions

File tree

devito/data/decomposition.py

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -450,6 +450,39 @@ def index_loc_to_glb(self, *args):
450450
else:
451451
raise TypeError("Expected 1 arguments, found %d" % len(args))
452452

453+
def index_glb_to_loc_unsafe(self, glb_idx, rel=True):
454+
"""
455+
Convert a global index to a local index even if not owned.
456+
WARNING: Must not be used to index data as there are no guard rails against returning out
457+
of bound indices.
458+
"""
459+
if not self.loc_empty:
460+
loc_abs_min = self.loc_abs_min - self.glb_min
461+
loc_abs_max = self.loc_abs_max - self.glb_min
462+
glb_max = self.glb_max - self.glb_min
463+
else:
464+
loc_abs_min = self.loc_abs_min
465+
loc_abs_max = self.loc_abs_max
466+
glb_max = self.glb_max
467+
468+
base = loc_abs_min if rel else 0
469+
470+
# index_glb_to_loc(index)
471+
# -> Base case, empty local subdomain
472+
if self.loc_empty:
473+
return None
474+
# -> Handle negative index
475+
if glb_idx < 0:
476+
glb_idx = glb_max + glb_idx + 1
477+
# -> Do the actual conversion
478+
if loc_abs_min <= glb_idx <= loc_abs_max:
479+
return glb_idx - base
480+
# elif glb_min <= glb_idx <= glb_max:
481+
# return base
482+
else:
483+
# This should raise an exception when used to access a numpy.array
484+
return glb_idx
485+
453486
def reshape(self, *args):
454487
"""
455488
Create a new Decomposition with extended or reduced boundary subdomains.

devito/petsc/equations.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -61,6 +61,7 @@ def lower_exprs_petsc(expressions, **kwargs):
6161
additional_exprs.append(new_e)
6262

6363
return expressions + additional_exprs
64+
# return expressions
6465

6566

6667

devito/petsc/types/dimension.py

Lines changed: 33 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -15,18 +15,43 @@ def __init_finalize__(self, *args, **kwargs):
1515
@property
1616
def subdim(self):
1717
return self._subdim
18-
19-
def _arg_defaults(self, alias=None):
20-
key = alias or self
21-
# from IPython import embed; embed()
22-
return {key.name: self.data}
18+
2319

2420
def _arg_values(self, grid=None, **kwargs):
2521

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+
31+
dist = grid.distributor
32+
rank = dist.myrank
33+
comm = dist.comm
34+
2635
# global rtkn
27-
grtkn = kwargs.get(self.name, self.value)
36+
grtkn = kwargs.get(self.subdim.rtkn.name, self.subdim.rtkn.value)
37+
38+
# decomposition info
39+
decomp = dist.decomposition[self.subdim.parent]
40+
g_x_M = decomp.glb_max
41+
val = decomp.index_glb_to_loc_unsafe(g_x_M - grtkn)
42+
43+
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+
)
2852

29-
g_x_M = grid.distributor.decomposition[self.subdim.parent].glb_max
53+
if val is None:
54+
return {}
3055

56+
return {self.name: int(val)}
3157

32-
return {self.name: g_x_M}

0 commit comments

Comments
 (0)