How do you use amgx->localA after it is created?
On Thu, Jun 23, 2022, 20:25 Mark Adams <[email protected]> wrote:
> We have a bug in the AMGx test snes_tests-ex13_amgx in parallel.
> Matt Martineau found that MatMPIAIJGetLocalMat worked in the first pass in
> the code below, where the local matrix is created (INITIAL), but in the
> next pass, when "REUSE" is used, he sees an invalid pointer.
> Matt found that it does have offloadmask == CPU.
> Maybe it is missing logic to put the output in same state as the input?
>
> Any ideas on this or should I just dig into it?
>
> Thanks,
>
> bool partial_setup_allowed = (pc->setupcalled && pc->flag !=
> DIFFERENT_NONZERO_PATTERN);
> 199 if (amgx->nranks > 1) {
> 200 if (partial_setup_allowed) {
> 202 PetscCall(MatMPIAIJGetLocalMat(Pmat, MAT_REUSE_MATRIX,
> &amgx->localA)); // This path seems doesn't work by the time we reach AmgX API
> 203 } else {
> 205 PetscCall(MatMPIAIJGetLocalMat(Pmat, MAT_INITIAL_MATRIX,
> &amgx->localA)); // This path works
> 206 }
> 207 } else {
> 208 amgx->localA = Pmat;
> 209 }
> 210
>
>