LMDZ
olwtt.F90
Go to the documentation of this file.
1 !OPTIONS XOPT(HSFUN)
2 SUBROUTINE olwtt (KIDIA,KFDIA,KLON, PGA,PGB,PUU, PTT)
3 !
4 !**** *LWTT* - LONGWAVE TRANSMISSION FUNCTIONS
5 !
6 ! PURPOSE.
7 ! --------
8 ! THIS ROUTINE COMPUTES THE TRANSMISSION FUNCTIONS FOR ALL THE
9 ! ABSORBERS (H2O, UNIFORMLY MIXED GASES, AND O3) IN ALL SIX SPECTRAL
10 ! INTERVALS.
11 !
12 !** INTERFACE.
13 ! ----------
14 ! *LWTT* IS CALLED FROM *LWVN*, *LWVD*, *LWVB*
15 !
16 !
17 ! EXPLICIT ARGUMENTS :
18 ! --------------------
19 ! ==== INPUTS ===
20 ! KND : ; WEIGHTING INDEX
21 ! PUU : (KLON,NUA) ; ABSORBER AMOUNTS
22 ! ==== OUTPUTS ===
23 ! PTT : (KLON,NTRA) ; TRANSMISSION FUNCTIONS
24 !
25 ! IMPLICIT ARGUMENTS : NONE
26 ! --------------------
27 !
28 ! METHOD.
29 ! -------
30 !
31 ! 1. TRANSMISSION FUNCTION BY H2O AND UNIFORMLY MIXED GASES ARE
32 ! COMPUTED USING PADE APPROXIMANTS AND HORNER'S ALGORITHM.
33 ! 2. TRANSMISSION BY O3 IS EVALUATED WITH MALKMUS'S BAND MODEL.
34 ! 3. TRANSMISSION BY H2O CONTINUUM AND AEROSOLS FOLLOW AN
35 ! A SIMPLE EXPONENTIAL DECREASE WITH ABSORBER AMOUNT.
36 !
37 ! EXTERNALS.
38 ! ----------
39 !
40 ! NONE
41 !
42 ! REFERENCE.
43 ! ----------
44 !
45 ! SEE RADIATION'S PART OF THE MODEL'S DOCUMENTATION AND
46 ! ECMWF RESEARCH DEPARTMENT DOCUMENTATION OF THE IFS
47 !
48 ! AUTHOR.
49 ! -------
50 ! JEAN-JACQUES MORCRETTE *ECMWF*
51 !
52 ! MODIFICATIONS.
53 ! --------------
54 ! ORIGINAL : 88-12-15
55 !
56 !-----------------------------------------------------------------------
57 ! IMPLICIT LOGICAL (L)
58 !
59 !#include "yoelw.h"
60 !#include "yoerad.h"
61 !#include "yoerdu.h"
62 
63 #include "tsmbkind.h"
64 
65 USE yoeolw , ONLY : ntra ,nua ,&
66  & o1h , o2h ,rpialf0
67 
68 
69 IMPLICIT NONE
70 
71 
72 ! DUMMY INTEGER SCALARS
73 integer_m :: kfdia
74 integer_m :: kidia
75 integer_m :: klon
76 
77 ! ------------------------------------------------------------------
78 !
79 !* 0.1 ARGUMENTS
80 ! ---------
81 !
82 real_b :: puu(klon,nua), ptt(klon,ntra) &
83  & , pga(klon,8,2), pgb(klon,8,2)
84 !
85 ! ------------------------------------------------------------------
86 !
87 !* 0.2 LOCAL ARRAYS
88 ! ------------
89 !
90 ! REAL ZXN(KLON,8),ZXD(KLON,8),ZZ(KLON,8)
91 
92 ! LOCAL INTEGER SCALARS
93 integer_m :: ja, jl
94 
95 ! LOCAL REAL SCALARS
96 real_b :: za11, za12, zaercn, zeu, zeu10, zeu11, zeu12,&
97  &zeu13, zodh41, zodh42, zodn21, zodn22, zpu, zpu10, &
98  &zpu11, zpu12, zpu13, zsq1, zsq2, zsqh41, &
99  &zsqh42, zsqn21, zsqn22, zto1, zto2, zttf11, &
100  &zttf12, zuu11, zuu12, zuxy, zvxy, zx, zxch4, &
101  &zxd, zxn, zxn2o, zy, zych4, zyn2o, zz
102 
103 ! ------------------------------------------------------------------
104 !#!DIR$ VFUNCTION SQRTHF
105 !
106 !* 1. HORNER'S ALGORITHM FOR H2O AND CO2 TRANSMISSION
107 ! -----------------------------------------------
108 !
109 DO ja = 1 , 8
110  DO jl = kidia,kfdia
111  zz =sqrt(puu(jl,ja))
112 ! ZXD(JL,1)=PGB( JL, 1,1) + ZZ(JL, 1)*(PGB( JL, 1,2) + ZZ(JL, 1))
113 ! ZXN(JL,1)=PGA( JL, 1,1) + ZZ(JL, 1)*(PGA( JL, 1,2) )
114 ! PTT(JL,1)=ZXN(JL,1)/ZXD(JL,1)
115  zxd =pgb( jl,ja,1) + zz *(pgb( jl,ja,2) + zz )
116  zxn =pga( jl,ja,1) + zz *(pga( jl,ja,2) )
117  ptt(jl,ja)=zxn /zxd
118  END DO
119 END DO
120 !
121 ! ------------------------------------------------------------------
122 !
123 !* 2. CONTINUUM, OZONE AND AEROSOL TRANSMISSION FUNCTIONS
124 ! ---------------------------------------------------
125 !
126 DO jl = kidia,kfdia
127  ptt(jl, 9) = ptt(jl, 8)
128 !
129 !- CONTINUUM ABSORPTION: E- AND P-TYPE
130 !
131 !- 13 350-500 cm-1
132 !- 10 500-800 cm-1
133 !- 11 800-970 + 1110-1250 cm-1
134 !- 12 970-1110 cm-1
135 !
136 ! IF (INWCONT.EQ.0) THEN
137 !- original ECMWF 16r1 coefficients
138  zpu = 0.002 * puu(jl,10)
139  zpu10 = 112. * zpu
140  zpu11 = 6.25 * zpu
141  zpu12 = 5.00 * zpu
142  zpu13 = 80.0 * zpu
143  zeu = puu(jl,11)
144  zeu10 = 12. * zeu
145  zeu11 = 6.25 * zeu
146  zeu12 = 5.00 * zeu
147  zeu13 = 80.0 * zeu
148 ! ELSE IF (INWCONT.EQ.1) THEN
149 !- coefficients proposed by Giorgetta and Wild
150 ! ZPU10 = 0.8109 * PUU(JL,10)
151 ! ZPU11 = 0.0208 * PUU(JL,10)
152 ! ZPU12 = 0.0106 * PUU(JL,10)
153 ! ZPU13 = 12.331 * PUU(JL,10)
154 ! ZEU10 = 47.7 * PUU(JL,11)
155 ! ZEU11 = 8.31 * PUU(JL,11)
156 ! ZEU12 = 5.87 * PUU(JL,11)
157 ! ZEU13 = 209. * PUU(JL,11)
158 ! ELSE IF (INWCONT.EQ.2) THEN
159 !- coefficients adjusted from Clough CKD22
160 !c ZPU10 = 0.00488 * 81.63 * PUU(JL,10)
161 !c ZPU11 = 0.00022 * 8.43 * PUU(JL,10)
162 !c ZPU12 = 0.00001 * 5.08 * PUU(JL,10)
163 !c ZPU13 = 0.03638 * 721.8 * PUU(JL,10)
164 ! ZPU10 = 0.3981 * PUU(JL,10)
165 ! ZPU10 = 0.18 * PUU(JL,10)
166 ! ZPU11 = 0.00127 * PUU(JL,10)
167 ! ZPU12 = 0.00071 * PUU(JL,10)
168 ! ZPU13 = 26.26 * PUU(JL,10)
169 !
170 !! ZEU10 = 81.63 * PUU(JL,11)
171 ! ZEU10 = 18. * PUU(JL,11)
172 ! ZEU11 = 8.43 * PUU(JL,11)
173 ! ZEU12 = 5.08 * PUU(JL,11)
174 ! ZEU13 = 721.8 * PUU(JL,11)
175 ! END IF
176 !
177 ! IF (LNOCONT) THEN
178 ! ZPU10 = 0.
179 ! ZPU11 = 0.
180 ! ZPU12 = 0.
181 ! ZPU13 = 0.
182 !
183 ! ZEU10 = 0.
184 ! ZEU11 = 0.
185 ! ZEU12 = 0.
186 ! ZEU13 = 0.
187 ! END IF
188 !
189 !- OZONE ABSORPTION
190 !
191  zx = puu(jl,12)
192  zy = puu(jl,13)
193  zuxy = 4. * zx * zx / (rpialf0 * zy)
194  zsq1 = sqrt(1. + o1h * zuxy ) - 1.
195  zsq2 = sqrt(1. + o2h * zuxy ) - 1.
196  zvxy = rpialf0 * zy / (2. * zx)
197  zaercn = puu(jl,17) + zeu12 + zpu12
198  zto1 = exp( - zvxy * zsq1 - zaercn )
199  zto2 = exp( - zvxy * zsq2 - zaercn )
200 
201 ! IF (LNOOZON) THEN
202 ! ZTO1 = EXP( - ZAERCN )
203 ! ZTO2 = EXP( - ZAERCN )
204 ! END IF
205 !
206 !-- TRACE GASES (CH4, N2O, CFC-11, CFC-12)
207 !
208 !* CH4 IN INTERVAL 800-970 + 1110-1250 CM-1
209 !
210  zxch4 = puu(jl,19)
211  zych4 = puu(jl,20)
212  zuxy = 4. * zxch4*zxch4/(0.103*zych4)
213  zsqh41 = sqrt(1. + 33.7 * zuxy) - 1.
214  zvxy = 0.103 * zych4 / (2. * zxch4)
215  zodh41 = zvxy * zsqh41
216 !
217 !* N2O IN INTERVAL 800-970 + 1110-1250 CM-1
218 !
219  zxn2o = puu(jl,21)
220  zyn2o = puu(jl,22)
221  zuxy = 4. * zxn2o*zxn2o/(0.416*zyn2o)
222  zsqn21 = sqrt(1. + 21.3 * zuxy) - 1.
223  zvxy = 0.416 * zyn2o / (2. * zxn2o)
224  zodn21 = zvxy * zsqn21
225 !
226 !* CH4 IN INTERVAL 1250-1450 + 1880-2820 CM-1
227 !
228  zuxy = 4. * zxch4*zxch4/(0.113*zych4)
229  zsqh42 = sqrt(1. + 400. * zuxy) - 1.
230  zvxy = 0.113 * zych4 / (2. * zxch4)
231  zodh42 = zvxy * zsqh42
232 !
233 !* N2O IN INTERVAL 1250-1450 + 1880-2820 CM-1
234 !
235  zuxy = 4. * zxn2o*zxn2o/(0.197*zyn2o)
236  zsqn22 = sqrt(1. + 2000. * zuxy) - 1.
237  zvxy = 0.197 * zyn2o / (2. * zxn2o)
238  zodn22 = zvxy * zsqn22
239 !
240 !* CFC-11 IN INTERVAL 800-970 + 1110-1250 CM-1
241 !
242  za11 = 2. * puu(jl,23) * 4.404e+05
243  zttf11 = 1. - za11 * 0.003225
244 !
245 !* CFC-12 IN INTERVAL 800-970 + 1110-1250 CM-1
246 !
247  za12 = 2. * puu(jl,24) * 6.7435e+05
248  zttf12 = 1. - za12 * 0.003225
249 !
250 
251 ! IF (LNOUMG) THEN
252 ! PTT(JL,7) = 1.
253 ! PTT(JL,8) = 1.
254 ! PTT(JL,9) = 1.
255 ! ZODH41 = 0.
256 ! ZODH42 = 0.
257 ! ZODN21 = 0.
258 ! ZODN22 = 0.
259 ! ZTTF11 = 1.
260 ! ZTTF12 = 1.
261 ! END IF
262 
263  zuu11 = - puu(jl,15) - zeu10 - zpu10
264  zuu12 = - puu(jl,16) - zeu11 - zpu11 - zodh41 - zodn21
265  ptt(jl,10) = exp( - puu(jl,14) )
266  ptt(jl,11) = exp( zuu11 )
267  ptt(jl,12) = exp( zuu12 ) * zttf11 * zttf12
268  ptt(jl,13) = 0.7554 * zto1 + 0.2446 * zto2
269  ptt(jl,14) = ptt(jl,10) * exp( - zeu13 - zpu13 )
270  ptt(jl,15) = exp( - puu(jl,14) - zodh42 - zodn22 )
271 END DO
272 !
273 RETURN
274 END SUBROUTINE olwtt
integer, save kidia
Definition: dimphy.F90:6
subroutine olwtt(KIDIA, KFDIA, KLON, PGA, PGB, PUU, PTT)
Definition: olwtt.F90:3
integer, save klon
Definition: dimphy.F90:3
integer, save kfdia
Definition: dimphy.F90:5
Definition: yoeolw.F90:1