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)