I see the code where ALL not-integer constants are defined like this
INTEGER, PARAMETER :: num = KIND(1.d0)
REAL(num), PARAMETER :: c_tiny = TINY(1.0_num)
REAL(num), PARAMETER :: c_largest_number = HUGE(1.0_num)
REAL(num), PARAMETER :: c_maxexponent = MAXEXPONENT(1.0_num)
REAL(num), PARAMETER :: c_log2 = 0.69314718055994530941723212145817657_num
REAL(num), PARAMETER :: pi = 3.141592653589793238462643383279503_num
REAL(num), PARAMETER :: q0 = 1.602176565e-19_num ! C (+/- 3.5e-27)
REAL(num), PARAMETER :: m0 = 9.10938291e-31_num ! kg (+/- 4e-38)
REAL(num), PARAMETER :: c = 2.99792458e8_num ! m/s^2 (exact)
REAL(num), PARAMETER :: kb = 1.3806488e-23_num ! J/K (+/- 1.3e-29)
REAL(num), PARAMETER :: mu0 = 4.e-7_num * pi ! N/A^2 (exact)
REAL(num), PARAMETER :: epsilon0 = 8.854187817620389850536563031710750e-12_num
REAL(num), PARAMETER :: h_planck = 6.62606957e-34_num ! J s (+/- 2.9e-41)
REAL(num), PARAMETER :: ev = q0 ! J
REAL(num), PARAMETER :: h_bar = 1.054571725336289397963133257349698e-34_num
REAL(num), PARAMETER :: a0 = 5.291772101121111395947216558438464e-11_num
REAL(num), PARAMETER :: hartree = 4.359744350823120007758594450644308e-18_num
REAL(num), PARAMETER :: alpha = 7.2973525755230202568508027295271584628e-3_num
REAL(num), PARAMETER :: atomic_time = 2.418884320905619591809404261549867e-17_num
REAL(num), PARAMETER :: atomic_electric_field = 5.142206538736485312185213306837419e11_num
REAL(num), PARAMETER :: mc0 = 2.73092429345209278e-22_num
REAL(num), PARAMETER :: b_s = 4.414005028109566589829741352306303e9_num
REAL(num), PARAMETER :: e_s = 1.323285417001326061279735961512150e18_num
REAL(num), PARAMETER :: alpha_f = 7.297352575523020256850802729527158e-3_num
REAL(num), PARAMETER :: tau_c = 1.288088667367242662108649212042082e-21_num
jx = 0.0_num
jy = 0.0_num
jz = 0.0_num
gx = 0.0_num
gy = 0.0_num
gz = 0.0_num
idx = 1.0_num / dx
idy = 1.0_num / dy
idz = 1.0_num / dz
idt = 1.0_num / dt
dto2 = dt / 2.0_num
dtco2 = c * dto2
dtfac = 0.5_num * dt * fac
third = 1.0_num / 3.0_num
.......................................
.......................................
Hell amount of them, and all with _num. Be it 0.d0, 1.d0, or 2.d0 etc Why this was done when there was no intention to use real*4 in the code ever?
Is this any better than just write 0d0, 1d0 or 2d0 ? OK, ok, i will now remember till the end of my days not to do that due to one dumb but now unavoidable Fortran exclusion. 'Better' is not good word here. Really useful, at least really will be ever needed? At least 0.d0,1.d0 or 2.d0 etc is always shorter. Or people writing this way think their codes in the future will be running on unknown alien's architecture totally different from major current ones?
Was this verbose and annoying way or writing done just to avoid potential bug because Fortran default real type is REAL*4 ?