<html>
<head>
<meta content="text/html; charset=UTF-8" http-equiv="Content-Type">
</head>
<body bgcolor="#FFFFFF" text="#000000">
There should be no null space from the Cahn-Hilliard equation. Is
there some black-box preconditioner that does not relay on LU
factorization at some point? I know that black-box approaches are
mostly not efficient, but I would have something I can work with.<br>
<br>
Thomas<br>
<br>
<br>
Am 12.06.2012 14:31, schrieb Jed Brown:
<blockquote
cite="mid:CAM9tzSnr0n0DPAzRV8mKB=U23fzmesLHzAyiNLgYc6GXC31VXw@mail.gmail.com"
type="cite">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 moz-do-not-send="true"
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>
</blockquote>
<br>
</body>
</html>