PetscPrintf/ifort 9.1
Leif Strand
leif at geodynamics.org
Tue Aug 28 19:35:44 CDT 2007
Paul,
The "\n" -> linefeed (012) translation is performed by the compiler.
Only a C compiler would be expected to do this. So the key difference
here is g95 vs. ifort.
Consider the following program:
program hello
write (*,*) 'Hello,\nworld!'
end program hello
Compiled with g95, this produces the following output:
$ ./hello
Hello,
world!
$
But compiled with ifort, the escape sequence is interpreted literally:
$ ./hello
Hello,\nworld!
$
I would assume the g95 behavior is non-standard. (Since I don't really
know Fortran, I don't know how to tell a Fortran compiler to embed a
newline...)
--Leif
Matthew Knepley wrote:
> On 8/28/07, Paul T. Bauman <pbauman at ices.utexas.edu> 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
>
> This is much lower level than PETSc. It is in the C standard. There
> must be something
> else going on here. We do this EVERYWHERE in the code. For instance,
> why would the
> -ksp_monitor output work. This uses \n in exactly the same way.
>
> Matt
>
>> 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