title: MPI-IO: write subarray
body: <p>I am starting to use MPI-IO and tried to write a very simple example of the things I'd like to do with it; however, even though it is a simple code and I took some inspiration from examples I read here and there, I get a segmentation fault I do not understand.</p>
  
  <p>The logic of the piece of code is very simple: each thread will handle a local array which is part of a globlal array I want to write. I create a subarray type using <code>MPI_Type_Create_Subarray</code> to do so. Then I just open the file, set a view and try to write the data. I get the segmentation fault during the <code>MPI_File_Write_All</code>.</p>
  
  <p>Here is the code:</p>
  
  <pre><code>program test
    implicit none
  
    include "mpif.h"
  
    integer :: myrank, nproc, fhandle, ierr
    integer :: xpos, ypos
    integer, parameter :: loc_x=10, loc_y=10
    integer :: loc_dim
    integer :: nx=2, ny=2
    real(8), dimension(loc_x, loc_y) :: data
    integer :: written_arr
    integer, dimension(2) :: wa_size, wa_subsize, wa_start
  
    call MPI_Init(ierr)
    call MPI_Comm_Rank(MPI_COMM_WORLD, myrank, ierr)
    call MPI_Comm_Size(MPI_COMM_WORLD, nproc, ierr)
  
    xpos = mod(myrank, nx)
    ypos = mod(myrank/nx, ny)
  
    data = myrank
  
    loc_dim    = loc_x*loc_y
    wa_size    = (/ nx*loc_x, ny*loc_y /)
    wa_subsize = (/ loc_x, loc_y /)
    wa_start   = (/ xpos, ypos /)*wa_subsize
    call MPI_Type_Create_Subarray(2, wa_size, wa_subsize, wa_start &amp;
         , MPI_ORDER_FORTRAN, MPI_DOUBLE_PRECISION, written_arr, ierr)
    call MPI_Type_Commit(written_arr, ierr)
  
    call MPI_File_Open(MPI_COMM_WORLD, "file.dat" &amp;
         &amp; , MPI_MODE_WRONLY + MPI_MODE_CREATE, MPI_INFO_NULL, fhandle, ierr)
    call MPI_File_Set_View(fhandle, 0, MPI_DOUBLE_PRECISION, written_arr &amp;
         , "native", MPI_INFO_NULL, ierr)
    call MPI_File_Write_All(fhandle, data, loc_dim, MPI_DOUBLE_PRECISION &amp;
         , MPI_INFO_NULL, ierr)
    call MPI_File_Close(fhandle, ierr)
  
    call MPI_Finalize(ierr)
  
  end program test
  </code></pre>
  
  <p>Any help would be highly appreciated!</p>