PetscPrintf/ifort 9.1

Barry Smith bsmith at mcs.anl.gov
Wed Aug 29 14:00:03 CDT 2007


  Paul,

    Thanks. I'll add it to the FAQ

   Barry


   
On Wed, 29 Aug 2007, Paul T. Bauman wrote:

> Hi Barry,
> 
> To preface, I sincerely appreciate your prompt response and willingness to
> produce quick fixes.
> 
> However, it was pointed out to me in my office today (by someone who knows
> more about interfacing C and FORTRAN than I and who watches the petsc-users
> list) that the following code would have been the correct way for me to do
> this (I tested and it works on intel and g95):
> 
>     call PetscPrintf(PETSC_COMM_WORLD,
> "==============================================="//achar(10), ierr)
>     call PetscPrintf(PETSC_COMM_WORLD, "             Beginning of
> Program"//achar(10), ierr)
>     call PetscPrintf(PETSC_COMM_WORLD,
> "==============================================="//achar(10), ierr)
> 
> 'achar' is a FORTRAN intrinsic function that gets fed an integer and returns
> the corresponding ascii character from the ascii character set.  In this case,
> 10 corresponds to the new line command and thus passes the correct format to
> the C call. I tested on the reverted version of zmprint.c and it works
> correctly (although it also works correctly with the patch you sent).
> 
> I wanted to share out of the sake of proliferation of knowledge (and not to
> make you feel like I wasted your time). Thanks again for your efforts,
> especially to us lingering FORTRAN'ers. Hopefully this will clarify in the
> future if it ever comes up again. Sorry for the trouble.
> 
> Paul
> 
> Barry Smith wrote:
> >   Paul,
> > 
> >    I have pushed a fix to petsc-dev that resolves this problem. If you are
> > not using petsc-dev you can simply replace the file
> > src/sys/fileio/ftn-custom/zmprintf.c with the attached file then run make
> > lib shared in that directory then relink your program.
> > 
> >    Barry
> > 
> > 
> > On Tue, 28 Aug 2007, Paul T. Bauman wrote:
> > 
> >   
> > > Hello,
> > > 
> > > Kind of a non-numerical question - sorry.  I'm using PetscPrintf from
> > > Fortran
> > > using the following calling sequence (for example):
> > > 
> > >     call PetscPrintf(PETSC_COMM_WORLD,
> > > "=============================================== \n", ierr)
> > >     call PetscPrintf(PETSC_COMM_WORLD, "               Beginning of
> > > Program
> > > \n", ierr)
> > >     call PetscPrintf(PETSC_COMM_WORLD,
> > > "=============================================== \n", ierr)
> > > 
> > > On my mac laptop (PowerPC) with PETSc 2.3.2-p7 compiled with gcc 4.0.1 and
> > > g95, this prints as expected:
> > > 
> > > ===============================================
> > >               Beginning of Program
> > > ===============================================
> > > 
> > > On a linux workstation (AMD Opteron) with PETSc 2.3.2-p7 compiled with
> > > icc,
> > > icxx, ifort 9.1, the "\n" is treated as a character and not treated as
> > > "move
> > > to new line" so the output is all on one line:
> > > 
> > > =============================================== \n               Beginning
> > > of
> > > Program \n=============================================== \n
> > > 
> > > While not the end of the world, it is a bit annoying. Am I screwing up the
> > > calling sequence and just got lucky with g95?  Or a bug (PETSc or Intel)?
> > > 
> > > Thanks,
> > > 
> > > Paul
> > > 
> > > P.S. The reason why I care is because on any compiler I've used (other
> > > than
> > > Intel), write(*,*) prints out at different times and not in sequence with
> > > PETSc so all my output comes out after PETSc is done outputting. Using
> > > PetscPrintf, I can have everything print out in order.
> > > 
> > >     
> 
> 




More information about the petsc-users mailing list