1!****h* ROBODoc/H5D 2! 3! NAME 4! MODULE H5D 5! 6! FILE 7! fortran/src/H5Dff.f90 8! 9! PURPOSE 10! This file contains Fortran interfaces for H5D functions. It includes 11! all the functions that are independent on whether the Fortran 2003 functions 12! are enabled or disabled. 13! 14! COPYRIGHT 15! * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 16! Copyright by The HDF Group. * 17! Copyright by the Board of Trustees of the University of Illinois. * 18! All rights reserved. * 19! * 20! This file is part of HDF5. The full HDF5 copyright notice, including * 21! terms governing use, modification, and redistribution, is contained in * 22! the COPYING file, which can be found at the root of the source code * 23! distribution tree, or in https://support.hdfgroup.org/ftp/HDF5/releases. * 24! If you do not have access to either file, you may request a copy from * 25! help@hdfgroup.org. * 26! * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 27! 28! NOTES 29! *** IMPORTANT *** 30! If you add a new H5D function you must add the function name to the 31! Windows dll file 'hdf5_fortrandll.def.in' in the fortran/src directory. 32! This is needed for Windows based operating systems. 33! 34!***** 35 36MODULE H5D 37 USE H5GLOBAL 38 39 INTERFACE h5dextend_f 40 MODULE PROCEDURE h5dset_extent_f 41 END INTERFACE 42 43 INTERFACE h5dread_vl_f 44 MODULE PROCEDURE h5dread_vl_integer 45 MODULE PROCEDURE h5dread_vl_real 46 MODULE PROCEDURE h5dread_vl_string 47 END INTERFACE 48 49 INTERFACE h5dwrite_vl_f 50 MODULE PROCEDURE h5dwrite_vl_integer 51 MODULE PROCEDURE h5dwrite_vl_real 52 MODULE PROCEDURE h5dwrite_vl_string 53 END INTERFACE 54 55CONTAINS 56 57! 58!****s* H5D/h5dcreate_f 59! 60! NAME 61! h5dcreate_f 62! 63! PURPOSE 64! Creates a dataset at the specified location 65! 66! INPUTS 67! loc_id - file or group identifier 68! name - dataset name 69! type_id - dataset datatype identifier 70! space_id - dataset dataspace identifier 71! OUTPUTS 72! dset_id - dataset identifier 73! hdferr - Returns 0 if successful and -1 if fails 74! OPTIONAL PARAMETERS 75! creation_prp - Dataset creation property list 76! lcpl_id - Link creation property list 77! dapl_id - Dataset access property list 78! 79! AUTHOR 80! Elena Pourmal 81! August 12, 1999 82! 83! HISTORY 84! 85! - Explicit Fortran interfaces were added for 86! called C functions (it is needed for Windows 87! port). February 28, 2001 88! 89! - Added version's 1.8 new optional parameters 90! February, 2008 91! 92! SOURCE 93 SUBROUTINE h5dcreate_f(loc_id, name, type_id, space_id, dset_id, & 94 hdferr, dcpl_id, lcpl_id, dapl_id) 95 IMPLICIT NONE 96 INTEGER(HID_T), INTENT(IN) :: loc_id ! File or group identifier 97 CHARACTER(LEN=*), INTENT(IN) :: name ! Name of the dataset 98 INTEGER(HID_T), INTENT(IN) :: type_id ! Datatype identifier 99 INTEGER(HID_T), INTENT(IN) :: space_id ! Dataspace identifier 100 INTEGER(HID_T), INTENT(OUT) :: dset_id ! Dataset identifier 101 INTEGER, INTENT(OUT) :: hdferr ! Error code 102!***** 103 INTEGER(HID_T), OPTIONAL, INTENT(IN) :: dcpl_id ! Dataset creation property list 104 INTEGER(HID_T), OPTIONAL, INTENT(IN) :: lcpl_id ! Link creation property list 105 INTEGER(HID_T), OPTIONAL, INTENT(IN) :: dapl_id ! Dataset access property list 106 107 INTEGER(HID_T) :: lcpl_id_default 108 INTEGER(HID_T) :: dcpl_id_default 109 INTEGER(HID_T) :: dapl_id_default 110 111 INTEGER :: namelen ! Name length 112 113! MS FORTRAN needs explicit interface for C functions called here. 114! 115 INTERFACE 116 INTEGER FUNCTION h5dcreate_c(loc_id, name, namelen, type_id, & 117 space_id, lcpl_id_default, dcpl_id_default, dapl_id_default, dset_id) 118 USE H5GLOBAL 119 !DEC$IF DEFINED(HDF5F90_WINDOWS) 120 !DEC$ATTRIBUTES C,reference,decorate,alias:'H5DCREATE_C'::h5dcreate_c 121 !DEC$ENDIF 122 !DEC$ATTRIBUTES reference :: name 123 INTEGER(HID_T), INTENT(IN) :: loc_id 124 CHARACTER(LEN=*), INTENT(IN) :: name 125 INTEGER :: namelen 126 INTEGER(HID_T), INTENT(IN) :: type_id 127 INTEGER(HID_T), INTENT(IN) :: space_id 128 129 INTEGER(HID_T) :: lcpl_id_default 130 INTEGER(HID_T) :: dcpl_id_default 131 INTEGER(HID_T) :: dapl_id_default 132 133 INTEGER(HID_T), INTENT(OUT) :: dset_id 134 END FUNCTION h5dcreate_c 135 END INTERFACE 136 137 lcpl_id_default = H5P_DEFAULT_F 138 dcpl_id_default = H5P_DEFAULT_F 139 dapl_id_default = H5P_DEFAULT_F 140 141 IF(PRESENT(lcpl_id)) lcpl_id_default = lcpl_id 142 IF(PRESENT(dcpl_id)) dcpl_id_default = dcpl_id 143 IF(PRESENT(dapl_id)) dapl_id_default = dapl_id 144 145 namelen = LEN(name) 146 hdferr = h5dcreate_c(loc_id, name, namelen, type_id, space_id, & 147 lcpl_id_default, dcpl_id_default, dapl_id_default, dset_id) 148 149 END SUBROUTINE h5dcreate_f 150 151! 152!****s* H5D/h5dopen_f 153! 154! NAME 155! h5dopen_f 156! 157! PURPOSE 158! Opens an existing dataset. 159! 160! INPUTS 161! loc_id - file or group identifier 162! name - dataset name 163! OUTPUTS 164! dset_id - dataset identifier 165! hdferr - Returns 0 if successful and -1 if fails 166! OPTIONAL PARAMETERS 167! dapl_id - Dataset access property list 168! 169! AUTHOR 170! Elena Pourmal 171! August 12, 1999 172! 173! HISTORY 174! -Explicit Fortran interfaces were added for 175! called C functions (it is needed for Windows 176! port). February 28, 2001 177! 178! -Added 1.8 (optional) parameter dapl_id 179! February, 2008, M. Scot Breitenfeld 180! 181! SOURCE 182 SUBROUTINE h5dopen_f(loc_id, name, dset_id, hdferr, dapl_id) 183 IMPLICIT NONE 184 INTEGER(HID_T), INTENT(IN) :: loc_id ! File or group identifier 185 CHARACTER(LEN=*), INTENT(IN) :: name ! Name of the dataset 186 INTEGER(HID_T), INTENT(OUT) :: dset_id ! Dataset identifier 187 INTEGER, INTENT(OUT) :: hdferr ! Error code 188 INTEGER(HID_T), OPTIONAL, INTENT(IN) :: dapl_id ! Dataset access property list 189!***** 190 INTEGER :: namelen ! Name length 191 192 INTEGER(HID_T) :: dapl_id_default 193 194 INTERFACE 195 INTEGER FUNCTION h5dopen_c(loc_id, name, namelen, dapl_id_default, dset_id) 196 USE H5GLOBAL 197 !DEC$IF DEFINED(HDF5F90_WINDOWS) 198 !DEC$ATTRIBUTES C,reference,decorate,alias:'H5DOPEN_C'::h5dopen_c 199 !DEC$ENDIF 200 !DEC$ATTRIBUTES reference :: name 201 INTEGER(HID_T), INTENT(IN) :: loc_id 202 CHARACTER(LEN=*), INTENT(IN) :: name 203 INTEGER :: namelen 204 INTEGER(HID_T), INTENT(IN) :: dapl_id_default 205 INTEGER(HID_T), INTENT(OUT) :: dset_id 206 END FUNCTION h5dopen_c 207 END INTERFACE 208 209 dapl_id_default = H5P_DEFAULT_F 210 IF(PRESENT(dapl_id)) dapl_id_default = dapl_id 211 212 namelen = LEN(name) 213 hdferr = h5dopen_c(loc_id, name, namelen, dapl_id_default, dset_id) 214 215 END SUBROUTINE h5dopen_f 216 217! 218!****s* H5D/h5dclose_f 219! 220! NAME 221! h5dclose_f 222! 223! PURPOSE 224! Closes a dataset. 225! 226! INPUTS 227! dset_id - dataset identifier 228! OUTPUTS 229! hdferr - Returns 0 if successful and -1 if fails 230! 231! AUTHOR 232! Elena Pourmal 233! August 12, 1999 234! 235! HISTORY 236! Explicit Fortran interfaces were added for 237! called C functions (it is needed for Windows 238! port). February 28, 2001 239! 240! SOURCE 241 SUBROUTINE h5dclose_f(dset_id, hdferr) 242 IMPLICIT NONE 243 INTEGER(HID_T), INTENT(IN) :: dset_id ! Dataset identifier 244 INTEGER, INTENT(OUT) :: hdferr ! Error code 245!***** 246 INTERFACE 247 INTEGER FUNCTION h5dclose_c(dset_id) 248 USE H5GLOBAL 249 !DEC$IF DEFINED(HDF5F90_WINDOWS) 250 !DEC$ATTRIBUTES C,reference,decorate,alias:'H5DCLOSE_C'::h5dclose_c 251 !DEC$ENDIF 252 INTEGER(HID_T), INTENT(IN) :: dset_id 253 END FUNCTION h5dclose_c 254 END INTERFACE 255 256 hdferr = h5dclose_c(dset_id) 257 258 END SUBROUTINE h5dclose_f 259 260! 261!****s* H5D/h5dget_type_f 262! 263! NAME 264! h5dget_type_f 265! 266! PURPOSE 267! Returns an identifier for a copy of the datatype for a 268! dataset. 269! 270! INPUTS 271! dataset_id - dataset identifier 272! OUTPUTS 273! datatype_id - dataspace identifier 274! hdferr - Returns 0 if successful and -1 if fails 275! 276! AUTHOR 277! Elena Pourmal 278! August 12, 1999 279! 280! HISTORY 281! Explicit Fortran interfaces were added for 282! called C functions (it is needed for Windows 283! port). February 28, 2001 284! 285! NOTES 286! 287! SOURCE 288 SUBROUTINE h5dget_type_f(dataset_id, datatype_id, hdferr) 289 IMPLICIT NONE 290 INTEGER(HID_T), INTENT(IN) :: dataset_id ! Dataset identifier 291 INTEGER(HID_T), INTENT(OUT) :: datatype_id ! Datatype identifier 292 INTEGER, INTENT(OUT) :: hdferr ! Error code 293!***** 294 INTERFACE 295 INTEGER FUNCTION h5dget_type_c (dataset_id, datatype_id) 296 USE H5GLOBAL 297 !DEC$IF DEFINED(HDF5F90_WINDOWS) 298 !DEC$ATTRIBUTES C,reference,decorate,alias:'H5DGET_TYPE_C'::h5dget_type_c 299 !DEC$ENDIF 300 INTEGER(HID_T), INTENT(IN) :: dataset_id 301 INTEGER(HID_T), INTENT(OUT) :: datatype_id 302 END FUNCTION h5dget_type_c 303 END INTERFACE 304 305 hdferr = h5dget_type_c (dataset_id, datatype_id) 306 END SUBROUTINE h5dget_type_f 307 308! 309!****s* H5D/h5dset_extent 310! 311! NAME 312! h5dset_extent (instead of obsolete name: h5dextend_f) 313! 314! PURPOSE 315! Extends a dataset with unlimited dimension. 316! 317! INPUTS 318! dataset_id - dataset identifier 319! size - array containing the new magnitude of 320! each dimension 321! OUTPUTS 322! hdferr - Returns 0 if successful and -1 if fails 323! 324! AUTHOR 325! Elena Pourmal 326! August 12, 1999 327! 328! HISTORY 329! Explicit Fortran interfaces were added for 330! called C functions (it is needed for Windows 331! port). February 28, 2001 332! 333! Changed name from the now obsolete h5dextend_f 334! to h5dset_extent_f. Provided interface to old name 335! for backward compatability. -MSB- March 14, 2008 336! 337! SOURCE 338 SUBROUTINE h5dset_extent_f(dataset_id, size, hdferr) 339 IMPLICIT NONE 340 INTEGER(HID_T), INTENT(IN) :: dataset_id ! Dataset identifier 341 INTEGER(HSIZE_T), DIMENSION(*), INTENT(IN) :: size 342 ! Array containing 343 ! dimensions' sizes 344 INTEGER, INTENT(OUT) :: hdferr ! Error code 345!***** 346 INTERFACE 347 INTEGER FUNCTION h5dset_extent_c(dataset_id, size) 348 USE H5GLOBAL 349 !DEC$IF DEFINED(HDF5F90_WINDOWS) 350 !DEC$ATTRIBUTES C,reference,decorate,alias:'H5DSET_EXTENT_C'::h5dset_extent_c 351 !DEC$ENDIF 352 INTEGER(HID_T), INTENT(IN) :: dataset_id 353 INTEGER(HSIZE_T), DIMENSION(*), INTENT(IN) :: size 354 END FUNCTION h5dset_extent_c 355 END INTERFACE 356 357 hdferr = H5Dset_extent_c(dataset_id, size) 358 END SUBROUTINE h5dset_extent_f 359 360!****s* H5D/h5dget_create_plist_f 361! 362! NAME 363! h5dget_create_plist_f 364! 365! PURPOSE 366! Returns an identifier for a copy of the dataset creation 367! property list for a dataset. 368! 369! INPUTS 370! dataset_id - dataset identifier 371! OUTPUTS 372! plist_id - creation property list identifier 373! hdferr - Returns 0 if successful and -1 if fails 374! 375! AUTHOR 376! Elena Pourmal 377! August 12, 1999 378! 379! HISTORY 380! Explicit Fortran interfaces were added for 381! called C functions (it is needed for Windows 382! port). February 28, 2001 383! SOURCE 384 SUBROUTINE h5dget_create_plist_f(dataset_id, plist_id, hdferr) 385 IMPLICIT NONE 386 INTEGER(HID_T), INTENT(IN) :: dataset_id ! Dataset identifier 387 INTEGER(HID_T), INTENT(OUT) :: plist_id ! Dataset creation 388 ! property list identifier 389 INTEGER, INTENT(OUT) :: hdferr ! Error code 390!***** 391 INTERFACE 392 INTEGER FUNCTION h5dget_create_plist_c(dataset_id, plist_id) 393 USE H5GLOBAL 394 !DEC$IF DEFINED(HDF5F90_WINDOWS) 395 !DEC$ATTRIBUTES C,reference,decorate,alias:'H5DGET_CREATE_PLIST_C'::h5dget_create_plist_c 396 !DEC$ENDIF 397 INTEGER(HID_T), INTENT(IN) :: dataset_id 398 INTEGER(HID_T), INTENT(OUT) :: plist_id 399 END FUNCTION h5dget_create_plist_c 400 END INTERFACE 401 402 hdferr = h5dget_create_plist_c(dataset_id, plist_id) 403 END SUBROUTINE h5dget_create_plist_f 404 405! 406!****s* H5D/h5dget_storage_size_f 407! 408! NAME 409! h5dget_storage_size_f 410! 411! PURPOSE 412! Returns the amount of storage requires by a dataset 413! 414! INPUTS 415! dataset_id - dataset identifier 416! OUTPUTS 417! size - datastorage size 418! hdferr - Returns 0 if successful and -1 if fails 419! 420! AUTHOR 421! Elena Pourmal 422! October 15, 2002 423! SOURCE 424 SUBROUTINE h5dget_storage_size_f(dataset_id, size, hdferr) 425 IMPLICIT NONE 426 INTEGER(HID_T), INTENT(IN) :: dataset_id ! Dataset identifier 427 INTEGER(HSIZE_T), INTENT(OUT) :: size ! Amount of storage 428 ! allocated for dataset 429 INTEGER, INTENT(OUT) :: hdferr ! Error code 430!***** 431 INTERFACE 432 INTEGER FUNCTION h5dget_storage_size_c(dataset_id, size) 433 USE H5GLOBAL 434 !DEC$IF DEFINED(HDF5F90_WINDOWS) 435 !DEC$ATTRIBUTES C,reference,decorate,alias:'H5DGET_STORAGE_SIZE_C'::h5dget_storage_size_c 436 !DEC$ENDIF 437 INTEGER(HID_T), INTENT(IN) :: dataset_id 438 INTEGER(HSIZE_T), INTENT(OUT) :: size 439 END FUNCTION h5dget_storage_size_c 440 END INTERFACE 441 442 hdferr = h5dget_storage_size_c(dataset_id, size) 443 END SUBROUTINE h5dget_storage_size_f 444 445! 446!****s* H5D/h5dvlen_get_max_len_f 447! 448! NAME 449! h5dvlen_get_max_len_f 450! 451! PURPOSE 452! Returns maximum length of the VL array elements 453! 454! INPUTS 455! dataset_id - dataset identifier 456! type_id - datatype identifier 457! space_id - dataspace identifier 458! OUTPUTS 459! size - buffer size 460! hdferr - Returns 0 if successful and -1 if fails 461! OPTIONAL PARAMETERS 462! NONE 463! 464! AUTHOR 465! Elena Pourmal 466! October 15, 2002 467! 468! SOURCE 469 SUBROUTINE h5dvlen_get_max_len_f(dataset_id, type_id, space_id, len, hdferr) 470 IMPLICIT NONE 471 INTEGER(HID_T), INTENT(IN) :: dataset_id ! Dataset identifier 472 INTEGER(HID_T), INTENT(IN) :: type_id ! Datatype identifier 473 INTEGER(HID_T), INTENT(IN) :: space_id ! Dataspace identifier 474 INTEGER(SIZE_T), INTENT(OUT) :: len ! Maximum length of the element 475 INTEGER, INTENT(OUT) :: hdferr ! Error code 476!***** 477 INTERFACE 478 INTEGER FUNCTION h5dvlen_get_max_len_c(dataset_id, type_id, space_id, len) 479 USE H5GLOBAL 480 !DEC$IF DEFINED(HDF5F90_WINDOWS) 481 !DEC$ATTRIBUTES C,reference,decorate,alias:'H5DVLEN_GET_MAX_LEN_C'::h5dvlen_get_max_len_c 482 !DEC$ENDIF 483 INTEGER(HID_T), INTENT(IN) :: dataset_id 484 INTEGER(HID_T), INTENT(IN) :: type_id 485 INTEGER(HID_T), INTENT(IN) :: space_id 486 INTEGER(SIZE_T), INTENT(OUT) :: len 487 END FUNCTION h5dvlen_get_max_len_c 488 END INTERFACE 489 490 hdferr = h5dvlen_get_max_len_c(dataset_id, type_id, space_id, len) 491 END SUBROUTINE h5dvlen_get_max_len_f 492 493! 494!****s* H5D/h5dget_space_status_f 495! 496! NAME 497! h5dget_space_status_f 498! 499! PURPOSE 500! Returns the status of data space allocation. 501! 502! INPUTS 503! dset_id - dataset identifier 504! OUTPUTS 505! flag - status; may have one of the following values: 506! H5D_SPACE_STS_ERROR_F 507! H5D_SPACE_STS_NOT_ALLOCATED_F 508! H5D_SPACE_STS_PART_ALLOCATED_F 509! H5D_SPACE_STS_ALLOCATED_F 510! hdferr - Returns 0 if successful and -1 if fails 511! 512! AUTHOR 513! Elena Pourmal 514! March 12, 2003 515! 516! SOURCE 517 SUBROUTINE h5dget_space_status_f(dset_id, flag, hdferr) 518 IMPLICIT NONE 519 INTEGER(HID_T), INTENT(IN) :: dset_id ! Dataspace identifier 520 INTEGER, INTENT(OUT) :: flag ! Memory buffer to fill in 521 INTEGER, INTENT(OUT) :: hdferr ! Error code 522 !***** 523 INTERFACE 524 INTEGER FUNCTION h5dget_space_status_c(dset_id, flag) 525 USE H5GLOBAL 526 !DEC$IF DEFINED(HDF5F90_WINDOWS) 527 !DEC$ATTRIBUTES C,reference,decorate,alias:'H5DGET_SPACE_STATUS_C'::h5dget_space_status_c 528 !DEC$ENDIF 529 INTEGER(HID_T) :: dset_id 530 INTEGER :: flag 531 END FUNCTION h5dget_space_status_c 532 END INTERFACE 533 534 hdferr = h5dget_space_status_c(dset_id, flag) 535 END SUBROUTINE h5dget_space_status_f 536 537! 538!****s* H5D/h5dcreate_anon_f 539! 540! NAME 541! h5dcreate_anon_f 542! 543! PURPOSE 544! Creates a dataset in a file without linking it into the file structure 545! 546! INPUTS 547! loc_id - Identifier of the file or group within which to create the dataset. 548! type_id - Identifier of the datatype to use when creating the dataset. 549! space_id - Identifier of the dataspace to use when creating the dataset. 550! OUTPUTS 551! dset_id - dataset identifier 552! hdferr - Returns 0 if successful and -1 if fails 553! OPTIONAL PARAMETERS 554! dcpl_id - Dataset creation property list identifier. 555! dapl_id - Dataset access property list identifier. 556! 557! AUTHOR 558! M. Scot Breitenfeld 559! February 11, 2008 560! 561! SOURCE 562 SUBROUTINE h5dcreate_anon_f(loc_id, type_id, space_id, dset_id, hdferr, dcpl_id, dapl_id) 563 IMPLICIT NONE 564 INTEGER(HID_T), INTENT(IN) :: loc_id ! File or group identifier. 565 INTEGER(HID_T), INTENT(IN) :: type_id ! Datatype identifier. 566 INTEGER(HID_T), INTENT(IN) :: space_id ! Dataspace identifier. 567 INTEGER(HID_T), INTENT(OUT) :: dset_id ! Dataset identifier. 568 INTEGER, INTENT(OUT) :: hdferr ! Error code. 569 INTEGER(HID_T), OPTIONAL, INTENT(IN) :: dcpl_id ! Dataset creation property list identifier. 570 INTEGER(HID_T), OPTIONAL, INTENT(IN) :: dapl_id ! Dataset access property list identifier. 571!***** 572 INTEGER(HID_T) :: dcpl_id_default 573 INTEGER(HID_T) :: dapl_id_default 574 575 ! 576 ! MS FORTRAN needs explicit interface for C functions called here. 577 ! 578 INTERFACE 579 INTEGER FUNCTION h5dcreate_anon_c(loc_id, type_id, space_id, dcpl_id_default, dapl_id_default, dset_id) 580 USE H5GLOBAL 581 !DEC$IF DEFINED(HDF5F90_WINDOWS) 582 !DEC$ATTRIBUTES C,reference,decorate,alias:'H5DCREATE_ANON_C'::h5dcreate_anon_c 583 !DEC$ENDIF 584 INTEGER(HID_T), INTENT(IN) :: loc_id 585 INTEGER(HID_T), INTENT(IN) :: type_id 586 INTEGER(HID_T), INTENT(IN) :: space_id 587 INTEGER(HID_T) :: dcpl_id_default 588 INTEGER(HID_T) :: dapl_id_default 589 INTEGER(HID_T), INTENT(OUT) :: dset_id 590 END FUNCTION h5dcreate_anon_c 591 END INTERFACE 592 593 dcpl_id_default = H5P_DEFAULT_F 594 dapl_id_default = H5P_DEFAULT_F 595 596 IF(PRESENT(dcpl_id)) dcpl_id_default = dcpl_id 597 IF(PRESENT(dapl_id)) dapl_id_default = dapl_id 598 599 hdferr = h5dcreate_anon_c(loc_id, type_id, space_id, dcpl_id_default, dapl_id_default, dset_id) 600 601 END SUBROUTINE h5dcreate_anon_f 602 603 SUBROUTINE h5dwrite_vl_integer(dset_id, mem_type_id, buf, dims, len, & 604 hdferr, & 605 mem_space_id, file_space_id, xfer_prp) 606 IMPLICIT NONE 607 INTEGER(HID_T), INTENT(IN) :: dset_id ! Dataset identifier 608 INTEGER(HID_T), INTENT(IN) :: mem_type_id ! Memory datatype identifier 609 INTEGER(HSIZE_T), INTENT(IN), DIMENSION(2) :: dims ! MAX len x num_elem 610 INTEGER(SIZE_T), INTENT(IN), DIMENSION(*) :: len ! Array to store 611 ! the length of each 612 ! element 613 INTEGER, INTENT(IN), & 614 DIMENSION(dims(1),dims(2)), TARGET :: buf ! Data buffer 615 INTEGER, INTENT(OUT) :: hdferr ! Error code 616 INTEGER(HID_T), OPTIONAL, INTENT(IN) :: mem_space_id ! Memory dataspace identfier 617 INTEGER(HID_T), OPTIONAL, INTENT(IN) :: file_space_id ! File dataspace identfier 618 INTEGER(HID_T), OPTIONAL, INTENT(IN) :: xfer_prp ! Transfer property list identifier 619 INTEGER(HID_T) :: xfer_prp_default 620 INTEGER(HID_T) :: mem_space_id_default 621 INTEGER(HID_T) :: file_space_id_default 622 623 INTERFACE 624 INTEGER FUNCTION h5dwrite_vl_integer_c(dset_id, mem_type_id, & 625 mem_space_id_default, & 626 file_space_id_default, & 627 xfer_prp_default, buf, dims, len) 628 USE H5GLOBAL 629 !DEC$IF DEFINED(HDF5F90_WINDOWS) 630 !DEC$ATTRIBUTES C,reference,decorate,alias:'H5DWRITE_VL_INTEGER_C'::h5dwrite_vl_integer_c 631 !DEC$ENDIF 632 INTEGER(HID_T), INTENT(IN) :: dset_id 633 INTEGER(HID_T), INTENT(IN) :: mem_type_id 634 INTEGER(HID_T) :: mem_space_id_default 635 INTEGER(HID_T) :: file_space_id_default 636 INTEGER(HID_T) :: xfer_prp_default 637 INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims 638 INTEGER(SIZE_T), INTENT(IN), DIMENSION(*) :: len 639 INTEGER, INTENT(IN), & 640 DIMENSION(dims(1),dims(2)) :: buf 641 END FUNCTION h5dwrite_vl_integer_c 642 END INTERFACE 643 644 xfer_prp_default = H5P_DEFAULT_F 645 mem_space_id_default = H5S_ALL_F 646 file_space_id_default = H5S_ALL_F 647 648 IF (PRESENT(xfer_prp)) xfer_prp_default = xfer_prp 649 IF (PRESENT(mem_space_id)) mem_space_id_default = mem_space_id 650 IF (PRESENT(file_space_id)) file_space_id_default = file_space_id 651 652 hdferr = h5dwrite_vl_integer_c(dset_id, mem_type_id, mem_space_id_default, & 653 file_space_id_default, xfer_prp_default, & 654 buf, dims, len) 655 656 END SUBROUTINE h5dwrite_vl_integer 657 658 SUBROUTINE h5dread_vl_integer(dset_id, mem_type_id, buf, dims, len, & 659 hdferr, & 660 mem_space_id, file_space_id, xfer_prp) 661 IMPLICIT NONE 662 INTEGER(HID_T), INTENT(IN) :: dset_id ! Dataset identifier 663 INTEGER(HID_T), INTENT(IN) :: mem_type_id ! Memory datatype identifier 664 INTEGER(HSIZE_T), INTENT(IN), DIMENSION(2) :: dims ! MAX len x num_elem 665 INTEGER(SIZE_T), INTENT(INOUT), DIMENSION(*) :: len ! Array to store 666 ! the length of each 667 ! element 668 INTEGER, INTENT(INOUT), & 669 DIMENSION(dims(1),dims(2)), TARGET :: buf ! Data buffer 670 INTEGER, INTENT(OUT) :: hdferr ! Error code 671 ! -1 if failed, 0 otherwise 672 INTEGER(HID_T), OPTIONAL, INTENT(IN) :: mem_space_id ! Memory dataspace identfier 673 INTEGER(HID_T), OPTIONAL, INTENT(IN) :: file_space_id ! File dataspace identfier 674 INTEGER(HID_T), OPTIONAL, INTENT(IN) :: xfer_prp ! Transfer property list identifier 675 INTEGER(HID_T) :: xfer_prp_default 676 INTEGER(HID_T) :: mem_space_id_default 677 INTEGER(HID_T) :: file_space_id_default 678 INTEGER(HID_T) :: tmp 679 INTEGER :: error 680 681 INTERFACE 682 INTEGER FUNCTION h5dread_vl_integer_c(dset_id, mem_type_id, & 683 mem_space_id_default, & 684 file_space_id_default, & 685 xfer_prp_default, buf, dims, len) 686 USE H5GLOBAL 687 !DEC$IF DEFINED(HDF5F90_WINDOWS) 688 !DEC$ATTRIBUTES C,reference,decorate,alias:'H5DREAD_VL_INTEGER_C'::h5dread_vl_integer_c 689 !DEC$ENDIF 690 INTEGER(HID_T), INTENT(IN) :: dset_id 691 INTEGER(HID_T), INTENT(IN) :: mem_type_id 692 INTEGER(HID_T) :: mem_space_id_default 693 INTEGER(HID_T) :: file_space_id_default 694 INTEGER(HID_T) :: xfer_prp_default 695 INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims 696 INTEGER(SIZE_T), INTENT(INOUT), DIMENSION(*) :: len 697 INTEGER, INTENT(INOUT), & 698 DIMENSION(dims(1),dims(2)) :: buf 699 END FUNCTION h5dread_vl_integer_c 700 END INTERFACE 701 702 CALL h5dget_space_f(dset_id, tmp, error) 703 xfer_prp_default = H5P_DEFAULT_F 704 mem_space_id_default = tmp 705 file_space_id_default = tmp 706 707 IF (PRESENT(xfer_prp)) xfer_prp_default = xfer_prp 708 IF (PRESENT(mem_space_id)) mem_space_id_default = mem_space_id 709 IF (PRESENT(file_space_id)) file_space_id_default = file_space_id 710 711 hdferr = h5dread_vl_integer_c(dset_id, mem_type_id, mem_space_id_default, & 712 file_space_id_default, xfer_prp_default, & 713 buf, dims, len) 714 715 END SUBROUTINE h5dread_vl_integer 716 717 SUBROUTINE h5dwrite_vl_real(dset_id, mem_type_id, buf, dims, len, & 718 hdferr, & 719 mem_space_id, file_space_id, xfer_prp) 720 IMPLICIT NONE 721 INTEGER(HID_T), INTENT(IN) :: dset_id ! Dataset identifier 722 INTEGER(HID_T), INTENT(IN) :: mem_type_id ! Memory datatype identifier 723 INTEGER(HSIZE_T), INTENT(IN), DIMENSION(2) :: dims ! MAX len x num_elem 724 INTEGER(SIZE_T), INTENT(IN), DIMENSION(*) :: len ! Array to store 725 ! the length of each 726 ! element 727 REAL, INTENT(IN), & 728 DIMENSION(dims(1),dims(2)) :: buf ! Data buffer 729 INTEGER, INTENT(OUT) :: hdferr ! Error code 730 INTEGER(HID_T), OPTIONAL, INTENT(IN) :: mem_space_id ! Memory dataspace identfier 731 INTEGER(HID_T), OPTIONAL, INTENT(IN) :: file_space_id ! File dataspace identfier 732 INTEGER(HID_T), OPTIONAL, INTENT(IN) :: xfer_prp ! Transfer property list identifier 733 734 INTEGER(HID_T) :: xfer_prp_default 735 INTEGER(HID_T) :: mem_space_id_default 736 INTEGER(HID_T) :: file_space_id_default 737 738 INTERFACE 739 INTEGER FUNCTION h5dwrite_vl_real_c(dset_id, mem_type_id, & 740 mem_space_id_default, & 741 file_space_id_default, & 742 xfer_prp_default, buf, dims, len) 743 USE H5GLOBAL 744 !DEC$IF DEFINED(HDF5F90_WINDOWS) 745 !DEC$ATTRIBUTES C,reference,decorate,alias:'H5DWRITE_VL_REAL_C'::h5dwrite_vl_real_c 746 !DEC$ENDIF 747 INTEGER(HID_T), INTENT(IN) :: dset_id 748 INTEGER(HID_T), INTENT(IN) :: mem_type_id 749 INTEGER(HID_T) :: mem_space_id_default 750 INTEGER(HID_T) :: file_space_id_default 751 INTEGER(HID_T) :: xfer_prp_default 752 INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims 753 INTEGER(SIZE_T), INTENT(IN), DIMENSION(*) :: len 754 REAL, INTENT(IN), & 755 DIMENSION(dims(1),dims(2)) :: buf 756 END FUNCTION h5dwrite_vl_real_c 757 END INTERFACE 758 759 760 xfer_prp_default = H5P_DEFAULT_F 761 mem_space_id_default = H5S_ALL_F 762 file_space_id_default = H5S_ALL_F 763 764 IF (PRESENT(xfer_prp)) xfer_prp_default = xfer_prp 765 IF (PRESENT(mem_space_id)) mem_space_id_default = mem_space_id 766 IF (PRESENT(file_space_id)) file_space_id_default = file_space_id 767 768 hdferr = h5dwrite_vl_real_c(dset_id, mem_type_id, mem_space_id_default, & 769 file_space_id_default, xfer_prp_default, & 770 buf, dims, len) 771 772 END SUBROUTINE h5dwrite_vl_real 773 774 SUBROUTINE h5dread_vl_real(dset_id, mem_type_id, buf, dims, len, & 775 hdferr, & 776 mem_space_id, file_space_id, xfer_prp) 777 IMPLICIT NONE 778 INTEGER(HID_T), INTENT(IN) :: dset_id ! Dataset identifier 779 INTEGER(HID_T), INTENT(IN) :: mem_type_id ! Memory datatype identifier 780 INTEGER(HSIZE_T), INTENT(IN), DIMENSION(2) :: dims ! MAX len x num_elem 781 INTEGER(SIZE_T), INTENT(INOUT), DIMENSION(*) :: len ! Array to store the length of each element 782 REAL, INTENT(INOUT), & 783 DIMENSION(dims(1),dims(2)) :: buf ! Data buffer 784 INTEGER, INTENT(OUT) :: hdferr ! Error code 785 ! -1 if failed, 0 otherwise 786 INTEGER(HID_T), OPTIONAL, INTENT(IN) :: mem_space_id ! Memory dataspace identfier 787 INTEGER(HID_T), OPTIONAL, INTENT(IN) :: file_space_id ! File dataspace identfier 788 INTEGER(HID_T), OPTIONAL, INTENT(IN) :: xfer_prp ! Transfer property list identifier 789 790 INTEGER(HID_T) :: xfer_prp_default 791 INTEGER(HID_T) :: mem_space_id_default 792 INTEGER(HID_T) :: file_space_id_default 793 INTEGER(HID_T) :: tmp 794 INTEGER :: error 795 796 INTERFACE 797 INTEGER FUNCTION h5dread_vl_real_c(dset_id, mem_type_id, & 798 mem_space_id_default, & 799 file_space_id_default, & 800 xfer_prp_default, buf, dims, len) 801 USE H5GLOBAL 802 !DEC$IF DEFINED(HDF5F90_WINDOWS) 803 !DEC$ATTRIBUTES C,reference,decorate,alias:'H5DREAD_VL_REAL_C'::h5dread_vl_real_c 804 !DEC$ENDIF 805 INTEGER(HID_T), INTENT(IN) :: dset_id 806 INTEGER(HID_T), INTENT(IN) :: mem_type_id 807 INTEGER(HID_T) :: mem_space_id_default 808 INTEGER(HID_T) :: file_space_id_default 809 INTEGER(HID_T) :: xfer_prp_default 810 INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims 811 INTEGER(SIZE_T), INTENT(INOUT), DIMENSION(*) :: len 812 REAL, INTENT(INOUT), & 813 DIMENSION(dims(1),dims(2)) :: buf 814 END FUNCTION h5dread_vl_real_c 815 END INTERFACE 816 817 CALL h5dget_space_f(dset_id, tmp, error) 818 xfer_prp_default = H5P_DEFAULT_F 819 mem_space_id_default = tmp 820 file_space_id_default = tmp 821 822 IF (PRESENT(xfer_prp)) xfer_prp_default = xfer_prp 823 IF (PRESENT(mem_space_id)) mem_space_id_default = mem_space_id 824 IF (PRESENT(file_space_id)) file_space_id_default = file_space_id 825 826 hdferr = h5dread_vl_real_c(dset_id, mem_type_id, mem_space_id_default, & 827 file_space_id_default, xfer_prp_default, & 828 buf, dims, len) 829 830 END SUBROUTINE h5dread_vl_real 831 832 SUBROUTINE h5dwrite_vl_string(dset_id, mem_type_id, buf, dims, str_len, & 833 hdferr, & 834 mem_space_id, file_space_id, xfer_prp) 835 IMPLICIT NONE 836 INTEGER(HID_T), INTENT(IN) :: dset_id ! Dataset identifier 837 INTEGER(HID_T), INTENT(IN) :: mem_type_id ! Memory datatype identifier 838 INTEGER(HSIZE_T), INTENT(IN), DIMENSION(2) :: dims ! Number of strings 839 INTEGER(SIZE_T), INTENT(IN), DIMENSION(*) :: str_len ! Array to store the length of each element 840 CHARACTER(LEN=*), INTENT(IN), & 841 DIMENSION(dims(2)) :: buf ! Data buffer 842 INTEGER, INTENT(OUT) :: hdferr ! Error code 843 INTEGER(HID_T), OPTIONAL, INTENT(IN) :: mem_space_id ! Memory dataspace identfier 844 INTEGER(HID_T), OPTIONAL, INTENT(IN) :: file_space_id ! File dataspace identfier 845 INTEGER(HID_T), OPTIONAL, INTENT(IN) :: xfer_prp ! Transfer property list identifier 846 847 INTEGER(HID_T) :: xfer_prp_default 848 INTEGER(HID_T) :: mem_space_id_default 849 INTEGER(HID_T) :: file_space_id_default 850 851 INTERFACE 852 INTEGER FUNCTION h5dwrite_vl_string_c(dset_id, mem_type_id, & 853 mem_space_id_default, & 854 file_space_id_default, & 855 ! xfer_prp_default, tmp_buf, dims, str_len) 856 xfer_prp_default, buf, dims, str_len) 857 USE H5GLOBAL 858 !DEC$IF DEFINED(HDF5F90_WINDOWS) 859 !DEC$ATTRIBUTES C,reference,decorate,alias:'H5DWRITE_VL_STRING_C'::h5dwrite_vl_string_c 860 !DEC$ENDIF 861 !DEC$ATTRIBUTES reference :: buf 862 INTEGER(HID_T), INTENT(IN) :: dset_id 863 INTEGER(HID_T), INTENT(IN) :: mem_type_id 864 INTEGER(HID_T) :: mem_space_id_default 865 INTEGER(HID_T) :: file_space_id_default 866 INTEGER(HID_T) :: xfer_prp_default 867 INTEGER(HSIZE_T), INTENT(IN), DIMENSION(2) :: dims 868 INTEGER(SIZE_T), INTENT(IN), DIMENSION(*) :: str_len 869 CHARACTER(LEN=*), DIMENSION(dims(2)) :: buf 870 END FUNCTION 871 END INTERFACE 872 873 874 xfer_prp_default = H5P_DEFAULT_F 875 mem_space_id_default = H5S_ALL_F 876 file_space_id_default = H5S_ALL_F 877 878 IF (PRESENT(xfer_prp)) xfer_prp_default = xfer_prp 879 IF (PRESENT(mem_space_id)) mem_space_id_default = mem_space_id 880 IF (PRESENT(file_space_id)) file_space_id_default = file_space_id 881 882 hdferr = h5dwrite_vl_string_c(dset_id, mem_type_id, mem_space_id_default, & 883 file_space_id_default, xfer_prp_default, & 884 buf, dims, str_len) 885 886 END SUBROUTINE h5dwrite_vl_string 887 888 SUBROUTINE h5dread_vl_string(dset_id, mem_type_id, buf, dims, str_len, & 889 hdferr, & 890 mem_space_id, file_space_id, xfer_prp) 891 IMPLICIT NONE 892 INTEGER(HID_T), INTENT(IN) :: dset_id ! Dataset identifier 893 INTEGER(HID_T), INTENT(IN) :: mem_type_id ! Memory datatype identifier 894 INTEGER(HSIZE_T), INTENT(IN), DIMENSION(2) :: dims ! number of strings 895 INTEGER(SIZE_T), INTENT(OUT), DIMENSION(*) :: str_len ! Array to store 896 ! the length of each 897 ! element 898 CHARACTER(LEN=*), INTENT(OUT), & 899 DIMENSION(dims(2)) :: buf ! Data buffer 900 INTEGER, INTENT(OUT) :: hdferr ! Error code 901 INTEGER(HID_T), OPTIONAL, INTENT(IN) :: mem_space_id ! Memory dataspace identfier 902 INTEGER(HID_T), OPTIONAL, INTENT(IN) :: file_space_id ! File dataspace identfier 903 INTEGER(HID_T), OPTIONAL, INTENT(IN) :: xfer_prp ! Transfer property list identifier 904 905 INTEGER(HID_T) :: xfer_prp_default 906 INTEGER(HID_T) :: mem_space_id_default 907 INTEGER(HID_T) :: file_space_id_default 908 909 INTERFACE 910 INTEGER FUNCTION h5dread_vl_string_c(dset_id, mem_type_id, & 911 mem_space_id_default, & 912 file_space_id_default, & 913 xfer_prp_default, buf, dims, str_len) 914 USE H5GLOBAL 915 !DEC$IF DEFINED(HDF5F90_WINDOWS) 916 !DEC$ATTRIBUTES C,reference,decorate,alias:'H5DREAD_VL_STRING_C'::h5dread_vl_string_c 917 !DEC$ENDIF 918 !DEC$ATTRIBUTES reference :: buf 919 INTEGER(HID_T), INTENT(IN) :: dset_id 920 INTEGER(HID_T), INTENT(IN) :: mem_type_id 921 INTEGER(HID_T) :: mem_space_id_default 922 INTEGER(HID_T) :: file_space_id_default 923 INTEGER(HID_T) :: xfer_prp_default 924 INTEGER(HSIZE_T), INTENT(IN), DIMENSION(2) :: dims 925 INTEGER(SIZE_T), INTENT(OUT), DIMENSION(*) :: str_len 926 CHARACTER(LEN=*), DIMENSION(dims(2)) :: buf 927 END FUNCTION h5dread_vl_string_c 928 END INTERFACE 929 930 xfer_prp_default = H5P_DEFAULT_F 931 mem_space_id_default = H5S_ALL_F 932 file_space_id_default = H5S_ALL_F 933 934 IF (PRESENT(xfer_prp)) xfer_prp_default = xfer_prp 935 IF (PRESENT(mem_space_id)) mem_space_id_default = mem_space_id 936 IF (PRESENT(file_space_id)) file_space_id_default = file_space_id 937 938 hdferr = h5dread_vl_string_c(dset_id, mem_type_id, mem_space_id_default, & 939 file_space_id_default, xfer_prp_default, & 940 buf, dims, str_len) 941 RETURN 942 END SUBROUTINE h5dread_vl_string 943 944! 945!****s* H5D/h5dget_space_f 946! 947! NAME 948! h5dget_space_f 949! 950! PURPOSE 951! Returns an identifier for a copy of the dataspace for a 952! dataset. 953! 954! INPUTS 955! dataset_id - dataset identifier 956! OUTPUTS 957! dataspace_id - dataspace identifier 958! hdferr - Returns 0 if successful and -1 if fails 959! 960! AUTHOR 961! Elena Pourmal 962! August 12, 1999 963! 964! HISTORY 965! Explicit Fortran interfaces were added for 966! called C functions (it is needed for Windows 967! port). February 28, 2001 968! 969! SOURCE 970 SUBROUTINE h5dget_space_f(dataset_id, dataspace_id, hdferr) 971 IMPLICIT NONE 972 INTEGER(HID_T), INTENT(IN) :: dataset_id ! Dataset identifier 973 INTEGER(HID_T), INTENT(OUT) :: dataspace_id ! Dataspace identifier 974 INTEGER, INTENT(OUT) :: hdferr ! Error code 975!***** 976 INTERFACE 977 INTEGER FUNCTION h5dget_space_c(dataset_id, dataspace_id) 978 USE H5GLOBAL 979 !DEC$IF DEFINED(HDF5F90_WINDOWS) 980 !DEC$ATTRIBUTES C,reference,decorate,alias:'H5DGET_SPACE_C'::h5dget_space_c 981 !DEC$ENDIF 982 INTEGER(HID_T), INTENT(IN) :: dataset_id 983 INTEGER(HID_T), INTENT(OUT) :: dataspace_id 984 END FUNCTION h5dget_space_c 985 END INTERFACE 986 987 hdferr = h5dget_space_c(dataset_id, dataspace_id) 988END SUBROUTINE h5dget_space_f 989 990!****s* H5D/h5dget_access_plist_f 991! 992! NAME 993! h5dget_access_plist_f 994! 995! PURPOSE 996! Returns a copy of the dataset creation property list. 997! 998! INPUTS 999! dset_id - Dataset identifier 1000! 1001! OUTPUTS 1002! plist_id - Dataset access property list identifier 1003! hdferr - Returns 0 if successful and -1 if fails 1004! 1005! AUTHOR 1006! M. Scot Breitenfeld 1007! April 13, 2009 1008! 1009! SOURCE 1010SUBROUTINE h5dget_access_plist_f(dset_id, plist_id, hdferr) 1011 IMPLICIT NONE 1012 INTEGER(HID_T), INTENT(IN) :: dset_id 1013 INTEGER(HID_T), INTENT(OUT) :: plist_id 1014 INTEGER , INTENT(OUT) :: hdferr 1015!***** 1016 INTERFACE 1017 INTEGER FUNCTION h5dget_access_plist_c(dset_id, plist_id) 1018 USE H5GLOBAL 1019 !DEC$IF DEFINED(HDF5F90_WINDOWS) 1020 !DEC$ATTRIBUTES C,reference,decorate,alias:'H5DGET_ACCESS_PLIST_C'::h5dget_access_plist_c 1021 !DEC$ENDIF 1022 INTEGER(HID_T), INTENT(IN) :: dset_id 1023 INTEGER(HID_T), INTENT(OUT) :: plist_id 1024 END FUNCTION h5dget_access_plist_c 1025 END INTERFACE 1026 1027 hdferr = h5dget_access_plist_c(dset_id, plist_id) 1028 1029END SUBROUTINE h5dget_access_plist_f 1030 1031END MODULE H5D 1032 1033 1034