summaryrefslogtreecommitdiffstats
path: root/fortran/src
diff options
context:
space:
mode:
Diffstat (limited to 'fortran/src')
-rw-r--r--fortran/src/H5match_types.c209
-rw-r--r--fortran/src/H5test_kind.f90127
-rw-r--r--fortran/src/H5test_kind_SIZEOF.f90114
3 files changed, 374 insertions, 76 deletions
diff --git a/fortran/src/H5match_types.c b/fortran/src/H5match_types.c
index 7d969ad..fb6afe4 100644
--- a/fortran/src/H5match_types.c
+++ b/fortran/src/H5match_types.c
@@ -1,4 +1,5 @@
/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * Copyright by The HDF Group. *
* Copyright by the Board of Trustees of the University of Illinois. *
* All rights reserved. *
* *
@@ -8,8 +9,8 @@
* of the source code distribution tree; Copyright.html can be found at the *
* root level of an installed copy of the electronic HDF5 document set and *
* is linked from the top-level documents page. It can also be found at *
- * http://hdf.ncsa.uiuc.edu/HDF5/doc/Copyright.html. If you do not have *
- * access to either file, you may request a copy from hdfhelp@ncsa.uiuc.edu. *
+ * http://hdfgroup.org/HDF5/doc/Copyright.html. If you do not have *
+ * access to either file, you may request a copy from help@hdfgroup.org. *
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
/* C Program to match C types to Fortran types
@@ -39,7 +40,7 @@ initCfile(void)
{
fprintf(c_header,
"/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *\n\
-* Copyright by the Board of Trustees of the University of Illinois. *\n\
+ * Copyright by the Board of Trustees of the University of Illinois. *\n\
* All rights reserved. *\n\
* *\n\
* This file is part of HDF5. The full HDF5 copyright notice, including *\n\
@@ -110,12 +111,6 @@ void writeFloatTypedef(const char* c_type, unsigned int size)
fprintf(c_header, "#define c_float_%d %s\n", size, c_type);
}
-/* Define a c_double_x type in the C header */
-void writeDoubleTypedef(const char* c_type, unsigned int size)
-{
- fprintf(c_header, "#define c_double_%d %s\n", size, c_type);
-}
-
/* Call this function if there is no matching C type for sizes > 1 */
void writeTypedefDefault(unsigned int size)
{
@@ -139,21 +134,17 @@ void writeFloatToFiles(const char* fortran_type, const char* c_type, unsigned in
fprintf(c_header, "typedef c_float_%d %s;\n", size, c_type);
}
-/* Create matching Fortran and C floating types by writing to both files */
-void writeDoubleToFiles(const char* fortran_type, const char* c_type, unsigned int size)
-{
- fprintf(fort_header, " INTEGER, PARAMETER :: %s = %d\n", fortran_type, size);
-
- fprintf(c_header, "typedef c_double_%d %s;\n", size, c_type);
-}
-
-
int main()
{
/* Open target files */
c_header = fopen(CFILE, "w");
fort_header = fopen(FFILE, "w");
+ int FoundIntSize[4];
+ int FoundRealSize[3];
+ int i,j,flag;
+ char chrA[20],chrB[20];
+
/* Write copyright, boilerplate to both files */
initCfile();
initFfile();
@@ -217,7 +208,7 @@ int main()
/* Define c_float_x */
-#if defined H5_FORTRAN_HAS_REAL_NATIVE_4
+#if defined H5_FORTRAN_HAS_REAL_NATIVE_4 || defined H5_FORTRAN_HAS_REAL_4
if(sizeof(long double) == 4)
writeFloatTypedef("long double", 4);
else if(sizeof(double) == 4)
@@ -231,7 +222,7 @@ int main()
}
#endif /*H5_FORTRAN_HAS_REAL_NATIVE_4*/
-#if defined H5_FORTRAN_HAS_REAL_NATIVE_8
+#if defined H5_FORTRAN_HAS_REAL_NATIVE_8 || defined H5_FORTRAN_HAS_REAL_8
if(sizeof(long double) == 8)
writeFloatTypedef("long double", 8);
else if(sizeof(double) == 8)
@@ -245,7 +236,7 @@ int main()
}
#endif /*H5_FORTRAN_HAS_REAL_NATIVE_8*/
-#if defined H5_FORTRAN_HAS_REAL_NATIVE_16
+#if defined H5_FORTRAN_HAS_REAL_NATIVE_16 || defined H5_FORTRAN_HAS_REAL_16
if(sizeof(long double) == 16)
writeFloatTypedef("long double", 16);
else if(sizeof(double) == 16)
@@ -259,36 +250,6 @@ int main()
}
#endif /*H5_FORTRAN_HAS_REAL_NATIVE_16*/
- /* Define c_double_x */
-
-#if defined H5_FORTRAN_HAS_DOUBLE_NATIVE_8
- if(sizeof(long double) == 8)
- writeDoubleTypedef("long double", 8);
- else if(sizeof(double) == 8)
- writeDoubleTypedef("double", 8);
- else if(sizeof(float) == 8)
- writeDoubleTypedef("float", 8);
- else
- { printf("Fortran DOUBLE is 16 bytes, no corresponding C floating type\n");
- printf("Quitting....\n");
- return -1;
- }
-#endif /*H5_FORTRAN_HAS_DOUBLE_NATIVE_8*/
-
-#if defined H5_FORTRAN_HAS_DOUBLE_NATIVE_16
- if(sizeof(long double) == 16)
- writeDoubleTypedef("long double", 16);
- else if(sizeof(double) == 16)
- writeDoubleTypedef("double", 16);
- else if(sizeof(float) == 16)
- writeDoubleTypedef("float", 16);
- else
- { printf("Fortran DOUBLE is 16 bytes, no corresponding C floating type\n");
- printf("Quitting....\n");
- return -1;
- }
-#endif /*H5_FORTRAN_HAS_DOUBLE_NATIVE_16*/
-
/* Now begin defining fortran types. */
fprintf(c_header, "\n");
/* haddr_t */
@@ -362,6 +323,148 @@ int main()
return -1;
#endif
+
+ /* int_1, int_2, int_4, int_8 */
+
+/* Defined different KINDs of integers: */
+/* if the integer kind is not available then we assign */
+/* it a value of the next larger one, but if the next */
+/* higher one is not available we assigned it the next lowest */
+
+ FoundIntSize[0] = -1;
+ FoundIntSize[1] = -2;
+ FoundIntSize[2] = -4;
+ FoundIntSize[3] = -8;
+
+#if defined H5_FORTRAN_HAS_INTEGER_1
+ FoundIntSize[0] = 1;
+#endif
+#if defined H5_FORTRAN_HAS_INTEGER_2
+ FoundIntSize[1] = 2;
+#endif
+#if defined H5_FORTRAN_HAS_INTEGER_4
+ FoundIntSize[2] = 4;
+#endif
+#if defined H5_FORTRAN_HAS_INTEGER_8
+ FoundIntSize[3] = 8;
+#endif
+
+ for(i=0;i<4;i++) {
+ if( FoundIntSize[i] > 0) /* Found the integer type */
+ {
+ sprintf(chrA, "Fortran_INTEGER_%d", FoundIntSize[i]);
+ sprintf(chrB, "int_%d_f", FoundIntSize[i]);
+ writeToFiles(chrA, chrB, FoundIntSize[i]);
+ }
+ else /* Did not find the integer type */
+ {
+ flag = 0; /* flag indicating if found the next highest */
+ for(j=i+1;j<4;j++) /* search for next highest */
+ {
+ if( FoundIntSize[j] > 0) /* Found the next highest */
+ {
+ sprintf(chrA, "Fortran_INTEGER_%d", (-1)*FoundIntSize[i]);
+ sprintf(chrB, "int_%d_f", (-1)*FoundIntSize[i]);
+ writeToFiles(chrA, chrB, FoundIntSize[j]);
+ flag = 1;
+ break;
+ }
+ }
+ if(flag == 0) /* No higher one found, so find next lowest */
+ {
+ for(j=2;j>-1;j--) /* Search for next lowest */
+ {
+ if( FoundIntSize[j] > 0) /* Found the next lowest */
+ {
+ sprintf(chrA, "Fortran_INTEGER_%d", (-1)*FoundIntSize[i]);
+ sprintf(chrB, "int_%d_f", (-1)*FoundIntSize[i]);
+ writeToFiles(chrA, chrB, FoundIntSize[j]);
+ flag = 1;
+ break;
+ }
+ }
+ }
+ if(flag == 0) /* No higher or lower one found, indicating an error */
+ {
+ return -1;
+ }
+ }
+ }
+
+ /* real_4, real_8, real_16 */
+
+/* Defined different KINDs of reals: */
+/* if the REAL kind is not available then we assign */
+/* it a value of the next larger one, but if the next */
+/* higher one is not available we assigned it the next lowest */
+
+ FoundRealSize[0] = -4;
+ FoundRealSize[1] = -8;
+ FoundRealSize[2] = -16;
+
+#if defined H5_FORTRAN_HAS_REAL_4
+ FoundRealSize[0] = 4;
+#endif
+#if defined H5_FORTRAN_HAS_REAL_8
+ FoundRealSize[1] = 8;
+#endif
+#if defined H5_FORTRAN_HAS_REAL_16
+ FoundRealSize[2] = 16;
+#endif
+
+ for(i=0;i<3;i++) {
+ if( FoundRealSize[i] > 0) /* Found the real type */
+ {
+ sprintf(chrA, "Fortran_REAL_%d", FoundRealSize[i]);
+ sprintf(chrB, "real_%d_f", FoundRealSize[i]);
+ writeFloatToFiles(chrA, chrB, FoundRealSize[i]);
+ }
+ else /* Did not find the real type */
+ {
+ flag = 0; /* flag indicating if found the next highest */
+ for(j=i+1;j<3;j++) /* search for next highest */
+ {
+ if( FoundRealSize[j] > 0) /* Found the next highest */
+ {
+ sprintf(chrA, "Fortran_REAL_%d", (-1)*FoundRealSize[i]);
+ sprintf(chrB, "real_%d_f", (-1)*FoundRealSize[i]);
+ if(FoundRealSize[j]>4) {
+ writeFloatToFiles(chrA, chrB, FoundRealSize[j]);
+ flag = 1;
+ }
+ /* else { */
+/* writeFloatToFiles(chrA, chrB, FoundRealSize[j]); */
+/* } */
+ flag = 1;
+ break;
+ }
+ }
+ if(flag == 0) /* No higher one found, so find next lowest */
+ {
+ for(j=1;j>-1;j--) /* Search for next lowest */
+ {
+ if( FoundRealSize[j] > 0) /* Found the next lowest */
+ {
+ sprintf(chrA, "Fortran_REAL_%d", (-1)*FoundRealSize[i]);
+ sprintf(chrB, "real_%d_f", (-1)*FoundRealSize[i]);
+ if(FoundRealSize[j]>4) {
+ writeFloatToFiles(chrA, chrB, FoundRealSize[j]);
+ }
+ /* else { */
+/* writeFloatToFiles(chrA, chrB, FoundRealSize[j]); */
+/* } */
+ flag = 1;
+ break;
+ }
+ }
+ }
+ if(flag == 0) /* No higher or lower one found, indicating an error */
+ {
+ return -1;
+ }
+ }
+ }
+
/* hid_t */
#if defined H5_FORTRAN_HAS_INTEGER_8 && H5_SIZEOF_HID_T >= 8
writeToFiles("HID_T", "hid_t_f", 8);
@@ -392,9 +495,9 @@ int main()
/* double_f */
#if defined H5_FORTRAN_HAS_DOUBLE_NATIVE_16
- writeDoubleToFiles("Fortran_DOUBLE", "double_f", 16);
+ writeFloatToFiles("Fortran_DOUBLE", "double_f", 16);
#elif defined H5_FORTRAN_HAS_DOUBLE_NATIVE_8
- writeDoubleToFiles("Fortran_DOUBLE", "double_f", 8);
+ writeFloatToFiles("Fortran_DOUBLE", "double_f", 8);
#else
/* Error: couldn't find a size for real_f */
return -1;
diff --git a/fortran/src/H5test_kind.f90 b/fortran/src/H5test_kind.f90
index e357fea..b945cd3 100644
--- a/fortran/src/H5test_kind.f90
+++ b/fortran/src/H5test_kind.f90
@@ -1,4 +1,26 @@
-! * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+!****h* fortran/src/H5test_kind.f90
+!
+! NAME
+! H5test_kind
+!
+! FUNCTION
+! This stand alone program is used at build time to generate the program
+! H5fortran_detect.f90. It cycles through all the available KIND parameters for
+! integers and reals. The appropriate program and subroutines are then generated
+! depending on which of the KIND values are found.
+!
+! NOTES
+! This program is depreciated in favor of H5test_kind_SIZEOF.f90 and is only
+! used when the Fortran intrinsic function SIZEOF is not available. It generates
+! code that does not make use of SIZEOF in H5fortran_detect.f90 which is less
+! portable in comparison to using SIZEOF.
+!
+! The availability of SIZEOF is checked at configure time and the TRUE/FALSE
+! condition is set in the configure variable "FORTRAN_HAVE_SIZEOF".
+!
+! COPYRIGHT
+! * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+! Copyright by The HDF Group. *
! Copyright by the Board of Trustees of the University of Illinois. *
! All rights reserved. *
! *
@@ -8,17 +30,18 @@
! of the source code distribution tree; Copyright.html can be found at the *
! root level of an installed copy of the electronic HDF5 document set and *
! is linked from the top-level documents page. It can also be found at *
-! http://hdf.ncsa.uiuc.edu/HDF5/doc/Copyright.html. If you do not have *
-! access to either file, you may request a copy from hdfhelp@ncsa.uiuc.edu. *
-! * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+! http://hdfgroup.org/HDF5/doc/Copyright.html. If you do not have *
+! access to either file, you may request a copy from help@hdfgroup.org. *
+! * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
!
-! H5test_kind.f90
-!
-! This fortran program generates H5fortran_detect.f90
-!
+! AUTHOR
+! Elena Pourma
!
+!*****
+
PROGRAM test_kind
- INTEGER :: i, j, ii, last, kind_numbers(10)
+ IMPLICIT NONE
+ INTEGER :: i, j, ii, ir, last, ikind_numbers(10), rkind_numbers(10)
INTEGER :: jr, jd
last = -1
ii = 0
@@ -28,13 +51,67 @@ PROGRAM test_kind
IF(j .NE. last) THEN
IF(last .NE. -1) THEN
ii = ii + 1
- kind_numbers(ii) = last
+ ikind_numbers(ii) = last
+ ENDIF
+ last = j
+ IF(j .EQ. -1) EXIT
+ ENDIF
+ ENDDO
+
+ last = -1
+ ir = 0
+ DO i = 1,100
+ j = SELECTED_REAL_KIND(i)
+ IF(j .NE. last) THEN
+ IF(last .NE. -1) THEN
+ ir = ir + 1
+ rkind_numbers(ir) = last
ENDIF
last = j
IF(j .EQ. -1) EXIT
ENDIF
ENDDO
+
+! Generate program information:
+
+WRITE(*,'(40(A,/))') &
+'!****h* fortran/src/H5fortran_detect.f90',&
+'!',&
+'! NAME',&
+'! H5fortran_detect',&
+'! ',&
+'! FUNCTION',&
+'! This stand alone program is used at build time to generate the header file',&
+'! H5fort_type_defines.h. The source code itself was automatically generated by',&
+'! the program H5test_kind.f90',&
+'!',&
+'! NOTES',&
+'! This source code does not make use of the Fortran intrinsic function SIZEOF because',&
+'! the availability of the intrinsic function was determined to be not available at',&
+'! configure time',&
+'!',&
+'! * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *',&
+'! Copyright by The HDF Group. *',&
+'! Copyright by the Board of Trustees of the University of Illinois. *',&
+'! All rights reserved. *',&
+'! *',&
+'! This file is part of HDF5. The full HDF5 copyright notice, including *',&
+'! terms governing use, modification, and redistribution, is contained in *',&
+'! the files COPYING and Copyright.html. COPYING can be found at the root *',&
+'! of the source code distribution tree; Copyright.html can be found at the *',&
+'! root level of an installed copy of the electronic HDF5 document set and *',&
+'! is linked from the top-level documents page. It can also be found at *',&
+'! http://hdfgroup.org/HDF5/doc/Copyright.html. If you do not have *',&
+'! access to either file, you may request a copy from help@hdfgroup.org. *',&
+'! * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *',&
+'!',&
+'! AUTHOR',&
+'! H5test_kind.f90',&
+'!',&
+'!*****'
+
! Generate a program
+
WRITE(*,*) "PROGRAM int_kind"
WRITE(*,*) "WRITE(*,*) "" /*generating header file*/ """
j = 0
@@ -44,9 +121,13 @@ PROGRAM test_kind
jd = 0
WRITE(*, "("" CALL d"", i2.2,""()"")") jd
DO i = 1, ii
- j = kind_numbers(i)
+ j = ikind_numbers(i)
WRITE(*, "("" CALL i"", i2.2,""()"")") j
ENDDO
+ DO i = 1, ir
+ j = rkind_numbers(i)
+ WRITE(*, "("" CALL r"", i2.2,""()"")") j
+ ENDDO
WRITE(*,*) "END PROGRAM int_kind"
j = 0
WRITE(*, "("" SUBROUTINE i"", i2.2,""()"")") j
@@ -109,7 +190,7 @@ PROGRAM test_kind
WRITE(*,*)" RETURN"
WRITE(*,*)"END SUBROUTINE"
DO i = 1, ii
- j = kind_numbers(i)
+ j = ikind_numbers(i)
WRITE(*, "("" SUBROUTINE i"", i2.2,""()"")") j
WRITE(*,*)" IMPLICIT NONE"
WRITE(*,*)" INTEGER(",j,") :: a = 0"
@@ -133,6 +214,28 @@ PROGRAM test_kind
WRITE(*,*)" RETURN"
WRITE(*,*)" END SUBROUTINE"
ENDDO
+ DO i = 1, ir
+ j = rkind_numbers(i)
+ WRITE(*, "("" SUBROUTINE r"", i2.2,""()"")") j
+ WRITE(*,*)" IMPLICIT NONE"
+ WRITE(*,*)" REAL(KIND=",j,") :: b(32)"
+ WRITE(*,*)" INTEGER :: a(1)"
+ WRITE(*,*)" INTEGER :: a_size"
+ WRITE(*,*)" INTEGER :: real_size"
+ WRITE(*,*)" a_size = BIT_SIZE(a(1)) ! Size in bits for integer"
+ WRITE(*,*)" real_size = (SIZE(TRANSFER(b,a))*a_size)/SIZE(b)"
+ WRITE(*,*)" IF (real_size .EQ. 32) THEN"
+ WRITE(*,*)" WRITE(*,*) ""#define H5_FORTRAN_HAS_REAL_4"" "
+ WRITE(*,*)" ENDIF"
+ WRITE(*,*)" IF (real_size .EQ. 64) THEN"
+ WRITE(*,*)" write(*,*) ""#define H5_FORTRAN_HAS_REAL_8"" "
+ WRITE(*,*)" endif"
+ WRITE(*,*)" IF (real_size .EQ. 128) THEN"
+ WRITE(*,*)" write(*,*) ""#define H5_FORTRAN_HAS_REAL_16"" "
+ WRITE(*,*)" ENDIF"
+ WRITE(*,*)" RETURN"
+ WRITE(*,*)" END SUBROUTINE"
+ ENDDO
END PROGRAM test_kind
diff --git a/fortran/src/H5test_kind_SIZEOF.f90 b/fortran/src/H5test_kind_SIZEOF.f90
index 72d9176..2b992a3 100644
--- a/fortran/src/H5test_kind_SIZEOF.f90
+++ b/fortran/src/H5test_kind_SIZEOF.f90
@@ -1,4 +1,25 @@
+!****h* fortran/src/H5test_kind_SIZEOF.f90
+!
+! NAME
+! H5test_kind
+!
+! FUNCTION
+! This stand alone program is used at build time to generate the program
+! H5fortran_detect.f90. It cycles through all the available KIND parameters for
+! integers and reals. The appropriate program and subroutines are then generated
+! depending on which of the KIND values are found.
+!
+! NOTES
+! This program is used in place of H5test_kind.f90 when the Fortran intrinsic
+! function SIZEOF is available. It generates code that makes use of SIZEOF in
+! H5fortran_detect.f90 which is a portable solution.
+!
+! The availability of SIZEOF is checked at configure time and the TRUE/FALSE
+! condition is set in the configure variable "FORTRAN_HAVE_SIZEOF".
+!
+! COPYRIGHT
! * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+! Copyright by The HDF Group. *
! Copyright by the Board of Trustees of the University of Illinois. *
! All rights reserved. *
! *
@@ -8,32 +29,86 @@
! of the source code distribution tree; Copyright.html can be found at the *
! root level of an installed copy of the electronic HDF5 document set and *
! is linked from the top-level documents page. It can also be found at *
-! http://hdf.ncsa.uiuc.edu/HDF5/doc/Copyright.html. If you do not have *
-! access to either file, you may request a copy from hdfhelp@ncsa.uiuc.edu. *
+! http://hdfgroup.org/HDF5/doc/Copyright.html. If you do not have *
+! access to either file, you may request a copy from help@hdfgroup.org. *
! * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
!
-! H5test_kind_SIZEOF.f90
-!
-! This fortran program generates H5fortran_detect.f90
-!
+! AUTHOR
+! M.S. Breitenfeld
!
+!*****
+
PROGRAM test_kind
- INTEGER :: i, j, ii, last, kind_numbers(10)
+ IMPLICIT NONE
+ INTEGER :: i, j, ii, ir, last, ikind_numbers(10),rkind_numbers(10)
INTEGER :: jr, jd
last = -1
ii = 0
- j = SELECTED_INT_KIND(18)
DO i = 1,100
j = SELECTED_INT_KIND(i)
IF(j .NE. last) THEN
IF(last .NE. -1) THEN
ii = ii + 1
- kind_numbers(ii) = last
+ ikind_numbers(ii) = last
ENDIF
last = j
IF(j .EQ. -1) EXIT
ENDIF
ENDDO
+
+ last = -1
+ ir = 0
+ DO i = 1,100
+ j = SELECTED_REAL_KIND(i)
+ IF(j .NE. last) THEN
+ IF(last .NE. -1) THEN
+ ir = ir + 1
+ rkind_numbers(ir) = last
+ ENDIF
+ last = j
+ IF(j .EQ. -1) EXIT
+ ENDIF
+ ENDDO
+
+! Generate program information:
+
+WRITE(*,'(40(A,/))') &
+'!****h* fortran/src/H5fortran_detect.f90',&
+'!',&
+'! NAME',&
+'! H5fortran_detect',&
+'! ',&
+'! FUNCTION',&
+'! This stand alone program is used at build time to generate the header file',&
+'! H5fort_type_defines.h. The source code itself was automatically generated by',&
+'! the program H5test_kind_SIZEOF.f90',&
+'!',&
+'! NOTES',&
+'! This source code makes use of the Fortran intrinsic function SIZEOF because',&
+'! the availability of the intrinsic function was determined to be available at',&
+'! configure time',&
+'!',&
+'! COPYRIGHT',&
+'! * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *',&
+'! Copyright by The HDF Group. *',&
+'! Copyright by the Board of Trustees of the University of Illinois. *',&
+'! All rights reserved. *',&
+'! *',&
+'! This file is part of HDF5. The full HDF5 copyright notice, including *',&
+'! terms governing use, modification, and redistribution, is contained in *',&
+'! the files COPYING and Copyright.html. COPYING can be found at the root *',&
+'! of the source code distribution tree; Copyright.html can be found at the *',&
+'! root level of an installed copy of the electronic HDF5 document set and *',&
+'! is linked from the top-level documents page. It can also be found at *',&
+'! http://hdfgroup.org/HDF5/doc/Copyright.html. If you do not have *',&
+'! access to either file, you may request a copy from help@hdfgroup.org. *',&
+'! * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *',&
+'!',&
+'! AUTHOR',&
+'! H5test_kind_SIZEOF.f90',&
+'!',&
+'!*****'
+
! Generate a program
WRITE(*,*) "PROGRAM int_kind"
WRITE(*,*) "WRITE(*,*) "" /*generating header file*/ """
@@ -44,9 +119,13 @@ PROGRAM test_kind
jd = 0
WRITE(*, "("" CALL d"", i2.2,""()"")") jd
DO i = 1, ii
- j = kind_numbers(i)
+ j = ikind_numbers(i)
WRITE(*, "("" CALL i"", i2.2,""()"")") j
ENDDO
+ DO i = 1, ir
+ j = rkind_numbers(i)
+ WRITE(*, "("" CALL r"", i2.2,""()"")") j
+ ENDDO
WRITE(*,*) "END PROGRAM int_kind"
j = 0
WRITE(*, "("" SUBROUTINE i"", i2.2,""()"")") j
@@ -82,7 +161,7 @@ PROGRAM test_kind
WRITE(*,*)" RETURN"
WRITE(*,*)"END SUBROUTINE"
DO i = 1, ii
- j = kind_numbers(i)
+ j = ikind_numbers(i)
WRITE(*, "("" SUBROUTINE i"", i2.2,""()"")") j
WRITE(*,*)" IMPLICIT NONE"
WRITE(*,*)" INTEGER(",j,") :: a"
@@ -94,6 +173,19 @@ PROGRAM test_kind
WRITE(*,*)" RETURN"
WRITE(*,*)"END SUBROUTINE"
ENDDO
+ DO i = 1, ir
+ j = rkind_numbers(i)
+ WRITE(*, "("" SUBROUTINE r"", i2.2,""()"")") j
+ WRITE(*,*)" IMPLICIT NONE"
+ WRITE(*,*)" REAL(KIND=",j,") :: a"
+ WRITE(*,*)" INTEGER :: a_size"
+ WRITE(*,*)" CHARACTER(LEN=2) :: ichr2"
+ WRITE(*,*)" a_size = SIZEOF(a)"
+ WRITE(*,*)" WRITE(ichr2,'(I2)') a_size"
+ WRITE(*,*)' WRITE(*,*) "#define H5_FORTRAN_HAS_REAL_"'//"//ADJUSTL(ichr2)"
+ WRITE(*,*)" RETURN"
+ WRITE(*,*)"END SUBROUTINE"
+ ENDDO
END PROGRAM test_kind