[Dart-dev] DART/branches Revision: 12328
dart at ucar.edu
dart at ucar.edu
Fri Jan 12 16:22:06 MST 2018
thoar at ucar.edu
2018-01-12 16:22:04 -0700 (Fri, 12 Jan 2018)
98
Getting very close to having a minimal subset of useful hdf5 routines in
HDF5_utilities_mod.f90
Modified: DART/branches/cesm_clm/assimilation_code/modules/utilities/HDF5_utilities_mod.f90
===================================================================
--- DART/branches/cesm_clm/assimilation_code/modules/utilities/HDF5_utilities_mod.f90 2018-01-12 22:39:47 UTC (rev 12327)
+++ DART/branches/cesm_clm/assimilation_code/modules/utilities/HDF5_utilities_mod.f90 2018-01-12 23:22:04 UTC (rev 12328)
@@ -89,10 +89,10 @@
subroutine h5_get_dset_dspace(file_id, dsetname, dsetid, dspaceid, context)
-integer(HID_T), intent(in) :: file_id !> hdf file ID
-character(len=*), intent(in) :: dsetname !> dataset name
-integer(HID_T), intent(out) :: dsetid !> dataset ID
-integer(HID_T), intent(out) :: dspaceid !> dataset dataspace ID
+integer(HID_T), intent(in) :: file_id !< hdf file ID
+character(len=*), intent(in) :: dsetname !< dataset name
+integer(HID_T), intent(out) :: dsetid !< dataset ID
+integer(HID_T), intent(out) :: dspaceid !< dataset dataspace ID
character(len=*), optional, intent(in) :: context
integer :: hdferr
@@ -112,16 +112,19 @@
!-----------------------------------------------------------------------
!>
-function h5_get_rank(dspace_id, error) result(rank)
+function h5_get_rank(dspaceid, context) result(rank)
-integer(HID_T), intent(in) :: dspace_id
-integer, intent(out) :: error
-integer :: rank
+integer(HID_T), intent(in) :: dspaceid !< dataset dataspace ID
+character(len=*), optional, intent(in) :: context
+integer :: rank !< number of dimensions
-call h5sget_simple_extent_ndims_f(dspace_id, rank, error)
+integer :: hdferr
+character(len=*), parameter :: routine = 'h5_get_rank'
-write(*,*)'TJH rank is ',rank
+call h5sget_simple_extent_ndims_f(dspaceid, rank, hdferr)
+call h5_check(hdferr, routine, 'h5sget_simple_extent_ndims_f', context)
+
end function h5_get_rank
@@ -128,22 +131,35 @@
!-----------------------------------------------------------------------
!>
-subroutine h5_get_dimensions(dspace_id, dims, error)
+subroutine h5_get_dimensions(dspaceid, dims, maxdims, context)
-integer(HID_T), intent(in) :: dspace_id
-integer(HSIZE_T), intent(out) :: dims(:)
-integer, intent(out) :: error
+integer(HID_T), intent(in) :: dspaceid
+integer(HSIZE_T), intent(out) :: dims(:) !< actual dimension lengths
+integer(HSIZE_T), optional, intent(out) :: maxdims(:) !< declared dimension lengths
+character(len=*), optional, intent(in) :: context
-integer(HSIZE_T) :: maxdims(size(dims))
+integer :: hdferr
+character(len=*), parameter :: routine = 'h5_get_dimensions'
+integer(HSIZE_T) :: declared_dimensions(size(dims))
+
! get the dimensions of the dataspace
-call h5sget_simple_extent_dims_f(dspace_id, dims, maxdims, error)
+call h5sget_simple_extent_dims_f(dspaceid, dims, declared_dimensions, hdferr)
-write(*,*)'TJH dims is ',dims
-write(*,*)'TJH maxdims is ',maxdims
+! hdferr is 'Dataspace rank on success' and -1 on failure
+! h5_check only thinks 0 is a success
+if (hdferr < 0) &
+ call h5_check(hdferr, routine, 'h5sget_simple_extent_dims_f', context)
+
+write(*,*)'TJH actual dimensions ',dims
+write(*,*)'TJH declared dimensions ',declared_dimensions
+
+if (present(maxdims)) maxdims = declared_dimensions
+
end subroutine h5_get_dimensions
+
!------------------------------------------------------------------
!> check return code from previous call. on error, print and stop.
!> if you want to continue after an error don't use this call.
@@ -153,7 +169,7 @@
integer, intent(in) :: istatus
character(len=*), intent(in) :: subr_name
character(len=*), intent(in) :: h5routine
-character(len=*), intent(in) :: context
+character(len=*), intent(in), optional :: context
character(len=*), intent(in), optional :: filename
character(len=512) :: string1, string2, string3
@@ -163,8 +179,13 @@
! something wrong. construct an error string, print and abort.
More information about the Dart-dev
mailing list