Actual source code: zshellpcf.c
1: #include <petsc/private/fortranimpl.h>
2: #include <petscpc.h>
3: #include <petscksp.h>
5: #if defined(PETSC_HAVE_FORTRAN_CAPS)
6: #define pcshellsetapply_ PCSHELLSETAPPLY
7: #define pcshellsetapplysymmetricleft_ PCSHELLSETAPPLYSYMMETRICLEFT
8: #define pcshellsetapplysymmetricright_ PCSHELLSETAPPLYSYMMETRICRIGHT
9: #define pcshellsetapplyba_ PCSHELLSETAPPLYBA
10: #define pcshellsetapplyrichardson_ PCSHELLSETAPPLYRICHARDSON
11: #define pcshellsetapplytranspose_ PCSHELLSETAPPLYTRANSPOSE
12: #define pcshellsetsetup_ PCSHELLSETSETUP
13: #define pcshellsetdestroy_ PCSHELLSETDESTROY
14: #define pcshellsetpresolve_ PCSHELLSETPRESOLVE
15: #define pcshellsetpostsolve_ PCSHELLSETPOSTSOLVE
16: #define pcshellsetview_ PCSHELLSETVIEW
17: #define pcshellsetcontext_ PCSHELLSETCONTEXT
18: #define pcshellgetcontext_ PCSHELLGETCONTEXT
19: #elif !defined(PETSC_HAVE_FORTRAN_UNDERSCORE)
20: #define pcshellsetapply_ pcshellsetapply
21: #define pcshellsetapplyba_ pcshellsetapplyba
22: #define pcshellsetapplyrichardson_ pcshellsetapplyrichardson
23: #define pcshellsetapplytranspose_ pcshellsetapplytranspose
24: #define pcshellsetsetup_ pcshellsetsetup
25: #define pcshellsetdestroy_ pcshellsetdestroy
26: #define pcshellsetpresolve_ pcshellsetpresolve
27: #define pcshellsetpostsolve_ pcshellsetpostsolve
28: #define pcshellsetview_ pcshellsetview
29: #define pcshellsetcontext_ pcshellsetcontext
30: #define pcshellgetcontext_ pcshellgetcontext
31: #endif
33: /* These are not extern C because they are passed into non-extern C user level functions */
34: static PetscErrorCode ourshellapply(PC pc, Vec x, Vec y)
35: {
36: PetscCallFortranVoidFunction((*(void (*)(PC *, Vec *, Vec *, PetscErrorCode *))(((PetscObject)pc)->fortran_func_pointers[0]))(&pc, &x, &y, &ierr));
37: return PETSC_SUCCESS;
38: }
40: static PetscErrorCode ourshellapplysymmetricleft(PC pc, Vec x, Vec y)
41: {
42: PetscCallFortranVoidFunction((*(void (*)(PC *, Vec *, Vec *, PetscErrorCode *))(((PetscObject)pc)->fortran_func_pointers[9]))(&pc, &x, &y, &ierr));
43: return PETSC_SUCCESS;
44: }
46: static PetscErrorCode ourshellapplysymmetricright(PC pc, Vec x, Vec y)
47: {
48: PetscCallFortranVoidFunction((*(void (*)(PC *, Vec *, Vec *, PetscErrorCode *))(((PetscObject)pc)->fortran_func_pointers[10]))(&pc, &x, &y, &ierr));
49: return PETSC_SUCCESS;
50: }
52: static PetscErrorCode ourshellapplyctx(PC pc, Vec x, Vec y)
53: {
54: void *ctx;
55: PetscCall(PCShellGetContext(pc, &ctx));
56: PetscCallFortranVoidFunction((*(void (*)(PC *, void *, Vec *, Vec *, PetscErrorCode *))(((PetscObject)pc)->fortran_func_pointers[0]))(&pc, ctx, &x, &y, &ierr));
57: return PETSC_SUCCESS;
58: }
60: static PetscErrorCode ourshellapplyba(PC pc, PCSide side, Vec x, Vec y, Vec work)
61: {
62: PetscCallFortranVoidFunction((*(void (*)(PC *, PCSide *, Vec *, Vec *, Vec *, PetscErrorCode *))(((PetscObject)pc)->fortran_func_pointers[1]))(&pc, &side, &x, &y, &work, &ierr));
63: return PETSC_SUCCESS;
64: }
66: 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)
67: {
68: 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));
69: return PETSC_SUCCESS;
70: }
72: static PetscErrorCode ourshellapplytranspose(PC pc, Vec x, Vec y)
73: {
74: PetscCallFortranVoidFunction((*(void (*)(void *, Vec *, Vec *, PetscErrorCode *))(((PetscObject)pc)->fortran_func_pointers[3]))(&pc, &x, &y, &ierr));
75: return PETSC_SUCCESS;
76: }
78: static PetscErrorCode ourshellsetup(PC pc)
79: {
80: PetscCallFortranVoidFunction((*(void (*)(PC *, PetscErrorCode *))(((PetscObject)pc)->fortran_func_pointers[4]))(&pc, &ierr));
81: return PETSC_SUCCESS;
82: }
84: static PetscErrorCode ourshellsetupctx(PC pc)
85: {
86: void *ctx;
87: PetscCall(PCShellGetContext(pc, &ctx));
88: PetscCallFortranVoidFunction((*(void (*)(PC *, void *, PetscErrorCode *))(((PetscObject)pc)->fortran_func_pointers[4]))(&pc, ctx, &ierr));
89: return PETSC_SUCCESS;
90: }
92: static PetscErrorCode ourshelldestroy(PC pc)
93: {
94: PetscCallFortranVoidFunction((*(void (*)(void *, PetscErrorCode *))(((PetscObject)pc)->fortran_func_pointers[5]))(&pc, &ierr));
95: return PETSC_SUCCESS;
96: }
98: static PetscErrorCode ourshellpresolve(PC pc, KSP ksp, Vec x, Vec y)
99: {
100: PetscCallFortranVoidFunction((*(void (*)(PC *, KSP *, Vec *, Vec *, PetscErrorCode *))(((PetscObject)pc)->fortran_func_pointers[6]))(&pc, &ksp, &x, &y, &ierr));
101: return PETSC_SUCCESS;
102: }
104: static PetscErrorCode ourshellpostsolve(PC pc, KSP ksp, Vec x, Vec y)
105: {
106: PetscCallFortranVoidFunction((*(void (*)(PC *, KSP *, Vec *, Vec *, PetscErrorCode *))(((PetscObject)pc)->fortran_func_pointers[7]))(&pc, &ksp, &x, &y, &ierr));
107: return PETSC_SUCCESS;
108: }
110: static PetscErrorCode ourshellview(PC pc, PetscViewer view)
111: {
112: PetscCallFortranVoidFunction((*(void (*)(PC *, PetscViewer *, PetscErrorCode *))(((PetscObject)pc)->fortran_func_pointers[8]))(&pc, &view, &ierr));
113: return PETSC_SUCCESS;
114: }
116: PETSC_EXTERN void pcshellgetcontext_(PC *pc, void **ctx, PetscErrorCode *ierr)
117: {
118: *ierr = PCShellGetContext(*pc, ctx);
119: }
121: PETSC_EXTERN void pcshellsetapply_(PC *pc, void (*apply)(void *, Vec *, Vec *, PetscErrorCode *), PetscErrorCode *ierr)
122: {
123: PetscObjectAllocateFortranPointers(*pc, 11);
124: ((PetscObject)*pc)->fortran_func_pointers[0] = (PetscVoidFn *)apply;
126: *ierr = PCShellSetApply(*pc, ourshellapply);
127: }
129: PETSC_EXTERN void pcshellsetapplysymmetricleft_(PC *pc, void (*apply)(void *, Vec *, Vec *, PetscErrorCode *), PetscErrorCode *ierr)
130: {
131: PetscObjectAllocateFortranPointers(*pc, 11);
132: ((PetscObject)*pc)->fortran_func_pointers[9] = (PetscVoidFn *)apply;
134: *ierr = PCShellSetApplySymmetricLeft(*pc, ourshellapplysymmetricleft);
135: }
137: PETSC_EXTERN void pcshellsetapplysymmetricright_(PC *pc, void (*apply)(void *, Vec *, Vec *, PetscErrorCode *), PetscErrorCode *ierr)
138: {
139: PetscObjectAllocateFortranPointers(*pc, 11);
140: ((PetscObject)*pc)->fortran_func_pointers[10] = (PetscVoidFn *)apply;
142: *ierr = PCShellSetApplySymmetricRight(*pc, ourshellapplysymmetricright);
143: }
145: PETSC_EXTERN void pcshellsetapplyctx_(PC *pc, void (*apply)(void *, void *, Vec *, Vec *, PetscErrorCode *), PetscErrorCode *ierr)
146: {
147: PetscObjectAllocateFortranPointers(*pc, 11);
148: ((PetscObject)*pc)->fortran_func_pointers[0] = (PetscVoidFn *)apply;
150: *ierr = PCShellSetApply(*pc, ourshellapplyctx);
151: }
153: PETSC_EXTERN void pcshellsetapplyba_(PC *pc, void (*apply)(void *, PCSide *, Vec *, Vec *, Vec *, PetscErrorCode *), PetscErrorCode *ierr)
154: {
155: PetscObjectAllocateFortranPointers(*pc, 11);
156: ((PetscObject)*pc)->fortran_func_pointers[1] = (PetscVoidFn *)apply;
158: *ierr = PCShellSetApplyBA(*pc, ourshellapplyba);
159: }
161: PETSC_EXTERN void pcshellsetapplyrichardson_(PC *pc, void (*apply)(void *, Vec *, Vec *, Vec *, PetscReal *, PetscReal *, PetscReal *, PetscInt *, PetscBool *, PetscInt *, PCRichardsonConvergedReason *, PetscErrorCode *), PetscErrorCode *ierr)
162: {
163: PetscObjectAllocateFortranPointers(*pc, 11);
164: ((PetscObject)*pc)->fortran_func_pointers[2] = (PetscVoidFn *)apply;
165: *ierr = PCShellSetApplyRichardson(*pc, ourapplyrichardson);
166: }
168: PETSC_EXTERN void pcshellsetapplytranspose_(PC *pc, void (*applytranspose)(void *, Vec *, Vec *, PetscErrorCode *), PetscErrorCode *ierr)
169: {
170: PetscObjectAllocateFortranPointers(*pc, 11);
171: ((PetscObject)*pc)->fortran_func_pointers[3] = (PetscVoidFn *)applytranspose;
173: *ierr = PCShellSetApplyTranspose(*pc, ourshellapplytranspose);
174: }
176: PETSC_EXTERN void pcshellsetsetupctx_(PC *pc, void (*setup)(void *, void *, PetscErrorCode *), PetscErrorCode *ierr)
177: {
178: PetscObjectAllocateFortranPointers(*pc, 11);
179: ((PetscObject)*pc)->fortran_func_pointers[4] = (PetscVoidFn *)setup;
181: *ierr = PCShellSetSetUp(*pc, ourshellsetupctx);
182: }
184: PETSC_EXTERN void pcshellsetsetup_(PC *pc, void (*setup)(void *, PetscErrorCode *), PetscErrorCode *ierr)
185: {
186: PetscObjectAllocateFortranPointers(*pc, 11);
187: ((PetscObject)*pc)->fortran_func_pointers[4] = (PetscVoidFn *)setup;
189: *ierr = PCShellSetSetUp(*pc, ourshellsetup);
190: }
192: PETSC_EXTERN void pcshellsetdestroy_(PC *pc, void (*setup)(void *, PetscErrorCode *), PetscErrorCode *ierr)
193: {
194: PetscObjectAllocateFortranPointers(*pc, 11);
195: ((PetscObject)*pc)->fortran_func_pointers[5] = (PetscVoidFn *)setup;
197: *ierr = PCShellSetDestroy(*pc, ourshelldestroy);
198: }
200: PETSC_EXTERN void pcshellsetpresolve_(PC *pc, void (*presolve)(void *, void *, Vec *, Vec *, PetscErrorCode *), PetscErrorCode *ierr)
201: {
202: PetscObjectAllocateFortranPointers(*pc, 11);
203: ((PetscObject)*pc)->fortran_func_pointers[6] = (PetscVoidFn *)presolve;
205: *ierr = PCShellSetPreSolve(*pc, ourshellpresolve);
206: }
208: PETSC_EXTERN void pcshellsetpostsolve_(PC *pc, void (*postsolve)(void *, void *, Vec *, Vec *, PetscErrorCode *), PetscErrorCode *ierr)
209: {
210: PetscObjectAllocateFortranPointers(*pc, 11);
211: ((PetscObject)*pc)->fortran_func_pointers[7] = (PetscVoidFn *)postsolve;
213: *ierr = PCShellSetPostSolve(*pc, ourshellpostsolve);
214: }
216: PETSC_EXTERN void pcshellsetview_(PC *pc, void (*view)(void *, PetscViewer *, PetscErrorCode *), PetscErrorCode *ierr)
217: {
218: PetscObjectAllocateFortranPointers(*pc, 11);
219: ((PetscObject)*pc)->fortran_func_pointers[8] = (PetscVoidFn *)view;
221: *ierr = PCShellSetView(*pc, ourshellview);
222: }