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