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