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