PetscPrintf/ifort 9.1
Paul T. Bauman
pbauman at ices.utexas.edu
Wed Aug 29 11:31:39 CDT 2007
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