xref: /petsc/src/sys/error/ftn-custom/zerrf.c (revision b45d2f2cb7e031d9c0de5873eca80614ca7b863b)
1*b45d2f2cSJed Brown #include <petsc-private/fortranimpl.h>
2c6db04a5SJed Brown #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
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
27668f157eSBarry 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));
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 */
31668f157eSBarry 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)
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 
42a9943481SBarry Smith #if defined(PETSC_HAVE_FORTRAN_MIXED_STR_ARG)
43e32f2f54SBarry Smith   (*f2)(&comm,&line,fun,l1,file,l2,dir,l3,&n,&p,mess,l4,ctx,&ierr);
4455fcb7f5SSatish Balay #else
45e32f2f54SBarry Smith   (*f2)(&comm,&line,fun,file,dir,&n,&p,mess,ctx,&ierr,l1,l2,l3,l4);
4655fcb7f5SSatish Balay #endif
4755fcb7f5SSatish Balay   return ierr;
4855fcb7f5SSatish Balay }
4955fcb7f5SSatish Balay 
5055fcb7f5SSatish Balay EXTERN_C_BEGIN
5155fcb7f5SSatish Balay 
5255fcb7f5SSatish Balay /*
5355fcb7f5SSatish Balay         These are not usually called from Fortran but allow Fortran users
5455fcb7f5SSatish Balay    to transparently set these monitors from .F code
5555fcb7f5SSatish Balay 
5655fcb7f5SSatish Balay    functions, hence no STDCALL
5755fcb7f5SSatish Balay */
58668f157eSBarry 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)
5955fcb7f5SSatish Balay {
60e32f2f54SBarry Smith   *ierr = PetscTraceBackErrorHandler(*comm,*line,fun,file,dir,*n,*p,mess,ctx);
6155fcb7f5SSatish Balay }
6255fcb7f5SSatish Balay 
63668f157eSBarry 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)
6455fcb7f5SSatish Balay {
65e32f2f54SBarry Smith   *ierr = PetscAbortErrorHandler(*comm,*line,fun,file,dir,*n,*p,mess,ctx);
6655fcb7f5SSatish Balay }
6755fcb7f5SSatish Balay 
68668f157eSBarry 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)
6955fcb7f5SSatish Balay {
70e32f2f54SBarry Smith   *ierr = PetscAttachDebuggerErrorHandler(*comm,*line,fun,file,dir,*n,*p,mess,ctx);
7155fcb7f5SSatish Balay }
7255fcb7f5SSatish Balay 
73668f157eSBarry 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)
7455fcb7f5SSatish Balay {
75e32f2f54SBarry Smith   *ierr = PetscEmacsClientErrorHandler(*comm,*line,fun,file,dir,*n,*p,mess,ctx);
7655fcb7f5SSatish Balay }
7755fcb7f5SSatish Balay 
78668f157eSBarry 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)
7955fcb7f5SSatish Balay {
80e32f2f54SBarry Smith   *ierr = PetscIgnoreErrorHandler(*comm,*line,fun,file,dir,*n,*p,mess,ctx);
8155fcb7f5SSatish Balay }
8255fcb7f5SSatish Balay 
83668f157eSBarry 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)
8455fcb7f5SSatish Balay {
8555fcb7f5SSatish Balay   if ((void(*)(void))handler == (void(*)(void))petsctracebackerrorhandler_) {
8655fcb7f5SSatish Balay     *ierr = PetscPushErrorHandler(PetscTraceBackErrorHandler,0);
8755fcb7f5SSatish Balay   } else {
8855fcb7f5SSatish Balay     f2    = handler;
8955fcb7f5SSatish Balay     *ierr = PetscPushErrorHandler(ourerrorhandler,ctx);
9055fcb7f5SSatish Balay   }
9155fcb7f5SSatish Balay }
9255fcb7f5SSatish Balay 
93668f157eSBarry 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))
9455fcb7f5SSatish Balay {
9555fcb7f5SSatish Balay   char *t1;
9655fcb7f5SSatish Balay   FIXCHAR(message,len,t1);
97e32f2f54SBarry Smith   *ierr = PetscError(*comm,*line,0,0,0,*number,*p,t1);
9855fcb7f5SSatish Balay   FREECHAR(message,t1);
9955fcb7f5SSatish Balay }
10055fcb7f5SSatish Balay 
10116bf3c38SBarry Smith void PETSC_STDCALL petscrealview_(PetscInt *n,PetscReal *d,PetscViewer *viwer,PetscErrorCode *ierr)
10255fcb7f5SSatish Balay {
10316bf3c38SBarry Smith   PetscViewer v;
10416bf3c38SBarry Smith   PetscPatchDefaultViewers_Fortran(viwer,v);
10516bf3c38SBarry Smith   *ierr = PetscRealView(*n,d,v);
10655fcb7f5SSatish Balay }
10755fcb7f5SSatish Balay 
10816bf3c38SBarry Smith void PETSC_STDCALL petscintview_(PetscInt *n,PetscInt *d,PetscViewer *viwer,PetscErrorCode *ierr)
10955fcb7f5SSatish Balay {
11016bf3c38SBarry Smith   PetscViewer v;
11116bf3c38SBarry Smith   PetscPatchDefaultViewers_Fortran(viwer,v);
11216bf3c38SBarry Smith   *ierr = PetscIntView(*n,d,v);
11316bf3c38SBarry Smith }
11416bf3c38SBarry Smith 
11516bf3c38SBarry Smith #if defined(PETSC_HAVE_FORTRAN_CAPS)
11616bf3c38SBarry Smith #define petscscalarview_             PETSCSCALARVIEW
11716bf3c38SBarry Smith #elif !defined(PETSC_HAVE_FORTRAN_UNDERSCORE)
11816bf3c38SBarry Smith #define petscscalarview_             petscscalarview
11916bf3c38SBarry Smith #endif
12016bf3c38SBarry Smith 
12116bf3c38SBarry Smith void PETSC_STDCALL petscscalarview_(PetscInt *n,PetscScalar *d,PetscViewer *viwer,PetscErrorCode *ierr)
12216bf3c38SBarry Smith {
12316bf3c38SBarry Smith   PetscViewer v;
12416bf3c38SBarry Smith   PetscPatchDefaultViewers_Fortran(viwer,v);
12516bf3c38SBarry Smith   *ierr = PetscScalarView(*n,d,v);
12655fcb7f5SSatish Balay }
12755fcb7f5SSatish Balay 
12855fcb7f5SSatish Balay EXTERN_C_END
129