OK, my solver is now working properly with a call to
PetscObjectCompose((PetscObject)isS, "pmat", (PetscObject) myS);

I have two follow-up questions:
1) am I supposed to call this, or is it the sign of something done wrong in my 
sequence of SNESSolve/KSPSetUp/KSPSetFromOptions/KSPSetOperators…?
2) I have currently hardwired the split name I’m using when calling 
PCFieldSplitGetIS to get “isS” (from above) for debugging purposes. Could I 
create a PR with a new function like PCFieldSplitGetISByIndex(PC pc,const 
PetscInt n,IS *is) that will return the nth IS? Right now, I would need to get 
the KSP prefix followed up by some string comparison to get the actual IS 
prefix, whereas I know the position of the KSP in the PC_FieldSplitLink.

Thanks,
Pierre

> On 14 Apr 2019, at 10:54 PM, Pierre Jolivet via petsc-dev 
> <petsc-dev@mcs.anl.gov> wrote:
> 
> I think I figured out what my problem is _exactly_.
> The Mat inside the MATNEST on which I’m using a PCFIELDSPLIT is unassembled 
> before the first KSPSolve, except for the last field.
> Matt, you nailed it, when I call KSPSetFromOptions on the global 
> PCFIELDSPLIT, then KSPSetUp explicitly on the inner PCFIELDSPLIT, the 
> matrices associated to all fields are created here: 
> https://www.mcs.anl.gov/petsc/petsc-current/src/ksp/pc/impls/fieldsplit/fieldsplit.c.html#line656
>  
> <https://www.mcs.anl.gov/petsc/petsc-current/src/ksp/pc/impls/fieldsplit/fieldsplit.c.html#line656>
> Then, whatever I do with the matrix from the last field, currently trying 
> MatCopy(myAssembledS, generatedS), before the first KSPSolve is reset by 
> https://www.mcs.anl.gov/petsc/petsc-current/src/ksp/pc/impls/fieldsplit/fieldsplit.c.html#line688
>  
> <https://www.mcs.anl.gov/petsc/petsc-current/src/ksp/pc/impls/fieldsplit/fieldsplit.c.html#line688>
>  and my solver fails…
> 
> So pretty simple question, how do I set a “pmat” for my last assembled field 
> so that 
> https://www.mcs.anl.gov/petsc/petsc-current/src/ksp/pc/impls/fieldsplit/fieldsplit.c.html#line646
>  
> <https://www.mcs.anl.gov/petsc/petsc-current/src/ksp/pc/impls/fieldsplit/fieldsplit.c.html#line646>
>  and 
> https://www.mcs.anl.gov/petsc/petsc-current/src/ksp/pc/impls/fieldsplit/fieldsplit.c.html#line686
>  
> <https://www.mcs.anl.gov/petsc/petsc-current/src/ksp/pc/impls/fieldsplit/fieldsplit.c.html#line686>
>  will return a non null pmat.
> 
> This may sound really trivial but I’m lost in limbo right now. When 
> everything is not wrapped inside an outer PCFIELDSPLIT, everything just work.
> 
> Thanks,
> Pierre
> 
>> On 25 Mar 2019, at 6:57 PM, Pierre Jolivet via petsc-dev 
>> <petsc-dev@mcs.anl.gov <mailto:petsc-dev@mcs.anl.gov>> wrote:
>> 
>> Thanks, this makes (slightly) more sense to me know.
>> For some reason my application is still not acting properly but I must be 
>> screwing somewhere else the nested FieldSplit…
>> 
>> Thank you,
>> Pierre
>> 
>>> On 24 Mar 2019, at 11:42 PM, Dave May via petsc-dev <petsc-dev@mcs.anl.gov 
>>> <mailto:petsc-dev@mcs.anl.gov>> wrote:
>>> 
>>> Matt is right.
>>> 
>>> When you defined the operator S, you basically invalidate the operator N 
>>> (in the sense that they are no longer consistent). Hence when you use KSP 
>>> nest to solve your problem your A matrix looks like 
>>>   A = diag[1, 2, 4, 0, 8]
>>> but the B matrix you have defined looks like
>>>   B = diag[1, 2, 4, 0.00001]
>>> 
>>> The only way to obtain the correct answer with your code is thus to use the 
>>> option
>>> -ksp_type preonly
>>> 
>>> Thanks
>>> Dave
>>> 
>>> 
>>> 
>>> On Sun, 24 Mar 2019 at 22:09, Mark Adams via petsc-dev 
>>> <petsc-dev@mcs.anl.gov <mailto:petsc-dev@mcs.anl.gov>> wrote:
>>> I think he is saying that this line seems to have no effect (and the 
>>> comment is hence wrong):
>>> 
>>> KSPSetOperators(subksp[nsplits - 1], S, S);
>>> // J2 = [[4, 0] ; [0, 0.00001]]
>>> 
>>> J2 is a 2x2 but this block has been changed into two single equation 
>>> fields. Does this KSPSetOperators supposed to copy this 1x1 S matrix into 
>>> the (1,1) block of the "J2", or do some sort of correct mixing internally, 
>>> to get what he wants?
>>> 
>>> BTW, this line does not seem necessary to me so maybe I'm missing something.
>>> 
>>> KSPSetOperators(sub, J2, J2);
>>> 
>>> 
>>> On Sun, Mar 24, 2019 at 4:33 PM Matthew Knepley via petsc-dev 
>>> <petsc-dev@mcs.anl.gov <mailto:petsc-dev@mcs.anl.gov>> wrote:
>>> On Sun, Mar 24, 2019 at 10:21 AM Pierre Jolivet <pierre.joli...@enseeiht.fr 
>>> <mailto:pierre.joli...@enseeiht.fr>> wrote:
>>> It’s a 4x4 matrix.
>>> The first 2x2 diagonal matrix is a field.
>>> The second 2x2 diagonal matrix is another field.
>>> In the second field, the first diagonal coefficient is a subfield.
>>> In the second field, the second diagonal coefficient is another subfield.
>>> I’m changing the operators from the second subfield (last diagonal 
>>> coefficient of the matrix).
>>> When I solve a system with the complete matrix (2 fields), I get a 
>>> different “partial solution" than when I solve the “partial system” on just 
>>> the second field (with the two subfields in which I modified the operators 
>>> from the second one).
>>> 
>>> I may understand waht you are doing.
>>> Fieldsplit calls MatGetSubMatrix() which can copy values, depending on the 
>>> implementation,
>>> so changing values in the original matrix may or may not change it in the 
>>> PC.
>>>  
>>>    Matt
>>> 
>>> I don’t know if this makes more or less sense… sorry :\
>>> Thanks,
>>> Pierre
>>> 
>>>> On 24 Mar 2019, at 8:42 PM, Matthew Knepley <knep...@gmail.com 
>>>> <mailto:knep...@gmail.com>> wrote:
>>>> 
>>>> On Sat, Mar 23, 2019 at 9:12 PM Pierre Jolivet via petsc-dev 
>>>> <petsc-dev@mcs.anl.gov <mailto:petsc-dev@mcs.anl.gov>> wrote:
>>>> I’m trying to figure out why both solutions are not consistent in the 
>>>> following example.
>>>> Is what I’m doing complete nonsense?
>>>> 
>>>> The code does not make clear what you are asking. I can see its a nested 
>>>> fieldsplit.
>>>> 
>>>>   Thanks,
>>>> 
>>>>      Matt
>>>>  
>>>> Thanks in advance for your help,
>>>> Pierre
>>>> 
>>>> 
>>>> 
>>>> -- 
>>>> What most experimenters take for granted before they begin their 
>>>> experiments is infinitely more interesting than any results to which their 
>>>> experiments lead.
>>>> -- Norbert Wiener
>>>> 
>>>> https://www.cse.buffalo.edu/~knepley/ 
>>>> <http://www.cse.buffalo.edu/~knepley/>
>>> 
>>> 
>>> 
>>> -- 
>>> What most experimenters take for granted before they begin their 
>>> experiments is infinitely more interesting than any results to which their 
>>> experiments lead.
>>> -- Norbert Wiener
>>> 
>>> https://www.cse.buffalo.edu/~knepley/ <http://www.cse.buffalo.edu/~knepley/>
>> 
> 

Reply via email to