LMDZ
lwtt.F90
Go to the documentation of this file.
1 !OPTIONS XOPT(HSFUN)
2 SUBROUTINE lwtt ( 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 ! EXPLICIT ARGUMENTS :
17 ! --------------------
18 ! ==== INPUTS ===
19 ! KND : ; WEIGHTING INDEX
20 ! PUU : (KLON,NUA) ; ABSORBER AMOUNTS
21 ! ==== OUTPUTS ===
22 ! PTT : (KLON,NTRA) ; TRANSMISSION FUNCTIONS
23 
24 ! IMPLICIT ARGUMENTS : NONE
25 ! --------------------
26 
27 ! METHOD.
28 ! -------
29 
30 ! 1. TRANSMISSION FUNCTION BY H2O AND UNIFORMLY MIXED GASES ARE
31 ! COMPUTED USING PADE APPROXIMANTS AND HORNER'S ALGORITHM.
32 ! 2. TRANSMISSION BY O3 IS EVALUATED WITH MALKMUS'S BAND MODEL.
33 ! 3. TRANSMISSION BY H2O CONTINUUM AND AEROSOLS FOLLOW AN
34 ! A SIMPLE EXPONENTIAL DECREASE WITH ABSORBER AMOUNT.
35 
36 ! EXTERNALS.
37 ! ----------
38 
39 ! NONE
40 
41 ! REFERENCE.
42 ! ----------
43 
44 ! SEE RADIATION'S PART OF THE MODEL'S DOCUMENTATION AND
45 ! ECMWF RESEARCH DEPARTMENT DOCUMENTATION OF THE IFS
46 
47 ! AUTHOR.
48 ! -------
49 ! JEAN-JACQUES MORCRETTE *ECMWF*
50 
51 ! MODIFICATIONS.
52 ! --------------
53 ! ORIGINAL : 88-12-15
54 ! 97-04-18 JJ Morcrette Revised continuum
55 ! M.Hamrud 01-Oct-2003 CY28 Cleaning
56 
57 !-----------------------------------------------------------------------
58 
59 USE parkind1 ,ONLY : jpim ,jprb
60 USE yomhook ,ONLY : lhook, dr_hook
61 
62 USE yoelw , ONLY : ntra ,nua ,rptype ,retype ,&
63  & ro1h ,ro2h ,rpialf0
64 
65 IMPLICIT NONE
66 
67 INTEGER(KIND=JPIM),INTENT(IN) :: KLON
68 INTEGER(KIND=JPIM),INTENT(IN) :: KIDIA
69 INTEGER(KIND=JPIM),INTENT(IN) :: KFDIA
70 REAL(KIND=JPRB) ,INTENT(IN) :: PGA(klon,8,2)
71 REAL(KIND=JPRB) ,INTENT(IN) :: PGB(klon,8,2)
72 REAL(KIND=JPRB) ,INTENT(IN) :: PUU(klon,nua)
73 REAL(KIND=JPRB) ,INTENT(OUT) :: PTT(klon,ntra)
74 ! ------------------------------------------------------------------
75 
76 !* 0.1 ARGUMENTS
77 ! ---------
78 
79 INTEGER(KIND=JPIM) :: JA, JL
80 
81 REAL(KIND=JPRB) :: ZA11, ZA12, ZAERCN, ZEU10, ZEU11, ZEU12,&
82  & ZEU13, ZODH41, ZODH42, ZODN21, ZODN22, ZPU10, &
83  & ZPU11, ZPU12, ZPU13, ZSQ1, ZSQ2, ZSQH41, &
84  & ZSQH42, ZSQN21, ZSQN22, ZTO1, ZTO2, ZTTF11, &
85  & ZTTF12, ZUU11, ZUU12, ZUXY, ZVXY, ZX, ZXCH4, &
86  & ZXD, ZXN, ZXN2O, ZY, ZYCH4, ZYN2O, ZZ
87 REAL(KIND=JPRB) :: ZHOOK_HANDLE
88 
89 ! ------------------------------------------------------------------
90 
91 ! ------------
92 
93 ! ------------------------------------------------------------------
94 !DIR$ VFUNCTION SQRTHF
95 
96 !* 1. HORNER'S ALGORITHM FOR H2O AND CO2 TRANSMISSION
97 ! -----------------------------------------------
98 
99 IF (lhook) CALL dr_hook('LWTT',0,zhook_handle)
100 DO ja = 1 , 8
101  DO jl = kidia,kfdia
102  zz = sqrt(puu(jl,ja))
103  zxd = pgb( jl,ja,1) + zz* (pgb( jl,ja,2) + zz )
104  zxn = pga( jl,ja,1) + zz* (pga( jl,ja,2) )
105  ptt(jl,ja) = zxn / zxd
106  ENDDO
107 ENDDO
108 
109 DO jl = kidia,kfdia
110  ptt(jl,3)=max(ptt(jl,3),0.0_jprb)
111 ENDDO
112 ! ------------------------------------------------------------------
113 
114 !* 2. CONTINUUM, OZONE AND AEROSOL TRANSMISSION FUNCTIONS
115 ! ---------------------------------------------------
116 
117 DO jl = kidia,kfdia
118  ptt(jl, 9) = ptt(jl, 8)
119 
120 !- CONTINUUM ABSORPTION: E- AND P-TYPE (from Giorgetta and Wild, 1997)
121 
122  zpu10 = rptype(1) * puu(jl,10)
123  zpu11 = rptype(2) * puu(jl,10)
124  zpu12 = rptype(3) * puu(jl,10)
125  zpu13 = rptype(4) * puu(jl,10)
126  zeu10 = retype(1) * puu(jl,11)
127  zeu11 = retype(2) * puu(jl,11)
128  zeu12 = retype(3) * puu(jl,11)
129  zeu13 = retype(4) * puu(jl,11)
130 
131 !- OZONE ABSORPTION
132 
133  zx = puu(jl,12)
134  zy = puu(jl,13)
135  zuxy = 4._jprb * zx * zx / (rpialf0 * zy)
136  zsq1 = sqrt(1.0_jprb + ro1h * zuxy ) - 1.0_jprb
137  zsq2 = sqrt(1.0_jprb + ro2h * zuxy ) - 1.0_jprb
138  zvxy = rpialf0 * zy / (2.0_jprb * zx)
139  zaercn = puu(jl,17) + zeu12 + zpu12
140  zto1 = exp( - zvxy * zsq1 - zaercn )
141  zto2 = exp( - zvxy * zsq2 - zaercn )
142 
143 !-- TRACE GASES (CH4, N2O, CFC-11, CFC-12)
144 
145 !* CH4 IN INTERVAL 800-970 + 1110-1250 CM-1
146 
147  zxch4 = puu(jl,19)
148  zych4 = puu(jl,20)
149  zuxy = 4._jprb * zxch4*zxch4/(0.103_jprb*zych4)
150  zsqh41 = sqrt(1.0_jprb + 33.7_jprb * zuxy) - 1.0_jprb
151  zvxy = 0.103_jprb * zych4 / (2.0_jprb * zxch4)
152  zodh41 = zvxy * zsqh41
153 
154 !* N2O IN INTERVAL 800-970 + 1110-1250 CM-1
155 
156  zxn2o = puu(jl,21)
157  zyn2o = puu(jl,22)
158  zuxy = 4._jprb * zxn2o*zxn2o/(0.416_jprb*zyn2o)
159  zsqn21 = sqrt(1.0_jprb + 21.3_jprb * zuxy) - 1.0_jprb
160  zvxy = 0.416_jprb * zyn2o / (2.0_jprb * zxn2o)
161  zodn21 = zvxy * zsqn21
162 
163 !* CH4 IN INTERVAL 1250-1450 + 1880-2820 CM-1
164 
165  zuxy = 4._jprb * zxch4*zxch4/(0.113_jprb*zych4)
166  zsqh42 = sqrt(1.0_jprb + 400._jprb * zuxy) - 1.0_jprb
167  zvxy = 0.113_jprb * zych4 / (2.0_jprb * zxch4)
168  zodh42 = zvxy * zsqh42
169 
170 !* N2O IN INTERVAL 1250-1450 + 1880-2820 CM-1
171 
172  zuxy = 4._jprb * zxn2o*zxn2o/(0.197_jprb*zyn2o)
173  zsqn22 = sqrt(1.0_jprb + 2000._jprb * zuxy) - 1.0_jprb
174  zvxy = 0.197_jprb * zyn2o / (2.0_jprb * zxn2o)
175  zodn22 = zvxy * zsqn22
176 
177 !* CFC-11 IN INTERVAL 800-970 + 1110-1250 CM-1
178 
179  za11 = 2.0_jprb * puu(jl,23) * 4.404e+05_jprb
180  zttf11 = 1.0_jprb - za11 * 0.003225_jprb
181 
182 !* CFC-12 IN INTERVAL 800-970 + 1110-1250 CM-1
183 
184  za12 = 2.0_jprb * puu(jl,24) * 6.7435e+05_jprb
185  zttf12 = 1.0_jprb - za12 * 0.003225_jprb
186 
187  zuu11 = - puu(jl,15) - zeu10 - zpu10
188  zuu12 = - puu(jl,16) - zeu11 - zpu11 - zodh41 - zodn21
189  ptt(jl,10) = exp( - puu(jl,14) )
190  ptt(jl,11) = exp( zuu11 )
191  ptt(jl,12) = exp( zuu12 ) * zttf11 * zttf12
192  ptt(jl,13) = 0.7554_jprb * zto1 + 0.2446_jprb * zto2
193  ptt(jl,14) = ptt(jl,10) * exp( - zeu13 - zpu13 )
194  ptt(jl,15) = exp( - puu(jl,14) - zodh42 - zodn22 )
195 
196 ENDDO
197 
198 IF (lhook) CALL dr_hook('LWTT',1,zhook_handle)
199 END SUBROUTINE lwtt
Definition: yoelw.F90:1
integer(kind=jpim) nua
Definition: yoelw.F90:19
real(kind=jprb), dimension(4) retype
Definition: yoelw.F90:27
integer, parameter jprb
Definition: parkind1.F90:31
real(kind=jprb) rpialf0
Definition: yoelw.F90:32
real(kind=jprb), dimension(4) rptype
Definition: yoelw.F90:26
logical lhook
Definition: yomhook.F90:12
subroutine lwtt(KIDIA, KFDIA, KLON, PGA, PGB, PUU, PTT)
Definition: lwtt.F90:3
subroutine dr_hook(CDNAME, KSWITCH, PKEY)
Definition: yomhook.F90:17
real(kind=jprb) ro1h
Definition: yoelw.F90:29
integer, parameter jpim
Definition: parkind1.F90:13
integer(kind=jpim) ntra
Definition: yoelw.F90:18
real(kind=jprb) ro2h
Definition: yoelw.F90:30