A known null space doesn't really "fix" LU for a singular problem [1]. You need a preconditioner that is *stable*. Also, it sounds like you may have additional vectors in the null space coming from the Cahn-Hilliard variables.<div>
<br></div><div>[1] One could create a new matrix with space for Lagrange multipliers enforcing the null space and perform the factorization there. But doing this automatically isn't implemented in the library so you'd have to write it.<br>
<br><div class="gmail_quote">On Tue, Jun 12, 2012 at 1:32 AM, Thomas Witkowski <span dir="ltr"><<a href="mailto:thomas.witkowski@tu-dresden.de" target="_blank">thomas.witkowski@tu-dresden.de</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
I've some trouble to setup the nullspace for my equation correctly. It is an implicit coupled Navier-Stokes / Cahn-Hilliard equation (for two phase flow simulation) in 2D. To simulate an "infinite" domain, the upper and lower boundaries are periodic for all 5 components. The pressure and the two variables from the Cahn-Hilliard equation are null-flux (Neumann) on the other two boundaries, the velocity is set to 0 (Dirichlet) on them. I would expect to have a non-empty nullspace. When using richardson/lu, I see the following behavior:<br>

<br>
 1 KSP preconditioned resid norm 3.130958085604e+04 true resid norm 1.339173230263e-11 ||r(i)||/||b|| 2.249831332702e-16<br>
 2 KSP preconditioned resid norm 5.987054624984e+04 true resid norm 8.900173028027e-12 ||r(i)||/||b|| 1.495242564025e-16<br>
 3 KSP preconditioned resid norm 8.159870664335e+04 true resid norm 7.429941832854e-12 ||r(i)||/||b|| 1.248241493927e-16<br>
 4 KSP preconditioned resid norm 7.087492912608e+04 true resid norm 7.066574102540e-12 ||r(i)||/||b|| 1.187195164260e-16<br>
 5 KSP preconditioned resid norm 1.075156685382e+05 true resid norm 6.963290776604e-12 ||r(i)||/||b|| 1.169843408895e-16<br>
 6 KSP preconditioned resid norm 9.260088828115e+04 true resid norm 6.996993371924e-12 ||r(i)||/||b|| 1.175505496012e-16<br>
<br>
So, in principle the system is solvable, but the preconditioned norm is wrong. I created a nullspace basis that is 1 on all pressure unknowns and 0 on all of the other four components. I can easily verify that this vector is at least an element of the nullspace, as the norm of the vector resulting from MatMult with the assembled matrix and the nullspace basis vector is in the order of 1e-16. I set the nullspace to the system matrix, and rerun with richardson/lu:<br>

<br>
  0 KSP preconditioned resid norm 6.025198436485e+09 true resid norm 5.952327229149e+04 ||r(i)||/||b|| 1.000000000000e+00<br>
  1 KSP preconditioned resid norm 3.436455497312e+09 true resid norm 9.795164213312e-09 ||r(i)||/||b|| 1.645602440226e-13<br>
  2 KSP preconditioned resid norm 3.365625775916e+09 true resid norm 7.488946142386e-09 ||r(i)||/||b|| 1.258154307396e-13<br>
  3 KSP preconditioned resid norm 2.543011385543e+09 true resid norm 5.719959416026e-09 ||r(i)||/||b|| 9.609618550566e-14<br>
  4 KSP preconditioned resid norm 4.406639844892e+08 true resid norm 6.417414971975e-09 ||r(i)||/||b|| 1.078135446007e-13<br>
  5 KSP preconditioned resid norm 2.741735667402e+09 true resid norm 5.646995693759e-09 ||r(i)||/||b|| 9.487038390809e-14<br>
  6 KSP preconditioned resid norm 2.427193596206e+09 true resid norm 1.327430895972e-08 ||r(i)||/||b|| 2.230104033043e-13<br>
  7 KSP preconditioned resid norm 1.603502416252e+09 true resid norm 1.338139212677e-08 ||r(i)||/||b|| 2.248094167478e-13<br>
  8 KSP preconditioned resid norm 1.646847388237e+09 true resid norm 1.287770565938e-08 ||r(i)||/||b|| 2.163474077218e-13<br>
  9 KSP preconditioned resid norm 2.136833312630e+09 true resid norm 1.261183165000e-08 ||r(i)||/||b|| 2.118806840498e-13<br>
 10 KSP preconditioned resid norm 1.405267823532e+09 true resid norm 2.499790590170e-08 ||r(i)||/||b|| 4.199686095765e-13<br>
<br>
The system at all is not solvable anymore. What could be the problem? Some technical issue I forgot about? Or my be the nullspace be wrong? Thanks for any hint!<span class="HOEnZb"><font color="#888888"><br>
<br>
Thomas<br>
</font></span></blockquote></div><br></div>