ROMS
Loading...
Searching...
No Matches
types.F
Go to the documentation of this file.
1 PROGRAM types
2!
3!git $Id$
4!================================================== Hernan G. Arango ===
5! Copyright (c) 2002-2025 The ROMS Group !
6! Licensed under a MIT/X style license !
7! See License_ROMS.md !
8!=======================================================================
9! !
10! This program can be used to check the precision and range of real !
11! type variables in a particular computer architecture. !
12! !
13! There are several compilers that do not support REAL*16 data types. !
14! For example PGF90, G95, and GFORTRAN. However, other compilers like !
15! IFORT do have REAL*16 support. !
16! !
17!=======================================================================
18!
19 implicit none
20!
21 integer, parameter :: i = 1
22 integer, parameter :: i1b = selected_int_kind(1) ! 8-bit
23 integer, parameter :: i2b = selected_int_kind(2) ! 8-bit
24 integer, parameter :: i4b = selected_int_kind(4) ! 16-bit
25 integer, parameter :: i8b = selected_int_kind(8) ! 32-bit
26!
27 integer, parameter :: r4 = selected_real_kind(6,30)
28 integer, parameter :: r8 = selected_real_kind(12,300)
29#ifdef REAL16
30# if defined SUN || defined AIX
31 integer, parameter :: r16 = selected_real_kind(16,3000)
32# else
33 integer, parameter :: r16 = selected_real_kind(15,3000)
34# endif
35#else
36# if defined SUN || defined AIX
37 integer, parameter :: r16 = selected_real_kind(16,300)
38# else
39 integer, parameter :: r16 = selected_real_kind(15,300)
40# endif
41#endif
42!
43 integer :: i00(1)
44 integer(i1b) :: i01(1)
45 integer(i2b) :: i02(1)
46 integer(i4b) :: i04(1)
47 integer(i8b) :: i08(1)
48!
49 real(r4) :: a04
50 real(r8) :: a08
51 real(r16) :: a16
52
53 real (kind=4) :: b04
54 real (kind=8) :: b08
55#ifdef CRAY
56 real (kind=8) :: b16
57#else
58# ifdef REAL16
59 real (kind=16) :: b16
60# else
61 real(r16) :: b16
62# endif
63#endif
64!
65!-----------------------------------------------------------------------
66! Report numerical representation.
67!-----------------------------------------------------------------------
68!
69 WRITE(*,*)
70 WRITE(*,*) ' Integer representation: bytes bits'
71 WRITE(*,*) ' ======================'
72 WRITE(*,*)
73 WRITE(*,*) ' (kind=1), i1b: ', kind(i01), storage_size(i01)
74 WRITE(*,*) ' (kind=2), i2b: ', kind(i02), storage_size(i02)
75 WRITE(*,*) ' (kind=4), i4b: ', kind(i04), storage_size(i04)
76 WRITE(*,*) ' (kind=8), i8b: ', kind(i08), storage_size(i08)
77 WRITE(*,*) ' default: ', kind(i00), storage_size(i00)
78 WRITE(*,*)
79!
80 WRITE(*,*)
81 WRITE(*,*) ' This computer has the following precision and range'
82 WRITE(*,*) ' ==================================================='
83 WRITE(*,*)
84 WRITE(*,*)
85 WRITE(*,*) ' TINY Intrinsic Function: smallest positive number'
86 WRITE(*,*)
87 WRITE(*,*) ' (kind=4): ', tiny(b04)
88 WRITE(*,*) ' (kind=8): ', tiny(b08)
89 WRITE(*,*) ' (kind=16): ', tiny(b16)
90 WRITE(*,*) ' K( 6,38 ): ', tiny(a04)
91 WRITE(*,*) ' K(12,300): ', tiny(a08)
92#ifdef REAL16
93 WRITE(*,*) ' K(16,3000): ', tiny(a16)
94#else
95 WRITE(*,*) ' K(16,300): ', tiny(a16)
96#endif
97
98 WRITE(*,*)
99 WRITE(*,*) ' HUGE Intrinsic Function: largest number'
100 WRITE(*,*)
101 WRITE(*,*) ' (kind=4): ', huge(b04)
102 WRITE(*,*) ' (kind=8): ', huge(b08)
103 WRITE(*,*) ' (kind=16): ', huge(b16)
104 WRITE(*,*) ' K( 6,38 ): ', huge(a04)
105 WRITE(*,*) ' K(12,300): ', huge(a08)
106#ifdef REAL16
107 WRITE(*,*) ' K(16,3000): ', huge(a16)
108#else
109 WRITE(*,*) ' K(16,300): ', huge(a16)
110#endif
111
112 WRITE(*,*)
113 WRITE(*,*) ' RANGE Intrinsic Function: decimal exponent range'
114 WRITE(*,*)
115 WRITE(*,*) ' (kind=4): ', range(b04)
116 WRITE(*,*) ' (kind=8): ', range(b08)
117 WRITE(*,*) ' (kind=16): ', range(b16)
118 WRITE(*,*) ' K( 6,38 ): ', range(a04)
119 WRITE(*,*) ' K(12,300): ', range(a08)
120#ifdef REAL16
121 WRITE(*,*) ' K(16,3000): ', range(a16)
122#else
123 WRITE(*,*) ' K(16,300): ', range(a16)
124#endif
125
126 WRITE(*,*)
127 WRITE(*,*) ' PRECISION Intrinsic Function: decimal precision'
128 WRITE(*,*)
129 WRITE(*,*) ' (kind=4): ', precision(b04)
130 WRITE(*,*) ' (kind=8): ', precision(b08)
131 WRITE(*,*) ' (kind=16): ', precision(b16)
132 WRITE(*,*) ' K( 6,38 ): ', precision(a04)
133 WRITE(*,*) ' K(12,300): ', precision(a08)
134#ifdef REAL16
135 WRITE(*,*) ' K(16,3000): ', precision(a16)
136#else
137 WRITE(*,*) ' K(16,300): ', precision(a16)
138#endif
139
140 WRITE(*,*)
141 WRITE(*,*) ' EPSILON Intrinsic Function: negligible number, zero'
142 WRITE(*,*)
143 WRITE(*,*) ' (kind=4): ', epsilon(b04)
144 WRITE(*,*) ' (kind=8): ', epsilon(b08)
145 WRITE(*,*) ' (kind=16): ', epsilon(b16)
146 WRITE(*,*) ' K( 6,38 ): ', epsilon(a04)
147 WRITE(*,*) ' K(12,300): ', epsilon(a08)
148#ifdef REAL16
149 WRITE(*,*) ' K(16,3000): ', epsilon(a16)
150#else
151 WRITE(*,*) ' K(16,300): ', epsilon(a16)
152#endif
153
154 WRITE(*,*)
155 WRITE(*,*) ' Integer (i=1) to Real Conversion:'
156 WRITE(*,*)
157 WRITE(*,*) ' FLOAT(i): ', float(i)
158 WRITE(*,*) ' REAL(i): ', real(i)
159 WRITE(*,*) ' REAL(i,r8): ', real(i,r8)
160 WRITE(*,*) ' REAL(i,r16): ', real(i,r16)
161
162 WRITE(*,*)
163 WRITE(*,*) ' Values for selected_real_kind parameter:'
164 WRITE(*,*)
165 WRITE(*,*) ' r4: ', r4
166 WRITE(*,*) ' r8: ', r8
167 WRITE(*,*) ' r16: ', r16
168
169 stop
170
171 END PROGRAM types
172
program types
Definition types.F:1