Ignore:
Timestamp:
Nov 14, 2014, 9:22:21 PM (10 years ago)
Author:
idelkadi
Message:

Les modifications introduites ont pour but :
1/ d'autoriser le couplage entre INCA-aerosol et les parametrisations de
la nouvelle physique (NP) de LMDZ, en particulier les thermiques et le
transport convectif,
2/ generaliser les routines de calcul de proprietes optiques des
aerosols pour RRTM au cas ou les aerosols sont interactifs
3/ d'inclure les effets LW des aerosols stratospheriques pour RRTM

File:
1 edited

Legend:

Unmodified
Added
Removed
  • LMDZ5/trunk/libf/phylmd/rrtm/aeropt_5wv_rrtm.F90

    r2058 r2146  
    1212  USE aero_mod
    1313  USE phys_local_var_mod, only: od550aer,od865aer,ec550aer,od550lt1aer
    14   USE YOMCST           , only : RD , RG
    1514
    1615  !
     
    5049  !
    5150  IMPLICIT NONE
     51  INCLUDE "YOMCST.h"
    5252  !
    5353  ! Input arguments:
     
    5555  REAL, DIMENSION(klon,klev), INTENT(in)   :: pdel
    5656  REAL, INTENT(in)                         :: delt
    57   REAL, DIMENSION(klon,klev,naero_spc), INTENT(in) :: m_allaer
     57  REAL, DIMENSION(klon,klev,naero_tot), INTENT(in) :: m_allaer
    5858  REAL, DIMENSION(klon,klev), INTENT(in)   :: RHcl     ! humidite relative ciel clair
    5959  INTEGER,INTENT(in)                       :: flag_aerosol
     
    7373  LOGICAL :: soluble
    7474 
    75   INTEGER :: i, k, m
     75  INTEGER :: i, k, m, aerindex
    7676  INTEGER :: spsol, spinsol, la
    7777  INTEGER :: RH_num(klon,klev)
     
    9696  REAL :: zdp1(klon,klev)
    9797  INTEGER, ALLOCATABLE, DIMENSION(:)  :: aerosol_name
    98   INTEGER :: nb_aer
     98  INTEGER :: nb_aer, itau
     99  LOGICAL :: ok_itau
    99100 
    100101  REAL :: dh(KLON,KLEV)
     
    105106  REAL :: alpha_aeri_5wv(las,naero_insoluble)         ! Ext. coeff. ** m2/g
    106107
    107   REAL, DIMENSION(klon,klev,naero_spc) :: mass_temp
     108  REAL, DIMENSION(klon,klev,naero_tot) :: mass_temp
    108109 
    109110  !
     
    113114  LOGICAL :: used_tau(naero_tot)
    114115  INTEGER :: n
    115  
     116
    116117! From here on we look at the optical parameters at 5 wavelengths: 
    117118! 443nm, 550, 670, 765 and 865 nm
     
    222223     nb_aer = 2
    223224     ALLOCATE (aerosol_name(nb_aer))
    224      aerosol_name(1) = id_ASSO4M
    225      aerosol_name(2) = id_CSSO4M
     225     aerosol_name(1) = id_ASSO4M_phy
     226     aerosol_name(2) = id_CSSO4M_phy
    226227  ELSEIF (flag_aerosol .EQ. 2) THEN
    227228     nb_aer = 2
    228229     ALLOCATE (aerosol_name(nb_aer))
    229      aerosol_name(1) = id_ASBCM
    230      aerosol_name(2) = id_AIBCM
     230     aerosol_name(1) = id_ASBCM_phy
     231     aerosol_name(2) = id_AIBCM_phy
    231232  ELSEIF (flag_aerosol .EQ. 3) THEN
    232233     nb_aer = 2
    233234     ALLOCATE (aerosol_name(nb_aer))
    234      aerosol_name(1) = id_ASPOMM
    235      aerosol_name(2) = id_AIPOMM
     235     aerosol_name(1) = id_ASPOMM_phy
     236     aerosol_name(2) = id_AIPOMM_phy
    236237  ELSEIF (flag_aerosol .EQ. 4) THEN
    237238     nb_aer = 3
    238239     ALLOCATE (aerosol_name(nb_aer))
    239      aerosol_name(1) = id_CSSSM
    240      aerosol_name(2) = id_SSSSM
    241      aerosol_name(3) = id_ASSSM
     240     aerosol_name(1) = id_CSSSM_phy
     241     aerosol_name(2) = id_SSSSM_phy
     242     aerosol_name(3) = id_ASSSM_phy
    242243  ELSEIF (flag_aerosol .EQ. 5) THEN
    243244     nb_aer = 1
    244245     ALLOCATE (aerosol_name(nb_aer))
    245      aerosol_name(1) = id_CIDUSTM
     246     aerosol_name(1) = id_CIDUSTM_phy
    246247  ELSEIF (flag_aerosol .EQ. 6) THEN
    247248     nb_aer = 10
    248249     ALLOCATE (aerosol_name(nb_aer))
    249      aerosol_name(1) = id_ASSO4M     
    250      aerosol_name(2) = id_ASBCM
    251      aerosol_name(3) = id_AIBCM
    252      aerosol_name(4) = id_ASPOMM
    253      aerosol_name(5) = id_AIPOMM
    254      aerosol_name(6) = id_CSSSM
    255      aerosol_name(7) = id_SSSSM
    256      aerosol_name(8) = id_ASSSM
    257      aerosol_name(9) = id_CIDUSTM
    258      aerosol_name(10) = id_CSSO4M
     250     aerosol_name(1) = id_ASSO4M_phy     
     251     aerosol_name(2) = id_ASBCM_phy
     252     aerosol_name(3) = id_AIBCM_phy
     253     aerosol_name(4) = id_ASPOMM_phy
     254     aerosol_name(5) = id_AIPOMM_phy
     255     aerosol_name(6) = id_CSSSM_phy
     256     aerosol_name(7) = id_SSSSM_phy
     257     aerosol_name(8) = id_ASSSM_phy
     258     aerosol_name(9) = id_CIDUSTM_phy
     259     aerosol_name(10) = id_CSSO4M_phy
    259260  ENDIF
    260261
     
    293294  DO m=1,nb_aer   ! tau is only computed for each mass   
    294295    fac=1.0
    295     IF (aerosol_name(m).EQ.id_ASBCM) THEN
     296    IF (aerosol_name(m).EQ.id_ASBCM_phy) THEN
    296297        soluble=.TRUE.
    297298        spsol=1
    298     ELSEIF (aerosol_name(m).EQ.id_ASPOMM) THEN
     299    ELSEIF (aerosol_name(m).EQ.id_ASPOMM_phy) THEN
    299300        soluble=.TRUE.
    300301        spsol=2
    301     ELSEIF (aerosol_name(m).EQ.id_ASSO4M) THEN
     302    ELSEIF (aerosol_name(m).EQ.id_ASSO4M_phy) THEN
    302303        soluble=.TRUE.
    303304        spsol=3
    304305        fac=1.375    ! (NH4)2-SO4/SO4 132/96 mass conversion factor for OD
    305     ELSEIF (aerosol_name(m).EQ.id_CSSO4M) THEN
     306    ELSEIF (aerosol_name(m).EQ.id_CSSO4M_phy) THEN
    306307        soluble=.TRUE.
    307308        spsol=4
    308309        fac=1.375    ! (NH4)2-SO4/SO4 132/96 mass conversion factor for OD
    309     ELSEIF (aerosol_name(m).EQ.id_SSSSM) THEN
     310    ELSEIF (aerosol_name(m).EQ.id_SSSSM_phy) THEN
    310311        soluble=.TRUE.
    311312        spsol=5
    312     ELSEIF (aerosol_name(m).EQ.id_CSSSM) THEN
     313    ELSEIF (aerosol_name(m).EQ.id_CSSSM_phy) THEN
    313314        soluble=.TRUE.
    314315        spsol=6
    315     ELSEIF (aerosol_name(m).EQ.id_ASSSM) THEN
     316    ELSEIF (aerosol_name(m).EQ.id_ASSSM_phy) THEN
    316317        soluble=.TRUE.
    317318        spsol=7
    318     ELSEIF (aerosol_name(m).EQ.id_CIDUSTM) THEN
     319    ELSEIF (aerosol_name(m).EQ.id_CIDUSTM_phy) THEN
    319320        soluble=.FALSE.
    320321        spinsol=1
    321     ELSEIF  (aerosol_name(m).EQ.id_AIBCM) THEN
     322    ELSEIF  (aerosol_name(m).EQ.id_AIBCM_phy) THEN
    322323        soluble=.FALSE.
    323324        spinsol=2
    324     ELSEIF (aerosol_name(m).EQ.id_AIPOMM) THEN
     325    ELSEIF (aerosol_name(m).EQ.id_AIPOMM_phy) THEN
    325326        soluble=.FALSE.
    326327        spinsol=3
     
    335336    ENDIF
    336337
     338    aerindex=aerosol_name(m)
     339
    337340    DO la=1,las
    338341
     
    344347                             (alpha_aers_5wv(RH_num(i,k)+1,la,spsol) - &
    345348                              alpha_aers_5wv(RH_num(i,k),la,spsol))
    346               tau(i,k,la,spsol) = mass_temp(i,k,spsol)*1000.*zdp1(i,k)   &
    347                                  *tau_ae5wv_int*delt*fac
    348               tausum(i,la,spsol)=tausum(i,la,spsol)+tau(i,k,la,spsol)
     349              tau(i,k,la,aerindex) = mass_temp(i,k,aerindex)*1000.*zdp1(i,k)*   &
     350                                    tau_ae5wv_int*delt*fac
     351              tausum(i,la,aerindex)=tausum(i,la,aerindex)+tau(i,k,la,aerindex)
    349352            ENDDO
    350353          ENDDO
    351 
     354 
    352355      ELSE                         ! For insoluble aerosol
    353356
     
    355358          DO i=1, KLON
    356359            tau_ae5wv_int = alpha_aeri_5wv(la,spinsol)
    357             tau(i,k,la,naero_soluble+spinsol) = mass_temp(i,k,naero_soluble+spinsol)*1000.*zdp1(i,k)* &
    358                                                 tau_ae5wv_int*delt*fac
    359             tausum(i,la,naero_soluble+spinsol)= tausum(i,la,naero_soluble+spinsol)  &
    360                                                +tau(i,k,la,naero_soluble+spinsol)
     360            tau(i,k,la,aerindex) = mass_temp(i,k,aerindex)*1000.*zdp1(i,k)* &
     361                                   tau_ae5wv_int*delt*fac
     362            tausum(i,la,aerindex)= tausum(i,la,aerindex)+tau(i,k,la,aerindex)
    361363          ENDDO
    362364        ENDDO
     
    405407  ENDDO
    406408
    407   od550lt1aer(:)=tausum(:,la550,id_ASSO4M)+tausum(:,la550,id_ASBCM) +tausum(:,la550,id_AIBCM)+ &
    408                  tausum(:,la550,id_ASPOMM)+tausum(:,la550,id_AIPOMM)+tausum(:,la550,id_ASSSM)+ &
    409                  0.03*tausum(:,la550,id_CSSSM)+0.4*tausum(:,la550,id_CIDUSTM)
     409  od550lt1aer(:)=tausum(:,la550,id_ASSO4M_phy)+tausum(:,la550,id_ASBCM_phy) +tausum(:,la550,id_AIBCM_phy)+ &
     410                 tausum(:,la550,id_ASPOMM_phy)+tausum(:,la550,id_AIPOMM_phy)+tausum(:,la550,id_ASSSM_phy)+ &
     411                 0.03*tausum(:,la550,id_CSSSM_phy)+0.4*tausum(:,la550,id_CIDUSTM_phy)
    410412
    411413  DEALLOCATE(aerosol_name)
Note: See TracChangeset for help on using the changeset viewer.