:orphan: # PetscVFPrintf All PETSc standard out and error messages are sent through this function; so, in theory, this can can be replaced with something that does not simply write to a file. ## Synopsis ``` PetscErrorCode PetscVFPrintfDefault(FILE *fd, const char *format, va_list Argp) ``` To use, write your own function for example, ```none PetscErrorCode mypetscvfprintf(FILE *fd, const char format[], va_list Argp) { PetscErrorCode ierr; PetscFunctionBegin; if (fd != stdout && fd != stderr) { handle regular files CHKERR(PetscVFPrintfDefault(fd,format,Argp)); } else { char buff[BIG]; size_t length; PetscCall(PetscVSNPrintf(buff,BIG,format,&length,Argp)); now send buff to whatever stream or whatever you want } PetscFunctionReturn(PETSC_SUCCESS); } ``` then before the call to `PetscInitialize()` do the assignment `PetscVFPrintf = mypetscvfprintf`; ## Note For error messages this may be called by any MPI process, for regular standard out it is called only by MPI rank 0 of a given communicator ## Developer Note This could be called by an error handler, if that happens then a recursion of the error handler may occur and a resulting crash ## See Also `PetscVSNPrintf()`, `PetscErrorPrintf()`, `PetscFFlush()` ## Level developer ## Location src/sys/fileio/mprint.c --- [Edit on GitLab](https://gitlab.com/petsc/petsc/-/edit/release/src/sys/fileio/mprint.c) [Index of all Sys routines](index.md) [Table of Contents for all manual pages](/manualpages/index.md) [Index of all manual pages](/manualpages/singleindex.md)