-
Notifications
You must be signed in to change notification settings - Fork 198
Description
When we declare a real variable in our API, we have to use some variable to represent the real kind. Available options for single, double and quadruple precision that people have used in codes:
real(sp),real(dp),real(qp)real(real32),real(real64),real(real128)real(r32),real(r64),real(r128)real(float32),real(float64),real(float128)real(f32),real(f64),real(f128)real(wp)(for default real)real(r4),real(r8),real(r16)
I will keep appending to this list if we find some code that uses different names.
Those variables must be defined somewhere. I will use the case 1. below, for other cases we simply substitute different names. The available options:
a. stdlib_types module that provides sp, dp, qp for single, double and quadruple precision as follows:
integer, parameter :: sp=kind(0.), & ! single precision
dp=kind(0.d0), & ! double precision
qp=selected_real_kind(32) ! quadruple precisionThe main idea behind this option is that there is a module in stdlib that provides the types and every other module uses it. The proposal #13 is similar to it. There are several options how the types are defined inside the module: one can define sp and dp using selected_real_kind also. Another alternative is to define sp, dp and qp using iso_fortran_env as in b. to a. The module stdlib_types can be called differently also.
b. use iso_fortran_env, only: sp=>real32, dp=>real64, qp=>real128 (if the case 2. above is used, then one does not need to rename, so it simplifies to just use iso_fortran_env, only: real32, real64, real128). Unlike a., this option does not introduce a new module in stdlib. One simply uses iso_fortran_env everywhere directly.
c. use iso_c_binding, only: sp=>c_float, dp=>c_double, qp=>c_float128. Unlike a., this option does not introduce a new module in stdlib.
I will keep this list updated if more options become available.