16dd63270SBarry Smith #include <petsc/private/ftnimpl.h>
2c6db04a5SJed Brown #include <petscpc.h>
3a425a105SElliott Sales de Andrade #include <petscksp.h>
4e54e4138SSatish Balay
5e54e4138SSatish Balay #if defined(PETSC_HAVE_FORTRAN_CAPS)
6e54e4138SSatish Balay #define pcshellsetapply_ PCSHELLSETAPPLY
71b581b66SBarry Smith #define pcshellsetapplysymmetricleft_ PCSHELLSETAPPLYSYMMETRICLEFT
81b581b66SBarry Smith #define pcshellsetapplysymmetricright_ PCSHELLSETAPPLYSYMMETRICRIGHT
9ccf40c83SElliott Sales de Andrade #define pcshellsetapplyba_ PCSHELLSETAPPLYBA
10e54e4138SSatish Balay #define pcshellsetapplyrichardson_ PCSHELLSETAPPLYRICHARDSON
11e54e4138SSatish Balay #define pcshellsetapplytranspose_ PCSHELLSETAPPLYTRANSPOSE
12e54e4138SSatish Balay #define pcshellsetsetup_ PCSHELLSETSETUP
137c54600cSBarry Smith #define pcshellsetdestroy_ PCSHELLSETDESTROY
14a425a105SElliott Sales de Andrade #define pcshellsetpresolve_ PCSHELLSETPRESOLVE
15a425a105SElliott Sales de Andrade #define pcshellsetpostsolve_ PCSHELLSETPOSTSOLVE
162f519dc9SElliott Sales de Andrade #define pcshellsetview_ PCSHELLSETVIEW
17e54e4138SSatish Balay #elif !defined(PETSC_HAVE_FORTRAN_UNDERSCORE)
18e54e4138SSatish Balay #define pcshellsetapply_ pcshellsetapply
198a6b6cadSSatish Balay #define pcshellsetapplysymmetricleft_ pcshellsetapplysymmetricleft
208a6b6cadSSatish Balay #define pcshellsetapplysymmetricright_ pcshellsetapplysymmetricright
21ccf40c83SElliott Sales de Andrade #define pcshellsetapplyba_ pcshellsetapplyba
22e54e4138SSatish Balay #define pcshellsetapplyrichardson_ pcshellsetapplyrichardson
23e54e4138SSatish Balay #define pcshellsetapplytranspose_ pcshellsetapplytranspose
24e54e4138SSatish Balay #define pcshellsetsetup_ pcshellsetsetup
257c54600cSBarry Smith #define pcshellsetdestroy_ pcshellsetdestroy
26a425a105SElliott Sales de Andrade #define pcshellsetpresolve_ pcshellsetpresolve
27a425a105SElliott Sales de Andrade #define pcshellsetpostsolve_ pcshellsetpostsolve
282f519dc9SElliott Sales de Andrade #define pcshellsetview_ pcshellsetview
29e54e4138SSatish Balay #endif
30e54e4138SSatish Balay
31e54e4138SSatish Balay /* These are not extern C because they are passed into non-extern C user level functions */
ourshellapply(PC pc,Vec x,Vec y)326891c3e4SJed Brown static PetscErrorCode ourshellapply(PC pc, Vec x, Vec y)
33e54e4138SSatish Balay {
349566063dSJacob Faibussowitsch PetscCallFortranVoidFunction((*(void (*)(PC *, Vec *, Vec *, PetscErrorCode *))(((PetscObject)pc)->fortran_func_pointers[0]))(&pc, &x, &y, &ierr));
353ba16761SJacob Faibussowitsch return PETSC_SUCCESS;
36e54e4138SSatish Balay }
37e54e4138SSatish Balay
ourshellapplysymmetricleft(PC pc,Vec x,Vec y)381b581b66SBarry Smith static PetscErrorCode ourshellapplysymmetricleft(PC pc, Vec x, Vec y)
391b581b66SBarry Smith {
409566063dSJacob Faibussowitsch PetscCallFortranVoidFunction((*(void (*)(PC *, Vec *, Vec *, PetscErrorCode *))(((PetscObject)pc)->fortran_func_pointers[9]))(&pc, &x, &y, &ierr));
413ba16761SJacob Faibussowitsch return PETSC_SUCCESS;
421b581b66SBarry Smith }
431b581b66SBarry Smith
ourshellapplysymmetricright(PC pc,Vec x,Vec y)441b581b66SBarry Smith static PetscErrorCode ourshellapplysymmetricright(PC pc, Vec x, Vec y)
451b581b66SBarry Smith {
469566063dSJacob Faibussowitsch PetscCallFortranVoidFunction((*(void (*)(PC *, Vec *, Vec *, PetscErrorCode *))(((PetscObject)pc)->fortran_func_pointers[10]))(&pc, &x, &y, &ierr));
473ba16761SJacob Faibussowitsch return PETSC_SUCCESS;
481b581b66SBarry Smith }
491b581b66SBarry Smith
ourshellapplyctx(PC pc,Vec x,Vec y)50fe81eab7SBarry Smith static PetscErrorCode ourshellapplyctx(PC pc, Vec x, Vec y)
51fe81eab7SBarry Smith {
52*2a8381b2SBarry Smith PetscCtx ctx;
539566063dSJacob Faibussowitsch PetscCall(PCShellGetContext(pc, &ctx));
549566063dSJacob Faibussowitsch PetscCallFortranVoidFunction((*(void (*)(PC *, void *, Vec *, Vec *, PetscErrorCode *))(((PetscObject)pc)->fortran_func_pointers[0]))(&pc, ctx, &x, &y, &ierr));
553ba16761SJacob Faibussowitsch return PETSC_SUCCESS;
56fe81eab7SBarry Smith }
57fe81eab7SBarry Smith
ourshellapplyba(PC pc,PCSide side,Vec x,Vec y,Vec work)58ccf40c83SElliott Sales de Andrade static PetscErrorCode ourshellapplyba(PC pc, PCSide side, Vec x, Vec y, Vec work)
59ccf40c83SElliott Sales de Andrade {
609566063dSJacob Faibussowitsch PetscCallFortranVoidFunction((*(void (*)(PC *, PCSide *, Vec *, Vec *, Vec *, PetscErrorCode *))(((PetscObject)pc)->fortran_func_pointers[1]))(&pc, &side, &x, &y, &work, &ierr));
613ba16761SJacob Faibussowitsch return PETSC_SUCCESS;
62ccf40c83SElliott Sales de Andrade }
63ccf40c83SElliott Sales de Andrade
ourapplyrichardson(PC pc,Vec x,Vec y,Vec w,PetscReal rtol,PetscReal abstol,PetscReal dtol,PetscInt m,PetscBool guesszero,PetscInt * outits,PCRichardsonConvergedReason * reason)64ace3abfcSBarry Smith static PetscErrorCode ourapplyrichardson(PC pc, Vec x, Vec y, Vec w, PetscReal rtol, PetscReal abstol, PetscReal dtol, PetscInt m, PetscBool guesszero, PetscInt *outits, PCRichardsonConvergedReason *reason)
65e54e4138SSatish Balay {
669566063dSJacob Faibussowitsch PetscCallFortranVoidFunction((*(void (*)(PC *, Vec *, Vec *, Vec *, PetscReal *, PetscReal *, PetscReal *, PetscInt *, PetscBool *, PetscInt *, PCRichardsonConvergedReason *, PetscErrorCode *))(((PetscObject)pc)->fortran_func_pointers[2]))(&pc, &x, &y, &w, &rtol, &abstol, &dtol, &m, &guesszero, outits, reason, &ierr));
673ba16761SJacob Faibussowitsch return PETSC_SUCCESS;
68e54e4138SSatish Balay }
69e54e4138SSatish Balay
ourshellapplytranspose(PC pc,Vec x,Vec y)706891c3e4SJed Brown static PetscErrorCode ourshellapplytranspose(PC pc, Vec x, Vec y)
71e54e4138SSatish Balay {
729566063dSJacob Faibussowitsch PetscCallFortranVoidFunction((*(void (*)(void *, Vec *, Vec *, PetscErrorCode *))(((PetscObject)pc)->fortran_func_pointers[3]))(&pc, &x, &y, &ierr));
733ba16761SJacob Faibussowitsch return PETSC_SUCCESS;
74e54e4138SSatish Balay }
75e54e4138SSatish Balay
ourshellsetup(PC pc)766891c3e4SJed Brown static PetscErrorCode ourshellsetup(PC pc)
77e54e4138SSatish Balay {
789566063dSJacob Faibussowitsch PetscCallFortranVoidFunction((*(void (*)(PC *, PetscErrorCode *))(((PetscObject)pc)->fortran_func_pointers[4]))(&pc, &ierr));
793ba16761SJacob Faibussowitsch return PETSC_SUCCESS;
80e54e4138SSatish Balay }
81e54e4138SSatish Balay
ourshellsetupctx(PC pc)82fe81eab7SBarry Smith static PetscErrorCode ourshellsetupctx(PC pc)
83fe81eab7SBarry Smith {
84*2a8381b2SBarry Smith PetscCtx ctx;
859566063dSJacob Faibussowitsch PetscCall(PCShellGetContext(pc, &ctx));
869566063dSJacob Faibussowitsch PetscCallFortranVoidFunction((*(void (*)(PC *, void *, PetscErrorCode *))(((PetscObject)pc)->fortran_func_pointers[4]))(&pc, ctx, &ierr));
873ba16761SJacob Faibussowitsch return PETSC_SUCCESS;
88fe81eab7SBarry Smith }
89fe81eab7SBarry Smith
ourshelldestroy(PC pc)906891c3e4SJed Brown static PetscErrorCode ourshelldestroy(PC pc)
917c54600cSBarry Smith {
929566063dSJacob Faibussowitsch PetscCallFortranVoidFunction((*(void (*)(void *, PetscErrorCode *))(((PetscObject)pc)->fortran_func_pointers[5]))(&pc, &ierr));
933ba16761SJacob Faibussowitsch return PETSC_SUCCESS;
947c54600cSBarry Smith }
957c54600cSBarry Smith
ourshellpresolve(PC pc,KSP ksp,Vec x,Vec y)96a425a105SElliott Sales de Andrade static PetscErrorCode ourshellpresolve(PC pc, KSP ksp, Vec x, Vec y)
97a425a105SElliott Sales de Andrade {
989566063dSJacob Faibussowitsch PetscCallFortranVoidFunction((*(void (*)(PC *, KSP *, Vec *, Vec *, PetscErrorCode *))(((PetscObject)pc)->fortran_func_pointers[6]))(&pc, &ksp, &x, &y, &ierr));
993ba16761SJacob Faibussowitsch return PETSC_SUCCESS;
100a425a105SElliott Sales de Andrade }
101a425a105SElliott Sales de Andrade
ourshellpostsolve(PC pc,KSP ksp,Vec x,Vec y)102a425a105SElliott Sales de Andrade static PetscErrorCode ourshellpostsolve(PC pc, KSP ksp, Vec x, Vec y)
103a425a105SElliott Sales de Andrade {
1049566063dSJacob Faibussowitsch PetscCallFortranVoidFunction((*(void (*)(PC *, KSP *, Vec *, Vec *, PetscErrorCode *))(((PetscObject)pc)->fortran_func_pointers[7]))(&pc, &ksp, &x, &y, &ierr));
1053ba16761SJacob Faibussowitsch return PETSC_SUCCESS;
106a425a105SElliott Sales de Andrade }
107a425a105SElliott Sales de Andrade
ourshellview(PC pc,PetscViewer view)1082f519dc9SElliott Sales de Andrade static PetscErrorCode ourshellview(PC pc, PetscViewer view)
1092f519dc9SElliott Sales de Andrade {
1109566063dSJacob Faibussowitsch PetscCallFortranVoidFunction((*(void (*)(PC *, PetscViewer *, PetscErrorCode *))(((PetscObject)pc)->fortran_func_pointers[8]))(&pc, &view, &ierr));
1113ba16761SJacob Faibussowitsch return PETSC_SUCCESS;
112e54e4138SSatish Balay }
113e54e4138SSatish Balay
pcshellsetapply_(PC * pc,void (* apply)(void *,Vec *,Vec *,PetscErrorCode *),PetscErrorCode * ierr)11419caf8f3SSatish Balay PETSC_EXTERN void pcshellsetapply_(PC *pc, void (*apply)(void *, Vec *, Vec *, PetscErrorCode *), PetscErrorCode *ierr)
115e54e4138SSatish Balay {
1161b581b66SBarry Smith PetscObjectAllocateFortranPointers(*pc, 11);
1175ebfa9e9SBarry Smith ((PetscObject)*pc)->fortran_func_pointers[0] = (PetscFortranCallbackFn *)apply;
1182fa5cd67SKarl Rupp
1196891c3e4SJed Brown *ierr = PCShellSetApply(*pc, ourshellapply);
1206895c445SBarry Smith }
1216895c445SBarry Smith
pcshellsetapplysymmetricleft_(PC * pc,void (* apply)(void *,Vec *,Vec *,PetscErrorCode *),PetscErrorCode * ierr)12219caf8f3SSatish Balay PETSC_EXTERN void pcshellsetapplysymmetricleft_(PC *pc, void (*apply)(void *, Vec *, Vec *, PetscErrorCode *), PetscErrorCode *ierr)
1231b581b66SBarry Smith {
1241b581b66SBarry Smith PetscObjectAllocateFortranPointers(*pc, 11);
1255ebfa9e9SBarry Smith ((PetscObject)*pc)->fortran_func_pointers[9] = (PetscFortranCallbackFn *)apply;
1261b581b66SBarry Smith
1271b581b66SBarry Smith *ierr = PCShellSetApplySymmetricLeft(*pc, ourshellapplysymmetricleft);
1281b581b66SBarry Smith }
1291b581b66SBarry Smith
pcshellsetapplysymmetricright_(PC * pc,void (* apply)(void *,Vec *,Vec *,PetscErrorCode *),PetscErrorCode * ierr)13019caf8f3SSatish Balay PETSC_EXTERN void pcshellsetapplysymmetricright_(PC *pc, void (*apply)(void *, Vec *, Vec *, PetscErrorCode *), PetscErrorCode *ierr)
1311b581b66SBarry Smith {
1321b581b66SBarry Smith PetscObjectAllocateFortranPointers(*pc, 11);
1335ebfa9e9SBarry Smith ((PetscObject)*pc)->fortran_func_pointers[10] = (PetscFortranCallbackFn *)apply;
1341b581b66SBarry Smith
1351b581b66SBarry Smith *ierr = PCShellSetApplySymmetricRight(*pc, ourshellapplysymmetricright);
1361b581b66SBarry Smith }
1371b581b66SBarry Smith
pcshellsetapplyctx_(PC * pc,void (* apply)(void *,void *,Vec *,Vec *,PetscErrorCode *),PetscErrorCode * ierr)13819caf8f3SSatish Balay PETSC_EXTERN void pcshellsetapplyctx_(PC *pc, void (*apply)(void *, void *, Vec *, Vec *, PetscErrorCode *), PetscErrorCode *ierr)
139fe81eab7SBarry Smith {
1401b581b66SBarry Smith PetscObjectAllocateFortranPointers(*pc, 11);
1415ebfa9e9SBarry Smith ((PetscObject)*pc)->fortran_func_pointers[0] = (PetscFortranCallbackFn *)apply;
142fe81eab7SBarry Smith
143fe81eab7SBarry Smith *ierr = PCShellSetApply(*pc, ourshellapplyctx);
144fe81eab7SBarry Smith }
145fe81eab7SBarry Smith
pcshellsetapplyba_(PC * pc,void (* apply)(void *,PCSide *,Vec *,Vec *,Vec *,PetscErrorCode *),PetscErrorCode * ierr)14619caf8f3SSatish Balay PETSC_EXTERN void pcshellsetapplyba_(PC *pc, void (*apply)(void *, PCSide *, Vec *, Vec *, Vec *, PetscErrorCode *), PetscErrorCode *ierr)
147ccf40c83SElliott Sales de Andrade {
1481b581b66SBarry Smith PetscObjectAllocateFortranPointers(*pc, 11);
1495ebfa9e9SBarry Smith ((PetscObject)*pc)->fortran_func_pointers[1] = (PetscFortranCallbackFn *)apply;
150ccf40c83SElliott Sales de Andrade
151ccf40c83SElliott Sales de Andrade *ierr = PCShellSetApplyBA(*pc, ourshellapplyba);
152ccf40c83SElliott Sales de Andrade }
153ccf40c83SElliott Sales de Andrade
pcshellsetapplyrichardson_(PC * pc,void (* apply)(void *,Vec *,Vec *,Vec *,PetscReal *,PetscReal *,PetscReal *,PetscInt *,PetscBool *,PetscInt *,PCRichardsonConvergedReason *,PetscErrorCode *),PetscErrorCode * ierr)15419caf8f3SSatish Balay PETSC_EXTERN void pcshellsetapplyrichardson_(PC *pc, void (*apply)(void *, Vec *, Vec *, Vec *, PetscReal *, PetscReal *, PetscReal *, PetscInt *, PetscBool *, PetscInt *, PCRichardsonConvergedReason *, PetscErrorCode *), PetscErrorCode *ierr)
1556895c445SBarry Smith {
1561b581b66SBarry Smith PetscObjectAllocateFortranPointers(*pc, 11);
1575ebfa9e9SBarry Smith ((PetscObject)*pc)->fortran_func_pointers[2] = (PetscFortranCallbackFn *)apply;
1586891c3e4SJed Brown *ierr = PCShellSetApplyRichardson(*pc, ourapplyrichardson);
1596895c445SBarry Smith }
1606895c445SBarry Smith
pcshellsetapplytranspose_(PC * pc,void (* applytranspose)(void *,Vec *,Vec *,PetscErrorCode *),PetscErrorCode * ierr)16119caf8f3SSatish Balay PETSC_EXTERN void pcshellsetapplytranspose_(PC *pc, void (*applytranspose)(void *, Vec *, Vec *, PetscErrorCode *), PetscErrorCode *ierr)
1626895c445SBarry Smith {
1631b581b66SBarry Smith PetscObjectAllocateFortranPointers(*pc, 11);
1645ebfa9e9SBarry Smith ((PetscObject)*pc)->fortran_func_pointers[3] = (PetscFortranCallbackFn *)applytranspose;
1652fa5cd67SKarl Rupp
1666891c3e4SJed Brown *ierr = PCShellSetApplyTranspose(*pc, ourshellapplytranspose);
167e54e4138SSatish Balay }
168e54e4138SSatish Balay
pcshellsetsetupctx_(PC * pc,void (* setup)(void *,void *,PetscErrorCode *),PetscErrorCode * ierr)16919caf8f3SSatish Balay PETSC_EXTERN void pcshellsetsetupctx_(PC *pc, void (*setup)(void *, void *, PetscErrorCode *), PetscErrorCode *ierr)
170fe81eab7SBarry Smith {
1711b581b66SBarry Smith PetscObjectAllocateFortranPointers(*pc, 11);
1725ebfa9e9SBarry Smith ((PetscObject)*pc)->fortran_func_pointers[4] = (PetscFortranCallbackFn *)setup;
173fe81eab7SBarry Smith
174fe81eab7SBarry Smith *ierr = PCShellSetSetUp(*pc, ourshellsetupctx);
175fe81eab7SBarry Smith }
176fe81eab7SBarry Smith
pcshellsetsetup_(PC * pc,void (* setup)(void *,PetscErrorCode *),PetscErrorCode * ierr)17719caf8f3SSatish Balay PETSC_EXTERN void pcshellsetsetup_(PC *pc, void (*setup)(void *, PetscErrorCode *), PetscErrorCode *ierr)
178e54e4138SSatish Balay {
1791b581b66SBarry Smith PetscObjectAllocateFortranPointers(*pc, 11);
1805ebfa9e9SBarry Smith ((PetscObject)*pc)->fortran_func_pointers[4] = (PetscFortranCallbackFn *)setup;
1812fa5cd67SKarl Rupp
1826891c3e4SJed Brown *ierr = PCShellSetSetUp(*pc, ourshellsetup);
183e54e4138SSatish Balay }
184e54e4138SSatish Balay
pcshellsetdestroy_(PC * pc,void (* setup)(void *,PetscErrorCode *),PetscErrorCode * ierr)18519caf8f3SSatish Balay PETSC_EXTERN void pcshellsetdestroy_(PC *pc, void (*setup)(void *, PetscErrorCode *), PetscErrorCode *ierr)
1867c54600cSBarry Smith {
1871b581b66SBarry Smith PetscObjectAllocateFortranPointers(*pc, 11);
1885ebfa9e9SBarry Smith ((PetscObject)*pc)->fortran_func_pointers[5] = (PetscFortranCallbackFn *)setup;
1892fa5cd67SKarl Rupp
1906891c3e4SJed Brown *ierr = PCShellSetDestroy(*pc, ourshelldestroy);
1917c54600cSBarry Smith }
1927c54600cSBarry Smith
pcshellsetpresolve_(PC * pc,void (* presolve)(void *,void *,Vec *,Vec *,PetscErrorCode *),PetscErrorCode * ierr)19319caf8f3SSatish Balay PETSC_EXTERN void pcshellsetpresolve_(PC *pc, void (*presolve)(void *, void *, Vec *, Vec *, PetscErrorCode *), PetscErrorCode *ierr)
194a425a105SElliott Sales de Andrade {
1951b581b66SBarry Smith PetscObjectAllocateFortranPointers(*pc, 11);
1965ebfa9e9SBarry Smith ((PetscObject)*pc)->fortran_func_pointers[6] = (PetscFortranCallbackFn *)presolve;
197a425a105SElliott Sales de Andrade
198a425a105SElliott Sales de Andrade *ierr = PCShellSetPreSolve(*pc, ourshellpresolve);
199a425a105SElliott Sales de Andrade }
200a425a105SElliott Sales de Andrade
pcshellsetpostsolve_(PC * pc,void (* postsolve)(void *,void *,Vec *,Vec *,PetscErrorCode *),PetscErrorCode * ierr)20119caf8f3SSatish Balay PETSC_EXTERN void pcshellsetpostsolve_(PC *pc, void (*postsolve)(void *, void *, Vec *, Vec *, PetscErrorCode *), PetscErrorCode *ierr)
202a425a105SElliott Sales de Andrade {
2031b581b66SBarry Smith PetscObjectAllocateFortranPointers(*pc, 11);
2045ebfa9e9SBarry Smith ((PetscObject)*pc)->fortran_func_pointers[7] = (PetscFortranCallbackFn *)postsolve;
205a425a105SElliott Sales de Andrade
206a425a105SElliott Sales de Andrade *ierr = PCShellSetPostSolve(*pc, ourshellpostsolve);
207a425a105SElliott Sales de Andrade }
208a425a105SElliott Sales de Andrade
pcshellsetview_(PC * pc,void (* view)(void *,PetscViewer *,PetscErrorCode *),PetscErrorCode * ierr)20919caf8f3SSatish Balay PETSC_EXTERN void pcshellsetview_(PC *pc, void (*view)(void *, PetscViewer *, PetscErrorCode *), PetscErrorCode *ierr)
2102f519dc9SElliott Sales de Andrade {
2111b581b66SBarry Smith PetscObjectAllocateFortranPointers(*pc, 11);
2125ebfa9e9SBarry Smith ((PetscObject)*pc)->fortran_func_pointers[8] = (PetscFortranCallbackFn *)view;
2132f519dc9SElliott Sales de Andrade
2142f519dc9SElliott Sales de Andrade *ierr = PCShellSetView(*pc, ourshellview);
2152f519dc9SElliott Sales de Andrade }
216