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 )
69 REAL(KIND=8) PPSOL(
kdlon)
73 REAL(KIND=8) PRMU0(
kdlon)
74 REAL(KIND=8) PFRAC(
kdlon)
82 REAL(KIND=8) PALBD(
kdlon,2)
83 REAL(KIND=8) PALBP(
kdlon,2)
92 REAL(KIND=8) PALBPLA(
kdlon)
93 REAL(KIND=8) PTOPSW(
kdlon)
94 REAL(KIND=8) PSOLSW(
kdlon)
95 REAL(KIND=8) PTOPSW0(
kdlon)
96 REAL(KIND=8) PSOLSW0(
kdlon)
100 real,
parameter:: dobson_u = 2.1415e-05
105 REAL(KIND=8) ZAKI(
kdlon,2)
107 REAL(KIND=8) ZCLEAR(
kdlon)
109 REAL(KIND=8) ZFACT(
kdlon)
114 REAL(KIND=8) ZRMU(
kdlon)
115 REAL(KIND=8) ZSEC(
kdlon)
124 INTEGER inu, jl, jk, i, k, kpl1
129 INTEGER,
SAVE :: itapsw = 0
131 LOGICAL,
SAVE :: appel1er = .
true.
133 LOGICAL,
SAVE :: initialized = .
false.
137 REAL(KIND=8),
SAVE :: flag_aer
140 LOGICAL ok_ade, ok_aie
141 LOGICAL flag_aerosol_strat
148 REAL(KIND=8) PTOPSWADAERO(
kdlon)
149 REAL(KIND=8) PSOLSWADAERO(
kdlon)
150 REAL(KIND=8) PTOPSWAD0AERO(
kdlon)
151 REAL(KIND=8) PSOLSWAD0AERO(
kdlon)
152 REAL(KIND=8) PTOPSWAIAERO(
kdlon)
153 REAL(KIND=8) PSOLSWAIAERO(
kdlon)
154 REAL(KIND=8) PTOPSWAERO(
kdlon,9)
155 REAL(KIND=8) PTOPSW0AERO(
kdlon,9)
156 REAL(KIND=8) PSOLSWAERO(
kdlon,9)
157 REAL(KIND=8) PSOLSW0AERO(
kdlon,9)
158 REAL(KIND=8) PTOPSWCFAERO(
kdlon,3)
159 REAL(KIND=8) PSOLSWCFAERO(
kdlon,3)
162 REAL(KIND=8),
ALLOCATABLE,
SAVE :: ZFSUPAD_AERO(:,:)
164 REAL(KIND=8),
ALLOCATABLE,
SAVE :: ZFSDNAD_AERO(:,:)
167 REAL(KIND=8),
ALLOCATABLE,
SAVE :: ZFSUPAD0_AERO(:,:)
169 REAL(KIND=8),
ALLOCATABLE,
SAVE :: ZFSDNAD0_AERO(:,:)
171 REAL(KIND=8),
ALLOCATABLE,
SAVE :: ZFSUPAI_AERO(:,:)
173 REAL(KIND=8),
ALLOCATABLE,
SAVE :: ZFSDNAI_AERO(:,:)
175 REAL(KIND=8),
ALLOCATABLE,
SAVE :: ZFSUP_AERO(:,:,:)
177 REAL(KIND=8),
ALLOCATABLE,
SAVE :: ZFSDN_AERO(:,:,:)
179 REAL(KIND=8),
ALLOCATABLE,
SAVE :: ZFSUP0_AERO(:,:,:)
181 REAL(KIND=8),
ALLOCATABLE,
SAVE :: ZFSDN0_AERO(:,:,:)
189 LOGICAL,
SAVE :: AEROSOLFEEDBACK_ACTIVE = .
true.
192 CHARACTER (LEN=20) :: modname=
'sw_aeroAR4'
193 CHARACTER (LEN=80) :: abort_message
195 IF(.NOT.initialized)
THEN
227 zfsupad0_aero(:,:)=0.
228 zfsdnad0_aero(:,:)=0.
233 zfsup0_aero(:,:,:)=0.
234 zfsdn0_aero(:,:,:)=0.
238 WRITE(
lunout,*)
'SW calling frequency : ', swpas
239 WRITE(
lunout,*)
" In general, it should be 1"
243 IF (mod(itapsw,swpas).EQ.0)
THEN
248 zoz(jl,jk) = pozon(jl,jk)*46.6968/
rg &
249 *pdp(jl,jk)*(101325.0/ppsol(jl))
254 IF (
swaero_diag .or. .not. aerosolfeedback_active .OR. flag_aerosol .EQ. 0 )
THEN
259 prmu0,pfrac,ptave,pwv,&
260 zaki,zcld,zclear,zdsig,zfact,zrmu,zsec,zud)
263 tauaero(:,:,1,:), pizaero(:,:,1,:), cgaero(:,:,1,:),&
264 palbd, palbp, pcg, zcld, zclear, zcldsw0,&
265 zdsig, pomega, zoz, zrmu, zsec, ptau, zud,&
269 tauaero(:,:,1,:), pizaero(:,:,1,:), cgaero(:,:,1,:),&
270 zaki, palbd, palbp, pcg, zcld, zclear, zcldsw0,&
271 zdsig, pomega, zoz, zrmu, zsec, ptau, zud,&
276 zfsup0_aero(jl,jk,1) = (zfup(jl,jk) + zfu(jl,jk)) * zfact(jl)
277 zfsdn0_aero(jl,jk,1) = (zfdown(jl,jk) + zfd(jl,jk)) * zfact(jl)
283 IF (
swaero_diag .or. .not. aerosolfeedback_active .OR. flag_aerosol .EQ. 0 )
THEN
287 prmu0,pfrac,ptave,pwv,&
288 zaki,zcld,zclear,zdsig,zfact,zrmu,zsec,zud)
291 tauaero(:,:,1,:), pizaero(:,:,1,:), cgaero(:,:,1,:),&
292 palbd, palbp, pcg, zcld, zclear, pcldsw,&
293 zdsig, pomega, zoz, zrmu, zsec, ptau, zud,&
297 tauaero(:,:,1,:), pizaero(:,:,1,:), cgaero(:,:,1,:),&
298 zaki, palbd, palbp, pcg, zcld, zclear, pcldsw,&
299 zdsig, pomega, zoz, zrmu, zsec, ptau, zud,&
305 zfsup_aero(jl,jk,1) = (zfup(jl,jk) + zfu(jl,jk)) * zfact(jl)
306 zfsdn_aero(jl,jk,1) = (zfdown(jl,jk) + zfd(jl,jk)) * zfact(jl)
311 IF (flag_aerosol .GT. 0 .OR. flag_aerosol_strat)
THEN
319 prmu0,pfrac,ptave,pwv,&
320 zaki,zcld,zclear,zdsig,zfact,zrmu,zsec,zud)
323 tauaero(:,:,3,:), pizaero(:,:,3,:), cgaero(:,:,3,:),&
324 palbd, palbp, pcg, zcld, zclear, pcldsw,&
325 zdsig, pomega, zoz, zrmu, zsec, ptau, zud,&
329 tauaero(:,:,3,:), pizaero(:,:,3,:), cgaero(:,:,3,:),&
330 zaki, palbd, palbp, pcg, zcld, zclear, pcldsw,&
331 zdsig, pomega, zoz, zrmu, zsec, ptau, zud,&
337 zfsup0_aero(jl,jk,3) = (zfup(jl,jk) + zfu(jl,jk)) * zfact(jl)
338 zfsdn0_aero(jl,jk,3) = (zfdown(jl,jk) + zfd(jl,jk)) * zfact(jl)
349 prmu0,pfrac,ptave,pwv,&
350 zaki,zcld,zclear,zdsig,zfact,zrmu,zsec,zud)
353 tauaero(:,:,2,:), pizaero(:,:,2,:), cgaero(:,:,2,:),&
354 palbd, palbp, pcg, zcld, zclear, pcldsw,&
355 zdsig, pomega, zoz, zrmu, zsec, ptau, zud,&
359 tauaero(:,:,2,:), pizaero(:,:,2,:), cgaero(:,:,2,:),&
360 zaki, palbd, palbp, pcg, zcld, zclear, pcldsw,&
361 zdsig, pomega, zoz, zrmu, zsec, ptau, zud,&
367 zfsup0_aero(jl,jk,2) = (zfup(jl,jk) + zfu(jl,jk)) * zfact(jl)
368 zfsdn0_aero(jl,jk,2) = (zfdown(jl,jk) + zfd(jl,jk)) * zfact(jl)
378 prmu0,pfrac,ptave,pwv,&
379 zaki,zcld,zclear,zdsig,zfact,zrmu,zsec,zud)
382 tauaero(:,:,2,:), pizaero(:,:,2,:), cgaero(:,:,2,:),&
383 palbd, palbp, pcg, zcld, zclear, pcldsw,&
384 zdsig, pomega, zoz, zrmu, zsec, ptau, zud,&
388 tauaero(:,:,2,:), pizaero(:,:,2,:), cgaero(:,:,2,:),&
389 zaki, palbd, palbp, pcg, zcld, zclear, pcldsw,&
390 zdsig, pomega, zoz, zrmu, zsec, ptau, zud,&
396 zfsup_aero(jl,jk,2) = (zfup(jl,jk) + zfu(jl,jk)) * zfact(jl)
397 zfsdn_aero(jl,jk,2) = (zfdown(jl,jk) + zfd(jl,jk)) * zfact(jl)
403 IF ( .not. ok_ade .or. .not. ok_aie )
THEN
412 prmu0,pfrac,ptave,pwv,&
413 zaki,zcld,zclear,zdsig,zfact,zrmu,zsec,zud)
416 tauaero(:,:,3,:), pizaero(:,:,3,:), cgaero(:,:,3,:),&
417 palbd, palbp, pcg, zcld, zclear, pcldsw,&
418 zdsig, pomega, zoz, zrmu, zsec, ptau, zud,&
422 tauaero(:,:,3,:), pizaero(:,:,3,:), cgaero(:,:,3,:),&
423 zaki, palbd, palbp, pcg, zcld, zclear, pcldsw,&
424 zdsig, pomega, zoz, zrmu, zsec, ptau, zud,&
430 zfsup_aero(jl,jk,3) = (zfup(jl,jk) + zfu(jl,jk)) * zfact(jl)
431 zfsdn_aero(jl,jk,3) = (zfdown(jl,jk) + zfd(jl,jk)) * zfact(jl)
437 IF (ok_ade .and. ok_aie)
THEN
445 prmu0,pfrac,ptave,pwv,&
446 zaki,zcld,zclear,zdsig,zfact,zrmu,zsec,zud)
449 tauaero(:,:,2,:), pizaero(:,:,2,:), cgaero(:,:,2,:),&
450 palbd, palbp, pcg, zcld, zclear, pcldsw,&
451 zdsig, pomegaa, zoz, zrmu, zsec, ptaua, zud,&
455 tauaero(:,:,2,:), pizaero(:,:,2,:), cgaero(:,:,2,:),&
456 zaki, palbd, palbp, pcg, zcld, zclear, pcldsw,&
457 zdsig, pomegaa, zoz, zrmu, zsec, ptaua, zud,&
463 zfsup_aero(jl,jk,4) = (zfup(jl,jk) + zfu(jl,jk)) * zfact(jl)
464 zfsdn_aero(jl,jk,4) = (zfdown(jl,jk) + zfd(jl,jk)) * zfact(jl)
477 prmu0,pfrac,ptave,pwv,&
478 zaki,zcld,zclear,zdsig,zfact,zrmu,zsec,zud)
481 tauaero(:,:,3,:), pizaero(:,:,3,:), cgaero(:,:,3,:),&
482 palbd, palbp, pcg, zcld, zclear, pcldsw,&
483 zdsig, pomegaa, zoz, zrmu, zsec, ptaua, zud,&
487 tauaero(:,:,3,:), pizaero(:,:,3,:), cgaero(:,:,3,:),&
488 zaki, palbd, palbp, pcg, zcld, zclear, pcldsw,&
489 zdsig, pomegaa, zoz, zrmu, zsec, ptaua, zud,&
495 zfsup_aero(jl,jk,5) = (zfup(jl,jk) + zfu(jl,jk)) * zfact(jl)
496 zfsdn_aero(jl,jk,5) = (zfdown(jl,jk) + zfd(jl,jk)) * zfact(jl)
508 IF ( aerosolfeedback_active .AND. (flag_aerosol .GT. 0 .OR. flag_aerosol_strat) )
THEN
509 IF ( ok_ade .and. ok_aie )
THEN
510 zfsup(:,:) = zfsup_aero(:,:,4)
511 zfsdn(:,:) = zfsdn_aero(:,:,4)
512 zfsup0(:,:) = zfsup0_aero(:,:,2)
513 zfsdn0(:,:) = zfsdn0_aero(:,:,2)
516 IF ( ok_ade .and. (.not. ok_aie) )
THEN
517 zfsup(:,:) = zfsup_aero(:,:,2)
518 zfsdn(:,:) = zfsdn_aero(:,:,2)
519 zfsup0(:,:) = zfsup0_aero(:,:,2)
520 zfsdn0(:,:) = zfsdn0_aero(:,:,2)
523 IF ( (.not. ok_ade) .and. ok_aie )
THEN
524 zfsup(:,:) = zfsup_aero(:,:,5)
525 zfsdn(:,:) = zfsdn_aero(:,:,5)
526 zfsup0(:,:) = zfsup0_aero(:,:,3)
527 zfsdn0(:,:) = zfsdn0_aero(:,:,3)
530 IF ((.not. ok_ade) .and. (.not. ok_aie))
THEN
531 zfsup(:,:) = zfsup_aero(:,:,3)
532 zfsdn(:,:) = zfsdn_aero(:,:,3)
533 zfsup0(:,:) = zfsup0_aero(:,:,3)
534 zfsdn0(:,:) = zfsdn0_aero(:,:,3)
541 zfsup(:,:) = zfsup_aero(:,:,1)
542 zfsdn(:,:) = zfsdn_aero(:,:,1)
543 zfsup0(:,:) = zfsup0_aero(:,:,1)
544 zfsdn0(:,:) = zfsdn0_aero(:,:,1)
551 pheat(i,k) = -(zfsup(i,kpl1)-zfsup(i,k))-(zfsdn(i,k)-zfsdn(i,kpl1))
552 pheat(i,k) = pheat(i,k) * rday*
rg/rcpd / pdp(i,k)
553 pheat0(i,k) = -(zfsup0(i,kpl1)-zfsup0(i,k))-(zfsdn0(i,k)-zfsdn0(i,kpl1))
554 pheat0(i,k) = pheat0(i,k) * rday*
rg/rcpd / pdp(i,k)
560 palbpla(i) = zfsup(i,
kflev+1)/(zfsdn(i,
kflev+1)+1.0e-20)
563 psolsw0(i) = zfsdn0(i,1) - zfsup0(i,1)
564 ptopsw0(i) = zfsdn0(i,
kflev+1) - zfsup0(i,
kflev+1)
567 psolsw(i) = zfsdn(i,1) - zfsup(i,1)
568 ptopsw(i) = zfsdn(i,
kflev+1) - zfsup(i,
kflev+1)
579 psolswaero(i,1) = (zfsdn_aero(i,1,3) - zfsup_aero(i,1,3))-(zfsdn_aero(i,1,1) - zfsup_aero(i,1,1))
580 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))
583 psolsw0aero(i,1) = (zfsdn0_aero(i,1,3) - zfsup0_aero(i,1,3))-(zfsdn0_aero(i,1,1) - zfsup0_aero(i,1,1))
584 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))
589 psolswaero(i,2) = (zfsdn_aero(i,1,4) - zfsup_aero(i,1,4))-(zfsdn_aero(i,1,5) - zfsup_aero(i,1,5))
590 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))
595 psolswaero(i,2) = (zfsdn_aero(i,1,2) - zfsup_aero(i,1,2))-(zfsdn_aero(i,1,3) - zfsup_aero(i,1,3))
596 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))
601 psolsw0aero(i,2) = (zfsdn0_aero(i,1,2) - zfsup0_aero(i,1,2))-(zfsdn0_aero(i,1,3) - zfsup0_aero(i,1,3))
602 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))
605 psolswadaero(i) = psolswaero(i,2)
606 ptopswadaero(i) = ptopswaero(i,2)
607 psolswad0aero(i) = psolsw0aero(i,2)
608 ptopswad0aero(i) = ptopsw0aero(i,2)
614 psolswcfaero(i,1) = psolswaero(i,1) - psolsw0aero(i,1)
615 ptopswcfaero(i,1) = ptopswaero(i,1) - ptopsw0aero(i,1)
619 psolswcfaero(i,2) = psolswaero(i,2) - psolsw0aero(i,2)
620 ptopswcfaero(i,2) = ptopswaero(i,2) - ptopsw0aero(i,2)
624 psolswcfaero(i,3) = (zfsdn_aero(i,1,1) - zfsup_aero(i,1,1))-(zfsdn0_aero(i,1,1) - zfsup0_aero(i,1,1))
625 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))
631 psolswaiaero(i) = (zfsdn_aero(i,1,4) - zfsup_aero(i,1,4))-(zfsdn_aero(i,1,2) - zfsup_aero(i,1,2))
632 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))
634 psolswaiaero(i) = (zfsdn_aero(i,1,5) - zfsup_aero(i,1,5))-(zfsdn_aero(i,1,3) - zfsup_aero(i,1,3))
635 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))
logical, save swaero_diag
!$Id itapm1 ENDIF!IM on interpole les champs sur les niveaux STD de pression!IM a chaque pas de temps de la physique c!positionnement de l argument logique a false c!pour ne pas recalculer deux fois la meme chose!c!a cet effet un appel a plevel_new a ete deplace c!a la fin de la serie d appels c!la boucle DO nlevSTD a ete internalisee c!dans d ou la creation de cette routine c c!CALL false
subroutine swu_lmdar4(psct, pcldsw, ppmb, ppsol, prmu0, pfrac, ptave, pwv, paki, pcld, pclear, pdsig, pfact, prmu, psec, pud)
!$Header!integer nvarmx parameter(nfmx=10, imx=200, jmx=150, lmx=200, nvarmx=1000) real xd(imx
subroutine sw2s_lmdar4(knu, paer, flag_aer, tauae, pizae, cgae, paki, palbd, palbp, pcg, pcld, pclear, pcldsw, pdsig, pomega, poz, prmu, psec, ptau, pud, pwv, pqs, pfdown, pfup)
!$Id itapm1 ENDIF!IM on interpole les champs sur les niveaux STD de pression!IM a chaque pas de temps de la physique c!positionnement de l argument logique a false c!pour ne pas recalculer deux fois la meme chose!c!a cet effet un appel a plevel_new a ete deplace c!a la fin de la serie d appels c!la boucle DO nlevSTD a ete internalisee c!dans d ou la creation de cette routine c c!CALL ulevSTD CALL &zphi philevSTD CALL &zx_rh rhlevSTD!DO klev DO klon klev DO klon klev DO klon klev DO klon klev DO klon klev DO klon klev DO klon klev DO klon klev DO klon klev DO klon du jour ou toutes les read_climoz CALL true
INTERFACE SUBROUTINE RRTM_ECRT_140GP && paer
subroutine sw_aeroar4(PSCT, PRMU0, PFRAC, PPMB, PDP, PPSOL, PALBD, PALBP, PTAVE, PWV, PQS, POZON, PAER, PCLDSW, PTAU, POMEGA, PCG, PHEAT, PHEAT0, PALBPLA, PTOPSW, PSOLSW, PTOPSW0, PSOLSW0, ZFSUP, ZFSDN, ZFSUP0, ZFSDN0, tauaero, pizaero, cgaero, PTAUA, POMEGAA, PTOPSWADAERO, PSOLSWADAERO, PTOPSWAD0AERO, PSOLSWAD0AERO, PTOPSWAIAERO, PSOLSWAIAERO, PTOPSWAERO, PTOPSW0AERO, PSOLSWAERO, PSOLSW0AERO, PTOPSWCFAERO, PSOLSWCFAERO, ok_ade, ok_aie, flag_aerosol, flag_aerosol_strat)
integer, parameter naero_grp
!$Header!gestion des impressions de sorties et de débogage la sortie standard prt_level COMMON comprint lunout
subroutine sw1s_lmdar4(knu, paer, flag_aer, tauae, pizae, cgae, palbd, palbp, pcg, pcld, pclear, pcldsw, pdsig, pomega, poz, prmu, psec, ptau, pud, pfd, pfu)