xref: /petsc/src/sys/ftn-custom/zsys.c (revision ae4341f39f6a059b178d7ae3e9237d4c396ca0fc)
1*ae4341f3SSatish Balay 
2*ae4341f3SSatish Balay #include "zpetsc.h"
3*ae4341f3SSatish Balay #include "petscsys.h"
4*ae4341f3SSatish Balay #include "petscmatlab.h"
5*ae4341f3SSatish Balay 
6*ae4341f3SSatish Balay void *PETSCNULLPOINTERADDRESS = PETSC_NULL;
7*ae4341f3SSatish Balay 
8*ae4341f3SSatish Balay #ifdef PETSC_HAVE_FORTRAN_CAPS
9*ae4341f3SSatish Balay #define petscpopsignalhandler_     PETSCPOPSIGNALHANDLER
10*ae4341f3SSatish Balay #define petscgetcputime_           PETSCGETCPUTIME
11*ae4341f3SSatish Balay #define petscfopen_                PETSCFOPEN
12*ae4341f3SSatish Balay #define petscfclose_               PETSCFCLOSE
13*ae4341f3SSatish Balay #define petscfprintf_              PETSCFPRINTF
14*ae4341f3SSatish Balay #define petscsynchronizedfprintf_  PETSCSYNCHRONIZEDFPRINTF
15*ae4341f3SSatish Balay #define petscprintf_               PETSCPRINTF
16*ae4341f3SSatish Balay #define petscsynchronizedprintf_   PETSCSYNCHRONIZEDPRINTF
17*ae4341f3SSatish Balay #define petscsynchronizedflush_    PETSCSYNCHRONIZEDFLUSH
18*ae4341f3SSatish Balay #define chkmemfortran_             CHKMEMFORTRAN
19*ae4341f3SSatish Balay #define petscattachdebugger_       PETSCATTACHDEBUGGER
20*ae4341f3SSatish Balay #define petscobjectsetname_        PETSCOBJECTSETNAME
21*ae4341f3SSatish Balay #define petscobjectdestroy_        PETSCOBJECTDESTROY
22*ae4341f3SSatish Balay #define petscobjectgetcomm_        PETSCOBJECTGETCOMM
23*ae4341f3SSatish Balay #define petscobjectgetname_        PETSCOBJECTGETNAME
24*ae4341f3SSatish Balay #define petscgetflops_             PETSCGETFLOPS
25*ae4341f3SSatish Balay #define petscerror_                PETSCERROR
26*ae4341f3SSatish Balay #define petscrandomcreate_         PETSCRANDOMCREATE
27*ae4341f3SSatish Balay #define petscrandomdestroy_        PETSCRANDOMDESTROY
28*ae4341f3SSatish Balay #define petscrandomgetvalue_       PETSCRANDOMGETVALUE
29*ae4341f3SSatish Balay #define petscmallocvalidate_       PETSCMALLOCVALIDATE
30*ae4341f3SSatish Balay #define petscrealview_             PETSCREALVIEW
31*ae4341f3SSatish Balay #define petscintview_              PETSCINTVIEW
32*ae4341f3SSatish Balay #define petscsequentialphasebegin_ PETSCSEQUENTIALPHASEBEGIN
33*ae4341f3SSatish Balay #define petscsequentialphaseend_   PETSCSEQUENTIALPHASEEND
34*ae4341f3SSatish Balay #define petsctrlog_                PETSCTRLOG
35*ae4341f3SSatish Balay #define petscmemcpy_               PETSCMEMCPY
36*ae4341f3SSatish Balay #define petscmallocdump_           PETSCMALLOCDUMP
37*ae4341f3SSatish Balay #define petscmallocdumplog_        PETSCMALLOCDUMPLOG
38*ae4341f3SSatish Balay #define petscmemzero_              PETSCMEMZERO
39*ae4341f3SSatish Balay #define petscbinaryopen_           PETSCBINARYOPEN
40*ae4341f3SSatish Balay #define petscbinaryread_           PETSCBINARYREAD
41*ae4341f3SSatish Balay #define petscbinarywrite_          PETSCBINARYWRITE
42*ae4341f3SSatish Balay #define petscbinaryclose_          PETSCBINARYCLOSE
43*ae4341f3SSatish Balay #define petscbinaryseek_           PETSCBINARYSEEK
44*ae4341f3SSatish Balay #define petscfixfilename_          PETSCFIXFILENAME
45*ae4341f3SSatish Balay #define petscstrncpy_              PETSCSTRNCPY
46*ae4341f3SSatish Balay #define petscbarrier_              PETSCBARRIER
47*ae4341f3SSatish Balay #define petscsynchronizedflush_    PETSCSYNCHRONIZEDFLUSH
48*ae4341f3SSatish Balay #define petscsplitownership_       PETSCSPLITOWNERSHIP
49*ae4341f3SSatish Balay #define petscsplitownershipblock_  PETSCSPLITOWNERSHIPBLOCK
50*ae4341f3SSatish Balay #define petscobjectgetnewtag_      PETSCOBJECTGETNEWTAG
51*ae4341f3SSatish Balay #define petsccommgetnewtag_        PETSCCOMMGETNEWTAG
52*ae4341f3SSatish Balay #define petscfptrap_               PETSCFPTRAP
53*ae4341f3SSatish Balay #define petscoffsetfortran_        PETSCOFFSETFORTRAN
54*ae4341f3SSatish Balay #define petscmatlabenginecreate_      PETSCMATLABENGINECREATE
55*ae4341f3SSatish Balay #define petscmatlabenginedestroy_     PETSCMATLABENGINEDESTROY
56*ae4341f3SSatish Balay #define petscmatlabengineevaluate_    PETSCMATLABENGINEEVALUATE
57*ae4341f3SSatish Balay #define petscmatlabenginegetoutput_   PETSCMATLABENGINEGETOUTPUT
58*ae4341f3SSatish Balay #define petscmatlabengineprintoutput_ PETSCMATLABENGINEPRINTOUTPUT
59*ae4341f3SSatish Balay #define petscmatlabengineput_         PETSCMATLABENGINEPUT
60*ae4341f3SSatish Balay #define petscmatlabengineget_         PETSCMATLABENGINEGET
61*ae4341f3SSatish Balay #define petscmatlabengineputarray_    PETSCMATLABENGINEPUTARRAY
62*ae4341f3SSatish Balay #define petscmatlabenginegetarray_    PETSCMATLABENGINEGETARRAY
63*ae4341f3SSatish Balay #define petscgetmemoryusage    _      PETSCGETMEMORYUSAGE
64*ae4341f3SSatish Balay #define petscviewerasciiprintf_       PETSCVIEWERASCIIPRINTF
65*ae4341f3SSatish Balay #define petscviewerasciisynchronizedprintf_       PETSCVIEWERASCIISYNCHRONIZEDPRINTF
66*ae4341f3SSatish Balay #define petscviewerasciisettab_       PETSCVIEWERASCIISETTAB
67*ae4341f3SSatish Balay #define petscviewerasciipushtab_      PETSCVIEWERASCIIPUSHTAB
68*ae4341f3SSatish Balay #define petscviewerasciipoptab_       PETSCVIEWERASCIIPOPTAB
69*ae4341f3SSatish Balay #define petscviewerasciiusetabs_      PETSCVIEWERASCIIUSETABS
70*ae4341f3SSatish Balay #define petscpusherrorhandler_        PETSCPUSHERRORHANDLER
71*ae4341f3SSatish Balay #define petscpoperrorhandler_         PETSCPOPERRORHANDLER
72*ae4341f3SSatish Balay #define petsctracebackerrorhandler_   PETSCTRACEBACKERRORHANDLER
73*ae4341f3SSatish Balay #define petscaborterrorhandler_       PETSCABORTERRORHANDLER
74*ae4341f3SSatish Balay #define petscignoreerrorhandler_      PETSCIGNOREERRORHANDLER
75*ae4341f3SSatish Balay #define petscemacsclienterrorhandler_ PETSCEMACSCLIENTERRORHANDLER
76*ae4341f3SSatish Balay #define petscattachdebuggererrorhandler_   PETSCATTACHDEBUGGERERRORHANDLER
77*ae4341f3SSatish Balay #elif !defined(PETSC_HAVE_FORTRAN_UNDERSCORE)
78*ae4341f3SSatish Balay #define petscpopsignalhandler_        petscpopsignalhandler
79*ae4341f3SSatish Balay #define petscfopen_                   petscfopen
80*ae4341f3SSatish Balay #define petscfclose_                  petscfclose
81*ae4341f3SSatish Balay #define petscfprintf_                 petscfprintf
82*ae4341f3SSatish Balay #define petscsynchronizedfprintf_     petscsynchronizedfprintf
83*ae4341f3SSatish Balay #define petscprintf_                  petscprintf
84*ae4341f3SSatish Balay #define petscsynchronizedprintf_      petscsynchronizedprintf
85*ae4341f3SSatish Balay #define petscsynchronizedflush_       petscsynchronizedflush
86*ae4341f3SSatish Balay #define petscmatlabenginecreate_      petscmatlabenginecreate
87*ae4341f3SSatish Balay #define petscmatlabenginedestroy_     petscmatlabenginedestroy
88*ae4341f3SSatish Balay #define petscmatlabengineevaluate_    petscmatlabengineevaluate
89*ae4341f3SSatish Balay #define petscmatlabenginegetoutput_   petscmatlabenginegetoutput
90*ae4341f3SSatish Balay #define petscmatlabengineprintoutput_ petscmatlabengineprintoutput
91*ae4341f3SSatish Balay #define petscmatlabengineput_         petscmatlabengineput
92*ae4341f3SSatish Balay #define petscmatlabengineget_         petscmatlabengineget
93*ae4341f3SSatish Balay #define petscmatlabengineputarray_    petscmatlabengineputarray
94*ae4341f3SSatish Balay #define petscmatlabenginegetarray_    petscmatlabenginegetarray
95*ae4341f3SSatish Balay #define petscoffsetfortran_        petscoffsetfortran
96*ae4341f3SSatish Balay #define chkmemfortran_             chkmemfortran
97*ae4341f3SSatish Balay #define petscobjectgetnewtag_      petscobjectgetnewtag
98*ae4341f3SSatish Balay #define petsccommgetnewtag_        petsccommgetnewtag
99*ae4341f3SSatish Balay #define petscsplitownership_       petscsplitownership
100*ae4341f3SSatish Balay #define petscsplitownershipblock_  petscsplitownershipblock
101*ae4341f3SSatish Balay #define petscbarrier_              petscbarrier
102*ae4341f3SSatish Balay #define petscstrncpy_              petscstrncpy
103*ae4341f3SSatish Balay #define petscfixfilename_          petscfixfilename
104*ae4341f3SSatish Balay #define petscattachdebugger_       petscattachdebugger
105*ae4341f3SSatish Balay #define petscobjectsetname_        petscobjectsetname
106*ae4341f3SSatish Balay #define petscobjectdestroy_        petscobjectdestroy
107*ae4341f3SSatish Balay #define petscobjectgetcomm_        petscobjectgetcomm
108*ae4341f3SSatish Balay #define petscobjectgetname_        petscobjectgetname
109*ae4341f3SSatish Balay #define petscgetflops_             petscgetflops
110*ae4341f3SSatish Balay #define petscerror_                petscerror
111*ae4341f3SSatish Balay #define petscrandomcreate_         petscrandomcreate
112*ae4341f3SSatish Balay #define petscrandomdestroy_        petscrandomdestroy
113*ae4341f3SSatish Balay #define petscrandomgetvalue_       petscrandomgetvalue
114*ae4341f3SSatish Balay #define petscmallocvalidate_       petscmallocvalidate
115*ae4341f3SSatish Balay #define petscrealview_             petscrealview
116*ae4341f3SSatish Balay #define petscintview_              petscintview
117*ae4341f3SSatish Balay #define petscsequentialphasebegin_ petscsequentialphasebegin
118*ae4341f3SSatish Balay #define petscsequentialphaseend_   petscsequentialphaseend
119*ae4341f3SSatish Balay #define petscmemcpy_               petscmemcpy
120*ae4341f3SSatish Balay #define petscmallocdump_           petscmallocdump
121*ae4341f3SSatish Balay #define petscmallocdumplog_        petscmallocdumplog
122*ae4341f3SSatish Balay #define petscmemzero_              petscmemzero
123*ae4341f3SSatish Balay #define petscbinaryopen_           petscbinaryopen
124*ae4341f3SSatish Balay #define petscbinaryread_           petscbinaryread
125*ae4341f3SSatish Balay #define petscbinarywrite_          petscbinarywrite
126*ae4341f3SSatish Balay #define petscbinaryclose_          petscbinaryclose
127*ae4341f3SSatish Balay #define petscbinaryseek_           petscbinaryseek
128*ae4341f3SSatish Balay #define petscsynchronizedflush_    petscsynchronizedflush
129*ae4341f3SSatish Balay #define petscfptrap_               petscfptrap
130*ae4341f3SSatish Balay #define petscgetcputime_           petscgetcputime
131*ae4341f3SSatish Balay #define petscgetmemoryusage_       petscgetmemoryusage
132*ae4341f3SSatish Balay #define petscviewerasciiprintf_    petscviewerasciiprintf
133*ae4341f3SSatish Balay #define petscviewerasciisynchronizedprintf_    petscviewerasciisynchronizedprintf
134*ae4341f3SSatish Balay #define petscviewerasciisettab_ petscviewerasciisettab
135*ae4341f3SSatish Balay #define petscviewerasciipushtab_ petscviewerasciipushtab
136*ae4341f3SSatish Balay #define petscviewerasciipoptab_ petscviewerasciipoptab
137*ae4341f3SSatish Balay #define petscviewerasciiusetabs_ petscviewerasciiusetabs
138*ae4341f3SSatish Balay #define petscpusherrorhandler_   petscpusherrorhandler
139*ae4341f3SSatish Balay #define petscpoperrorhandler_    petscpoperrorhandler
140*ae4341f3SSatish Balay #define petsctracebackerrorhandler_   petsctracebackerrorhandler
141*ae4341f3SSatish Balay #define petscaborterrorhandler_       petscaborterrorhandler
142*ae4341f3SSatish Balay #define petscignoreerrorhandler_      petscignoreerrorhandler
143*ae4341f3SSatish Balay #define petscemacsclienterrorhandler_ petscemacsclienterrorhandler
144*ae4341f3SSatish Balay #define petscattachdebuggererrorhandler_   petscattachdebuggererrorhandler
145*ae4341f3SSatish Balay #endif
146*ae4341f3SSatish Balay 
147*ae4341f3SSatish Balay EXTERN_C_BEGIN
148*ae4341f3SSatish Balay static void (PETSC_STDCALL *f2)(int*,const CHAR PETSC_MIXED_LEN(len1),const CHAR PETSC_MIXED_LEN(len2),const CHAR PETSC_MIXED_LEN(len3),int*,int*,const CHAR PETSC_MIXED_LEN(len4),void*,PetscErrorCode* PETSC_END_LEN(len1) PETSC_END_LEN(len2) PETSC_END_LEN(len3) PETSC_END_LEN(len4));
149*ae4341f3SSatish Balay EXTERN_C_END
150*ae4341f3SSatish Balay 
151*ae4341f3SSatish Balay /* These are not extern C because they are passed into non-extern C user level functions */
152*ae4341f3SSatish Balay static PetscErrorCode ourerrorhandler(int line,const char *fun,const char *file,const char *dir,int n,int p,const char *mess,void *ctx)
153*ae4341f3SSatish Balay {
154*ae4341f3SSatish Balay   PetscErrorCode ierr = 0;
155*ae4341f3SSatish Balay   size_t len1,len2,len3,len4;
156*ae4341f3SSatish Balay   int l1,l2,l3,l4;
157*ae4341f3SSatish Balay 
158*ae4341f3SSatish Balay   PetscStrlen(fun,&len1); l1 = (int)len1;
159*ae4341f3SSatish Balay   PetscStrlen(file,&len2);l2 = (int)len2;
160*ae4341f3SSatish Balay   PetscStrlen(dir,&len3);l3 = (int)len3;
161*ae4341f3SSatish Balay   PetscStrlen(mess,&len4);l4 = (int)len4;
162*ae4341f3SSatish Balay 
163*ae4341f3SSatish Balay #if defined(PETSC_USES_CPTOFCD)
164*ae4341f3SSatish Balay  {
165*ae4341f3SSatish Balay    CHAR fun_c,file_c,dir_c,mess_c;
166*ae4341f3SSatish Balay 
167*ae4341f3SSatish Balay    fun_c  = _cptofcd(fun,len1);
168*ae4341f3SSatish Balay    file_c = _cptofcd(file,len2);
169*ae4341f3SSatish Balay    dir_c  = _cptofcd(dir,len3);
170*ae4341f3SSatish Balay    mess_c = _cptofcd(mess,len4);
171*ae4341f3SSatish Balay    (*f2)(&line,fun_c,file_c,dir_c,&n,&p,mess_c,ctx,&ierr,len1,len2,len3,len4);
172*ae4341f3SSatish Balay 
173*ae4341f3SSatish Balay  }
174*ae4341f3SSatish Balay #elif defined(PETSC_HAVE_FORTRAN_MIXED_STR_ARG)
175*ae4341f3SSatish Balay   (*f2)(&line,fun,l1,file,l2,dir,l3,&n,&p,mess,l4,ctx,&ierr);
176*ae4341f3SSatish Balay #else
177*ae4341f3SSatish Balay   (*f2)(&line,fun,file,dir,&n,&p,mess,ctx,&ierr,l1,l2,l3,l4);
178*ae4341f3SSatish Balay #endif
179*ae4341f3SSatish Balay   return ierr;
180*ae4341f3SSatish Balay }
181*ae4341f3SSatish Balay 
182*ae4341f3SSatish Balay EXTERN_C_BEGIN
183*ae4341f3SSatish Balay /*
184*ae4341f3SSatish Balay     integer i_x,i_y,shift
185*ae4341f3SSatish Balay     Vec     x,y
186*ae4341f3SSatish Balay     PetscScalar  v_x(1),v_y(1)
187*ae4341f3SSatish Balay 
188*ae4341f3SSatish Balay     call VecGetArray(x,v_x,i_x,ierr)
189*ae4341f3SSatish Balay     if (x .eq. y) then
190*ae4341f3SSatish Balay       call PetscOffsetFortran(y_v,x_v,shift,ierr)
191*ae4341f3SSatish Balay       i_y = i_x + shift
192*ae4341f3SSatish Balay     else
193*ae4341f3SSatish Balay       call VecGetArray(y,v_y,i_y,ierr)
194*ae4341f3SSatish Balay     endif
195*ae4341f3SSatish Balay */
196*ae4341f3SSatish Balay 
197*ae4341f3SSatish Balay /*
198*ae4341f3SSatish Balay         These are not usually called from Fortran but allow Fortran users
199*ae4341f3SSatish Balay    to transparently set these monitors from .F code
200*ae4341f3SSatish Balay 
201*ae4341f3SSatish Balay    functions, hence no STDCALL
202*ae4341f3SSatish Balay */
203*ae4341f3SSatish Balay void petsctracebackerrorhandler_(int *line,const char *fun,const char *file,const char *dir,int *n,int *p,const char *mess,void *ctx,PetscErrorCode *ierr)
204*ae4341f3SSatish Balay {
205*ae4341f3SSatish Balay   *ierr = PetscTraceBackErrorHandler(*line,fun,file,dir,*n,*p,mess,ctx);
206*ae4341f3SSatish Balay }
207*ae4341f3SSatish Balay 
208*ae4341f3SSatish Balay void petscaborterrorhandler_(int *line,const char *fun,const char *file,const char *dir,int *n,int *p,const char *mess,void *ctx,PetscErrorCode *ierr)
209*ae4341f3SSatish Balay {
210*ae4341f3SSatish Balay   *ierr = PetscAbortErrorHandler(*line,fun,file,dir,*n,*p,mess,ctx);
211*ae4341f3SSatish Balay }
212*ae4341f3SSatish Balay 
213*ae4341f3SSatish Balay void petscattachdebuggererrorhandler_(int *line,const char *fun,const char *file,const char *dir,int *n,int *p,const char *mess,void *ctx,PetscErrorCode *ierr)
214*ae4341f3SSatish Balay {
215*ae4341f3SSatish Balay   *ierr = PetscAttachDebuggerErrorHandler(*line,fun,file,dir,*n,*p,mess,ctx);
216*ae4341f3SSatish Balay }
217*ae4341f3SSatish Balay 
218*ae4341f3SSatish Balay void petscemacsclienterrorhandler_(int *line,const char *fun,const char *file,const char *dir,int *n,int *p,const char *mess,void *ctx,PetscErrorCode *ierr)
219*ae4341f3SSatish Balay {
220*ae4341f3SSatish Balay   *ierr = PetscEmacsClientErrorHandler(*line,fun,file,dir,*n,*p,mess,ctx);
221*ae4341f3SSatish Balay }
222*ae4341f3SSatish Balay 
223*ae4341f3SSatish Balay void petscignoreerrorhandler_(int *line,const char *fun,const char *file,const char *dir,int *n,int *p,const char *mess,void *ctx,PetscErrorCode *ierr)
224*ae4341f3SSatish Balay {
225*ae4341f3SSatish Balay   *ierr = PetscIgnoreErrorHandler(*line,fun,file,dir,*n,*p,mess,ctx);
226*ae4341f3SSatish Balay }
227*ae4341f3SSatish Balay 
228*ae4341f3SSatish Balay void PETSC_STDCALL petscpusherrorhandler_(void (PETSC_STDCALL *handler)(int*,const CHAR PETSC_MIXED_LEN(len1),const CHAR PETSC_MIXED_LEN(len2),const CHAR PETSC_MIXED_LEN(len3),int*,int*,const CHAR PETSC_MIXED_LEN(len4),void*,PetscErrorCode* PETSC_END_LEN(len1) PETSC_END_LEN(len2) PETSC_END_LEN(len3) PETSC_END_LEN(len4)),void *ctx,PetscErrorCode *ierr)
229*ae4341f3SSatish Balay {
230*ae4341f3SSatish Balay   if ((void(*)(void))handler == (void(*)(void))petsctracebackerrorhandler_) {
231*ae4341f3SSatish Balay     *ierr = PetscPushErrorHandler(PetscTraceBackErrorHandler,0);
232*ae4341f3SSatish Balay   } else {
233*ae4341f3SSatish Balay     f2    = handler;
234*ae4341f3SSatish Balay     *ierr = PetscPushErrorHandler(ourerrorhandler,ctx);
235*ae4341f3SSatish Balay   }
236*ae4341f3SSatish Balay }
237*ae4341f3SSatish Balay 
238*ae4341f3SSatish Balay void PETSC_STDCALL petscpopsignalhandler_(PetscErrorCode *ierr)
239*ae4341f3SSatish Balay {
240*ae4341f3SSatish Balay   *ierr = PetscPopSignalHandler();
241*ae4341f3SSatish Balay }
242*ae4341f3SSatish Balay 
243*ae4341f3SSatish Balay void PETSC_STDCALL petscpoperrorhandler_(PetscErrorCode *ierr)
244*ae4341f3SSatish Balay {
245*ae4341f3SSatish Balay   *ierr = PetscPopErrorHandler();
246*ae4341f3SSatish Balay }
247*ae4341f3SSatish Balay 
248*ae4341f3SSatish Balay void PETSC_STDCALL petscviewerasciisettab_(PetscViewer *viewer,PetscInt *tabs,PetscErrorCode *ierr)
249*ae4341f3SSatish Balay {
250*ae4341f3SSatish Balay   *ierr = PetscViewerASCIISetTab(*viewer,*tabs);
251*ae4341f3SSatish Balay }
252*ae4341f3SSatish Balay 
253*ae4341f3SSatish Balay void PETSC_STDCALL petscviewerasciipushtab_(PetscViewer *viewer,PetscErrorCode *ierr)
254*ae4341f3SSatish Balay {
255*ae4341f3SSatish Balay   *ierr = PetscViewerASCIIPushTab(*viewer);
256*ae4341f3SSatish Balay }
257*ae4341f3SSatish Balay 
258*ae4341f3SSatish Balay void PETSC_STDCALL petscviewerasciipoptab_(PetscViewer *viewer,PetscErrorCode *ierr)
259*ae4341f3SSatish Balay {
260*ae4341f3SSatish Balay   *ierr = PetscViewerASCIIPopTab(*viewer);
261*ae4341f3SSatish Balay }
262*ae4341f3SSatish Balay 
263*ae4341f3SSatish Balay void PETSC_STDCALL petscviewerasciiusetabs_(PetscViewer *viewer,PetscTruth *flg,PetscErrorCode *ierr)
264*ae4341f3SSatish Balay {
265*ae4341f3SSatish Balay   *ierr = PetscViewerASCIIUseTabs(*viewer,*flg);
266*ae4341f3SSatish Balay }
267*ae4341f3SSatish Balay 
268*ae4341f3SSatish Balay void PETSC_STDCALL petscviewerasciiprintf_(PetscViewer *viewer,CHAR str PETSC_MIXED_LEN(len1),PetscErrorCode *ierr PETSC_END_LEN(len1))
269*ae4341f3SSatish Balay {
270*ae4341f3SSatish Balay   char *c1;
271*ae4341f3SSatish Balay 
272*ae4341f3SSatish Balay   FIXCHAR(str,len1,c1);
273*ae4341f3SSatish Balay   *ierr = PetscViewerASCIIPrintf(*viewer,c1);
274*ae4341f3SSatish Balay   FREECHAR(str,c1);
275*ae4341f3SSatish Balay }
276*ae4341f3SSatish Balay 
277*ae4341f3SSatish Balay void PETSC_STDCALL petscviewerasciisynchronizedprintf_(PetscViewer *viewer,CHAR str PETSC_MIXED_LEN(len1),PetscErrorCode *ierr PETSC_END_LEN(len1))
278*ae4341f3SSatish Balay {
279*ae4341f3SSatish Balay   char *c1;
280*ae4341f3SSatish Balay 
281*ae4341f3SSatish Balay   FIXCHAR(str,len1,c1);
282*ae4341f3SSatish Balay   *ierr = PetscViewerASCIISynchronizedPrintf(*viewer,c1);
283*ae4341f3SSatish Balay   FREECHAR(str,c1);
284*ae4341f3SSatish Balay }
285*ae4341f3SSatish Balay 
286*ae4341f3SSatish Balay void PETSC_STDCALL petscmemorygetcurrentusage_(PetscLogDouble *foo, PetscErrorCode *ierr)
287*ae4341f3SSatish Balay {
288*ae4341f3SSatish Balay   *ierr = PetscMemoryGetCurrentUsage(foo);
289*ae4341f3SSatish Balay }
290*ae4341f3SSatish Balay 
291*ae4341f3SSatish Balay void PETSC_STDCALL petscmemorygetmaximumusage_(PetscLogDouble *foo, PetscErrorCode *ierr)
292*ae4341f3SSatish Balay {
293*ae4341f3SSatish Balay   *ierr = PetscMemoryGetMaximumUsage(foo);
294*ae4341f3SSatish Balay }
295*ae4341f3SSatish Balay 
296*ae4341f3SSatish Balay void PETSC_STDCALL petscoffsetfortran_(PetscScalar *x,PetscScalar *y,PetscInt *shift,PetscErrorCode *ierr)
297*ae4341f3SSatish Balay {
298*ae4341f3SSatish Balay   *ierr = 0;
299*ae4341f3SSatish Balay   *shift = y - x;
300*ae4341f3SSatish Balay }
301*ae4341f3SSatish Balay 
302*ae4341f3SSatish Balay void PETSC_STDCALL petscgetcputime_(PetscLogDouble *t, PetscErrorCode *ierr)
303*ae4341f3SSatish Balay {
304*ae4341f3SSatish Balay   *ierr = PetscGetCPUTime(t);
305*ae4341f3SSatish Balay }
306*ae4341f3SSatish Balay 
307*ae4341f3SSatish Balay void PETSC_STDCALL petscfopen_(MPI_Comm *comm,CHAR fname PETSC_MIXED_LEN(len1),CHAR fmode PETSC_MIXED_LEN(len2),
308*ae4341f3SSatish Balay                                FILE **file,PetscErrorCode *ierr PETSC_END_LEN(len1) PETSC_END_LEN(len2))
309*ae4341f3SSatish Balay {
310*ae4341f3SSatish Balay   char *c1,*c2;
311*ae4341f3SSatish Balay 
312*ae4341f3SSatish Balay   FIXCHAR(fname,len1,c1);
313*ae4341f3SSatish Balay   FIXCHAR(fmode,len2,c2);
314*ae4341f3SSatish Balay   *ierr = PetscFOpen((MPI_Comm)PetscToPointerComm(*comm),c1,c2,file);
315*ae4341f3SSatish Balay   FREECHAR(fname,c1);
316*ae4341f3SSatish Balay   FREECHAR(fmode,c2);
317*ae4341f3SSatish Balay }
318*ae4341f3SSatish Balay 
319*ae4341f3SSatish Balay void PETSC_STDCALL petscfclose_(MPI_Comm *comm,FILE **file,PetscErrorCode *ierr)
320*ae4341f3SSatish Balay {
321*ae4341f3SSatish Balay   *ierr = PetscFClose((MPI_Comm)PetscToPointerComm(*comm),*file);
322*ae4341f3SSatish Balay }
323*ae4341f3SSatish Balay 
324*ae4341f3SSatish Balay void PETSC_STDCALL petscsynchronizedflush_(MPI_Comm *comm,PetscErrorCode *ierr)
325*ae4341f3SSatish Balay {
326*ae4341f3SSatish Balay   *ierr = PetscSynchronizedFlush((MPI_Comm)PetscToPointerComm(*comm));
327*ae4341f3SSatish Balay }
328*ae4341f3SSatish Balay 
329*ae4341f3SSatish Balay void PETSC_STDCALL petscfprintf_(MPI_Comm *comm,FILE **file,CHAR fname PETSC_MIXED_LEN(len1),PetscErrorCode *ierr PETSC_END_LEN(len1))
330*ae4341f3SSatish Balay {
331*ae4341f3SSatish Balay   char *c1;
332*ae4341f3SSatish Balay 
333*ae4341f3SSatish Balay   FIXCHAR(fname,len1,c1);
334*ae4341f3SSatish Balay   *ierr = PetscFPrintf((MPI_Comm)PetscToPointerComm(*comm),*file,c1);
335*ae4341f3SSatish Balay   FREECHAR(fname,c1);
336*ae4341f3SSatish Balay }
337*ae4341f3SSatish Balay 
338*ae4341f3SSatish Balay void PETSC_STDCALL petscprintf_(MPI_Comm *comm,CHAR fname PETSC_MIXED_LEN(len1),PetscErrorCode *ierr PETSC_END_LEN(len1))
339*ae4341f3SSatish Balay {
340*ae4341f3SSatish Balay   char *c1;
341*ae4341f3SSatish Balay 
342*ae4341f3SSatish Balay   FIXCHAR(fname,len1,c1);
343*ae4341f3SSatish Balay   *ierr = PetscPrintf((MPI_Comm)PetscToPointerComm(*comm),c1);
344*ae4341f3SSatish Balay   FREECHAR(fname,c1);
345*ae4341f3SSatish Balay }
346*ae4341f3SSatish Balay 
347*ae4341f3SSatish Balay void PETSC_STDCALL petscsynchronizedfprintf_(MPI_Comm *comm,FILE **file,CHAR fname PETSC_MIXED_LEN(len1),PetscErrorCode *ierr PETSC_END_LEN(len1))
348*ae4341f3SSatish Balay {
349*ae4341f3SSatish Balay   char *c1;
350*ae4341f3SSatish Balay 
351*ae4341f3SSatish Balay   FIXCHAR(fname,len1,c1);
352*ae4341f3SSatish Balay   *ierr = PetscSynchronizedFPrintf((MPI_Comm)PetscToPointerComm(*comm),*file,c1);
353*ae4341f3SSatish Balay   FREECHAR(fname,c1);
354*ae4341f3SSatish Balay }
355*ae4341f3SSatish Balay 
356*ae4341f3SSatish Balay void PETSC_STDCALL petscsynchronizedprintf_(MPI_Comm *comm,CHAR fname PETSC_MIXED_LEN(len1),PetscErrorCode *ierr PETSC_END_LEN(len1))
357*ae4341f3SSatish Balay {
358*ae4341f3SSatish Balay   char *c1;
359*ae4341f3SSatish Balay 
360*ae4341f3SSatish Balay   FIXCHAR(fname,len1,c1);
361*ae4341f3SSatish Balay   *ierr = PetscSynchronizedPrintf((MPI_Comm)PetscToPointerComm(*comm),c1);
362*ae4341f3SSatish Balay   FREECHAR(fname,c1);
363*ae4341f3SSatish Balay }
364*ae4341f3SSatish Balay 
365*ae4341f3SSatish Balay void PETSC_STDCALL petscsetfptrap_(PetscFPTrap *flag,PetscErrorCode *ierr)
366*ae4341f3SSatish Balay {
367*ae4341f3SSatish Balay   *ierr = PetscSetFPTrap(*flag);
368*ae4341f3SSatish Balay }
369*ae4341f3SSatish Balay 
370*ae4341f3SSatish Balay void PETSC_STDCALL petscobjectgetnewtag_(PetscObject *obj,PetscMPIInt *tag,PetscErrorCode *ierr)
371*ae4341f3SSatish Balay {
372*ae4341f3SSatish Balay   *ierr = PetscObjectGetNewTag(*obj,tag);
373*ae4341f3SSatish Balay }
374*ae4341f3SSatish Balay 
375*ae4341f3SSatish Balay void PETSC_STDCALL petsccommgetnewtag_(MPI_Comm *comm,PetscMPIInt *tag,PetscErrorCode *ierr)
376*ae4341f3SSatish Balay {
377*ae4341f3SSatish Balay   *ierr = PetscCommGetNewTag((MPI_Comm)PetscToPointerComm(*comm),tag);
378*ae4341f3SSatish Balay }
379*ae4341f3SSatish Balay 
380*ae4341f3SSatish Balay void PETSC_STDCALL petscsplitownershipblock_(MPI_Comm *comm,PetscInt *bs,PetscInt *n,PetscInt *N,PetscErrorCode *ierr)
381*ae4341f3SSatish Balay {
382*ae4341f3SSatish Balay   *ierr = PetscSplitOwnershipBlock((MPI_Comm)PetscToPointerComm(*comm),*bs,n,N);
383*ae4341f3SSatish Balay }
384*ae4341f3SSatish Balay void PETSC_STDCALL petscsplitownership_(MPI_Comm *comm,PetscInt *n,PetscInt *N,PetscErrorCode *ierr)
385*ae4341f3SSatish Balay {
386*ae4341f3SSatish Balay   *ierr = PetscSplitOwnership((MPI_Comm)PetscToPointerComm(*comm),n,N);
387*ae4341f3SSatish Balay }
388*ae4341f3SSatish Balay 
389*ae4341f3SSatish Balay void PETSC_STDCALL petscbarrier_(PetscObject *obj,PetscErrorCode *ierr)
390*ae4341f3SSatish Balay {
391*ae4341f3SSatish Balay   *ierr = PetscBarrier(*obj);
392*ae4341f3SSatish Balay }
393*ae4341f3SSatish Balay 
394*ae4341f3SSatish Balay void PETSC_STDCALL petscstrncpy_(CHAR s1 PETSC_MIXED_LEN(len1),CHAR s2 PETSC_MIXED_LEN(len2),int *n,
395*ae4341f3SSatish Balay                                  PetscErrorCode *ierr PETSC_END_LEN(len1) PETSC_END_LEN(len2))
396*ae4341f3SSatish Balay {
397*ae4341f3SSatish Balay   char *t1,*t2;
398*ae4341f3SSatish Balay   int  m;
399*ae4341f3SSatish Balay 
400*ae4341f3SSatish Balay #if defined(PETSC_USES_CPTOFCD)
401*ae4341f3SSatish Balay   t1 = _fcdtocp(s1);
402*ae4341f3SSatish Balay   t2 = _fcdtocp(s2);
403*ae4341f3SSatish Balay   m = *n; if (_fcdlen(s1) < m) m = _fcdlen(s1); if (_fcdlen(s2) < m) m = _fcdlen(s2);
404*ae4341f3SSatish Balay #else
405*ae4341f3SSatish Balay   t1 = s1;
406*ae4341f3SSatish Balay   t2 = s2;
407*ae4341f3SSatish Balay   m = *n; if (len1 < m) m = len1; if (len2 < m) m = len2;
408*ae4341f3SSatish Balay #endif
409*ae4341f3SSatish Balay   *ierr = PetscStrncpy(t1,t2,m);
410*ae4341f3SSatish Balay }
411*ae4341f3SSatish Balay 
412*ae4341f3SSatish Balay void PETSC_STDCALL petscfixfilename_(CHAR filein PETSC_MIXED_LEN(len1),CHAR fileout PETSC_MIXED_LEN(len2),
413*ae4341f3SSatish Balay                                      PetscErrorCode *ierr PETSC_END_LEN(len1) PETSC_END_LEN(len2))
414*ae4341f3SSatish Balay {
415*ae4341f3SSatish Balay   PetscInt  i,n;
416*ae4341f3SSatish Balay   char *in,*out;
417*ae4341f3SSatish Balay 
418*ae4341f3SSatish Balay #if defined(PETSC_USES_CPTOFCD)
419*ae4341f3SSatish Balay   in  = _fcdtocp(filein);
420*ae4341f3SSatish Balay   out = _fcdtocp(fileout);
421*ae4341f3SSatish Balay   n   = _fcdlen (filein);
422*ae4341f3SSatish Balay #else
423*ae4341f3SSatish Balay   in  = filein;
424*ae4341f3SSatish Balay   out = fileout;
425*ae4341f3SSatish Balay   n   = len1;
426*ae4341f3SSatish Balay #endif
427*ae4341f3SSatish Balay 
428*ae4341f3SSatish Balay   for (i=0; i<n; i++) {
429*ae4341f3SSatish Balay     if (in[i] == PETSC_REPLACE_DIR_SEPARATOR) out[i] = PETSC_DIR_SEPARATOR;
430*ae4341f3SSatish Balay     else out[i] = in[i];
431*ae4341f3SSatish Balay   }
432*ae4341f3SSatish Balay   out[i] = 0;
433*ae4341f3SSatish Balay }
434*ae4341f3SSatish Balay 
435*ae4341f3SSatish Balay void PETSC_STDCALL petscbinaryopen_(CHAR name PETSC_MIXED_LEN(len),PetscViewerFileType *type,int *fd,
436*ae4341f3SSatish Balay                                     PetscErrorCode *ierr PETSC_END_LEN(len))
437*ae4341f3SSatish Balay {
438*ae4341f3SSatish Balay   char *c1;
439*ae4341f3SSatish Balay 
440*ae4341f3SSatish Balay   FIXCHAR(name,len,c1);
441*ae4341f3SSatish Balay   *ierr = PetscBinaryOpen(c1,*type,fd);
442*ae4341f3SSatish Balay   FREECHAR(name,c1);
443*ae4341f3SSatish Balay }
444*ae4341f3SSatish Balay 
445*ae4341f3SSatish Balay void PETSC_STDCALL petscbinarywrite_(int *fd,void *p,PetscInt *n,PetscDataType *type,PetscTruth *istemp,PetscErrorCode *ierr)
446*ae4341f3SSatish Balay {
447*ae4341f3SSatish Balay   *ierr = PetscBinaryWrite(*fd,p,*n,*type,*istemp);
448*ae4341f3SSatish Balay }
449*ae4341f3SSatish Balay 
450*ae4341f3SSatish Balay void PETSC_STDCALL petscbinaryread_(int *fd,void *p,PetscInt *n,PetscDataType *type,PetscErrorCode *ierr)
451*ae4341f3SSatish Balay {
452*ae4341f3SSatish Balay   *ierr = PetscBinaryRead(*fd,p,*n,*type);
453*ae4341f3SSatish Balay }
454*ae4341f3SSatish Balay 
455*ae4341f3SSatish Balay void PETSC_STDCALL petscbinaryseek_(int *fd,PetscInt *size,PetscBinarySeekType *whence,off_t *offset,PetscErrorCode *ierr)
456*ae4341f3SSatish Balay {
457*ae4341f3SSatish Balay   *ierr = PetscBinarySeek(*fd,*size,*whence,offset);
458*ae4341f3SSatish Balay }
459*ae4341f3SSatish Balay 
460*ae4341f3SSatish Balay void PETSC_STDCALL petscbinaryclose_(int *fd,PetscErrorCode *ierr)
461*ae4341f3SSatish Balay {
462*ae4341f3SSatish Balay   *ierr = PetscBinaryClose(*fd);
463*ae4341f3SSatish Balay }
464*ae4341f3SSatish Balay 
465*ae4341f3SSatish Balay /* ---------------------------------------------------------------------------------*/
466*ae4341f3SSatish Balay void PETSC_STDCALL petscmemzero_(void *a,PetscInt *n,PetscErrorCode *ierr)
467*ae4341f3SSatish Balay {
468*ae4341f3SSatish Balay   *ierr = PetscMemzero(a,*n);
469*ae4341f3SSatish Balay }
470*ae4341f3SSatish Balay 
471*ae4341f3SSatish Balay void PETSC_STDCALL  petscmallocdump_(PetscErrorCode *ierr)
472*ae4341f3SSatish Balay {
473*ae4341f3SSatish Balay   *ierr = PetscMallocDump(stdout);
474*ae4341f3SSatish Balay }
475*ae4341f3SSatish Balay void PETSC_STDCALL petscmallocdumplog_(PetscErrorCode *ierr)
476*ae4341f3SSatish Balay {
477*ae4341f3SSatish Balay   *ierr = PetscMallocDumpLog(stdout);
478*ae4341f3SSatish Balay }
479*ae4341f3SSatish Balay 
480*ae4341f3SSatish Balay void PETSC_STDCALL petscmemcpy_(int *out,int *in,int *length,PetscErrorCode *ierr)
481*ae4341f3SSatish Balay {
482*ae4341f3SSatish Balay   *ierr = PetscMemcpy(out,in,*length);
483*ae4341f3SSatish Balay }
484*ae4341f3SSatish Balay 
485*ae4341f3SSatish Balay /*
486*ae4341f3SSatish Balay         This version does not do a malloc
487*ae4341f3SSatish Balay */
488*ae4341f3SSatish Balay static char FIXCHARSTRING[1024];
489*ae4341f3SSatish Balay #if defined(PETSC_USES_CPTOFCD)
490*ae4341f3SSatish Balay #include <fortran.h>
491*ae4341f3SSatish Balay 
492*ae4341f3SSatish Balay #define CHAR _fcd
493*ae4341f3SSatish Balay #define FIXCHARNOMALLOC(a,n,b) \
494*ae4341f3SSatish Balay { \
495*ae4341f3SSatish Balay   b = _fcdtocp(a); \
496*ae4341f3SSatish Balay   n = _fcdlen (a); \
497*ae4341f3SSatish Balay   if (b == PETSC_NULL_CHARACTER_Fortran) { \
498*ae4341f3SSatish Balay       b = 0; \
499*ae4341f3SSatish Balay   } else {  \
500*ae4341f3SSatish Balay     while((n > 0) && (b[n-1] == ' ')) n--; \
501*ae4341f3SSatish Balay     b = FIXCHARSTRING; \
502*ae4341f3SSatish Balay     *ierr = PetscStrncpy(b,_fcdtocp(a),n); \
503*ae4341f3SSatish Balay     if (*ierr) return; \
504*ae4341f3SSatish Balay     b[n] = 0; \
505*ae4341f3SSatish Balay   } \
506*ae4341f3SSatish Balay }
507*ae4341f3SSatish Balay 
508*ae4341f3SSatish Balay #else
509*ae4341f3SSatish Balay 
510*ae4341f3SSatish Balay #define CHAR char*
511*ae4341f3SSatish Balay #define FIXCHARNOMALLOC(a,n,b) \
512*ae4341f3SSatish Balay {\
513*ae4341f3SSatish Balay   if (a == PETSC_NULL_CHARACTER_Fortran) { \
514*ae4341f3SSatish Balay     b = a = 0; \
515*ae4341f3SSatish Balay   } else { \
516*ae4341f3SSatish Balay     while((n > 0) && (a[n-1] == ' ')) n--; \
517*ae4341f3SSatish Balay     if (a[n] != 0) { \
518*ae4341f3SSatish Balay       b = FIXCHARSTRING; \
519*ae4341f3SSatish Balay       *ierr = PetscStrncpy(b,a,n); \
520*ae4341f3SSatish Balay       if (*ierr) return; \
521*ae4341f3SSatish Balay       b[n] = 0; \
522*ae4341f3SSatish Balay     } else b = a;\
523*ae4341f3SSatish Balay   } \
524*ae4341f3SSatish Balay }
525*ae4341f3SSatish Balay 
526*ae4341f3SSatish Balay #endif
527*ae4341f3SSatish Balay 
528*ae4341f3SSatish Balay void PETSC_STDCALL chkmemfortran_(int *line,CHAR file PETSC_MIXED_LEN(len),PetscErrorCode *ierr PETSC_END_LEN(len))
529*ae4341f3SSatish Balay {
530*ae4341f3SSatish Balay   char *c1;
531*ae4341f3SSatish Balay 
532*ae4341f3SSatish Balay   FIXCHARNOMALLOC(file,len,c1);
533*ae4341f3SSatish Balay   *ierr = PetscMallocValidate(*line,"Userfunction",c1," ");
534*ae4341f3SSatish Balay }
535*ae4341f3SSatish Balay 
536*ae4341f3SSatish Balay void PETSC_STDCALL petscmallocvalidate_(PetscErrorCode *ierr)
537*ae4341f3SSatish Balay {
538*ae4341f3SSatish Balay   *ierr = PetscMallocValidate(0,"Unknown Fortran",0,0);
539*ae4341f3SSatish Balay }
540*ae4341f3SSatish Balay 
541*ae4341f3SSatish Balay void PETSC_STDCALL petscrandomgetvalue_(PetscRandom *r,PetscScalar *val,PetscErrorCode *ierr)
542*ae4341f3SSatish Balay {
543*ae4341f3SSatish Balay   *ierr = PetscRandomGetValue(*r,val);
544*ae4341f3SSatish Balay }
545*ae4341f3SSatish Balay 
546*ae4341f3SSatish Balay 
547*ae4341f3SSatish Balay void PETSC_STDCALL petscobjectgetname_(PetscObject *obj,CHAR name PETSC_MIXED_LEN(len),
548*ae4341f3SSatish Balay                                        PetscErrorCode *ierr PETSC_END_LEN(len))
549*ae4341f3SSatish Balay {
550*ae4341f3SSatish Balay   const char *tmp;
551*ae4341f3SSatish Balay   *ierr = PetscObjectGetName(*obj,&tmp);
552*ae4341f3SSatish Balay #if defined(PETSC_USES_CPTOFCD)
553*ae4341f3SSatish Balay   {
554*ae4341f3SSatish Balay   char *t = _fcdtocp(name);
555*ae4341f3SSatish Balay   int  len1 = _fcdlen(name);
556*ae4341f3SSatish Balay   *ierr = PetscStrncpy(t,tmp,len1);if (*ierr) return;
557*ae4341f3SSatish Balay   }
558*ae4341f3SSatish Balay #else
559*ae4341f3SSatish Balay   *ierr = PetscStrncpy(name,tmp,len);if (*ierr) return;
560*ae4341f3SSatish Balay #endif
561*ae4341f3SSatish Balay }
562*ae4341f3SSatish Balay 
563*ae4341f3SSatish Balay void PETSC_STDCALL petscobjectdestroy_(PetscObject *obj,PetscErrorCode *ierr)
564*ae4341f3SSatish Balay {
565*ae4341f3SSatish Balay   *ierr = PetscObjectDestroy(*obj);
566*ae4341f3SSatish Balay }
567*ae4341f3SSatish Balay 
568*ae4341f3SSatish Balay void PETSC_STDCALL petscobjectgetcomm_(PetscObject *obj,int *comm,PetscErrorCode *ierr)
569*ae4341f3SSatish Balay {
570*ae4341f3SSatish Balay   MPI_Comm c;
571*ae4341f3SSatish Balay   *ierr = PetscObjectGetComm(*obj,&c);
572*ae4341f3SSatish Balay   *(int*)comm = PetscFromPointerComm(c);
573*ae4341f3SSatish Balay }
574*ae4341f3SSatish Balay 
575*ae4341f3SSatish Balay void PETSC_STDCALL petscattachdebugger_(PetscErrorCode *ierr)
576*ae4341f3SSatish Balay {
577*ae4341f3SSatish Balay   *ierr = PetscAttachDebugger();
578*ae4341f3SSatish Balay }
579*ae4341f3SSatish Balay 
580*ae4341f3SSatish Balay void PETSC_STDCALL petscobjectsetname_(PetscObject *obj,CHAR name PETSC_MIXED_LEN(len),
581*ae4341f3SSatish Balay                                        PetscErrorCode *ierr PETSC_END_LEN(len))
582*ae4341f3SSatish Balay {
583*ae4341f3SSatish Balay   char *t1;
584*ae4341f3SSatish Balay 
585*ae4341f3SSatish Balay   FIXCHAR(name,len,t1);
586*ae4341f3SSatish Balay   *ierr = PetscObjectSetName(*obj,t1);
587*ae4341f3SSatish Balay   FREECHAR(name,t1);
588*ae4341f3SSatish Balay }
589*ae4341f3SSatish Balay 
590*ae4341f3SSatish Balay void PETSC_STDCALL petscerror_(int *number,int *p,CHAR message PETSC_MIXED_LEN(len),
591*ae4341f3SSatish Balay                                PetscErrorCode *ierr PETSC_END_LEN(len))
592*ae4341f3SSatish Balay {
593*ae4341f3SSatish Balay   char *t1;
594*ae4341f3SSatish Balay   FIXCHAR(message,len,t1);
595*ae4341f3SSatish Balay   *ierr = PetscError(-1,0,0,0,*number,*p,t1);
596*ae4341f3SSatish Balay   FREECHAR(message,t1);
597*ae4341f3SSatish Balay }
598*ae4341f3SSatish Balay 
599*ae4341f3SSatish Balay void PETSC_STDCALL petscgetflops_(PetscLogDouble *d,PetscErrorCode *ierr)
600*ae4341f3SSatish Balay {
601*ae4341f3SSatish Balay #if defined(PETSC_USE_LOG)
602*ae4341f3SSatish Balay   *ierr = PetscGetFlops(d);
603*ae4341f3SSatish Balay #else
604*ae4341f3SSatish Balay   ierr = 0;
605*ae4341f3SSatish Balay   *d     = 0.0;
606*ae4341f3SSatish Balay #endif
607*ae4341f3SSatish Balay }
608*ae4341f3SSatish Balay 
609*ae4341f3SSatish Balay void PETSC_STDCALL petscrandomcreate_(MPI_Comm *comm,PetscRandomType *type,PetscRandom *r,PetscErrorCode *ierr)
610*ae4341f3SSatish Balay {
611*ae4341f3SSatish Balay   *ierr = PetscRandomCreate((MPI_Comm)PetscToPointerComm(*comm),*type,r);
612*ae4341f3SSatish Balay }
613*ae4341f3SSatish Balay 
614*ae4341f3SSatish Balay void PETSC_STDCALL petscrandomdestroy_(PetscRandom *r,PetscErrorCode *ierr)
615*ae4341f3SSatish Balay {
616*ae4341f3SSatish Balay   *ierr = PetscRandomDestroy(*r);
617*ae4341f3SSatish Balay }
618*ae4341f3SSatish Balay 
619*ae4341f3SSatish Balay void PETSC_STDCALL petscrealview_(PetscInt *n,PetscReal *d,int *viwer,PetscErrorCode *ierr)
620*ae4341f3SSatish Balay {
621*ae4341f3SSatish Balay   *ierr = PetscRealView(*n,d,0);
622*ae4341f3SSatish Balay }
623*ae4341f3SSatish Balay 
624*ae4341f3SSatish Balay void PETSC_STDCALL petscintview_(PetscInt *n,PetscInt *d,int *viwer,PetscErrorCode *ierr)
625*ae4341f3SSatish Balay {
626*ae4341f3SSatish Balay   *ierr = PetscIntView(*n,d,0);
627*ae4341f3SSatish Balay }
628*ae4341f3SSatish Balay 
629*ae4341f3SSatish Balay void PETSC_STDCALL petscsequentialphasebegin_(MPI_Comm *comm,PetscInt *ng,PetscErrorCode *ierr){
630*ae4341f3SSatish Balay *ierr = PetscSequentialPhaseBegin(
631*ae4341f3SSatish Balay 	(MPI_Comm)PetscToPointerComm(*comm),*ng);
632*ae4341f3SSatish Balay }
633*ae4341f3SSatish Balay void PETSC_STDCALL petscsequentialphaseend_(MPI_Comm *comm,PetscInt *ng,PetscErrorCode *ierr){
634*ae4341f3SSatish Balay *ierr = PetscSequentialPhaseEnd(
635*ae4341f3SSatish Balay 	(MPI_Comm)PetscToPointerComm(*comm),*ng);
636*ae4341f3SSatish Balay }
637*ae4341f3SSatish Balay 
638*ae4341f3SSatish Balay 
639*ae4341f3SSatish Balay #if defined(PETSC_HAVE_MATLAB) && !defined(PETSC_USE_COMPLEX) && !defined(PETSC_USE_SINGLE) && !defined(PETSC_USE_MAT_SINGLE)
640*ae4341f3SSatish Balay 
641*ae4341f3SSatish Balay void PETSC_STDCALL petscmatlabenginecreate_(MPI_Comm *comm,CHAR m PETSC_MIXED_LEN(len),PetscMatlabEngine *e,
642*ae4341f3SSatish Balay                                             PetscErrorCode *ierr PETSC_END_LEN(len))
643*ae4341f3SSatish Balay {
644*ae4341f3SSatish Balay   char *ms;
645*ae4341f3SSatish Balay 
646*ae4341f3SSatish Balay   FIXCHAR(m,len,ms);
647*ae4341f3SSatish Balay   *ierr = PetscMatlabEngineCreate((MPI_Comm)PetscToPointerComm(*comm),ms,e);
648*ae4341f3SSatish Balay   FREECHAR(m,ms);
649*ae4341f3SSatish Balay }
650*ae4341f3SSatish Balay 
651*ae4341f3SSatish Balay void PETSC_STDCALL petscmatlabenginedestroy_(PetscMatlabEngine *e,PetscErrorCode *ierr)
652*ae4341f3SSatish Balay {
653*ae4341f3SSatish Balay   *ierr = PetscMatlabEngineDestroy(*e);
654*ae4341f3SSatish Balay }
655*ae4341f3SSatish Balay 
656*ae4341f3SSatish Balay void PETSC_STDCALL petscmatlabengineevaluate_(PetscMatlabEngine *e,CHAR m PETSC_MIXED_LEN(len),
657*ae4341f3SSatish Balay                                               PetscErrorCode *ierr PETSC_END_LEN(len))
658*ae4341f3SSatish Balay {
659*ae4341f3SSatish Balay   char *ms;
660*ae4341f3SSatish Balay   FIXCHAR(m,len,ms);
661*ae4341f3SSatish Balay   *ierr = PetscMatlabEngineEvaluate(*e,ms);
662*ae4341f3SSatish Balay   FREECHAR(m,ms);
663*ae4341f3SSatish Balay }
664*ae4341f3SSatish Balay 
665*ae4341f3SSatish Balay void PETSC_STDCALL petscmatlabengineput_(PetscMatlabEngine *e,PetscObject *o,PetscErrorCode *ierr)
666*ae4341f3SSatish Balay {
667*ae4341f3SSatish Balay   *ierr = PetscMatlabEnginePut(*e,*o);
668*ae4341f3SSatish Balay }
669*ae4341f3SSatish Balay 
670*ae4341f3SSatish Balay void PETSC_STDCALL petscmatlabengineget_(PetscMatlabEngine *e,PetscObject *o,PetscErrorCode *ierr)
671*ae4341f3SSatish Balay {
672*ae4341f3SSatish Balay   *ierr = PetscMatlabEngineGet(*e,*o);
673*ae4341f3SSatish Balay }
674*ae4341f3SSatish Balay 
675*ae4341f3SSatish Balay void PETSC_STDCALL petscmatlabengineputarray_(PetscMatlabEngine *e,PetscInt *m,PetscInt *n,PetscScalar *a,
676*ae4341f3SSatish Balay                                               CHAR s PETSC_MIXED_LEN(len),PetscErrorCode *ierr PETSC_END_LEN(len))
677*ae4341f3SSatish Balay {
678*ae4341f3SSatish Balay   char *ms;
679*ae4341f3SSatish Balay   FIXCHAR(s,len,ms);
680*ae4341f3SSatish Balay   *ierr = PetscMatlabEnginePutArray(*e,*m,*n,a,ms);
681*ae4341f3SSatish Balay   FREECHAR(s,ms);
682*ae4341f3SSatish Balay }
683*ae4341f3SSatish Balay 
684*ae4341f3SSatish Balay void PETSC_STDCALL petscmatlabenginegetarray_(PetscMatlabEngine *e,PetscInt *m,PetscInt *n,PetscScalar *a,
685*ae4341f3SSatish Balay                                               CHAR s PETSC_MIXED_LEN(len),PetscErrorCode *ierr PETSC_END_LEN(len))
686*ae4341f3SSatish Balay {
687*ae4341f3SSatish Balay   char *ms;
688*ae4341f3SSatish Balay   FIXCHAR(s,len,ms);
689*ae4341f3SSatish Balay   *ierr = PetscMatlabEngineGetArray(*e,*m,*n,a,ms);
690*ae4341f3SSatish Balay   FREECHAR(s,ms);
691*ae4341f3SSatish Balay }
692*ae4341f3SSatish Balay 
693*ae4341f3SSatish Balay #endif
694*ae4341f3SSatish Balay /*
695*ae4341f3SSatish Balay EXTERN int PetscMatlabEngineGetOutput(PetscMatlabEngine,char **);
696*ae4341f3SSatish Balay EXTERN int PetscMatlabEnginePrintOutput(PetscMatlabEngine,FILE*);
697*ae4341f3SSatish Balay */
698*ae4341f3SSatish Balay 
699*ae4341f3SSatish Balay EXTERN_C_END
700*ae4341f3SSatish Balay 
701*ae4341f3SSatish Balay 
702