<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>