Hi Tony,
It depends on what you are going to do next.
Otherwise, you can always create your own writer/reader.
if (nid.eq.0) then
call byte_open(fname,ierr)
call byte_write / byte_read ! write/read in unit of byte
call byte_close(ierr)
endif
If you want to store them in Nek5000 format and use Nek5000's parallel I/O, then you can try
Way 1. Run Nek5000 on a box mesh. Then, call gfldr to load a restart file and interpolate the solution onto the box mesh.
call gfldr('restart.fld')
You can use ifreguo = .true. to let outpost interpolate the solution onto the uniform grid, or simply use lx1=3.
Way 2: You can actually hijack the xm1, ym1, zm1 for the output file.
For example, build your own box, partition it into each processors and store the coordinates into
my_xm1(lx1,ly1,lz1,lelt)
my_ym1(lx1,ly1,lz1,lelt)
Use those coordinates to interpolate the solution into same data structure
my_sol(lx1,ly1,lz1,lelt)
Then do something like this:
call opcopy(xm1_bak,ym1_bak,zm1_bak,xm1,ym1,zm1) ! backup, only need once
call opcopy(xm1,ym1,zm1,my_xm1,my_ym1,my_zm1) ! overwrite
call outpost(my_sol,vy,vz,pr,t,'box')
call opcopy(xm1,ym1,zm1,xm1_bak,ym1_bak,zm1_bak) ! recover
It's easier to use the same amount of elements and grid points, but you can always store an id list, like
if (the grid point has your data) tmp(i) = 1
and then outpost tmp as well so you can do isovolume in paraview.
Way 1 is used as a post-processing mode after you finish your simulation.
Way 2 can be used along with the simulation.
Hope this helps,
Yu-Hsiang
--