On Apr 5, 2012, at 2:27 PM, Abdul Hanan Sheikh wrote: > Thanks for explaining all . > > Purpose is to implement an adapted deflation preconditioner. > Basically, it has nothing to do more with multigrid algorithm. > To have PETSC codes, i was left out to use PCMG framework to implment this. > > If you truly want this form exactly; then it is 0 iterations of a > pre-smooth and the KSP you set for the coarse mesh is C_c while you set the > M^-1 apply shell to post-smooth KSP. > > Does C_c mean recursive action ? if so, then fine!
What do you mean by recursive action? As I outlined it will solve the system represented by A_c (by a direct solver by default but you can change that). > > Setting M^-1 preconditioner in ksp_post context with what ksp_type ? to my > understanding, Richardson ? Yes, or if you only apply once then preonly. > Just need an endorsement this time. > > Thank you! > regards, Abdul > > > > From: Barry Smith <bsmith at mcs.anl.gov> > To: Abdul Hanan Sheikh <hanangul12 at yahoo.co.uk>; PETSc users list > <petsc-users at mcs.anl.gov> > Cc: Jed Brown <jedbrown at mcs.anl.gov> > Sent: Thursday, 5 April 2012, 20:27 > Subject: Re: [petsc-users] Implementation of Multilevel preconditioner > > > > On Apr 5, 2012, at 1:12 PM, Abdul Hanan Sheikh wrote: > > > Hi,, > > Thanks for more details!! > > Recursive two level multigrid (by using PCMG with my desired stuff in it, > > in PCSHELL) is okay. I will do it recursively. > > No Problem with recursion and nested iterations. > > Coming to two level, > > How can I get exactly Prec = C + M^-1 (I - A*C) in a two level multigrid ? > > What should be specific choice of pre_smoother_ksp_context and > > post_smoother_ksp_context > > to get the "Prec" ? > > what operators should be chosen in these two ksp contexts ? > > If you truly want this form exactly; then it is 0 iterations of a > pre-smooth and the KSP you set for the coarse mesh is C_c while you set the > M^-1 apply shell to post-smooth KSP. > > I see Jed just wrote "This is just -pc_mg_type kaskade (zero pre-smoothing > iterations, one post-smoothing iteration)." This is also correct and just a > different way of expressing the same thing. > > > Barry > > What motivates you to use this form? It is non-standard. Normal multigrid > with a pre-smooth and post-smooth (both M^-1) can be written algebraically as > > M^-1 + (I - M^-1A)C(I- AM^-1) which also equals M^-1 + C - CAM^-1 - M^-1A C > + M^-1 A C A M^-1 > > Note that I don't view writing the operations out this way as particularly > informative (for example witing it as C + M^-1 (I - A*C)), it conceals the > fact that your algorithm first projects the error onto the coarse grid space > and then projects the new error onto some fine grid space. Normal multigrid > with a pre and post first projects the error onto some fine grid space, then > projects the new error onto the coarse grid space then projects the newest > error onto the fine grid space again. > > > > > > > Awiaitng, > > with regards, Abdul > > > > > > > > > > > > > > > > > > From: Jed Brown <jedbrown at mcs.anl.gov> > > To: PETSc users list <petsc-users at mcs.anl.gov> > > Cc: Abdul Hanan Sheikh <hanangul12 at yahoo.co.uk> > > Sent: Thursday, 5 April 2012, 17:56 > > Subject: Re: [petsc-users] Implementation of Multilevel preconditioner > > > > On Thu, Apr 5, 2012 at 08:38, Barry Smith <bsmith at mcs.anl.gov> wrote: > > C + M^-1 (I - A*C) is exactly a multiplicative Schwarz method with two > > preconditioners. Or in another way to put it it is exactly a two level > > multigrid so you can use PCMG in a straightforward way. > > > > It looks to me like he wants to do nested iteration with recursive coarse > > levels rather than just iteration in a smoother. > > > > I need the accuracy at first and somehow at second coarse level. > > After these two levels, the number of iterations at each level till > > coarsest is constantly one. > > > > Okay, but one iteration of a preconditioned Krylov method is still two > > preconditioner applications, so the method would still be exponential in > > the number of levels. If Richardson iteration is okay, you can use > > -pc_mg_cycle_type w to do two iterations instead of 1. The code would > > actually work fine with increasing this further, but it looks like you > > would currently have to cheat a bit to get many recursive cycles. > > > > PCMGSetCycleType(pc,(PCMGCycleType)5); > > > > There is currently no interface for setting a different number of cycles on > > each level, but you could include mgimpl.h and change the levels->cycles > > manually. > > > > Note that W cycles are already often considered to be too much work on > > coarse levels to justify in a parallel setting, so it's somewhat unlikely > > that running more coarse level iterations will really be better than a more > > standard multigrid with stronger smoothers. > > > > > > >
