Skip to content

Commit 10d4a29

Browse files
committed
mpi_hyperslab: check that filters are available first
1 parent 026fddc commit 10d4a29

File tree

3 files changed

+26
-12
lines changed

3 files changed

+26
-12
lines changed

src/interface.f90

Lines changed: 24 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -13,9 +13,9 @@ module h5mpi
1313
H5P_DEFAULT_F, H5P_FILE_ACCESS_F, H5P_DATASET_CREATE_F, H5P_DATASET_XFER_F, &
1414
H5S_ALL_F, H5S_SELECT_SET_F, &
1515
H5D_CHUNKED_F, H5D_CONTIGUOUS_F, H5D_COMPACT_F, &
16-
h5dcreate_f, h5dopen_f, h5dclose_f, h5dget_space_f, &
16+
h5dcreate_f, h5dopen_f, h5dclose_f, h5dget_space_f, h5dget_create_plist_f, &
1717
h5fopen_f, h5fclose_f, h5fcreate_f, h5fget_filesize_f, h5fflush_f, &
18-
h5pcreate_f, h5pclose_f, h5pset_chunk_f, h5pset_dxpl_mpio_f, h5pset_fapl_mpio_f, &
18+
h5pcreate_f, h5pclose_f, h5pset_chunk_f, h5pset_dxpl_mpio_f, h5pset_fapl_mpio_f, h5pall_filters_avail_f, &
1919
h5sselect_hyperslab_f, h5screate_simple_f, h5sclose_f, &
2020
h5get_libversion_f, &
2121
h5open_f, h5close_f
@@ -456,18 +456,36 @@ subroutine mpi_hyperslab(mem_dims, dset_dims, dset_id, filespace, memspace, dnam
456456
integer(HSIZE_T), dimension(size(istart)), intent(in) :: iend
457457

458458
integer(HSIZE_T), dimension(size(mem_dims)) :: c_mem_dims, i0
459+
integer(HID_T) :: dcpl
459460
integer :: ierr
460461

462+
logical :: filters_OK
463+
464+
!> check that all necessary filters to access dataset are available on the system.
465+
call h5dget_create_plist_f(dset_id, dcpl, ierr)
466+
if (ierr/=0) error stop "h5fortran:mpi_hyperslab:h5dget_create_plist: " // dname
467+
468+
call h5pall_filters_avail_f(dcpl, filters_OK, ierr)
469+
if (ierr/=0) error stop "h5fortran:mpi_hyperslab:h5pall_filters_avail: " // dname
470+
if (.not. filters_OK) then
471+
error stop "h5fortran: filter(s) missing necessary for dataset " // dname // " in parallel with MPI. This is " // &
472+
"typically caused by missing DEFLATE compression with HDF5-MPI."
473+
endif
474+
475+
call h5pclose_f(dcpl, ierr)
476+
if(ierr/=0) error stop "h5fortran:mpi_hyperslab:h5pclose: " // dname
461477

462478
if(filespace == H5S_ALL_F) then
463479
!> create dataspace
464480
call h5screate_simple_f(rank=size(dset_dims), dims=dset_dims, space_id=filespace, hdferr=ierr)
465-
if (ierr/=0) error stop "h5screate_simple:filespace " // dname
481+
if (ierr/=0) error stop "h5fortran:mpi_hyperslab:h5screate_simple:filespace " // dname
466482
endif
467483

468484
!> Select hyperslab in the file.
469485
call h5dget_space_f(dset_id, filespace, ierr)
470-
if (ierr/=0) error stop "h5dget_space: " // dname
486+
if (ierr/=0) error stop "h5fortran:mpi_hyperslab:h5dget_space: " // dname
487+
488+
471489

472490
! blk(1) = 1
473491
! blk(2:) = dset_dims(2:)
@@ -493,11 +511,11 @@ subroutine mpi_hyperslab(mem_dims, dset_dims, dset_id, filespace, memspace, dnam
493511
! stride=1, & !< for now we don't stride data
494512
! block=blk !< would this help performance?
495513

496-
if (ierr/=0) error stop "h5sselect_hyperslab: " // dname
514+
if (ierr/=0) error stop "g5fortran:mpi_hyperslab:h5sselect_hyperslab: " // dname
497515

498516
!> create memory dataspace
499517
call h5screate_simple_f(rank=size(c_mem_dims), dims=c_mem_dims, space_id=memspace, hdferr=ierr)
500-
if (ierr/=0) error stop "h5fortran:h5screate_simple:memspace " // dname
518+
if (ierr/=0) error stop "h5fortran:mpi_hyperslab:h5screate_simple:memspace " // dname
501519

502520
end subroutine mpi_hyperslab
503521

src/read/read.f90

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
submodule (h5mpi) hdf5_read
22

33
use hdf5, only : h5tget_native_type_f, h5tget_class_f, h5dget_type_f, h5tget_size_f, h5tclose_f, h5topen_f, &
4-
h5dread_f, h5dget_create_plist_f, &
4+
h5dread_f, &
55
h5pget_nfilters_f, h5pget_filter_f, h5pget_layout_f, h5pget_chunk_f, &
66
H5T_DIR_ASCEND_F, &
77
H5Z_FILTER_DEFLATE_F

src/tests/unit/test_deflate_read.f90

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -64,11 +64,7 @@ subroutine test_read_deflate(fn, N, mpi_id, Nmpi)
6464

6565
call h5f%open(fn, action='r', mpi=.true.)
6666
call h5f%read('/A', A, istart=i0, iend=i1)
67-
if (h5f%parallel_compression) then
68-
call h5f%read('/noMPI', A, istart=i0, iend=i1)
69-
else
70-
print *, "test_read_deflate: no parallel compression: " // fn
71-
endif
67+
call h5f%read('/noMPI', A, istart=i0, iend=i1) !< compressed with MPI
7268
call h5f%close()
7369

7470
end subroutine test_read_deflate

0 commit comments

Comments
 (0)