[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