[petsc-users] Nullspace issue

Thomas Witkowski thomas.witkowski at tu-dresden.de
Tue Jun 12 01:32:22 CDT 2012


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:

  1 KSP preconditioned resid norm 3.130958085604e+04 true resid norm 
1.339173230263e-11 ||r(i)||/||b|| 2.249831332702e-16
  2 KSP preconditioned resid norm 5.987054624984e+04 true resid norm 
8.900173028027e-12 ||r(i)||/||b|| 1.495242564025e-16
  3 KSP preconditioned resid norm 8.159870664335e+04 true resid norm 
7.429941832854e-12 ||r(i)||/||b|| 1.248241493927e-16
  4 KSP preconditioned resid norm 7.087492912608e+04 true resid norm 
7.066574102540e-12 ||r(i)||/||b|| 1.187195164260e-16
  5 KSP preconditioned resid norm 1.075156685382e+05 true resid norm 
6.963290776604e-12 ||r(i)||/||b|| 1.169843408895e-16
  6 KSP preconditioned resid norm 9.260088828115e+04 true resid norm 
6.996993371924e-12 ||r(i)||/||b|| 1.175505496012e-16

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:

   0 KSP preconditioned resid norm 6.025198436485e+09 true resid norm 
5.952327229149e+04 ||r(i)||/||b|| 1.000000000000e+00
   1 KSP preconditioned resid norm 3.436455497312e+09 true resid norm 
9.795164213312e-09 ||r(i)||/||b|| 1.645602440226e-13
   2 KSP preconditioned resid norm 3.365625775916e+09 true resid norm 
7.488946142386e-09 ||r(i)||/||b|| 1.258154307396e-13
   3 KSP preconditioned resid norm 2.543011385543e+09 true resid norm 
5.719959416026e-09 ||r(i)||/||b|| 9.609618550566e-14
   4 KSP preconditioned resid norm 4.406639844892e+08 true resid norm 
6.417414971975e-09 ||r(i)||/||b|| 1.078135446007e-13
   5 KSP preconditioned resid norm 2.741735667402e+09 true resid norm 
5.646995693759e-09 ||r(i)||/||b|| 9.487038390809e-14
   6 KSP preconditioned resid norm 2.427193596206e+09 true resid norm 
1.327430895972e-08 ||r(i)||/||b|| 2.230104033043e-13
   7 KSP preconditioned resid norm 1.603502416252e+09 true resid norm 
1.338139212677e-08 ||r(i)||/||b|| 2.248094167478e-13
   8 KSP preconditioned resid norm 1.646847388237e+09 true resid norm 
1.287770565938e-08 ||r(i)||/||b|| 2.163474077218e-13
   9 KSP preconditioned resid norm 2.136833312630e+09 true resid norm 
1.261183165000e-08 ||r(i)||/||b|| 2.118806840498e-13
  10 KSP preconditioned resid norm 1.405267823532e+09 true resid norm 
2.499790590170e-08 ||r(i)||/||b|| 4.199686095765e-13

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!

Thomas


More information about the petsc-users mailing list