xref: /petsc/src/sys/error/ftn-custom/zerrf.c (revision a58c3bc3391eee32bc3fd94ac7edeea38fe57aae)
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
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
3355fcb7f5SSatish 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));
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 */
3755fcb7f5SSatish Balay static PetscErrorCode ourerrorhandler(int line,const char *fun,const char *file,const char *dir,int n,int 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 
4855fcb7f5SSatish Balay #if defined(PETSC_USES_CPTOFCD)
4955fcb7f5SSatish Balay  {
5055fcb7f5SSatish Balay    CHAR fun_c,file_c,dir_c,mess_c;
5155fcb7f5SSatish Balay 
5255fcb7f5SSatish Balay    fun_c  = _cptofcd(fun,len1);
5355fcb7f5SSatish Balay    file_c = _cptofcd(file,len2);
5455fcb7f5SSatish Balay    dir_c  = _cptofcd(dir,len3);
5555fcb7f5SSatish Balay    mess_c = _cptofcd(mess,len4);
5655fcb7f5SSatish Balay    (*f2)(&line,fun_c,file_c,dir_c,&n,&p,mess_c,ctx,&ierr,len1,len2,len3,len4);
5755fcb7f5SSatish Balay 
5855fcb7f5SSatish Balay  }
5955fcb7f5SSatish Balay #elif defined(PETSC_HAVE_FORTRAN_MIXED_STR_ARG)
6055fcb7f5SSatish Balay   (*f2)(&line,fun,l1,file,l2,dir,l3,&n,&p,mess,l4,ctx,&ierr);
6155fcb7f5SSatish Balay #else
6255fcb7f5SSatish Balay   (*f2)(&line,fun,file,dir,&n,&p,mess,ctx,&ierr,l1,l2,l3,l4);
6355fcb7f5SSatish Balay #endif
6455fcb7f5SSatish Balay   return ierr;
6555fcb7f5SSatish Balay }
6655fcb7f5SSatish Balay 
6755fcb7f5SSatish Balay EXTERN_C_BEGIN
6855fcb7f5SSatish Balay 
6955fcb7f5SSatish Balay /*
7055fcb7f5SSatish Balay         These are not usually called from Fortran but allow Fortran users
7155fcb7f5SSatish Balay    to transparently set these monitors from .F code
7255fcb7f5SSatish Balay 
7355fcb7f5SSatish Balay    functions, hence no STDCALL
7455fcb7f5SSatish Balay */
7555fcb7f5SSatish 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)
7655fcb7f5SSatish Balay {
7755fcb7f5SSatish Balay   *ierr = PetscTraceBackErrorHandler(*line,fun,file,dir,*n,*p,mess,ctx);
7855fcb7f5SSatish Balay }
7955fcb7f5SSatish Balay 
8055fcb7f5SSatish 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)
8155fcb7f5SSatish Balay {
8255fcb7f5SSatish Balay   *ierr = PetscAbortErrorHandler(*line,fun,file,dir,*n,*p,mess,ctx);
8355fcb7f5SSatish Balay }
8455fcb7f5SSatish Balay 
8555fcb7f5SSatish 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)
8655fcb7f5SSatish Balay {
8755fcb7f5SSatish Balay   *ierr = PetscAttachDebuggerErrorHandler(*line,fun,file,dir,*n,*p,mess,ctx);
8855fcb7f5SSatish Balay }
8955fcb7f5SSatish Balay 
9055fcb7f5SSatish 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)
9155fcb7f5SSatish Balay {
9255fcb7f5SSatish Balay   *ierr = PetscEmacsClientErrorHandler(*line,fun,file,dir,*n,*p,mess,ctx);
9355fcb7f5SSatish Balay }
9455fcb7f5SSatish Balay 
9555fcb7f5SSatish 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)
9655fcb7f5SSatish Balay {
9755fcb7f5SSatish Balay   *ierr = PetscIgnoreErrorHandler(*line,fun,file,dir,*n,*p,mess,ctx);
9855fcb7f5SSatish Balay }
9955fcb7f5SSatish Balay 
10055fcb7f5SSatish 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)
10155fcb7f5SSatish Balay {
10255fcb7f5SSatish Balay   if ((void(*)(void))handler == (void(*)(void))petsctracebackerrorhandler_) {
10355fcb7f5SSatish Balay     *ierr = PetscPushErrorHandler(PetscTraceBackErrorHandler,0);
10455fcb7f5SSatish Balay   } else {
10555fcb7f5SSatish Balay     f2    = handler;
10655fcb7f5SSatish Balay     *ierr = PetscPushErrorHandler(ourerrorhandler,ctx);
10755fcb7f5SSatish Balay   }
10855fcb7f5SSatish Balay }
10955fcb7f5SSatish Balay 
110*a58c3bc3SBarry Smith void PETSC_STDCALL petscerror_(int *number,int *line,int *p,CHAR message PETSC_MIXED_LEN(len),
11155fcb7f5SSatish Balay                                PetscErrorCode *ierr PETSC_END_LEN(len))
11255fcb7f5SSatish Balay {
11355fcb7f5SSatish Balay   char *t1;
11455fcb7f5SSatish Balay   FIXCHAR(message,len,t1);
115*a58c3bc3SBarry Smith   *ierr = PetscError(*line,0,0,0,*number,*p,t1);
11655fcb7f5SSatish Balay   FREECHAR(message,t1);
11755fcb7f5SSatish Balay }
11855fcb7f5SSatish Balay 
11916bf3c38SBarry Smith void PETSC_STDCALL petscrealview_(PetscInt *n,PetscReal *d,PetscViewer *viwer,PetscErrorCode *ierr)
12055fcb7f5SSatish Balay {
12116bf3c38SBarry Smith   PetscViewer v;
12216bf3c38SBarry Smith   PetscPatchDefaultViewers_Fortran(viwer,v);
12316bf3c38SBarry Smith   *ierr = PetscRealView(*n,d,v);
12455fcb7f5SSatish Balay }
12555fcb7f5SSatish Balay 
12616bf3c38SBarry Smith void PETSC_STDCALL petscintview_(PetscInt *n,PetscInt *d,PetscViewer *viwer,PetscErrorCode *ierr)
12755fcb7f5SSatish Balay {
12816bf3c38SBarry Smith   PetscViewer v;
12916bf3c38SBarry Smith   PetscPatchDefaultViewers_Fortran(viwer,v);
13016bf3c38SBarry Smith   *ierr = PetscIntView(*n,d,v);
13116bf3c38SBarry Smith }
13216bf3c38SBarry Smith 
13321dd7e22SBarry Smith void PETSC_STDCALL petscerroriscatchable_(PetscErrorCode *ierr,PetscTruth *is)
13421dd7e22SBarry Smith {
13521dd7e22SBarry Smith   *is = PetscErrorIsCatchable(*ierr);
13621dd7e22SBarry Smith }
13721dd7e22SBarry Smith 
13821dd7e22SBarry Smith void PETSC_STDCALL petscexceptionvalue_(PetscErrorCode *ierr,PetscTruth *is)
13921dd7e22SBarry Smith {
14021dd7e22SBarry Smith   *is = PetscExceptionValue(*ierr);
14121dd7e22SBarry Smith }
14221dd7e22SBarry Smith 
14321dd7e22SBarry Smith void PETSC_STDCALL petscexceptioncaught_(PetscErrorCode *ierr,PetscErrorCode *zierr,PetscTruth *is)
14421dd7e22SBarry Smith {
14521dd7e22SBarry Smith   *is = PetscExceptionCaught(*ierr,*zierr);
14621dd7e22SBarry Smith }
14721dd7e22SBarry Smith 
14816bf3c38SBarry Smith #if defined(PETSC_HAVE_FORTRAN_CAPS)
14916bf3c38SBarry Smith #define petscscalarview_             PETSCSCALARVIEW
15016bf3c38SBarry Smith #elif !defined(PETSC_HAVE_FORTRAN_UNDERSCORE)
15116bf3c38SBarry Smith #define petscscalarview_             petscscalarview
15216bf3c38SBarry Smith #endif
15316bf3c38SBarry Smith 
15416bf3c38SBarry Smith void PETSC_STDCALL petscscalarview_(PetscInt *n,PetscScalar *d,PetscViewer *viwer,PetscErrorCode *ierr)
15516bf3c38SBarry Smith {
15616bf3c38SBarry Smith   PetscViewer v;
15716bf3c38SBarry Smith   PetscPatchDefaultViewers_Fortran(viwer,v);
15816bf3c38SBarry Smith   *ierr = PetscScalarView(*n,d,v);
15955fcb7f5SSatish Balay }
16055fcb7f5SSatish Balay 
16155fcb7f5SSatish Balay EXTERN_C_END
162