Re: [mpich-discuss] MPI IO, reading MPI Writes without MPI read
Here is the whole code snippet for writing a vector, it will probably help: inquire(file=file,exist=file_is_there) if (file_is_there .and. irank.eq.iroot) call MPI_FILE_DELETE(file,mpi_info,ierr) call MPI_FILE_OPEN(comm,file,IOR(MPI_MODE_WRONLY,MPI_MODE_CREATE),mpi_info,iunit,ierr) ! Write header (only root) if (irank.eq.iroot) then buffer = trim(adjustl(name)) size = 80 call MPI_FILE_WRITE(iunit,buffer,size,MPI_CHARACTER,status,ierr) buffer = 'part' size = 80 call MPI_FILE_WRITE(iunit,buffer,size,MPI_CHARACTER,status,ierr) ibuffer = 1 size = 1 call MPI_FILE_WRITE(iunit,ibuffer,size,MPI_INTEGER,status,ierr) buffer = 'hexa8' size = 80 call MPI_FILE_WRITE(iunit,buffer,size,MPI_CHARACTER,status,ierr) end if ! Write the data disp = 3*80+4+0*ncells_hexa*4 call MPI_FILE_SET_VIEW(iunit,disp,MPI_REAL_SP,fileview_hexa,"native",mpi_info,ierr) call MPI_FILE_WRITE_ALL(iunit,buffer3_hexa(:,1),ncells_hexa_,MPI_REAL_SP,status,ierr) disp = 3*80+4+1*ncells_hexa*4 call MPI_FILE_SET_VIEW(iunit,disp,MPI_REAL_SP,fileview_hexa,"native",mpi_info,ierr) call MPI_FILE_WRITE_ALL(iunit,buffer3_hexa(:,2),ncells_hexa_,MPI_REAL_SP,status,ierr) disp = 3*80+4+2*ncells_hexa*4 call MPI_FILE_SET_VIEW(iunit,disp,MPI_REAL_SP,fileview_hexa,"native",mpi_info,ierr) call MPI_FILE_WRITE_ALL(iunit,buffer3_hexa(:,3),ncells_hexa_,MPI_REAL_SP,status,ierr) ! Write the file - wedge if (ncells_wedge.gt.0) then disp = 3*80+4+3*ncells_hexa*4+0*ncells_wedge*4 call MPI_FILE_SET_VIEW(iunit,disp,MPI_CHARACTER,MPI_CHARACTER,"native",mpi_info,ierr) if (irank.eq.iroot) then buffer = 'penta6' size = 80 call MPI_FILE_WRITE(iunit,buffer,size,MPI_CHARACTER,status,ierr) end if disp = 3*80+4+3*ncells_hexa*4+80+0*ncells_wedge*4 call MPI_FILE_SET_VIEW(iunit,disp,MPI_REAL_SP,fileview_wedge,"native",mpi_info,ierr) call MPI_FILE_WRITE_ALL(iunit,buffer3_wedge(:,1),ncells_wedge_,MPI_REAL_SP,status,ierr) disp = 3*80+4+3*ncells_hexa*4+80+1*ncells_wedge*4 call MPI_FILE_SET_VIEW(iunit,disp,MPI_REAL_SP,fileview_wedge,"native",mpi_info,ierr) call MPI_FILE_WRITE_ALL(iunit,buffer3_wedge(:,2),ncells_wedge_,MPI_REAL_SP,status,ierr) disp = 3*80+4+3*ncells_hexa*4+80+2*ncells_wedge*4 call MPI_FILE_SET_VIEW(iunit,disp,MPI_REAL_SP,fileview_wedge,"native",mpi_info,ierr) call MPI_FILE_WRITE_ALL(iunit,buffer3_wedge(:,3),ncells_wedge_,MPI_REAL_SP,status,ierr) end if ! Close the file call MPI_FILE_CLOSE(iunit,ierr) On Mar 28, 2013, at 12:00 AM, Ryan Crocker wrote:
So i'm not sure if this is crazy or not, but i have file outputs from my code that write ensight gold files in MPI. Here is the write,
disp = 3*80+4+0*ncells_hexa*4 call MPI_FILE_SET_VIEW(iunit,disp,MPI_REAL_SP,fileview_hexa,"native",mpi_info,ierr) call MPI_FILE_WRITE_ALL(iunit,buffer3_hexa(:,1),ncells_hexa_,MPI_REAL_SP,status,ierr)
if i wanted to read that in binary in fortran, or C (preferably fortran) what exactly would i need to do? I can't seem to write code that reads these in and produces anything that looks like the plot i get in paraview. I know that MPI write puts out each processor data vector with that disp in between them, but i just can't make that structure make sense to me when i try to read it in.
Thanks for the help,
Ryan Crocker University of Vermont, School of Engineering Mechanical Engineering Department [email protected] 315-212-7331
_______________________________________________ discuss mailing list [email protected] To manage subscription options or unsubscribe: https://lists.mpich.org/mailman/listinfo/discuss
Ryan Crocker University of Vermont, School of Engineering Mechanical Engineering Department [email protected] 315-212-7331
participants (1)
-
Ryan Crocker