xref: /petsc/src/sys/error/ftn-custom/zerrf.c (revision 668f157ea6d169bb50bcdb9ebcdd418abd089fa7)
1ce0a2cd1SBarry Smith #include "private/fortranimpl.h"
2d382aafbSBarry Smith #include "petscsys.h"
355fcb7f5SSatish Balay 
455fcb7f5SSatish Balay #if defined(PETSC_HAVE_FORTRAN_CAPS)
555fcb7f5SSatish Balay #define petscpusherrorhandler_        PETSCPUSHERRORHANDLER
655fcb7f5SSatish Balay #define petsctracebackerrorhandler_   PETSCTRACEBACKERRORHANDLER
755fcb7f5SSatish Balay #define petscaborterrorhandler_       PETSCABORTERRORHANDLER
855fcb7f5SSatish Balay #define petscignoreerrorhandler_      PETSCIGNOREERRORHANDLER
955fcb7f5SSatish Balay #define petscemacsclienterrorhandler_ PETSCEMACSCLIENTERRORHANDLER
1055fcb7f5SSatish Balay #define petscattachdebuggererrorhandler_   PETSCATTACHDEBUGGERERRORHANDLER
1155fcb7f5SSatish Balay #define petscerror_                PETSCERROR
1255fcb7f5SSatish Balay #define petscrealview_             PETSCREALVIEW
1355fcb7f5SSatish Balay #define petscintview_              PETSCINTVIEW
1421dd7e22SBarry Smith #define petscerroriscatchable_  PETSCERRORISCATCHABLE
1521dd7e22SBarry Smith #define petscexceptionvalue_        PETSCEXCEPTIONVALUE
1621dd7e22SBarry Smith #define petscexceptioncaught        PETSCEXCEPTIONCAUGHT
1755fcb7f5SSatish Balay #elif !defined(PETSC_HAVE_FORTRAN_UNDERSCORE)
1855fcb7f5SSatish Balay #define petscpusherrorhandler_   petscpusherrorhandler
1955fcb7f5SSatish Balay #define petsctracebackerrorhandler_   petsctracebackerrorhandler
2055fcb7f5SSatish Balay #define petscaborterrorhandler_       petscaborterrorhandler
2155fcb7f5SSatish Balay #define petscignoreerrorhandler_      petscignoreerrorhandler
2255fcb7f5SSatish Balay #define petscemacsclienterrorhandler_ petscemacsclienterrorhandler
2355fcb7f5SSatish Balay #define petscattachdebuggererrorhandler_   petscattachdebuggererrorhandler
2455fcb7f5SSatish Balay #define petscerror_                petscerror
2555fcb7f5SSatish Balay #define petscrealview_             petscrealview
2655fcb7f5SSatish Balay #define petscintview_              petscintview
2721dd7e22SBarry Smith #define petscerroriscatchable_ petscerroriscatchable
2821dd7e22SBarry Smith #define petscexceptionvalue_       petscexceptionvalue
2921dd7e22SBarry Smith #define petscexceptioncaught_      petscexceptioncaught
3055fcb7f5SSatish Balay #endif
3155fcb7f5SSatish Balay 
3255fcb7f5SSatish Balay EXTERN_C_BEGIN
33*668f157eSBarry Smith static void (PETSC_STDCALL *f2)(MPI_Comm *comm,int*,const CHAR PETSC_MIXED_LEN(len1),const CHAR PETSC_MIXED_LEN(len2),const CHAR PETSC_MIXED_LEN(len3),PetscErrorCode*,PetscErrorType*,const CHAR PETSC_MIXED_LEN(len4),void*,PetscErrorCode* PETSC_END_LEN(len1) PETSC_END_LEN(len2) PETSC_END_LEN(len3) PETSC_END_LEN(len4));
3455fcb7f5SSatish Balay EXTERN_C_END
3555fcb7f5SSatish Balay 
3655fcb7f5SSatish Balay /* These are not extern C because they are passed into non-extern C user level functions */
37*668f157eSBarry Smith static PetscErrorCode ourerrorhandler(MPI_Comm comm,int line,const char *fun,const char *file,const char *dir,PetscErrorCode n,PetscErrorType p,const char *mess,void *ctx)
3855fcb7f5SSatish Balay {
3955fcb7f5SSatish Balay   PetscErrorCode ierr = 0;
4055fcb7f5SSatish Balay   size_t         len1,len2,len3,len4;
4155fcb7f5SSatish Balay   int            l1,l2,l3,l4;
4255fcb7f5SSatish Balay 
4355fcb7f5SSatish Balay   PetscStrlen(fun,&len1); l1 = (int)len1;
4455fcb7f5SSatish Balay   PetscStrlen(file,&len2);l2 = (int)len2;
4555fcb7f5SSatish Balay   PetscStrlen(dir,&len3);l3 = (int)len3;
4655fcb7f5SSatish Balay   PetscStrlen(mess,&len4);l4 = (int)len4;
4755fcb7f5SSatish Balay 
48a9943481SBarry Smith #if defined(PETSC_HAVE_FORTRAN_MIXED_STR_ARG)
49e32f2f54SBarry Smith   (*f2)(&comm,&line,fun,l1,file,l2,dir,l3,&n,&p,mess,l4,ctx,&ierr);
5055fcb7f5SSatish Balay #else
51e32f2f54SBarry Smith   (*f2)(&comm,&line,fun,file,dir,&n,&p,mess,ctx,&ierr,l1,l2,l3,l4);
5255fcb7f5SSatish Balay #endif
5355fcb7f5SSatish Balay   return ierr;
5455fcb7f5SSatish Balay }
5555fcb7f5SSatish Balay 
5655fcb7f5SSatish Balay EXTERN_C_BEGIN
5755fcb7f5SSatish Balay 
5855fcb7f5SSatish Balay /*
5955fcb7f5SSatish Balay         These are not usually called from Fortran but allow Fortran users
6055fcb7f5SSatish Balay    to transparently set these monitors from .F code
6155fcb7f5SSatish Balay 
6255fcb7f5SSatish Balay    functions, hence no STDCALL
6355fcb7f5SSatish Balay */
64*668f157eSBarry Smith void petsctracebackerrorhandler_(MPI_Comm *comm,int *line,const char *fun,const char *file,const char *dir,PetscErrorCode *n,PetscErrorType *p,const char *mess,void *ctx,PetscErrorCode *ierr)
6555fcb7f5SSatish Balay {
66e32f2f54SBarry Smith   *ierr = PetscTraceBackErrorHandler(*comm,*line,fun,file,dir,*n,*p,mess,ctx);
6755fcb7f5SSatish Balay }
6855fcb7f5SSatish Balay 
69*668f157eSBarry Smith void petscaborterrorhandler_(MPI_Comm *comm,int *line,const char *fun,const char *file,const char *dir,PetscErrorCode *n,PetscErrorType *p,const char *mess,void *ctx,PetscErrorCode *ierr)
7055fcb7f5SSatish Balay {
71e32f2f54SBarry Smith   *ierr = PetscAbortErrorHandler(*comm,*line,fun,file,dir,*n,*p,mess,ctx);
7255fcb7f5SSatish Balay }
7355fcb7f5SSatish Balay 
74*668f157eSBarry Smith void petscattachdebuggererrorhandler_(MPI_Comm *comm,int *line,const char *fun,const char *file,const char *dir,PetscErrorCode *n,PetscErrorType *p,const char *mess,void *ctx,PetscErrorCode *ierr)
7555fcb7f5SSatish Balay {
76e32f2f54SBarry Smith   *ierr = PetscAttachDebuggerErrorHandler(*comm,*line,fun,file,dir,*n,*p,mess,ctx);
7755fcb7f5SSatish Balay }
7855fcb7f5SSatish Balay 
79*668f157eSBarry Smith void petscemacsclienterrorhandler_(MPI_Comm *comm,int *line,const char *fun,const char *file,const char *dir,PetscErrorCode *n,PetscErrorType *p,const char *mess,void *ctx,PetscErrorCode *ierr)
8055fcb7f5SSatish Balay {
81e32f2f54SBarry Smith   *ierr = PetscEmacsClientErrorHandler(*comm,*line,fun,file,dir,*n,*p,mess,ctx);
8255fcb7f5SSatish Balay }
8355fcb7f5SSatish Balay 
84*668f157eSBarry Smith void petscignoreerrorhandler_(MPI_Comm *comm,int *line,const char *fun,const char *file,const char *dir,PetscErrorCode *n,PetscErrorType *p,const char *mess,void *ctx,PetscErrorCode *ierr)
8555fcb7f5SSatish Balay {
86e32f2f54SBarry Smith   *ierr = PetscIgnoreErrorHandler(*comm,*line,fun,file,dir,*n,*p,mess,ctx);
8755fcb7f5SSatish Balay }
8855fcb7f5SSatish Balay 
89*668f157eSBarry Smith void PETSC_STDCALL petscpusherrorhandler_(void (PETSC_STDCALL *handler)(MPI_Comm *comm,int*,const CHAR PETSC_MIXED_LEN(len1),const CHAR PETSC_MIXED_LEN(len2),const CHAR PETSC_MIXED_LEN(len3),PetscErrorCode*,PetscErrorType*,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)
9055fcb7f5SSatish Balay {
9155fcb7f5SSatish Balay   if ((void(*)(void))handler == (void(*)(void))petsctracebackerrorhandler_) {
9255fcb7f5SSatish Balay     *ierr = PetscPushErrorHandler(PetscTraceBackErrorHandler,0);
9355fcb7f5SSatish Balay   } else {
9455fcb7f5SSatish Balay     f2    = handler;
9555fcb7f5SSatish Balay     *ierr = PetscPushErrorHandler(ourerrorhandler,ctx);
9655fcb7f5SSatish Balay   }
9755fcb7f5SSatish Balay }
9855fcb7f5SSatish Balay 
99*668f157eSBarry Smith void PETSC_STDCALL petscerror_(MPI_Comm *comm,PetscErrorCode *number,int *line,PetscErrorType *p,CHAR message PETSC_MIXED_LEN(len),PetscErrorCode *ierr PETSC_END_LEN(len))
10055fcb7f5SSatish Balay {
10155fcb7f5SSatish Balay   char *t1;
10255fcb7f5SSatish Balay   FIXCHAR(message,len,t1);
103e32f2f54SBarry Smith   *ierr = PetscError(*comm,*line,0,0,0,*number,*p,t1);
10455fcb7f5SSatish Balay   FREECHAR(message,t1);
10555fcb7f5SSatish Balay }
10655fcb7f5SSatish Balay 
10716bf3c38SBarry Smith void PETSC_STDCALL petscrealview_(PetscInt *n,PetscReal *d,PetscViewer *viwer,PetscErrorCode *ierr)
10855fcb7f5SSatish Balay {
10916bf3c38SBarry Smith   PetscViewer v;
11016bf3c38SBarry Smith   PetscPatchDefaultViewers_Fortran(viwer,v);
11116bf3c38SBarry Smith   *ierr = PetscRealView(*n,d,v);
11255fcb7f5SSatish Balay }
11355fcb7f5SSatish Balay 
11416bf3c38SBarry Smith void PETSC_STDCALL petscintview_(PetscInt *n,PetscInt *d,PetscViewer *viwer,PetscErrorCode *ierr)
11555fcb7f5SSatish Balay {
11616bf3c38SBarry Smith   PetscViewer v;
11716bf3c38SBarry Smith   PetscPatchDefaultViewers_Fortran(viwer,v);
11816bf3c38SBarry Smith   *ierr = PetscIntView(*n,d,v);
11916bf3c38SBarry Smith }
12016bf3c38SBarry Smith 
12121dd7e22SBarry Smith void PETSC_STDCALL petscerroriscatchable_(PetscErrorCode *ierr,PetscTruth *is)
12221dd7e22SBarry Smith {
12321dd7e22SBarry Smith   *is = PetscErrorIsCatchable(*ierr);
12421dd7e22SBarry Smith }
12521dd7e22SBarry Smith 
12621dd7e22SBarry Smith void PETSC_STDCALL petscexceptionvalue_(PetscErrorCode *ierr,PetscTruth *is)
12721dd7e22SBarry Smith {
12821dd7e22SBarry Smith   *is = PetscExceptionValue(*ierr);
12921dd7e22SBarry Smith }
13021dd7e22SBarry Smith 
13121dd7e22SBarry Smith void PETSC_STDCALL petscexceptioncaught_(PetscErrorCode *ierr,PetscErrorCode *zierr,PetscTruth *is)
13221dd7e22SBarry Smith {
13321dd7e22SBarry Smith   *is = PetscExceptionCaught(*ierr,*zierr);
13421dd7e22SBarry Smith }
13521dd7e22SBarry Smith 
13616bf3c38SBarry Smith #if defined(PETSC_HAVE_FORTRAN_CAPS)
13716bf3c38SBarry Smith #define petscscalarview_             PETSCSCALARVIEW
13816bf3c38SBarry Smith #elif !defined(PETSC_HAVE_FORTRAN_UNDERSCORE)
13916bf3c38SBarry Smith #define petscscalarview_             petscscalarview
14016bf3c38SBarry Smith #endif
14116bf3c38SBarry Smith 
14216bf3c38SBarry Smith void PETSC_STDCALL petscscalarview_(PetscInt *n,PetscScalar *d,PetscViewer *viwer,PetscErrorCode *ierr)
14316bf3c38SBarry Smith {
14416bf3c38SBarry Smith   PetscViewer v;
14516bf3c38SBarry Smith   PetscPatchDefaultViewers_Fortran(viwer,v);
14616bf3c38SBarry Smith   *ierr = PetscScalarView(*n,d,v);
14755fcb7f5SSatish Balay }
14855fcb7f5SSatish Balay 
14955fcb7f5SSatish Balay EXTERN_C_END
150