Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Addressed Fortran issues with promoted integers and reals via compilation flags #4209

Merged
merged 4 commits into from
Mar 22, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 3 additions & 2 deletions HDF5Examples/FORTRAN/H5G/h5ex_g_traverse.F90
Original file line number Diff line number Diff line change
Expand Up @@ -84,8 +84,9 @@ RECURSIVE INTEGER(KIND=C_INT) FUNCTION op_func(loc_id, name, info, operator_data
CHARACTER(LEN=10) :: space
INTEGER :: spaces ! Number of whitespaces to prepend to output
INTEGER :: len
INTEGER :: ret_val_func

ret_val = 0
ret_val_func = 0

name_string(1:10) = " "
len = 0
Expand Down Expand Up @@ -140,7 +141,7 @@ RECURSIVE INTEGER(KIND=C_INT) FUNCTION op_func(loc_id, name, info, operator_data
ptr2 = C_LOC(nextod%recurs)
funptr = C_FUNLOC(op_func)
CALL h5literate_by_name_f(loc_id, name_string, H5_INDEX_NAME_F, H5_ITER_NATIVE_F, idx, &
funptr, ptr2, ret_val, status)
funptr, ptr2, ret_val_func, status)

ENDIF
WRITE(*,'(A)') space(1:spaces)//"}"
Expand Down
7 changes: 4 additions & 3 deletions HDF5Examples/FORTRAN/H5PAR/ph5_f90_dataset.F90
Original file line number Diff line number Diff line change
Expand Up @@ -25,9 +25,10 @@ PROGRAM DATASET
!
! MPI definitions and calls.
!
INTEGER :: mpierror ! MPI error flag
INTEGER :: comm, info
INTEGER :: mpi_size, mpi_rank
INTEGER(KIND=MPI_INTEGER_KIND) :: mpierror ! MPI error flag
INTEGER(KIND=MPI_INTEGER_KIND) :: comm, info
INTEGER(KIND=MPI_INTEGER_KIND) :: mpi_size, mpi_rank

comm = MPI_COMM_WORLD
info = MPI_INFO_NULL
CALL MPI_INIT(mpierror)
Expand Down
6 changes: 3 additions & 3 deletions HDF5Examples/FORTRAN/H5PAR/ph5_f90_file_create.F90
Original file line number Diff line number Diff line change
Expand Up @@ -18,9 +18,9 @@ PROGRAM FILE_CREATE
!
! MPI definitions and calls.
!
INTEGER :: mpierror ! MPI error flag
INTEGER :: comm, info
INTEGER :: mpi_size, mpi_rank
INTEGER(KIND=MPI_INTEGER_KIND) :: mpierror ! MPI error flag
INTEGER(KIND=MPI_INTEGER_KIND) :: comm, info
INTEGER(KIND=MPI_INTEGER_KIND) :: mpi_size, mpi_rank
comm = MPI_COMM_WORLD
info = MPI_INFO_NULL

Expand Down
18 changes: 10 additions & 8 deletions HDF5Examples/FORTRAN/H5PAR/ph5_f90_filtered_writes_no_sel.F90
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,7 @@ MODULE filter
INTEGER , PARAMETER :: PATH_MAX = 512

! Global variables
INTEGER :: mpi_rank, mpi_size
INTEGER(KIND=MPI_INTEGER_KIND) :: mpi_rank, mpi_size

CONTAINS
!
Expand Down Expand Up @@ -91,10 +91,11 @@ SUBROUTINE cleanup(filename)

LOGICAL :: do_cleanup
INTEGER :: status
INTEGER(KIND=MPI_INTEGER_KIND) :: mpierror

CALL get_environment_variable("HDF5_NOCLEANUP", STATUS=status)
IF(status.EQ.0)THEN
CALL MPI_File_delete(filename, MPI_INFO_NULL, status)
CALL MPI_File_delete(filename, MPI_INFO_NULL, mpierror)
ENDIF

END SUBROUTINE cleanup
Expand Down Expand Up @@ -241,18 +242,19 @@ PROGRAM main
USE filter
IMPLICIT NONE

INTEGER :: comm = MPI_COMM_WORLD
INTEGER :: info = MPI_INFO_NULL
INTEGER(KIND=MPI_INTEGER_KIND) :: comm = MPI_COMM_WORLD
INTEGER(KIND=MPI_INTEGER_KIND) :: info = MPI_INFO_NULL
INTEGER(hid_t) :: file_id
INTEGER(hid_t) :: fapl_id
INTEGER(hid_t) :: dxpl_id
CHARACTER(LEN=PATH_MAX) :: par_prefix
CHARACTER(LEN=PATH_MAX) :: filename
INTEGER :: status
INTEGER(KIND=MPI_INTEGER_KIND) :: mpierror

CALL MPI_Init(status)
CALL MPI_Comm_size(comm, mpi_size, status)
CALL MPI_Comm_rank(comm, mpi_rank, status)
CALL MPI_Init(mpierror)
CALL MPI_Comm_size(comm, mpi_size, mpierror)
CALL MPI_Comm_rank(comm, mpi_rank, mpierror)

!
! Initialize HDF5 library and Fortran interfaces.
Expand Down Expand Up @@ -349,6 +351,6 @@ PROGRAM main
! ------------------------------------
CALL cleanup(filename)

CALL MPI_Finalize(status)
CALL MPI_Finalize(mpierror)

END PROGRAM main
6 changes: 3 additions & 3 deletions HDF5Examples/FORTRAN/H5PAR/ph5_f90_hyperslab_by_chunk.F90
Original file line number Diff line number Diff line change
Expand Up @@ -34,9 +34,9 @@ PROGRAM DATASET_BY_CHUNK
!
! MPI definitions and calls.
!
INTEGER :: mpierror ! MPI error flag
INTEGER :: comm, info
INTEGER :: mpi_size, mpi_rank
INTEGER(KIND=MPI_INTEGER_KIND) :: mpierror ! MPI error flag
INTEGER(KIND=MPI_INTEGER_KIND) :: comm, info
INTEGER(KIND=MPI_INTEGER_KIND) :: mpi_size, mpi_rank

comm = MPI_COMM_WORLD
info = MPI_INFO_NULL
Expand Down
6 changes: 3 additions & 3 deletions HDF5Examples/FORTRAN/H5PAR/ph5_f90_hyperslab_by_col.F90
Original file line number Diff line number Diff line change
Expand Up @@ -30,9 +30,9 @@ PROGRAM DATASET_BY_COL
!
! MPI definitions and calls.
!
INTEGER :: mpierror ! MPI error flag
INTEGER :: comm, info
INTEGER :: mpi_size, mpi_rank
INTEGER(KIND=MPI_INTEGER_KIND) :: mpierror ! MPI error flag
INTEGER(KIND=MPI_INTEGER_KIND) :: comm, info
INTEGER(KIND=MPI_INTEGER_KIND) :: mpi_size, mpi_rank
comm = MPI_COMM_WORLD
info = MPI_INFO_NULL
CALL MPI_INIT(mpierror)
Expand Down
6 changes: 3 additions & 3 deletions HDF5Examples/FORTRAN/H5PAR/ph5_f90_hyperslab_by_pattern.F90
Original file line number Diff line number Diff line change
Expand Up @@ -36,9 +36,9 @@ PROGRAM DATASET_BY_PATTERN
!
! MPI definitions and calls.
!
INTEGER :: mpierror ! MPI error flag
INTEGER :: comm, info
INTEGER :: mpi_size, mpi_rank
INTEGER(KIND=MPI_INTEGER_KIND) :: mpierror ! MPI error flag
INTEGER(KIND=MPI_INTEGER_KIND) :: comm, info
INTEGER(KIND=MPI_INTEGER_KIND) :: mpi_size, mpi_rank

comm = MPI_COMM_WORLD
info = MPI_INFO_NULL
Expand Down
6 changes: 3 additions & 3 deletions HDF5Examples/FORTRAN/H5PAR/ph5_f90_hyperslab_by_row.F90
Original file line number Diff line number Diff line change
Expand Up @@ -35,9 +35,9 @@ PROGRAM DATASET_BY_ROW
!
! MPI definitions and calls.
!
INTEGER :: mpierror ! MPI error flag
INTEGER :: comm, info
INTEGER :: mpi_size, mpi_rank
INTEGER(KIND=MPI_INTEGER_KIND) :: mpierror ! MPI error flag
INTEGER(KIND=MPI_INTEGER_KIND) :: comm, info
INTEGER(KIND=MPI_INTEGER_KIND) :: mpi_size, mpi_rank

comm = MPI_COMM_WORLD
info = MPI_INFO_NULL
Expand Down
38 changes: 20 additions & 18 deletions HDF5Examples/FORTRAN/H5PAR/ph5_f90_subfiling.F90
Original file line number Diff line number Diff line change
Expand Up @@ -60,8 +60,8 @@ SUBROUTINE subfiling_write_default(fapl_id, mpi_size, mpi_rank)

IMPLICIT NONE
INTEGER(HID_T) :: fapl_id
INTEGER :: mpi_size
INTEGER :: mpi_rank
INTEGER(KIND=MPI_INTEGER_KIND) :: mpi_size
INTEGER(KIND=MPI_INTEGER_KIND) :: mpi_rank

INTEGER, DIMENSION(:), ALLOCATABLE, TARGET :: wdata
INTEGER(hsize_t), DIMENSION(1:EXAMPLE_DSET_DIMS) :: dset_dims
Expand Down Expand Up @@ -171,8 +171,8 @@ SUBROUTINE subfiling_write_custom(fapl_id, mpi_size, mpi_rank)

IMPLICIT NONE
INTEGER(HID_T) :: fapl_id
INTEGER :: mpi_size
INTEGER :: mpi_rank
INTEGER(KIND=MPI_INTEGER_KIND) :: mpi_size
INTEGER(KIND=MPI_INTEGER_KIND) :: mpi_rank

INTEGER, DIMENSION(:), ALLOCATABLE, TARGET :: wdata

Expand Down Expand Up @@ -304,8 +304,8 @@ SUBROUTINE subfiling_write_precreate(fapl_id, mpi_size, mpi_rank)

IMPLICIT NONE
INTEGER(HID_T) :: fapl_id
INTEGER :: mpi_size
INTEGER :: mpi_rank
INTEGER(KIND=MPI_INTEGER_KIND) :: mpi_size
INTEGER(KIND=MPI_INTEGER_KIND) :: mpi_rank

INTEGER, DIMENSION(:), ALLOCATABLE, TARGET :: wdata
TYPE(H5FD_subfiling_config_t) :: subf_config
Expand All @@ -320,6 +320,7 @@ SUBROUTINE subfiling_write_precreate(fapl_id, mpi_size, mpi_rank)
INTEGER :: status
INTEGER(SIZE_T) :: i
TYPE(C_PTR) :: f_ptr
INTEGER(KIND=MPI_INTEGER_KIND) :: mpierror

! Make a copy of the FAPL so we don't disturb
! it for the other examples
Expand Down Expand Up @@ -413,7 +414,7 @@ SUBROUTINE subfiling_write_precreate(fapl_id, mpi_size, mpi_rank)
CALL H5Fclose_f(file_id, status)
ENDIF

CALL MPI_Barrier(MPI_COMM_WORLD, status)
CALL MPI_Barrier(MPI_COMM_WORLD, mpierror)

!
! Use all MPI ranks to re-open the file and
Expand Down Expand Up @@ -467,26 +468,27 @@ PROGRAM main
USE SUBF
IMPLICIT NONE

INTEGER :: comm = MPI_COMM_WORLD
INTEGER :: info = MPI_INFO_NULL
INTEGER(KIND=MPI_INTEGER_KIND) :: comm = MPI_COMM_WORLD
INTEGER(KIND=MPI_INTEGER_KIND) :: info = MPI_INFO_NULL
INTEGER(HID_T) :: fapl_id
INTEGER :: mpi_size
INTEGER :: mpi_rank
INTEGER :: required
INTEGER :: provided
INTEGER(KIND=MPI_INTEGER_KIND) :: mpi_size
INTEGER(KIND=MPI_INTEGER_KIND) :: mpi_rank
INTEGER(KIND=MPI_INTEGER_KIND) :: required
INTEGER(KIND=MPI_INTEGER_KIND) :: provided
INTEGER(KIND=MPI_INTEGER_KIND) :: mpierror
INTEGER :: status

! HDF5 Subfiling VFD requires MPI_Init_thread with MPI_THREAD_MULTIPLE
required = MPI_THREAD_MULTIPLE
provided = 0
CALL mpi_init_thread(required, provided, status)
CALL mpi_init_thread(required, provided, mpierror)
IF (provided .NE. required) THEN
WRITE(*,*) "MPI doesn't support MPI_Init_thread with MPI_THREAD_MULTIPLE *FAILED*"
CALL MPI_Abort(comm, -1, status)
CALL MPI_Abort(comm, -1_MPI_INTEGER_KIND, mpierror)
ENDIF

CALL MPI_Comm_size(comm, mpi_size, status)
CALL MPI_Comm_rank(comm, mpi_rank, status)
CALL MPI_Comm_size(comm, mpi_size, mpierror)
CALL MPI_Comm_rank(comm, mpi_rank, mpierror)

!
! Initialize HDF5 library and Fortran interfaces.
Expand Down Expand Up @@ -516,6 +518,6 @@ PROGRAM main

IF(mpi_rank .EQ. 0) WRITE(*,"(A)") "PHDF5 example finished with no errors"

CALL MPI_Finalize(status)
CALL MPI_Finalize(mpierror)

END PROGRAM main
8 changes: 4 additions & 4 deletions HDF5Examples/FORTRAN/H5T/h5ex_t_enum_F03.F90
Original file line number Diff line number Diff line change
Expand Up @@ -74,14 +74,14 @@ PROGRAM main
! Insert enumerated value for memtype.
!
val = i
CALL h5tenum_insert_f(memtype, TRIM(names(i+1)), val, hdferr)
f_ptr = C_LOC(val)
CALL h5tenum_insert_f(memtype, TRIM(names(i+1)), f_ptr, hdferr)
!
! Insert enumerated value for filetype. We must first convert
! the numerical value val to the base type of the destination.
!
f_ptr = C_LOC(val)
CALL h5tconvert_f (M_BASET, F_BASET, INT(1,SIZE_T), f_ptr, hdferr)
CALL h5tenum_insert_f(filetype, TRIM(names(i+1)), val, hdferr)
CALL h5tenum_insert_f(filetype, TRIM(names(i+1)), f_ptr, hdferr)
ENDDO
!
! Create dataspace. Setting maximum size to be the current size.
Expand Down Expand Up @@ -129,7 +129,7 @@ PROGRAM main
!
! Get the name of the enumeration member.
!
CALL h5tenum_nameof_f( memtype, rdata(i,j), NAME_BUF_SIZE, name, hdferr)
CALL h5tenum_nameof_f( memtype, INT(rdata(i,j)), NAME_BUF_SIZE, name, hdferr)
WRITE(*,'(" ", A6," ")', ADVANCE='NO') TRIM(NAME)
ENDDO
WRITE(*,'("]")')
Expand Down
7 changes: 4 additions & 3 deletions HDF5Examples/FORTRAN/H5T/h5ex_t_enumatt_F03.F90
Original file line number Diff line number Diff line change
Expand Up @@ -75,14 +75,15 @@ PROGRAM main
! Insert enumerated value for memtype.
!
val = i
CALL h5tenum_insert_f(memtype, TRIM(names(i+1)), val, hdferr)
f_ptr = C_LOC(val)
CALL h5tenum_insert_f(memtype, TRIM(names(i+1)), f_ptr, hdferr)
!
! Insert enumerated value for filetype. We must first convert
! the numerical value val to the base type of the destination.
!
f_ptr = C_LOC(val)
CALL h5tconvert_f(M_BASET, F_BASET, INT(1,SIZE_T), f_ptr, hdferr)
CALL h5tenum_insert_f(filetype, TRIM(names(i+1)), val, hdferr)
CALL h5tenum_insert_f(filetype, TRIM(names(i+1)), f_ptr, hdferr)
ENDDO
!
! Create dataspace with a null dataspace.
Expand Down Expand Up @@ -137,7 +138,7 @@ PROGRAM main
!
! Get the name of the enumeration member.
!
CALL h5tenum_nameof_f( memtype, rdata(i,j), NAME_BUF_SIZE, name, hdferr)
CALL h5tenum_nameof_f( memtype, INT(rdata(i,j)), NAME_BUF_SIZE, name, hdferr)
WRITE(*,'(" ",A6," ")', ADVANCE='NO') TRIM(NAME)
ENDDO
WRITE(*,'("]")')
Expand Down
6 changes: 6 additions & 0 deletions config/cmake/HDF5UseFortran.cmake
Original file line number Diff line number Diff line change
Expand Up @@ -50,9 +50,15 @@ macro (FORTRAN_RUN FUNCTION_NAME SOURCE_CODE RUN_RESULT_VAR1 COMPILE_RESULT_VAR1
else ()
set (_RUN_OUTPUT_VARIABLE "RUN_OUTPUT_STDOUT_VARIABLE")
endif()
if (${FUNCTION_NAME} STREQUAL "SIZEOF NATIVE KINDs")
set(TMP_CMAKE_Fortran_FLAGS "${CMAKE_Fortran_FLAGS}")
else ()
set(TMP_CMAKE_Fortran_FLAGS "")
endif ()
TRY_RUN (RUN_RESULT_VAR COMPILE_RESULT_VAR
${CMAKE_BINARY_DIR}
${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeTmp/testFortranCompiler1.f90
CMAKE_FLAGS "${TMP_CMAKE_Fortran_FLAGS}"
LINK_LIBRARIES "${HDF5_REQUIRED_LIBRARIES}"
${_RUN_OUTPUT_VARIABLE} OUTPUT_VAR
)
Expand Down
6 changes: 3 additions & 3 deletions fortran/src/H5Fff.F90
Original file line number Diff line number Diff line change
Expand Up @@ -120,10 +120,10 @@ SUBROUTINE h5fcreate_f(name, access_flags, file_id, hdferr, &
INTERFACE
INTEGER(HID_T) FUNCTION H5Fcreate(name, access_flags, &
creation_prp_default, access_prp_default) BIND(C,NAME='H5Fcreate')
IMPORT :: C_CHAR
IMPORT :: C_CHAR, C_INT
IMPORT :: HID_T
CHARACTER(KIND=C_CHAR), DIMENSION(*) :: name
INTEGER, VALUE :: access_flags
INTEGER(C_INT), VALUE :: access_flags
INTEGER(HID_T), VALUE :: creation_prp_default
INTEGER(HID_T), VALUE :: access_prp_default
END FUNCTION H5Fcreate
Expand All @@ -137,7 +137,7 @@ END FUNCTION H5Fcreate
IF (PRESENT(creation_prp)) creation_prp_default = creation_prp
IF (PRESENT(access_prp)) access_prp_default = access_prp

file_id = h5fcreate(c_name, access_flags, &
file_id = h5fcreate(c_name, INT(access_flags, C_INT), &
creation_prp_default, access_prp_default)

hdferr = 0
Expand Down
4 changes: 2 additions & 2 deletions fortran/src/H5Lff.F90
Original file line number Diff line number Diff line change
Expand Up @@ -1555,7 +1555,7 @@ INTEGER(C_INT) FUNCTION H5Lvisit(grp_id, idx_type, order, op, op_data) BIND(C, N
END FUNCTION H5Lvisit
END INTERFACE

return_value_c = INT(H5Lvisit(grp_id, INT(idx_type, C_INT), INT(order, C_INT), op, op_data))
return_value_c = H5Lvisit(grp_id, INT(idx_type, C_INT), INT(order, C_INT), op, op_data)
return_value = INT(return_value_c)

IF(return_value.GE.0)THEN
Expand Down Expand Up @@ -1624,7 +1624,7 @@ END FUNCTION H5Lvisit_by_name
lapl_id_default = H5P_DEFAULT_F
IF(PRESENT(lapl_id)) lapl_id_default = lapl_id

return_value_c = INT(H5Lvisit_by_name(loc_id, c_name, INT(idx_type, C_INT), INT(order, C_INT), op, op_data, lapl_id_default))
return_value_c = H5Lvisit_by_name(loc_id, c_name, INT(idx_type, C_INT), INT(order, C_INT), op, op_data, lapl_id_default)
return_value = INT(return_value_c)

IF(return_value.GE.0)THEN
Expand Down
Loading
Loading