<html dir="ltr">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<style id="owaParaStyle" type="text/css">P {margin-top:0;margin-bottom:0;}</style>
</head>
<body ocsi="0" fpstyle="1">
<div style="direction: ltr; font-family: Tahoma; color: rgb(0, 0, 0); font-size: 13px;">
<div style="">&nbsp;Hi, Petsc Team,<br>
<br>
In my knowledge of Petsc, the PCMG object is the main tool for general multigrid calculations, as DMMG only works for simple constant matrix and RHS.&nbsp; But it's difficult to find any example code for using PCMG.&nbsp; I checked out the petsc-user mail archive on
 this topic but still not find a good description on it.&nbsp; I encounter similar errors in the practice as some previous question-raisers did.<br>
<br>
Here is my simple code implementing the PCMG based on my understanding from the user manual and tutorial.&nbsp; It is supposed to have multigrid of only two levels (finest and coarsest grid).&nbsp; The error message indicates SEGV segmentation violation because of this
 part of code.&nbsp; Anything wrong with this implementation?<br>
<br>
<br>
&nbsp; DAGetMatrix(da, MATAIJ, &amp;M);&nbsp; <br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br>
&nbsp; KSPCreate(PETSC_COMM_WORLD, &amp;ksp);<br>
&nbsp; KSPSetType(ksp, KSPGMRES); <br>
&nbsp; KSPGetPC(ksp, &amp;pcmg); <br>
&nbsp; PCSetType(pcmg, PCMG); <br>
&nbsp; <br>
&nbsp; PCMGSetLevels(pcmg, 2, &amp;PETSC_COMM_WORLD);<br>
&nbsp; PCMGSetType(pcmg, PC_MG_MULTIPLICATIVE);<br>
&nbsp; PCMGSetCycleType(pcmg, PC_MG_CYCLE_W);<br>
&nbsp; PCMGSetCyclesOnLevel(pcmg, 0, 1);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br>
&nbsp; PCMGSetCyclesOnLevel(pcmg, 1, 1);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br>
<br>
&nbsp; PCMGGetCoarseSolve(pcmg, &amp;ksp);&nbsp; <br>
&nbsp;<br>
&nbsp; PCMGGetSmoother(pcmg, 0, &amp;ksp); <br>
&nbsp; PCMGGetSmoother(pcmg, 1, &amp;ksp); <br>
&nbsp; PCMGSetInterpolation(pcmg, 1, M);&nbsp;&nbsp;&nbsp; <br>
&nbsp; PCMGSetRestriction(pcmg, 1, M);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br>
&nbsp; <br>
&nbsp; PCMGSetResidual(pcmg, 0, PCMGDefaultResidual, M);<br>
&nbsp; PCMGSetResidual(pcmg, 1, PCMGDefaultResidual, M);<br>
<br>
<br>
&nbsp;The mandatory remaining PCMGSetRhs( ), PCMGSetX( ) and PCMGSetR( ) functions should be generated by Petsc automatically.<br>
<br>
It is tough to learn some Petsc functions when no detailed example and few guidance is provided.&nbsp; I wish you can add some tutorials codes on PCMG usage in the future version of Petsc.
<br>
<br>
<br>
Thank you very much.<br>
<br>
<br>
Zhisong Li<br>
<br>
<br>
<br>
</div>
</div>
</body>
</html>