<html><head></head><body style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space; ">Hi all,<div>I am testing some preconditioners for a FEM problem involving different types of fields (displacements, temperature, stresses and plastic strain).</div><div>To make sure that things are working correctly I am first solving this problem with: </div><blockquote class="webkit-indent-blockquote" style="margin: 0 0 0 40px; border: none; padding: 0px;"><div><font class="Apple-style-span" face="'Lucida Console'">-ksp_type preonly -pc_type lu,</font> which works fine obviously.</div></blockquote><br><div>Then I move on to do:</div><blockquote class="webkit-indent-blockquote" style="margin: 0 0 0 40px; border: none; padding: 0px;"><div><font class="Apple-style-span" face="'Lucida Console'">-ksp_type gmres -pc_type lu,</font> and I get very good convergence (one gmres linear iteration per time step) which I expected.</div></blockquote><br><div>So solving the problem exactly in a preconditioner to gmres leads to optimal results.</div><div>This can be done using a Schur complement, but when I pass the following options:</div><blockquote class="webkit-indent-blockquote" style="margin: 0 0 0 40px; border: none; padding: 0px;"><div><font class="Apple-style-span" face="'Lucida Console'">-ksp_type gmres -pc_type fieldsplit -pc_fieldsplit_type schur -pc_fieldsplit_schur_factorization_type full -pc_fieldsplit_0_fields 2,3 -pc_fieldsplit_1_fields 0,1 -fieldsplit_0_ksp_type preonly -fieldsplit_0_pc_type lu -fieldsplit_1_ksp_type preonly -fieldsplit_1_pc_type lu</font></div></blockquote><div>My results are terrible, gmres does not converge and my FEM code reduces the size of the time step in order to converge.</div><div>This does not make much sense to me...</div><div><br></div><div>Curiously if I use the following options:</div><blockquote class="webkit-indent-blockquote" style="margin: 0 0 0 40px; border: none; padding: 0px;"><div><font class="Apple-style-span" face="'Lucida Console'">-ksp_type gmres -pc_type fieldsplit -pc_fieldsplit_type schur -pc_fieldsplit_schur_factorization_type full -pc_fieldsplit_0_fields 2,3 -pc_fieldsplit_1_fields 0,1 -fieldsplit_0_ksp_type gmres -fieldsplit_0_pc_type lu -fieldsplit_1_ksp_type gmres -fieldsplit_1_pc_type lu</font></div></blockquote>then the global gmres converges in two iterations.<div><br></div><div>So using a pair of ksp gmres/pc lu on the A00 block and the Schur complements works, but using lu directly doesn't.</div><div><br></div><div>Because I think that all this is quite strange, I decided to dump some matrices out. Namely, I dumped the complete FEM jacobian, I also do a MatView on jac->B, jac->C and the result of KSPGetOperators on kspA. These returns three out of the four blocks needed to do the Schur complement. They are correct and I assume that the last block is also correct.</div><div>When I import jac->B, jac->C and the matrix corresponding to kspA in MATLAB to compute the inverse of the Schur complement and pass it to gmres as preconditioner the problem is solved in 1 iteration.</div><div><br></div><div>So MATLAB says:</div><blockquote class="webkit-indent-blockquote" style="margin: 0 0 0 40px; border: none; padding: 0px;"><div><span class="Apple-style-span" style="font-family: 'Lucida Console'; ">-ksp_type gmres -pc_type fieldsplit -pc_fieldsplit_type schur -pc_fieldsplit_schur_factorization_type full -pc_fieldsplit_0_fields 2,3 -pc_fieldsplit_1_fields 0,1 -fieldsplit_0_ksp_type preonly -fieldsplit_0_pc_type lu -fieldsplit_1_ksp_type preonly -fieldsplit_1_pc_type lu</span></div></blockquote><div><div>should yield only one iteration (maybe two depending on implementation).</div><div><br></div><div>Any ideas why the Petsc doesn't solve this correctly?</div><div><br><div>
<span class="Apple-style-span" style="border-collapse: separate; color: rgb(0, 0, 0); font-family: Helvetica; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; orphans: 2; text-align: -webkit-auto; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-border-horizontal-spacing: 0px; -webkit-border-vertical-spacing: 0px; -webkit-text-decorations-in-effect: none; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; font-size: medium; "><div>Best,</div><div>Luc</div></span>
</div>
<br></div></div></body></html>