Hi,

During the process to experiment the suggestion Matt made, we ran into some 
questions regarding to TSSolve vs KSPSolve. We got different initial 
unpreconditioned residual using two solvers. Let’s say we solve the problem 
with backward Euler and there is no rhs. We guess TSSolve solves
(U^{n+1}-U^n)/dt = A U^{n+1}.
(We only provides IJacobian in this case and turn on TS_LINEAR.)
So we guess the initial unpreconditioned residual would be ||U^n/dt||_2, which 
seems different from the residual we got from a backward Euler stepping we 
implemented by ourself through KSPSolve.

Do we have some misunderstanding on TSSolve?

Thanks,
Qi
T5@LANL



On Jul 7, 2021, at 3:54 PM, Matthew Knepley 
<[email protected]<mailto:[email protected]>> wrote:

On Wed, Jul 7, 2021 at 2:33 PM Jorti, Zakariae 
<[email protected]<mailto:[email protected]>> wrote:

Hi Matt,


Thanks for your quick reply.

I have not completely understood your suggestion, could you please elaborate a 
bit more?

For your convenience, here is how I am proceeding for the moment in my code:


TSGetKSP(ts,&ksp);

KSPGetPC(ksp,&pc);

PCSetType(pc,PCFIELDSPLIT);

PCFieldSplitSetDetectSaddlePoint(pc,PETSC_TRUE);

PCSetUp(pc);

PCFieldSplitGetSubKSP(pc, &n, &subksp);

KSPGetPC(subksp[1], &(subpc[1]));

I do not like the two lines above. We should not have to do this.

KSPSetOperators(subksp[1],T,T);

 In the above line, I want you to use a separate preconditioning matrix M, 
instead of T. That way, it will provide
the preconditioning matrix for your Schur complement problem.

  Thanks,

      Matt

KSPSetUp(subksp[1]);

PetscFree(subksp);

TSSolve(ts,X);


Thank you.

Best,


Zakariae

________________________________
From: Matthew Knepley <[email protected]<mailto:[email protected]>>
Sent: Wednesday, July 7, 2021 12:11:10 PM
To: Jorti, Zakariae
Cc: [email protected]<mailto:[email protected]>; Tang, Qi; Tang, 
Xianzhu
Subject: [EXTERNAL] Re: [petsc-users] Problem with PCFIELDSPLIT

On Wed, Jul 7, 2021 at 1:51 PM Jorti, Zakariae via petsc-users 
<[email protected]<mailto:[email protected]>> wrote:

Hi,


I am trying to build a PCFIELDSPLIT preconditioner for a matrix

J =  [A00  A01]

       [A10  A11]

that has the following shape:


M_{user}^{-1} = [I   -ksp(A00) A01] [ksp(A00)           0] [I                   
     0]

                          [0                        I]  [0               
ksp(T)] [-A10 ksp(A00)  I ]


where T is a user-defined Schur complement approximation that replaces the true 
Schur complement S:= A11 - A10 ksp(A00) A01.


I am trying to do something similar to this example (lines 41--45 and 
116--121): 
https://www.mcs.anl.gov/petsc/petsc-current/src/snes/tutorials/ex70.c.html<https://urldefense.com/v3/__https://www.mcs.anl.gov/petsc/petsc-current/src/snes/tutorials/ex70.c.html__;!!HXCxUKc!hoEfgnaraTfQoSgAiplsc6GJ_HuPXN88m5AJVy1gb7WVMNkGENDnJ3zToOGlhw$>


The problem I have is that I manage to replace S with T on a separate single 
linear system but not for the linear systems generated by my time-dependent 
PDE. Even if I set the preconditioner M_{user}^{-1} correctly, the T matrix 
gets replaced by S in the preconditioner once I call TSSolve.

Do you have any suggestions how to fix this knowing that the matrix J does not 
change over time?

I don't like how it is done in that example for this very reason.

When I want to use a custom preconditioning matrix for the Schur complement, I 
always give a preconditioning matrix M to the outer solve.
Then PCFIELDSPLIT automatically pulls the correct block from M, (1,1) for the 
Schur complement, for that preconditioning matrix without
extra code. Can you do this?

  Thanks,

    Matt

Many thanks.


Best regards,


Zakariae



--
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/<https://urldefense.com/v3/__http://www.cse.buffalo.edu/*knepley/__;fg!!HXCxUKc!hoEfgnaraTfQoSgAiplsc6GJ_HuPXN88m5AJVy1gb7WVMNkGENDnJ3wB3dcMFw$>


--
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/<https://urldefense.com/v3/__http://www.cse.buffalo.edu/*knepley/__;fg!!HXCxUKc!hoEfgnaraTfQoSgAiplsc6GJ_HuPXN88m5AJVy1gb7WVMNkGENDnJ3wB3dcMFw$>

Reply via email to