Took a little more time than I expected but the branch barry/extend-pcmg-galerkin now supports
PCMGSetGalerkin() and -pc_mg_galerkin now take PC_MG_GALERKIN_BOTH,PC_MG_GALERKIN_PMAT,PC_MG_GALERKIN_MAT, PC_MG_GALERKIN_NONE as arguments instead of PetscBool This allows computing either mat, or pmat or both via the Galerkin process so you should be able to provide A and M with KSPSetOperators() and then run with -pc_mg_galerkin both to get both generated on the coarse meshes via the Galekin process. Note that if you use the additional option -pc_use_amat false it will use only the M for both mat and pmat in the multigrid process (while A is only used for the outer Krylov solver definition of the operator.) For some problems this is actually a better approach. Please let me know if you have any difficulties with it. Barry > On Jul 22, 2016, at 3:42 AM, domenico lahaye <[email protected]> > wrote: > > Dear Barry, > > Thank you for your suggestion. > > I will be happy to test drive the new code when available. > > Kind wishes, Domenico. > > > > From: Barry Smith <[email protected]> > To: Lawrence Mitchell <[email protected]> > Cc: domenico lahaye <[email protected]>; PETSc Users List > <[email protected]> > Sent: Friday, July 22, 2016 1:41 AM > Subject: Re: [petsc-users] Regarding ksp ex42 - Citations > > > I'll add support for handling both A and M via Galerkin. It is easy to > write the code, picking a good simple API that doesn't break anything is more > difficult. I'm leaning to change PCMGSetGalerkin(PC,PetscBool) to > PCMGSetGalerkin(PC, PCMGGalerkinType) where > > typedef enum { PC_MG_GALERKIN_BOTH,PC_MG_GALERKIN_PMAT,PC_MG_GALERKIN_MAT, > PC_MG_GALERKIN_NONE > } PCMGGalerkinType; > > Barry > > > > > On Jul 21, 2016, at 6:09 AM, Lawrence Mitchell > > <[email protected]> wrote: > > > > > >> On 21 Jul 2016, at 10:55, domenico lahaye <[email protected]> > >> wrote: > >> > >> Apologies for being not sufficient clear in my previous message. > >> > >> I would like to be able to Galerkin coarsen A^h to obtain A^H > >> and to separately Galerkin coarsen M^h to obtain M^H. > >> > >> So, yes, the way in which I currently (partially) understand your > >> description of the new DMCreateMatrices would do the job. > > > > If you want to separately coarsen A and M via Galerkin, I think it will be > > easier to just change the code in PCSetUp_MG to handle the case where A and > > M are different on the coarse levels. Effectively you just need to > > replicate the code that computes the coarse grid "B" matrix to separately > > compute coarse grid A and B matrices and pass them in to KSPSetOperators. > > > > Cheers, > > > > Lawrence > > > >
