xref: /petsc/src/sys/ftn-custom/zsys.c (revision 45d5e9f827e05ad191d19931d7b4a47f1ec7ea07)
1ae4341f3SSatish Balay 
2ce0a2cd1SBarry Smith #include "private/fortranimpl.h"
3ae4341f3SSatish Balay #include "petscsys.h"
4ae4341f3SSatish Balay 
5ae4341f3SSatish Balay #ifdef PETSC_HAVE_FORTRAN_CAPS
6ae4341f3SSatish Balay #define chkmemfortran_             CHKMEMFORTRAN
7ae4341f3SSatish Balay #define petscoffsetfortran_        PETSCOFFSETFORTRAN
8*45d5e9f8SBarry Smith #define petscobjectstateincrease_  PETSCOBJECTSTATEINCREASE
9*45d5e9f8SBarry Smith #define petscobjectstatedecrease_  PETSCOBJECTSTATEDECREASE
10ae4341f3SSatish Balay #elif !defined(PETSC_HAVE_FORTRAN_UNDERSCORE)
11ae4341f3SSatish Balay #define petscoffsetfortran_        petscoffsetfortran
12ae4341f3SSatish Balay #define chkmemfortran_             chkmemfortran
13bf34bf42SBarry Smith #define flush__                    flush_
14*45d5e9f8SBarry Smith #define petscobjectstateincrease_  petscobjectstateincrease
15*45d5e9f8SBarry Smith #define petscobjectstatedecrease_  petscobjectstatedecrease
16ae4341f3SSatish Balay #endif
17ae4341f3SSatish Balay 
18*45d5e9f8SBarry Smith 
19ae4341f3SSatish Balay EXTERN_C_BEGIN
20ae4341f3SSatish Balay 
21*45d5e9f8SBarry Smith void PETSC_STDCALL  petscobjectstateincrease_(PetscObject *obj, PetscErrorCode *ierr )
22*45d5e9f8SBarry Smith {
23*45d5e9f8SBarry Smith   *ierr = PetscObjectStateIncrease(*obj);
24*45d5e9f8SBarry Smith }
25*45d5e9f8SBarry Smith void PETSC_STDCALL  petscobjectstatedecrease_(PetscObject *obj, PetscErrorCode *ierr ){
26*45d5e9f8SBarry Smith   *ierr = PetscObjectStateDecrease(*obj);
27*45d5e9f8SBarry Smith }
28*45d5e9f8SBarry Smith 
29*45d5e9f8SBarry Smith 
30bf34bf42SBarry Smith #if defined(PETSC_MISSING_FORTRAN_FLUSH_)
31bf34bf42SBarry Smith void flush__(int unit)
32bf34bf42SBarry Smith {
33bf34bf42SBarry Smith }
34bf34bf42SBarry Smith #endif
35bf34bf42SBarry Smith 
36bf34bf42SBarry Smith 
37c74decddSSatish Balay void PETSC_STDCALL petscoffsetfortran_(PetscScalar *x,PetscScalar *y,size_t *shift,PetscErrorCode *ierr)
38ae4341f3SSatish Balay {
39ae4341f3SSatish Balay   *ierr = 0;
40ae4341f3SSatish Balay   *shift = y - x;
41ae4341f3SSatish Balay }
42ae4341f3SSatish Balay 
43ae4341f3SSatish Balay /* ---------------------------------------------------------------------------------*/
44ae4341f3SSatish Balay /*
45ae4341f3SSatish Balay         This version does not do a malloc
46ae4341f3SSatish Balay */
47ae4341f3SSatish Balay static char FIXCHARSTRING[1024];
48ae4341f3SSatish Balay 
49ae4341f3SSatish Balay #define CHAR char*
50ae4341f3SSatish Balay #define FIXCHARNOMALLOC(a,n,b) \
51ae4341f3SSatish Balay {\
52ae4341f3SSatish Balay   if (a == PETSC_NULL_CHARACTER_Fortran) { \
53ae4341f3SSatish Balay     b = a = 0; \
54ae4341f3SSatish Balay   } else { \
55ae4341f3SSatish Balay     while((n > 0) && (a[n-1] == ' ')) n--; \
56ae4341f3SSatish Balay     if (a[n] != 0) { \
57ae4341f3SSatish Balay       b = FIXCHARSTRING; \
58ae4341f3SSatish Balay       *ierr = PetscStrncpy(b,a,n); \
59ae4341f3SSatish Balay       if (*ierr) return; \
60ae4341f3SSatish Balay       b[n] = 0; \
61ae4341f3SSatish Balay     } else b = a;\
62ae4341f3SSatish Balay   } \
63ae4341f3SSatish Balay }
64ae4341f3SSatish Balay 
65ae4341f3SSatish Balay void PETSC_STDCALL chkmemfortran_(int *line,CHAR file PETSC_MIXED_LEN(len),PetscErrorCode *ierr PETSC_END_LEN(len))
66ae4341f3SSatish Balay {
67ae4341f3SSatish Balay   char *c1;
68ae4341f3SSatish Balay 
69ae4341f3SSatish Balay   FIXCHARNOMALLOC(file,len,c1);
70ae4341f3SSatish Balay   *ierr = PetscMallocValidate(*line,"Userfunction",c1," ");
71ae4341f3SSatish Balay }
72ae4341f3SSatish Balay 
73ae4341f3SSatish Balay 
74ae4341f3SSatish Balay EXTERN_C_END
75ae4341f3SSatish Balay 
76ae4341f3SSatish Balay 
77