1af0996ceSBarry Smith #include <petsc/private/fortranimpl.h> 255fcb7f5SSatish Balay 355fcb7f5SSatish Balay #if defined(PETSC_HAVE_FORTRAN_CAPS) 455fcb7f5SSatish Balay #define petscfprintf_ PETSCFPRINTF 555fcb7f5SSatish Balay #define petscprintf_ PETSCPRINTF 655fcb7f5SSatish Balay #define petscsynchronizedfprintf_ PETSCSYNCHRONIZEDFPRINTF 755fcb7f5SSatish Balay #define petscsynchronizedprintf_ PETSCSYNCHRONIZEDPRINTF 80ec8b6e3SBarry Smith #define petscsynchronizedflush_ PETSCSYNCHRONIZEDFLUSH 955fcb7f5SSatish Balay #elif !defined(PETSC_HAVE_FORTRAN_UNDERSCORE) 1055fcb7f5SSatish Balay #define petscfprintf_ petscfprintf 1155fcb7f5SSatish Balay #define petscprintf_ petscprintf 1255fcb7f5SSatish Balay #define petscsynchronizedfprintf_ petscsynchronizedfprintf 1355fcb7f5SSatish Balay #define petscsynchronizedprintf_ petscsynchronizedprintf 140ec8b6e3SBarry Smith #define petscsynchronizedflush_ petscsynchronizedflush 1555fcb7f5SSatish Balay #endif 1655fcb7f5SSatish Balay 1718d1adefSBarry Smith #if defined(__cplusplus) 1818d1adefSBarry Smith extern "C" { 1918d1adefSBarry Smith #endif 2018d1adefSBarry Smith 2119caf8f3SSatish Balay PETSC_EXTERN void petscsynchronizedflush_(MPI_Fint * comm, FILE **file,int *ierr) 220ec8b6e3SBarry Smith { 23e50bf69fSBarry Smith FILE *f = *file; 24e50bf69fSBarry Smith if (!f) f = PETSC_STDOUT; /* support for PETSC_STDOUT in Fortran */ 25e50bf69fSBarry Smith *ierr = PetscSynchronizedFlush(MPI_Comm_f2c( *(comm)),f); 260ec8b6e3SBarry Smith } 270ec8b6e3SBarry Smith 281850a936SBarry Smith static PetscErrorCode PetscFixSlashN(const char *in, char **out) 291850a936SBarry Smith { 301850a936SBarry Smith PetscErrorCode ierr; 31*3ca90d2dSJacob Faibussowitsch size_t i,len; 321850a936SBarry Smith 331850a936SBarry Smith PetscFunctionBegin; 341850a936SBarry Smith ierr = PetscStrallocpy(in,out);CHKERRQ(ierr); 351850a936SBarry Smith ierr = PetscStrlen(*out,&len);CHKERRQ(ierr); 36*3ca90d2dSJacob Faibussowitsch for (i=0; i<len-1; i++) { 371850a936SBarry Smith if ((*out)[i] == '\\' && (*out)[i+1] == 'n') {(*out)[i] = ' '; (*out)[i+1] = '\n';} 381850a936SBarry Smith } 391850a936SBarry Smith PetscFunctionReturn(0); 401850a936SBarry Smith } 411850a936SBarry Smith 4219caf8f3SSatish Balay PETSC_EXTERN void petscfprintf_(MPI_Comm *comm,FILE **file,char* fname,PetscErrorCode *ierr,PETSC_FORTRAN_CHARLEN_T len1) 4355fcb7f5SSatish Balay { 441850a936SBarry Smith char *c1,*tmp; 4555fcb7f5SSatish Balay 4655fcb7f5SSatish Balay FIXCHAR(fname,len1,c1); 471850a936SBarry Smith *ierr = PetscFixSlashN(c1,&tmp);if (*ierr) return; 4855fcb7f5SSatish Balay FREECHAR(fname,c1); 49*3ca90d2dSJacob Faibussowitsch *ierr = PetscFPrintf(MPI_Comm_f2c(*(MPI_Fint*)&*comm),*file,"%s",tmp);if (*ierr) return; 508bceffaeSBarry Smith *ierr = PetscFree(tmp); 5155fcb7f5SSatish Balay } 5255fcb7f5SSatish Balay 5319caf8f3SSatish Balay PETSC_EXTERN void petscprintf_(MPI_Comm *comm,char* fname,PetscErrorCode *ierr,PETSC_FORTRAN_CHARLEN_T len1) 5455fcb7f5SSatish Balay { 551850a936SBarry Smith char *c1,*tmp; 5655fcb7f5SSatish Balay 5755fcb7f5SSatish Balay FIXCHAR(fname,len1,c1); 581850a936SBarry Smith *ierr = PetscFixSlashN(c1,&tmp);if (*ierr) return; 5955fcb7f5SSatish Balay FREECHAR(fname,c1); 60*3ca90d2dSJacob Faibussowitsch *ierr = PetscPrintf(MPI_Comm_f2c(*(MPI_Fint*)&*comm),"%s",tmp);if (*ierr) return; 618bceffaeSBarry Smith *ierr = PetscFree(tmp); 6255fcb7f5SSatish Balay } 6355fcb7f5SSatish Balay 6419caf8f3SSatish Balay PETSC_EXTERN void petscsynchronizedfprintf_(MPI_Comm *comm,FILE **file,char* fname,PetscErrorCode *ierr,PETSC_FORTRAN_CHARLEN_T len1) 6555fcb7f5SSatish Balay { 661850a936SBarry Smith char *c1,*tmp; 6755fcb7f5SSatish Balay 6855fcb7f5SSatish Balay FIXCHAR(fname,len1,c1); 691850a936SBarry Smith *ierr = PetscFixSlashN(c1,&tmp);if (*ierr) return; 7055fcb7f5SSatish Balay FREECHAR(fname,c1); 71*3ca90d2dSJacob Faibussowitsch *ierr = PetscSynchronizedFPrintf(MPI_Comm_f2c(*(MPI_Fint*)&*comm),*file,"%s",tmp);if (*ierr) return; 728bceffaeSBarry Smith *ierr = PetscFree(tmp); 7355fcb7f5SSatish Balay } 7455fcb7f5SSatish Balay 7519caf8f3SSatish Balay PETSC_EXTERN void petscsynchronizedprintf_(MPI_Comm *comm,char* fname,PetscErrorCode *ierr,PETSC_FORTRAN_CHARLEN_T len1) 7655fcb7f5SSatish Balay { 771850a936SBarry Smith char *c1,*tmp; 7855fcb7f5SSatish Balay 7955fcb7f5SSatish Balay FIXCHAR(fname,len1,c1); 801850a936SBarry Smith *ierr = PetscFixSlashN(c1,&tmp);if (*ierr) return; 8155fcb7f5SSatish Balay FREECHAR(fname,c1); 82*3ca90d2dSJacob Faibussowitsch *ierr = PetscSynchronizedPrintf(MPI_Comm_f2c(*(MPI_Fint*)&*comm),"%s",tmp);if (*ierr) return; 838bceffaeSBarry Smith *ierr = PetscFree(tmp); 8455fcb7f5SSatish Balay } 8518d1adefSBarry Smith #if defined(__cplusplus) 8618d1adefSBarry Smith } 8718d1adefSBarry Smith #endif 8818d1adefSBarry Smith 89