xref: /petsc/src/sys/ftn-custom/zsys.c (revision 8cc058d9cd56c1ccb3be12a47760ddfc446aaffc)
1ae4341f3SSatish Balay 
2b45d2f2cSJed Brown #include <petsc-private/fortranimpl.h>
3ae4341f3SSatish Balay 
4519f805aSKarl Rupp #if defined(PETSC_HAVE_FORTRAN_CAPS)
5ae4341f3SSatish Balay #define chkmemfortran_             CHKMEMFORTRAN
6ae4341f3SSatish Balay #define petscoffsetfortran_        PETSCOFFSETFORTRAN
745d5e9f8SBarry Smith #define petscobjectstateincrease_  PETSCOBJECTSTATEINCREASE
845d5e9f8SBarry Smith #define petscobjectstatedecrease_  PETSCOBJECTSTATEDECREASE
9ae4341f3SSatish Balay #elif !defined(PETSC_HAVE_FORTRAN_UNDERSCORE)
10ae4341f3SSatish Balay #define petscoffsetfortran_        petscoffsetfortran
11ae4341f3SSatish Balay #define chkmemfortran_             chkmemfortran
12bf34bf42SBarry Smith #define flush__                    flush_
1345d5e9f8SBarry Smith #define petscobjectstateincrease_  petscobjectstateincrease
1445d5e9f8SBarry Smith #define petscobjectstatedecrease_  petscobjectstatedecrease
15ae4341f3SSatish Balay #endif
16ae4341f3SSatish Balay 
17*8cc058d9SJed Brown PETSC_EXTERN void PETSC_STDCALL petscobjectstateincrease_(PetscObject *obj, PetscErrorCode *ierr)
1845d5e9f8SBarry Smith {
1945d5e9f8SBarry Smith   *ierr = PetscObjectStateIncrease(*obj);
2045d5e9f8SBarry Smith }
21*8cc058d9SJed Brown PETSC_EXTERN void PETSC_STDCALL petscobjectstatedecrease_(PetscObject *obj, PetscErrorCode *ierr)
22f5f7c1b9SKarl Rupp {
2345d5e9f8SBarry Smith   *ierr = PetscObjectStateDecrease(*obj);
2445d5e9f8SBarry Smith }
2545d5e9f8SBarry Smith 
2645d5e9f8SBarry Smith 
27bf34bf42SBarry Smith #if defined(PETSC_MISSING_FORTRAN_FLUSH_)
28bf34bf42SBarry Smith void flush__(int unit)
29bf34bf42SBarry Smith {
30bf34bf42SBarry Smith }
31bf34bf42SBarry Smith #endif
32bf34bf42SBarry Smith 
33bf34bf42SBarry Smith 
34*8cc058d9SJed Brown PETSC_EXTERN void PETSC_STDCALL petscoffsetfortran_(PetscScalar *x,PetscScalar *y,size_t *shift,PetscErrorCode *ierr)
35ae4341f3SSatish Balay {
36ae4341f3SSatish Balay   *ierr  = 0;
37ae4341f3SSatish Balay   *shift = y - x;
38ae4341f3SSatish Balay }
39ae4341f3SSatish Balay 
40ae4341f3SSatish Balay /* ---------------------------------------------------------------------------------*/
41ae4341f3SSatish Balay /*
42ae4341f3SSatish Balay         This version does not do a malloc
43ae4341f3SSatish Balay */
44ae4341f3SSatish Balay static char FIXCHARSTRING[1024];
45ae4341f3SSatish Balay 
46ae4341f3SSatish Balay #define CHAR char*
47ae4341f3SSatish Balay #define FIXCHARNOMALLOC(a,n,b) \
48ae4341f3SSatish Balay {\
49ae4341f3SSatish Balay   if (a == PETSC_NULL_CHARACTER_Fortran) { \
50ae4341f3SSatish Balay     b = a = 0; \
51ae4341f3SSatish Balay   } else { \
52ae4341f3SSatish Balay     while ((n > 0) && (a[n-1] == ' ')) n--; \
53ae4341f3SSatish Balay     if (a[n] != 0) { \
54ae4341f3SSatish Balay       b = FIXCHARSTRING; \
55ae4341f3SSatish Balay       *ierr = PetscStrncpy(b,a,n); \
56ae4341f3SSatish Balay       if (*ierr) return; \
57ae4341f3SSatish Balay       b[n] = 0; \
58ae4341f3SSatish Balay     } else b = a;\
59ae4341f3SSatish Balay   } \
60ae4341f3SSatish Balay }
61ae4341f3SSatish Balay 
62*8cc058d9SJed Brown PETSC_EXTERN void PETSC_STDCALL chkmemfortran_(int *line,CHAR file PETSC_MIXED_LEN(len),PetscErrorCode *ierr PETSC_END_LEN(len))
63ae4341f3SSatish Balay {
64ae4341f3SSatish Balay   char *c1;
65ae4341f3SSatish Balay 
66ae4341f3SSatish Balay   FIXCHARNOMALLOC(file,len,c1);
67ae4341f3SSatish Balay   *ierr = PetscMallocValidate(*line,"Userfunction",c1," ");
68ae4341f3SSatish Balay }
69ae4341f3SSatish Balay 
70ae4341f3SSatish Balay 
71ae4341f3SSatish Balay 
72