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