*=*=*=*= lwdiff.html =*=*=*=*
subroutine lwdiff

subroutine lwdiff


      subroutine lwdiff (kdlon,kflev,pabcuaer,pbsur,pbtop,pdbsl
     .                ,pemis,pfluc)

      IMPLICIT LOGICAL (L)

#include "dimensions.h"
#include "dimphys.h"
#include "dimradmars.h"
#include "callkeys.h"

#include "yomcst.h"
#include "yomrad.h"
#include "yomaer.h"
#include "yomlw.h"
#include "yomsw.h"
#include "yomrdu.h"
C-----------------------------------------------------------------------
C
c! modif diffusion
c! 1)
c! la bande a 15 micron (CO2) reste inchangee : les poussieres
c! n'interviennent que comme un milieu gris non diffusif avec
c!                      Q=Qext*(1-Omega)
c! cette bande est decoupee en deux sous bandes (indices 1 et 2)
c! pour lesquelles les parametres optiques des poussieres sont
c! identiques
c! 2)
c! le reste est decoupe en 4 bandes : une bande qui recouvre toutes
c! les longueurs d'onde inferieures a celles de la bande a 15 microns
c! (indice 3) et trois bandes pour les grandes longueurs d'onde
c! (indices 4,5 et 6). sue chacune de ces 4 bandes, les poussieres
c! sont supposees diffusantes grises.
c!
C
C-----------------------------------------------------------------------
C
C
C-----------------------------------------------------------------------
C
C*       0.1   ARGUMENTS
C              ---------
C

      REAL PABCUAER(NDLO2,NIR,KFLEV+1)
     S  ,  PBSUR(NDLO2,nir), PBTOP(NDLO2,nir)
     S  ,  PDBSL(NDLO2,nir,KFLEV*2), PEMIS(NDLO2)

      real PFLUC(NDLO2,2,KFLEV+1)
C
C
C-------------------------------------------------------------------------
C
C*       0.2   LOCAL ARRAYS
C              ------------
C
      INTEGER ITX(NDLON)
C
      REAL ZADJD(NDLON,NFLEV+1), ZADJU(NDLON,NFLEV+1)
     S  ,  ZDBDT(NDLON,nir,NFLEV)
     S  ,  ZDISD(NDLON,NFLEV+1), ZDISU(NDLON,NFLEV+1)
     S  ,  ZFD(NDLON), ZFDN(NDLON,NFLEV+1), ZFU(NDLON)
     S  ,  ZFUP(NDLON,NFLEV+1),ZGLAYD(NDLON),ZGLAYU(NDLON)
     S  ,  ZOMEGADD(NDLON,NFLEV*2),ZGDD(NDLON,NFLEV*2)
     S  ,  ZTAUDD(NDLON,NFLEV*2)
     S  ,  ZBHDD(NDLON,NFLEV*2+1),ZBSDD(NDLON)
     S  ,  ZZBHDD(NDLON,NFLEV*2+1),ZZBSDD(NDLON)
     S  ,  ZFAHDD(NDLON,NFLEV*2+1),ZFDHDD(NDLON,NFLEV*2+1)
     S  ,  ZZFAHDD(NDLON,NFLEV*2+1),ZZFDHDD(NDLON,NFLEV*2+1)
C
      COMMON/scratch/ZADJD, ZADJU
     S  ,  ZDBDT
     S  ,  ZDISD, ZDISU
     S  ,  ZFD, ZFDN, ZFU
     S  ,  ZFUP,ZGLAYD,ZGLAYU
     S  ,  ZOMEGADD,ZGDD
     S  ,  ZTAUDD
     S  ,  ZBHDD,ZBSDD
     S  ,  ZZBHDD,ZZBSDD
     S  ,  ZFAHDD,ZFDHDD
     S  ,  ZZFAHDD,ZZFDHDD
C
C-----------------------------------------------------------------------
C
C*         1.    INITIALIZATION
C                --------------
C
 100  CONTINUE
C
C*         1.1     INITIALIZE LAYER CONTRIBUTIONS
C                  ------------------------------
C
 110  CONTINUE
C

      do jl = 1 , kdlon
      do jk = 1 , kflev
      PFLUC(jl,1,jk) = 0.
      PFLUC(jl,2,jk) = 0.
      enddo
      enddo

      DO 112 JK = 1 , KFLEV+1
      DO 111 JL = 1 , KDLON
      ZADJD(JL,JK) = 0.
      ZADJU(JL,JK) = 0.
      ZDISD(JL,JK) = 0.
      ZDISU(JL,JK) = 0.
 111  CONTINUE
 112  CONTINUE
C
C
C     ------------------------------------------------------------------
C
C*         2.      VERTICAL INTEGRATION
C                  --------------------
C
C     ------------------------------------------------------------------
C
C
C  ==================================================================
C*         2.0     contribution des bandes "hors co2"
C  ==================================================================
C
 200  CONTINUE
C
C     ------------------------------------------------------------------
C
C*         2.0.1   preparation des Planck a chaque hauteur
C                  ----------------------------------
C
c!
c! le nombre de couche pour la diffusion sera le nombre de layer * 2
c! soit NDD=KFLEV*2, donc la taille du vecteur des Planck sera
c! KFLEV*2 + 1. la taille des vecteurs omega / g / tau sera
c! par contre KFLEV*2 (voir dans FLUSV.F).
c!
      NDD=KFLEV*2
      DO indd=1,ndd+1
                                            do jl=1,kdlon
         ZFAHDD(jl,indd)=0.
         ZFDHDD(jl,indd)=0.
         ZBHDD(jl,indd)=0.
                                            enddo
      ENDDO
                                            do jl=1,kdlon
      ZBSDD(jl)=0.
                                            enddo
c!
c! boucle sur les 4 bandes hors CO2
c!
      DO 10001 iir=3,nir
c!
                                            do jl=1,kdlon
        ZZBHDD(JL,1)=PBTOP(JL,iir)/rpi
                                            enddo
        DO J1=2,NDD+1
                                            do jl=1,kdlon
           ZZBHDD(JL,J1)=
     &     ZZBHDD(JL,J1-1)-PDBSL(JL,iir,NDD-J1+2)/rpi
                                            enddo
        ENDDO
                                            do jl=1,kdlon
        ZZBSDD(JL)=PBSUR(JL,iir)/rpi
                                            enddo

C
C     ------------------------------------------------------------------
C
C*         2.0.2   preparation des coefficients de diffusion
C                  -----------------------------------------
C
        ZOM=omegaer(iir)
        ZG=gaer(iir)
c! les omega, g, tau ... boucle de bas en haut
        DO J2=1,KFLEV-1
          J2DD2=(KFLEV-J2+1)*2
          J2DD1=J2DD2-1
          J2BOT=3*J2-2
          J2TOP=3*J2+1
                                            do jl=1,kdlon
          ZTADD=(PABCUAER(JL,iir,j2)-PABCUAER(JL,iir,j2+1))*0.5
          ZTAUDD(JL,J2DD1)=ZTADD
          ZTAUDD(JL,J2DD2)=ZTADD
          ZOMEGADD(JL,J2DD1)=ZOM
          ZOMEGADD(JL,J2DD2)=ZOM
          ZGDD(JL,J2DD1)=ZG
          ZGDD(JL,J2DD2)=ZG
                                            enddo
        ENDDO
        J2=KFLEV
        J2DD2=2
        J2DD1=1
        J2BOT=3*J2-2
                                            do jl=1,kdlon
        ZTADD=PABCUAER(JL,iir,j2)*0.5
        ZTAUDD(JL,J2DD1)=ZTADD
        ZTAUDD(JL,J2DD2)=ZTADD
        ZOMEGADD(JL,J2DD1)=ZOM
        ZOMEGADD(JL,J2DD2)=ZOM
        ZGDD(JL,J2DD1)=ZG
        ZGDD(JL,J2DD2)=ZG
                                            enddo
C
C     ------------------------------------------------------------------
C
C*         2.0.3   calcul de la diffusion
C                  ----------------------
C

c-----------------------------------------------------------------------
        CALL flusv(KDLON,0
     &  ,NDD,ZOMEGADD,ZGDD,ZTAUDD,PEMIS
     &  ,ZZBHDD,ZZBSDD
     &  ,ZZFAHDD,ZZFDHDD)
c!
c!  Cumul des flux sur le spectre hors bande du CO2
c!
        DO indd=1,ndd+1
                                            do jl=1,kdlon
           ZFAHDD(jl,indd)=ZFAHDD(jl,indd)+ZZFAHDD(jl,indd)
           ZFDHDD(jl,indd)=ZFDHDD(jl,indd)+ZZFDHDD(jl,indd)
c     print*,indd,' ZFAHDD up et dwn',ZFAHDD(jl,indd)
c    .     ,ZFDHDD(jl,indd)
                                            enddo
        ENDDO
10001 CONTINUE

      DO J2=1,KFLEV+1
      J2DD=(KFLEV-J2+1)*2+1
                                            do jl=1,kdlon
      PFLUC(JL,1,J2)=PFLUC(JL,1,J2)+ZFAHDD(JL,J2DD)
      PFLUC(JL,2,J2)=PFLUC(JL,2,J2)-ZFDHDD(JL,J2DD)
c     print*,j2,'pfluc up et dwn',PFLUC(JL,1,J2),PFLUC(JL,2,J2)
                                            enddo
      ENDDO


      END