summaryrefslogtreecommitdiffstats
path: root/fortran/test/tf_F03.f90
diff options
context:
space:
mode:
Diffstat (limited to 'fortran/test/tf_F03.f90')
-rw-r--r--fortran/test/tf_F03.f90128
1 files changed, 128 insertions, 0 deletions
diff --git a/fortran/test/tf_F03.f90 b/fortran/test/tf_F03.f90
new file mode 100644
index 0000000..b3f1399
--- /dev/null
+++ b/fortran/test/tf_F03.f90
@@ -0,0 +1,128 @@
+!****h* root/fortran/test/tf_F03.f90
+!
+! NAME
+! tf_F03.f90
+!
+! FUNCTION
+! Contains functions that are part of the F2003 standard, and are not F2008 compliant.
+! Needed by the hdf5 fortran tests.
+!
+! 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. *
+! * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+!
+! CONTAINS SUBROUTINES
+! H5_SIZEOF
+!
+! NOTES
+! The Sun/Oracle compiler has the following restrictions on the SIZEOF intrinsic function:
+!
+! "The SIZEOF intrinsic cannot be applied to arrays of an assumed size, characters of a
+! length that is passed, or subroutine calls or names. SIZEOF returns default INTEGER*4 data.
+! If compiling for a 64-bit environment, the compiler will issue a warning if the result overflows
+! the INTEGER*4 data range. To use SIZEOF in a 64-bit environment with arrays larger
+! than the INTEGER*4 limit (2 Gbytes), the SIZEOF function and
+! the variables receiving the result must be declared INTEGER*8."
+!
+! Thus, we can not overload the H5_SIZEOF function to handle arrays (as used in tH5P_F03.f90), or
+! characters that do not have a set length (as used in tH5P_F03.f90), sigh...
+!
+!*****
+MODULE TH5_MISC_PROVISIONAL
+
+ USE ISO_C_BINDING
+ IMPLICIT NONE
+
+ INTEGER, PARAMETER :: sp = SELECTED_REAL_KIND(5) ! This should map to REAL*4 on most modern processors
+ INTEGER, PARAMETER :: dp = SELECTED_REAL_KIND(10) ! This should map to REAL*8 on most modern processors
+
+ ! generic compound datatype
+ TYPE, BIND(C) :: comp_datatype
+ REAL :: a
+ INTEGER :: x
+ DOUBLE PRECISION :: y
+ CHARACTER(LEN=1) :: z
+ END TYPE comp_datatype
+
+ PUBLIC :: H5_SIZEOF
+ INTERFACE H5_SIZEOF
+ MODULE PROCEDURE H5_SIZEOF_CMPD
+ MODULE PROCEDURE H5_SIZEOF_I, H5_SIZEOF_CHR
+ MODULE PROCEDURE H5_SIZEOF_SP,H5_SIZEOF_DP
+ END INTERFACE
+
+CONTAINS
+
+!This definition is needed for Windows DLLs
+!DEC$if defined(BUILD_HDF5_TEST_DLL)
+!DEC$attributes dllexport :: h5_sizeof_cmpd
+ !DEC$endif
+ INTEGER(C_SIZE_T) FUNCTION H5_SIZEOF_CMPD(a)
+ IMPLICIT NONE
+ TYPE(comp_datatype), INTENT(in) :: a
+
+ H5_SIZEOF_CMPD = SIZEOF(a)
+
+ END FUNCTION H5_SIZEOF_CMPD
+
+!This definition is needed for Windows DLLs
+!DEC$if defined(BUILD_HDF5_TEST_DLL)
+!DEC$attributes dllexport :: h5_sizeof_chr
+!DEC$endif
+ INTEGER(C_SIZE_T) FUNCTION H5_SIZEOF_CHR(a)
+ IMPLICIT NONE
+ CHARACTER(LEN=1), INTENT(in):: a
+
+ H5_SIZEOF_CHR = SIZEOF(a)
+
+ END FUNCTION H5_SIZEOF_CHR
+
+!This definition is needed for Windows DLLs
+!DEC$if defined(BUILD_HDF5_TEST_DLL)
+!DEC$attributes dllexport :: h5_sizeof_i
+!DEC$endif
+ INTEGER(C_SIZE_T) FUNCTION H5_SIZEOF_I(a)
+ IMPLICIT NONE
+ INTEGER, INTENT(in):: a
+
+ H5_SIZEOF_I = SIZEOF(a)
+
+ END FUNCTION H5_SIZEOF_I
+
+!This definition is needed for Windows DLLs
+!DEC$if defined(BUILD_HDF5_TEST_DLL)
+!DEC$attributes dllexport :: h5_sizeof_sp
+!DEC$endif
+ INTEGER(C_SIZE_T) FUNCTION H5_SIZEOF_SP(a)
+ IMPLICIT NONE
+ REAL(sp), INTENT(in):: a
+
+ H5_SIZEOF_SP = SIZEOF(a)
+
+ END FUNCTION H5_SIZEOF_SP
+
+!This definition is needed for Windows DLLs
+!DEC$if defined(BUILD_HDF5_TEST_DLL)
+!DEC$attributes dllexport :: h5_sizeof_dp
+!DEC$endif
+ INTEGER(C_SIZE_T) FUNCTION H5_SIZEOF_DP(a)
+ IMPLICIT NONE
+ REAL(dp), INTENT(in):: a
+
+ H5_SIZEOF_DP = SIZEOF(a)
+
+ END FUNCTION H5_SIZEOF_DP
+
+END MODULE TH5_MISC_PROVISIONAL