xref: /petsc/src/sys/ftn-custom/zsys.c (revision dfef5ea798a36ccc664ca1bbe435d183ec21e5c1)
1af0996ceSBarry Smith #include <petsc/private/fortranimpl.h>
2ae4341f3SSatish Balay 
3519f805aSKarl Rupp #if defined(PETSC_HAVE_FORTRAN_CAPS)
4ae4341f3SSatish Balay   #define chkmemfortran_            CHKMEMFORTRAN
5ae4341f3SSatish Balay   #define petscoffsetfortran_       PETSCOFFSETFORTRAN
645d5e9f8SBarry Smith   #define petscobjectstateincrease_ PETSCOBJECTSTATEINCREASE
7ae4341f3SSatish Balay #elif !defined(PETSC_HAVE_FORTRAN_UNDERSCORE)
8ae4341f3SSatish Balay   #define petscoffsetfortran_       petscoffsetfortran
9ae4341f3SSatish Balay   #define chkmemfortran_            chkmemfortran
10bf34bf42SBarry Smith   #define flush__                   flush_
1145d5e9f8SBarry Smith   #define petscobjectstateincrease_ petscobjectstateincrease
12ae4341f3SSatish Balay #endif
13ae4341f3SSatish Balay 
1419caf8f3SSatish Balay PETSC_EXTERN void petscobjectstateincrease_(PetscObject *obj, PetscErrorCode *ierr)
1545d5e9f8SBarry Smith {
1645d5e9f8SBarry Smith   *ierr = PetscObjectStateIncrease(*obj);
1745d5e9f8SBarry Smith }
1845d5e9f8SBarry Smith 
19bf34bf42SBarry Smith #if defined(PETSC_MISSING_FORTRAN_FLUSH_)
205975b3b6SBarry Smith void flush__(int unit) { }
21bf34bf42SBarry Smith #endif
22bf34bf42SBarry Smith 
2319caf8f3SSatish Balay PETSC_EXTERN void petscoffsetfortran_(PetscScalar *x, PetscScalar *y, size_t *shift, PetscErrorCode *ierr)
24ae4341f3SSatish Balay {
253ba16761SJacob Faibussowitsch   *ierr  = PETSC_SUCCESS;
26ae4341f3SSatish Balay   *shift = y - x;
27ae4341f3SSatish Balay }
28ae4341f3SSatish Balay 
29ae4341f3SSatish Balay /* ---------------------------------------------------------------------------------*/
30ae4341f3SSatish Balay /*
31ae4341f3SSatish Balay         This version does not do a malloc
32ae4341f3SSatish Balay */
33ae4341f3SSatish Balay static char FIXCHARSTRING[1024];
34ae4341f3SSatish Balay 
35ae4341f3SSatish Balay #define FIXCHARNOMALLOC(a, n, b) \
36a8f51744SPierre Jolivet   do { \
37ae4341f3SSatish Balay     if (a == PETSC_NULL_CHARACTER_Fortran) { \
38*dfef5ea7SSatish Balay       b = a = NULL; \
39ae4341f3SSatish Balay     } else { \
40ae4341f3SSatish Balay       while ((n > 0) && (a[n - 1] == ' ')) n--; \
41ae4341f3SSatish Balay       if (a[n] != 0) { \
42ae4341f3SSatish Balay         b     = FIXCHARSTRING; \
4389d949e2SBarry Smith         *ierr = PetscStrncpy(b, a, n + 1); \
44ae4341f3SSatish Balay         if (*ierr) return; \
45ae4341f3SSatish Balay       } else b = a; \
46ae4341f3SSatish Balay     } \
47a8f51744SPierre Jolivet   } while (0)
48ae4341f3SSatish Balay 
4919caf8f3SSatish Balay PETSC_EXTERN void chkmemfortran_(int *line, char *file, PetscErrorCode *ierr, PETSC_FORTRAN_CHARLEN_T len)
50ae4341f3SSatish Balay {
51ae4341f3SSatish Balay   char *c1;
52ae4341f3SSatish Balay 
53ae4341f3SSatish Balay   FIXCHARNOMALLOC(file, len, c1);
54efca3c55SSatish Balay   *ierr = PetscMallocValidate(*line, "Userfunction", c1);
55ae4341f3SSatish Balay }
56