[petsc-users] Shell preconditioner within a fieldsplit
Safin, Artur
aks084000 at utdallas.edu
Mon Nov 14 13:38:05 CST 2016
Barry, Dave,
Turns out both your suggestions were necessary to get the preconditioner working properly.
Thank you for the help!
Artur
________________________________
From: Dave May <dave.mayhem23 at gmail.com>
Sent: Monday, November 14, 2016 1:20 AM
To: Safin, Artur; petsc-users at mcs.anl.gov
Subject: Re: [petsc-users] Shell preconditioner within a fieldsplit
Damn - the last part of my email is wrong. You want to set the PCType to "mat". KSPType preonly is fine
On Mon, 14 Nov 2016 at 07:04, Dave May <dave.mayhem23 at gmail.com<mailto:dave.mayhem23 at gmail.com>> wrote:
Looks like you want the contents of your mat shell, specifically the op Ax, to define the action of the preconditioner.
You need to either create a PCShell (rather than a MatShell), and define the operation called by PCApply(), or keep you current shell but change "preonly" to "mat".
http://www.mcs.anl.gov/petsc/petsc-current/docs/manualpages/PC/PCMAT.html#PCMAT
Thanks
Dave
On Mon, 14 Nov 2016 at 06:36, Safin, Artur <aks084000 at utdallas.edu<mailto:aks084000 at utdallas.edu>> wrote:
Hello,
What is the proper way to set up a shell preconditioner within a fielsplit? I have tried it on my own, but do not get the proper behavior. The relevant portion looks like this:
__________________________________________________________________
// Global System
KSPSetOperators(ksp, A, A);
// Skipped code..
// Shell Preconditioner for the pressure sub-block
KSP *subksp;
PCFieldSplitGetSubKSP(pc, NULL, &subksp);
Mat pressureA;
KSPSetType(subksp[0], "preonly");
MatCreateShell(MPI_COMM_WORLD, n_local_P_dofs, n_local_P_dofs, , PETSC_DETERMINE, PETSC_DETERMINE, &pressureA);
MatShellSetOperation(pressureA, MATOP_MULT, (void(*)(void)) PressureBlock);
KSPSetOperators(subksp[0], pressureA, pressureA);
// Skipped code..
KSPSetUp(ksp);
KSPSolve(ksp, b, x);
__________________________________________________________________
The fieldsplit component works fine; the solver however does not go into the custom function PressureBlock(), so I am curious as to what the correct approach is.
Best,
Artur
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.mcs.anl.gov/pipermail/petsc-users/attachments/20161114/539069c3/attachment.html>
More information about the petsc-users
mailing list