PetscErrorCode KSPSetOperators(KSP ksp,Mat Amat,Mat Pmat,MatStructure flag) { MatNullSpace nullsp; PetscErrorCode ierr; PetscFunctionBegin; PetscValidHeaderSpecific(ksp,KSP_CLASSID,1); if (Amat) PetscValidHeaderSpecific(Amat,MAT_CLASSID,2); if (Pmat) PetscValidHeaderSpecific(Pmat,MAT_CLASSID,3); if (Amat) PetscCheckSameComm(ksp,1,Amat,2); if (Pmat) PetscCheckSameComm(ksp,1,Pmat,3); if (!ksp->pc) {ierr = KSPGetPC(ksp,&ksp->pc);CHKERRQ(ierr);} ierr = PCSetOperators(ksp->pc,Amat,Pmat,flag);CHKERRQ(ierr); if (ksp->setupstage == KSP_SETUP_NEWRHS) ksp->setupstage = KSP_SETUP_NEWMATRIX; /* so that next solve call will call PCSetUp() on new matrix */ if (ksp->guess) { ierr = KSPFischerGuessReset(ksp->guess);CHKERRQ(ierr); } ierr = MatGetNullSpace(Amat, &nullsp);CHKERRQ(ierr); if (nullsp) { ierr = KSPSetNullSpace(ksp, nullsp);CHKERRQ(ierr); } PetscFunctionReturn(0); } 1) It is legitimate to call KSPSetOperators with a null Amat so this is a bug that crashes large parts of PETSc 2) Do you really want to do this? I am not sure I like it.
participants (1)
-
Barry Smith