<div dir="ltr">Hi,<div><br></div><div>I'm trying to solve a linear system of equations  Ax=b, where A has a null space (say Q) and x is known to be orthogonal to Q. In order to avoid ill-conditioning, I was trying to do the following:</div><div><br></div><div><ol><li> Create A as a shell matrix </li><li> Overload the MATOP_MULT operation for with my own function which returns <br>y = A*(I - QQ^T)x instead of y = Ax</li><li>Upon convergence, solution = (I-QQ^T)x instead of x.</li></ol>However, I realized that the linear solver can make x have any arbitrary component along Q and still y = A*(I-QQ^T)x will remain unaffected, and hence can cause convergence issues. Indeed, I saw such convergence problems. What fixed the problem was using MatSetNullSpace for A with Q as the nullspace, in addition to the above three steps. </div><div><br></div><div>So my question is what exactly is MatSetNullSpace doing? And since the full A information is not present and A is only accessed through MAT_OP_MULT, I'm confused as how MatSetNullSpace might be fixing the convergence issue. </div><div><br></div><div>Thanks,</div><div>Bikash  <br><div><br></div>-- <br><div class="gmail_signature"><div dir="ltr"><div><div><div><div><font color="#666666">Bikash S. Kanungo<br></font></div><font color="#666666">PhD Student<br></font></div><font color="#666666">Computational Materials Physics Group<br></font></div><font color="#666666">Mechanical Engineering <br></font></div><font color="#666666">University of Michigan<br><br></font></div></div>
</div></div>