# Outputting a distributed vector in PETSc

I'm working with someone else's code that uses PETSc 3.0.0-p9.

They have a vector at the end of the computation that is distributed among a number of different processors, and I want to output that vector to a file.

Unfortunately, the way they do it doesn't appear to work. Is there an easy way to write (the real part) of a vector to a file in PETSc?

The current way it is done is to write the PETScVector to a C++ STL vector (on all processors), and then write the vector out to a file (on one processor).

This approach doesn't work, because only the values on that processor are written to file.

Is there a "standard PETSc" way of outputting a vector to a file?

Thanks!

• Could you provide more details about what you have tried before, and the error messages that it produced? – Paul Jan 31 '12 at 19:21
• Hopefully this is better. – Andrew Spott Jan 31 '12 at 19:28

Normally you can use VecView() for everything. You probably want to open the PetscViewer using PetscViewerBinaryOpen, in which case VecView() will write efficiently in parallel to the binary file.. You can read it from a PETSc program using VecLoad(), from MATLAB/Octave with PetscBinaryRead() (add $PETSC_DIR/bin/matlab/ to your path), or from Python (scripts in $PETSC_DIR/bin/pythonscripts/).

If you are concerned about ordering or something else, please clarify the question.

• This is right, but now I would recommend using the HDF5 output if you want to process the data with other tools. – Matt Knepley Sep 16 '15 at 11:14

I use the command ‘VecGather’ to gather all the vectors to the root node, then perform the output on the root node.

I think the other way is to write every local result by every node in the cluster into the NFS share system. Some visualization software such as Visit can support the parallel file format.