On Nov 9, 2010, at 11:27 AM, Rongliang Chen wrote: > Message: 2 > Date: Mon, 8 Nov 2010 19:57:16 -0600 > From: Barry Smith <bsmith at mcs.anl.gov> > Subject: Re: [petsc-users] Can I use MAT_FINAL_ASSEMBLY instead of > MAT_FLUSH_ASSEMBLY? > To: PETSc users list <petsc-users at mcs.anl.gov> > Message-ID: <52AFD8FB-17C1-4B51-97E9-C77112B69F3C at mcs.anl.gov> > Content-Type: text/plain; charset=us-ascii > > > On Nov 8, 2010, at 7:49 PM, Rongliang Chen wrote: > > > Hi everyone, > > > > Can I use MAT_FINAL_ASSEMBLY instead of MAT_FLUSH_ASSEMBLY in the function > > MatAssemblyBegin/End when switching between ADD_VALUES and INSERT_VALUES in > > MatSetValues()? Thank you! > > > > Regards, > > > > Rongliang > > Yes, but generally there is no reason to. It is best to use the flush until > your final assembly because then it doesn't do any work that needs to be > redone or prematurely free memory that may be needed later. > > Why do you want to do that? > > Barry > > > > Hi Barry, > > Thank you for your reply. I find that when I use MAT_FINAL_ASSEMBLY instead > of MAT_FLUSH_ASSEMBLY in the function MatAssemblyBegin/End, it will > cause problem. I do not know why.
"cause problem" is not very helpful. What does that mean? Send all output to petsc-maint at mcs.anl.gov if it doesn't work. > > The reason that I want to use it like this is that I first set the matrix > with ADD_VALUES and then I need to zero some rows of the matrix using > MatZeroRowsLocalIS(), at last I still need to set some elements of the matrix > with INSERT_VALUES. Between MatSetValues() and MatZeroRowsLocalIS() I need to > use MAT_FINAL_ASSEMBLY. > The order is: > ADD_VALUES--->MatZeroRowsLocalIS()--->INSERT_VALUES. You need to use FINAL_ASSEMLY before the zero rows calls. Flush is not enough in that case. Barry > > Thanks! > > Regards, > > Rongliang
