diff --git a/src/vec/is/utils/isltog.c b/src/vec/is/utils/isltog.c index cc5eba9..611eac2 100644 --- a/src/vec/is/utils/isltog.c +++ b/src/vec/is/utils/isltog.c @@ -566,10 +566,10 @@ PetscErrorCode ISGlobalToLocalMappingApply(ISLocalToGlobalMapping mapping,ISGlo if (type == IS_GTOLM_MASK) { if (idxout) { for (i=0; i bs*end) idxout[i] = -1; - else idxout[i] = bs*globals[idx[i]/bs - start] + (idx[i] % bs); + if (idx[i] < 0) idxout[i] = idx[i]; + else if (idx[i] < bs*start) idxout[i] = -1; + else if (idx[i] > bs*(end+1)-1) idxout[i] = -1; + else idxout[i] = bs*globals[idx[i]/bs - start] + (idx[i] % bs); } } if (nout) *nout = n; @@ -578,7 +578,7 @@ PetscErrorCode ISGlobalToLocalMappingApply(ISLocalToGlobalMapping mapping,ISGlo for (i=0; i bs*end) continue; + if (idx[i] > bs*(end+1)-1) continue; tmp = bs*globals[idx[i]/bs - start] + (idx[i] % bs); if (tmp < 0) continue; idxout[nf++] = tmp; @@ -587,7 +587,7 @@ PetscErrorCode ISGlobalToLocalMappingApply(ISLocalToGlobalMapping mapping,ISGlo for (i=0; i bs*end) continue; + if (idx[i] > bs*(end+1)-1) continue; tmp = bs*globals[idx[i]/bs - start] + (idx[i] % bs); if (tmp < 0) continue; nf++;