<div dir="ltr"><div class="gmail_extra"><div class="gmail_quote">On Tue, Mar 28, 2017 at 8:19 AM, Klaij, Christiaan <span dir="ltr"><<a href="mailto:C.Klaij@marin.nl" target="_blank">C.Klaij@marin.nl</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">Barry,<br>
<br>
That seems by far the best way to proceed! As a user I'm<br>
responsible for the velocity-pressure matrix and its null space,<br>
all the rest is up to PCFieldSplit. But unfortunately it doesn't<br>
work:<br>
<br>
I've constructed the null space [u,p]=[0,1], attached it to the<br>
velocity-pressure matrix and verified it by MatNullSpaceTest. I'm<br>
making sure the rhs is consistent with "MatNullSpaceRemove".<br>
<br>
However, the null space doesn't seem to propagate to the Schur<br>
complement, which therefore doesn't converge, see<br>
attachment "out1".<br>
<br>
When I attach the constant null space directly to A11, it does<br>
reach the Schur complement and I do get convergence, see<br>
attachment "out2".<br></blockquote><div><br></div><div>So you attach a null space vector to the large matrix, and have a consistent rhs?</div><div>This is not quite what we want. If you</div><div><br></div><div>  a) Had a consistent rhs and attached the constant nullspace vector to the pressure IS, then things will work</div><div><br></div><div>  b) Had a consistent rhs and attached the constant nullspace vector to the "field" object from a DM, it should work</div><div><br></div><div>  c) Attached the global nullspace vector to A^T and the constant nullspace to the pressure IS, it should work</div><div><br></div><div>We can't really pull apart the global null vector because there is no guarantee that its the nullspace of the submatrix.</div><div><br></div><div>  Thanks,</div><div><br></div><div>     Matt</div><div> </div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">
Chris<br>
<span class="gmail-"><br>
______________________________<wbr>__________<br>
From: Barry Smith <<a href="mailto:bsmith@mcs.anl.gov">bsmith@mcs.anl.gov</a>><br>
</span>Sent: Monday, March 27, 2017 6:35 PM<br>
<div class="gmail-HOEnZb"><div class="gmail-h5">To: Klaij, Christiaan<br>
Cc: Lawrence Mitchell; Matthew Knepley; <a href="mailto:petsc-users@mcs.anl.gov">petsc-users@mcs.anl.gov</a><br>
Subject: Re: [petsc-users] left and right preconditioning with a constant null space<br>
<br>
> On Mar 27, 2017, at 2:23 AM, Klaij, Christiaan <<a href="mailto:C.Klaij@marin.nl">C.Klaij@marin.nl</a>> wrote:<br>
><br>
> Barry,<br>
><br>
> I removed the null space from the rhs in the debug program that I<br>
> wrote to just solve Sp x = b once. In this debug program I've<br>
> constructed Sp myself after reading in the four blocks from the<br>
> real program. So this is independent of PCFieldSplit. Indeed I<br>
> also see bad convergence when using pc_type svd for this debug<br>
> program unless I remove the null space from the rhs.<br>
><br>
> So far I haven't managed to translate any of this to the real<br>
> program.<br>
><br>
> - Setting the null space for Sp in the real program seems to work<br>
>  by happy accident, but Lawrence gave me the hint to<br>
>  use "PetscObjectCompose" to set the nullspace using is1.<br>
><br>
> - I still have to understand Lawrence's hint and Matt's comment<br>
>  about MatSetTransposeNullSpace.<br>
><br>
> - I'm not sure how to remove the null space from the rhs vector<br>
>  in the real pogram, since I have one rhs vector with both<br>
>  velocity and pressure and the null space only refers to the<br>
>  pressure part. Any hints?<br>
><br>
> - Or should I set the null space for the velocity-pressure matrix<br>
>  itself, instead of the Schur complement?<br>
<br>
   I would first check if the entire full velocity-pressure right hand side is consistent. If it is not you can make it consistent by removing the transpose null space. You can use MatCreateNullSpace() to create the null space by passing in a vector that is constant on all the pressure variables and 0 on the velocity variables.<br>
<br>
   Barry<br>
<br>
><br>
> - Besides this, I'm also wondering why the rhs would be<br>
>  inconsistent in the first place, it's hard to understand from<br>
>  the discretization.<br>
><br>
> Thanks for your reply,<br>
> Chris<br>
><br>
><br>
><br>
> dr. ir. Christiaan Klaij  | Senior Researcher | Research & Development<br>
> MARIN | T <a href="tel:%2B31%20317%2049%2033%2044" value="+31317493344">+31 317 49 33 44</a> | mailto:<a href="mailto:C.Klaij@marin.nl">C.Klaij@marin.nl</a> | <a href="http://www.marin.nl" rel="noreferrer" target="_blank">http://www.marin.nl</a><br>
><br>
> MARIN news: <a href="http://www.marin.nl/web/News/News-items/Comfort-and-Safety-at-Sea-March-29-Rotterdam.htm" rel="noreferrer" target="_blank">http://www.marin.nl/web/News/<wbr>News-items/Comfort-and-Safety-<wbr>at-Sea-March-29-Rotterdam.htm</a><br>
><br>
> ______________________________<wbr>__________<br>
> From: Barry Smith <<a href="mailto:bsmith@mcs.anl.gov">bsmith@mcs.anl.gov</a>><br>
> Sent: Saturday, March 25, 2017 1:29 AM<br>
> To: Klaij, Christiaan<br>
> Cc: Lawrence Mitchell; Matthew Knepley; <a href="mailto:petsc-users@mcs.anl.gov">petsc-users@mcs.anl.gov</a><br>
> Subject: Re: [petsc-users] left and right preconditioning with a constant null space<br>
><br>
>> On Mar 24, 2017, at 10:11 AM, Klaij, Christiaan <<a href="mailto:C.Klaij@marin.nl">C.Klaij@marin.nl</a>> wrote:<br>
>><br>
>> I've written a small PETSc program that loads the four blocks,<br>
>> constructs Sp, attaches the null space and solves with a random<br>
>> rhs vector.<br>
>><br>
>> This small program replicates the same behaviour as the real<br>
>> code: convergence in the preconditioned norm, stagnation in the<br>
>> unpreconditioned norm.<br>
>><br>
>> But when I add a call to remove the null space from the rhs<br>
>> vector ("MatNullSpaceRemove"),<br>
><br>
>   Are you removing the null space from the original full right hand side or inside the solver for the Schur complement problem?<br>
><br>
>   Note that if instead of using PCFIELDSPLIT you use some other simpler PC you should also see bad convergence, do you? Even if you use -pc_type svd you should see bad convergence?<br>
><br>
><br>
><br>
>> I do get convergence in both<br>
>> norms! Clearly, the real code must somehow produce an<br>
>> inconsistent rhs vector. So the problem is indeed somewhere else<br>
>> and not in PCFieldSplit.<br>
>><br>
>> Chris<br>
>><br>
>><br>
>><br>
>> dr. ir. Christiaan Klaij  | Senior Researcher | Research & Development<br>
>> MARIN | T <a href="tel:%2B31%20317%2049%2033%2044" value="+31317493344">+31 317 49 33 44</a> | mailto:<a href="mailto:C.Klaij@marin.nl">C.Klaij@marin.nl</a> | <a href="http://www.marin.nl" rel="noreferrer" target="_blank">http://www.marin.nl</a><br>
>><br>
>> MARIN news: <a href="http://www.marin.nl/web/News/News-items/Meet-us-again-at-the-OTC-2017.htm" rel="noreferrer" target="_blank">http://www.marin.nl/web/News/<wbr>News-items/Meet-us-again-at-<wbr>the-OTC-2017.htm</a><br>
>><br>
>> ______________________________<wbr>__________<br>
>> From: Klaij, Christiaan<br>
>> Sent: Friday, March 24, 2017 1:34 PM<br>
>> To: Lawrence Mitchell; Matthew Knepley<br>
>> Cc: <a href="mailto:petsc-users@mcs.anl.gov">petsc-users@mcs.anl.gov</a><br>
>> Subject: Re: [petsc-users] left and right preconditioning with a constant null space<br>
>><br>
>> I've also loaded the four blocks into matlab, computed<br>
>><br>
>> Sp = A11 - A10 inv(diag(A00)) A01<br>
>><br>
>> and confirmed that Sp has indeed a constant null space.<br>
>><br>
>> Chris<br>
>> ______________________________<wbr>__________<br>
>> From: Klaij, Christiaan<br>
>> Sent: Friday, March 24, 2017 9:05 AM<br>
>> To: Lawrence Mitchell; Matthew Knepley<br>
>> Cc: <a href="mailto:petsc-users@mcs.anl.gov">petsc-users@mcs.anl.gov</a><br>
>> Subject: Re: [petsc-users] left and right preconditioning with a constant null space<br>
>><br>
>> Lawrence,<br>
>><br>
>> I think you mean "-fieldsplit_1_mat_null_space_<wbr>test"? This<br>
>> doesn't return any info, should it? Anyway, I've added a "call<br>
>> MatNullSpaceTest" to the code which returns "true" for the null<br>
>> space of A11.<br>
>><br>
>> I also tried to run with "-fieldsplit_1_ksp_constant_<wbr>null_space"<br>
>> so that the null space is only attached to S (and not to<br>
>> A11). Unfortunately, the behaviour is still the same: convergence<br>
>> in the preconditioned norm only.<br>
>><br>
>> Chris<br>
>> ______________________________<wbr>__________<br>
>> From: Lawrence Mitchell <<a href="mailto:lawrence.mitchell@imperial.ac.uk">lawrence.mitchell@imperial.<wbr>ac.uk</a>><br>
>> Sent: Thursday, March 23, 2017 4:52 PM<br>
>> To: Klaij, Christiaan; Matthew Knepley<br>
>> Cc: <a href="mailto:petsc-users@mcs.anl.gov">petsc-users@mcs.anl.gov</a><br>
>> Subject: Re: [petsc-users] left and right preconditioning with a constant null space<br>
>><br>
>> On 23/03/17 15:37, Klaij, Christiaan wrote:<br>
>>> Yes, that's clearer, thanks! I do have is0 and is1 so I can try<br>
>>> PetscObjectCompose and let you know.<br>
>>><br>
>>> Note though that the viewer reports that both S and A11 have a<br>
>>> null space attached... My matrix is a matnest and I've attached a<br>
>>> null space to A11, so the latter works as expected. But is the viewer<br>
>>> wrong for S?<br>
>><br>
>> No, I think this is a consequence of using a matnest and attaching a<br>
>> nullspace to A11.  In that case you sort of "can" set a nullspace on<br>
>> the submatrix returned in MatCreateSubMatrix(Amat, is1, is1), because<br>
>> you just get a reference.  But if you switched to AIJ then you would<br>
>> no longer get this.<br>
>><br>
>> So it happens that the nullspace you set on A11 /is/ transferred over<br>
>> to S, but this is luck, rather than design.<br>
>><br>
>> So maybe there is something else wrong.  Perhaps you can run with<br>
>> -fieldsplit_1_ksp_test_null_<wbr>space to check the nullspace matches<br>
>> correctly?<br>
>><br>
>> Lawrence<br>
>><br>
><br>
<br>
</div></div></blockquote></div><br><br clear="all"><div><br></div>-- <br><div class="gmail_signature">What most experimenters take for granted before they begin their experiments is infinitely more interesting than any results to which their experiments lead.<br>-- Norbert Wiener</div>
</div></div>