11 cldfra, cldemi, cldtaupd,&
12 ok_ade, ok_aie, flag_aerosol,&
14 tau_aero, piz_aero, cg_aero,&
17 heat,heat0,cool,cool0,radsol,albpla,&
18 topsw,toplw,solsw,sollw,&
20 topsw0,toplw0,solsw0,sollw0,&
21 lwdn0, lwdn, lwup0, lwup,&
22 swdn0, swdn, swup0, swup,&
23 topswad_aero, solswad_aero,&
24 topswai_aero, solswai_aero, &
25 topswad0_aero, solswad0_aero,&
26 topsw_aero, topsw0_aero,&
27 solsw_aero, solsw0_aero, &
28 topswcf_aero, solswcf_aero)
36 USE chem_rep
, ONLY : solaireTIME, ok_SUNTIME, ndimozon
112 REAL,
INTENT(in) :: dist
113 REAL,
INTENT(in) :: rmu0(klon), fract(klon)
115 REAL,
INTENT(in) :: alb1(klon), alb2(klon),
tsol(klon)
116 REAL,
INTENT(in) :: t(klon,
klev),
q(klon,
klev)
118 REAL,
INTENT(in):: wo(:, :, :)
123 LOGICAL,
INTENT(in) :: ok_ade, ok_aie
124 INTEGER,
INTENT(in) :: flag_aerosol
125 LOGICAL,
INTENT(in) :: flag_aerosol_strat
126 REAL,
INTENT(in) :: cldfra(klon,
klev), cldemi(klon,
klev), cldtaupd(klon,
klev)
127 REAL,
INTENT(in) :: tau_aero(klon,
klev,9,2)
128 REAL,
INTENT(in) :: piz_aero(klon,
klev,9,2)
129 REAL,
INTENT(in) :: cg_aero(klon,
klev,9,2)
130 REAL,
INTENT(in) :: cldtaupi(klon,
klev)
131 LOGICAL,
INTENT(in) :: new_aod
132 REAL,
INTENT(in) :: qsat(klon,
klev)
133 REAL,
INTENT(in) :: flwc(klon,
klev)
134 REAL,
INTENT(in) :: fiwc(klon,
klev)
137 REAL,
INTENT(out) :: heat(klon,
klev), cool(klon,
klev)
138 REAL,
INTENT(out) :: heat0(klon,
klev), cool0(klon,
klev)
139 REAL,
INTENT(out) :: radsol(klon), topsw(klon), toplw(klon)
140 REAL,
INTENT(out) :: solsw(klon), sollw(klon), albpla(klon)
141 REAL,
INTENT(out) :: topsw0(klon), toplw0(klon), solsw0(klon), sollw0(klon)
142 REAL,
INTENT(out) :: sollwdown(klon)
143 REAL,
INTENT(out) :: swdn(klon,kflev+1),swdn0(klon,kflev+1)
144 REAL,
INTENT(out) :: swup(klon,kflev+1),swup0(klon,kflev+1)
145 REAL,
INTENT(out) :: lwdn(klon,kflev+1),lwdn0(klon,kflev+1)
146 REAL,
INTENT(out) :: lwup(klon,kflev+1),lwup0(klon,kflev+1)
147 REAL,
INTENT(out) :: topswad_aero(klon), solswad_aero(klon)
148 REAL,
INTENT(out) :: topswai_aero(klon), solswai_aero(klon)
149 REAL,
DIMENSION(klon),
INTENT(out) :: topswad0_aero
150 REAL,
DIMENSION(klon),
INTENT(out) :: solswad0_aero
151 REAL,
DIMENSION(kdlon,9),
INTENT(out) :: topsw_aero
152 REAL,
DIMENSION(kdlon,9),
INTENT(out) :: topsw0_aero
153 REAL,
DIMENSION(kdlon,9),
INTENT(out) :: solsw_aero
154 REAL,
DIMENSION(kdlon,9),
INTENT(out) :: solsw0_aero
155 REAL,
DIMENSION(kdlon,3),
INTENT(out) :: topswcf_aero
156 REAL,
DIMENSION(kdlon,3),
INTENT(out) :: solswcf_aero
159 REAL(KIND=8) zfsup(
kdlon,kflev+1)
160 REAL(KIND=8) zfsdn(
kdlon,kflev+1)
161 REAL(KIND=8) zfsup0(
kdlon,kflev+1)
162 REAL(KIND=8) zfsdn0(
kdlon,kflev+1)
163 REAL(KIND=8) zflup(
kdlon,kflev+1)
164 REAL(KIND=8) zfldn(
kdlon,kflev+1)
165 REAL(KIND=8) zflup0(
kdlon,kflev+1)
166 REAL(KIND=8) zfldn0(
kdlon,kflev+1)
167 REAL(KIND=8) zx_alpha1, zx_alpha2
168 INTEGER k, kk,
i,
j, iof, nb_gr
173 REAL(KIND=8) ptl(
kdlon,kflev+1), ppmb(
kdlon,kflev+1)
174 REAL(KIND=8) ptave(
kdlon,kflev)
175 REAL(KIND=8) pwv(
kdlon,kflev), pqs(
kdlon,kflev)
177 real(kind=8) pozon(
kdlon, kflev, size(wo, 3))
181 REAL(KIND=8) paer(
kdlon,kflev,5)
182 REAL(KIND=8) pcldld(
kdlon,kflev)
183 REAL(KIND=8) pcldlu(
kdlon,kflev)
184 REAL(KIND=8) pcldsw(
kdlon,kflev)
185 REAL(KIND=8) ptau(
kdlon,2,kflev)
186 REAL(KIND=8) pomega(
kdlon,2,kflev)
187 REAL(KIND=8) pcg(
kdlon,2,kflev)
188 REAL(KIND=8) zfract(
kdlon), zrmu0(
kdlon), zdist
189 REAL(KIND=8) zheat(
kdlon,kflev), zcool(
kdlon,kflev)
190 REAL(KIND=8) zheat0(
kdlon,kflev), zcool0(
kdlon,kflev)
193 REAL(KIND=8) zsollwdown(
kdlon)
196 REAL(KIND=8) zznormcp
197 REAL(KIND=8) tauaero(
kdlon,kflev,9,2)
198 REAL(KIND=8) pizaero(
kdlon,kflev,9,2)
199 REAL(KIND=8) cgaero(
kdlon,kflev,9,2)
200 REAL(KIND=8) ptaua(
kdlon,2,kflev)
201 REAL(KIND=8) pomegaa(
kdlon,2,kflev)
202 REAL(KIND=8) ztopswadaero(
kdlon), zsolswadaero(
kdlon)
203 REAL(KIND=8) ztopswad0aero(
kdlon), zsolswad0aero(
kdlon)
204 REAL(KIND=8) ztopswaiaero(
kdlon), zsolswaiaero(
kdlon)
205 REAL(KIND=8) ztopsw_aero(
kdlon,9), ztopsw0_aero(
kdlon,9)
206 REAL(KIND=8) zsolsw_aero(
kdlon,9), zsolsw0_aero(
kdlon,9)
207 REAL(KIND=8) ztopswcf_aero(
kdlon,3), zsolswcf_aero(
kdlon,3)
208 real,
parameter:: dobson_u = 2.1415e-05
210 call
assert(
size(wo, 1) == klon,
size(wo, 2) ==
klev,
"radlwsw wo")
219 IF (nb_gr*
kdlon .NE. klon)
THEN
220 print*,
"kdlon mauvais:", klon,
kdlon, nb_gr
223 IF (kflev .NE.
klev)
THEN
224 print*,
"kflev differe de KLEV, kflev, KLEV"
239 psct = solaire/zdist/zdist
241 IF (type_trac ==
'repr')
THEN
243 if(ok_suntime) psct = solairetime/zdist/zdist
244 print*,
'Constante solaire: ',psct*zdist*zdist
251 zfract(
i) = fract(iof+
i)
252 zrmu0(
i) = rmu0(iof+
i)
253 palbd(
i,1) = alb1(iof+
i)
254 palbd(
i,2) = alb2(iof+
i)
255 palbp(
i,1) = alb1(iof+
i)
256 palbp(
i,2) = alb2(iof+
i)
259 ppsol(
i) = paprs(iof+
i,1)
261 zx_alpha2 = 1.0 - zx_alpha1
262 ptl(
i,1) = t(iof+
i,1) * zx_alpha1 + t(iof+
i,2) * zx_alpha2
264 pdt0(
i) =
tsol(iof+
i) - ptl(
i,1)
268 ptl(
i,
k) = (t(iof+
i,
k)+t(iof+
i,
k-1))*0.5
273 pdp(
i,
k) = paprs(iof+
i,
k)-paprs(iof+
i,
k+1)
274 ptave(
i,
k) = t(iof+
i,
k)
275 pwv(
i,
k) = max(
q(iof+
i,
k), 1.0e-12)
277 pozon(
i,
k, :) = wo(iof+
i,
k, :) * rg * dobson_u * 1e3 &
278 / (paprs(iof+
i,
k) - paprs(iof+
i,
k+1))
279 pcldld(
i,
k) = cldfra(iof+
i,
k)*cldemi(iof+
i,
k)
280 pcldlu(
i,
k) = cldfra(iof+
i,
k)*cldemi(iof+
i,
k)
281 pcldsw(
i,
k) = cldfra(iof+
i,
k)
282 ptau(
i,1,
k) = max(cldtaupi(iof+
i,
k), 1.0e-05)
283 ptau(
i,2,
k) = max(cldtaupi(iof+
i,
k), 1.0e-05)
284 pomega(
i,1,
k) = 0.9999 - 5.0e-04 * exp(-0.5 * ptau(
i,1,
k))
285 pomega(
i,2,
k) = 0.9988 - 2.5e-03 * exp(-0.05 * ptau(
i,2,
k))
294 ptaua(
i,1,
k) = max(cldtaupd(iof+
i,
k), 1.0e-05)
295 ptaua(
i,2,
k) = max(cldtaupd(iof+
i,
k), 1.0e-05)
296 pomegaa(
i,1,
k) = 0.9999 - 5.0e-04 * exp(-0.5 * ptaua(
i,1,
k))
297 pomegaa(
i,2,
k) = 0.9988 - 2.5e-03 * exp(-0.05 * ptaua(
i,2,
k))
301 IF (type_trac ==
'repr')
THEN
303 ndimozon =
size(wo, 3)
304 CALL rad_interactif(pozon,iof)
311 ppmb(
i,
k) = paprs(iof+
i,
k)/100.0
318 paer(
i,
k,kk) = 1.0e-15
324 tauaero(
i,
k,:,1)=tau_aero(iof+
i,
k,:,1)
325 pizaero(
i,
k,:,1)=piz_aero(iof+
i,
k,:,1)
326 cgaero(
i,
k,:,1) =cg_aero(iof+
i,
k,:,1)
327 tauaero(
i,
k,:,2)=tau_aero(iof+
i,
k,:,2)
328 pizaero(
i,
k,:,2)=piz_aero(iof+
i,
k,:,2)
329 cgaero(
i,
k,:,2) =cg_aero(iof+
i,
k,:,2)
336 IF (iflag_rrtm == 0)
THEN
342 ptl, ptave, pwv, pozon(:, :, 1), paer,&
346 ztoplw,zsollw,ztoplw0,zsollw0,&
348 zflup, zfldn, zflup0,zfldn0)
351 IF (.NOT. new_aod)
THEN
355 ppsol, palbd, palbp,&
356 ptave, pwv, pqs, pozon(:, :,
size(wo, 3)), paer,&
357 pcldsw, ptau, pomega, pcg,&
359 zalbpla,ztopsw,zsolsw,ztopsw0,zsolsw0,&
360 zfsup,zfsdn,zfsup0,zfsdn0,&
361 tauaero(:,:,5,:), pizaero(:,:,5,:), cgaero(:,:,5,:),&
363 ztopswadaero,zsolswadaero,&
364 ztopswaiaero,zsolswaiaero,&
370 ppsol, palbd, palbp,&
371 ptave, pwv, pqs, pozon(:, :,
size(wo, 3)), paer,&
372 pcldsw, ptau, pomega, pcg,&
374 zalbpla,ztopsw,zsolsw,ztopsw0,zsolsw0,&
375 zfsup,zfsdn,zfsup0,zfsdn0,&
376 tauaero, pizaero, cgaero, &
378 ztopswadaero,zsolswadaero,&
379 ztopswad0aero,zsolswad0aero,&
380 ztopswaiaero,zsolswaiaero, &
381 ztopsw_aero,ztopsw0_aero,&
382 zsolsw_aero,zsolsw0_aero,&
383 ztopswcf_aero,zsolswcf_aero, &
384 ok_ade, ok_aie, flag_aerosol,flag_aerosol_strat)
389 WRITE(
lunout,*)
"Option iflag_rrtm=T ne fonctionne pas encore !!!"
390 CALL
abort_gcm(
'radlwsw',
'iflag_rrtm=T not valid',1)
396 radsol(iof+
i) = zsolsw(
i) + zsollw(
i)
397 topsw(iof+
i) = ztopsw(
i)
398 toplw(iof+
i) = ztoplw(
i)
399 solsw(iof+
i) = zsolsw(
i)
400 sollw(iof+
i) = zsollw(
i)
401 sollwdown(iof+
i) = zsollwdown(
i)
403 lwdn0( iof+
i,
k) = zfldn0(
i,
k)
404 lwdn( iof+
i,
k) = zfldn(
i,
k)
405 lwup0( iof+
i,
k) = zflup0(
i,
k)
406 lwup( iof+
i,
k) = zflup(
i,
k)
408 topsw0(iof+
i) = ztopsw0(
i)
409 toplw0(iof+
i) = ztoplw0(
i)
410 solsw0(iof+
i) = zsolsw0(
i)
411 sollw0(iof+
i) = zsollw0(
i)
412 albpla(iof+
i) = zalbpla(
i)
415 swdn0( iof+
i,
k) = zfsdn0(
i,
k)
416 swdn( iof+
i,
k) = zfsdn(
i,
k)
417 swup0( iof+
i,
k) = zfsup0(
i,
k)
418 swup( iof+
i,
k) = zfsup(
i,
k)
425 topswad_aero(iof+
i) = ztopswadaero(
i)
426 topswad0_aero(iof+
i) = ztopswad0aero(
i)
427 solswad_aero(iof+
i) = zsolswadaero(
i)
428 solswad0_aero(iof+
i) = zsolswad0aero(
i)
434 topsw_aero(iof+
i,:) = ztopsw_aero(
i,:)
435 topsw0_aero(iof+
i,:) = ztopsw0_aero(
i,:)
436 solsw_aero(iof+
i,:) = zsolsw_aero(
i,:)
437 solsw0_aero(iof+
i,:) = zsolsw0_aero(
i,:)
438 topswcf_aero(iof+
i,:) = ztopswcf_aero(
i,:)
439 solswcf_aero(iof+
i,:) = zsolswcf_aero(
i,:)
443 topswad_aero(iof+
i) = 0.0
444 solswad_aero(iof+
i) = 0.0
445 topswad0_aero(iof+
i) = 0.0
446 solswad0_aero(iof+
i) = 0.0
447 topsw_aero(iof+
i,:) = 0.
448 topsw0_aero(iof+
i,:) =0.
449 solsw_aero(iof+
i,:) = 0.
450 solsw0_aero(iof+
i,:) = 0.
455 topswai_aero(iof+
i) = ztopswaiaero(
i)
456 solswai_aero(iof+
i) = zsolswaiaero(
i)
460 topswai_aero(iof+
i) = 0.0
461 solswai_aero(iof+
i) = 0.0
468 zznormcp=1.0+rvtmp2*pwv(
i,
k)
469 heat(iof+
i,
k) = zheat(
i,
k)/zznormcp
470 cool(iof+
i,
k) = zcool(
i,
k)/zznormcp
471 heat0(iof+
i,
k) = zheat0(
i,
k)/zznormcp
472 cool0(iof+
i,
k) = zcool0(
i,
k)/zznormcp