that is what (*PetscErrorPrintf)() is for. Please fix. Thanks Barry
ierr = MatSetValues(A, numIndices, indices, numIndices, indices, values,
mode);
if (ierr) {
PetscMPIInt rank;
PetscErrorCode ierr2;
ierr2 = MPI_Comm_rank(((PetscObject) A)->comm, &rank);CHKERRQ(ierr2);
ierr2 = PetscPrintf(PETSC_COMM_SELF, "[%D]ERROR in DMPlexMatSetClosure\n",
rank);CHKERRQ(ierr2);
ierr2 = DMPlexPrintMatSetValues(A, point, numIndices, indices,
values);CHKERRQ(ierr2);
ierr2 = DMRestoreWorkArray(dm, numIndices, PETSC_INT,
&indices);CHKERRQ(ierr);
Also the above should be ierr2 ^^^^^
CHKERRQ(ierr);
}
Why? Because PetscPrintf() and (*PetscErrorPrintf)() may be completely
different streams, for example (*PetscErrorPrintf)() going to a nice GUI popup
or console etc etc