summaryrefslogtreecommitdiffstats
path: root/fortran/testpar
diff options
context:
space:
mode:
authorAllen Byrne <50328838+byrnHDF@users.noreply.github.com>2023-06-15 00:46:48 (GMT)
committerGitHub <noreply@github.com>2023-06-15 00:46:48 (GMT)
commitd987620daeb226f3e2c89a48383f52cef83a94c6 (patch)
tree3a57f2b538e1a664dd5f0512c676fe3ef1f355fb /fortran/testpar
parent3d231bd0c018c4ac7a78640a51d404332a712d72 (diff)
downloadhdf5-d987620daeb226f3e2c89a48383f52cef83a94c6.zip
hdf5-d987620daeb226f3e2c89a48383f52cef83a94c6.tar.gz
hdf5-d987620daeb226f3e2c89a48383f52cef83a94c6.tar.bz2
Sync fortran src files with develop (#3126)
* Sync fortran src files with develop
Diffstat (limited to 'fortran/testpar')
-rw-r--r--fortran/testpar/async.F90101
1 files changed, 61 insertions, 40 deletions
diff --git a/fortran/testpar/async.F90 b/fortran/testpar/async.F90
index e3a80ad..2235ecf 100644
--- a/fortran/testpar/async.F90
+++ b/fortran/testpar/async.F90
@@ -26,6 +26,10 @@ MODULE test_async_APIs
LOGICAL :: async_enabled = .TRUE.
LOGICAL :: mpi_thread_mult = .TRUE.
+ INTEGER(C_INT), PARAMETER :: logical_true = 1
+ INTEGER(C_INT), PARAMETER :: logical_false = 0
+
+
! Custom group iteration callback data
TYPE, bind(c) :: iter_info
CHARACTER(KIND=C_CHAR), DIMENSION(1:12) :: name ! The name of the object
@@ -174,7 +178,7 @@ CONTAINS
INTEGER(HID_T) :: space_id
INTEGER(HID_T) :: attr_id0, attr_id1, attr_id2
LOGICAL :: exists
- LOGICAL(C_BOOL), TARGET :: exists0 = .FALSE., exists1 = .FALSE., exists2 = .FALSE., exists3 = .FALSE.
+ INTEGER(C_INT), TARGET :: exists0=logical_false, exists1=logical_false, exists2=logical_false, exists3=logical_false
TYPE(C_PTR) :: f_ptr, f_ptr1, f_ptr2
CALL H5EScreate_f(es_id, hdferror)
@@ -194,8 +198,8 @@ CONTAINS
CALL H5Screate_f(H5S_SCALAR_F, space_id, hdferror)
CALL check("H5Screate_f", hdferror, total_error)
- f_ptr1 = C_LOC(app_file)
- f_ptr2 = C_LOC(app_func)
+ f_ptr1 = C_LOC(app_file(1:1))
+ f_ptr2 = C_LOC(app_func(1:1))
CALL h5acreate_async_f(file_id, attr_name, H5T_NATIVE_INTEGER, space_id, attr_id0, es_id, hdferror, &
file=f_ptr1, func=f_ptr2, line=app_line)
CALL check("h5acreate_f",hdferror,total_error)
@@ -300,10 +304,10 @@ CONTAINS
CALL check("H5ESwait_f", hdferror, total_error)
CALL VERIFY("H5ESwait_f", err_occurred, .FALSE., total_error)
- CALL VERIFY("H5Aexists_async_f", LOGICAL(exists0), .TRUE., total_error)
- CALL VERIFY("H5Aexists_async_f", LOGICAL(exists1), .TRUE., total_error)
- CALL VERIFY("H5Aexists_by_name_async_f", LOGICAL(exists2), .TRUE., total_error)
- CALL VERIFY("H5Aexists_by_name_async_f", LOGICAL(exists3), .TRUE., total_error)
+ CALL VERIFY("H5Aexists_async_f", exists0, logical_true, total_error)
+ CALL VERIFY("H5Aexists_async_f", exists1, logical_true, total_error)
+ CALL VERIFY("H5Aexists_by_name_async_f", exists2, logical_true, total_error)
+ CALL VERIFY("H5Aexists_by_name_async_f", exists3, logical_true, total_error)
CALL VERIFY("H5Aread_async_f", attr_rdata0, attr_data0, total_error)
CALL VERIFY("H5Aread_async_f", attr_rdata1, attr_data1, total_error)
@@ -784,7 +788,7 @@ CONTAINS
INTEGER(hid_t) :: sid = -1 ! Dataspace ID
CHARACTER(LEN=12), PARAMETER :: CORDER_GROUP_NAME = "corder_group"
CHARACTER(LEN=12), PARAMETER :: CORDER_GROUP_NAME2 = "corder_grp00"
- LOGICAL(C_BOOL), TARGET :: exists1, exists2
+ INTEGER(C_INT), TARGET :: exists1, exists2
LOGICAL :: exists
TYPE(C_PTR) :: f_ptr
@@ -911,12 +915,12 @@ CONTAINS
CALL H5Fopen_async_f(filename, H5F_ACC_RDWR_F, file_id, es_id, hdferror, access_prp = fapl_id )
CALL check("h5fopen_async_f",hdferror,total_error)
- exists1 = .FALSE.
+ exists1 = logical_false
f_ptr = C_LOC(exists1)
CALL H5Lexists_async_f(file_id, "hard_zero", f_ptr, es_id, hdferror)
CALL check("H5Lexists_async_f",hdferror,total_error)
- exists2 = .FALSE.
+ exists2 = logical_false
f_ptr = C_LOC(exists2)
CALL H5Lexists_async_f(file_id, "hard_two", f_ptr, es_id, hdferror)
CALL check("H5Lexists_async_f",hdferror,total_error)
@@ -931,8 +935,8 @@ CONTAINS
CALL check("H5ESwait_f", hdferror, total_error)
CALL VERIFY("H5ESwait_f", err_occurred, .FALSE., total_error)
- CALL VERIFY("H5Lexists_async_f", LOGICAL(exists1), .TRUE., total_error)
- CALL VERIFY("H5Lexists_async_f", LOGICAL(exists2), .TRUE., total_error)
+ CALL VERIFY("H5Lexists_async_f", exists1, logical_true, total_error)
+ CALL VERIFY("H5Lexists_async_f", exists2, logical_true, total_error)
CALL h5fopen_f(filename, H5F_ACC_RDWR_F, file_id, hdferror, access_prp = fapl_id )
CALL check("h5fopen_f",hdferror, total_error)
@@ -1255,7 +1259,11 @@ PROGRAM async_test
LOGICAL :: registered
INTEGER :: sum
INTEGER :: nerrors = 0
+ INTEGER :: len, idx
+ CHARACTER(LEN=255) :: vol_connector_string, vol_connector_name
+ INTEGER(C_INT64_T) :: cap_flags
+ INTEGER(HID_T) :: plist_id
LOGICAL :: cleanup
INTEGER :: ret_total_error = 0
@@ -1297,47 +1305,60 @@ PROGRAM async_test
!
CALL h5open_f(hdferror)
-
! CHECK ASYNC VOLS AVAILABILITY
!
- ! (1) Check if ASYNC VOL is available
- CALL H5VLis_connector_registered_by_name_f("async", registered, hdferror)
- CALL check("H5VLis_connector_registered_by_name_f", hdferror, total_error)
- IF(.NOT.registered)THEN
+ IF(mpi_rank==0) WRITE(*,'(A)', ADVANCE="NO") "VOL CONNECTOR TESTED: "
+
+ CALL get_environment_variable("HDF5_VOL_CONNECTOR", VALUE=vol_connector_string, LENGTH=len)
+ IF(len .EQ. 0)THEN
+
+ ! No VOL connector set; using native VOL connector
+ async_enabled = .FALSE.
+ IF(mpi_rank==0) WRITE(*,'(A,/)') "NATIVE"
+
+ ELSE
+
+ idx = INDEX(vol_connector_string, " ")
+ vol_connector_name = vol_connector_string(1:idx-1)
- ! (2) check if the DAOS VOL is available
- CALL H5VLis_connector_registered_by_name_f("daos", registered, hdferror)
+ ! (1) Check if the VOL is available
+ CALL H5VLis_connector_registered_by_name_f(TRIM(vol_connector_name), registered, hdferror)
CALL check("H5VLis_connector_registered_by_name_f", hdferror, total_error)
IF(.NOT.registered)THEN
- ! No async compatible VOL found
+ ! No VOL found registered
async_enabled = .FALSE.
+ IF(mpi_rank==0) WRITE(*,'(A,/)') "NATIVE"
ELSE
- CALL H5Vlregister_connector_by_name_f("daos", vol_id, hdferror)
- CALL check("H5Vlregister_connector_by_name_f", hdferror, total_error)
+ ! (2) Check if the VOL is async compatible
+ CALL h5pcreate_f(H5P_FILE_ACCESS_F, plist_id, hdferror)
+ CALL check("h5pcreate_f", hdferror, total_error)
+ CALL h5pget_vol_cap_flags_f(plist_id, cap_flags, hdferror)
+ CALL check("h5pget_vol_cap_flags_f", hdferror, total_error)
+ CALL h5pclose_f(plist_id, hdferror)
+ CALL check("h5pcreate_f", hdferror, total_error)
+ IF(H5VL_CAP_FLAG_ASYNC_F.EQ.1_C_INT64_T) async_enabled = .TRUE.
+ IF(async_enabled .EQV. .FALSE.)THEN
+ ! No async compatible VOL found
+ IF(mpi_rank==0) WRITE(*,'(A,/)') "NATIVE"
+ ELSE
+ IF(mpi_rank==0) WRITE(*,'(A,/)') TRIM(vol_connector_name)
+ CALL H5Vlregister_connector_by_name_f(TRIM(vol_connector_name), vol_id, hdferror)
+ CALL check("H5Vlregister_connector_by_name_f", hdferror, total_error)
+ ENDIF
ENDIF
- ELSE
- CALL H5Vlregister_connector_by_name_f("async", vol_id, hdferror)
- CALL check("H5Vlregister_connector_by_name_f", hdferror, total_error)
- ENDIF
-
- IF ( (async_enabled .EQV. .TRUE.) .AND. (mpi_thread_mult .EQV. .FALSE.) ) THEN
- total_error = -1 ! Skip test
- IF(mpi_rank==0) CALL write_test_status(total_error, &
- "No MPI_Init_thread support for MPI_THREAD_MULTIPLE", total_error)
- CALL MPI_Barrier(MPI_COMM_WORLD, mpierror)
- CALL MPI_Finalize(mpierror)
- STOP
+ IF ( (async_enabled .EQV. .TRUE.) .AND. (mpi_thread_mult .EQV. .FALSE.) ) THEN
+ total_error = -1 ! Skip test
+ IF(mpi_rank==0) CALL write_test_status(total_error, &
+ "No MPI_Init_thread support for MPI_THREAD_MULTIPLE", total_error)
+ CALL MPI_Barrier(MPI_COMM_WORLD, mpierror)
+ CALL MPI_Finalize(mpierror)
+ STOP
+ ENDIF
ENDIF
-! IF(total_error.LT.0)THEN
-! IF(mpi_rank==0) CALL write_test_status(total_error, &
-! 'Testing async APIs', total_error)
-! STOP
-! ENDIF
-
! H5ES API TESTING
ret_total_error = 0
CALL H5ES_tests(cleanup, ret_total_error)