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

Reply via email to