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