C で MPI-IO を使用して複数のファイルを読み込もうとしています。次の例に従っています: http://users.abo.fi/Mats.Aspnas/PP2010/examples/MPI/readfile1.c
ただし、文字列ではなく倍精度行列を読み取っています。その実装は次のとおりです。
/*
Simple MPI-IO program that demonstrate parallel reading from a file.
Compile the program with 'mpicc -O2 readfile1.c -o readfile1'
*/
#include <stdlib.h>
#include <stdio.h>
#include "mpi.h"
#define FILENAME "filename.dat"
double** ArrayAllocation() {
    int i;
    double** array2D;
    array2D= (double**) malloc(num_procs*sizeof(double*));
    for(i = 0; i < num_procs; i++) {
        twoDarray[i] = (double*) malloc(column_size*sizeof(double));
    }
    return array2D;
}
int main(int argc, char* argv[]) {
  int i, np, myid;
  int bufsize, nrchar;
  double *buf;          /* Buffer for reading */
  double **matrix = ArrayAllocation();
  MPI_Offset filesize;
  MPI_File myfile;    /* Shared file */ 
  MPI_Status status;  /* Status returned from read */
  /* Initialize MPI */
  MPI_Init(&argc, &argv);
  MPI_Comm_rank(MPI_COMM_WORLD, &myid);
  MPI_Comm_size(MPI_COMM_WORLD, &np);
  /* Open the files */
  MPI_File_open (MPI_COMM_WORLD, FILENAME, MPI_MODE_RDONLY,
         MPI_INFO_NULL, &myfile);
  /* Get the size of the file */
  MPI_File_get_size(myfile, &filesize);
  /* Calculate how many elements that is */
  filesize = filesize/sizeof(double);
  /* Calculate how many elements each processor gets */
  bufsize = filesize/np;
  /* Allocate the buffer to read to, one extra for terminating null char */
  buf = (double *) malloc((bufsize)*sizeof(double));
  /* Set the file view */
  MPI_File_set_view(myfile, myid*bufsize*sizeof(double), MPI_DOUBLE,
             MPI_DOUBLE,"native", MPI_INFO_NULL);
  /* Read from the file */
  MPI_File_read(myfile, buf, bufsize, MPI_DOUBLE, &status);
  /* Find out how many elemyidnts were read */
  MPI_Get_count(&status, MPI_DOUBLE, &nrchar);
  /* Set terminating null char in the string */
  //buf[nrchar] = (double)0;
  printf("Process %2d read %d characters: ", myid, nrchar);
  int j;
  for (j = 0; j <bufsize;j++){
    matrix[myid][j] = buf[j];
  }
  /* Close the file */
  MPI_File_close(&myfile);
  if (myid==0) {
    printf("Done\n");
  }
  MPI_Finalize();
  exit(0);
}
しかし、最初のファイルを閉じた後で MPI_File_open を呼び出そうとすると、エラーが発生します。これを行うには複数のコミュニケーターが必要ですか? ヒントをいただければ幸いです。