I am confused by Blaise's statement. "selected_real_kind(5)" is well defined across compilers; it returns an integer value that can be used in the kind statements and selected real numbers with at least 5 digits of precision.
With the exception of -1, -2, and -3 (plus -4 and -5 in Fortran 2008) indicating no support. The actual integer values returned are compiler specific. If we wanted to have a better chance of getting ieee single, double, and quad, we should probably use something like: selected_real_kind(6,37) selected_real_kind(15,307) selected_real_kind(33,4931) in PETSc. You would still need to do some testing during configuration to really ensure that real(kind=selected_real_kind(7,38)) real(kind=selected_real_kind(15,307)) real(kind=selected_real_kind(34,4931)) is the same as a C float, double, and __float128 respectively? ===== Its not until Fortran 2008 that the standard has constants for REAL32, REAL64, and REAL128 defined in the ISO_FORTRAN_ENV module. However, if we are using Fortran 2008 features, go all out and use the ISO_C_BINDING module with the C_FLOAT and C_DOUBLE constants! Some compilers, such as the gnu compilers. extend the constants and include C_FLOAT128. I have attached a simple program to output the kinds. Try it on your machine. On my machine with gfortran from gcc version 4.8.5 (MacPorts gcc48 4.8.5_0), I get the following: C_FLOAT : 4 C_DOUBLE : 8 C_FLOAT128: 16 REAL32 : 4 REAL64 : 8 REAL128 : 10 sel(6) : 4 sel(15) : 8 sel(16) : 10 sel(33) : 16 The integers provide the number of bytes on my machine. Note REAL128 is apparently an 80-bit long double and not a 128-bit __float128!! The type using selected_real_kind appears correct though. The same happens for REAL128 with gfortran from gcc 4.9.3, gcc 5.4.0, and gcc 6.1.0 on my machine. Todd. > On Sep 2, 2016, at 12:51 AM, William Gropp <[email protected]> wrote: > > This is true. The meaning of integer values of kind is up to the > implementation, and at least two choices are in use. > > Bill > > William Gropp > Acting Director and Chief Scientist, NCSA > Director, Parallel Computing Institute > Thomas M. Siebel Chair in Computer Science > University of Illinois Urbana-Champaign > > > > > > On Sep 1, 2016, at 6:15 PM, Blaise A Bourdin <[email protected]> wrote: > >> If I recall correctly, fortran does not mandate that "selected_real_kind(5)" >> means the same across compilers, so that hardcoding kind values may not be >> portable. >
mytest.f
Description: mytest.f
