From 933e21e4a204c29b147ca34a67a41bf7b92f0f9c Mon Sep 17 00:00:00 2001 From: Frederick Stein Date: Sun, 23 Jun 2024 20:04:09 +0200 Subject: [PATCH] Use 'CHARACTER(C_CHAR), DIMENSION(:), ALLOCATABLE' in favor of 'CHARACTER(:, C_CHAR), ALLOCATABLE' --- src/pw/fft/fftw3_lib.F | 32 +++++++++++++++++--------------- 1 file changed, 17 insertions(+), 15 deletions(-) diff --git a/src/pw/fft/fftw3_lib.F b/src/pw/fft/fftw3_lib.F index 17cf10b140..c2fea24646 100644 --- a/src/pw/fft/fftw3_lib.F +++ b/src/pw/fft/fftw3_lib.F @@ -147,25 +147,26 @@ CONTAINS LOGICAL :: ionode #if defined ( __FFTW3 ) - CHARACTER(LEN=:, KIND=C_CHAR), ALLOCATABLE :: wisdom_file_name_c - INTEGER :: iunit, istat, file_name_length, i + CHARACTER(C_CHAR), DIMENSION(:), ALLOCATABLE :: wisdom_file_name_c + INTEGER :: file_name_length, i, iunit, istat INTEGER(KIND=C_INT) :: isuccess ! Write out FFTW3 wisdom to file (if we can) ! only the ionode updates the wisdom IF (ionode) THEN iunit = get_unit_number() - OPEN (UNIT=iunit, FILE=wisdom_file, STATUS="UNKNOWN", FORM="FORMATTED", ACTION="WRITE", IOSTAT=istat) + OPEN (UNIT=iunit, FILE=wisdom_file, STATUS="REPLACE", FORM="FORMATTED", ACTION="WRITE", IOSTAT=istat) IF (istat == 0) THEN + CLOSE (iunit) file_name_length = LEN_TRIM(wisdom_file) - ALLOCATE (CHARACTER(LEN=file_name_length + 1, KIND=C_CHAR) :: wisdom_file_name_c) + ALLOCATE (wisdom_file_name_c(file_name_length + 1)) DO i = 1, file_name_length - wisdom_file_name_c(i:i) = wisdom_file(i:i) + wisdom_file_name_c(i) = wisdom_file(i:i) END DO - wisdom_file_name_c(file_name_length + 1:file_name_length + 1) = C_NULL_CHAR + wisdom_file_name_c(file_name_length + 1) = C_NULL_CHAR isuccess = fftw_export_wisdom_to_filename(wisdom_file_name_c) IF (isuccess == 0) & CPABORT("Error exporting wisdom to file "//wisdom_file) - CLOSE (iunit) + WRITE (*, *) "Exported wisdom to file "//wisdom_file END IF END IF @@ -186,10 +187,10 @@ CONTAINS CHARACTER(LEN=*), INTENT(IN) :: wisdom_file #if defined ( __FFTW3 ) - CHARACTER(LEN=:, KIND=C_CHAR), ALLOCATABLE :: wisdom_file_name_c + CHARACTER(C_CHAR), DIMENSION(:), ALLOCATABLE :: wisdom_file_name_c INTEGER :: file_name_length, i - INTEGER(KIND=C_INT) :: isuccess - LOGICAL :: exist + INTEGER(KIND=C_INT) :: isuccess + LOGICAL :: file_exists #if defined(__MKL) !$ LOGICAL :: mkl_is_safe @@ -218,17 +219,18 @@ CONTAINS ! Read FFTW wisdom (if available) ! all nodes are opening the file here... - INQUIRE (FILE=wisdom_file, exist=exist) - IF (exist) THEN + INQUIRE (FILE=wisdom_file, exist=file_exists) + IF (file_exists) THEN file_name_length = LEN_TRIM(wisdom_file) - ALLOCATE (CHARACTER(LEN=file_name_length + 1, KIND=C_CHAR) :: wisdom_file_name_c) + ALLOCATE (wisdom_file_name_c(file_name_length + 1)) DO i = 1, file_name_length - wisdom_file_name_c(i:i) = wisdom_file(i:i) + wisdom_file_name_c(i) = wisdom_file(i:i) END DO - wisdom_file_name_c(file_name_length + 1:file_name_length + 1) = C_NULL_CHAR + wisdom_file_name_c(file_name_length + 1) = C_NULL_CHAR isuccess = fftw_import_wisdom_from_filename(wisdom_file_name_c) IF (isuccess == 0) & CPABORT("Error importing wisdom from file "//wisdom_file) + WRITE (*, *) "Imported wisdom to file "//wisdom_file END IF #if defined (__MKL)