Skip to content

Commit b146a7d

Browse files
committed
Revert a default value for R16P even if not supported
Revert a default value for R16P even if not supported: the library MUST return a value of R16P even if the compiler/architecture does not support it in order to not break all the library using PENF. If R16P is not supported, R8P values is used in all R16P constants thus only generic interfaces into the libraries using PENF must be changed.
1 parent b0e05b0 commit b146a7d

18 files changed

+18
-56
lines changed

src/lib/penf.F90

-12
Original file line numberDiff line numberDiff line change
@@ -16,9 +16,7 @@ module penf
1616
! global parameters and variables
1717
public :: endianL, endianB, endian, is_initialized
1818
public :: ASCII, UCS4, CK
19-
#if defined _R16P
2019
public :: R16P, FR16P, DR16P, MinR16P, MaxR16P, BIR16P, BYR16P, smallR16P, ZeroR16P
21-
#endif
2220
public :: R8P, FR8P, DR8P, MinR8P, MaxR8P, BIR8P, BYR8P, smallR8P, ZeroR8P
2321
public :: R4P, FR4P, DR4P, MinR4P, MaxR4P, BIR4P, BYR4P, smallR4P, ZeroR4P
2422
public :: R_P, FR_P, DR_P, MinR_P, MaxR_P, BIR_P, BYR_P, smallR_P, ZeroR_P
@@ -131,9 +129,7 @@ subroutine penf_print(unit, pref, iostat, iomsg)
131129
write(unit=unit,fmt='(A)',iostat=iostatd,iomsg=iomsgd) prefd//' UCS4: '//str(n=UCS4)
132130
write(unit=unit,fmt='(A)',iostat=iostatd,iomsg=iomsgd) prefd//' CK: '//str(n=CK)
133131
write(unit=unit,fmt='(A)',iostat=iostatd,iomsg=iomsgd) prefd//'Reals kind, format and characters number:'
134-
#if defined _R16P
135132
write(unit=unit,fmt='(A)',iostat=iostatd,iomsg=iomsgd) prefd//' R16P: '//str(n=R16P)//','//FR16P//','//str(n=DR16P)
136-
#endif
137133
write(unit=unit,fmt='(A)',iostat=iostatd,iomsg=iomsgd) prefd//' R8P: '//str(n=R8P )//','//FR8P //','//str(n=DR8P )
138134
write(unit=unit,fmt='(A)',iostat=iostatd,iomsg=iomsgd) prefd//' R4P: '//str(n=R4P )//','//FR4P //','//str(n=DR4P )
139135
write(unit=unit,fmt='(A)',iostat=iostatd,iomsg=iomsgd) prefd//' R_P: '//str(n=R_P )//','//FR_P //','//str(n=DR_P )
@@ -143,9 +139,7 @@ subroutine penf_print(unit, pref, iostat, iomsg)
143139
write(unit=unit,fmt='(A)',iostat=iostatd,iomsg=iomsgd) prefd//' I2P: '//str(n=I2P)//','//FI2P //','//str(n=DI2P)
144140
write(unit=unit,fmt='(A)',iostat=iostatd,iomsg=iomsgd) prefd//' I1P: '//str(n=I1P)//','//FI1P //','//str(n=DI1P)
145141
write(unit=unit,fmt='(A)',iostat=iostatd,iomsg=iomsgd) prefd//'Reals minimum and maximum values:'
146-
#if defined _R16P
147142
write(unit=unit,fmt='(A)',iostat=iostatd,iomsg=iomsgd) prefd//' R16P: '//str(n=MinR16P)//','//str(n=MaxR16P)
148-
#endif
149143
write(unit=unit,fmt='(A)',iostat=iostatd,iomsg=iomsgd) prefd//' R8P: '//str(n=MinR8P )//','//str(n=MaxR8P )
150144
write(unit=unit,fmt='(A)',iostat=iostatd,iomsg=iomsgd) prefd//' R4P: '//str(n=MinR4P )//','//str(n=MaxR4P )
151145
write(unit=unit,fmt='(A)',iostat=iostatd,iomsg=iomsgd) prefd//' R_P: '//str(n=MinR_P )//','//str(n=MaxR_P )
@@ -155,9 +149,7 @@ subroutine penf_print(unit, pref, iostat, iomsg)
155149
write(unit=unit,fmt='(A)',iostat=iostatd,iomsg=iomsgd) prefd//' I2P: '//str(n=MinI2P )//','//str(n=MaxI2P)
156150
write(unit=unit,fmt='(A)',iostat=iostatd,iomsg=iomsgd) prefd//' I1P: '//str(n=MinI1P )//','//str(n=MaxI1P)
157151
write(unit=unit,fmt='(A)',iostat=iostatd,iomsg=iomsgd) prefd//'Reals bits/bytes sizes:'
158-
#if defined _R16P
159152
write(unit=unit,fmt='(A)',iostat=iostatd,iomsg=iomsgd) prefd//' R16P: '//str(n=BIR16P)//'/'//str(n=BYR16P)
160-
#endif
161153
write(unit=unit,fmt='(A)',iostat=iostatd,iomsg=iomsgd) prefd//' R8P: '//str(n=BIR8P )//'/'//str(n=BYR8P )
162154
write(unit=unit,fmt='(A)',iostat=iostatd,iomsg=iomsgd) prefd//' R4P: '//str(n=BIR4P )//'/'//str(n=BYR4P )
163155
write(unit=unit,fmt='(A)',iostat=iostatd,iomsg=iomsgd) prefd//' R_P: '//str(n=BIR_P )//'/'//str(n=BYR_P )
@@ -167,16 +159,12 @@ subroutine penf_print(unit, pref, iostat, iomsg)
167159
write(unit=unit,fmt='(A)',iostat=iostatd,iomsg=iomsgd) prefd//' I2P: '//str(n=BII2P)//'/'//str(n=BYI2P)
168160
write(unit=unit,fmt='(A)',iostat=iostatd,iomsg=iomsgd) prefd//' I1P: '//str(n=BII1P)//'/'//str(n=BYI1P)
169161
write(unit=unit,fmt='(A)',iostat=iostatd,iomsg=iomsgd) prefd//'Smallest reals'
170-
#if defined _R16P
171162
write(unit=unit,fmt='(A)',iostat=iostatd,iomsg=iomsgd) prefd//' smallR16P: '//str(smallR16P, .true.)
172-
#endif
173163
write(unit=unit,fmt='(A)',iostat=iostatd,iomsg=iomsgd) prefd//' smallR8P: '//str(smallR8P, .true.)
174164
write(unit=unit,fmt='(A)',iostat=iostatd,iomsg=iomsgd) prefd//' smallR4P: '//str(smallR4P, .true.)
175165
write(unit=unit,fmt='(A)',iostat=iostatd,iomsg=iomsgd) prefd//' smallR_P: '//str(smallR_P, .true.)
176166
write(unit=unit,fmt='(A)',iostat=iostatd,iomsg=iomsgd) prefd//'Machine zero'
177-
#if defined _R16P
178167
write(unit=unit,fmt='(A)',iostat=iostatd,iomsg=iomsgd) prefd//' ZeroR16P: '//str(ZeroR16P, .true.)
179-
#endif
180168
write(unit=unit,fmt='(A)',iostat=iostatd,iomsg=iomsgd) prefd//' ZeroR8P: '//str(ZeroR8P, .true.)
181169
write(unit=unit,fmt='(A)',iostat=iostatd,iomsg=iomsgd) prefd//' ZeroR4P: '//str(ZeroR4P, .true.)
182170
write(unit=unit,fmt='(A)',iostat=iostatd,iomsg=iomsgd) prefd//' ZeroR_P: '//str(ZeroR_P, .true.)

src/lib/penf_b_size.F90

-4
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,6 @@ module penf_b_size
3636
endinterface
3737

3838
contains
39-
#if defined _R16P
4039
elemental function bit_size_R16P(i) result(bits)
4140
!< Compute the number of bits of a real variable.
4241
!<
@@ -51,7 +50,6 @@ elemental function bit_size_R16P(i) result(bits)
5150

5251
bits = size(transfer(i, mold), dim=1, kind=I2P) * 8_I2P
5352
endfunction bit_size_R16P
54-
#endif
5553

5654
elemental function bit_size_R8P(i) result(bits)
5755
!< Compute the number of bits of a real variable.
@@ -98,7 +96,6 @@ elemental function bit_size_chr(i) result(bits)
9896
bits = size(transfer(i, mold), dim=1, kind=I4P) * 8_I4P
9997
endfunction bit_size_chr
10098

101-
#if defined _R16P
10299
elemental function byte_size_R16P(i) result(bytes)
103100
!< Compute the number of bytes of a real variable.
104101
!<
@@ -112,7 +109,6 @@ elemental function byte_size_R16P(i) result(bytes)
112109

113110
bytes = bit_size(i) / 8_I1P
114111
endfunction byte_size_R16P
115-
#endif
116112

117113
elemental function byte_size_R8P(i) result(bytes)
118114
!< Compute the number of bytes of a real variable.

src/lib/penf_global_parameters_variables.F90

+18
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,8 @@ module penf_global_parameters_variables
3535

3636
#if defined _R16P
3737
integer, parameter :: R16P = selected_real_kind(33,4931) !< 33 digits, range \([10^{-4931}, 10^{+4931} - 1]\); 128 bits.
38+
#else
39+
integer, parameter :: R16P = selected_real_kind(15,307) !< 15 digits, range \([10^{-307} , 10^{+307} - 1]\); 64 bits.
3840
#endif
3941
integer, parameter :: R8P = selected_real_kind(15,307) !< 15 digits, range \([10^{-307} , 10^{+307} - 1]\); 64 bits.
4042
integer, parameter :: R4P = selected_real_kind(6,37) !< 6 digits, range \([10^{-37} , 10^{+37} - 1]\); 32 bits.
@@ -60,6 +62,8 @@ module penf_global_parameters_variables
6062
! format parameters
6163
#if defined _R16P
6264
character(*), parameter :: FR16P = '(E42.33E4)' !< Output format for kind=R16P real.
65+
#else
66+
character(*), parameter :: FR16P = '(E23.15E3)' !< Output format for kind=R8P real.
6367
#endif
6468
character(*), parameter :: FR8P = '(E23.15E3)' !< Output format for kind=R8P real.
6569
character(*), parameter :: FR4P = '(E13.6E2)' !< Output format for kind=R4P real.
@@ -90,6 +94,8 @@ module penf_global_parameters_variables
9094
! length (number of digits) of formatted numbers
9195
#if defined _R16P
9296
integer, parameter :: DR16P = 42 !< Number of digits of output format FR16P.
97+
#else
98+
integer, parameter :: DR16P = 23 !< Number of digits of output format FR8P.
9399
#endif
94100
integer, parameter :: DR8P = 23 !< Number of digits of output format FR8P.
95101
integer, parameter :: DR4P = 13 !< Number of digits of output format FR4P.
@@ -131,6 +137,9 @@ module penf_global_parameters_variables
131137
#if defined _R16P
132138
real(R16P), parameter :: MinR16P = -huge(1._R16P) !< Minimum value of kind=R16P real.
133139
real(R16P), parameter :: MaxR16P = huge(1._R16P) !< Maximum value of kind=R16P real.
140+
#else
141+
real(R8P), parameter :: MinR16P = -huge(1._R8P ) !< Minimum value of kind=R8P real.
142+
real(R8P), parameter :: MaxR16P = huge(1._R8P ) !< Maximum value of kind=R8P real.
134143
#endif
135144
real(R8P), parameter :: MinR8P = -huge(1._R8P ) !< Minimum value of kind=R8P real.
136145
real(R8P), parameter :: MaxR8P = huge(1._R8P ) !< Maximum value of kind=R8P real.
@@ -152,6 +161,8 @@ module penf_global_parameters_variables
152161
! real smallest (representable) values
153162
#if defined _R16P
154163
real(R16P), parameter :: smallR16P = tiny(1._R16P) !< Smallest representable value of kind=R16P real.
164+
#else
165+
real(R8P), parameter :: smallR16P = tiny(1._R8P ) !< Smallest representable value of kind=R8P real.
155166
#endif
156167
real(R8P), parameter :: smallR8P = tiny(1._R8P ) !< Smallest representable value of kind=R8P real.
157168
real(R4P), parameter :: smallR4P = tiny(1._R4P ) !< Smallest representable value of kind=R4P real.
@@ -161,6 +172,9 @@ module penf_global_parameters_variables
161172
#if defined _R16P
162173
real(R16P), parameter :: ZeroR16P = nearest(1._R16P, 1._R16P) - &
163174
nearest(1._R16P,-1._R16P) !< Smallest representable difference of kind=R16P real.
175+
#else
176+
real(R8P), parameter :: ZeroR16P = 0._R8P !nearest(1._R8P, 1._R8P) - &
177+
!nearest(1._R8P,-1._R8P) !< Smallest representable difference of kind=R8P real.
164178
#endif
165179
real(R8P), parameter :: ZeroR8P = 0._R8P !nearest(1._R8P, 1._R8P) - &
166180
!nearest(1._R8P,-1._R8P) !< Smallest representable difference of kind=R8P real.
@@ -172,12 +186,16 @@ module penf_global_parameters_variables
172186
! bits/bytes memory requirements
173187
#if defined _R16P
174188
integer(I2P), parameter :: BIR16P = storage_size(MaxR16P) !< Number of bits of kind=R16P real.
189+
#else
190+
integer(I1P), parameter :: BIR16P = storage_size(MaxR8P) !< Number of bits of kind=R8P real.
175191
#endif
176192
integer(I1P), parameter :: BIR8P = storage_size(MaxR8P) !< Number of bits of kind=R8P real.
177193
integer(I1P), parameter :: BIR4P = storage_size(MaxR4P) !< Number of bits of kind=R4P real.
178194
integer(I1P), parameter :: BIR_P = storage_size(MaxR_P) !< Number of bits of kind=R_P real.
179195
#if defined _R16P
180196
integer(I2P), parameter :: BYR16P = BIR16P/8_I2P !< Number of bytes of kind=R16P real.
197+
#else
198+
integer(I1P), parameter :: BYR16P = BIR8P/8_I1P !< Number of bytes of kind=R8P real.
181199
#endif
182200
integer(I1P), parameter :: BYR8P = BIR8P/8_I1P !< Number of bytes of kind=R8P real.
183201
integer(I1P), parameter :: BYR4P = BIR4P/8_I1P !< Number of bytes of kind=R4P real.

src/lib/penf_stringify.F90

-12
Original file line numberDiff line numberDiff line change
@@ -203,7 +203,6 @@ pure function str_ucs4_ucs4(input) result(output)
203203
output = input
204204
endfunction str_ucs4_ucs4
205205

206-
#if defined _R16P
207206
elemental function strf_R16P(fm, n) result(str)
208207
!< Convert real to string.
209208
!<
@@ -218,7 +217,6 @@ elemental function strf_R16P(fm, n) result(str)
218217

219218
write(str, trim(fm)) n
220219
endfunction strf_R16P
221-
#endif
222220

223221
elemental function strf_R8P(fm, n) result(str)
224222
!< Convert real to string.
@@ -310,7 +308,6 @@ elemental function strf_I1P(fm, n) result(str)
310308
write(str, trim(fm)) n
311309
endfunction strf_I1P
312310

313-
#if defined _R16P
314311
elemental function str_R16P(n, no_sign, compact) result(str)
315312
!< Convert real to string.
316313
!<
@@ -343,7 +340,6 @@ elemental function str_R16P(n, no_sign, compact) result(str)
343340
if (compact) call compact_real_string(string=str)
344341
endif
345342
endfunction str_R16P
346-
#endif
347343

348344
elemental function str_R8P(n, no_sign, compact) result(str)
349345
!< Convert real to string.
@@ -521,7 +517,6 @@ elemental function str_bol(n) result(str)
521517
write(str, '(L1)') n
522518
endfunction str_bol
523519

524-
#if defined _R16P
525520
pure function str_a_R16P(n, no_sign, separator, delimiters, compact) result(str)
526521
!< Converting real array to string.
527522
!<
@@ -574,7 +569,6 @@ pure function str_a_R16P(n, no_sign, separator, delimiters, compact) result(str)
574569
str = trim(str(2:))
575570
if (present(delimiters)) str = delimiters(1)//str//delimiters(2)
576571
endfunction str_a_R16P
577-
#endif
578572

579573
pure function str_a_R8P(n, no_sign, separator, delimiters, compact) result(str)
580574
!< Convert real array to string.
@@ -1050,7 +1044,6 @@ elemental function strz_I1P(n, nz_pad) result(str)
10501044
if (present(nz_pad)) str=str(DI1P-nz_pad:DI1P-1) ! Leaving out the extra zeros padding
10511045
endfunction strz_I1P
10521046

1053-
#if defined _R16P
10541047
function ctor_R16P(str, knd, pref, error) result(n)
10551048
!< Convert string to real.
10561049
!<
@@ -1074,7 +1067,6 @@ function ctor_R16P(str, knd, pref, error) result(n)
10741067
endif
10751068
if (present(error)) error = err
10761069
endfunction ctor_R16P
1077-
#endif
10781070

10791071
function ctor_R8P(str, knd, pref, error) result(n)
10801072
!< Convert string to real.
@@ -1220,7 +1212,6 @@ function ctoi_I1P(str, knd, pref, error) result(n)
12201212
if (present(error)) error = err
12211213
endfunction ctoi_I1P
12221214

1223-
#if defined _R16P
12241215
elemental function bstr_R16P(n) result(bstr)
12251216
!< Convert real to string of bits.
12261217
!<
@@ -1240,7 +1231,6 @@ elemental function bstr_R16P(n) result(bstr)
12401231
buffer = transfer(n, buffer)
12411232
write(bstr, '(16B8.8)') buffer
12421233
endfunction bstr_R16P
1243-
#endif
12441234

12451235
elemental function bstr_R8P(n) result(bstr)
12461236
!< Convert real to string of bits.
@@ -1342,7 +1332,6 @@ elemental function bstr_I1P(n) result(bstr)
13421332
write(bstr, '(B8.8)') n
13431333
endfunction bstr_I1P
13441334

1345-
#if defined _R16P
13461335
elemental function bctor_R16P(bstr, knd) result(n)
13471336
!< Convert bit-string to real.
13481337
!<
@@ -1360,7 +1349,6 @@ elemental function bctor_R16P(bstr, knd) result(n)
13601349
read(bstr, '(16B8.8)') buffer
13611350
n = transfer(buffer, n)
13621351
endfunction bctor_R16P
1363-
#endif
13641352

13651353
elemental function bctor_R8P(bstr, knd) result(n)
13661354
!< Convert bit-string to real.
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,5 @@
1-
#if defined _R16P
21
program volatile_doctest
32
use penf_b_size
43
use penf
54
print FI2P, bit_size(1._R16P)
65
endprogram volatile_doctest
7-
#endif
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,5 @@
1-
#if defined _R16P
21
program volatile_doctest
32
use penf_b_size
43
use penf
54
print FI1P, byte_size(1._R16P)
65
endprogram volatile_doctest
7-
#endif
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,5 @@
1-
#if defined _R16P
21
program volatile_doctest
32
use penf_stringify
43
use penf
54
print "(A)", str(n=-1._R16P)
65
endprogram volatile_doctest
7-
#endif
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,5 @@
1-
#if defined _R16P
21
program volatile_doctest
32
use penf_stringify
43
use penf
54
print "(A)", str(n=-1._R16P, no_sign=.true.)
65
endprogram volatile_doctest
7-
#endif
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,5 @@
1-
#if defined _R16P
21
program volatile_doctest
32
use penf_stringify
43
use penf
54
print "(A)", str(n=-1._R16P, compact=.true.)
65
endprogram volatile_doctest
7-
#endif
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,5 @@
1-
#if defined _R16P
21
program volatile_doctest
32
use penf_stringify
43
use penf
54
print "(A)", str(n=[1._R16P, -2._R16P])
65
endprogram volatile_doctest
7-
#endif
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,5 @@
1-
#if defined _R16P
21
program volatile_doctest
32
use penf_stringify
43
use penf
54
print "(A)", str(n=[1._R16P, 2._R16P], no_sign=.true.)
65
endprogram volatile_doctest
7-
#endif
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,5 @@
1-
#if defined _R16P
21
program volatile_doctest
32
use penf_stringify
43
use penf
54
print "(A)", str(n=[1._R16P, -2._R16P], separator='|')
65
endprogram volatile_doctest
7-
#endif
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,5 @@
1-
#if defined _R16P
21
program volatile_doctest
32
use penf_stringify
43
use penf
54
print "(A)", str(n=[1._R16P, -2._R16P], delimiters=['(', ')'])
65
endprogram volatile_doctest
7-
#endif
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,5 @@
1-
#if defined _R16P
21
program volatile_doctest
32
use penf_stringify
43
use penf
54
print "(A)", str(n=[1._R16P, -2._R16P], compact=.true.)
65
endprogram volatile_doctest
7-
#endif
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,5 @@
1-
#if defined _R16P
21
program volatile_doctest
32
use penf_stringify
43
use penf
54
print "(A)", str(fm=FR16P, n=1._R16P)
65
endprogram volatile_doctest
7-
#endif
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,5 @@
1-
#if defined _R16P
21
program volatile_doctest
32
use penf_stringify
43
use penf
54
print FR16P, cton(str='-1.0', knd=1._R16P)
65
endprogram volatile_doctest
7-
#endif
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,7 @@
1-
#if defined _R16P
21
program volatile_doctest
32
use penf_stringify
43
use penf
54
character(128) :: b
65
b = bstr(n=1._R16P)
76
print "(A)", b(17:)
87
endprogram volatile_doctest
9-
#endif
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,6 @@
1-
#if defined _R16P
21
program volatile_doctest
32
use penf_stringify
43
use penf
54
print FR16P, bcton('00000000000000000000000000000000000000000000000000000000000000000000000000000'//&
65
'000000000000000000000000000000000001111111100111111', knd=1._R16P)
76
endprogram volatile_doctest
8-
#endif

0 commit comments

Comments
 (0)