[petsc-users] printing from some processors to a file
Barry Smith
bsmith at mcs.anl.gov
Tue Nov 26 16:15:50 CST 2013
Randy,
Thanks for reporting this with a full test case. It is our bug.
The implementation keeps the file pointer in a global variable on process 0 that is set in the first call to the PetscViewerASCIISynchronizedPrintf() or in PetscSynchronizedFPrintf() . The reason for the ugly global is that PetscSynchronizedFlush() can be applied to any number of file pointers. But if the SynchronizedPrintf() is never called on process 0 the file pointer global never gets set so it defaults to stdout.
It may be fixable by having PetscSynchronizedFlush() take a file pointer argument (makes sense). I’ll try to fix it, until make sure process 0 prints at least one thing and it will work ok.
Barry
On Nov 26, 2013, at 3:45 PM, Randall Mackie <rlmackie862 at gmail.com> wrote:
> I am trying to print a character string to a file from one or more processors in a communicator. I thought that I could do this using PetscViewerASCIISynchronizedPrintf, but it prints to the screen instead of to the file opened as a viewer. The attached simple program illustrates the issue. If I remove the (if rank == 1) and therefore call PetscViewerASCIISynchronizedPrintf from every process, it works as expected. If called from only 1 process, it prints to the screen. I thought, from the documentation, that it was not collective, but maybe I am not understanding it's usage.
>
>
> Randy M.
> <test.F90>
More information about the petsc-users
mailing list