7 ptave, pwv, pqs, pozon, paer,&
8 pcldsw, ptau, pomega, pcg,&
10 palbpla,ptopsw,psolsw,ptopsw0,psolsw0,&
11 zfsup,zfsdn,zfsup0,zfsdn0,&
12 tauaero, pizaero, cgaero,&
14 ptopswadaero,psolswadaero,&
15 ptopswad0aero,psolswad0aero,&
16 ptopswaiaero,psolswaiaero,&
17 ptopswaero,ptopsw0aero,&
18 psolswaero,psolsw0aero,&
19 ptopswcfaero,psolswcfaero,&
20 ok_ade, ok_aie, flag_aerosol, flag_aerosol_strat )
68 REAL(KIND=8) ppsol(
kdlon)
69 REAL(KIND=8) pdp(
kdlon,kflev)
70 REAL(KIND=8) ppmb(
kdlon,kflev+1)
72 REAL(KIND=8) prmu0(
kdlon)
73 REAL(KIND=8) pfrac(
kdlon)
75 REAL(KIND=8) ptave(
kdlon,kflev)
76 REAL(KIND=8) pwv(
kdlon,kflev)
77 REAL(KIND=8) pqs(
kdlon,kflev)
78 REAL(KIND=8) pozon(
kdlon,kflev)
79 REAL(KIND=8) paer(
kdlon,kflev,5)
81 REAL(KIND=8) palbd(
kdlon,2)
82 REAL(KIND=8) palbp(
kdlon,2)
84 REAL(KIND=8) pcldsw(
kdlon,kflev)
85 REAL(KIND=8) ptau(
kdlon,2,kflev)
86 REAL(KIND=8) pcg(
kdlon,2,kflev)
87 REAL(KIND=8) pomega(
kdlon,2,kflev)
89 REAL(KIND=8) pheat(
kdlon,kflev)
90 REAL(KIND=8) pheat0(
kdlon,kflev)
91 REAL(KIND=8) palbpla(
kdlon)
92 REAL(KIND=8) ptopsw(
kdlon)
93 REAL(KIND=8) psolsw(
kdlon)
94 REAL(KIND=8) ptopsw0(
kdlon)
95 REAL(KIND=8) psolsw0(
kdlon)
99 real,
parameter:: dobson_u = 2.1415e-05
101 REAL(KIND=8) zoz(
kdlon,kflev)
104 REAL(KIND=8) zaki(
kdlon,2)
105 REAL(KIND=8) zcld(
kdlon,kflev)
106 REAL(KIND=8) zclear(
kdlon)
107 REAL(KIND=8) zdsig(
kdlon,kflev)
108 REAL(KIND=8) zfact(
kdlon)
109 REAL(KIND=8) zfd(
kdlon,kflev+1)
110 REAL(KIND=8) zfdown(
kdlon,kflev+1)
111 REAL(KIND=8) zfu(
kdlon,kflev+1)
112 REAL(KIND=8) zfup(
kdlon,kflev+1)
113 REAL(KIND=8) zrmu(
kdlon)
114 REAL(KIND=8) zsec(
kdlon)
115 REAL(KIND=8) zud(
kdlon,5,kflev+1)
116 REAL(KIND=8) zcldsw0(
kdlon,kflev)
118 REAL(KIND=8) zfsup(
kdlon,kflev+1)
119 REAL(KIND=8) zfsdn(
kdlon,kflev+1)
120 REAL(KIND=8) zfsup0(
kdlon,kflev+1)
121 REAL(KIND=8) zfsdn0(
kdlon,kflev+1)
123 INTEGER inu, jl, jk,
i,
k, kpl1
128 INTEGER,
SAVE :: itapsw = 0
130 LOGICAL,
SAVE :: appel1er = .true.
132 LOGICAL,
SAVE :: initialized = .false.
136 REAL(KIND=8),
SAVE :: flag_aer
139 LOGICAL ok_ade, ok_aie
140 LOGICAL flag_aerosol_strat
142 REAL(KIND=8) tauaero(
kdlon,kflev,9,2)
143 REAL(KIND=8) pizaero(
kdlon,kflev,9,2)
144 REAL(KIND=8) cgaero(
kdlon,kflev,9,2)
145 REAL(KIND=8) ptaua(
kdlon,2,kflev)
146 REAL(KIND=8) pomegaa(
kdlon,2,kflev)
147 REAL(KIND=8) ptopswadaero(
kdlon)
148 REAL(KIND=8) psolswadaero(
kdlon)
149 REAL(KIND=8) ptopswad0aero(
kdlon)
150 REAL(KIND=8) psolswad0aero(
kdlon)
151 REAL(KIND=8) ptopswaiaero(
kdlon)
152 REAL(KIND=8) psolswaiaero(
kdlon)
153 REAL(KIND=8) ptopswaero(
kdlon,9)
154 REAL(KIND=8) ptopsw0aero(
kdlon,9)
155 REAL(KIND=8) psolswaero(
kdlon,9)
156 REAL(KIND=8) psolsw0aero(
kdlon,9)
157 REAL(KIND=8) ptopswcfaero(
kdlon,3)
158 REAL(KIND=8) psolswcfaero(
kdlon,3)
161 REAL(KIND=8),
ALLOCATABLE,
SAVE :: zfsupad_aero(:,:)
163 REAL(KIND=8),
ALLOCATABLE,
SAVE :: zfsdnad_aero(:,:)
166 REAL(KIND=8),
ALLOCATABLE,
SAVE :: zfsupad0_aero(:,:)
168 REAL(KIND=8),
ALLOCATABLE,
SAVE :: zfsdnad0_aero(:,:)
170 REAL(KIND=8),
ALLOCATABLE,
SAVE :: zfsupai_aero(:,:)
172 REAL(KIND=8),
ALLOCATABLE,
SAVE :: zfsdnai_aero(:,:)
174 REAL(KIND=8),
ALLOCATABLE,
SAVE :: zfsup_aero(:,:,:)
176 REAL(KIND=8),
ALLOCATABLE,
SAVE :: zfsdn_aero(:,:,:)
178 REAL(KIND=8),
ALLOCATABLE,
SAVE :: zfsup0_aero(:,:,:)
180 REAL(KIND=8),
ALLOCATABLE,
SAVE :: zfsdn0_aero(:,:,:)
188 LOGICAL,
SAVE :: aerosolfeedback_active = .true.
191 CHARACTER (LEN=20) :: modname=
'sw_aeroAR4'
192 CHARACTER (LEN=80) :: abort_message
194 IF(.NOT.initialized)
THEN
197 ALLOCATE(zfsupad_aero(
kdlon,kflev+1))
198 ALLOCATE(zfsdnad_aero(
kdlon,kflev+1))
199 ALLOCATE(zfsupad0_aero(
kdlon,kflev+1))
200 ALLOCATE(zfsdnad0_aero(
kdlon,kflev+1))
201 ALLOCATE(zfsupai_aero(
kdlon,kflev+1))
202 ALLOCATE(zfsdnai_aero(
kdlon,kflev+1))
219 ALLOCATE(zfsup_aero(
kdlon,kflev+1,5))
220 ALLOCATE(zfsdn_aero(
kdlon,kflev+1,5))
221 ALLOCATE(zfsup0_aero(
kdlon,kflev+1,3))
222 ALLOCATE(zfsdn0_aero(
kdlon,kflev+1,3))
226 zfsupad0_aero(:,:)=0.
227 zfsdnad0_aero(:,:)=0.
232 zfsup0_aero(:,:,:)=0.
233 zfsdn0_aero(:,:,:)=0.
237 WRITE(
lunout,*)
'SW calling frequency : ', swpas
238 WRITE(
lunout,*)
" In general, it should be 1"
242 IF (mod(itapsw,swpas).EQ.0)
THEN
247 zoz(jl,jk) = pozon(jl,jk)*46.6968/rg &
248 *pdp(jl,jk)*(101325.0/ppsol(jl))
253 IF ( swaero_diag .or. .not. aerosolfeedback_active .OR. flag_aerosol .EQ. 0 )
THEN
258 prmu0,pfrac,ptave,pwv,&
259 zaki,zcld,zclear,zdsig,zfact,zrmu,zsec,zud)
262 tauaero(:,:,1,:), pizaero(:,:,1,:), cgaero(:,:,1,:),&
263 palbd, palbp, pcg, zcld, zclear, zcldsw0,&
264 zdsig, pomega, zoz, zrmu, zsec, ptau, zud,&
268 tauaero(:,:,1,:), pizaero(:,:,1,:), cgaero(:,:,1,:),&
269 zaki, palbd, palbp, pcg, zcld, zclear, zcldsw0,&
270 zdsig, pomega, zoz, zrmu, zsec, ptau, zud,&
275 zfsup0_aero(jl,jk,1) = (zfup(jl,jk) + zfu(jl,jk)) * zfact(jl)
276 zfsdn0_aero(jl,jk,1) = (zfdown(jl,jk) + zfd(jl,jk)) * zfact(jl)
282 IF ( swaero_diag .or. .not. aerosolfeedback_active .OR. flag_aerosol .EQ. 0 )
THEN
286 prmu0,pfrac,ptave,pwv,&
287 zaki,zcld,zclear,zdsig,zfact,zrmu,zsec,zud)
290 tauaero(:,:,1,:), pizaero(:,:,1,:), cgaero(:,:,1,:),&
291 palbd, palbp, pcg, zcld, zclear, pcldsw,&
292 zdsig, pomega, zoz, zrmu, zsec, ptau, zud,&
296 tauaero(:,:,1,:), pizaero(:,:,1,:), cgaero(:,:,1,:),&
297 zaki, palbd, palbp, pcg, zcld, zclear, pcldsw,&
298 zdsig, pomega, zoz, zrmu, zsec, ptau, zud,&
304 zfsup_aero(jl,jk,1) = (zfup(jl,jk) + zfu(jl,jk)) * zfact(jl)
305 zfsdn_aero(jl,jk,1) = (zfdown(jl,jk) + zfd(jl,jk)) * zfact(jl)
310 IF (flag_aerosol .GT. 0 .OR. flag_aerosol_strat)
THEN
312 IF (ok_ade.and.swaero_diag .or. .not. ok_ade)
THEN
318 prmu0,pfrac,ptave,pwv,&
319 zaki,zcld,zclear,zdsig,zfact,zrmu,zsec,zud)
322 tauaero(:,:,3,:), pizaero(:,:,3,:), cgaero(:,:,3,:),&
323 palbd, palbp, pcg, zcld, zclear, pcldsw,&
324 zdsig, pomega, zoz, zrmu, zsec, ptau, zud,&
328 tauaero(:,:,3,:), pizaero(:,:,3,:), cgaero(:,:,3,:),&
329 zaki, palbd, palbp, pcg, zcld, zclear, pcldsw,&
330 zdsig, pomega, zoz, zrmu, zsec, ptau, zud,&
336 zfsup0_aero(jl,jk,3) = (zfup(jl,jk) + zfu(jl,jk)) * zfact(jl)
337 zfsdn0_aero(jl,jk,3) = (zfdown(jl,jk) + zfd(jl,jk)) * zfact(jl)
348 prmu0,pfrac,ptave,pwv,&
349 zaki,zcld,zclear,zdsig,zfact,zrmu,zsec,zud)
352 tauaero(:,:,2,:), pizaero(:,:,2,:), cgaero(:,:,2,:),&
353 palbd, palbp, pcg, zcld, zclear, pcldsw,&
354 zdsig, pomega, zoz, zrmu, zsec, ptau, zud,&
358 tauaero(:,:,2,:), pizaero(:,:,2,:), cgaero(:,:,2,:),&
359 zaki, palbd, palbp, pcg, zcld, zclear, pcldsw,&
360 zdsig, pomega, zoz, zrmu, zsec, ptau, zud,&
366 zfsup0_aero(jl,jk,2) = (zfup(jl,jk) + zfu(jl,jk)) * zfact(jl)
367 zfsdn0_aero(jl,jk,2) = (zfdown(jl,jk) + zfd(jl,jk)) * zfact(jl)
377 prmu0,pfrac,ptave,pwv,&
378 zaki,zcld,zclear,zdsig,zfact,zrmu,zsec,zud)
381 tauaero(:,:,2,:), pizaero(:,:,2,:), cgaero(:,:,2,:),&
382 palbd, palbp, pcg, zcld, zclear, pcldsw,&
383 zdsig, pomega, zoz, zrmu, zsec, ptau, zud,&
387 tauaero(:,:,2,:), pizaero(:,:,2,:), cgaero(:,:,2,:),&
388 zaki, palbd, palbp, pcg, zcld, zclear, pcldsw,&
389 zdsig, pomega, zoz, zrmu, zsec, ptau, zud,&
395 zfsup_aero(jl,jk,2) = (zfup(jl,jk) + zfu(jl,jk)) * zfact(jl)
396 zfsdn_aero(jl,jk,2) = (zfdown(jl,jk) + zfd(jl,jk)) * zfact(jl)
402 IF ( .not. ok_ade .or. .not. ok_aie )
THEN
411 prmu0,pfrac,ptave,pwv,&
412 zaki,zcld,zclear,zdsig,zfact,zrmu,zsec,zud)
415 tauaero(:,:,3,:), pizaero(:,:,3,:), cgaero(:,:,3,:),&
416 palbd, palbp, pcg, zcld, zclear, pcldsw,&
417 zdsig, pomega, zoz, zrmu, zsec, ptau, zud,&
421 tauaero(:,:,3,:), pizaero(:,:,3,:), cgaero(:,:,3,:),&
422 zaki, palbd, palbp, pcg, zcld, zclear, pcldsw,&
423 zdsig, pomega, zoz, zrmu, zsec, ptau, zud,&
429 zfsup_aero(jl,jk,3) = (zfup(jl,jk) + zfu(jl,jk)) * zfact(jl)
430 zfsdn_aero(jl,jk,3) = (zfdown(jl,jk) + zfd(jl,jk)) * zfact(jl)
436 IF (ok_ade .and. ok_aie)
THEN
444 prmu0,pfrac,ptave,pwv,&
445 zaki,zcld,zclear,zdsig,zfact,zrmu,zsec,zud)
448 tauaero(:,:,2,:), pizaero(:,:,2,:), cgaero(:,:,2,:),&
449 palbd, palbp, pcg, zcld, zclear, pcldsw,&
450 zdsig, pomegaa, zoz, zrmu, zsec, ptaua, zud,&
454 tauaero(:,:,2,:), pizaero(:,:,2,:), cgaero(:,:,2,:),&
455 zaki, palbd, palbp, pcg, zcld, zclear, pcldsw,&
456 zdsig, pomegaa, zoz, zrmu, zsec, ptaua, zud,&
462 zfsup_aero(jl,jk,4) = (zfup(jl,jk) + zfu(jl,jk)) * zfact(jl)
463 zfsdn_aero(jl,jk,4) = (zfdown(jl,jk) + zfd(jl,jk)) * zfact(jl)
476 prmu0,pfrac,ptave,pwv,&
477 zaki,zcld,zclear,zdsig,zfact,zrmu,zsec,zud)
480 tauaero(:,:,3,:), pizaero(:,:,3,:), cgaero(:,:,3,:),&
481 palbd, palbp, pcg, zcld, zclear, pcldsw,&
482 zdsig, pomegaa, zoz, zrmu, zsec, ptaua, zud,&
486 tauaero(:,:,3,:), pizaero(:,:,3,:), cgaero(:,:,3,:),&
487 zaki, palbd, palbp, pcg, zcld, zclear, pcldsw,&
488 zdsig, pomegaa, zoz, zrmu, zsec, ptaua, zud,&
494 zfsup_aero(jl,jk,5) = (zfup(jl,jk) + zfu(jl,jk)) * zfact(jl)
495 zfsdn_aero(jl,jk,5) = (zfdown(jl,jk) + zfd(jl,jk)) * zfact(jl)
507 IF ( aerosolfeedback_active .AND. (flag_aerosol .GT. 0 .OR. flag_aerosol_strat) )
THEN
508 IF ( ok_ade .and. ok_aie )
THEN
509 zfsup(:,:) = zfsup_aero(:,:,4)
510 zfsdn(:,:) = zfsdn_aero(:,:,4)
511 zfsup0(:,:) = zfsup0_aero(:,:,2)
512 zfsdn0(:,:) = zfsdn0_aero(:,:,2)
515 IF ( ok_ade .and. (.not. ok_aie) )
THEN
516 zfsup(:,:) = zfsup_aero(:,:,2)
517 zfsdn(:,:) = zfsdn_aero(:,:,2)
518 zfsup0(:,:) = zfsup0_aero(:,:,2)
519 zfsdn0(:,:) = zfsdn0_aero(:,:,2)
522 IF ( (.not. ok_ade) .and. ok_aie )
THEN
523 zfsup(:,:) = zfsup_aero(:,:,5)
524 zfsdn(:,:) = zfsdn_aero(:,:,5)
525 zfsup0(:,:) = zfsup0_aero(:,:,3)
526 zfsdn0(:,:) = zfsdn0_aero(:,:,3)
529 IF ((.not. ok_ade) .and. (.not. ok_aie))
THEN
530 zfsup(:,:) = zfsup_aero(:,:,3)
531 zfsdn(:,:) = zfsdn_aero(:,:,3)
532 zfsup0(:,:) = zfsup0_aero(:,:,3)
533 zfsdn0(:,:) = zfsdn0_aero(:,:,3)
540 zfsup(:,:) = zfsup_aero(:,:,1)
541 zfsdn(:,:) = zfsdn_aero(:,:,1)
542 zfsup0(:,:) = zfsup0_aero(:,:,1)
543 zfsdn0(:,:) = zfsdn0_aero(:,:,1)
550 pheat(
i,
k) = -(zfsup(
i,kpl1)-zfsup(
i,
k))-(zfsdn(
i,
k)-zfsdn(
i,kpl1))
551 pheat(
i,
k) = pheat(
i,
k) * rday*rg/rcpd / pdp(
i,
k)
552 pheat0(
i,
k) = -(zfsup0(
i,kpl1)-zfsup0(
i,
k))-(zfsdn0(
i,
k)-zfsdn0(
i,kpl1))
553 pheat0(
i,
k) = pheat0(
i,
k) * rday*rg/rcpd / pdp(
i,
k)
559 palbpla(
i) = zfsup(
i,kflev+1)/(zfsdn(
i,kflev+1)+1.0e-20)
562 psolsw0(
i) = zfsdn0(
i,1) - zfsup0(
i,1)
563 ptopsw0(
i) = zfsdn0(
i,kflev+1) - zfsup0(
i,kflev+1)
566 psolsw(
i) = zfsdn(
i,1) - zfsup(
i,1)
567 ptopsw(
i) = zfsdn(
i,kflev+1) - zfsup(
i,kflev+1)
578 psolswaero(
i,1) = (zfsdn_aero(
i,1,3) - zfsup_aero(
i,1,3))-(zfsdn_aero(
i,1,1) - zfsup_aero(
i,1,1))
579 ptopswaero(
i,1) = (zfsdn_aero(
i,kflev+1,3) - zfsup_aero(
i,kflev+1,3))- (zfsdn_aero(
i,kflev+1,1) - zfsup_aero(
i,kflev+1,1))
582 psolsw0aero(
i,1) = (zfsdn0_aero(
i,1,3) - zfsup0_aero(
i,1,3))-(zfsdn0_aero(
i,1,1) - zfsup0_aero(
i,1,1))
583 ptopsw0aero(
i,1) = (zfsdn0_aero(
i,kflev+1,3) - zfsup0_aero(
i,kflev+1,3))-(zfsdn0_aero(
i,kflev+1,1) - zfsup0_aero(
i,kflev+1,1))
588 psolswaero(
i,2) = (zfsdn_aero(
i,1,4) - zfsup_aero(
i,1,4))-(zfsdn_aero(
i,1,5) - zfsup_aero(
i,1,5))
589 ptopswaero(
i,2) = (zfsdn_aero(
i,kflev+1,4) - zfsup_aero(
i,kflev+1,4))- (zfsdn_aero(
i,kflev+1,5) - zfsup_aero(
i,kflev+1,5))
594 psolswaero(
i,2) = (zfsdn_aero(
i,1,2) - zfsup_aero(
i,1,2))-(zfsdn_aero(
i,1,3) - zfsup_aero(
i,1,3))
595 ptopswaero(
i,2) = (zfsdn_aero(
i,kflev+1,2) - zfsup_aero(
i,kflev+1,2))- (zfsdn_aero(
i,kflev+1,3) - zfsup_aero(
i,kflev+1,3))
600 psolsw0aero(
i,2) = (zfsdn0_aero(
i,1,2) - zfsup0_aero(
i,1,2))-(zfsdn0_aero(
i,1,3) - zfsup0_aero(
i,1,3))
601 ptopsw0aero(
i,2) = (zfsdn0_aero(
i,kflev+1,2) - zfsup0_aero(
i,kflev+1,2))-(zfsdn0_aero(
i,kflev+1,3) - zfsup0_aero(
i,kflev+1,3))
604 psolswadaero(
i) = psolswaero(
i,2)
605 ptopswadaero(
i) = ptopswaero(
i,2)
606 psolswad0aero(
i) = psolsw0aero(
i,2)
607 ptopswad0aero(
i) = ptopsw0aero(
i,2)
613 psolswcfaero(
i,1) = psolswaero(
i,1) - psolsw0aero(
i,1)
614 ptopswcfaero(
i,1) = ptopswaero(
i,1) - ptopsw0aero(
i,1)
618 psolswcfaero(
i,2) = psolswaero(
i,2) - psolsw0aero(
i,2)
619 ptopswcfaero(
i,2) = ptopswaero(
i,2) - ptopsw0aero(
i,2)
623 psolswcfaero(
i,3) = (zfsdn_aero(
i,1,1) - zfsup_aero(
i,1,1))-(zfsdn0_aero(
i,1,1) - zfsup0_aero(
i,1,1))
624 ptopswcfaero(
i,3) = (zfsdn_aero(
i,kflev+1,1) - zfsup_aero(
i,kflev+1,1))- (zfsdn0_aero(
i,kflev+1,1) - zfsup0_aero(
i,kflev+1,1))
630 psolswaiaero(
i) = (zfsdn_aero(
i,1,4) - zfsup_aero(
i,1,4))-(zfsdn_aero(
i,1,2) - zfsup_aero(
i,1,2))
631 ptopswaiaero(
i) = (zfsdn_aero(
i,kflev+1,4) - zfsup_aero(
i,kflev+1,4))-(zfsdn_aero(
i,kflev+1,2) - zfsup_aero(
i,kflev+1,2))
633 psolswaiaero(
i) = (zfsdn_aero(
i,1,5) - zfsup_aero(
i,1,5))-(zfsdn_aero(
i,1,3) - zfsup_aero(
i,1,3))
634 ptopswaiaero(
i) = (zfsdn_aero(
i,kflev+1,5) - zfsup_aero(
i,kflev+1,5))-(zfsdn_aero(
i,kflev+1,3) - zfsup_aero(
i,kflev+1,3))