LMDZ
lwttm.F90
Go to the documentation of this file.
1 !OPTIONS XOPT(HSFUN)
2 SUBROUTINE lwttm ( KIDIA, KFDIA, KLON, PGA , PGB, PUU1 , PUU2 , PTT )
3 
4 !**** *LWTTM* - 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 ! *LWTTM* IS CALLED FROM *LWVD*
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 ! 97-04-18 JJ Morcrette Revised continuum
57 
58 !-----------------------------------------------------------------------
59 
60 #include "tsmbkind.h"
61 
62 USE yoelw , ONLY : ntra ,nua ,rptype ,retype ,&
63  &ro1h ,ro2h ,rpialf0
64 
65 
66 IMPLICIT NONE
67 
68 
69 ! DUMMY INTEGER SCALARS
70 integer_m :: kfdia
71 integer_m :: kidia
72 integer_m :: klon
73 
74 
75 
76 ! ------------------------------------------------------------------
77 
78 !* 0.1 ARGUMENTS
79 ! ---------
80 
81 real_b :: puu1(klon,nua), puu2(klon,nua), ptt(klon,ntra)&
82  &, pga(klon,8,2) , pgb(klon,8,2)
83 
84 ! LOCAL INTEGER SCALARS
85 integer_m :: ja, jl
86 
87 ! LOCAL REAL SCALARS
88 real_b :: za11, za12, zaercn, zeu, zeu10, zeu11, zeu12,&
89  &zeu13, zodh41, zodh42, zodn21, zodn22, zpu, &
90  &zpu10, zpu11, zpu12, zpu13, zsq1, zsq2, zsqh41, &
91  &zsqh42, zsqn21, zsqn22, zto1, zto2, zttf11, &
92  &zttf12, zuu11, zuu12, zuxy, zvxy, zx, zxch4, &
93  &zxd, zxn, zxn2o, zy, zych4, zyn2o, zz
94 
95 
96 ! ------------------------------------------------------------------
97 !DIR$ VFUNCTION SQRTHF
98 
99 
100 !* 1. HORNER'S ALGORITHM FOR H2O AND CO2 TRANSMISSION
101 ! -----------------------------------------------
102 
103 DO ja = 1 , 8
104  DO jl = kidia,kfdia
105  zz = sqrt(puu1(jl,ja) - puu2(jl,ja))
106  zxd = pgb( jl,ja,1) + zz * (pgb( jl,ja,2) + zz )
107  zxn = pga( jl,ja,1) + zz * (pga( jl,ja,2) )
108  ptt(jl,ja) = zxn / zxd
109  ENDDO
110 ENDDO
111 
112 DO jl = kidia,kfdia
113  ptt(jl,3)=max(ptt(jl,3),_zero_)
114 ENDDO
115 ! ------------------------------------------------------------------
116 
117 !* 2. CONTINUUM, OZONE AND AEROSOL TRANSMISSION FUNCTIONS
118 ! ---------------------------------------------------
119 
120 DO jl = kidia,kfdia
121  ptt(jl, 9) = ptt(jl, 8)
122 
123 !- CONTINUUM ABSORPTION: E- AND P-TYPE
124 
125  zpu = (puu1(jl,10) - puu2(jl,10))
126  zpu10 = rptype(1) * zpu
127  zpu11 = rptype(2) * zpu
128  zpu12 = rptype(3) * zpu
129  zpu13 = rptype(4) * zpu
130  zeu = (puu1(jl,11) - puu2(jl,11))
131  zeu10 = retype(1) * zeu
132  zeu11 = retype(2) * zeu
133  zeu12 = retype(3) * zeu
134  zeu13 = retype(4) * zeu
135 
136 !- OZONE ABSORPTION
137 
138  zx = (puu1(jl,12) - puu2(jl,12))
139  zy = (puu1(jl,13) - puu2(jl,13))
140  zuxy = 4._jprb * zx * zx / (rpialf0 * zy)
141  zsq1 = sqrt(_one_ + ro1h * zuxy ) - _one_
142  zsq2 = sqrt(_one_ + ro2h * zuxy ) - _one_
143  zvxy = rpialf0 * zy / (_two_ * zx)
144  zaercn = (puu1(jl,17) -puu2(jl,17)) + zeu12 + zpu12
145  zto1 = exp( - zvxy * zsq1 - zaercn )
146  zto2 = exp( - zvxy * zsq2 - zaercn )
147 
148 !-- TRACE GASES (CH4, N2O, CFC-11, CFC-12)
149 
150 !* CH4 IN INTERVAL 800-970 + 1110-1250 CM-1
151 
152  zxch4 = (puu1(jl,19) - puu2(jl,19))
153  zych4 = (puu1(jl,20) - puu2(jl,20))
154  zuxy = 4._jprb * zxch4*zxch4/(0.103_jprb*zych4)
155  zsqh41 = sqrt(_one_ + 33.7_jprb * zuxy) - _one_
156  zvxy = 0.103_jprb * zych4 / (_two_ * zxch4)
157  zodh41 = zvxy * zsqh41
158 
159 !* N2O IN INTERVAL 800-970 + 1110-1250 CM-1
160 
161  zxn2o = (puu1(jl,21) - puu2(jl,21))
162  zyn2o = (puu1(jl,22) - puu2(jl,22))
163  zuxy = 4._jprb * zxn2o*zxn2o/(0.416_jprb*zyn2o)
164  zsqn21 = sqrt(_one_ + 21.3_jprb * zuxy) - _one_
165  zvxy = 0.416_jprb * zyn2o / (_two_ * zxn2o)
166  zodn21 = zvxy * zsqn21
167 
168 !* CH4 IN INTERVAL 1250-1450 + 1880-2820 CM-1
169 
170  zuxy = 4._jprb * zxch4*zxch4/(0.113_jprb*zych4)
171  zsqh42 = sqrt(_one_ + 400._jprb * zuxy) - _one_
172  zvxy = 0.113_jprb * zych4 / (_two_ * zxch4)
173  zodh42 = zvxy * zsqh42
174 
175 !* N2O IN INTERVAL 1250-1450 + 1880-2820 CM-1
176 
177  zuxy = 4._jprb * zxn2o*zxn2o/(0.197_jprb*zyn2o)
178  zsqn22 = sqrt(_one_ + 2000._jprb * zuxy) - _one_
179  zvxy = 0.197_jprb * zyn2o / (_two_ * zxn2o)
180  zodn22 = zvxy * zsqn22
181 
182 !* CFC-11 IN INTERVAL 800-970 + 1110-1250 CM-1
183 
184  za11 = (puu1(jl,23) - puu2(jl,23)) * 4.404e+05_jprb
185  zttf11 = _one_ - za11 * 0.003225_jprb
186 
187 !* CFC-12 IN INTERVAL 800-970 + 1110-1250 CM-1
188 
189  za12 = (puu1(jl,24) - puu2(jl,24)) * 6.7435e+05_jprb
190  zttf12 = _one_ - za12 * 0.003225_jprb
191 
192  zuu11 = - (puu1(jl,15) - puu2(jl,15)) - zeu10 - zpu10
193  zuu12 = - (puu1(jl,16) - puu2(jl,16)) - zeu11 - zpu11 -zodh41 - zodn21
194  ptt(jl,10) = exp( - (puu1(jl,14)- puu2(jl,14)) )
195  ptt(jl,11) = exp( zuu11 )
196  ptt(jl,12) = exp( zuu12 ) * zttf11 * zttf12
197  ptt(jl,13) = 0.7554_jprb * zto1 + 0.2446_jprb * zto2
198  ptt(jl,14) = ptt(jl,10) * exp( - zeu13 - zpu13 )
199  ptt(jl,15) = exp( - (puu1(jl,14) - puu2(jl,14)) - zodh42-zodn22 )
200 
201 ENDDO
202 
203 RETURN
204 END SUBROUTINE lwttm
Definition: yoelw.F90:1
integer, save kidia
Definition: dimphy.F90:6
integer, save klon
Definition: dimphy.F90:3
integer(kind=jpim) nua
Definition: yoelw.F90:19
real(kind=jprb), dimension(4) retype
Definition: yoelw.F90:27
integer, save kfdia
Definition: dimphy.F90:5
real(kind=jprb) rpialf0
Definition: yoelw.F90:32
real(kind=jprb), dimension(4) rptype
Definition: yoelw.F90:26
real(kind=jprb) ro1h
Definition: yoelw.F90:29
subroutine lwttm(KIDIA, KFDIA, KLON, PGA, PGB, PUU1, PUU2, PTT)
Definition: lwttm.F90:3
integer(kind=jpim) ntra
Definition: yoelw.F90:18
real(kind=jprb) ro2h
Definition: yoelw.F90:30