Pierre: I added this support https://bitbucket.org/petsc/petsc/commits/ef7efd37182b12f7b7ab7c34390aae8e592a83c2
It is in branch hzhang/fix-pc-fieldsplit-reuse. You may give it a try. Once it passed all our regression tests, it will be merged to petsc-master branch. Your modified ex42.c is very helpful, thanks! Hong On Fri, May 4, 2018 at 10:15 AM, Hong <hzh...@mcs.anl.gov> wrote: > Pierre: > Thanks for creating this use case. I'll check it and get back to you > sometime next week. > Hong > > Hong, >> Thanks for your reply. >> It’s not so minimalist, but at least it is based on one of your example. >> diff --git a/src/ksp/ksp/examples/tutorials/ex42.c >> b/src/ksp/ksp/examples/tutorials/ex42.c >> index 8be4389a2d..520c82569a 100644 >> --- a/src/ksp/ksp/examples/tutorials/ex42.c >> +++ b/src/ksp/ksp/examples/tutorials/ex42.c >> @@ -1953,6 +1953,15 @@ static PetscErrorCode >> solve_stokes_3d_coupled(PetscInt mx,PetscInt my,PetscInt m >> } >> } >> ierr = KSPSolve(ksp_S,f,X);CHKERRQ(ierr); >> + PetscViewerPushFormat(PETSC_VIEWER_STDOUT_WORLD, >> PETSC_VIEWER_ASCII_INFO); >> + MatView(A, PETSC_VIEWER_STDOUT_WORLD); >> + Mat C; >> + MatMatMult(A, A, MAT_INITIAL_MATRIX, PETSC_DEFAULT, &C); >> + MatView(C, PETSC_VIEWER_STDOUT_WORLD); >> + PetscViewerPopFormat(PETSC_VIEWER_STDOUT_WORLD); >> + ierr = KSPSetOperators(ksp_S,C,C);CHKERRQ(ierr); >> + ierr = KSPSolve(ksp_S,f,X);CHKERRQ(ierr); >> + MatDestroy(&C); >> >> ierr = PetscOptionsGetBool(NULL,NULL,"-write_pvts",&write_output,NU >> LL);CHKERRQ(ierr); >> if (write_output) {ierr = DAView3DPVTS(da_Stokes,X,"up") >> ;CHKERRQ(ierr);} >> >> $ mpirun -np 1 ./ex42 -mx 2 -my 2 -mz 2 -stokes_pc_type fieldsplit >> This should give you this exact error. >> Do you know of a way to bypass the error by flushing/destroying the PC >> while still keeping the options for the following KSPSolve? >> >> Thanks in advance, >> Pierre >> >> On 3 May 2018, at 5:07 PM, Hong <hzh...@mcs.anl.gov> wrote: >> >> Pierre : >> The code crashes inside >> if (scall == MAT_REUSE_MATRIX) { >> ... >> } >> which assumes both original matrix and its submatrices data structures >> remain unchanged. >> We did not anticipate the usage of looping >> >>> >>> 3) change the sparsity pattern of the Mat for one of the field >>> 4) do a KSPSolve >>> >> >> Can you send us a stand-alone code for this type of application. >> We will investigate how to support it. >> >> Hong >> >> I cannot change this calling sequence, because I’d like to nest 3) and 4) >>> inside a loop. >>> However, I end up with this error during 4): >>> [0]PETSC ERROR: Nonconforming object sizes >>> [0]PETSC ERROR: Cannot reuse matrix. wrong no of nonzeros >>> [0]PETSC ERROR: Petsc Development GIT revision: v3.9-13-g05d412bc58 GIT >>> Date: 2018-04-09 08:39:52 -0500 >>> >>> [0]PETSC ERROR: #1 MatCreateSubMatrix_SeqAIJ() line 2330 in >>> /Users/jolivet/Documents/repositories/petsc/src/mat/impls/aij/seq/aij.c >>> [0]PETSC ERROR: #2 MatCreateSubMatrix_MPIAIJ_SameRowColDist() line 3184 >>> in /Users/jolivet/Documents/repositories/petsc/src/mat/impls/ai >>> j/mpi/mpiaij.c >>> [0]PETSC ERROR: #3 MatCreateSubMatrix_MPIAIJ() line 3310 in >>> /Users/jolivet/Documents/repositories/petsc/src/mat/impls/ai >>> j/mpi/mpiaij.c >>> [0]PETSC ERROR: #4 MatCreateSubMatrix() line 7813 in >>> /Users/jolivet/Documents/repositories/petsc/src/mat/interface/matrix.c >>> [0]PETSC ERROR: #5 PCSetUp_FieldSplit() line 564 in >>> /Users/jolivet/Documents/repositories/petsc/src/ksp/pc/impls >>> /fieldsplit/fieldsplit.c >>> [0]PETSC ERROR: #6 PCSetUp() line 923 in /Users/jolivet/Documents/repos >>> itories/petsc/src/ksp/pc/interface/precon.c >>> [0]PETSC ERROR: #7 PCApply() line 453 in /Users/jolivet/Documents/repos >>> itories/petsc/src/ksp/pc/interface/precon.c >>> [0]PETSC ERROR: #8 KSP_PCApply() line 276 in >>> /Users/jolivet/repo/petsc/include/petsc/private/kspimpl.h >>> [0]PETSC ERROR: #9 KSPFGMRESCycle() line 166 in >>> /Users/jolivet/Documents/repositories/petsc/src/ksp/ksp/impl >>> s/gmres/fgmres/fgmres.c >>> [0]PETSC ERROR: #10 KSPSolve_FGMRES() line 291 in >>> /Users/jolivet/Documents/repositories/petsc/src/ksp/ksp/impl >>> s/gmres/fgmres/fgmres.c >>> [0]PETSC ERROR: #11 KSPSolve() line 669 in /Users/jolivet/Documents/repos >>> itories/petsc/src/ksp/ksp/interface/itfunc.c >>> >>> Is this the expected behaviour? Would you need a MWE? >>> What I find funny is that if I turn -info on, then just before the >>> error, I get: >>> [0] PCSetUp(): Setting up PC with different nonzero pattern >>> So why is it trying to reuse the matrix? I am missing a call to some >>> function? >>> >>> Thanks in advance, >>> Pierre >> >> >> >> >