xref: /petsc/src/sys/error/ftn-custom/zerrf.c (revision 55fcb7f56954f81e13f188954f526d43b66569ef)
1*55fcb7f5SSatish Balay #include "zpetsc.h"
2*55fcb7f5SSatish Balay #include "petsc.h"
3*55fcb7f5SSatish Balay 
4*55fcb7f5SSatish Balay #if defined(PETSC_HAVE_FORTRAN_CAPS)
5*55fcb7f5SSatish Balay #define petscpusherrorhandler_        PETSCPUSHERRORHANDLER
6*55fcb7f5SSatish Balay #define petsctracebackerrorhandler_   PETSCTRACEBACKERRORHANDLER
7*55fcb7f5SSatish Balay #define petscaborterrorhandler_       PETSCABORTERRORHANDLER
8*55fcb7f5SSatish Balay #define petscignoreerrorhandler_      PETSCIGNOREERRORHANDLER
9*55fcb7f5SSatish Balay #define petscemacsclienterrorhandler_ PETSCEMACSCLIENTERRORHANDLER
10*55fcb7f5SSatish Balay #define petscattachdebuggererrorhandler_   PETSCATTACHDEBUGGERERRORHANDLER
11*55fcb7f5SSatish Balay #define petscerror_                PETSCERROR
12*55fcb7f5SSatish Balay #define petscrealview_             PETSCREALVIEW
13*55fcb7f5SSatish Balay #define petscintview_              PETSCINTVIEW
14*55fcb7f5SSatish Balay #elif !defined(PETSC_HAVE_FORTRAN_UNDERSCORE)
15*55fcb7f5SSatish Balay #define petscpusherrorhandler_   petscpusherrorhandler
16*55fcb7f5SSatish Balay #define petsctracebackerrorhandler_   petsctracebackerrorhandler
17*55fcb7f5SSatish Balay #define petscaborterrorhandler_       petscaborterrorhandler
18*55fcb7f5SSatish Balay #define petscignoreerrorhandler_      petscignoreerrorhandler
19*55fcb7f5SSatish Balay #define petscemacsclienterrorhandler_ petscemacsclienterrorhandler
20*55fcb7f5SSatish Balay #define petscattachdebuggererrorhandler_   petscattachdebuggererrorhandler
21*55fcb7f5SSatish Balay #define petscerror_                petscerror
22*55fcb7f5SSatish Balay #define petscrealview_             petscrealview
23*55fcb7f5SSatish Balay #define petscintview_              petscintview
24*55fcb7f5SSatish Balay #endif
25*55fcb7f5SSatish Balay 
26*55fcb7f5SSatish Balay EXTERN_C_BEGIN
27*55fcb7f5SSatish 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));
28*55fcb7f5SSatish Balay EXTERN_C_END
29*55fcb7f5SSatish Balay 
30*55fcb7f5SSatish Balay /* These are not extern C because they are passed into non-extern C user level functions */
31*55fcb7f5SSatish Balay static PetscErrorCode ourerrorhandler(int line,const char *fun,const char *file,const char *dir,int n,int p,const char *mess,void *ctx)
32*55fcb7f5SSatish Balay {
33*55fcb7f5SSatish Balay   PetscErrorCode ierr = 0;
34*55fcb7f5SSatish Balay   size_t len1,len2,len3,len4;
35*55fcb7f5SSatish Balay   int l1,l2,l3,l4;
36*55fcb7f5SSatish Balay 
37*55fcb7f5SSatish Balay   PetscStrlen(fun,&len1); l1 = (int)len1;
38*55fcb7f5SSatish Balay   PetscStrlen(file,&len2);l2 = (int)len2;
39*55fcb7f5SSatish Balay   PetscStrlen(dir,&len3);l3 = (int)len3;
40*55fcb7f5SSatish Balay   PetscStrlen(mess,&len4);l4 = (int)len4;
41*55fcb7f5SSatish Balay 
42*55fcb7f5SSatish Balay #if defined(PETSC_USES_CPTOFCD)
43*55fcb7f5SSatish Balay  {
44*55fcb7f5SSatish Balay    CHAR fun_c,file_c,dir_c,mess_c;
45*55fcb7f5SSatish Balay 
46*55fcb7f5SSatish Balay    fun_c  = _cptofcd(fun,len1);
47*55fcb7f5SSatish Balay    file_c = _cptofcd(file,len2);
48*55fcb7f5SSatish Balay    dir_c  = _cptofcd(dir,len3);
49*55fcb7f5SSatish Balay    mess_c = _cptofcd(mess,len4);
50*55fcb7f5SSatish Balay    (*f2)(&line,fun_c,file_c,dir_c,&n,&p,mess_c,ctx,&ierr,len1,len2,len3,len4);
51*55fcb7f5SSatish Balay 
52*55fcb7f5SSatish Balay  }
53*55fcb7f5SSatish Balay #elif defined(PETSC_HAVE_FORTRAN_MIXED_STR_ARG)
54*55fcb7f5SSatish Balay   (*f2)(&line,fun,l1,file,l2,dir,l3,&n,&p,mess,l4,ctx,&ierr);
55*55fcb7f5SSatish Balay #else
56*55fcb7f5SSatish Balay   (*f2)(&line,fun,file,dir,&n,&p,mess,ctx,&ierr,l1,l2,l3,l4);
57*55fcb7f5SSatish Balay #endif
58*55fcb7f5SSatish Balay   return ierr;
59*55fcb7f5SSatish Balay }
60*55fcb7f5SSatish Balay 
61*55fcb7f5SSatish Balay EXTERN_C_BEGIN
62*55fcb7f5SSatish Balay 
63*55fcb7f5SSatish Balay /*
64*55fcb7f5SSatish Balay         These are not usually called from Fortran but allow Fortran users
65*55fcb7f5SSatish Balay    to transparently set these monitors from .F code
66*55fcb7f5SSatish Balay 
67*55fcb7f5SSatish Balay    functions, hence no STDCALL
68*55fcb7f5SSatish Balay */
69*55fcb7f5SSatish 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)
70*55fcb7f5SSatish Balay {
71*55fcb7f5SSatish Balay   *ierr = PetscTraceBackErrorHandler(*line,fun,file,dir,*n,*p,mess,ctx);
72*55fcb7f5SSatish Balay }
73*55fcb7f5SSatish Balay 
74*55fcb7f5SSatish 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)
75*55fcb7f5SSatish Balay {
76*55fcb7f5SSatish Balay   *ierr = PetscAbortErrorHandler(*line,fun,file,dir,*n,*p,mess,ctx);
77*55fcb7f5SSatish Balay }
78*55fcb7f5SSatish Balay 
79*55fcb7f5SSatish 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)
80*55fcb7f5SSatish Balay {
81*55fcb7f5SSatish Balay   *ierr = PetscAttachDebuggerErrorHandler(*line,fun,file,dir,*n,*p,mess,ctx);
82*55fcb7f5SSatish Balay }
83*55fcb7f5SSatish Balay 
84*55fcb7f5SSatish 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)
85*55fcb7f5SSatish Balay {
86*55fcb7f5SSatish Balay   *ierr = PetscEmacsClientErrorHandler(*line,fun,file,dir,*n,*p,mess,ctx);
87*55fcb7f5SSatish Balay }
88*55fcb7f5SSatish Balay 
89*55fcb7f5SSatish 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)
90*55fcb7f5SSatish Balay {
91*55fcb7f5SSatish Balay   *ierr = PetscIgnoreErrorHandler(*line,fun,file,dir,*n,*p,mess,ctx);
92*55fcb7f5SSatish Balay }
93*55fcb7f5SSatish Balay 
94*55fcb7f5SSatish 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)
95*55fcb7f5SSatish Balay {
96*55fcb7f5SSatish Balay   if ((void(*)(void))handler == (void(*)(void))petsctracebackerrorhandler_) {
97*55fcb7f5SSatish Balay     *ierr = PetscPushErrorHandler(PetscTraceBackErrorHandler,0);
98*55fcb7f5SSatish Balay   } else {
99*55fcb7f5SSatish Balay     f2    = handler;
100*55fcb7f5SSatish Balay     *ierr = PetscPushErrorHandler(ourerrorhandler,ctx);
101*55fcb7f5SSatish Balay   }
102*55fcb7f5SSatish Balay }
103*55fcb7f5SSatish Balay 
104*55fcb7f5SSatish Balay void PETSC_STDCALL petscerror_(int *number,int *p,CHAR message PETSC_MIXED_LEN(len),
105*55fcb7f5SSatish Balay                                PetscErrorCode *ierr PETSC_END_LEN(len))
106*55fcb7f5SSatish Balay {
107*55fcb7f5SSatish Balay   char *t1;
108*55fcb7f5SSatish Balay   FIXCHAR(message,len,t1);
109*55fcb7f5SSatish Balay   *ierr = PetscError(-1,0,0,0,*number,*p,t1);
110*55fcb7f5SSatish Balay   FREECHAR(message,t1);
111*55fcb7f5SSatish Balay }
112*55fcb7f5SSatish Balay 
113*55fcb7f5SSatish Balay void PETSC_STDCALL petscrealview_(PetscInt *n,PetscReal *d,int *viwer,PetscErrorCode *ierr)
114*55fcb7f5SSatish Balay {
115*55fcb7f5SSatish Balay   *ierr = PetscRealView(*n,d,0);
116*55fcb7f5SSatish Balay }
117*55fcb7f5SSatish Balay 
118*55fcb7f5SSatish Balay void PETSC_STDCALL petscintview_(PetscInt *n,PetscInt *d,int *viwer,PetscErrorCode *ierr)
119*55fcb7f5SSatish Balay {
120*55fcb7f5SSatish Balay   *ierr = PetscIntView(*n,d,0);
121*55fcb7f5SSatish Balay }
122*55fcb7f5SSatish Balay 
123*55fcb7f5SSatish Balay EXTERN_C_END
124