SUBROUTINE write_irreg_array(buf, map, bufsize) 
      include 'mpif.h' 
C    
      integer bufsize 
      double precision buf(bufsize) 
      integer map(bufsize), fh, filetype, status(MPI_STATUS_SIZE) 
C      integer (kind=MPI_OFFSET_KIND) disp 
C     integer*8 is not standard Fortran but is often correct for 
C     MPI_OFFSET_KIND.  Check your MPI documentation 
      integer*8 disp 
      integer i, ierr 
C     
      call MPI_FILE_OPEN(MPI_COMM_WORLD, '/pfs/datafile', 
     *     MPI_MODE_CREATE + MPI_MODE_RDWR, MPI_INFO_NULL, fh, ierr) 
 
      call MPI_TYPE_CREATE_INDEXED_BLOCK(bufsize, 1, map,  
     *     MPI_DOUBLE_PRECISION, filetype, ierr) 
      call MPI_TYPE_COMMIT(filetype, ierr) 
      disp = 0 
      call MPI_FILE_SET_VIEW(fh, disp, MPI_DOUBLE_PRECISION,  
     *     filetype, 'native', MPI_INFO_NULL, ierr) 
C 
      call MPI_FILE_WRITE_ALL(fh, buf, bufsize,  
     *     MPI_DOUBLE_PRECISION, status, ierr) 
C 
      call MPI_FILE_CLOSE(fh, ierr) 
C       
      return 
      END