xref: /petsc/src/sys/ftn-custom/zsys.c (revision 6a98f8dc3f2c9149905a87dc2e9d0fedaf64e09a)
1 
2 #include <petsc/private/fortranimpl.h>
3 
4 #if defined(PETSC_HAVE_FORTRAN_CAPS)
5 #define chkmemfortran_              CHKMEMFORTRAN
6 #define petscoffsetfortran_         PETSCOFFSETFORTRAN
7 #define petscobjectstateincrease_   PETSCOBJECTSTATEINCREASE
8 #elif !defined(PETSC_HAVE_FORTRAN_UNDERSCORE)
9 #define petscoffsetfortran_         petscoffsetfortran
10 #define chkmemfortran_              chkmemfortran
11 #define flush__                     flush_
12 #define petscobjectstateincrease_   petscobjectstateincrease
13 #endif
14 
15 PETSC_EXTERN void petscobjectstateincrease_(PetscObject *obj, PetscErrorCode *ierr)
16 {
17   *ierr = PetscObjectStateIncrease(*obj);
18 }
19 
20 #if defined(PETSC_MISSING_FORTRAN_FLUSH_)
21 void flush__(int unit)
22 {
23 }
24 #endif
25 
26 
27 PETSC_EXTERN void petscoffsetfortran_(PetscScalar *x,PetscScalar *y,size_t *shift,PetscErrorCode *ierr)
28 {
29   *ierr  = 0;
30   *shift = y - x;
31 }
32 
33 /* ---------------------------------------------------------------------------------*/
34 /*
35         This version does not do a malloc
36 */
37 static char FIXCHARSTRING[1024];
38 
39 #define FIXCHARNOMALLOC(a,n,b) \
40 {\
41   if (a == PETSC_NULL_CHARACTER_Fortran) { \
42     b = a = 0; \
43   } else { \
44     while ((n > 0) && (a[n-1] == ' ')) n--; \
45     if (a[n] != 0) { \
46       b = FIXCHARSTRING; \
47       *ierr = PetscStrncpy(b,a,n+1); \
48       if (*ierr) return; \
49     } else b = a;\
50   } \
51 }
52 
53 PETSC_EXTERN void chkmemfortran_(int *line,char* file,PetscErrorCode *ierr,PETSC_FORTRAN_CHARLEN_T len)
54 {
55   char *c1;
56 
57   FIXCHARNOMALLOC(file,len,c1);
58   *ierr = PetscMallocValidate(*line,"Userfunction",c1);
59 }
60 
61 
62 
63