PROGRAM H5_DATATYPE USE HDF5 USE H5LT IMPLICIT NONE ! Beads array real, allocatable :: beads(:,:) ! Coordinate arrays real, allocatable :: gxx(:), gxy(:), gxz(:) ! File name, dataset name character(len= 8) :: fileName = "data.h5" character(len=64) :: dataSetName ! File ID integer(hid_t) :: fileID ! Dataspace integer :: spaceRank = 1 integer(size_t) :: spaceDims(1) = [10] integer(hid_t) :: spaceID ! Datatype integer :: arrTypeRank = 1 integer(size_t) :: arrTypeDims(1) = [3] integer(hid_t) :: arrTypeID, arrTypeWriteID ! Dataset integer(size_t) :: dataSetRank = 2 integer(size_t) :: dataSetDims(2) = [10, 3] integer(hid_t) :: dataSetID integer :: info ! I/O status integer :: i ! counter allocate(beads(spaceDims(1),arrTypeDims(1)), & gxx(spaceDims(1)), gxy(spaceDims(1)), gxz(spaceDims(1)), & stat=info) ! Initialise data arrays call random_number(gxx) call random_number(gxy) call random_number(gxz) ! Initialise Fortran interface call H5open_f(info) ! Create new file (with default properties) call H5Fcreate_f(fileName, H5F_ACC_TRUNC_F, fileID, info) !----------------------------------------------------------------------- ! Create 1D array dataspace call H5Screate_simple_f(spaceRank, spaceDims, spaceID, info) ! Create 1D array datatype call H5Tarray_create_f(H5T_STD_I32BE, arrTypeRank, arrTypeDims, & arrTypeID, info) ! Create dataset dataSetName = "Beads" call H5Dcreate_f(fileID, dataSetName, arrTypeID, spaceID, dataSetID, & info) do i = 1, spaceDims(1) beads(i,:) = [gxx(i), gxy(i), gxz(i)] print *, "Bead(", i ,"):", beads(i,:) end do call H5Dwrite_f(dataSetID, arrTypeID, beads, dataSetDims, info) ! Close dataset call H5Dclose_f(dataSetID, info) ! Close datatype call H5Tclose_f(arrTypeID, info) ! Close dataspace call H5Sclose_f(spaceID, info) !----------------------------------------------------------------------- ! Close file call h5fclose_f(fileID, info) ! Close Fortran interface call h5close_f(info) ! Deallocate data array deallocate(beads, gxx, gxy, gxz, stat=info) END PROGRAM H5_DATATYPE ! @eof h5_datatype.f90