<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<style type="text/css" style="display:none;"><!-- P {margin-top:0;margin-bottom:0;} --></style>
</head>
<body dir="ltr">
<div id="divtagdefaultwrapper" style="font-size:12pt;color:#000000;background-color:#FFFFFF;font-family:Calibri,Arial,Helvetica,sans-serif;">
<div id="divtagdefaultwrapper" style="font-size:12pt; color:#000000; background-color:#FFFFFF; font-family:Calibri,Arial,Helvetica,sans-serif">
<p>Hello,</p>
<p><br>
</p>
<p>What is the proper way to set up a shell preconditioner within a fielsplit? I have tried it on my own, but do not get the proper behavior. The relevant portion looks like this:</p>
<p><br>
</p>
<p>__________________________________________________________________</p>
<p></p>
<div>// Global System</div>
<div>KSPSetOperators(ksp, A, A);</div>
<div><br>
</div>
// Skipped code..
<p></p>
<p><br>
</p>
<p><br>
</p>
<p>// Shell Preconditioner for the pressure sub-block</p>
<p>KSP *subksp;</p>
<p></p>
<div>PCFieldSplitGetSubKSP(pc, NULL, &subksp);</div>
<div><br>
</div>
<div><span style="font-size: 12pt;">Mat pressureA;</span><br>
</div>
<div>KSPSetType(subksp[0], "preonly");</div>
<div><span style="font-size: 12pt;">MatCreateShell(MPI_COMM_WORLD, <span style="font-family: Calibri, Arial, Helvetica, sans-serif; font-size: 16px;">
n_local_P_dofs</span>,</span><span style="font-size: 12pt;"> n_local_P_dofs, , </span><span style="font-size: 12pt;">PETSC_DETERMINE, <span style="font-family: Calibri, Arial, Helvetica, sans-serif; font-size: 16px;"><span style="font-family: Calibri, Arial, Helvetica, sans-serif; font-size: 16px;">PETSC_DETERMINE</span></span>, &pressureA);</span></div>
<div><span style="font-size: 12pt;">MatShellSetOperation(pressureA, MATOP_MULT, </span><span style="font-size: 12pt;">(void(*)(void)) PressureBlock);</span></div>
<div>KSPSetOperators(subksp[0], pressureA, pressureA);</div>
<div id="divtagdefaultwrapper" style="font-size:12pt; color:#000000; background-color:#FFFFFF; font-family:Calibri,Arial,Helvetica,sans-serif">
<br>
</div>
<span style="font-family: Calibri, Arial, Helvetica, sans-serif; font-size: 16px;">
<p style="font-family: Calibri, Arial, Helvetica, sans-serif; font-size: 16px;">// Skipped code..</p>
<div><br>
</div>
<div><br>
</div>
</span></div>
<div id="divtagdefaultwrapper" style="font-size:12pt; color:#000000; background-color:#FFFFFF; font-family:Calibri,Arial,Helvetica,sans-serif">
<p></p>
<p>KSPSetUp(ksp);<br>
</p>
<p>KSPSolve(ksp, b, x);<br>
</p>
<p><span style="font-family: Calibri, Arial, Helvetica, sans-serif; font-size: 16px;">__________________________________________________________________</span><br>
</p>
<p><span style="font-family: Calibri, Arial, Helvetica, sans-serif; font-size: 16px;"><br>
</span></p>
<p><span style="font-family: Calibri, Arial, Helvetica, sans-serif; font-size: 16px;">The fieldsplit component works fine; the solver however does not go into the custom function PressureBlock(), so I am curious as to what the correct approach is.</span></p>
<p><span style="font-family: Calibri, Arial, Helvetica, sans-serif; font-size: 16px;"><br>
</span></p>
<p><span style="font-family: Calibri, Arial, Helvetica, sans-serif; font-size: 16px;">Best,</span></p>
<p><span style="font-family: Calibri, Arial, Helvetica, sans-serif; font-size: 16px;"><br>
</span></p>
<p><span style="font-family: Calibri, Arial, Helvetica, sans-serif; font-size: 16px;">Artur</span></p>
</div>
</div>
</body>
</html>