Also if you change the "local size" of the matrix/vectors you must call KSPReset() so that the KSP/PC can free up all of their (previously sized) work matrices and vectors.
Barry > On May 12, 2018, at 7:08 AM, 我 <[email protected]> wrote: > > > Thanks for your reply! I'm confused about how to create a new matrix during > the time step advancing. > For better understand my problem, simple pseudo code (just contains the main > functions) like this: > ///////////////////////////////// > KSP ksp; > PC pc; > KSPCreate; > Mat A; > for(int timestep=0; timestep<20; timestep++) > { > //for example > if(timestep==2) > { > localsize change; > } > MatCreateMPIAIJWithArrays(PETSC_COMM_WORLD, localsize, localsize, m, m, > istore, jstore, vstore, &A); > KSPSolve; > > MatDestroy(&A); > } > ///////////////////////////// > Thanks again! > Daye > > > > > At 2018-05-11 19:07:35, "Matthew Knepley" <[email protected]> wrote: > On Fri, May 11, 2018 at 4:23 AM, 我 <[email protected]> wrote: > Hello all, > I use the function MatCreateMPIAIJWithArrays to construct my matrix. But the > number of local rows m and local columns n may change during the timestep > advancing. When the local size changes, the error like "Petsc error: cannot > chang local size of Amat after use old sizes 10 10 new sizes 11 11" will > appear. Any suggestions about it ? > > If the parallel layout changes, you need to create a new matrix. > > Thanks, > > Matt > > Thank you very much! > Daye > > > > > > > -- > What most experimenters take for granted before they begin their experiments > is infinitely more interesting than any results to which their experiments > lead. > -- Norbert Wiener > > https://www.cse.buffalo.edu/~knepley/ > > >
