<div class="gmail_quote">On Thu, Sep 8, 2011 at 09:02, Tian(ICT) <span dir="ltr">&lt;<a href="mailto:rongtian@ncic.ac.cn">rongtian@ncic.ac.cn</a>&gt;</span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex;">
<div id=":1zg">in a nonlinear solving, I followed the above suggestion: in FormFunction,<br>
set F_i=x_i-given_value (nonzero) and in FormJacobian, MatZeroRows for the corresponding rows.<br>
However, the convergence is must slowed down as the exact satisfaction of xi=givenvalue<br>
has to be satisfied in an interative manner. Acturally convergence is not just slow but almost<br>
not practical (normally &gt; 50 interations).<br></div></blockquote><div><br></div><div>What are you using for the &quot;diag&quot; argument to MatZeroRows? If you place 1 on the diagonal, those equations should be satisfied after one application of the preconditioner.</div>
<div><br></div><div>Why do you think that 50 iterations is more than the solver algorithm you are using should need?</div><div><br></div><div>Note that for some problems, it is desirable to preserve symmetry. The implementation of boundary conditions described here does not preserve symmetry. To preserve symmetry, the column should also be zeroed. In residual evaluation, this is implemented by using the correct Dirichlet value instead of the current approximation. It is much better to zero the column by modifying the arguments to MatSetValues instead of &quot;applying&quot; boundary conditions after assembly.</div>
</div>