<div dir="ltr">You are giving all levels the same matrices (K & M). This code should not work.<div><br></div><div>You are using LU as the smother. This will solve the problem immediately. If MG is setup correctly then you will just have zero residuals and corrections for the rest of the solve. And you set the relative tolerance to 1.e-12, which will solve the problem with whatever smoother you use.</div></div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Mon, Mar 11, 2019 at 10:42 AM Pietro Benedusi via petsc-users <<a href="mailto:petsc-users@mcs.anl.gov">petsc-users@mcs.anl.gov</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">



<div style="overflow-wrap: break-word;">
Dear Petsc team,
<div><br>
</div>
<div>I have a question about the setting up of a multigrid solver.</div>
<div><br>
</div>
<div>I would like yo use a PCG smoother, preconditioned with a mass matrix, just on the fine level.</div>
<div>But when add the line for preconditioning the CG with the mass matrix my MG diverges.</div>
<div><br>
</div>
<div>I have implemented the same solver in MATLAB and it converges fine. Also the operators in PETSc are the same and the PCG applied directly on the problem (without MG) works the same in both PETSC and MATLAB. </div>
<div><br>
</div>
<div>This is what I do in PETSC for 2 levels:</div>
<div><br>
</div>
<div><font face="Menlo"><br>
</font></div>
<div>
<div><font face="Menlo">    KSP space_solver;       </font></div>
<div><font face="Menlo"><br>
</font></div>
<div><font face="Menlo">    ierr = KSPCreate(PETSC_COMM_WORLD,&space_solver);CHKERRQ(ierr);</font></div>
<div><font face="Menlo">    ierr = KSPSetTolerances(space_solver,1e-8,PETSC_DEFAULT,PETSC_DEFAULT,PETSC_DEFAULT);CHKERRQ(ierr);           </font></div>
<div><font face="Menlo">    ierr = KSPSetOperators(space_solver, K, K);CHKERRQ(ierr); </font></div>
<div><font face="Menlo">    ierr = KSPSetNormType(space_solver,  KSP_NORM_UNPRECONDITIONED );CHKERRQ(ierr);  </font></div>
<div><font face="Menlo"><br>
</font></div>
<div><font face="Menlo">    ierr = KSPSetType(space_solver,KSPRICHARDSON);CHKERRQ(ierr);    </font></div>
<div><font face="Menlo">    ierr = KSPSetFromOptions(space_solver);CHKERRQ(ierr);         </font></div>
<div><font face="Menlo">    ierr = KSPSetUp(space_solver);CHKERRQ(ierr);        </font></div>
<div><font face="Menlo"><br>
</font></div>
<div><font face="Menlo">    PC pcmg;</font></div>
<div><font face="Menlo">    ierr = KSPGetPC(space_solver, &pcmg);</font></div>
<div><font face="Menlo">    ierr = PCSetType(pcmg, PCMG);    </font></div>
<div><font face="Menlo">    ierr = PCMGSetLevels(pcmg,levels, NULL);CHKERRQ(ierr);</font></div>
<div><font face="Menlo">    ierr = PCMGSetGalerkin(pcmg,PC_MG_GALERKIN_BOTH);CHKERRQ(ierr);</font></div>
<div><font face="Menlo"><br>
</font></div>
<div><font face="Menlo">    // smoothers</font></div>
<div><font face="Menlo">    for (int i = 1; i < levels; ++i)  </font></div>
<div><font face="Menlo">    {</font></div>
<div><font face="Menlo">        KSP smoother;</font></div>
<div><font face="Menlo">        ierr = PCMGGetSmoother(pcmg, i, &smoother);CHKERRQ(ierr);</font></div>
<div><font face="Menlo"><br>
</font></div>
<div><font face="Menlo">            ierr = KSPSetType(smoother, KSPCG);CHKERRQ(ierr); </font></div>
<div><font face="Menlo">            ierr = KSPSetOperators(smoother, K, M);CHKERRQ(ierr);             </font></div>
<div><font face="Menlo"><br>
</font></div>
<div><font face="Menlo">            // ierr = KSPSetUp(smoother);CHKERRQ(ierr);              </font></div>
<div><font face="Menlo"><br>
</font></div>
<div><font face="Menlo">            ierr = KSPSetTolerances(smoother,1e-12,PETSC_DEFAULT,PETSC_DEFAULT,s_p);CHKERRQ(ierr);               </font></div>
<div><font face="Menlo">            ierr = KSPSetNormType(smoother, KSP_NORM_NONE);CHKERRQ(ierr);  </font></div>
<div><font face="Menlo"><br>
</font></div>
<div><font face="Menlo">            PC sm;</font></div>
<div><font face="Menlo">            ierr = KSPGetPC(smoother, &sm);CHKERRQ(ierr);            </font></div>
<div><font face="Menlo">            ierr = PCSetType(sm,   PCLU);CHKERRQ(ierr);       </font></div>
<div><font face="Menlo">                        </font></div>
<div><font face="Menlo">        ierr = PCMGSetInterpolation(pcmg, i, interpolation_operators[i-1]);CHKERRQ(ierr);                   </font></div>
<div><font face="Menlo">    }</font></div>
<div><br>
</div>
<div><br>
</div>
<div><br>
</div>
<div>I think there is a problem with the PETSc syntax, because I checked everything else and it is fine.</div>
<div><br>
</div>
<div>Do you any ideas?</div>
<div><br>
</div>
<div>Thank you very much!</div>
<div><br>
</div>
<div>Best,</div>
<div>Pietro </div>
<div><br class="gmail-m_-5892264451207364904webkit-block-placeholder">
</div>
<div>
<div style="color:rgb(0,0,0);letter-spacing:normal;text-align:start;text-indent:0px;text-transform:none;white-space:normal;word-spacing:0px">
<div style="color:rgb(0,0,0);letter-spacing:normal;text-align:start;text-indent:0px;text-transform:none;white-space:normal;word-spacing:0px">
<div style="color:rgb(0,0,0);letter-spacing:normal;text-align:start;text-indent:0px;text-transform:none;white-space:normal;word-spacing:0px">
~~~~~~~~~~~~</div>
<div style="color:rgb(0,0,0);letter-spacing:normal;text-align:start;text-indent:0px;text-transform:none;white-space:normal;word-spacing:0px">
Pietro Benedusi</div>
<div style="color:rgb(0,0,0);letter-spacing:normal;text-align:start;text-indent:0px;text-transform:none;white-space:normal;word-spacing:0px">
<br>
</div>
<div style="color:rgb(0,0,0);letter-spacing:normal;text-align:start;text-indent:0px;text-transform:none;white-space:normal;word-spacing:0px">
Numerical Simulation in Science,<br>
Medicine and Engineering research group</div>
<div style="color:rgb(0,0,0);letter-spacing:normal;text-align:start;text-indent:0px;text-transform:none;white-space:normal;word-spacing:0px">
ICS, Institute of Computational Science<br>
</div>
<div style="color:rgb(0,0,0);letter-spacing:normal;text-align:start;text-indent:0px;text-transform:none;white-space:normal;word-spacing:0px">
USI, Università della Svizzera Italiana<br>
Via Giuseppe Buffi, 13<br>
CH - 6900 Lugano<br>
<div><a href="mailto:benedp@usi.ch" target="_blank">benedp@usi.ch</a><br>
<br>
</div>
</div>
</div>
</div>
</div>
<br>
</div>
</div>

</blockquote></div>