xref: /petsc/src/sys/error/ftn-custom/zerrf.c (revision e30817921842c4dd5c358b2c1cdabab82faf207d)
1af0996ceSBarry Smith #include <petsc/private/fortranimpl.h>
2c6db04a5SJed Brown #include <petscsys.h>
3665c2dedSJed Brown #include <petscviewer.h>
455fcb7f5SSatish Balay 
555fcb7f5SSatish Balay #if defined(PETSC_HAVE_FORTRAN_CAPS)
655fcb7f5SSatish Balay #define petscpusherrorhandler_        PETSCPUSHERRORHANDLER
755fcb7f5SSatish Balay #define petsctracebackerrorhandler_   PETSCTRACEBACKERRORHANDLER
855fcb7f5SSatish Balay #define petscaborterrorhandler_       PETSCABORTERRORHANDLER
955fcb7f5SSatish Balay #define petscignoreerrorhandler_      PETSCIGNOREERRORHANDLER
1055fcb7f5SSatish Balay #define petscemacsclienterrorhandler_ PETSCEMACSCLIENTERRORHANDLER
1155fcb7f5SSatish Balay #define petscattachdebuggererrorhandler_   PETSCATTACHDEBUGGERERRORHANDLER
1255fcb7f5SSatish Balay #define petscerror_                PETSCERROR
1355fcb7f5SSatish Balay #define petscrealview_             PETSCREALVIEW
1455fcb7f5SSatish Balay #define petscintview_              PETSCINTVIEW
1555fcb7f5SSatish Balay #elif !defined(PETSC_HAVE_FORTRAN_UNDERSCORE)
1655fcb7f5SSatish Balay #define petscpusherrorhandler_   petscpusherrorhandler
1755fcb7f5SSatish Balay #define petsctracebackerrorhandler_   petsctracebackerrorhandler
1855fcb7f5SSatish Balay #define petscaborterrorhandler_       petscaborterrorhandler
1955fcb7f5SSatish Balay #define petscignoreerrorhandler_      petscignoreerrorhandler
2055fcb7f5SSatish Balay #define petscemacsclienterrorhandler_ petscemacsclienterrorhandler
2155fcb7f5SSatish Balay #define petscattachdebuggererrorhandler_   petscattachdebuggererrorhandler
2255fcb7f5SSatish Balay #define petscerror_                petscerror
2355fcb7f5SSatish Balay #define petscrealview_             petscrealview
2455fcb7f5SSatish Balay #define petscintview_              petscintview
2555fcb7f5SSatish Balay #endif
2655fcb7f5SSatish Balay 
27390e1bf2SBarry Smith static void (PETSC_STDCALL *f2)(MPI_Comm *comm,int*,const char* PETSC_MIXED_LEN(len1),const char* PETSC_MIXED_LEN(len2),PetscErrorCode*,PetscErrorType*,const char* PETSC_MIXED_LEN(len3),void*,PetscErrorCode* PETSC_END_LEN(len1) PETSC_END_LEN(len2) PETSC_END_LEN(len3));
2855fcb7f5SSatish Balay 
2955fcb7f5SSatish Balay /* These are not extern C because they are passed into non-extern C user level functions */
30efca3c55SSatish Balay static PetscErrorCode ourerrorhandler(MPI_Comm comm,int line,const char *fun,const char *file,PetscErrorCode n,PetscErrorType p,const char *mess,void *ctx)
3155fcb7f5SSatish Balay {
3255fcb7f5SSatish Balay   PetscErrorCode ierr = 0;
33efca3c55SSatish Balay   size_t         len1,len2,len3;
34efca3c55SSatish Balay   int            l1,l2,l3;
3555fcb7f5SSatish Balay 
3655fcb7f5SSatish Balay   PetscStrlen(fun,&len1); l1 = (int)len1;
3755fcb7f5SSatish Balay   PetscStrlen(file,&len2);l2 = (int)len2;
38efca3c55SSatish Balay   PetscStrlen(mess,&len3);l3 = (int)len3;
3955fcb7f5SSatish Balay 
40a9943481SBarry Smith #if defined(PETSC_HAVE_FORTRAN_MIXED_STR_ARG)
41efca3c55SSatish Balay   (*f2)(&comm,&line,fun,l1,file,l2,&n,&p,mess,l3,ctx,&ierr);
4255fcb7f5SSatish Balay #else
43efca3c55SSatish Balay   (*f2)(&comm,&line,fun,file,&n,&p,mess,ctx,&ierr,l1,l2,l3);
4455fcb7f5SSatish Balay #endif
4555fcb7f5SSatish Balay   return ierr;
4655fcb7f5SSatish Balay }
4755fcb7f5SSatish Balay 
4855fcb7f5SSatish Balay /*
4955fcb7f5SSatish Balay         These are not usually called from Fortran but allow Fortran users
5055fcb7f5SSatish Balay    to transparently set these monitors from .F code
5155fcb7f5SSatish Balay 
5255fcb7f5SSatish Balay    functions, hence no STDCALL
5355fcb7f5SSatish Balay */
54efca3c55SSatish Balay PETSC_EXTERN void petsctracebackerrorhandler_(MPI_Comm *comm,int *line,const char *fun,const char *file,PetscErrorCode *n,PetscErrorType *p,const char *mess,void *ctx,PetscErrorCode *ierr)
5555fcb7f5SSatish Balay {
56efca3c55SSatish Balay   *ierr = PetscTraceBackErrorHandler(*comm,*line,fun,file,*n,*p,mess,ctx);
5755fcb7f5SSatish Balay }
5855fcb7f5SSatish Balay 
59efca3c55SSatish Balay PETSC_EXTERN void petscaborterrorhandler_(MPI_Comm *comm,int *line,const char *fun,const char *file,PetscErrorCode *n,PetscErrorType *p,const char *mess,void *ctx,PetscErrorCode *ierr)
6055fcb7f5SSatish Balay {
61efca3c55SSatish Balay   *ierr = PetscAbortErrorHandler(*comm,*line,fun,file,*n,*p,mess,ctx);
6255fcb7f5SSatish Balay }
6355fcb7f5SSatish Balay 
64efca3c55SSatish Balay PETSC_EXTERN void petscattachdebuggererrorhandler_(MPI_Comm *comm,int *line,const char *fun,const char *file,PetscErrorCode *n,PetscErrorType *p,const char *mess,void *ctx,PetscErrorCode *ierr)
6555fcb7f5SSatish Balay {
66efca3c55SSatish Balay   *ierr = PetscAttachDebuggerErrorHandler(*comm,*line,fun,file,*n,*p,mess,ctx);
6755fcb7f5SSatish Balay }
6855fcb7f5SSatish Balay 
69efca3c55SSatish Balay PETSC_EXTERN void petscemacsclienterrorhandler_(MPI_Comm *comm,int *line,const char *fun,const char *file,PetscErrorCode *n,PetscErrorType *p,const char *mess,void *ctx,PetscErrorCode *ierr)
7055fcb7f5SSatish Balay {
71efca3c55SSatish Balay   *ierr = PetscEmacsClientErrorHandler(*comm,*line,fun,file,*n,*p,mess,ctx);
7255fcb7f5SSatish Balay }
7355fcb7f5SSatish Balay 
74efca3c55SSatish Balay PETSC_EXTERN void petscignoreerrorhandler_(MPI_Comm *comm,int *line,const char *fun,const char *file,PetscErrorCode *n,PetscErrorType *p,const char *mess,void *ctx,PetscErrorCode *ierr)
7555fcb7f5SSatish Balay {
76efca3c55SSatish Balay   *ierr = PetscIgnoreErrorHandler(*comm,*line,fun,file,*n,*p,mess,ctx);
7755fcb7f5SSatish Balay }
7855fcb7f5SSatish Balay 
79390e1bf2SBarry Smith PETSC_EXTERN void PETSC_STDCALL petscpusherrorhandler_(void (PETSC_STDCALL *handler)(MPI_Comm *comm,int*,const char* PETSC_MIXED_LEN(len1),const char* PETSC_MIXED_LEN(len2),PetscErrorCode*,PetscErrorType*,const char* PETSC_MIXED_LEN(len3),void*,PetscErrorCode* PETSC_END_LEN(len1) PETSC_END_LEN(len2) PETSC_END_LEN(len3)),void *ctx,PetscErrorCode *ierr)
8055fcb7f5SSatish Balay {
81a297a907SKarl Rupp   if ((void(*)(void))handler == (void(*)(void))petsctracebackerrorhandler_) *ierr = PetscPushErrorHandler(PetscTraceBackErrorHandler,0);
82a297a907SKarl Rupp   else {
8355fcb7f5SSatish Balay     f2    = handler;
8455fcb7f5SSatish Balay     *ierr = PetscPushErrorHandler(ourerrorhandler,ctx);
8555fcb7f5SSatish Balay   }
8655fcb7f5SSatish Balay }
8755fcb7f5SSatish Balay 
88*e3081792SBarry Smith PETSC_EXTERN void PETSC_STDCALL petscerror_(MPI_Fint *comm,PetscErrorCode *number,PetscErrorType *p,char* message PETSC_MIXED_LEN(len) PETSC_END_LEN(len))
8955fcb7f5SSatish Balay {
90*e3081792SBarry Smith   PetscErrorCode nierr,*ierr = &nierr;
9155fcb7f5SSatish Balay   char *t1;
9255fcb7f5SSatish Balay   FIXCHAR(message,len,t1);
93*e3081792SBarry Smith   nierr = PetscError(MPI_Comm_f2c(*(comm)),0,NULL,NULL,*number,*p,t1);
9455fcb7f5SSatish Balay   FREECHAR(message,t1);
9555fcb7f5SSatish Balay }
9655fcb7f5SSatish Balay 
978cc058d9SJed Brown PETSC_EXTERN void PETSC_STDCALL petscrealview_(PetscInt *n,PetscReal *d,PetscViewer *viwer,PetscErrorCode *ierr)
9855fcb7f5SSatish Balay {
9916bf3c38SBarry Smith   PetscViewer v;
10016bf3c38SBarry Smith   PetscPatchDefaultViewers_Fortran(viwer,v);
10116bf3c38SBarry Smith   *ierr = PetscRealView(*n,d,v);
10255fcb7f5SSatish Balay }
10355fcb7f5SSatish Balay 
1048cc058d9SJed Brown PETSC_EXTERN void PETSC_STDCALL petscintview_(PetscInt *n,PetscInt *d,PetscViewer *viwer,PetscErrorCode *ierr)
10555fcb7f5SSatish Balay {
10616bf3c38SBarry Smith   PetscViewer v;
10716bf3c38SBarry Smith   PetscPatchDefaultViewers_Fortran(viwer,v);
10816bf3c38SBarry Smith   *ierr = PetscIntView(*n,d,v);
10916bf3c38SBarry Smith }
11016bf3c38SBarry Smith 
11116bf3c38SBarry Smith #if defined(PETSC_HAVE_FORTRAN_CAPS)
11216bf3c38SBarry Smith #define petscscalarview_             PETSCSCALARVIEW
11316bf3c38SBarry Smith #elif !defined(PETSC_HAVE_FORTRAN_UNDERSCORE)
11416bf3c38SBarry Smith #define petscscalarview_             petscscalarview
11516bf3c38SBarry Smith #endif
11616bf3c38SBarry Smith 
1178cc058d9SJed Brown PETSC_EXTERN void PETSC_STDCALL petscscalarview_(PetscInt *n,PetscScalar *d,PetscViewer *viwer,PetscErrorCode *ierr)
11816bf3c38SBarry Smith {
11916bf3c38SBarry Smith   PetscViewer v;
12016bf3c38SBarry Smith   PetscPatchDefaultViewers_Fortran(viwer,v);
12116bf3c38SBarry Smith   *ierr = PetscScalarView(*n,d,v);
12255fcb7f5SSatish Balay }
123