xref: /petsc/src/sys/error/ftn-custom/zerrf.c (revision 16bf3c38127ebc85ec7b0555e3aa5e69d51a6fbb)
155fcb7f5SSatish Balay #include "zpetsc.h"
255fcb7f5SSatish Balay #include "petsc.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
1455fcb7f5SSatish Balay #elif !defined(PETSC_HAVE_FORTRAN_UNDERSCORE)
1555fcb7f5SSatish Balay #define petscpusherrorhandler_   petscpusherrorhandler
1655fcb7f5SSatish Balay #define petsctracebackerrorhandler_   petsctracebackerrorhandler
1755fcb7f5SSatish Balay #define petscaborterrorhandler_       petscaborterrorhandler
1855fcb7f5SSatish Balay #define petscignoreerrorhandler_      petscignoreerrorhandler
1955fcb7f5SSatish Balay #define petscemacsclienterrorhandler_ petscemacsclienterrorhandler
2055fcb7f5SSatish Balay #define petscattachdebuggererrorhandler_   petscattachdebuggererrorhandler
2155fcb7f5SSatish Balay #define petscerror_                petscerror
2255fcb7f5SSatish Balay #define petscrealview_             petscrealview
2355fcb7f5SSatish Balay #define petscintview_              petscintview
2455fcb7f5SSatish Balay #endif
2555fcb7f5SSatish Balay 
2655fcb7f5SSatish Balay EXTERN_C_BEGIN
2755fcb7f5SSatish 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));
2855fcb7f5SSatish Balay EXTERN_C_END
2955fcb7f5SSatish Balay 
3055fcb7f5SSatish Balay /* These are not extern C because they are passed into non-extern C user level functions */
3155fcb7f5SSatish Balay static PetscErrorCode ourerrorhandler(int line,const char *fun,const char *file,const char *dir,int n,int p,const char *mess,void *ctx)
3255fcb7f5SSatish Balay {
3355fcb7f5SSatish Balay   PetscErrorCode ierr = 0;
3455fcb7f5SSatish Balay   size_t len1,len2,len3,len4;
3555fcb7f5SSatish Balay   int l1,l2,l3,l4;
3655fcb7f5SSatish Balay 
3755fcb7f5SSatish Balay   PetscStrlen(fun,&len1); l1 = (int)len1;
3855fcb7f5SSatish Balay   PetscStrlen(file,&len2);l2 = (int)len2;
3955fcb7f5SSatish Balay   PetscStrlen(dir,&len3);l3 = (int)len3;
4055fcb7f5SSatish Balay   PetscStrlen(mess,&len4);l4 = (int)len4;
4155fcb7f5SSatish Balay 
4255fcb7f5SSatish Balay #if defined(PETSC_USES_CPTOFCD)
4355fcb7f5SSatish Balay  {
4455fcb7f5SSatish Balay    CHAR fun_c,file_c,dir_c,mess_c;
4555fcb7f5SSatish Balay 
4655fcb7f5SSatish Balay    fun_c  = _cptofcd(fun,len1);
4755fcb7f5SSatish Balay    file_c = _cptofcd(file,len2);
4855fcb7f5SSatish Balay    dir_c  = _cptofcd(dir,len3);
4955fcb7f5SSatish Balay    mess_c = _cptofcd(mess,len4);
5055fcb7f5SSatish Balay    (*f2)(&line,fun_c,file_c,dir_c,&n,&p,mess_c,ctx,&ierr,len1,len2,len3,len4);
5155fcb7f5SSatish Balay 
5255fcb7f5SSatish Balay  }
5355fcb7f5SSatish Balay #elif defined(PETSC_HAVE_FORTRAN_MIXED_STR_ARG)
5455fcb7f5SSatish Balay   (*f2)(&line,fun,l1,file,l2,dir,l3,&n,&p,mess,l4,ctx,&ierr);
5555fcb7f5SSatish Balay #else
5655fcb7f5SSatish Balay   (*f2)(&line,fun,file,dir,&n,&p,mess,ctx,&ierr,l1,l2,l3,l4);
5755fcb7f5SSatish Balay #endif
5855fcb7f5SSatish Balay   return ierr;
5955fcb7f5SSatish Balay }
6055fcb7f5SSatish Balay 
6155fcb7f5SSatish Balay EXTERN_C_BEGIN
6255fcb7f5SSatish Balay 
6355fcb7f5SSatish Balay /*
6455fcb7f5SSatish Balay         These are not usually called from Fortran but allow Fortran users
6555fcb7f5SSatish Balay    to transparently set these monitors from .F code
6655fcb7f5SSatish Balay 
6755fcb7f5SSatish Balay    functions, hence no STDCALL
6855fcb7f5SSatish Balay */
6955fcb7f5SSatish 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)
7055fcb7f5SSatish Balay {
7155fcb7f5SSatish Balay   *ierr = PetscTraceBackErrorHandler(*line,fun,file,dir,*n,*p,mess,ctx);
7255fcb7f5SSatish Balay }
7355fcb7f5SSatish Balay 
7455fcb7f5SSatish 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)
7555fcb7f5SSatish Balay {
7655fcb7f5SSatish Balay   *ierr = PetscAbortErrorHandler(*line,fun,file,dir,*n,*p,mess,ctx);
7755fcb7f5SSatish Balay }
7855fcb7f5SSatish Balay 
7955fcb7f5SSatish 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)
8055fcb7f5SSatish Balay {
8155fcb7f5SSatish Balay   *ierr = PetscAttachDebuggerErrorHandler(*line,fun,file,dir,*n,*p,mess,ctx);
8255fcb7f5SSatish Balay }
8355fcb7f5SSatish Balay 
8455fcb7f5SSatish 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)
8555fcb7f5SSatish Balay {
8655fcb7f5SSatish Balay   *ierr = PetscEmacsClientErrorHandler(*line,fun,file,dir,*n,*p,mess,ctx);
8755fcb7f5SSatish Balay }
8855fcb7f5SSatish Balay 
8955fcb7f5SSatish 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)
9055fcb7f5SSatish Balay {
9155fcb7f5SSatish Balay   *ierr = PetscIgnoreErrorHandler(*line,fun,file,dir,*n,*p,mess,ctx);
9255fcb7f5SSatish Balay }
9355fcb7f5SSatish Balay 
9455fcb7f5SSatish 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)
9555fcb7f5SSatish Balay {
9655fcb7f5SSatish Balay   if ((void(*)(void))handler == (void(*)(void))petsctracebackerrorhandler_) {
9755fcb7f5SSatish Balay     *ierr = PetscPushErrorHandler(PetscTraceBackErrorHandler,0);
9855fcb7f5SSatish Balay   } else {
9955fcb7f5SSatish Balay     f2    = handler;
10055fcb7f5SSatish Balay     *ierr = PetscPushErrorHandler(ourerrorhandler,ctx);
10155fcb7f5SSatish Balay   }
10255fcb7f5SSatish Balay }
10355fcb7f5SSatish Balay 
10455fcb7f5SSatish Balay void PETSC_STDCALL petscerror_(int *number,int *p,CHAR message PETSC_MIXED_LEN(len),
10555fcb7f5SSatish Balay                                PetscErrorCode *ierr PETSC_END_LEN(len))
10655fcb7f5SSatish Balay {
10755fcb7f5SSatish Balay   char *t1;
10855fcb7f5SSatish Balay   FIXCHAR(message,len,t1);
10955fcb7f5SSatish Balay   *ierr = PetscError(-1,0,0,0,*number,*p,t1);
11055fcb7f5SSatish Balay   FREECHAR(message,t1);
11155fcb7f5SSatish Balay }
11255fcb7f5SSatish Balay 
113*16bf3c38SBarry Smith void PETSC_STDCALL petscrealview_(PetscInt *n,PetscReal *d,PetscViewer *viwer,PetscErrorCode *ierr)
11455fcb7f5SSatish Balay {
115*16bf3c38SBarry Smith   PetscViewer v;
116*16bf3c38SBarry Smith   PetscPatchDefaultViewers_Fortran(viwer,v);
117*16bf3c38SBarry Smith   *ierr = PetscRealView(*n,d,v);
11855fcb7f5SSatish Balay }
11955fcb7f5SSatish Balay 
120*16bf3c38SBarry Smith void PETSC_STDCALL petscintview_(PetscInt *n,PetscInt *d,PetscViewer *viwer,PetscErrorCode *ierr)
12155fcb7f5SSatish Balay {
122*16bf3c38SBarry Smith   PetscViewer v;
123*16bf3c38SBarry Smith   PetscPatchDefaultViewers_Fortran(viwer,v);
124*16bf3c38SBarry Smith   *ierr = PetscIntView(*n,d,v);
125*16bf3c38SBarry Smith }
126*16bf3c38SBarry Smith 
127*16bf3c38SBarry Smith #if defined(PETSC_HAVE_FORTRAN_CAPS)
128*16bf3c38SBarry Smith #define petscscalarview_             PETSCSCALARVIEW
129*16bf3c38SBarry Smith #elif !defined(PETSC_HAVE_FORTRAN_UNDERSCORE)
130*16bf3c38SBarry Smith #define petscscalarview_             petscscalarview
131*16bf3c38SBarry Smith #endif
132*16bf3c38SBarry Smith 
133*16bf3c38SBarry Smith void PETSC_STDCALL petscscalarview_(PetscInt *n,PetscScalar *d,PetscViewer *viwer,PetscErrorCode *ierr)
134*16bf3c38SBarry Smith {
135*16bf3c38SBarry Smith   PetscViewer v;
136*16bf3c38SBarry Smith   PetscPatchDefaultViewers_Fortran(viwer,v);
137*16bf3c38SBarry Smith   *ierr = PetscScalarView(*n,d,v);
13855fcb7f5SSatish Balay }
13955fcb7f5SSatish Balay 
14055fcb7f5SSatish Balay EXTERN_C_END
141