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 ! EXPLICIT ARGUMENTS :
17 ! --------------------
18 ! ==== INPUTS ===
19 ! PGA, PGB ; PADE APPROXIMANTS
20 ! PUU1 : (KLON,NUA) ; ABSORBER AMOUNTS FROM TOP TO LEVEL 1
21 ! PUU2 : (KLON,NUA) ; ABSORBER AMOUNTS FROM TOP TO LEVEL 2
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 ! 97-04-18 JJ Morcrette Revised continuum
56 ! M.Hamrud 01-Oct-2003 CY28 Cleaning
57 
58 !-----------------------------------------------------------------------
59 
60 USE parkind1 ,ONLY : jpim ,jprb
61 USE yomhook ,ONLY : lhook, dr_hook
62 
63 USE yoelw , ONLY : ntra ,nua ,rptype ,retype ,&
64  & ro1h ,ro2h ,rpialf0
65 
66 IMPLICIT NONE
67 
68 INTEGER(KIND=JPIM),INTENT(IN) :: KLON
69 INTEGER(KIND=JPIM),INTENT(IN) :: KIDIA
70 INTEGER(KIND=JPIM),INTENT(IN) :: KFDIA
71 REAL(KIND=JPRB) ,INTENT(IN) :: PGA(klon,8,2)
72 REAL(KIND=JPRB) ,INTENT(IN) :: PGB(klon,8,2)
73 REAL(KIND=JPRB) ,INTENT(IN) :: PUU1(klon,nua)
74 REAL(KIND=JPRB) ,INTENT(IN) :: PUU2(klon,nua)
75 REAL(KIND=JPRB) ,INTENT(OUT) :: PTT(klon,ntra)
76 ! ------------------------------------------------------------------
77 
78 !* 0.1 ARGUMENTS
79 ! ---------
80 
81 INTEGER(KIND=JPIM) :: JA, JL
82 
83 REAL(KIND=JPRB) :: ZA11, ZA12, ZAERCN, ZEU, ZEU10, ZEU11, ZEU12,&
84  & ZEU13, ZODH41, ZODH42, ZODN21, ZODN22, ZPU, &
85  & ZPU10, ZPU11, ZPU12, ZPU13, ZSQ1, ZSQ2, ZSQH41, &
86  & ZSQH42, ZSQN21, ZSQN22, ZTO1, ZTO2, ZTTF11, &
87  & ZTTF12, ZUU11, ZUU12, ZUXY, ZVXY, ZX, ZXCH4, &
88  & ZXD, ZXN, ZXN2O, ZY, ZYCH4, ZYN2O, ZZ
89 REAL(KIND=JPRB) :: ZHOOK_HANDLE
90 
91 ! ------------------------------------------------------------------
92 !DIR$ VFUNCTION SQRTHF
93 
94 !* 1. HORNER'S ALGORITHM FOR H2O AND CO2 TRANSMISSION
95 ! -----------------------------------------------
96 
97 IF (lhook) CALL dr_hook('LWTTM',0,zhook_handle)
98 DO ja = 1 , 8
99  DO jl = kidia,kfdia
100  zz = sqrt(puu1(jl,ja) - puu2(jl,ja))
101  zxd = pgb( jl,ja,1) + zz * (pgb( jl,ja,2) + zz )
102  zxn = pga( jl,ja,1) + zz * (pga( jl,ja,2) )
103  ptt(jl,ja) = zxn / zxd
104  ENDDO
105 ENDDO
106 
107 DO jl = kidia,kfdia
108  ptt(jl,3)=max(ptt(jl,3),0.0_jprb)
109 ENDDO
110 ! ------------------------------------------------------------------
111 
112 !* 2. CONTINUUM, OZONE AND AEROSOL TRANSMISSION FUNCTIONS
113 ! ---------------------------------------------------
114 
115 DO jl = kidia,kfdia
116  ptt(jl, 9) = ptt(jl, 8)
117 
118 !- CONTINUUM ABSORPTION: E- AND P-TYPE
119 
120  zpu = (puu1(jl,10) - puu2(jl,10))
121  zpu10 = rptype(1) * zpu
122  zpu11 = rptype(2) * zpu
123  zpu12 = rptype(3) * zpu
124  zpu13 = rptype(4) * zpu
125  zeu = (puu1(jl,11) - puu2(jl,11))
126  zeu10 = retype(1) * zeu
127  zeu11 = retype(2) * zeu
128  zeu12 = retype(3) * zeu
129  zeu13 = retype(4) * zeu
130 
131 !- OZONE ABSORPTION
132 
133  zx = (puu1(jl,12) - puu2(jl,12))
134  zy = (puu1(jl,13) - puu2(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 = (puu1(jl,17) -puu2(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 = (puu1(jl,19) - puu2(jl,19))
148  zych4 = (puu1(jl,20) - puu2(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 = (puu1(jl,21) - puu2(jl,21))
157  zyn2o = (puu1(jl,22) - puu2(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 = (puu1(jl,23) - puu2(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 = (puu1(jl,24) - puu2(jl,24)) * 6.7435e+05_jprb
185  zttf12 = 1.0_jprb - za12 * 0.003225_jprb
186 
187  zuu11 = - (puu1(jl,15) - puu2(jl,15)) - zeu10 - zpu10
188  zuu12 = - (puu1(jl,16) - puu2(jl,16)) - zeu11 - zpu11 -zodh41 - zodn21
189  ptt(jl,10) = exp( - (puu1(jl,14)- puu2(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( - (puu1(jl,14) - puu2(jl,14)) - zodh42-zodn22 )
195 
196 ENDDO
197 
198 IF (lhook) CALL dr_hook('LWTTM',1,zhook_handle)
199 END SUBROUTINE lwttm
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 dr_hook(CDNAME, KSWITCH, PKEY)
Definition: yomhook.F90:17
real(kind=jprb) ro1h
Definition: yoelw.F90:29
subroutine lwttm(KIDIA, KFDIA, KLON, PGA, PGB, PUU1, PUU2, PTT)
Definition: lwttm.F90:3
integer, parameter jpim
Definition: parkind1.F90:13
integer(kind=jpim) ntra
Definition: yoelw.F90:18
real(kind=jprb) ro2h
Definition: yoelw.F90:30