xref: /petsc/src/sys/ftn-custom/zsys.c (revision 3920c838bce877c9bfcf827e2585c2b5af2c7263)
1ae4341f3SSatish Balay 
2af0996ceSBarry Smith #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
81ea3a486SMartin Diehl #define petscobjectcomposefunction_ PETSCOBJECTCOMPOSEFUNCTION
9*3920c838SMartin Diehl #define petscobjectqueryfunction_   PETSCOBJECTQUERYFUNCTION
10ae4341f3SSatish Balay #elif !defined(PETSC_HAVE_FORTRAN_UNDERSCORE)
11ae4341f3SSatish Balay #define petscoffsetfortran_         petscoffsetfortran
12ae4341f3SSatish Balay #define chkmemfortran_              chkmemfortran
13bf34bf42SBarry Smith #define flush__                     flush_
1445d5e9f8SBarry Smith #define petscobjectstateincrease_   petscobjectstateincrease
151ea3a486SMartin Diehl #define petscobjectcomposefunction_ petscobjectcomposefunction
16*3920c838SMartin Diehl #define petscobjectqueryfunction_   petscobjectqueryfunction
17ae4341f3SSatish Balay #endif
18ae4341f3SSatish Balay 
198cc058d9SJed Brown PETSC_EXTERN void PETSC_STDCALL petscobjectstateincrease_(PetscObject *obj, PetscErrorCode *ierr)
2045d5e9f8SBarry Smith {
2145d5e9f8SBarry Smith   *ierr = PetscObjectStateIncrease(*obj);
2245d5e9f8SBarry Smith }
2345d5e9f8SBarry Smith 
24bf34bf42SBarry Smith #if defined(PETSC_MISSING_FORTRAN_FLUSH_)
25bf34bf42SBarry Smith void flush__(int unit)
26bf34bf42SBarry Smith {
27bf34bf42SBarry Smith }
28bf34bf42SBarry Smith #endif
29bf34bf42SBarry Smith 
30bf34bf42SBarry Smith 
318cc058d9SJed Brown PETSC_EXTERN void PETSC_STDCALL petscoffsetfortran_(PetscScalar *x,PetscScalar *y,size_t *shift,PetscErrorCode *ierr)
32ae4341f3SSatish Balay {
33ae4341f3SSatish Balay   *ierr  = 0;
34ae4341f3SSatish Balay   *shift = y - x;
35ae4341f3SSatish Balay }
36ae4341f3SSatish Balay 
37ae4341f3SSatish Balay /* ---------------------------------------------------------------------------------*/
38ae4341f3SSatish Balay /*
39ae4341f3SSatish Balay         This version does not do a malloc
40ae4341f3SSatish Balay */
41ae4341f3SSatish Balay static char FIXCHARSTRING[1024];
42ae4341f3SSatish Balay 
43ae4341f3SSatish Balay #define FIXCHARNOMALLOC(a,n,b) \
44ae4341f3SSatish Balay {\
45ae4341f3SSatish Balay   if (a == PETSC_NULL_CHARACTER_Fortran) { \
46ae4341f3SSatish Balay     b = a = 0; \
47ae4341f3SSatish Balay   } else { \
48ae4341f3SSatish Balay     while ((n > 0) && (a[n-1] == ' ')) n--; \
49ae4341f3SSatish Balay     if (a[n] != 0) { \
50ae4341f3SSatish Balay       b = FIXCHARSTRING; \
5189d949e2SBarry Smith       *ierr = PetscStrncpy(b,a,n+1); \
52ae4341f3SSatish Balay       if (*ierr) return; \
53ae4341f3SSatish Balay     } else b = a;\
54ae4341f3SSatish Balay   } \
55ae4341f3SSatish Balay }
56ae4341f3SSatish Balay 
57390e1bf2SBarry Smith PETSC_EXTERN void PETSC_STDCALL chkmemfortran_(int *line,char* file PETSC_MIXED_LEN(len),PetscErrorCode *ierr PETSC_END_LEN(len))
58ae4341f3SSatish Balay {
59ae4341f3SSatish Balay   char *c1;
60ae4341f3SSatish Balay 
61ae4341f3SSatish Balay   FIXCHARNOMALLOC(file,len,c1);
62efca3c55SSatish Balay   *ierr = PetscMallocValidate(*line,"Userfunction",c1);
63ae4341f3SSatish Balay }
64ae4341f3SSatish Balay 
651ea3a486SMartin Diehl PETSC_EXTERN void PETSC_STDCALL petscobjectcomposefunction_(PetscObject *obj, char* name PETSC_MIXED_LEN(len), void (*fptr)(void), PetscErrorCode *ierr PETSC_END_LEN(len))
661ea3a486SMartin Diehl {
671ea3a486SMartin Diehl   char *c1;
68ae4341f3SSatish Balay 
691ea3a486SMartin Diehl   FIXCHARNOMALLOC(name,len,c1);
701ea3a486SMartin Diehl   *ierr = PetscObjectComposeFunction(*obj,name,**fptr);
711ea3a486SMartin Diehl }
72ae4341f3SSatish Balay 
73*3920c838SMartin Diehl PETSC_EXTERN void PETSC_STDCALL petscobjectqueryfunction_(PetscObject *obj, char* name PETSC_MIXED_LEN(len), void (**fptr)(void), PetscErrorCode *ierr PETSC_END_LEN(len))
74*3920c838SMartin Diehl {
75*3920c838SMartin Diehl   char *c1;
76*3920c838SMartin Diehl 
77*3920c838SMartin Diehl   FIXCHARNOMALLOC(name,len,c1);
78*3920c838SMartin Diehl   *ierr = PetscObjectQueryFunction(*obj,name,fptr);
79*3920c838SMartin Diehl }
80*3920c838SMartin Diehl 
81