1 | SUBROUTINE RRTM_KGB16 |
---|
2 | |
---|
3 | ! Originally by Eli J. Mlawer, Atmospheric & Environmental Research. |
---|
4 | ! BAND 16: 2600-3000 cm-1 (low - H2O,CH4; high - nothing) |
---|
5 | ! Reformatted for F90 by JJMorcrette, ECMWF |
---|
6 | ! R. Elkhatib 12-10-2005 Split for faster and more robust compilation. |
---|
7 | ! G.Mozdzynski March 2011 read constants from files |
---|
8 | ! ABozzo 201306 updated to rrtmg v4.85 |
---|
9 | ! T. Wilhelmsson and K. Yessad (Oct 2013) Geometry and setup refactoring. |
---|
10 | ! F. Vana 05-Mar-2015 Support for single precision |
---|
11 | ! ------------------------------------------------------------------ |
---|
12 | |
---|
13 | USE PARKIND1 ,ONLY : JPRB |
---|
14 | USE YOMHOOK ,ONLY : LHOOK, DR_HOOK, JPHOOK |
---|
15 | USE YOMLUN ,ONLY : NULRAD |
---|
16 | USE MPL_MODULE,ONLY : MPL_BROADCAST |
---|
17 | USE YOMTAG ,ONLY : MTAGRAD |
---|
18 | |
---|
19 | USE YOERRTO16, ONLY : KAO,KBO ,SELFREFO,FORREFO ,FRACREFAO,FRACREFBO,KAO_D,KBO_D |
---|
20 | USE YOMMP0 , ONLY : NPROC, MYPROC |
---|
21 | |
---|
22 | |
---|
23 | ! ------------------------------------------------------------------ |
---|
24 | |
---|
25 | IMPLICIT NONE |
---|
26 | REAL(KIND=JPHOOK) :: ZHOOK_HANDLE |
---|
27 | |
---|
28 | #include "abor1.intfb.h" |
---|
29 | |
---|
30 | IF (LHOOK) CALL DR_HOOK('RRTM_KGB16',0,ZHOOK_HANDLE) |
---|
31 | |
---|
32 | IF( MYPROC==1 )THEN |
---|
33 | READ(NULRAD,ERR=1001) KAO_D,KBO_D |
---|
34 | CLOSE(NULRAD,ERR=1000) |
---|
35 | KAO = REAL(KAO_D,JPRB) |
---|
36 | KBO = REAL(KBO_D,JPRB) |
---|
37 | ENDIF |
---|
38 | IF( NPROC>1 )THEN |
---|
39 | CALL MPL_BROADCAST (KAO,MTAGRAD,1,CDSTRING='RRTM_KGB16:') |
---|
40 | CALL MPL_BROADCAST (KBO,MTAGRAD,1,CDSTRING='RRTM_KGB16:') |
---|
41 | ENDIF |
---|
42 | |
---|
43 | ! Planck fraction mapping level: P = 387.6100 mbar, T = 250.17 K |
---|
44 | FRACREFAO(:, 1) = (/ & |
---|
45 | & 1.1593E-01_JPRB,2.3390E-01_JPRB,1.9120E-01_JPRB,1.3121E-01_JPRB,1.0590E-01_JPRB,8.4852E-02_JPRB, & |
---|
46 | & 6.4168E-02_JPRB,4.2537E-02_JPRB,2.3220E-02_JPRB,2.1767E-03_JPRB,1.8203E-03_JPRB,1.3724E-03_JPRB, & |
---|
47 | & 9.5452E-04_JPRB,5.5015E-04_JPRB,1.9348E-04_JPRB,2.7344E-05_JPRB/) |
---|
48 | FRACREFAO(:, 2) = (/ & |
---|
49 | & 2.8101E-01_JPRB,1.9773E-01_JPRB,1.4749E-01_JPRB,1.1399E-01_JPRB,8.8190E-02_JPRB,7.0531E-02_JPRB, & |
---|
50 | & 4.6356E-02_JPRB,3.0774E-02_JPRB,1.7332E-02_JPRB,2.0054E-03_JPRB,1.5950E-03_JPRB,1.2760E-03_JPRB, & |
---|
51 | & 9.5034E-04_JPRB,5.4992E-04_JPRB,1.9349E-04_JPRB,2.7309E-05_JPRB/) |
---|
52 | FRACREFAO(:, 3) = (/ & |
---|
53 | & 2.9054E-01_JPRB,2.1263E-01_JPRB,1.4133E-01_JPRB,1.1083E-01_JPRB,8.5107E-02_JPRB,6.5247E-02_JPRB, & |
---|
54 | & 4.4542E-02_JPRB,2.7205E-02_JPRB,1.6495E-02_JPRB,1.8453E-03_JPRB,1.5222E-03_JPRB,1.1884E-03_JPRB, & |
---|
55 | & 8.1094E-04_JPRB,4.9173E-04_JPRB,1.9344E-04_JPRB,2.7286E-05_JPRB/) |
---|
56 | FRACREFAO(:, 4) = (/ & |
---|
57 | & 2.9641E-01_JPRB,2.1738E-01_JPRB,1.4228E-01_JPRB,1.0830E-01_JPRB,8.2837E-02_JPRB,6.1359E-02_JPRB, & |
---|
58 | & 4.4683E-02_JPRB,2.5027E-02_JPRB,1.6057E-02_JPRB,1.7558E-03_JPRB,1.4193E-03_JPRB,1.0970E-03_JPRB, & |
---|
59 | & 7.8281E-04_JPRB,4.3260E-04_JPRB,1.4837E-04_JPRB,2.2958E-05_JPRB/) |
---|
60 | FRACREFAO(:, 5) = (/ & |
---|
61 | & 2.9553E-01_JPRB,2.2139E-01_JPRB,1.4816E-01_JPRB,1.0601E-01_JPRB,8.0048E-02_JPRB,6.0082E-02_JPRB, & |
---|
62 | & 4.3952E-02_JPRB,2.3788E-02_JPRB,1.5734E-02_JPRB,1.6586E-03_JPRB,1.3434E-03_JPRB,1.0281E-03_JPRB, & |
---|
63 | & 7.0256E-04_JPRB,4.2577E-04_JPRB,1.2803E-04_JPRB,1.3315E-05_JPRB/) |
---|
64 | FRACREFAO(:, 6) = (/ & |
---|
65 | & 2.9313E-01_JPRB,2.2476E-01_JPRB,1.5470E-01_JPRB,1.0322E-01_JPRB,7.8904E-02_JPRB,5.8175E-02_JPRB, & |
---|
66 | & 4.3097E-02_JPRB,2.3618E-02_JPRB,1.5385E-02_JPRB,1.5942E-03_JPRB,1.2702E-03_JPRB,9.5566E-04_JPRB, & |
---|
67 | & 6.5421E-04_JPRB,4.0165E-04_JPRB,1.2805E-04_JPRB,1.3355E-05_JPRB/) |
---|
68 | FRACREFAO(:, 7) = (/ & |
---|
69 | & 2.9069E-01_JPRB,2.2823E-01_JPRB,1.5995E-01_JPRB,1.0170E-01_JPRB,7.7287E-02_JPRB,5.6780E-02_JPRB, & |
---|
70 | & 4.1752E-02_JPRB,2.3899E-02_JPRB,1.4937E-02_JPRB,1.4916E-03_JPRB,1.1909E-03_JPRB,9.1307E-04_JPRB, & |
---|
71 | & 6.3518E-04_JPRB,3.9866E-04_JPRB,1.2805E-04_JPRB,1.3298E-05_JPRB/) |
---|
72 | FRACREFAO(:, 8) = (/ & |
---|
73 | & 2.8446E-01_JPRB,2.2651E-01_JPRB,1.7133E-01_JPRB,1.0299E-01_JPRB,7.4231E-02_JPRB,5.6031E-02_JPRB, & |
---|
74 | & 4.1368E-02_JPRB,2.4318E-02_JPRB,1.4135E-02_JPRB,1.4216E-03_JPRB,1.1465E-03_JPRB,8.9800E-04_JPRB, & |
---|
75 | & 6.3553E-04_JPRB,3.9536E-04_JPRB,1.2749E-04_JPRB,1.3298E-05_JPRB/) |
---|
76 | FRACREFAO(:, 9) = (/ & |
---|
77 | & 2.0568E-01_JPRB,2.5049E-01_JPRB,2.0568E-01_JPRB,1.1781E-01_JPRB,7.5579E-02_JPRB,5.8136E-02_JPRB, & |
---|
78 | & 4.2397E-02_JPRB,2.6544E-02_JPRB,1.3067E-02_JPRB,1.4061E-03_JPRB,1.1455E-03_JPRB,8.9408E-04_JPRB, & |
---|
79 | & 6.3652E-04_JPRB,3.9450E-04_JPRB,1.2841E-04_JPRB,1.3315E-05_JPRB/) |
---|
80 | |
---|
81 | ! Planck fraction mapping level : P=95.58350 mb, T = 215.70 K |
---|
82 | FRACREFBO(:) = (/ & |
---|
83 | & 1.8111E-01_JPRB,2.2612E-01_JPRB,1.6226E-01_JPRB,1.1872E-01_JPRB,9.9048E-02_JPRB,8.0390E-02_JPRB, & |
---|
84 | & 6.1648E-02_JPRB,4.1704E-02_JPRB,2.2976E-02_JPRB,1.9263E-03_JPRB,1.4694E-03_JPRB,1.1498E-03_JPRB, & |
---|
85 | & 7.9906E-04_JPRB,4.8310E-04_JPRB,1.6188E-04_JPRB,2.2651E-05_JPRB/) |
---|
86 | |
---|
87 | |
---|
88 | ! ------------------------------------------------------------------ |
---|
89 | |
---|
90 | ! The array KAO contains absorption coefs at the 16 chosen g-values |
---|
91 | ! for a range of pressure levels> ~100mb, temperatures, and binary |
---|
92 | ! species parameters (see taumol.f for definition). The first |
---|
93 | ! index in the array, JS, runs from 1 to 9, and corresponds to |
---|
94 | ! different values of the binary species parameter. For instance, |
---|
95 | ! JS=1 refers to dry air, JS = 2 corresponds to the paramter value 1/8, |
---|
96 | ! JS = 3 corresponds to the parameter value 2/8, etc. The second index |
---|
97 | ! in the array, JT, which runs from 1 to 5, corresponds to different |
---|
98 | ! temperatures. More specifically, JT = 3 means that the data are for |
---|
99 | ! the reference temperature TREF for this pressure level, JT = 2 refers |
---|
100 | ! to TREF-15, JT = 1 is for TREF-30, JT = 4 is for TREF+15, and JT = 5 |
---|
101 | ! is for TREF+30. The third index, JP, runs from 1 to 13 and refers |
---|
102 | ! to the JPth reference pressure level (see taumol.f for these levels |
---|
103 | ! in mb). The fourth index, IG, goes from 1 to 16, and indicates |
---|
104 | ! which g-interval the absorption coefficients are for. |
---|
105 | |
---|
106 | |
---|
107 | ! The array KBO contains absorption coefs at the 16 chosen g-values |
---|
108 | ! for a range of pressure levels < ~100mb and temperatures. The first |
---|
109 | ! index in the array, JT, which runs from 1 to 5, corresponds to |
---|
110 | ! different temperatures. More specifically, JT = 3 means that the |
---|
111 | ! data are for the reference temperature TREF for this pressure |
---|
112 | ! level, JT = 2 refers to the temperature TREF-15, JT = 1 is for |
---|
113 | ! TREF-30, JT = 4 is for TREF+15, and JT = 5 is for TREF+30. |
---|
114 | ! The second index, JP, runs from 13 to 59 and refers to the JPth |
---|
115 | ! reference pressure level (see taumol.f for the value of these |
---|
116 | ! pressure levels in mb). The third index, IG, goes from 1 to 16, |
---|
117 | ! and tells us which g-interval the absorption coefficients are for. |
---|
118 | |
---|
119 | |
---|
120 | ! The array FORREFO contains the coefficient of the water vapor |
---|
121 | ! foreign-continuum (including the energy term). The first |
---|
122 | ! index refers to reference temperature (296,260,224,260) and |
---|
123 | ! pressure (970,475,219,3 mbar) levels. The second index |
---|
124 | ! runs over the g-channel (1 to 16). |
---|
125 | |
---|
126 | FORREFO(1,:) = (/ & |
---|
127 | &5.1629E-06_JPRB,7.7578E-06_JPRB,1.9043E-05_JPRB,1.4802E-04_JPRB,2.2980E-04_JPRB,2.8057E-04_JPRB, & |
---|
128 | &3.2824E-04_JPRB,3.4913E-04_JPRB,3.6515E-04_JPRB,3.8271E-04_JPRB,3.7499E-04_JPRB,3.6966E-04_JPRB, & |
---|
129 | &3.7424E-04_JPRB,3.8884E-04_JPRB,3.7117E-04_JPRB,4.3710E-04_JPRB/) |
---|
130 | FORREFO(2,:) = (/ & |
---|
131 | &5.0804E-06_JPRB,1.3466E-05_JPRB,7.2606E-05_JPRB,1.6940E-04_JPRB,2.1022E-04_JPRB,2.5900E-04_JPRB, & |
---|
132 | &2.9106E-04_JPRB,3.2261E-04_JPRB,3.2066E-04_JPRB,3.5421E-04_JPRB,3.7128E-04_JPRB,3.8144E-04_JPRB, & |
---|
133 | &3.7854E-04_JPRB,3.8347E-04_JPRB,3.8921E-04_JPRB,3.7339E-04_JPRB/) |
---|
134 | FORREFO(3,:) = (/ & |
---|
135 | &5.4797E-05_JPRB,1.0026E-04_JPRB,1.2422E-04_JPRB,1.6386E-04_JPRB,1.8378E-04_JPRB,1.9616E-04_JPRB, & |
---|
136 | &2.0711E-04_JPRB,2.2492E-04_JPRB,2.5240E-04_JPRB,2.6187E-04_JPRB,2.6058E-04_JPRB,2.4892E-04_JPRB, & |
---|
137 | &2.6526E-04_JPRB,3.2105E-04_JPRB,3.6903E-04_JPRB,3.7213E-04_JPRB/) |
---|
138 | FORREFO(4,:) = (/ & |
---|
139 | &4.2782E-05_JPRB,1.4775E-04_JPRB,1.4588E-04_JPRB,1.6964E-04_JPRB,1.6667E-04_JPRB,1.7192E-04_JPRB, & |
---|
140 | &1.9057E-04_JPRB,2.0180E-04_JPRB,2.1177E-04_JPRB,2.2326E-04_JPRB,2.3801E-04_JPRB,2.9308E-04_JPRB, & |
---|
141 | &3.1130E-04_JPRB,3.1829E-04_JPRB,3.5035E-04_JPRB,3.7782E-04_JPRB/) |
---|
142 | |
---|
143 | |
---|
144 | ! The array SELFREFO contains the coefficient of the water vapor |
---|
145 | ! self-continuum (including the energy term). The first index |
---|
146 | ! refers to temperature in 7.2 degree increments. For instance, |
---|
147 | ! JT = 1 refers to a temperature of 245.6, JT = 2 refers to 252.8, |
---|
148 | ! etc. The second index runs over the g-channel (1 to 16). |
---|
149 | |
---|
150 | SELFREFO(:, 1) = (/ & |
---|
151 | & 1.27793E-03_JPRB, 1.05944E-03_JPRB, 8.78300E-04_JPRB, 7.28133E-04_JPRB, 6.03641E-04_JPRB, & |
---|
152 | & 5.00434E-04_JPRB, 4.14873E-04_JPRB, 3.43940E-04_JPRB, 2.85135E-04_JPRB, 2.36384E-04_JPRB/) |
---|
153 | SELFREFO(:, 2) = (/ & |
---|
154 | & 1.42785E-03_JPRB, 1.17602E-03_JPRB, 9.68600E-04_JPRB, 7.97765E-04_JPRB, 6.57060E-04_JPRB, & |
---|
155 | & 5.41172E-04_JPRB, 4.45724E-04_JPRB, 3.67110E-04_JPRB, 3.02361E-04_JPRB, 2.49033E-04_JPRB/) |
---|
156 | SELFREFO(:, 3) = (/ & |
---|
157 | & 2.94095E-03_JPRB, 2.27102E-03_JPRB, 1.75370E-03_JPRB, 1.35422E-03_JPRB, 1.04574E-03_JPRB, & |
---|
158 | & 8.07525E-04_JPRB, 6.23577E-04_JPRB, 4.81530E-04_JPRB, 3.71841E-04_JPRB, 2.87138E-04_JPRB/) |
---|
159 | SELFREFO(:, 4) = (/ & |
---|
160 | & 3.94894E-03_JPRB, 3.48184E-03_JPRB, 3.07000E-03_JPRB, 2.70687E-03_JPRB, 2.38669E-03_JPRB, & |
---|
161 | & 2.10439E-03_JPRB, 1.85547E-03_JPRB, 1.63600E-03_JPRB, 1.44249E-03_JPRB, 1.27187E-03_JPRB/) |
---|
162 | SELFREFO(:, 5) = (/ & |
---|
163 | & 4.19971E-03_JPRB, 3.86333E-03_JPRB, 3.55390E-03_JPRB, 3.26925E-03_JPRB, 3.00740E-03_JPRB, & |
---|
164 | & 2.76652E-03_JPRB, 2.54494E-03_JPRB, 2.34110E-03_JPRB, 2.15359E-03_JPRB, 1.98110E-03_JPRB/) |
---|
165 | SELFREFO(:, 6) = (/ & |
---|
166 | & 4.95922E-03_JPRB, 4.57134E-03_JPRB, 4.21380E-03_JPRB, 3.88422E-03_JPRB, 3.58042E-03_JPRB, & |
---|
167 | & 3.30038E-03_JPRB, 3.04225E-03_JPRB, 2.80430E-03_JPRB, 2.58496E-03_JPRB, 2.38278E-03_JPRB/) |
---|
168 | SELFREFO(:, 7) = (/ & |
---|
169 | & 5.27379E-03_JPRB, 4.91005E-03_JPRB, 4.57140E-03_JPRB, 4.25611E-03_JPRB, 3.96256E-03_JPRB, & |
---|
170 | & 3.68925E-03_JPRB, 3.43480E-03_JPRB, 3.19790E-03_JPRB, 2.97734E-03_JPRB, 2.77199E-03_JPRB/) |
---|
171 | SELFREFO(:, 8) = (/ & |
---|
172 | & 5.75341E-03_JPRB, 5.31533E-03_JPRB, 4.91060E-03_JPRB, 4.53669E-03_JPRB, 4.19126E-03_JPRB, & |
---|
173 | & 3.87212E-03_JPRB, 3.57729E-03_JPRB, 3.30490E-03_JPRB, 3.05325E-03_JPRB, 2.82077E-03_JPRB/) |
---|
174 | SELFREFO(:, 9) = (/ & |
---|
175 | & 5.49849E-03_JPRB, 5.14295E-03_JPRB, 4.81040E-03_JPRB, 4.49935E-03_JPRB, 4.20842E-03_JPRB, & |
---|
176 | & 3.93629E-03_JPRB, 3.68177E-03_JPRB, 3.44370E-03_JPRB, 3.22102E-03_JPRB, 3.01275E-03_JPRB/) |
---|
177 | SELFREFO(:,10) = (/ & |
---|
178 | & 6.04962E-03_JPRB, 5.60945E-03_JPRB, 5.20130E-03_JPRB, 4.82285E-03_JPRB, 4.47194E-03_JPRB, & |
---|
179 | & 4.14656E-03_JPRB, 3.84485E-03_JPRB, 3.56510E-03_JPRB, 3.30570E-03_JPRB, 3.06518E-03_JPRB/) |
---|
180 | SELFREFO(:,11) = (/ & |
---|
181 | & 6.40108E-03_JPRB, 5.87551E-03_JPRB, 5.39310E-03_JPRB, 4.95029E-03_JPRB, 4.54385E-03_JPRB, & |
---|
182 | & 4.17077E-03_JPRB, 3.82833E-03_JPRB, 3.51400E-03_JPRB, 3.22548E-03_JPRB, 2.96065E-03_JPRB/) |
---|
183 | SELFREFO(:,12) = (/ & |
---|
184 | & 6.77938E-03_JPRB, 6.15713E-03_JPRB, 5.59200E-03_JPRB, 5.07874E-03_JPRB, 4.61259E-03_JPRB, & |
---|
185 | & 4.18922E-03_JPRB, 3.80472E-03_JPRB, 3.45550E-03_JPRB, 3.13834E-03_JPRB, 2.85029E-03_JPRB/) |
---|
186 | SELFREFO(:,13) = (/ & |
---|
187 | & 6.90020E-03_JPRB, 6.26766E-03_JPRB, 5.69310E-03_JPRB, 5.17121E-03_JPRB, 4.69717E-03_JPRB, & |
---|
188 | & 4.26658E-03_JPRB, 3.87546E-03_JPRB, 3.52020E-03_JPRB, 3.19750E-03_JPRB, 2.90439E-03_JPRB/) |
---|
189 | SELFREFO(:,14) = (/ & |
---|
190 | & 6.92759E-03_JPRB, 6.32882E-03_JPRB, 5.78180E-03_JPRB, 5.28206E-03_JPRB, 4.82552E-03_JPRB, & |
---|
191 | & 4.40843E-03_JPRB, 4.02740E-03_JPRB, 3.67930E-03_JPRB, 3.36129E-03_JPRB, 3.07076E-03_JPRB/) |
---|
192 | SELFREFO(:,15) = (/ & |
---|
193 | & 7.54539E-03_JPRB, 6.81161E-03_JPRB, 6.14920E-03_JPRB, 5.55120E-03_JPRB, 5.01136E-03_JPRB, & |
---|
194 | & 4.52402E-03_JPRB, 4.08407E-03_JPRB, 3.68690E-03_JPRB, 3.32836E-03_JPRB, 3.00468E-03_JPRB/) |
---|
195 | SELFREFO(:,16) = (/ & |
---|
196 | & 7.62039E-03_JPRB, 7.10834E-03_JPRB, 6.63070E-03_JPRB, 6.18515E-03_JPRB, 5.76955E-03_JPRB, & |
---|
197 | & 5.38186E-03_JPRB, 5.02023E-03_JPRB, 4.68290E-03_JPRB, 4.36823E-03_JPRB, 4.07471E-03_JPRB/) |
---|
198 | |
---|
199 | IF (LHOOK) CALL DR_HOOK('RRTM_KGB16',1,ZHOOK_HANDLE) |
---|
200 | RETURN |
---|
201 | |
---|
202 | 1000 CONTINUE |
---|
203 | CALL ABOR1("RRTM_KGB16:ERROR CLOSING FILE RADRRTM") |
---|
204 | 1001 CONTINUE |
---|
205 | CALL ABOR1("RRTM_KGB16:ERROR READING FILE RADRRTM") |
---|
206 | |
---|
207 | END SUBROUTINE RRTM_KGB16 |
---|