--- mpich2-1.2.1/src/mpi/romio/adio/common/ad_write_coll.c 2009-03-13 10:30:30.000000000 -0500 +++ wkl_ad_write_coll.c 2009-12-21 00:26:18.000000000 -0600 @@ -139,13 +139,31 @@ ADIOI_Free(len_list); ADIOI_Free(st_offsets); ADIOI_Free(end_offsets); - } - fd->fp_ind = orig_fp; - ADIOI_Datatype_iscontig(fd->filetype, &filetype_is_contig); + /* contig_access_count and start_offset were calculated above */ + filetype_is_contig = 0; + if (contig_access_count == 1) + filetype_is_contig = 1; + } + else { + ADIOI_Datatype_iscontig(fd->filetype, &filetype_is_contig); + start_offset = -1; + } + +#define TEST_FILE_TYPE_IS_CONTIG +#ifdef TEST_FILE_TYPE_IS_CONTIG +ADIOI_Datatype_iscontig(fd->filetype, &filetype_is_contig); +printf("contig_access_count=%d but filetype_is_contig=%d\n",contig_access_count,filetype_is_contig); +#endif + + fd->fp_ind = orig_fp; if (buftype_is_contig && filetype_is_contig) { - if (file_ptr_type == ADIO_EXPLICIT_OFFSET) { + if (start_offset >= 0) + ADIO_WriteContig(fd, buf, count, datatype, + ADIO_EXPLICIT_OFFSET, + start_offset, status, error_code); + else if (file_ptr_type == ADIO_EXPLICIT_OFFSET) { off = fd->disp + (ADIO_Offset)(fd->etype_size) * offset; ADIO_WriteContig(fd, buf, count, datatype, ADIO_EXPLICIT_OFFSET,