ありがとうございました。私はそれを作ると思う。 MPI_MODE_APPEND + MPI_MODE_WRONLY:元のコードスニペットは
integer (kind=MPI_OFFSET_KIND) :: disp = 0
integer :: n1, n2, n3
double precision, dimension(0:n1+1,0:n2+1,0:n3+1) :: iodata
integer, dimension(ndim) :: arraysize, arraystart
integer, dimension(ndim) :: arraygsize, arraysubsize
...
call MPI_Type_create_subarray(ndim, arraygsize, arraysubsize, arraystart, &
MPI_ORDER_FORTRAN, MPI_DOUBLE_PRECISION, &
filetype, ierr)
call MPI_Type_commit(filetype, ierr)
arraystart(:) = 1
call MPI_Type_create_subarray(ndim, arraysize, arraysubsize, arraystart, &
MPI_ORDER_FORTRAN, MPI_DOUBLE_PRECISION, &
mpi_subarray, ierr)
call MPI_Type_commit(mpi_subarray, ierr)
call MPI_File_open(cartcomm, filename, MPI_MODE_APPEND+MPI_MODE_WRONLY, &
MPI_INFO_NULL, fh, ierr)
call MPI_File_set_view(fh, disp, MPI_DOUBLE_PRECISION, filetype, 'native', &
MPI_INFO_NULL, ierr)
call MPI_File_write_all(fh, iodata, 1, mpi_subarray, status, ierr)
は確かに、私は正しいモードを使用しました。しかし、私はオフセット/変位を設定せず、パラレルデータに0変位を付加しました。これはファイルを上書きすることを意味します。
私はそれは、引数DISPで現在位置を取得します
call MPI_FILE_GET_POSITION(fh, disp, ierr)
あるMPI_FILE_OPEN後に別のステートメントを追加する必要があります。 dispは、追加されたデータの正しい位置を既存のファイルに与えます。
完全なコードはどうですか? PoisFFTの私のtestmpi.f90と同じ手順でビューを設定していますか?コードを他の人にも表示してください。 –