Skip to content

Commit b576347

Browse files
committed
add id2name function
1 parent 5a6cb3b commit b576347

File tree

3 files changed

+35
-16
lines changed

3 files changed

+35
-16
lines changed

src/interface.f90

Lines changed: 33 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -566,46 +566,65 @@ logical function is_hdf5(filename)
566566
end function is_hdf5
567567

568568

569-
subroutine mpi_hyperslab(mem_dims, dset_dims, dset_id, filespace, memspace, dname, istart, iend)
569+
function id2name(id)
570+
!! get name of object with given id
571+
572+
integer(HID_T) :: id
573+
character(:), allocatable :: id2name
574+
575+
integer(SIZE_T) :: L
576+
integer :: ierr
577+
578+
character(2048) :: name
579+
580+
call h5iget_name_f(id, name, len(name, SIZE_T), L, ierr)
581+
if(ierr /= 0) error stop "h5fortran:id2name:h5iget_name"
582+
583+
id2name = name(:L)
584+
585+
end function id2name
586+
587+
588+
subroutine mpi_hyperslab(mem_dims, dset_dims, dset_id, filespace, memspace, istart, iend)
570589
!! Each process defines dataset in memory and writes it to the hyperslab in the file.
571590

572591
integer(HSIZE_T), dimension(:), intent(in) :: mem_dims, dset_dims
573592
integer(HID_T), intent(in) :: dset_id
574593
integer(HID_T), intent(inout) :: filespace, memspace
575-
character(*), intent(in) :: dname !< for error messages
576594
integer(HSIZE_T), dimension(:), intent(in) :: istart
577595
integer(HSIZE_T), dimension(size(istart)), intent(in) :: iend
578596

579597
integer(HSIZE_T), dimension(size(mem_dims)) :: c_mem_dims, i0
580598
integer(HID_T) :: dcpl
581599
integer :: ierr
582-
583600
logical :: filters_OK
601+
character(:), allocatable :: dset_name
602+
603+
dset_name = id2name(dset_id)
584604

585605
!> check that all necessary filters to access dataset are available on the system.
586606
call h5dget_create_plist_f(dset_id, dcpl, ierr)
587-
if (ierr/=0) error stop "h5fortran:mpi_hyperslab:h5dget_create_plist: " // dname
607+
if (ierr/=0) error stop "h5fortran:mpi_hyperslab:h5dget_create_plist: " // dset_name
588608

589609
call h5pall_filters_avail_f(dcpl, filters_OK, ierr)
590-
if (ierr/=0) error stop "h5fortran:mpi_hyperslab:h5pall_filters_avail: " // dname
610+
if (ierr/=0) error stop "h5fortran:mpi_hyperslab:h5pall_filters_avail: " // dset_name
591611
if (.not. filters_OK) then
592-
error stop "h5fortran: filter(s) missing necessary for dataset " // dname // " in parallel with MPI. This is " // &
612+
error stop "h5fortran: filter(s) missing necessary for dataset " // dset_name // " in parallel with MPI. This is " // &
593613
"typically caused by missing DEFLATE compression with HDF5-MPI."
594614
endif
595615

596616
call h5pclose_f(dcpl, ierr)
597-
if(ierr/=0) error stop "h5fortran:mpi_hyperslab:h5pclose: " // dname
617+
if(ierr/=0) error stop "h5fortran:mpi_hyperslab:h5pclose: " // dset_name
598618

599619
if(filespace == H5S_ALL_F) then
600620
!> create dataspace
601621
call h5screate_simple_f(rank=size(dset_dims), dims=dset_dims, space_id=filespace, hdferr=ierr)
602-
if (ierr/=0) error stop "h5fortran:mpi_hyperslab:h5screate_simple:filespace " // dname
622+
if (ierr/=0) error stop "h5fortran:mpi_hyperslab:h5screate_simple:filespace " // dset_name
603623
endif
604624

605625
!> Select hyperslab in the file.
606626
call h5dget_space_f(dset_id, filespace, ierr)
607-
if (ierr/=0) error stop "h5fortran:mpi_hyperslab:h5dget_space: " // dname
608-
627+
if (ierr/=0) error stop "h5fortran:mpi_hyperslab:h5dget_space: " // dset_name
609628

610629

611630
! blk(1) = 1
@@ -621,9 +640,9 @@ subroutine mpi_hyperslab(mem_dims, dset_dims, dset_id, filespace, memspace, dnam
621640
error stop "ERROR:h5fortran:mpi_hyperslab"
622641
endif
623642

624-
! print *, 'TRACE:mpi_hyperslab: ' // dname //': istart', i0, 'C mem_dims: ', c_mem_dims, 'mem_dims', mem_dims
643+
! print *, 'TRACE:mpi_hyperslab: ' // dset_name //': istart', i0, 'C mem_dims: ', c_mem_dims, 'mem_dims', mem_dims
625644

626-
if(any(c_mem_dims < 1)) error stop "h5mpi:hyperslab:non-positive hyperslab: " // dname
645+
if(any(c_mem_dims < 1)) error stop "h5mpi:hyperslab:non-positive hyperslab: " // dset_name
627646

628647
call h5sselect_hyperslab_f(filespace, H5S_SELECT_SET_F, &
629648
start=i0, &
@@ -632,11 +651,11 @@ subroutine mpi_hyperslab(mem_dims, dset_dims, dset_id, filespace, memspace, dnam
632651
! stride=1, & !< for now we don't stride data
633652
! block=blk !< would this help performance?
634653

635-
if (ierr/=0) error stop "g5fortran:mpi_hyperslab:h5sselect_hyperslab: " // dname
654+
if (ierr/=0) error stop "g5fortran:mpi_hyperslab:h5sselect_hyperslab: " // dset_name
636655

637656
!> create memory dataspace
638657
call h5screate_simple_f(rank=size(c_mem_dims), dims=c_mem_dims, space_id=memspace, hdferr=ierr)
639-
if (ierr/=0) error stop "h5fortran:mpi_hyperslab:h5screate_simple:memspace " // dname
658+
if (ierr/=0) error stop "h5fortran:mpi_hyperslab:h5screate_simple:memspace " // dset_name
640659

641660
end subroutine mpi_hyperslab
642661

src/read/reader_template.f90

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@
1010

1111
if(self%use_mpi) then
1212
if(present(istart) .and. present(iend)) then
13-
call mpi_hyperslab(dims, dset_dims, dset_id, file_space_id, mem_space_id, dname, istart=istart, iend=iend)
13+
call mpi_hyperslab(dims, dset_dims, dset_id, file_space_id, mem_space_id, istart=istart, iend=iend)
1414
endif
1515
xfer_id = mpi_collective(dname)
1616
endif

src/write/writer_template.f90

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,7 @@
4141
compact=compact)
4242

4343
if(self%use_mpi) then
44-
call mpi_hyperslab(mem_dims, dims_dset, dset_id, file_space_id, mem_space_id, dname, istart=istart, iend=iend)
44+
call mpi_hyperslab(mem_dims, dims_dset, dset_id, file_space_id, mem_space_id, istart=istart, iend=iend)
4545
xfer_id = mpi_collective(dname)
4646
endif
4747

0 commit comments

Comments
 (0)