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

Location:
LMDZ5/trunk/libf/phylmd
Files:
24 edited

Legend:

Unmodified
Added
Removed
  • LMDZ5/trunk/libf/phylmd/aero_mod.F90

    r2003 r2146  
    66! 1/ Total number of aerosols for which an aerosol optical depth is provided
    77!--strat aerosols are only prescribed naero_tot = 10 ==> 11
     8!--adding nitrate naero_tot = 14 OB
    89
    9   INTEGER, PARAMETER :: naero_tot = 11
     10  INTEGER, PARAMETER :: naero_tot = 14
    1011
    1112! Identification number used in aeropt_2bands and aeropt_5wv
    1213! corresponding to naero_tot
    13   INTEGER, PARAMETER :: id_ASBCM    = 1
    14   INTEGER, PARAMETER :: id_ASPOMM   = 2
    15   INTEGER, PARAMETER :: id_ASSO4M   = 3
    16   INTEGER, PARAMETER :: id_CSSO4M   = 4
    17   INTEGER, PARAMETER :: id_SSSSM    = 5
    18   INTEGER, PARAMETER :: id_CSSSM    = 6
    19   INTEGER, PARAMETER :: id_ASSSM    = 7
    20   INTEGER, PARAMETER :: id_CIDUSTM  = 8
    21   INTEGER, PARAMETER :: id_AIBCM    = 9
    22   INTEGER, PARAMETER :: id_AIPOMM   = 10
    23   INTEGER, PARAMETER :: id_STRAT   = 11
     14  INTEGER, PARAMETER :: id_ASBCM_phy    = 1
     15  INTEGER, PARAMETER :: id_ASPOMM_phy   = 2
     16  INTEGER, PARAMETER :: id_ASSO4M_phy   = 3
     17  INTEGER, PARAMETER :: id_CSSO4M_phy   = 4
     18  INTEGER, PARAMETER :: id_SSSSM_phy    = 5
     19  INTEGER, PARAMETER :: id_CSSSM_phy    = 6
     20  INTEGER, PARAMETER :: id_ASSSM_phy    = 7
     21  INTEGER, PARAMETER :: id_CIDUSTM_phy  = 8
     22  INTEGER, PARAMETER :: id_AIBCM_phy    = 9
     23  INTEGER, PARAMETER :: id_AIPOMM_phy   = 10
     24  INTEGER, PARAMETER :: id_ASNO3M_phy   = 11
     25  INTEGER, PARAMETER :: id_CSNO3M_phy   = 12
     26  INTEGER, PARAMETER :: id_CINO3M_phy   = 13
     27  INTEGER, PARAMETER :: id_STRAT_phy    = 14
    2428
    2529! Corresponding names for the aerosols
     
    3539       "AIBCM  ", &
    3640       "AIPOMM ", &
     41       "ASNO3M ", &
     42       "CSNO3M ", &
     43       "CINO3M ", &
    3744       "STRAT  " /)
    3845
     
    6673  ! 9 = NO3   
    6774
    68 ! Number of  wavelengths
     75! Number of diagnostics wavelengths (5 SW + 1 LW @ 10 um)
    6976  INTEGER, PARAMETER :: nwave = 5
     77  INTEGER, PARAMETER :: nwave_lw = 1
    7078
    7179! Number of modes spectral bands
    7280  INTEGER, parameter :: nbands = 2
    73   INTEGER, parameter :: nbands_rrtm = 6
     81  INTEGER, parameter :: nbands_sw_rrtm = 6
     82  INTEGER, parameter :: nbands_lw_rrtm = 16
    7483
    7584END MODULE aero_mod
  • LMDZ5/trunk/libf/phylmd/aeropt_2bands.F90

    r2003 r2146  
    2929  REAL, DIMENSION(klon,klev),     INTENT(in)  :: pdel
    3030  REAL,                           INTENT(in)  :: delt
    31   REAL, DIMENSION(klon,klev,naero_spc),   INTENT(in)  :: m_allaer
     31  REAL, DIMENSION(klon,klev,naero_tot),   INTENT(in)  :: m_allaer
    3232!RAF
    33   REAL, DIMENSION(klon,klev,naero_spc),   INTENT(in)  :: m_allaer_pi
     33  REAL, DIMENSION(klon,klev,naero_tot),   INTENT(in)  :: m_allaer_pi
    3434  REAL, DIMENSION(klon,klev),     INTENT(in)  :: RHcl       ! humidite relative ciel clair
    3535!RAF  REAL, DIMENSION(klon,naero_tot),INTENT(in)  :: fractnat_allaer
     
    136136  INTEGER, ALLOCATABLE, DIMENSION(:)   :: aerosol_name
    137137  INTEGER :: nb_aer
    138   REAL, DIMENSION(klon,klev,naero_spc) :: mass_temp
     138  REAL, DIMENSION(klon,klev,naero_tot) :: mass_temp
    139139!RAF
    140   REAL, DIMENSION(klon,klev,naero_spc) :: mass_temp_pi
     140  REAL, DIMENSION(klon,klev,naero_tot) :: mass_temp_pi
    141141
    142142  !
     
    607607     nb_aer = 2
    608608     ALLOCATE (aerosol_name(nb_aer))
    609      aerosol_name(1) = id_ASSO4M
    610      aerosol_name(2) = id_CSSO4M
     609     aerosol_name(1) = id_ASSO4M_phy
     610     aerosol_name(2) = id_CSSO4M_phy
    611611  ELSEIF (flag_aerosol .EQ. 2) THEN
    612612     nb_aer = 2
    613613     ALLOCATE (aerosol_name(nb_aer))
    614      aerosol_name(1) = id_ASBCM
    615      aerosol_name(2) = id_AIBCM
     614     aerosol_name(1) = id_ASBCM_phy
     615     aerosol_name(2) = id_AIBCM_phy
    616616  ELSEIF (flag_aerosol .EQ. 3) THEN
    617617     nb_aer = 2
    618618     ALLOCATE (aerosol_name(nb_aer))
    619      aerosol_name(1) = id_ASPOMM
    620      aerosol_name(2) = id_AIPOMM
     619     aerosol_name(1) = id_ASPOMM_phy
     620     aerosol_name(2) = id_AIPOMM_phy
    621621  ELSEIF (flag_aerosol .EQ. 4) THEN
    622622     nb_aer = 3
    623623     ALLOCATE (aerosol_name(nb_aer))
    624      aerosol_name(1) = id_CSSSM
    625      aerosol_name(2) = id_SSSSM
    626      aerosol_name(3) = id_ASSSM
     624     aerosol_name(1) = id_CSSSM_phy
     625     aerosol_name(2) = id_SSSSM_phy
     626     aerosol_name(3) = id_ASSSM_phy
    627627  ELSEIF (flag_aerosol .EQ. 5) THEN
    628628     nb_aer = 1
    629629     ALLOCATE (aerosol_name(nb_aer))
    630      aerosol_name(1) = id_CIDUSTM
     630     aerosol_name(1) = id_CIDUSTM_phy
    631631  ELSEIF (flag_aerosol .EQ. 6) THEN
    632632     nb_aer = 10
    633633     ALLOCATE (aerosol_name(nb_aer))
    634      aerosol_name(1) = id_ASSO4M     
    635      aerosol_name(2) = id_ASBCM
    636      aerosol_name(3) = id_AIBCM
    637      aerosol_name(4) = id_ASPOMM
    638      aerosol_name(5) = id_AIPOMM
    639      aerosol_name(6) = id_CSSSM
    640      aerosol_name(7) = id_SSSSM
    641      aerosol_name(8) = id_ASSSM
    642      aerosol_name(9) = id_CIDUSTM
    643      aerosol_name(10)= id_CSSO4M
     634     aerosol_name(1) = id_ASSO4M_phy
     635     aerosol_name(2) = id_ASBCM_phy
     636     aerosol_name(3) = id_AIBCM_phy
     637     aerosol_name(4) = id_ASPOMM_phy
     638     aerosol_name(5) = id_AIPOMM_phy
     639     aerosol_name(6) = id_CSSSM_phy
     640     aerosol_name(7) = id_SSSSM_phy
     641     aerosol_name(8) = id_ASSSM_phy
     642     aerosol_name(9) = id_CIDUSTM_phy
     643     aerosol_name(10)= id_CSSO4M_phy
    644644  ENDIF
    645645
     
    678678  DO m=1,nb_aer   ! tau is only computed for each mass
    679679    fac=1.0
    680      IF (aerosol_name(m).EQ.id_ASBCM) THEN
     680     IF (aerosol_name(m).EQ.id_ASBCM_phy) THEN
    681681         soluble=.TRUE.
    682682         spsol=1
    683683         spss=0
    684      ELSEIF (aerosol_name(m).EQ.id_ASPOMM) THEN
     684     ELSEIF (aerosol_name(m).EQ.id_ASPOMM_phy) THEN
    685685        soluble=.TRUE.
    686686        spsol=2
    687687        spss=0
    688      ELSEIF (aerosol_name(m).EQ.id_ASSO4M) THEN
     688     ELSEIF (aerosol_name(m).EQ.id_ASSO4M_phy) THEN
    689689        soluble=.TRUE.
    690690        spsol=3
    691691        spss=0
    692692        fac=1.375    ! (NH4)2-SO4/SO4 132/96 mass conversion factor for OD
    693      ELSEIF  (aerosol_name(m).EQ.id_CSSO4M) THEN
     693     ELSEIF  (aerosol_name(m).EQ.id_CSSO4M_phy) THEN
    694694        soluble=.TRUE.
    695695        spsol=4
    696696        spss=0
    697697        fac=1.375    ! (NH4)2-SO4/SO4 132/96 mass conversion factor for OD
    698      ELSEIF (aerosol_name(m).EQ.id_SSSSM) THEN
     698     ELSEIF (aerosol_name(m).EQ.id_SSSSM_phy) THEN
    699699         soluble=.TRUE.
    700700         spsol=5
    701701         spss=3
    702      ELSEIF (aerosol_name(m).EQ.id_CSSSM) THEN
     702     ELSEIF (aerosol_name(m).EQ.id_CSSSM_phy) THEN
    703703         soluble=.TRUE.
    704704         spsol=6
    705705         spss=2
    706      ELSEIF (aerosol_name(m).EQ.id_ASSSM) THEN
     706     ELSEIF (aerosol_name(m).EQ.id_ASSSM_phy) THEN
    707707         soluble=.TRUE.
    708708         spsol=7
    709709         spss=1
    710      ELSEIF (aerosol_name(m).EQ.id_CIDUSTM) THEN
     710     ELSEIF (aerosol_name(m).EQ.id_CIDUSTM_phy) THEN
    711711         soluble=.FALSE.
    712712         spinsol=1
    713713         spss=0
    714      ELSEIF  (aerosol_name(m).EQ.id_AIBCM) THEN
     714     ELSEIF  (aerosol_name(m).EQ.id_AIBCM_phy) THEN
    715715         soluble=.FALSE.
    716716         spinsol=2
    717717         spss=0
    718      ELSEIF (aerosol_name(m).EQ.id_AIPOMM) THEN
     718     ELSEIF (aerosol_name(m).EQ.id_AIPOMM_phy) THEN
    719719         soluble=.FALSE.
    720720         spinsol=3
     
    944944        DO k=1, KLEV
    945945          DO i=1, KLON
    946             tau_allaer(i,k,mrfspecies,inu)=tau_ae(i,k,id_ASSO4M,inu)+tau_ae(i,k,id_CSSO4M,inu)+ &
    947                                            tau_ae(i,k,id_ASBCM,inu)+tau_ae(i,k,id_AIBCM,inu)+   &                                                   
    948                                            tau_ae(i,k,id_ASPOMM,inu)+tau_ae(i,k,id_AIPOMM,inu)+ &       
    949                                            tau_ae(i,k,id_ASSSM,inu)+tau_ae(i,k,id_CSSSM,inu)+   &
    950                                            tau_ae(i,k,id_SSSSM,inu)+ tau_ae(i,k,id_CIDUSTM,inu)
     946            tau_allaer(i,k,mrfspecies,inu)=tau_ae(i,k,id_ASSO4M_phy,inu)+tau_ae(i,k,id_CSSO4M_phy,inu)+ &
     947                                           tau_ae(i,k,id_ASBCM_phy,inu)+tau_ae(i,k,id_AIBCM_phy,inu)+   &                                                   
     948                                           tau_ae(i,k,id_ASPOMM_phy,inu)+tau_ae(i,k,id_AIPOMM_phy,inu)+ &       
     949                                           tau_ae(i,k,id_ASSSM_phy,inu)+tau_ae(i,k,id_CSSSM_phy,inu)+   &
     950                                           tau_ae(i,k,id_SSSSM_phy,inu)+ tau_ae(i,k,id_CIDUSTM_phy,inu)
    951951             tau_allaer(i,k,mrfspecies,inu)=MAX(tau_allaer(i,k,mrfspecies,inu),1e-5)
    952952                 
    953              piz_allaer(i,k,mrfspecies,inu)=(tau_ae(i,k,id_ASSO4M,inu)*piz_ae(i,k,id_ASSO4M,inu)+ &
    954                                              tau_ae(i,k,id_CSSO4M,inu)*piz_ae(i,k,id_CSSO4M,inu)+ &
    955                                              tau_ae(i,k,id_ASBCM,inu)*piz_ae(i,k,id_ASBCM,inu)+ &
    956                                              tau_ae(i,k,id_AIBCM,inu)*piz_ae(i,k,id_AIBCM,inu)+ &
    957                                              tau_ae(i,k,id_ASPOMM,inu)*piz_ae(i,k,id_ASPOMM,inu)+ &
    958                                              tau_ae(i,k,id_AIPOMM,inu)*piz_ae(i,k,id_AIPOMM,inu)+ &     
    959                                              tau_ae(i,k,id_ASSSM,inu)*piz_ae(i,k,id_ASSSM,inu)+ &
    960                                              tau_ae(i,k,id_CSSSM,inu)*piz_ae(i,k,id_CSSSM,inu)+ &
    961                                              tau_ae(i,k,id_SSSSM,inu)*piz_ae(i,k,id_SSSSM,inu)+ &
    962                                              tau_ae(i,k,id_CIDUSTM,inu)*piz_ae(i,k,id_CIDUSTM,inu)) &
     953             piz_allaer(i,k,mrfspecies,inu)=(tau_ae(i,k,id_ASSO4M_phy,inu)*piz_ae(i,k,id_ASSO4M_phy,inu)+ &
     954                                             tau_ae(i,k,id_CSSO4M_phy,inu)*piz_ae(i,k,id_CSSO4M_phy,inu)+ &
     955                                             tau_ae(i,k,id_ASBCM_phy,inu)*piz_ae(i,k,id_ASBCM_phy,inu)+ &
     956                                             tau_ae(i,k,id_AIBCM_phy,inu)*piz_ae(i,k,id_AIBCM_phy,inu)+ &
     957                                             tau_ae(i,k,id_ASPOMM_phy,inu)*piz_ae(i,k,id_ASPOMM_phy,inu)+ &
     958                                             tau_ae(i,k,id_AIPOMM_phy,inu)*piz_ae(i,k,id_AIPOMM_phy,inu)+ &     
     959                                             tau_ae(i,k,id_ASSSM_phy,inu)*piz_ae(i,k,id_ASSSM_phy,inu)+ &
     960                                             tau_ae(i,k,id_CSSSM_phy,inu)*piz_ae(i,k,id_CSSSM_phy,inu)+ &
     961                                             tau_ae(i,k,id_SSSSM_phy,inu)*piz_ae(i,k,id_SSSSM_phy,inu)+ &
     962                                             tau_ae(i,k,id_CIDUSTM_phy,inu)*piz_ae(i,k,id_CIDUSTM_phy,inu)) &
    963963                                            /tau_allaer(i,k,mrfspecies,inu)
    964964             piz_allaer(i,k,mrfspecies,inu)=MAX(piz_allaer(i,k,mrfspecies,inu),0.1)
    965965
    966              cg_allaer(i,k,mrfspecies,inu)=(tau_ae(i,k,id_ASSO4M,inu)*piz_ae(i,k,id_ASSO4M,inu)*cg_ae(i,k,id_ASSO4M,inu)+ &
    967                       tau_ae(i,k,id_CSSO4M,inu)*piz_ae(i,k,id_CSSO4M,inu)*cg_ae(i,k,id_CSSO4M,inu)+ &
    968                       tau_ae(i,k,id_ASBCM,inu)*piz_ae(i,k,id_ASBCM,inu)*cg_ae(i,k,id_ASBCM,inu)+ &
    969                       tau_ae(i,k,id_AIBCM,inu)*piz_ae(i,k,id_AIBCM,inu)*cg_ae(i,k,id_AIBCM,inu)+ &
    970                       tau_ae(i,k,id_ASPOMM,inu)*piz_ae(i,k,id_ASPOMM,inu)*cg_ae(i,k,id_ASPOMM,inu)+ &
    971                       tau_ae(i,k,id_AIPOMM,inu)*piz_ae(i,k,id_AIPOMM,inu)*cg_ae(i,k,id_AIPOMM,inu)+ &   
    972                       tau_ae(i,k,id_ASSSM,inu)*piz_ae(i,k,id_ASSSM,inu)*cg_ae(i,k,id_ASSSM,inu)+ &
    973                       tau_ae(i,k,id_CSSSM,inu)*piz_ae(i,k,id_CSSSM,inu)*cg_ae(i,k,id_CSSSM,inu)+ &
    974                       tau_ae(i,k,id_SSSSM,inu)*piz_ae(i,k,id_SSSSM,inu)*cg_ae(i,k,id_SSSSM,inu)+ &
    975                       tau_ae(i,k,id_CIDUSTM,inu)*piz_ae(i,k,id_CIDUSTM,inu)*cg_ae(i,k,id_CIDUSTM,inu))/ &
     966             cg_allaer(i,k,mrfspecies,inu)=(tau_ae(i,k,id_ASSO4M_phy,inu)*piz_ae(i,k,id_ASSO4M_phy,inu)*cg_ae(i,k,id_ASSO4M_phy,inu)+ &
     967                      tau_ae(i,k,id_CSSO4M_phy,inu)*piz_ae(i,k,id_CSSO4M_phy,inu)*cg_ae(i,k,id_CSSO4M_phy,inu)+ &
     968                      tau_ae(i,k,id_ASBCM_phy,inu)*piz_ae(i,k,id_ASBCM_phy,inu)*cg_ae(i,k,id_ASBCM_phy,inu)+ &
     969                      tau_ae(i,k,id_AIBCM_phy,inu)*piz_ae(i,k,id_AIBCM_phy,inu)*cg_ae(i,k,id_AIBCM_phy,inu)+ &
     970                      tau_ae(i,k,id_ASPOMM_phy,inu)*piz_ae(i,k,id_ASPOMM_phy,inu)*cg_ae(i,k,id_ASPOMM_phy,inu)+ &
     971                      tau_ae(i,k,id_AIPOMM_phy,inu)*piz_ae(i,k,id_AIPOMM_phy,inu)*cg_ae(i,k,id_AIPOMM_phy,inu)+ &       
     972                      tau_ae(i,k,id_ASSSM_phy,inu)*piz_ae(i,k,id_ASSSM_phy,inu)*cg_ae(i,k,id_ASSSM_phy,inu)+ &
     973                      tau_ae(i,k,id_CSSSM_phy,inu)*piz_ae(i,k,id_CSSSM_phy,inu)*cg_ae(i,k,id_CSSSM_phy,inu)+ &
     974                      tau_ae(i,k,id_SSSSM_phy,inu)*piz_ae(i,k,id_SSSSM_phy,inu)*cg_ae(i,k,id_SSSSM_phy,inu)+ &
     975                      tau_ae(i,k,id_CIDUSTM_phy,inu)*piz_ae(i,k,id_CIDUSTM_phy,inu)*cg_ae(i,k,id_CIDUSTM_phy,inu))/ &
    976976                      (tau_allaer(i,k,mrfspecies,inu)*piz_allaer(i,k,mrfspecies,inu))
    977977          ENDDO   
     
    983983          DO i=1, KLON
    984984!RAF
    985                  tau_allaer(i,k,mrfspecies,inu)=tau_ae_pi(i,k,id_ASSO4M,inu)+ &
    986                       tau_ae_pi(i,k,id_CSSO4M,inu)+ &
    987                       tau_ae_pi(i,k,id_ASBCM,inu)+ &
    988                       tau_ae_pi(i,k,id_AIBCM,inu)+ &
    989                       tau_ae_pi(i,k,id_ASPOMM,inu)+ &
    990                       tau_ae_pi(i,k,id_AIPOMM,inu)+ &   
    991                       tau_ae_pi(i,k,id_ASSSM,inu)+ &
    992                       tau_ae_pi(i,k,id_CSSSM,inu)+ &
    993                       tau_ae_pi(i,k,id_SSSSM,inu)+ &
    994                       tau_ae_pi(i,k,id_CIDUSTM,inu)
     985                 tau_allaer(i,k,mrfspecies,inu)=tau_ae_pi(i,k,id_ASSO4M_phy,inu)+ &
     986                      tau_ae_pi(i,k,id_CSSO4M_phy,inu)+ &
     987                      tau_ae_pi(i,k,id_ASBCM_phy,inu)+ &
     988                      tau_ae_pi(i,k,id_AIBCM_phy,inu)+ &
     989                      tau_ae_pi(i,k,id_ASPOMM_phy,inu)+ &
     990                      tau_ae_pi(i,k,id_AIPOMM_phy,inu)+ &       
     991                      tau_ae_pi(i,k,id_ASSSM_phy,inu)+ &
     992                      tau_ae_pi(i,k,id_CSSSM_phy,inu)+ &
     993                      tau_ae_pi(i,k,id_SSSSM_phy,inu)+ &
     994                      tau_ae_pi(i,k,id_CIDUSTM_phy,inu)
    995995                 tau_allaer(i,k,mrfspecies,inu)=MAX(tau_allaer(i,k,mrfspecies,inu),1e-5)
    996996
    997                  piz_allaer(i,k,mrfspecies,inu)=(tau_ae_pi(i,k,id_ASSO4M,inu)*piz_ae(i,k,id_ASSO4M,inu)+ &
    998                       tau_ae_pi(i,k,id_CSSO4M,inu)*piz_ae(i,k,id_CSSO4M,inu)+ &
    999                       tau_ae_pi(i,k,id_ASBCM,inu)*piz_ae(i,k,id_ASBCM,inu)+ &
    1000                       tau_ae_pi(i,k,id_AIBCM,inu)*piz_ae(i,k,id_AIBCM,inu)+ &
    1001                       tau_ae_pi(i,k,id_ASPOMM,inu)*piz_ae(i,k,id_ASPOMM,inu)+ &
    1002                       tau_ae_pi(i,k,id_AIPOMM,inu)*piz_ae(i,k,id_AIPOMM,inu)+ &
    1003                       tau_ae_pi(i,k,id_ASSSM,inu)*piz_ae(i,k,id_ASSSM,inu)+ &
    1004                       tau_ae_pi(i,k,id_CSSSM,inu)*piz_ae(i,k,id_CSSSM,inu)+ &
    1005                       tau_ae_pi(i,k,id_SSSSM,inu)*piz_ae(i,k,id_SSSSM,inu)+ &
    1006                       tau_ae_pi(i,k,id_CIDUSTM,inu)*piz_ae(i,k,id_CIDUSTM,inu)) &
     997                 piz_allaer(i,k,mrfspecies,inu)=(tau_ae_pi(i,k,id_ASSO4M_phy,inu)*piz_ae(i,k,id_ASSO4M_phy,inu)+ &
     998                      tau_ae_pi(i,k,id_CSSO4M_phy,inu)*piz_ae(i,k,id_CSSO4M_phy,inu)+ &
     999                      tau_ae_pi(i,k,id_ASBCM_phy,inu)*piz_ae(i,k,id_ASBCM_phy,inu)+ &
     1000                      tau_ae_pi(i,k,id_AIBCM_phy,inu)*piz_ae(i,k,id_AIBCM_phy,inu)+ &
     1001                      tau_ae_pi(i,k,id_ASPOMM_phy,inu)*piz_ae(i,k,id_ASPOMM_phy,inu)+ &
     1002                      tau_ae_pi(i,k,id_AIPOMM_phy,inu)*piz_ae(i,k,id_AIPOMM_phy,inu)+ &
     1003                      tau_ae_pi(i,k,id_ASSSM_phy,inu)*piz_ae(i,k,id_ASSSM_phy,inu)+ &
     1004                      tau_ae_pi(i,k,id_CSSSM_phy,inu)*piz_ae(i,k,id_CSSSM_phy,inu)+ &
     1005                      tau_ae_pi(i,k,id_SSSSM_phy,inu)*piz_ae(i,k,id_SSSSM_phy,inu)+ &
     1006                      tau_ae_pi(i,k,id_CIDUSTM_phy,inu)*piz_ae(i,k,id_CIDUSTM_phy,inu)) &
    10071007                      /tau_allaer(i,k,mrfspecies,inu)
    10081008                 piz_allaer(i,k,mrfspecies,inu)=MAX(piz_allaer(i,k,mrfspecies,inu),0.1)
    10091009
    10101010                 cg_allaer(i,k,mrfspecies,inu)=(&
    1011                       tau_ae_pi(i,k,id_ASSO4M,inu)*piz_ae(i,k,id_ASSO4M,inu)*cg_ae(i,k,id_ASSO4M,inu)+ &
    1012                       tau_ae_pi(i,k,id_CSSO4M,inu)*piz_ae(i,k,id_CSSO4M,inu)*cg_ae(i,k,id_CSSO4M,inu)+ &
    1013                       tau_ae_pi(i,k,id_ASBCM,inu)*piz_ae(i,k,id_ASBCM,inu)*cg_ae(i,k,id_ASBCM,inu)+ &
    1014                       tau_ae_pi(i,k,id_AIBCM,inu)*piz_ae(i,k,id_AIBCM,inu)*cg_ae(i,k,id_AIBCM,inu)+ &
    1015                       tau_ae_pi(i,k,id_ASPOMM,inu)*piz_ae(i,k,id_ASPOMM,inu)*cg_ae(i,k,id_ASPOMM,inu)+ &
    1016                       tau_ae_pi(i,k,id_AIPOMM,inu)*piz_ae(i,k,id_AIPOMM,inu)*cg_ae(i,k,id_AIPOMM,inu)+ &
    1017                       tau_ae_pi(i,k,id_ASSSM,inu)*piz_ae(i,k,id_ASSSM,inu)*cg_ae(i,k,id_ASSSM,inu)+ &
    1018                       tau_ae_pi(i,k,id_CSSSM,inu)*piz_ae(i,k,id_CSSSM,inu)*cg_ae(i,k,id_CSSSM,inu)+ &
    1019                       tau_ae_pi(i,k,id_SSSSM,inu)*piz_ae(i,k,id_SSSSM,inu)*cg_ae(i,k,id_SSSSM,inu)+ &
    1020                       tau_ae_pi(i,k,id_CIDUSTM,inu)*piz_ae(i,k,id_CIDUSTM,inu)*&
    1021                       cg_ae(i,k,id_CIDUSTM,inu))/ &
     1011                      tau_ae_pi(i,k,id_ASSO4M_phy,inu)*piz_ae(i,k,id_ASSO4M_phy,inu)*cg_ae(i,k,id_ASSO4M_phy,inu)+ &
     1012                      tau_ae_pi(i,k,id_CSSO4M_phy,inu)*piz_ae(i,k,id_CSSO4M_phy,inu)*cg_ae(i,k,id_CSSO4M_phy,inu)+ &
     1013                      tau_ae_pi(i,k,id_ASBCM_phy,inu)*piz_ae(i,k,id_ASBCM_phy,inu)*cg_ae(i,k,id_ASBCM_phy,inu)+ &
     1014                      tau_ae_pi(i,k,id_AIBCM_phy,inu)*piz_ae(i,k,id_AIBCM_phy,inu)*cg_ae(i,k,id_AIBCM_phy,inu)+ &
     1015                      tau_ae_pi(i,k,id_ASPOMM_phy,inu)*piz_ae(i,k,id_ASPOMM_phy,inu)*cg_ae(i,k,id_ASPOMM_phy,inu)+ &
     1016                      tau_ae_pi(i,k,id_AIPOMM_phy,inu)*piz_ae(i,k,id_AIPOMM_phy,inu)*cg_ae(i,k,id_AIPOMM_phy,inu)+ &
     1017                      tau_ae_pi(i,k,id_ASSSM_phy,inu)*piz_ae(i,k,id_ASSSM_phy,inu)*cg_ae(i,k,id_ASSSM_phy,inu)+ &
     1018                      tau_ae_pi(i,k,id_CSSSM_phy,inu)*piz_ae(i,k,id_CSSSM_phy,inu)*cg_ae(i,k,id_CSSSM_phy,inu)+ &
     1019                      tau_ae_pi(i,k,id_SSSSM_phy,inu)*piz_ae(i,k,id_SSSSM_phy,inu)*cg_ae(i,k,id_SSSSM_phy,inu)+ &
     1020                      tau_ae_pi(i,k,id_CIDUSTM_phy,inu)*piz_ae(i,k,id_CIDUSTM_phy,inu)*&
     1021                      cg_ae(i,k,id_CIDUSTM_phy,inu))/ &
    10221022                      (tau_allaer(i,k,mrfspecies,inu)*piz_allaer(i,k,mrfspecies,inu))
    10231023          ENDDO
     
    10271027        DO k=1, KLEV
    10281028          DO i=1, KLON
    1029             tau_allaer(i,k,mrfspecies,inu)=tau_ae(i,k,id_ASBCM,inu)+tau_ae(i,k,id_AIBCM,inu)
     1029            tau_allaer(i,k,mrfspecies,inu)=tau_ae(i,k,id_ASBCM_phy,inu)+tau_ae(i,k,id_AIBCM_phy,inu)
    10301030            tau_allaer(i,k,mrfspecies,inu)=MAX(tau_allaer(i,k,mrfspecies,inu),1e-5)
    1031             piz_allaer(i,k,mrfspecies,inu)=(tau_ae(i,k,id_ASBCM,inu)*piz_ae(i,k,id_ASBCM,inu) &
    1032                       +tau_ae(i,k,id_AIBCM,inu)*piz_ae(i,k,id_AIBCM,inu))/ &
     1031            piz_allaer(i,k,mrfspecies,inu)=(tau_ae(i,k,id_ASBCM_phy,inu)*piz_ae(i,k,id_ASBCM_phy,inu) &
     1032                      +tau_ae(i,k,id_AIBCM_phy,inu)*piz_ae(i,k,id_AIBCM_phy,inu))/ &
    10331033                      tau_allaer(i,k,mrfspecies,inu)
    10341034            piz_allaer(i,k,mrfspecies,inu)=MAX(piz_allaer(i,k,mrfspecies,inu),0.1)
    1035             cg_allaer(i,k,mrfspecies,inu)=(tau_ae(i,k,id_ASBCM,inu)*piz_ae(i,k,id_ASBCM,inu) *cg_ae(i,k,id_ASBCM,inu)&
    1036                       +tau_ae(i,k,id_AIBCM,inu)*piz_ae(i,k,id_AIBCM,inu)*cg_ae(i,k,id_AIBCM,inu))/ &
     1035            cg_allaer(i,k,mrfspecies,inu)=(tau_ae(i,k,id_ASBCM_phy,inu)*piz_ae(i,k,id_ASBCM_phy,inu) *cg_ae(i,k,id_ASBCM_phy,inu)&
     1036                      +tau_ae(i,k,id_AIBCM_phy,inu)*piz_ae(i,k,id_AIBCM_phy,inu)*cg_ae(i,k,id_AIBCM_phy,inu))/ &
    10371037                      (tau_allaer(i,k,mrfspecies,inu)*piz_allaer(i,k,mrfspecies,inu))
    10381038          ENDDO
     
    10431043        DO k=1, KLEV
    10441044          DO i=1, KLON
    1045             tau_allaer(i,k,mrfspecies,inu)=tau_ae(i,k,id_ASSO4M,inu)+tau_ae(i,k,id_CSSO4M,inu)
     1045            tau_allaer(i,k,mrfspecies,inu)=tau_ae(i,k,id_ASSO4M_phy,inu)+tau_ae(i,k,id_CSSO4M_phy,inu)
    10461046            tau_allaer(i,k,mrfspecies,inu)=MAX(tau_allaer(i,k,mrfspecies,inu),1e-5)
    1047             piz_allaer(i,k,mrfspecies,inu)=(tau_ae(i,k,id_CSSO4M,inu)*piz_ae(i,k,id_CSSO4M,inu) &
    1048                       +tau_ae(i,k,id_ASSO4M,inu)*piz_ae(i,k,id_ASSO4M,inu))/ &
     1047            piz_allaer(i,k,mrfspecies,inu)=(tau_ae(i,k,id_CSSO4M_phy,inu)*piz_ae(i,k,id_CSSO4M_phy,inu) &
     1048                      +tau_ae(i,k,id_ASSO4M_phy,inu)*piz_ae(i,k,id_ASSO4M_phy,inu))/ &
    10491049                      tau_allaer(i,k,mrfspecies,inu)
    10501050            piz_allaer(i,k,mrfspecies,inu)=MAX(piz_allaer(i,k,mrfspecies,inu),0.1)
    1051             cg_allaer(i,k,mrfspecies,inu)=(tau_ae(i,k,id_CSSO4M,inu)*piz_ae(i,k,id_CSSO4M,inu) *cg_ae(i,k,id_CSSO4M,inu)&
    1052                       +tau_ae(i,k,id_ASSO4M,inu)*piz_ae(i,k,id_ASSO4M,inu)*cg_ae(i,k,id_ASSO4M,inu))/ &
     1051            cg_allaer(i,k,mrfspecies,inu)=(tau_ae(i,k,id_CSSO4M_phy,inu)*piz_ae(i,k,id_CSSO4M_phy,inu) *cg_ae(i,k,id_CSSO4M_phy,inu)&
     1052                      +tau_ae(i,k,id_ASSO4M_phy,inu)*piz_ae(i,k,id_ASSO4M_phy,inu)*cg_ae(i,k,id_ASSO4M_phy,inu))/ &
    10531053                      (tau_allaer(i,k,mrfspecies,inu)*piz_allaer(i,k,mrfspecies,inu))
    10541054          ENDDO
     
    10591059        DO k=1, KLEV
    10601060          DO i=1, KLON
    1061             tau_allaer(i,k,mrfspecies,inu)=tau_ae(i,k,id_ASPOMM,inu)+tau_ae(i,k,id_AIPOMM,inu)
     1061            tau_allaer(i,k,mrfspecies,inu)=tau_ae(i,k,id_ASPOMM_phy,inu)+tau_ae(i,k,id_AIPOMM_phy,inu)
    10621062            tau_allaer(i,k,mrfspecies,inu)=MAX(tau_allaer(i,k,mrfspecies,inu),1e-5)
    1063             piz_allaer(i,k,mrfspecies,inu)=(tau_ae(i,k,id_ASPOMM,inu)*piz_ae(i,k,id_ASPOMM,inu) &
    1064                       +tau_ae(i,k,id_AIPOMM,inu)*piz_ae(i,k,id_AIPOMM,inu))/ &
     1063            piz_allaer(i,k,mrfspecies,inu)=(tau_ae(i,k,id_ASPOMM_phy,inu)*piz_ae(i,k,id_ASPOMM_phy,inu) &
     1064                      +tau_ae(i,k,id_AIPOMM_phy,inu)*piz_ae(i,k,id_AIPOMM_phy,inu))/ &
    10651065                      tau_allaer(i,k,mrfspecies,inu)
    10661066            piz_allaer(i,k,mrfspecies,inu)=MAX(piz_allaer(i,k,mrfspecies,inu),0.1)
    1067             cg_allaer(i,k,mrfspecies,inu)=(tau_ae(i,k,id_ASPOMM,inu)*piz_ae(i,k,id_ASPOMM,inu) *cg_ae(i,k,id_ASPOMM,inu)&
    1068                       +tau_ae(i,k,id_AIPOMM,inu)*piz_ae(i,k,id_AIPOMM,inu)*cg_ae(i,k,id_AIPOMM,inu))/ &
     1067            cg_allaer(i,k,mrfspecies,inu)=(tau_ae(i,k,id_ASPOMM_phy,inu)*piz_ae(i,k,id_ASPOMM_phy,inu) *cg_ae(i,k,id_ASPOMM_phy,inu)&
     1068                      +tau_ae(i,k,id_AIPOMM_phy,inu)*piz_ae(i,k,id_AIPOMM_phy,inu)*cg_ae(i,k,id_AIPOMM_phy,inu))/ &
    10691069                      (tau_allaer(i,k,mrfspecies,inu)*piz_allaer(i,k,mrfspecies,inu))
    10701070          ENDDO
     
    10751075        DO k=1, KLEV
    10761076          DO i=1, KLON
    1077             tau_allaer(i,k,mrfspecies,inu)=tau_ae(i,k,id_CIDUSTM,inu)
     1077            tau_allaer(i,k,mrfspecies,inu)=tau_ae(i,k,id_CIDUSTM_phy,inu)
    10781078            tau_allaer(i,k,mrfspecies,inu)=MAX(tau_allaer(i,k,mrfspecies,inu),1e-5)
    1079             piz_allaer(i,k,mrfspecies,inu)=piz_ae(i,k,id_CIDUSTM,inu)
    1080             cg_allaer(i,k,mrfspecies,inu)=cg_ae(i,k,id_CIDUSTM,inu)
     1079            piz_allaer(i,k,mrfspecies,inu)=piz_ae(i,k,id_CIDUSTM_phy,inu)
     1080            cg_allaer(i,k,mrfspecies,inu)=cg_ae(i,k,id_CIDUSTM_phy,inu)
    10811081          ENDDO
    10821082        ENDDO
     
    10861086        DO k=1, KLEV
    10871087          DO i=1, KLON
    1088             tau_allaer(i,k,mrfspecies,inu)=tau_ae(i,k,id_ASSSM,inu)+tau_ae(i,k,id_CSSSM,inu)+tau_ae(i,k,id_SSSSM,inu)
     1088            tau_allaer(i,k,mrfspecies,inu)=tau_ae(i,k,id_ASSSM_phy,inu)+tau_ae(i,k,id_CSSSM_phy,inu)+tau_ae(i,k,id_SSSSM_phy,inu)
    10891089            tau_allaer(i,k,mrfspecies,inu)=MAX(tau_allaer(i,k,mrfspecies,inu),1e-5)
    1090             piz_allaer(i,k,mrfspecies,inu)=(tau_ae(i,k,id_ASSSM,inu)*piz_ae(i,k,id_ASSSM,inu) &
    1091                     +tau_ae(i,k,id_CSSSM,inu)*piz_ae(i,k,id_CSSSM,inu) &
    1092                     +tau_ae(i,k,id_SSSSM,inu)*piz_ae(i,k,id_SSSSM,inu))/ &
     1090            piz_allaer(i,k,mrfspecies,inu)=(tau_ae(i,k,id_ASSSM_phy,inu)*piz_ae(i,k,id_ASSSM_phy,inu) &
     1091                    +tau_ae(i,k,id_CSSSM_phy,inu)*piz_ae(i,k,id_CSSSM_phy,inu) &
     1092                    +tau_ae(i,k,id_SSSSM_phy,inu)*piz_ae(i,k,id_SSSSM_phy,inu))/ &
    10931093                    tau_allaer(i,k,mrfspecies,inu)
    10941094            piz_allaer(i,k,mrfspecies,inu)=MAX(piz_allaer(i,k,mrfspecies,inu),0.1)
    1095             cg_allaer(i,k,mrfspecies,inu)=(tau_ae(i,k,id_ASSSM,inu)*piz_ae(i,k,id_ASSSM,inu) *cg_ae(i,k,id_ASSSM,inu)&
    1096                     +tau_ae(i,k,id_CSSSM,inu)*piz_ae(i,k,id_CSSSM,inu)*cg_ae(i,k,id_CSSSM,inu) &
    1097                     +tau_ae(i,k,id_SSSSM,inu)*piz_ae(i,k,id_SSSSM,inu)*cg_ae(i,k,id_SSSSM,inu))/ &
     1095            cg_allaer(i,k,mrfspecies,inu)=(tau_ae(i,k,id_ASSSM_phy,inu)*piz_ae(i,k,id_ASSSM_phy,inu) *cg_ae(i,k,id_ASSSM_phy,inu)&
     1096                    +tau_ae(i,k,id_CSSSM_phy,inu)*piz_ae(i,k,id_CSSSM_phy,inu)*cg_ae(i,k,id_CSSSM_phy,inu) &
     1097                    +tau_ae(i,k,id_SSSSM_phy,inu)*piz_ae(i,k,id_SSSSM_phy,inu)*cg_ae(i,k,id_SSSSM_phy,inu))/ &
    10981098                    (tau_allaer(i,k,mrfspecies,inu)*piz_allaer(i,k,mrfspecies,inu))
    10991099          ENDDO
  • LMDZ5/trunk/libf/phylmd/aeropt_5wv.F90

    r1907 r2146  
    5757  REAL, DIMENSION(klon,klev), INTENT(in)   :: pdel
    5858  REAL, INTENT(in)                         :: delt
    59   REAL, DIMENSION(klon,klev,naero_spc), INTENT(in) :: m_allaer
     59  REAL, DIMENSION(klon,klev,naero_tot), INTENT(in) :: m_allaer
    6060  REAL, DIMENSION(klon,klev), INTENT(in)   :: RHcl     ! humidite relative ciel clair
    6161  INTEGER,INTENT(in)                       :: flag_aerosol
     
    6767  !
    6868  REAL, DIMENSION(klon), INTENT(out)          :: ai      ! POLDER aerosol index
    69   REAL, DIMENSION(klon,nwave,naero_spc), INTENT(out)      :: tausum
    70   REAL, DIMENSION(klon,klev,nwave,naero_spc), INTENT(out) :: tau
     69!  REAL, DIMENSION(klon,nwave,naero_spc), INTENT(out)      :: tausum
     70!  REAL, DIMENSION(klon,klev,nwave,naero_spc), INTENT(out) :: tau
     71  REAL, DIMENSION(klon,nwave,naero_tot), INTENT(out)      :: tausum
     72  REAL, DIMENSION(klon,klev,nwave,naero_tot), INTENT(out) :: tau
    7173
    7274
     
    7779  LOGICAL :: soluble
    7880 
    79   INTEGER :: i, k, ierr, m
     81  INTEGER :: i, k, ierr, m, aerindex
    8082  INTEGER :: spsol, spinsol, spss, la
    8183  INTEGER :: RH_num(klon,klev)
     
    156158  REAL :: piz_aeri_5wv(las,naero_insoluble)           ! Insoluble comp. 1- Dust: 2- BC; 3- POM
    157159
    158   REAL, DIMENSION(klon,klev,naero_spc) :: mass_temp
     160  REAL, DIMENSION(klon,klev,naero_tot) :: mass_temp
    159161 
    160162  !
     
    639641     nb_aer = 2
    640642     ALLOCATE (aerosol_name(nb_aer))
    641      aerosol_name(1) = id_ASSO4M
    642      aerosol_name(2) = id_CSSO4M
     643     aerosol_name(1) = id_ASSO4M_phy
     644     aerosol_name(2) = id_CSSO4M_phy
    643645  ELSEIF (flag_aerosol .EQ. 2) THEN
    644646     nb_aer = 2
    645647     ALLOCATE (aerosol_name(nb_aer))
    646      aerosol_name(1) = id_ASBCM
    647      aerosol_name(2) = id_AIBCM
     648     aerosol_name(1) = id_ASBCM_phy
     649     aerosol_name(2) = id_AIBCM_phy
    648650  ELSEIF (flag_aerosol .EQ. 3) THEN
    649651     nb_aer = 2
    650652     ALLOCATE (aerosol_name(nb_aer))
    651      aerosol_name(1) = id_ASPOMM
    652      aerosol_name(2) = id_AIPOMM
     653     aerosol_name(1) = id_ASPOMM_phy
     654     aerosol_name(2) = id_AIPOMM_phy
    653655  ELSEIF (flag_aerosol .EQ. 4) THEN
    654656     nb_aer = 3
    655657     ALLOCATE (aerosol_name(nb_aer))
    656      aerosol_name(1) = id_CSSSM
    657      aerosol_name(2) = id_SSSSM
    658      aerosol_name(3) = id_ASSSM
     658     aerosol_name(1) = id_CSSSM_phy
     659     aerosol_name(2) = id_SSSSM_phy
     660     aerosol_name(3) = id_ASSSM_phy
    659661  ELSEIF (flag_aerosol .EQ. 5) THEN
    660662     nb_aer = 1
    661663     ALLOCATE (aerosol_name(nb_aer))
    662      aerosol_name(1) = id_CIDUSTM
     664     aerosol_name(1) = id_CIDUSTM_phy
    663665  ELSEIF (flag_aerosol .EQ. 6) THEN
    664666     nb_aer = 10
    665667     ALLOCATE (aerosol_name(nb_aer))
    666      aerosol_name(1) = id_ASSO4M     
    667      aerosol_name(2) = id_ASBCM
    668      aerosol_name(3) = id_AIBCM
    669      aerosol_name(4) = id_ASPOMM
    670      aerosol_name(5) = id_AIPOMM
    671      aerosol_name(6) = id_CSSSM
    672      aerosol_name(7) = id_SSSSM
    673      aerosol_name(8) = id_ASSSM
    674      aerosol_name(9) = id_CIDUSTM
    675      aerosol_name(10) = id_CSSO4M
     668     aerosol_name(1) = id_ASSO4M_phy
     669     aerosol_name(2) = id_ASBCM_phy
     670     aerosol_name(3) = id_AIBCM_phy
     671     aerosol_name(4) = id_ASPOMM_phy
     672     aerosol_name(5) = id_AIPOMM_phy
     673     aerosol_name(6) = id_CSSSM_phy
     674     aerosol_name(7) = id_SSSSM_phy
     675     aerosol_name(8) = id_ASSSM_phy
     676     aerosol_name(9) = id_CIDUSTM_phy
     677     aerosol_name(10) = id_CSSO4M_phy
    676678  ENDIF
    677679
     
    712714  DO m=1,nb_aer   ! tau is only computed for each mass   
    713715    fac=1.0
    714     IF (aerosol_name(m).EQ.id_ASBCM) THEN
     716    IF (aerosol_name(m).EQ.id_ASBCM_phy) THEN
    715717        soluble=.TRUE.
    716718        spsol=1
    717719        spss=0
    718     ELSEIF (aerosol_name(m).EQ.id_ASPOMM) THEN
     720    ELSEIF (aerosol_name(m).EQ.id_ASPOMM_phy) THEN
    719721        soluble=.TRUE.
    720722        spsol=2
    721723        spss=0
    722     ELSEIF (aerosol_name(m).EQ.id_ASSO4M) THEN
     724    ELSEIF (aerosol_name(m).EQ.id_ASSO4M_phy) THEN
    723725        soluble=.TRUE.
    724726        spsol=3
    725727        spss=0
    726728        fac=1.375    ! (NH4)2-SO4/SO4 132/96 mass conversion factor for OD
    727     ELSEIF (aerosol_name(m).EQ.id_CSSO4M) THEN
     729    ELSEIF (aerosol_name(m).EQ.id_CSSO4M_phy) THEN
    728730        soluble=.TRUE.
    729731        spsol=4
    730732        spss=0
    731733        fac=1.375    ! (NH4)2-SO4/SO4 132/96 mass conversion factor for OD
    732     ELSEIF (aerosol_name(m).EQ.id_SSSSM) THEN
     734    ELSEIF (aerosol_name(m).EQ.id_SSSSM_phy) THEN
    733735        soluble=.TRUE.
    734736        spsol=5
    735737        spss=3
    736     ELSEIF (aerosol_name(m).EQ.id_CSSSM) THEN
     738    ELSEIF (aerosol_name(m).EQ.id_CSSSM_phy) THEN
    737739        soluble=.TRUE.
    738740        spsol=6
    739741        spss=2
    740     ELSEIF (aerosol_name(m).EQ.id_ASSSM) THEN
     742    ELSEIF (aerosol_name(m).EQ.id_ASSSM_phy) THEN
    741743        soluble=.TRUE.
    742744        spsol=7
    743745        spss=1
    744     ELSEIF (aerosol_name(m).EQ.id_CIDUSTM) THEN
     746    ELSEIF (aerosol_name(m).EQ.id_CIDUSTM_phy) THEN
    745747        soluble=.FALSE.
    746748        spinsol=1
    747749        spss=0
    748     ELSEIF  (aerosol_name(m).EQ.id_AIBCM) THEN
     750    ELSEIF  (aerosol_name(m).EQ.id_AIBCM_phy) THEN
    749751        soluble=.FALSE.
    750752        spinsol=2
    751753        spss=0
    752     ELSEIF (aerosol_name(m).EQ.id_AIPOMM) THEN
     754    ELSEIF (aerosol_name(m).EQ.id_AIPOMM_phy) THEN
    753755        soluble=.FALSE.
    754756        spinsol=3
     
    765767      used_tau(naero_soluble+spinsol)=.TRUE.
    766768    ENDIF
     769
     770    aerindex=aerosol_name(m)
    767771
    768772    DO la=1,las
     
    779783                H=rh(i,k)/100
    780784                tau_ae5wv_int=A1_ASSSM(k)+A2_ASSSM(k)*H+A3_ASSSM(k)/(H-1.05)
    781                 tau(i,k,la,spsol) = mass_temp(i,k,spsol)*1000.*zdp1(i,k)   &
     785                tau(i,k,la,aerindex) = mass_temp(i,k,aerindex)*1000.*zdp1(i,k)   &
    782786                                   *tau_ae5wv_int*delt*fac
    783                 tausum(i,la,spsol)=tausum(i,la,spsol)+tau(i,k,la,spsol)
     787                tausum(i,la,aerindex)=tausum(i,la,aerindex)+tau(i,k,la,aerindex)
    784788              ENDDO
    785789            ENDDO
     
    794798                H=rh(i,k)/100
    795799                tau_ae5wv_int=A1_CSSSM(k)+A2_CSSSM(k)*H+A3_CSSSM(k)/(H-1.05)
    796                 tau(i,k,la,spsol) = mass_temp(i,k,spsol)*1000.*zdp1(i,k)  &
     800                tau(i,k,la,aerindex) = mass_temp(i,k,aerindex)*1000.*zdp1(i,k)  &
    797801                                   *tau_ae5wv_int*delt*fac
    798                 tausum(i,la,spsol) = tausum(i,la,spsol)+tau(i,k,la,spsol)
     802                tausum(i,la,aerindex) = tausum(i,la,aerindex)+tau(i,k,la,aerindex)
    799803              ENDDO
    800804            ENDDO
     
    809813                H=rh(i,k)/100
    810814                tau_ae5wv_int=A1_SSSSM(k)+A2_SSSSM(k)*H+A3_SSSSM(k)/(H-1.05)
    811                 tau(i,k,la,spsol) = mass_temp(i,k,spsol)*1000.*zdp1(i,k)  &
     815                tau(i,k,la,aerindex) = mass_temp(i,k,aerindex)*1000.*zdp1(i,k)  &
    812816                                   *tau_ae5wv_int*delt*fac
    813                 tausum(i,la,spsol)=tausum(i,la,spsol)+tau(i,k,la,spsol)
     817                tausum(i,la,aerindex)=tausum(i,la,aerindex)+tau(i,k,la,aerindex)
    814818              ENDDO
    815819            ENDDO
     
    824828                              alpha_aers_5wv(RH_num(i,k),la,spsol))
    825829
    826               tau(i,k,la,spsol) = mass_temp(i,k,spsol)*1000.*zdp1(i,k)   &
     830              tau(i,k,la,aerindex) = mass_temp(i,k,aerindex)*1000.*zdp1(i,k)   &
    827831                                 *tau_ae5wv_int*delt*fac
    828               tausum(i,la,spsol)=tausum(i,la,spsol)+tau(i,k,la,spsol)
     832              tausum(i,la,aerindex)=tausum(i,la,aerindex)+tau(i,k,la,aerindex)
    829833            ENDDO
    830834          ENDDO
     
    836840          DO i=1, KLON
    837841            tau_ae5wv_int = alpha_aeri_5wv(la,spinsol)
    838             tau(i,k,la,naero_soluble+spinsol) = mass_temp(i,k,naero_soluble+spinsol)*1000.*zdp1(i,k)* &
     842            tau(i,k,la,aerindex) = mass_temp(i,k,aerindex)*1000.*zdp1(i,k)* &
    839843                                                tau_ae5wv_int*delt*fac
    840             tausum(i,la,naero_soluble+spinsol)= tausum(i,la,naero_soluble+spinsol)  &
    841                                                +tau(i,k,la,naero_soluble+spinsol)
     844            tausum(i,la,aerindex)= tausum(i,la,aerindex)+tau(i,k,la,aerindex)
    842845          ENDDO
    843846        ENDDO
     
    880883  END DO
    881884 
    882    od550lt1aer(:)=tausum(:,2,id_ASSO4M)+tausum(:,2,id_ASBCM)+tausum(:,2,id_AIBCM)+ &
    883         tausum(:,2,id_ASPOMM)+tausum(:,2,id_AIPOMM)+tausum(:,2,id_ASSSM)+ &
    884         0.03*tausum(:,2,id_CSSSM)+0.4*tausum(:,2,id_CIDUSTM)
     885   od550lt1aer(:)=tausum(:,2,id_ASSO4M_phy)+tausum(:,2,id_ASBCM_phy)+tausum(:,2,id_AIBCM_phy)+ &
     886        tausum(:,2,id_ASPOMM_phy)+tausum(:,2,id_AIPOMM_phy)+tausum(:,2,id_ASSSM_phy)+ &
     887        0.03*tausum(:,2,id_CSSSM_phy)+0.4*tausum(:,2,id_CIDUSTM_phy)
    885888
    886889
  • LMDZ5/trunk/libf/phylmd/phys_local_var_mod.F90

    r2136 r2146  
    9696      REAL, SAVE, ALLOCATABLE :: topswcf_aero(:,:),  solswcf_aero(:,:)  ! diag
    9797      !$OMP THREADPRIVATE(topswcf_aero,solswcf_aero)
     98! LW radiation diagnostics CK
     99      REAL, SAVE, ALLOCATABLE :: toplwad_aero(:),  sollwad_aero(:)      ! diag
     100      !$OMP THREADPRIVATE(toplwad_aero,sollwad_aero)
     101      REAL, SAVE, ALLOCATABLE :: toplwai_aero(:),  sollwai_aero(:)      ! diag
     102      !$OMP THREADPRIVATE(toplwai_aero,sollwai_aero)
     103      REAL, SAVE, ALLOCATABLE :: toplwad0_aero(:), sollwad0_aero(:)     ! diag
     104      !$OMP THREADPRIVATE(toplwad0_aero,sollwad0_aero)
    98105! Special RRTM
    99106      REAL, SAVE, ALLOCATABLE :: ZLWFT0_i(:,:),  ZSWFT0_i(:,:)      ! diag
     
    140147      REAL, SAVE, ALLOCATABLE :: sconcso4(:)
    141148      !$OMP THREADPRIVATE(sconcso4)
     149      REAL, SAVE, ALLOCATABLE :: sconcno3(:)
     150      !$OMP THREADPRIVATE(sconcno3)
    142151      REAL, SAVE, ALLOCATABLE :: sconcoa(:)
    143152      !$OMP THREADPRIVATE(sconcoa)
     
    150159      REAL, SAVE, ALLOCATABLE :: concso4(:,:)
    151160      !$OMP THREADPRIVATE(concso4)
     161      REAL, SAVE, ALLOCATABLE :: concno3(:,:)
     162      !$OMP THREADPRIVATE(concno3)
    152163      REAL, SAVE, ALLOCATABLE :: concoa(:,:)
    153164      !$OMP THREADPRIVATE(concoa)
     
    197208!$OMP THREADPRIVATE(topswcf_aerop, solswcf_aerop)
    198209
     210! additional LW variables CK
     211      REAL,ALLOCATABLE,SAVE :: toplwad_aerop(:), sollwad_aerop(:)
     212!$OMP THREADPRIVATE(toplwad_aerop, sollwad_aerop)
     213      REAL,ALLOCATABLE,SAVE :: toplwai_aerop(:), sollwai_aerop(:)
     214!$OMP THREADPRIVATE(toplwai_aerop, sollwai_aerop)
     215      REAL,ALLOCATABLE,SAVE :: toplwad0_aerop(:), sollwad0_aerop(:)
     216!$OMP THREADPRIVATE(toplwad0_aerop, sollwad0_aerop)
    199217
    200218!Ajout de celles nécessaires au phys_output_write_mod
     
    337355      allocate(topswai_aero(klon), solswai_aero(klon))
    338356      allocate(topswad0_aero(klon), solswad0_aero(klon))
     357     ! LW diagnostics CK
     358      allocate(toplwad_aero(klon), sollwad_aero(klon))
     359      allocate(toplwai_aero(klon), sollwai_aero(klon))
     360      allocate(toplwad0_aero(klon), sollwad0_aero(klon))
     361      ! end
    339362      allocate(topsw_aero(klon,naero_grp), solsw_aero(klon,naero_grp))
    340363      allocate(topsw0_aero(klon,naero_grp), solsw0_aero(klon,naero_grp))
     
    363386      allocate(od550lt1aer(klon))               
    364387      allocate(sconcso4(klon))
     388      allocate(sconcno3(klon))
    365389      allocate(sconcoa(klon))
    366390      allocate(sconcbc(klon))
     
    368392      allocate(sconcdust(klon))
    369393      allocate(concso4(klon,klev))
     394      allocate(concno3(klon,klev))
    370395      allocate(concoa(klon,klev))
    371396      allocate(concbc(klon,klev))
     
    392417      ALLOCATE(solsw_aerop(klon,naero_grp), solsw0_aerop(klon,naero_grp))
    393418      ALLOCATE(topswcf_aerop(klon,naero_grp), solswcf_aerop(klon,naero_grp))
     419
     420! additional LW variables CK
     421      ALLOCATE(toplwad_aerop(klon), sollwad_aerop(klon))
     422      ALLOCATE(toplwai_aerop(klon), sollwai_aerop(klon))
     423      ALLOCATE(toplwad0_aerop(klon), sollwad0_aerop(klon))
    394424
    395425! FH Ajout de celles nécessaires au phys_output_write_mod
     
    496526      deallocate(topswai_aero,solswai_aero)
    497527      deallocate(topswad0_aero,solswad0_aero)
     528      ! LW additional CK
     529      deallocate(toplwad_aero,sollwad_aero)
     530      deallocate(toplwai_aero,sollwai_aero)
     531      deallocate(toplwad0_aero,sollwad0_aero)
     532      ! end
    498533      deallocate(topsw_aero,solsw_aero)
    499534      deallocate(topsw0_aero,solsw0_aero)
     
    517552      deallocate(od550lt1aer)
    518553      deallocate(sconcso4)
     554      deallocate(sconcno3)
    519555      deallocate(sconcoa)
    520556      deallocate(sconcbc)
     
    522558      deallocate(sconcdust)
    523559      deallocate(concso4)
     560      deallocate(concno3)
    524561      deallocate(concoa)
    525562      deallocate(concbc)
     
    549586      deallocate(topswcf_aerop, solswcf_aerop)
    550587
     588!CK LW diagnostics
     589      deallocate(toplwad_aerop, sollwad_aerop)
     590      deallocate(toplwai_aerop, sollwai_aerop)
     591      deallocate(toplwad0_aerop, sollwad0_aerop)
    551592
    552593! FH Ajout de celles nécessaires au phys_output_write_mod
  • LMDZ5/trunk/libf/phylmd/phys_output_ctrlout_mod.F90

    r2136 r2146  
    33  USE phys_output_var_mod
    44  USE indice_sol_mod
    5   USE aero_mod, only : naero_tot,name_aero_tau
     5  USE aero_mod
    66
    77
     
    736736  TYPE(ctrl_out), SAVE :: o_solswai = ctrl_out((/ 2, 10, 10, 10, 10, 10, 11, 11, 11 /), &
    737737    'solswai', 'AIE at SFR', 'W/m2', (/ ('', i=1, 9) /))
    738 
    739   type(ctrl_out),save,dimension(naero_tot) :: o_tausumaero  =                           &
    740     (/ ctrl_out((/ 2, 6, 10, 10, 10, 10, 11, 11, 11 /),'OD550_ASBCM',                        &
    741       "Aerosol Optical depth at 550 nm "//name_aero_tau(1),"1", (/ ('', i=1, 9) /)), &
    742        ctrl_out((/ 2, 6, 10, 10, 10, 10, 11, 11, 11 /),'OD550_ASPOMM',                       &
    743       "Aerosol Optical depth at 550 nm "//name_aero_tau(2),"1", (/ ('', i=1, 9) /)), &
    744        ctrl_out((/ 2, 6, 10, 10, 10, 10, 11, 11, 11 /),'OD550_ASSO4M',                       &
    745       "Aerosol Optical depth at 550 nm "//name_aero_tau(3),"1", (/ ('', i=1, 9) /)), &
    746        ctrl_out((/ 2, 6, 10, 10, 10, 10, 11, 11, 11 /),'OD550_CSSO4M',                       &
    747       "Aerosol Optical depth at 550 nm "//name_aero_tau(4),"1", (/ ('', i=1, 9) /)), &
    748        ctrl_out((/ 2, 6, 10, 10, 10, 10, 11, 11, 11 /),'OD550_SSSSM',                        &
    749       "Aerosol Optical depth at 550 nm "//name_aero_tau(5),"1", (/ ('', i=1, 9) /)), &
    750        ctrl_out((/ 2, 6, 10, 10, 10, 10, 11, 11, 11 /),'OD550_ASSSM',                        &
    751       "Aerosol Optical depth at 550 nm "//name_aero_tau(6),"1", (/ ('', i=1, 9) /)), &
    752        ctrl_out((/ 2, 6, 10, 10, 10, 10, 11, 11, 11 /),'OD550_CSSSM',                        &
    753       "Aerosol Optical depth at 550 nm "//name_aero_tau(7),"1", (/ ('', i=1, 9) /)), &
    754        ctrl_out((/ 2, 6, 10, 10, 10, 10, 11, 11, 11 /),'OD550_CIDUSTM',                      &
    755       "Aerosol Optical depth at 550 nm "//name_aero_tau(8),"1", (/ ('', i=1, 9) /)), &
    756        ctrl_out((/ 2, 6, 10, 10, 10, 10, 11, 11, 11 /),'OD550_AIBCM',                        &
    757       "Aerosol Optical depth at 550 nm "//name_aero_tau(9),"1", (/ ('', i=1, 9) /)), &
    758        ctrl_out((/ 2, 6, 10, 10, 10, 10, 11, 11, 11 /),'OD550_AIPOMM',                       &
    759       "Aerosol Optical depth at 550 nm "//name_aero_tau(10),"1", (/ ('', i=1, 9) /)),&
    760        ctrl_out((/ 2, 2, 10, 10, 10, 10, 11, 11, 11 /),'OD550_STRAT',                        &
    761       "Aerosol Optical depth at 550 nm "//name_aero_tau(11),"1", (/ ('', i=1, 9) /)) /)
     738  TYPE(ctrl_out), SAVE :: o_toplwad = ctrl_out((/ 2, 10, 10, 10, 10, 10, 11, 11, 11 /), &
     739    'toplwad', 'LW-ADE at TOA', 'W/m2', (/ ('', i=1, 9) /))
     740  TYPE(ctrl_out), SAVE :: o_toplwad0 = ctrl_out((/ 2, 10, 10, 10, 10, 10, 11, 11, 11 /), &
     741    'toplwad0', 'LW-ADE clear-sky at TOA', 'W/m2', (/ ('', i=1, 9) /))
     742  TYPE(ctrl_out), SAVE :: o_toplwai = ctrl_out((/ 2, 10, 10, 10, 10, 10, 11, 11, 11 /), &
     743    'toplwai', 'LW-AIE at TOA', 'W/m2', (/ ('', i=1, 9) /))
     744  TYPE(ctrl_out), SAVE :: o_sollwad = ctrl_out((/ 2, 10, 10, 10, 10, 10, 11, 11, 11 /), &
     745    'sollwad', 'LW-ADE at SRF', 'W/m2', (/ ('', i=1, 9) /))
     746  TYPE(ctrl_out), SAVE :: o_sollwad0 = ctrl_out((/ 2, 10, 10, 10, 10, 10, 11, 11, 11 /), &
     747    'sollwad0', 'LW-ADE clear-sky at SRF', 'W/m2', (/ ('', i=1, 9) /))
     748  TYPE(ctrl_out), SAVE :: o_sollwai = ctrl_out((/ 2, 10, 10, 10, 10, 10, 11, 11, 11 /), &
     749    'sollwai', 'LW-AIE at SFR', 'W/m2', (/ ('', i=1, 9) /))
     750
     751  type(ctrl_out),save,dimension(naero_tot) :: o_tausumaero =                           &
     752    (/ ctrl_out((/ 2, 6, 10, 10, 10, 10, 11, 11, 11 /),'OD550_'//name_aero_tau(1),      &
     753      "Aerosol Optical depth at 550 nm "//name_aero_tau(1),"1", (/ ('', i=1, 9) /)),    &
     754       ctrl_out((/ 2, 6, 10, 10, 10, 10, 11, 11, 11 /),'OD550_'//name_aero_tau(2),      &
     755      "Aerosol Optical depth at 550 nm "//name_aero_tau(2),"2", (/ ('', i=1, 9) /)),    &
     756       ctrl_out((/ 2, 6, 10, 10, 10, 10, 11, 11, 11 /),'OD550_'//name_aero_tau(3),      &
     757      "Aerosol Optical depth at 550 nm "//name_aero_tau(2),"3", (/ ('', i=1, 9) /)),    &
     758       ctrl_out((/ 2, 6, 10, 10, 10, 10, 11, 11, 11 /),'OD550_'//name_aero_tau(4),      &
     759      "Aerosol Optical depth at 550 nm "//name_aero_tau(2),"4", (/ ('', i=1, 9) /)),    &
     760       ctrl_out((/ 2, 6, 10, 10, 10, 10, 11, 11, 11 /),'OD550_'//name_aero_tau(5),      &
     761      "Aerosol Optical depth at 550 nm "//name_aero_tau(2),"5", (/ ('', i=1, 9) /)),    &
     762       ctrl_out((/ 2, 6, 10, 10, 10, 10, 11, 11, 11 /),'OD550_'//name_aero_tau(6),      &
     763      "Aerosol Optical depth at 550 nm "//name_aero_tau(2),"6", (/ ('', i=1, 9) /)),    &
     764       ctrl_out((/ 2, 6, 10, 10, 10, 10, 11, 11, 11 /),'OD550_'//name_aero_tau(7),      &
     765      "Aerosol Optical depth at 550 nm "//name_aero_tau(2),"7", (/ ('', i=1, 9) /)),    &
     766       ctrl_out((/ 2, 6, 10, 10, 10, 10, 11, 11, 11 /),'OD550_'//name_aero_tau(8),      &
     767      "Aerosol Optical depth at 550 nm "//name_aero_tau(2),"8", (/ ('', i=1, 9) /)),    &
     768       ctrl_out((/ 2, 6, 10, 10, 10, 10, 11, 11, 11 /),'OD550_'//name_aero_tau(9),      &
     769      "Aerosol Optical depth at 550 nm "//name_aero_tau(2),"9", (/ ('', i=1, 9) /)),    &
     770       ctrl_out((/ 2, 6, 10, 10, 10, 10, 11, 11, 11 /),'OD550_'//name_aero_tau(10),     &
     771      "Aerosol Optical depth at 550 nm "//name_aero_tau(2),"10", (/ ('', i=1, 9) /)),   &
     772       ctrl_out((/ 2, 6, 10, 10, 10, 10, 11, 11, 11 /),'OD550_'//name_aero_tau(11),     &
     773      "Aerosol Optical depth at 550 nm "//name_aero_tau(2),"11", (/ ('', i=1, 9) /)),   &
     774       ctrl_out((/ 2, 6, 10, 10, 10, 10, 11, 11, 11 /),'OD550_'//name_aero_tau(12),     &
     775      "Aerosol Optical depth at 550 nm "//name_aero_tau(2),"12", (/ ('', i=1, 9) /)),   &
     776       ctrl_out((/ 2, 6, 10, 10, 10, 10, 11, 11, 11 /),'OD550_'//name_aero_tau(13),     &
     777      "Aerosol Optical depth at 550 nm "//name_aero_tau(2),"13", (/ ('', i=1, 9) /)),   &
     778       ctrl_out((/ 2, 6, 10, 10, 10, 10, 11, 11, 11 /),'OD550_'//name_aero_tau(14),     &
     779      "Aerosol Optical depth at 550 nm "//name_aero_tau(2),"14", (/ ('', i=1, 9) /))   /)
     780
     781
     782!
     783  TYPE(ctrl_out), SAVE :: o_tausumaero_lw = ctrl_out((/ 2, 6, 10, 10, 10, 10, 11, 11, 11 /), &
     784    'OD_10um_STRAT', 'Stratospheric Aerosol Optical depth at 10 um ', '1', (/ ('', i=1, 9) /))
    762785!
    763786  TYPE(ctrl_out), SAVE :: o_od550aer = ctrl_out((/ 2, 6, 10, 10, 10, 10, 11, 11, 11 /), &
     
    771794  TYPE(ctrl_out), SAVE :: o_sconcso4 = ctrl_out((/ 2, 6, 10, 10, 10, 10, 11, 11, 11 /), &
    772795    'sconcso4', 'Surface Concentration of Sulfate ', 'kg/m3', (/ ('', i=1, 9) /))
     796  TYPE(ctrl_out), SAVE :: o_sconcno3 = ctrl_out((/ 2, 6, 10, 10, 10, 10, 11, 11, 11 /), &
     797    'sconcno3', 'Surface Concentration of Nitrate ', 'kg/m3', (/ ('', i=1, 9) /))
    773798  TYPE(ctrl_out), SAVE :: o_sconcoa = ctrl_out((/ 2, 6, 10, 10, 10, 10, 11, 11, 11 /), &
    774799    'sconcoa', 'Surface Concentration of Organic Aerosol ', 'kg/m3', (/ ('', i=1, 9) /))
     
    781806  TYPE(ctrl_out), SAVE :: o_concso4 = ctrl_out((/ 2, 6, 10, 10, 10, 10, 11, 11, 11 /), &
    782807    'concso4', 'Concentration of Sulfate ', 'kg/m3', (/ ('', i=1, 9) /))
     808  TYPE(ctrl_out), SAVE :: o_concno3 = ctrl_out((/ 2, 6, 10, 10, 10, 10, 11, 11, 11 /), &
     809    'concno3', 'Concentration of Nitrate ', 'kg/m3', (/ ('', i=1, 9) /))
    783810  TYPE(ctrl_out), SAVE :: o_concoa = ctrl_out((/ 2, 6, 10, 10, 10, 10, 11, 11, 11 /), &
    784811    'concoa', 'Concentration of Organic Aerosol ', 'kg/m3', (/ ('', i=1, 9) /))
  • LMDZ5/trunk/libf/phylmd/phys_output_write_mod.F90

    r2144 r2146  
    8989         o_dtsvdfg, o_dtsvdfi, o_rugs, o_od550aer, &
    9090         o_od865aer, o_absvisaer, o_od550lt1aer, &
    91          o_sconcso4, o_sconcoa, o_sconcbc, &
    92          o_sconcss, o_sconcdust, o_concso4, &
     91         o_sconcso4, o_sconcno3, o_sconcoa, o_sconcbc, &
     92         o_sconcss, o_sconcdust, o_concso4, o_concno3, &
    9393         o_concoa, o_concbc, o_concss, o_concdust, &
    9494         o_loadso4, o_loadoa, o_loadbc, o_loadss, &
    95          o_loaddust, o_tausumaero, o_topswad, &
    96          o_topswad0, o_solswad, o_solswad0, &
     95         o_loaddust, o_tausumaero, o_tausumaero_lw, &
     96         o_topswad, o_topswad0, o_solswad, o_solswad0, &
     97         o_toplwad, o_toplwad0, o_sollwad, o_sollwad0, &
    9798         o_swtoaas_nat, o_swsrfas_nat, &
    9899         o_swtoacs_nat, o_swtoaas_ant, &
     
    195196         pmflxr, pmflxs, prfl, psfl, re, fl, rh2m, &
    196197         qsat2m, tpote, tpot, d_ts, zxrugs, od550aer, &
    197          od865aer, absvisaer, od550lt1aer, sconcso4, &
    198          sconcoa, sconcbc, sconcss, sconcdust, concso4, &
     198         od865aer, absvisaer, od550lt1aer, sconcso4, sconcno3, &
     199         sconcoa, sconcbc, sconcss, sconcdust, concso4, concno3, &
    199200         concoa, concbc, concss, concdust, loadso4, &
    200201         loadoa, loadbc, loadss, loaddust, tausum_aero, &
     
    203204         topsw0_aero, solsw0_aero, topswcf_aero, &
    204205         solswcf_aero, topswai_aero, solswai_aero, &
     206         toplwad_aero, toplwad0_aero, sollwad_aero, &
     207         sollwad0_aero, toplwai_aero, sollwai_aero, &
    205208         scdnc, cldncl, reffclws, reffclwc, cldnvi, &
    206209         lcc, lcc3d, lcc3dcon, lcc3dstra, reffclwtop, &
     
    228231    USE surface_data, only: type_ocean, ok_veget, ok_snow
    229232!    USE aero_mod, only: naero_spc
    230     USE aero_mod, only: naero_tot
     233    USE aero_mod, only: naero_tot, id_STRAT_phy
    231234    USE ioipsl, only: histend, histsync
    232235    USE iophy, only: set_itau_iophy, histwrite_phy
     
    331334       CALL histwrite_phy(o_t2m_min, zt2m)
    332335       CALL histwrite_phy(o_t2m_max, zt2m)
    333        if (.not. ok_all_xml) then
    334          CALL histwrite_phy(o_t2m_max_mon, t2m_max_mon)
    335          CALL histwrite_phy(o_t2m_min_mon, t2m_min_mon)
    336        endif
     336       CALL histwrite_phy(o_t2m_max_mon, t2m_max_mon)
     337       CALL histwrite_phy(o_t2m_min_mon, t2m_min_mon)
    337338
    338339       IF (vars_defined) THEN
     
    795796       CALL histwrite_phy(o_rugs, zxrugs)
    796797       ! OD550 per species
    797        IF (new_aod .and. (.not. aerosol_couple)) THEN
     798!--OLIVIER
     799!This is warranted by treating INCA aerosols as offline aerosols
     800!       IF (new_aod .and. (.not. aerosol_couple)) THEN
     801       IF (new_aod) THEN
    798802          IF (flag_aerosol.GT.0) THEN
    799803             CALL histwrite_phy(o_od550aer, od550aer)
     
    802806             CALL histwrite_phy(o_od550lt1aer, od550lt1aer)
    803807             CALL histwrite_phy(o_sconcso4, sconcso4)
     808             CALL histwrite_phy(o_sconcno3, sconcno3)
    804809             CALL histwrite_phy(o_sconcoa, sconcoa)
    805810             CALL histwrite_phy(o_sconcbc, sconcbc)
     
    807812             CALL histwrite_phy(o_sconcdust, sconcdust)
    808813             CALL histwrite_phy(o_concso4, concso4)
     814             CALL histwrite_phy(o_concno3, concno3)
    809815             CALL histwrite_phy(o_concoa, concoa)
    810816             CALL histwrite_phy(o_concbc, concbc)
     
    826832             END DO
    827833          ENDIF
     834          IF (flag_aerosol_strat) THEN
     835             CALL histwrite_phy(o_tausumaero_lw, &
     836                  tausum_aero(:,6,id_STRAT_phy) )
     837          ENDIF
    828838       ENDIF
    829839       IF (ok_ade) THEN
     
    832842          CALL histwrite_phy(o_solswad, solswad_aero)
    833843          CALL histwrite_phy(o_solswad0, solswad0_aero)
     844          CALL histwrite_phy(o_toplwad, toplwad_aero)
     845          CALL histwrite_phy(o_toplwad0, toplwad0_aero)
     846          CALL histwrite_phy(o_sollwad, sollwad_aero)
     847          CALL histwrite_phy(o_sollwad0, sollwad0_aero)
    834848          !====MS forcing diagnostics
    835849          if (new_aod) then
  • LMDZ5/trunk/libf/phylmd/phys_state_var_mod.F90

    r2003 r2146  
    349349      REAL,SAVE,ALLOCATABLE :: tau_aero(:,:,:,:), piz_aero(:,:,:,:), cg_aero(:,:,:,:)
    350350!$OMP THREADPRIVATE(tau_aero, piz_aero, cg_aero)
    351       REAL,SAVE,ALLOCATABLE :: tau_aero_rrtm(:,:,:,:), piz_aero_rrtm(:,:,:,:), cg_aero_rrtm(:,:,:,:)
    352 !$OMP THREADPRIVATE(tau_aero_rrtm, piz_aero_rrtm, cg_aero_rrtm)
     351      REAL,SAVE,ALLOCATABLE :: tau_aero_sw_rrtm(:,:,:,:), piz_aero_sw_rrtm(:,:,:,:), cg_aero_sw_rrtm(:,:,:,:)
     352!$OMP THREADPRIVATE(tau_aero_sw_rrtm, piz_aero_sw_rrtm, cg_aero_sw_rrtm)
     353      REAL,SAVE,ALLOCATABLE :: tau_aero_lw_rrtm(:,:,:,:), piz_aero_lw_rrtm(:,:,:,:), cg_aero_lw_rrtm(:,:,:,:)
     354!$OMP THREADPRIVATE(tau_aero_lw_rrtm, piz_aero_lw_rrtm, cg_aero_lw_rrtm)
    353355      REAL,SAVE,ALLOCATABLE :: ccm(:,:,:)
    354356!$OMP THREADPRIVATE(ccm)
     
    519521      ALLOCATE(topswai(klon), solswai(klon))
    520522      ALLOCATE(tau_aero(klon,klev,naero_grp,nbands),piz_aero(klon,klev,naero_grp,nbands),cg_aero(klon,klev,naero_grp,nbands))
    521       ALLOCATE(tau_aero_rrtm(klon,klev,2,nbands_rrtm),piz_aero_rrtm(klon,klev,2,nbands_rrtm))
    522       ALLOCATE(cg_aero_rrtm(klon,klev,2,nbands_rrtm))
     523      ALLOCATE(tau_aero_sw_rrtm(klon,klev,2,nbands_sw_rrtm),piz_aero_sw_rrtm(klon,klev,2,nbands_sw_rrtm))
     524      ALLOCATE(cg_aero_sw_rrtm(klon,klev,2,nbands_sw_rrtm))
     525      ALLOCATE(tau_aero_lw_rrtm(klon,klev,2,nbands_lw_rrtm),piz_aero_lw_rrtm(klon,klev,2,nbands_lw_rrtm))
     526      ALLOCATE(cg_aero_lw_rrtm(klon,klev,2,nbands_lw_rrtm))
    523527      ALLOCATE(ccm(klon,klev,nbands))
    524528
     
    635639      deallocate(topswai, solswai)
    636640      deallocate(tau_aero,piz_aero,cg_aero)
    637       deallocate(tau_aero_rrtm,piz_aero_rrtm,cg_aero_rrtm)
     641      deallocate(tau_aero_sw_rrtm,piz_aero_sw_rrtm,cg_aero_sw_rrtm)
     642      deallocate(tau_aero_lw_rrtm,piz_aero_lw_rrtm,cg_aero_lw_rrtm)
    638643      deallocate(ccm)
    639644      if (ok_gwd_rando) deallocate(du_gwd_rando, dv_gwd_rando)
  • LMDZ5/trunk/libf/phylmd/physiq.F90

    r2137 r2146  
    27612761     !jq - Johannes Quaas, 27/11/2003 (quaas@lmd.jussieu.fr)
    27622762     IF (flag_aerosol .gt. 0) THEN
    2763         IF (.NOT. aerosol_couple) THEN
    2764            IF (iflag_rrtm .EQ. 0) THEN !--old radiation
     2763        IF (iflag_rrtm .EQ. 0) THEN !--old radiation
     2764           IF (.NOT. aerosol_couple) THEN
    27652765              !
    27662766              CALL readaerosol_optic( &
     
    27702770                   tau_aero, piz_aero, cg_aero,  &
    27712771                   tausum_aero, tau3d_aero)
    2772               !
    2773            ELSE                       ! RRTM radiation
    2774               !
     2772           ENDIF
     2773         ELSE                       ! RRTM radiation
     2774           IF (aerosol_couple .AND. config_inca == 'aero' ) THEN
     2775            abort_message='config_inca=aero et rrtm=1 impossible'
     2776            call abort_gcm(modname,abort_message,1)
     2777           ELSE
     2778!
    27752779#ifdef CPP_RRTM
    2776               CALL readaerosol_optic_rrtm( &
    2777                    debut, new_aod, flag_aerosol, itap, jD_cur-jD_ref, &
    2778                    pdtphys, pplay, paprs, t_seri, rhcl, presnivs,  &
    2779                    mass_solu_aero, mass_solu_aero_pi,  &
    2780                    tau_aero_rrtm, piz_aero_rrtm, cg_aero_rrtm,  &
    2781                    tausum_aero, tau3d_aero)
     2780             CALL readaerosol_optic_rrtm( debut, aerosol_couple, &
     2781             new_aod, flag_aerosol, itap, jD_cur-jD_ref, &
     2782             pdtphys, pplay, paprs, t_seri, rhcl, presnivs,  &
     2783             tr_seri, mass_solu_aero, mass_solu_aero_pi,  &
     2784             tau_aero_sw_rrtm, piz_aero_sw_rrtm, cg_aero_sw_rrtm,  &
     2785             tausum_aero, tau3d_aero)
    27822786#else
    27832787
    2784               abort_message = 'You should compile with -rrtm if running ' &
    2785                    // 'with iflag_rrtm=1'
     2788              abort_message='You should compile with -rrtm if running with iflag_rrtm=1'
    27862789              call abort_gcm(modname,abort_message,1)
    27872790#endif
     
    27962799           cg_aero(:,:,:,:)  = 0.
    27972800        ELSE
    2798            tau_aero_rrtm(:,:,:,:)=0.0
    2799            piz_aero_rrtm(:,:,:,:)=0.0
    2800            cg_aero_rrtm(:,:,:,:)=0.0
     2801           tau_aero_sw_rrtm(:,:,:,:)=0.0
     2802           piz_aero_sw_rrtm(:,:,:,:)=0.0
     2803           cg_aero_sw_rrtm(:,:,:,:)=0.0
    28012804        ENDIF
    28022805     ENDIF
     
    29802983
    29812984     call chemtime(itap+itau_phy-1, date0, dtime)
    2982      IF (config_inca == 'aero') THEN
     2985     IF (config_inca == 'aero' .OR. config_inca == 'aeNP') THEN
    29832986        CALL AEROSOL_METEO_CALC( &
    29842987             calday,pdtphys,pplay,paprs,t,pmflxr,pmflxs, &
     
    31923195             flag_aerosol_strat, &
    31933196             tau_aero, piz_aero, cg_aero, &
    3194              tau_aero_rrtm, piz_aero_rrtm, cg_aero_rrtm,&     ! Rajoute par OB pour RRTM
     3197             tau_aero_sw_rrtm, piz_aero_sw_rrtm, cg_aero_sw_rrtm,&     ! Rajoute par OB pour RRTM
     3198             tau_aero_lw_rrtm, &
    31953199             cldtaupirad,new_aod, &
    31963200             zqsat, flwc, fiwc, &
     
    32083212             solsw_aero, solsw0_aero, &
    32093213             topswcf_aero, solswcf_aero, &
     3214             !-C. Kleinschmitt for LW diagnostics
     3215             toplwad_aero, sollwad_aero,&
     3216             toplwai_aero, sollwai_aero, &
     3217             toplwad0_aero, sollwad0_aero,&
     3218             !-end
    32103219             ZLWFT0_i, ZFLDN0, ZFLUP0, &
    32113220             ZSWFT0_i, ZFSDN0, ZFSUP0)
     
    32393248                   flag_aerosol_strat, &
    32403249                   tau_aero, piz_aero, cg_aero, &
    3241                    tau_aero_rrtm, piz_aero_rrtm, cg_aero_rrtm,&     ! Rajoute par OB pour RRTM
     3250                   tau_aero_sw_rrtm, piz_aero_sw_rrtm, cg_aero_sw_rrtm,&     ! Rajoute par OB pour RRTM
     3251                   tau_aero_lw_rrtm, &
    32423252                   cldtaupi,new_aod, &
    32433253                   zqsat, flwc, fiwc, &
     
    32553265                   solsw_aerop, solsw0_aerop, &
    32563266                   topswcf_aerop, solswcf_aerop, &
     3267                   !-C. Kleinschmitt for LW diagnostics
     3268                   toplwad_aerop, sollwad_aerop,&
     3269                   toplwai_aerop, sollwai_aerop, &
     3270                   toplwad0_aerop, sollwad0_aerop,&
     3271                   !-end
    32573272                   ZLWFT0_i, ZFLDN0, ZFLUP0, &
    32583273                   ZSWFT0_i, ZFSDN0, ZFSUP0)
  • LMDZ5/trunk/libf/phylmd/phytrac_mod.F90

    r2007 r2146  
    5454CONTAINS
    5555
    56 SUBROUTINE phytrac(                                 &
    57      nstep,     julien,   gmtime,   debutphy,       &
    58      lafin,     pdtphys,  u, v,     t_seri,         &
    59      paprs,     pplay,    pmfu,     pmfd,           &
    60      pen_u,     pde_u,    pen_d,    pde_d,          &
    61      cdragh,    coefh,    fm_therm, entr_therm,     &
    62      yu1,       yv1,      ftsol,    pctsrf,         &
    63      ustar,     u10m,      v10m,                    &
    64      wstar,     ale_bl,      ale_wake,              &
    65      xlat,      xlon,                               &
    66      frac_impa,frac_nucl,beta_fisrt,beta_v1,        &
    67      presnivs,  pphis,    pphi,     albsol,         &
    68      sh,        rh,       cldfra,   rneb,           &
    69      diafra,    cldliq,   itop_con, ibas_con,       &
    70      pmflxr,    pmflxs,   prfl,     psfl,           &
    71      da,        phi,      mp,       upwd,           &
    72      phi2,      d1a,      dam,      sij, wght_cvfd, &   ! RomP +RL
    73      wdtrainA,  wdtrainM, sigd,     clw, elij,      &   ! RomP
    74      evap,      ep,       epmlmMm,  eplaMm,         &   ! RomP
    75      dnwd,      aerosol_couple,     flxmass_w,      &
    76      tau_aero,  piz_aero,  cg_aero, ccm,            &
    77      rfname,                                        &
    78      d_tr_dyn,                                      &   ! RomP
    79      tr_seri)         
    80 !
    81 !======================================================================
    82 ! Auteur(s) FH
    83 ! Objet: Moniteur general des tendances traceurs
    84 ! Modification R. Pilon 01 janvier 2012 transport+scavenging KE scheme : cvltr
    85 ! Modification R. Pilon 10 octobre 2012 large scale scavenging incloud_scav + bc_scav
    86 !======================================================================
    87 
    88   USE ioipsl
    89   USE phys_cal_mod, only : hour
    90   USE dimphy
    91   USE infotrac
    92   USE mod_grid_phy_lmdz
    93   USE mod_phys_lmdz_para
    94   USE comgeomphy
    95   USE iophy
    96   USE traclmdz_mod
    97   USE tracinca_mod
    98   USE tracreprobus_mod
    99   USE control_mod
    100   USE indice_sol_mod
    101 
    102   IMPLICIT NONE
    103 
    104   INCLUDE "YOMCST.h"
    105   INCLUDE "dimensions.h"
    106   INCLUDE "clesphys.h"
    107   INCLUDE "temps.h"
    108   INCLUDE "paramet.h"
    109   INCLUDE "thermcell.h"
    110   INCLUDE "iniprint.h"
    111 !==========================================================================
    112 !                   -- ARGUMENT DESCRIPTION --
    113 !==========================================================================
    114 
    115 ! Input arguments
    116 !----------------
    117 !Configuration grille,temps:
    118   INTEGER,INTENT(IN) :: nstep      ! Appel physique
    119   INTEGER,INTENT(IN) :: julien     ! Jour julien
    120   REAL,INTENT(IN)    :: gmtime     ! Heure courante
    121   REAL,INTENT(IN)    :: pdtphys    ! Pas d'integration pour la physique (seconde)
    122   LOGICAL,INTENT(IN) :: debutphy   ! le flag de l'initialisation de la physique
    123   LOGICAL,INTENT(IN) :: lafin      ! le flag de la fin de la physique
    124  
    125   REAL,DIMENSION(klon),INTENT(IN) :: xlat    ! latitudes pour chaque point
    126   REAL,DIMENSION(klon),INTENT(IN) :: xlon    ! longitudes pour chaque point
    127 !
    128 !Physique:
    129 !--------
    130   REAL,DIMENSION(klon,klev),INTENT(IN)   :: t_seri  ! Temperature
    131   REAL,DIMENSION(klon,klev),INTENT(IN)   :: u       ! variable not used
    132   REAL,DIMENSION(klon,klev),INTENT(IN)   :: v       ! variable not used
    133   REAL,DIMENSION(klon,klev),INTENT(IN)   :: sh      ! humidite specifique
    134   REAL,DIMENSION(klon,klev),INTENT(IN)   :: rh      ! humidite relative
    135   REAL,DIMENSION(klon,klev+1),INTENT(IN) :: paprs   ! pression pour chaque inter-couche (en Pa)
    136   REAL,DIMENSION(klon,klev),INTENT(IN)   :: pplay   ! pression pour le mileu de chaque couche (en Pa)
    137   REAL,DIMENSION(klon,klev),INTENT(IN)   :: pphi    ! geopotentiel
    138   REAL,DIMENSION(klon),INTENT(IN)        :: pphis
    139   REAL,DIMENSION(klev),INTENT(IN)        :: presnivs
    140   REAL,DIMENSION(klon,klev),INTENT(IN)   :: cldliq  ! eau liquide nuageuse
    141   REAL,DIMENSION(klon,klev),INTENT(IN)   :: cldfra  ! fraction nuageuse (tous les nuages)
    142   REAL,DIMENSION(klon,klev),INTENT(IN)   :: diafra  ! fraction nuageuse (convection ou stratus artificiels)
    143   REAL,DIMENSION(klon,klev),INTENT(IN)   :: rneb    ! fraction nuageuse (grande echelle)
    144 !
    145   REAL                                   :: ql_incl ! contenu en eau liquide nuageuse dans le nuage ! ql_incl=oliq/rneb
    146   REAL,DIMENSION(klon,klev),INTENT(IN)   :: beta_fisrt ! taux de conversion de l'eau cond (de fisrtilp)
    147   REAL,DIMENSION(klon,klev),INTENT(out)  :: beta_v1    ! -- (originale version)
    148 
    149 !
    150   INTEGER,DIMENSION(klon),INTENT(IN)     :: itop_con
    151   INTEGER,DIMENSION(klon),INTENT(IN)     :: ibas_con
    152   REAL,DIMENSION(klon),INTENT(IN)        :: albsol  ! albedo surface
    153 !
    154 !Dynamique
    155 !--------
    156   REAL,DIMENSION(klon,klev,nbtr),INTENT(IN)    :: d_tr_dyn
    157 !
    158 !Convection:
    159 !----------
    160   REAL,DIMENSION(klon,klev),INTENT(IN) :: pmfu  ! flux de masse dans le panache montant
    161   REAL,DIMENSION(klon,klev),INTENT(IN) :: pmfd  ! flux de masse dans le panache descendant
    162   REAL,DIMENSION(klon,klev),INTENT(IN) :: pen_u ! flux entraine dans le panache montant
    163   REAL,DIMENSION(klon,klev),INTENT(IN) :: pde_u ! flux detraine dans le panache montant
    164   REAL,DIMENSION(klon,klev),INTENT(IN) :: pen_d ! flux entraine dans le panache descendant
    165   REAL,DIMENSION(klon,klev),INTENT(IN) :: pde_d ! flux detraine dans le panache descendant
    166 
    167 !...Tiedke     
    168   REAL,DIMENSION(klon,klev+1),INTENT(IN)   :: pmflxr, pmflxs ! Flux precipitant de pluie, neige aux interfaces [convection]
    169   REAL,DIMENSION(klon,klev+1),INTENT(IN)   :: prfl, psfl ! Flux precipitant de pluie, neige aux interfaces [large-scale]
    170 
    171   LOGICAL,INTENT(IN)                       :: aerosol_couple
    172   REAL,DIMENSION(klon,klev),INTENT(IN)     :: flxmass_w
    173   REAL,DIMENSION(klon,klev,9,2),INTENT(IN) :: tau_aero
    174   REAL,DIMENSION(klon,klev,9,2),INTENT(IN) :: piz_aero
    175   REAL,DIMENSION(klon,klev,9,2),INTENT(IN) :: cg_aero
    176   CHARACTER(len=4),DIMENSION(9),INTENT(IN) :: rfname
    177   REAL,DIMENSION(klon,klev,2),INTENT(IN)   :: ccm
    178 !... K.Emanuel
    179   REAL,DIMENSION(klon,klev),INTENT(IN)     :: da
    180   REAL,DIMENSION(klon,klev,klev),INTENT(IN):: phi
    181 ! RomP >>>
    182   REAL,DIMENSION(klon,klev),INTENT(IN)      :: d1a,dam
    183   REAL,DIMENSION(klon,klev,klev),INTENT(IN) :: phi2
    184 !
    185   REAL,DIMENSION(klon,klev),INTENT(IN)      :: wdtrainA
    186   REAL,DIMENSION(klon,klev),INTENT(IN)      :: wdtrainM
    187   REAL,DIMENSION(klon),INTENT(IN)           :: sigd
    188 ! ---- RomP flux entraine, detraine et precipitant kerry Emanuel
    189   REAL,DIMENSION(klon,klev),INTENT(IN)      :: evap
    190   REAL,DIMENSION(klon,klev),INTENT(IN)      :: ep
    191   REAL,DIMENSION(klon,klev,klev),INTENT(IN) :: sij
    192   REAL,DIMENSION(klon,klev),INTENT(IN)      :: wght_cvfd          !RL
    193   REAL,DIMENSION(klon,klev,klev),INTENT(IN) :: elij
    194   REAL,DIMENSION(klon,klev,klev),INTENT(IN) :: epmlmMm
    195   REAL,DIMENSION(klon,klev),INTENT(IN)      :: eplaMm
    196   REAL,DIMENSION(klon,klev),INTENT(IN)      :: clw
    197 ! RomP <<<
    198 
    199 !
    200   REAL,DIMENSION(klon,klev),INTENT(IN)     :: mp
    201   REAL,DIMENSION(klon,klev),INTENT(IN)     :: upwd      ! saturated updraft mass flux
    202   REAL,DIMENSION(klon,klev),INTENT(IN)     :: dnwd      ! saturated downdraft mass flux
    203 !
    204 !Thermiques:
    205 !----------
    206   REAL,DIMENSION(klon,klev+1),INTENT(IN)   :: fm_therm
    207   REAL,DIMENSION(klon,klev),INTENT(IN)     :: entr_therm
    208 !
    209 !Couche limite:
    210 !--------------
    211 !
    212 !
    213   REAL,DIMENSION(:),INTENT(IN)   :: cdragh          ! (klon) coeff drag pour T et Q
    214   REAL,DIMENSION(:,:),INTENT(IN) :: coefh           ! (klon,klev) coeff melange CL (m**2/s)
    215   REAL,DIMENSION(:),INTENT(IN)   :: ustar,u10m,v10m ! (klon) u* & vent a 10m (m/s)
    216   REAL,DIMENSION(:),INTENT(IN)   :: wstar,ale_bl,ale_wake ! (klon) w* and Avail. Lifting Ener.
    217   REAL,DIMENSION(:),INTENT(IN)   :: yu1             ! (klon) vents au premier niveau
    218   REAL,DIMENSION(:),INTENT(IN)   :: yv1             ! (klon) vents au premier niveau
    219 
    220 !
    221 !Lessivage:
    222 !----------
    223 !
    224 ! pour le ON-LINE
    225 !
    226   REAL,DIMENSION(klon,klev),INTENT(IN) :: frac_impa ! fraction d'aerosols non impactes
    227   REAL,DIMENSION(klon,klev),INTENT(IN) :: frac_nucl ! fraction d'aerosols non nuclees
    228 
    229 ! Arguments necessaires pour les sources et puits de traceur:
    230   REAL,DIMENSION(klon,nbsrf),INTENT(IN) :: ftsol  ! Temperature du sol (surf)(Kelvin)
    231   REAL,DIMENSION(klon,nbsrf),INTENT(IN) :: pctsrf ! Pourcentage de sol (nature du sol)
    232 
    233 
    234 ! Output argument
    235 !----------------
    236   REAL,DIMENSION(klon,klev,nbtr),INTENT(INOUT) :: tr_seri ! Concentration Traceur [U/KgA]
    237   REAL,DIMENSION(klon,klev)                    :: sourceBE
    238 !=======================================================================================
    239 !                        -- LOCAL VARIABLES --
    240 !=======================================================================================
    241 
    242   INTEGER :: i, k, it
    243   INTEGER :: nsplit
    244 
    245 !Sources et Reservoirs de traceurs (ex:Radon):
    246 !--------------------------------------------
    247 !
    248   REAL,DIMENSION(:,:),ALLOCATABLE,SAVE :: source  ! a voir lorsque le flux de surface est prescrit
     56  SUBROUTINE phytrac(                                 &
     57       nstep,     julien,   gmtime,   debutphy,       &
     58       lafin,     pdtphys,  u, v,     t_seri,         &
     59       paprs,     pplay,    pmfu,     pmfd,           &
     60       pen_u,     pde_u,    pen_d,    pde_d,          &
     61       cdragh,    coefh,    fm_therm, entr_therm,     &
     62       yu1,       yv1,      ftsol,    pctsrf,         &
     63       ustar,     u10m,      v10m,                    &
     64       wstar,     ale_bl,      ale_wake,              &
     65       xlat,      xlon,                               &
     66       frac_impa,frac_nucl,beta_fisrt,beta_v1,        &
     67       presnivs,  pphis,    pphi,     albsol,         &
     68       sh,        rh,       cldfra,   rneb,           &
     69       diafra,    cldliq,   itop_con, ibas_con,       &
     70       pmflxr,    pmflxs,   prfl,     psfl,           &
     71       da,        phi,      mp,       upwd,           &
     72       phi2,      d1a,      dam,      sij, wght_cvfd, &   ! RomP +RL
     73       wdtrainA,  wdtrainM, sigd,     clw, elij,      &   ! RomP
     74       evap,      ep,       epmlmMm,  eplaMm,         &   ! RomP
     75       dnwd,      aerosol_couple,     flxmass_w,      &
     76       tau_aero,  piz_aero,  cg_aero, ccm,            &
     77       rfname,                                        &
     78       d_tr_dyn,                                      &   ! RomP
     79       tr_seri)         
     80    !
     81    !======================================================================
     82    ! Auteur(s) FH
     83    ! Objet: Moniteur general des tendances traceurs
     84    ! Modification R. Pilon 01 janvier 2012 transport+scavenging KE scheme : cvltr
     85    ! Modification R. Pilon 10 octobre 2012 large scale scavenging incloud_scav + bc_scav
     86    !======================================================================
     87
     88    USE ioipsl
     89    USE phys_cal_mod, only : hour
     90    USE dimphy
     91    USE infotrac
     92    USE mod_grid_phy_lmdz
     93    USE mod_phys_lmdz_para
     94    USE comgeomphy
     95    USE iophy
     96    USE traclmdz_mod
     97    USE tracinca_mod
     98    USE tracreprobus_mod
     99    USE control_mod
     100    USE indice_sol_mod
     101
     102    USE mod_phys_lmdz_mpi_data, ONLY :  is_mpi_root
     103
     104    IMPLICIT NONE
     105
     106    INCLUDE "YOMCST.h"
     107    INCLUDE "dimensions.h"
     108    INCLUDE "clesphys.h"
     109    INCLUDE "temps.h"
     110    INCLUDE "paramet.h"
     111    INCLUDE "thermcell.h"
     112    INCLUDE "iniprint.h"
     113    !==========================================================================
     114    !                   -- ARGUMENT DESCRIPTION --
     115    !==========================================================================
     116
     117    ! Input arguments
     118    !----------------
     119    !Configuration grille,temps:
     120    INTEGER,INTENT(IN) :: nstep      ! Appel physique
     121    INTEGER,INTENT(IN) :: julien     ! Jour julien
     122    REAL,INTENT(IN)    :: gmtime     ! Heure courante
     123    REAL,INTENT(IN)    :: pdtphys    ! Pas d'integration pour la physique (seconde)
     124    LOGICAL,INTENT(IN) :: debutphy   ! le flag de l'initialisation de la physique
     125    LOGICAL,INTENT(IN) :: lafin      ! le flag de la fin de la physique
     126
     127    REAL,DIMENSION(klon),INTENT(IN) :: xlat    ! latitudes pour chaque point
     128    REAL,DIMENSION(klon),INTENT(IN) :: xlon    ! longitudes pour chaque point
     129    !
     130    !Physique:
     131    !--------
     132    REAL,DIMENSION(klon,klev),INTENT(IN)   :: t_seri  ! Temperature
     133    REAL,DIMENSION(klon,klev),INTENT(IN)   :: u       ! variable not used
     134    REAL,DIMENSION(klon,klev),INTENT(IN)   :: v       ! variable not used
     135    REAL,DIMENSION(klon,klev),INTENT(IN)   :: sh      ! humidite specifique
     136    REAL,DIMENSION(klon,klev),INTENT(IN)   :: rh      ! humidite relative
     137    REAL,DIMENSION(klon,klev+1),INTENT(IN) :: paprs   ! pression pour chaque inter-couche (en Pa)
     138    REAL,DIMENSION(klon,klev),INTENT(IN)   :: pplay   ! pression pour le mileu de chaque couche (en Pa)
     139    REAL,DIMENSION(klon,klev),INTENT(IN)   :: pphi    ! geopotentiel
     140    REAL,DIMENSION(klon),INTENT(IN)        :: pphis
     141    REAL,DIMENSION(klev),INTENT(IN)        :: presnivs
     142    REAL,DIMENSION(klon,klev),INTENT(IN)   :: cldliq  ! eau liquide nuageuse
     143    REAL,DIMENSION(klon,klev),INTENT(IN)   :: cldfra  ! fraction nuageuse (tous les nuages)
     144    REAL,DIMENSION(klon,klev),INTENT(IN)   :: diafra  ! fraction nuageuse (convection ou stratus artificiels)
     145    REAL,DIMENSION(klon,klev),INTENT(IN)   :: rneb    ! fraction nuageuse (grande echelle)
     146    !
     147    REAL                                   :: ql_incl ! contenu en eau liquide nuageuse dans le nuage ! ql_incl=oliq/rneb
     148    REAL,DIMENSION(klon,klev),INTENT(IN)   :: beta_fisrt ! taux de conversion de l'eau cond (de fisrtilp)
     149    REAL,DIMENSION(klon,klev),INTENT(out)  :: beta_v1    ! -- (originale version)
     150
     151    !
     152    INTEGER,DIMENSION(klon),INTENT(IN)     :: itop_con
     153    INTEGER,DIMENSION(klon),INTENT(IN)     :: ibas_con
     154    REAL,DIMENSION(klon),INTENT(IN)        :: albsol  ! albedo surface
     155    !
     156    !Dynamique
     157    !--------
     158    REAL,DIMENSION(klon,klev,nbtr),INTENT(IN)    :: d_tr_dyn
     159    !
     160    !Convection:
     161    !----------
     162    REAL,DIMENSION(klon,klev),INTENT(IN) :: pmfu  ! flux de masse dans le panache montant
     163    REAL,DIMENSION(klon,klev),INTENT(IN) :: pmfd  ! flux de masse dans le panache descendant
     164    REAL,DIMENSION(klon,klev),INTENT(IN) :: pen_u ! flux entraine dans le panache montant
     165    REAL,DIMENSION(klon,klev),INTENT(IN) :: pde_u ! flux detraine dans le panache montant
     166    REAL,DIMENSION(klon,klev),INTENT(IN) :: pen_d ! flux entraine dans le panache descendant
     167    REAL,DIMENSION(klon,klev),INTENT(IN) :: pde_d ! flux detraine dans le panache descendant
     168
     169    !...Tiedke     
     170    REAL,DIMENSION(klon,klev+1),INTENT(IN)   :: pmflxr, pmflxs ! Flux precipitant de pluie, neige aux interfaces [convection]
     171    REAL,DIMENSION(klon,klev+1),INTENT(IN)   :: prfl, psfl ! Flux precipitant de pluie, neige aux interfaces [large-scale]
     172
     173    LOGICAL,INTENT(IN)                       :: aerosol_couple
     174    REAL,DIMENSION(klon,klev),INTENT(IN)     :: flxmass_w
     175    REAL,DIMENSION(klon,klev,9,2),INTENT(IN) :: tau_aero
     176    REAL,DIMENSION(klon,klev,9,2),INTENT(IN) :: piz_aero
     177    REAL,DIMENSION(klon,klev,9,2),INTENT(IN) :: cg_aero
     178    CHARACTER(len=4),DIMENSION(9),INTENT(IN) :: rfname
     179    REAL,DIMENSION(klon,klev,2),INTENT(IN)   :: ccm
     180    !... K.Emanuel
     181    REAL,DIMENSION(klon,klev),INTENT(IN)     :: da
     182    REAL,DIMENSION(klon,klev,klev),INTENT(IN):: phi
     183    ! RomP >>>
     184    REAL,DIMENSION(klon,klev),INTENT(IN)      :: d1a,dam
     185    REAL,DIMENSION(klon,klev,klev),INTENT(IN) :: phi2
     186    !
     187    REAL,DIMENSION(klon,klev),INTENT(IN)      :: wdtrainA
     188    REAL,DIMENSION(klon,klev),INTENT(IN)      :: wdtrainM
     189    REAL,DIMENSION(klon),INTENT(IN)           :: sigd
     190    ! ---- RomP flux entraine, detraine et precipitant kerry Emanuel
     191    REAL,DIMENSION(klon,klev),INTENT(IN)      :: evap
     192    REAL,DIMENSION(klon,klev),INTENT(IN)      :: ep
     193    REAL,DIMENSION(klon,klev,klev),INTENT(IN) :: sij
     194    REAL,DIMENSION(klon,klev),INTENT(IN)      :: wght_cvfd          !RL
     195    REAL,DIMENSION(klon,klev,klev),INTENT(IN) :: elij
     196    REAL,DIMENSION(klon,klev,klev),INTENT(IN) :: epmlmMm
     197    REAL,DIMENSION(klon,klev),INTENT(IN)      :: eplaMm
     198    REAL,DIMENSION(klon,klev),INTENT(IN)      :: clw
     199    ! RomP <<<
     200
     201    !
     202    REAL,DIMENSION(klon,klev),INTENT(IN)     :: mp
     203    REAL,DIMENSION(klon,klev),INTENT(IN)     :: upwd      ! saturated updraft mass flux
     204    REAL,DIMENSION(klon,klev),INTENT(IN)     :: dnwd      ! saturated downdraft mass flux
     205    !
     206    !Thermiques:
     207    !----------
     208    REAL,DIMENSION(klon,klev+1),INTENT(IN)   :: fm_therm
     209    REAL,DIMENSION(klon,klev),INTENT(IN)     :: entr_therm
     210    !
     211    !Couche limite:
     212    !--------------
     213    !
     214    !
     215    REAL,DIMENSION(:),INTENT(IN)   :: cdragh          ! (klon) coeff drag pour T et Q
     216    REAL,DIMENSION(:,:),INTENT(IN) :: coefh           ! (klon,klev) coeff melange CL (m**2/s)
     217    REAL,DIMENSION(:),INTENT(IN)   :: ustar,u10m,v10m ! (klon) u* & vent a 10m (m/s)
     218    REAL,DIMENSION(:),INTENT(IN)   :: wstar,ale_bl,ale_wake ! (klon) w* and Avail. Lifting Ener.
     219    REAL,DIMENSION(:),INTENT(IN)   :: yu1             ! (klon) vents au premier niveau
     220    REAL,DIMENSION(:),INTENT(IN)   :: yv1             ! (klon) vents au premier niveau
     221
     222    !
     223    !Lessivage:
     224    !----------
     225    !
     226    REAL, DIMENSION(:), ALLOCATABLE, SAVE :: ccntrAA
     227    REAL, DIMENSION(:), ALLOCATABLE, SAVE :: ccntrENV
     228    REAL, DIMENSION(:), ALLOCATABLE, SAVE :: coefcoli
     229    LOGICAL, DIMENSION(:), ALLOCATABLE, SAVE :: flag_cvltr
     230!$OMP THREADPRIVATE(ccntrAA,ccntrENV,coefcoli,flag_cvltr)
     231    REAL, DIMENSION(klon,klev) :: ccntrAA_3d
     232    REAL, DIMENSION(klon,klev) :: ccntrENV_3d
     233    REAL, DIMENSION(klon,klev) :: coefcoli_3d
     234    !
     235    ! pour le ON-LINE
     236    !
     237    REAL,DIMENSION(klon,klev),INTENT(IN) :: frac_impa ! fraction d'aerosols non impactes
     238    REAL,DIMENSION(klon,klev),INTENT(IN) :: frac_nucl ! fraction d'aerosols non nuclees
     239
     240    ! Arguments necessaires pour les sources et puits de traceur:
     241    REAL,DIMENSION(klon,nbsrf),INTENT(IN) :: ftsol  ! Temperature du sol (surf)(Kelvin)
     242    REAL,DIMENSION(klon,nbsrf),INTENT(IN) :: pctsrf ! Pourcentage de sol (nature du sol)
     243
     244
     245    ! Output argument
     246    !----------------
     247    REAL,DIMENSION(klon,klev,nbtr),INTENT(INOUT) :: tr_seri ! Concentration Traceur [U/KgA]
     248    REAL,DIMENSION(klon,klev)                    :: sourceBE
     249    !=======================================================================================
     250    !                        -- LOCAL VARIABLES --
     251    !=======================================================================================
     252
     253    INTEGER :: i, k, it
     254    INTEGER :: nsplit
     255
     256    !Sources et Reservoirs de traceurs (ex:Radon):
     257    !--------------------------------------------
     258    !
     259    REAL,DIMENSION(:,:),ALLOCATABLE,SAVE :: source  ! a voir lorsque le flux de surface est prescrit
    249260!$OMP THREADPRIVATE(source)
    250261
    251 !
    252 !Entrees/Sorties: (cf ini_histrac.h et write_histrac.h) 
    253 !---------------
    254   INTEGER                   :: iiq, ierr
    255   INTEGER                   :: nhori, nvert
    256   REAL                      :: zsto, zout, zjulian
    257   INTEGER,SAVE              :: nid_tra     ! pointe vers le fichier histrac.nc         
     262    !
     263    !Entrees/Sorties: (cf ini_histrac.h et write_histrac.h) 
     264    !---------------
     265    INTEGER                   :: iiq, ierr
     266    INTEGER                   :: nhori, nvert
     267    REAL                      :: zsto, zout, zjulian
     268    INTEGER,SAVE              :: nid_tra     ! pointe vers le fichier histrac.nc         
    258269!$OMP THREADPRIVATE(nid_tra)
    259   REAL,DIMENSION(klon)      :: zx_tmp_fi2d ! variable temporaire grille physique
    260   INTEGER                   :: itau_w      ! pas de temps ecriture = nstep + itau_phy
    261   LOGICAL,PARAMETER         :: ok_sync=.TRUE.
    262 
    263 !
    264 ! Nature du traceur
    265 !------------------
    266   LOGICAL,DIMENSION(:),ALLOCATABLE,SAVE :: aerosol  ! aerosol(it) = true  => aerosol => lessivage
     270    REAL,DIMENSION(klon)      :: zx_tmp_fi2d ! variable temporaire grille physique
     271    INTEGER                   :: itau_w      ! pas de temps ecriture = nstep + itau_phy
     272    LOGICAL,PARAMETER         :: ok_sync=.TRUE.
     273
     274    !
     275    ! Nature du traceur
     276    !------------------
     277    LOGICAL,DIMENSION(:),ALLOCATABLE,SAVE :: aerosol  ! aerosol(it) = true  => aerosol => lessivage
    267278!$OMP THREADPRIVATE(aerosol)                        ! aerosol(it) = false => gaz
    268   REAL,DIMENSION(klon,klev)             :: delp     ! epaisseur de couche (Pa)
    269 !
    270 ! Tendances de traceurs (Td) et flux de traceurs:
    271 !------------------------
    272   REAL,DIMENSION(klon,klev)      :: d_tr     ! Td dans l'atmosphere
    273   REAL,DIMENSION(klon,klev)      :: Mint
    274   REAL,DIMENSION(klon,klev,nbtr) :: zmfd1a
    275   REAL,DIMENSION(klon,klev,nbtr) :: zmfdam
    276   REAL,DIMENSION(klon,klev,nbtr) :: zmfphi2
    277 ! Physique
    278 !----------
    279   REAL,DIMENSION(klon,klev,nbtr) :: flestottr ! flux de lessivage dans chaque couche
    280   REAL,DIMENSION(klon,klev)      :: zmasse    ! densité atmosphérique Kg/m2
    281   REAL,DIMENSION(klon,klev)      :: ztra_th
    282 !PhH
    283   REAL,DIMENSION(klon,klev)      :: zrho
    284   REAL,DIMENSION(klon,klev)      :: zdz
    285   REAL                           :: evaplsc,dx,beta ! variable pour lessivage Genthon
    286   REAL,DIMENSION(klon)           :: his_dh          ! ---
    287 ! in-cloud scav variables
    288   REAL           :: ql_incloud_ref     ! ref value of in-cloud condensed water content
    289  
    290 !Controles:
    291 !---------
    292   INTEGER,SAVE :: iflag_vdf_trac,iflag_con_trac,iflag_the_trac
    293   INTEGER,SAVE  :: iflag_con_trac_omp, iflag_vdf_trac_omp,iflag_the_trac_omp
     279    REAL,DIMENSION(klon,klev)             :: delp     ! epaisseur de couche (Pa)
     280    !
     281    ! Tendances de traceurs (Td) et flux de traceurs:
     282    !------------------------
     283    REAL,DIMENSION(klon,klev)      :: d_tr     ! Td dans l'atmosphere
     284    REAL,DIMENSION(klon,klev)      :: Mint
     285    REAL,DIMENSION(klon,klev,nbtr) :: zmfd1a
     286    REAL,DIMENSION(klon,klev,nbtr) :: zmfdam
     287    REAL,DIMENSION(klon,klev,nbtr) :: zmfphi2
     288    ! Physique
     289    !----------
     290    REAL,DIMENSION(klon,klev,nbtr) :: flestottr ! flux de lessivage dans chaque couche
     291    REAL,DIMENSION(klon,klev)      :: zmasse    ! densité atmosphérique Kg/m2
     292    REAL,DIMENSION(klon,klev)      :: ztra_th
     293    !PhH
     294    REAL,DIMENSION(klon,klev)      :: zrho
     295    REAL,DIMENSION(klon,klev)      :: zdz
     296    REAL                           :: evaplsc,dx,beta ! variable pour lessivage Genthon
     297    REAL,DIMENSION(klon)           :: his_dh          ! ---
     298    ! in-cloud scav variables
     299    REAL           :: ql_incloud_ref     ! ref value of in-cloud condensed water content
     300
     301    !Controles:
     302    !---------
     303    INTEGER,SAVE :: iflag_vdf_trac,iflag_con_trac,iflag_the_trac
     304    INTEGER,SAVE  :: iflag_con_trac_omp, iflag_vdf_trac_omp,iflag_the_trac_omp
    294305!$OMP THREADPRIVATE(iflag_vdf_trac,iflag_con_trac,iflag_the_trac)
    295306
    296   LOGICAL,SAVE :: lessivage
     307    LOGICAL,SAVE :: lessivage
    297308!$OMP THREADPRIVATE(lessivage)
    298309
    299   CHARACTER(len=8),DIMENSION(nbtr) :: solsym
    300 !RomP >>>
    301   INTEGER,SAVE  :: iflag_lscav_omp,iflag_lscav
    302   LOGICAL,SAVE  :: convscav_omp,convscav
     310    CHARACTER(len=8),DIMENSION(nbtr) :: solsym
     311    !RomP >>>
     312    INTEGER,SAVE  :: iflag_lscav_omp,iflag_lscav
     313    LOGICAL,SAVE  :: convscav_omp,convscav
    303314!$OMP THREADPRIVATE(iflag_lscav)
    304315!$OMP THREADPRIVATE(convscav)
    305 !RomP <<<
    306 !######################################################################
    307 !                    -- INITIALIZATION --
    308 !######################################################################
    309 IF (debutphy) THEN
    310 ALLOCATE(d_tr_cl(klon,klev,nbtr),d_tr_dry(klon,nbtr))
    311 ALLOCATE(flux_tr_dry(klon,nbtr),d_tr_dec(klon,klev,nbtr),d_tr_cv(klon,klev,nbtr))
    312 ALLOCATE(d_tr_insc(klon,klev,nbtr),d_tr_bcscav(klon,klev,nbtr))
    313 ALLOCATE(d_tr_evapls(klon,klev,nbtr),d_tr_ls(klon,klev,nbtr))
    314 ALLOCATE(qPrls(klon,nbtr),d_tr_trsp(klon,klev,nbtr))
    315 ALLOCATE(d_tr_sscav(klon,klev,nbtr),d_tr_sat(klon,klev,nbtr))
    316 ALLOCATE(d_tr_uscav(klon,klev,nbtr),qPr(klon,klev,nbtr),qDi(klon,klev,nbtr))
    317 ALLOCATE(qPa(klon,klev,nbtr),qMel(klon,klev,nbtr))
    318 ALLOCATE(qTrdi(klon,klev,nbtr),dtrcvMA(klon,klev,nbtr))
    319 ALLOCATE(d_tr_th(klon,klev,nbtr))
    320 ALLOCATE(d_tr_lessi_impa(klon,klev,nbtr),d_tr_lessi_nucl(klon,klev,nbtr))
    321 ENDIF
    322 
    323   DO k=1,klev
    324      DO i=1,klon
    325       sourceBE(i,k)=0.
    326       Mint(i,k)=0.
    327       zrho(i,k)=0.
    328       zdz(i,k)=0.
    329      END DO
    330   END DO
    331 
    332   DO it=1, nbtr
    333    DO k=1,klev
    334     DO i=1,klon
    335     d_tr_insc(i,k,it)=0.
    336     d_tr_bcscav(i,k,it)=0.
    337     d_tr_evapls(i,k,it)=0.
    338     d_tr_ls(i,k,it)=0.
    339     d_tr_cv(i,k,it)=0.
    340     d_tr_cl(i,k,it)=0.
    341     d_tr_trsp(i,k,it)=0.
    342     d_tr_sscav(i,k,it)=0.
    343     d_tr_sat(i,k,it)=0.
    344     d_tr_uscav(i,k,it)=0.
    345     d_tr_lessi_impa(i,k,it)=0.
    346     d_tr_lessi_nucl(i,k,it)=0.
    347     qDi(i,k,it)=0.
    348     qPr(i,k,it)=0.
    349     qPa(i,k,it)=0.
    350     qMel(i,k,it)=0.
    351     qTrdi(i,k,it)=0.
    352     dtrcvMA(i,k,it)=0.
    353     zmfd1a(i,k,it)=0.
    354     zmfdam(i,k,it)=0.
    355     zmfphi2(i,k,it)=0.
     316    !RomP <<<
     317    !######################################################################
     318    !                    -- INITIALIZATION --
     319    !######################################################################
     320    IF (debutphy) THEN
     321       ALLOCATE(d_tr_cl(klon,klev,nbtr),d_tr_dry(klon,nbtr))
     322       ALLOCATE(flux_tr_dry(klon,nbtr),d_tr_dec(klon,klev,nbtr),d_tr_cv(klon,klev,nbtr))
     323       ALLOCATE(d_tr_insc(klon,klev,nbtr),d_tr_bcscav(klon,klev,nbtr))
     324       ALLOCATE(d_tr_evapls(klon,klev,nbtr),d_tr_ls(klon,klev,nbtr))
     325       ALLOCATE(qPrls(klon,nbtr),d_tr_trsp(klon,klev,nbtr))
     326       ALLOCATE(d_tr_sscav(klon,klev,nbtr),d_tr_sat(klon,klev,nbtr))
     327       ALLOCATE(d_tr_uscav(klon,klev,nbtr),qPr(klon,klev,nbtr),qDi(klon,klev,nbtr))
     328       ALLOCATE(qPa(klon,klev,nbtr),qMel(klon,klev,nbtr))
     329       ALLOCATE(qTrdi(klon,klev,nbtr),dtrcvMA(klon,klev,nbtr))
     330       ALLOCATE(d_tr_th(klon,klev,nbtr))
     331       ALLOCATE(d_tr_lessi_impa(klon,klev,nbtr),d_tr_lessi_nucl(klon,klev,nbtr))
     332    ENDIF
     333
     334    DO k=1,klev
     335       DO i=1,klon
     336          sourceBE(i,k)=0.
     337          Mint(i,k)=0.
     338          zrho(i,k)=0.
     339          zdz(i,k)=0.
     340       END DO
    356341    END DO
    357    END DO
    358   END DO
    359   IF (debutphy) THEN
    360 !!jyg
     342
     343    DO it=1, nbtr
     344       DO k=1,klev
     345          DO i=1,klon
     346             d_tr_insc(i,k,it)=0.
     347             d_tr_bcscav(i,k,it)=0.
     348             d_tr_evapls(i,k,it)=0.
     349             d_tr_ls(i,k,it)=0.
     350             d_tr_cv(i,k,it)=0.
     351             d_tr_cl(i,k,it)=0.
     352             d_tr_trsp(i,k,it)=0.
     353             d_tr_sscav(i,k,it)=0.
     354             d_tr_sat(i,k,it)=0.
     355             d_tr_uscav(i,k,it)=0.
     356             d_tr_lessi_impa(i,k,it)=0.
     357             d_tr_lessi_nucl(i,k,it)=0.
     358             qDi(i,k,it)=0.
     359             qPr(i,k,it)=0.
     360             qPa(i,k,it)=0.
     361             qMel(i,k,it)=0.
     362             qTrdi(i,k,it)=0.
     363             dtrcvMA(i,k,it)=0.
     364             zmfd1a(i,k,it)=0.
     365             zmfdam(i,k,it)=0.
     366             zmfphi2(i,k,it)=0.
     367          END DO
     368       END DO
     369    END DO
     370
     371    DO k = 1, klev
     372       DO i = 1, klon
     373          delp(i,k) = paprs(i,k)-paprs(i,k+1)
     374       END DO
     375    END DO
     376
     377    IF (debutphy) THEN
     378       !!jyg
    361379!$OMP BARRIER
    362    ecrit_tra=86400. ! frequence de stokage en dur
    363                     ! obsolete car remplace par des ecritures dans phys_output_write
    364 !RomP >>>
    365 !
    366 !Config Key  = convscav
    367 !Config Desc = Convective scavenging switch: 0=off, 1=on.
    368 !Config Def  = .false.
    369 !Config Help =
    370 !
     380       ecrit_tra=86400. ! frequence de stokage en dur
     381       ! obsolete car remplace par des ecritures dans phys_output_write
     382       !RomP >>>
     383       !
     384       !Config Key  = convscav
     385       !Config Desc = Convective scavenging switch: 0=off, 1=on.
     386       !Config Def  = .false.
     387       !Config Help =
     388       !
    371389!$OMP MASTER
    372   convscav_omp=.false.
    373   call getin('convscav', convscav_omp)
    374   iflag_vdf_trac_omp=1
    375   call getin('iflag_vdf_trac', iflag_vdf_trac_omp)
    376   iflag_con_trac_omp=1
    377   call getin('iflag_con_trac', iflag_con_trac_omp)
    378   iflag_the_trac_omp=1
    379   call getin('iflag_the_trac', iflag_the_trac_omp)
     390       convscav_omp=.false.
     391       call getin('convscav', convscav_omp)
     392       iflag_vdf_trac_omp=1
     393       call getin('iflag_vdf_trac', iflag_vdf_trac_omp)
     394       iflag_con_trac_omp=1
     395       call getin('iflag_con_trac', iflag_con_trac_omp)
     396       iflag_the_trac_omp=1
     397       call getin('iflag_the_trac', iflag_the_trac_omp)
    380398!$OMP END MASTER
    381399!$OMP BARRIER
    382   convscav=convscav_omp
    383   iflag_vdf_trac=iflag_vdf_trac_omp
    384   iflag_con_trac=iflag_con_trac_omp
    385   iflag_the_trac=iflag_the_trac_omp
    386   print*,'phytrac passage dans routine conv avec lessivage', convscav
    387 !
    388 !Config Key  = iflag_lscav
    389 !Config Desc = Large scale scavenging parametrization: 0=none, 1=old(Genthon92),
    390 !              2=1+PHeinrich, 3=Reddy_Boucher2004, 4=3+RPilon.
    391 !Config Def  = 1
    392 !Config Help =
    393 !
     400       convscav=convscav_omp
     401       iflag_vdf_trac=iflag_vdf_trac_omp
     402       iflag_con_trac=iflag_con_trac_omp
     403       iflag_the_trac=iflag_the_trac_omp
     404       write(lunout,*) 'phytrac passage dans routine conv avec lessivage', convscav
     405       !
     406       !Config Key  = iflag_lscav
     407       !Config Desc = Large scale scavenging parametrization: 0=none, 1=old(Genthon92),
     408       !              2=1+PHeinrich, 3=Reddy_Boucher2004, 4=3+RPilon.
     409       !Config Def  = 1
     410       !Config Help =
     411       !
    394412!$OMP MASTER
    395   iflag_lscav_omp=1
    396   call getin('iflag_lscav', iflag_lscav_omp)
     413       iflag_lscav_omp=1
     414       call getin('iflag_lscav', iflag_lscav_omp)
    397415!$OMP END MASTER
    398416!$OMP BARRIER
    399   iflag_lscav=iflag_lscav_omp
     417       iflag_lscav=iflag_lscav_omp
     418       !
     419       SELECT CASE(iflag_lscav)
     420       CASE(0)
     421          WRITE(lunout,*)  'Large scale scavenging: none'
     422       CASE(1)
     423          WRITE(lunout,*)  'Large scale scavenging: C. Genthon, Tellus(1992), 44B, 371-389'
     424       CASE(2)
     425          WRITE(lunout,*)  'Large scale scavenging: C. Genthon, modified P. Heinrich'
     426       CASE(3)
     427          WRITE(lunout,*)  'Large scale scavenging: M. Shekkar Reddy and O. Boucher, JGR(2004), 109, D14202'
     428       CASE(4)
     429          WRITE(lunout,*)  'Large scale scavenging: Reddy and Boucher, modified R. Pilon'
     430       END SELECT
     431       !RomP <<<
     432       WRITE(*,*) 'FIRST TIME IN PHYTRAC : pdtphys(sec) = ',pdtphys,'ecrit_tra (sec) = ',ecrit_tra
     433       ALLOCATE( source(klon,nbtr), stat=ierr)
     434       IF (ierr /= 0) CALL abort_gcm('phytrac', 'pb in allocation 1',1)
     435
     436       ALLOCATE( aerosol(nbtr), stat=ierr)
     437       IF (ierr /= 0) CALL abort_gcm('phytrac', 'pb in allocation 2',1)
     438
     439
     440       ! Initialize module for specific tracers
     441       SELECT CASE(type_trac)
     442       CASE('lmdz')
     443          CALL traclmdz_init(pctsrf,xlat,xlon,ftsol,tr_seri,t_seri,pplay,sh,pdtphys,aerosol,lessivage)
     444       CASE('inca')
     445          source(:,:)=0.
     446          CALL tracinca_init(aerosol,lessivage)
     447       CASE('repr')
     448          source(:,:)=0.
     449       END SELECT
     450
     451       !
     452       !--initialising coefficients for scavenging in the case of NP
     453       !
     454       ALLOCATE(flag_cvltr(nbtr))
     455       IF (iflag_con.EQ.3) THEN
     456          !
     457          ALLOCATE(ccntrAA(nbtr))
     458          ALLOCATE(ccntrENV(nbtr))
     459          ALLOCATE(coefcoli(nbtr))
     460          !
     461          DO it=1, nbtr
     462             SELECT CASE(type_trac)
     463             CASE('lmdz')
     464                IF (convscav.and.aerosol(it)) THEN
     465                   flag_cvltr(it)=.true.
     466                   ccntrAA(it) =1.0         !--a modifier par JYG a lire depuis fichier
     467                   ccntrENV(it)=1.0
     468                   coefcoli(it)=0.001
     469                ELSE
     470                   flag_cvltr(it)=.false.
     471                ENDIF
     472
     473             CASE('inca')
     474!                IF ((it.EQ.id_Rn222) .OR. ((it.GE.id_SO2) .AND. (it.LE.id_NH3)) ) THEN
     475!                   !--gas-phase species
     476!                   flag_cvltr(it)=.false.
    400477!
    401   SELECT CASE(iflag_lscav)
    402   CASE(0)
    403    PRINT*, 'Large scale scavenging: none'
    404   CASE(1)
    405    PRINT*, 'Large scale scavenging: C. Genthon, Tellus(1992), 44B, 371-389'
    406   CASE(2)
    407    PRINT*, 'Large scale scavenging: C. Genthon, modified P. Heinrich'
    408   CASE(3)
    409    PRINT*, 'Large scale scavenging: M. Shekkar Reddy and O. Boucher, JGR(2004), 109, D14202'
    410   CASE(4)
    411    PRINT*, 'Large scale scavenging: Reddy and Boucher, modified R. Pilon'
    412   END SELECT
    413 !RomP <<<
    414      WRITE(*,*) 'FIRST TIME IN PHYTRAC : pdtphys(sec) = ',pdtphys,'ecrit_tra (sec) = ',ecrit_tra
    415      ALLOCATE( source(klon,nbtr), stat=ierr)
    416      IF (ierr /= 0) CALL abort_gcm('phytrac', 'pb in allocation 1',1)
    417      
    418      ALLOCATE( aerosol(nbtr), stat=ierr)
    419      IF (ierr /= 0) CALL abort_gcm('phytrac', 'pb in allocation 2',1)
    420      
    421 
    422      ! Initialize module for specific tracers
    423      SELECT CASE(type_trac)
    424      CASE('lmdz')
    425         CALL traclmdz_init(pctsrf, xlat, xlon, ftsol, tr_seri, t_seri, pplay, sh, pdtphys, aerosol, lessivage)
    426      CASE('inca')
    427         source(:,:)=0.
    428         CALL tracinca_init(aerosol,lessivage)
    429      CASE('repr')
    430         source(:,:)=0.
    431      END SELECT
    432 !
    433 ! Initialize diagnostic output
    434 ! ----------------------------
     478!                ELSEIF ( (it.GE.id_CIDUSTM) .AND. (it.LE.id_AIN) ) THEN
     479!                   !--insoluble aerosol species
     480!                   flag_cvltr(it)=.true.
     481!                   ccntrAA(it)=0.7
     482!                   ccntrENV(it)=0.7
     483!                   coefcoli(it)=0.001
     484!                ELSEIF ( (it.EQ.id_Pb210) .OR. ((it.GE.id_CSSSM) .AND. (it.LE.id_SSN))) THEN
     485!                   !--soluble aerosol species
     486!                   flag_cvltr(it)=.true.
     487!                   ccntrAA(it)=0.9
     488!                   ccntrENV(it)=0.9
     489!                   coefcoli(it)=0.001
     490!                ELSE
     491!                   WRITE(lunout,*) 'pb it=', it
     492!                   CALL abort_gcm('phytrac','pb it scavenging',1)
     493!                ENDIF
     494                !--test OB
     495                !--for now we do not scavenge in cvltr
     496                flag_cvltr(it)=.false.
     497             END SELECT
     498          ENDDO
     499          !
     500       ELSE ! iflag_con .ne. 3
     501          flag_cvltr(:) = .false.
     502       ENDIF
     503       !
     504       ! Initialize diagnostic output
     505       ! ----------------------------
    435506#ifdef CPP_IOIPSL
    436 !     INCLUDE "ini_histrac.h"
     507       !     INCLUDE "ini_histrac.h"
    437508#endif
    438   END IF ! of IF (debutphy)
    439 !############################################ END INITIALIZATION #######
    440 
    441   DO k=1,klev
    442      DO i=1,klon
    443         zmasse(i,k)=(paprs(i,k)-paprs(i,k+1))/rg
    444      END DO
    445   END DO
    446 !
    447   IF (id_be .GT. 0) THEN
    448   DO k=1,klev
    449      DO i=1,klon
    450         sourceBE(i,k)=srcbe(i,k)       !RomP  -> pour sortie histrac
    451      END DO
    452   END DO
    453   ENDIF
    454 
    455 !===============================================================================
    456 !    -- Do specific treatment according to chemestry model or local LMDZ tracers
    457 !     
    458 !===============================================================================
    459   SELECT CASE(type_trac)
    460   CASE('lmdz')
    461      !    -- Traitement des traceurs avec traclmdz
    462      CALL traclmdz(nstep, julien, gmtime, pdtphys, t_seri, paprs, pplay, &
    463           cdragh,  coefh, yu1, yv1, ftsol, pctsrf, xlat, xlon,iflag_vdf_trac>=0,sh, &
    464            rh, pphi, ustar, wstar, ale_bl, ale_wake,  u10m, v10m, &
    465            tr_seri, source, solsym, d_tr_cl,d_tr_dec, zmasse)               !RomP
    466 
    467   CASE('inca')
    468      !    -- CHIMIE INCA  config_inca = aero or chem --
    469 
    470      CALL tracinca(&
    471           nstep,    julien,   gmtime,         lafin,     &
    472           pdtphys,  t_seri,   paprs,          pplay,     &
    473           pmfu,     ftsol,    pctsrf,         pphis,     &
    474           pphi,     albsol,   sh,             rh,        &
    475           cldfra,   rneb,     diafra,         cldliq,    &
    476           itop_con, ibas_con, pmflxr,         pmflxs,    &
    477           prfl,     psfl,     aerosol_couple, flxmass_w, &
    478           tau_aero, piz_aero, cg_aero,        ccm,       &
    479           rfname,                                        &
    480           tr_seri,  source,   solsym)     
    481 
    482   CASE('repr')
    483      !   -- CHIMIE REPROBUS --
    484 
    485      CALL tracreprobus(pdtphys, gmtime, debutphy, julien, &
    486           presnivs, xlat, xlon, pphis, pphi, &
    487           t_seri, pplay, paprs, sh , &
    488           tr_seri, solsym)
    489      
    490   END SELECT
    491 !======================================================================
    492 !       -- Calcul de l'effet de la convection --
    493 !======================================================================
    494 
    495   IF (iflag_con_trac==1) THEN
    496      DO it=1, nbtr
    497         IF ( conv_flg(it) == 0 ) CYCLE
    498         IF (iflag_con.LT.2) THEN
    499            d_tr_cv(:,:,it)=0.
    500         ELSE IF (iflag_con.EQ.2) THEN
    501 !..Tiedke
    502            CALL nflxtr(pdtphys, pmfu, pmfd, pen_u, pde_u, pen_d, pde_d, &
    503                 pplay, paprs, tr_seri(:,:,it), d_tr_cv(:,:,it))
    504 ! RomP >>>               
    505         ELSE   
    506 !..K.Emanuel                  !RomP modif arg
    507         if (convscav.and.aerosol(it)) then    ! lessivage convectif pour aerosol
    508 !
    509           CALL cvltr(pdtphys, da, phi,phi2,d1a,dam, mp,ep,              &
    510 !!               sigd,sij,clw,elij,epmlmMm,eplaMm,                        &   !RL
    511                sigd,sij,wght_cvfd,clw,elij,epmlmMm,eplaMm,              &     !RL
    512                pmflxr,pmflxs,evap,t_seri,wdtrainA,wdtrainM,             &   
    513                paprs,it,tr_seri,upwd,dnwd,itop_con,ibas_con,            &
    514                d_tr_cv,d_tr_trsp,d_tr_sscav,d_tr_sat,d_tr_uscav,qDi,qPr,&
    515                qPa,qMel,qTrdi,dtrcvMA,Mint,                             &
    516                zmfd1a,zmfphi2,zmfdam)
    517         else  !pas de lessivage convectif ou n'est pas un aerosol
    518 !!           CALL cvltrorig(it,pdtphys, da, phi,mp,paprs,pplay,tr_seri,&      !jyg
    519 !!                    upwd,dnwd,d_tr_cv)                                      !jyg
    520            CALL cvltr_noscav(it,pdtphys, da, phi,mp,wght_cvfd,paprs,pplay, &  !jyg
    521                     tr_seri,upwd,dnwd,d_tr_cv)                                !jyg
    522         endif
    523         END IF
    524 ! RomP <<<
    525 
    526         DO k = 1, klev
    527            DO i = 1, klon       
    528               tr_seri(i,k,it) = tr_seri(i,k,it) + d_tr_cv(i,k,it)
    529            END DO
    530         END DO
    531 
    532         CALL minmaxqfi(tr_seri(:,:,it),0.,1.e33,'convection it = '//solsym(it))
    533              
    534      END DO ! nbtr
    535   END IF ! convection
    536 
    537 !======================================================================
    538 !    -- Calcul de l'effet des thermiques --
    539 !======================================================================
    540 
    541   DO it=1,nbtr
    542      DO k=1,klev
    543         DO i=1,klon
    544            d_tr_th(i,k,it)=0.
    545            tr_seri(i,k,it)=MAX(tr_seri(i,k,it),0.)
    546            tr_seri(i,k,it)=MIN(tr_seri(i,k,it),1.e10)
    547         END DO
    548      END DO
    549   END DO
    550  
    551   IF (iflag_thermals.GT.0.AND.iflag_the_trac>0) THEN   
    552      nsplit=10
    553      DO it=1, nbtr
    554         DO isplit=1,nsplit
    555 
    556            CALL dqthermcell(klon,klev,pdtphys/nsplit, &
    557                 fm_therm,entr_therm,zmasse, &
    558                 tr_seri(1:klon,1:klev,it),d_tr,ztra_th)
    559 
    560            DO k=1,klev
    561               DO i=1,klon
    562                  d_tr(i,k)=pdtphys*d_tr(i,k)/nsplit
    563                  d_tr_th(i,k,it)=d_tr_th(i,k,it)+d_tr(i,k)
    564                  tr_seri(i,k,it)=MAX(tr_seri(i,k,it)+d_tr(i,k),0.)
    565               END DO
    566            END DO
    567         END DO ! nsplit
    568      END DO ! it
    569   END IF ! Thermiques
    570 
    571 !======================================================================
    572 !     -- Calcul de l'effet de la couche limite --
    573 !======================================================================
    574 
    575   DO k = 1, klev
    576      DO i = 1, klon
    577         delp(i,k) = paprs(i,k)-paprs(i,k+1)
    578      END DO
    579   END DO
    580 
    581   IF (iflag_vdf_trac==1) THEN
    582      DO it=1, nbtr
    583         if (prt_level > 20) write(lunout,*)'trac pbl ',it,pbl_flg(it)
    584         IF( pbl_flg(it) /= 0 ) THEN
    585            CALL cltrac(pdtphys, coefh,t_seri,       &
    586                 tr_seri(:,:,it), source(:,it),      &
    587                 paprs, pplay, delp,                 &
    588                 d_tr_cl(:,:,it),d_tr_dry(:,it),flux_tr_dry(:,it))
    589            tr_seri(:,:,it)=tr_seri(:,:,it)+d_tr_cl(:,:,it)
    590         END IF
    591      END DO
    592   ELSE IF (iflag_vdf_trac==0) THEN
    593 !   Injection of source in the first model layer
     509       !
     510       ! print out all tracer flags
     511       !
     512       WRITE(lunout,*) 'print out all tracer flags'
     513       WRITE(lunout,*) 'type_trac      =', type_trac
     514       WRITE(lunout,*) 'config_inca    =', config_inca
     515       WRITE(lunout,*) 'iflag_con_trac =', iflag_con_trac
     516       WRITE(lunout,*) 'iflag_con      =', iflag_con
     517       WRITE(lunout,*) 'convscav       =', convscav
     518       WRITE(lunout,*) 'iflag_lscav    =', iflag_lscav
     519       WRITE(lunout,*) 'aerosol        =', aerosol
     520       WRITE(lunout,*) 'iflag_the_trac =', iflag_the_trac
     521       WRITE(lunout,*) 'iflag_thermals =', iflag_thermals
     522       WRITE(lunout,*) 'iflag_vdf_trac =', iflag_vdf_trac
     523       WRITE(lunout,*) 'pbl_flg        =', pbl_flg
     524       WRITE(lunout,*) 'lessivage      =', lessivage
     525       write(lunout,*)  'flag_cvltr    = ', flag_cvltr
     526
     527       IF (lessivage.AND.config_inca.EQ.'inca') THEN
     528          CALL abort_gcm('phytrac', 'lessivage=T config_inca=inca impossible',1)
     529          STOP
     530       ENDIF
     531       !
     532    END IF ! of IF (debutphy)
     533    !############################################ END INITIALIZATION #######
     534
     535    DO k=1,klev
     536       DO i=1,klon
     537          zmasse(i,k)=(paprs(i,k)-paprs(i,k+1))/rg
     538       END DO
     539    END DO
     540    !
     541    IF (id_be .GT. 0) THEN
     542       DO k=1,klev
     543          DO i=1,klon
     544             sourceBE(i,k)=srcbe(i,k)       !RomP  -> pour sortie histrac
     545          END DO
     546       END DO
     547    ENDIF
     548
     549    !===============================================================================
     550    !    -- Do specific treatment according to chemestry model or local LMDZ tracers
     551    !     
     552    !===============================================================================
     553    SELECT CASE(type_trac)
     554    CASE('lmdz')
     555       !    -- Traitement des traceurs avec traclmdz
     556       CALL traclmdz(nstep, julien, gmtime, pdtphys, t_seri, paprs, pplay, &
     557            cdragh,  coefh, yu1, yv1, ftsol, pctsrf, xlat, xlon,iflag_vdf_trac>=0,sh, &
     558            rh, pphi, ustar, wstar, ale_bl, ale_wake,  u10m, v10m, &
     559            tr_seri, source, solsym, d_tr_cl,d_tr_dec, zmasse)               !RomP
     560
     561    CASE('inca')
     562       !    -- CHIMIE INCA  config_inca = aero or chem --
     563
     564       CALL tracinca(&
     565            nstep,    julien,   gmtime,         lafin,     &
     566            pdtphys,  t_seri,   paprs,          pplay,     &
     567            pmfu,     upwd,     ftsol,  pctsrf, pphis,     &
     568            pphi,     albsol,   sh,             rh,        &
     569            cldfra,   rneb,     diafra,         cldliq,    &
     570            itop_con, ibas_con, pmflxr,         pmflxs,    &
     571            prfl,     psfl,     aerosol_couple, flxmass_w, &
     572            tau_aero, piz_aero, cg_aero,        ccm,       &
     573            rfname,                                        &
     574            tr_seri,  source,   solsym)     
     575
     576    CASE('repr')
     577       !   -- CHIMIE REPROBUS --
     578
     579       CALL tracreprobus(pdtphys, gmtime, debutphy, julien, &
     580            presnivs, xlat, xlon, pphis, pphi, &
     581            t_seri, pplay, paprs, sh , &
     582            tr_seri, solsym)
     583
     584    END SELECT
     585    !======================================================================
     586    !       -- Calcul de l'effet de la convection --
     587    !======================================================================
     588
     589    IF (iflag_con_trac==1) THEN
     590
     591       DO it=1, nbtr
     592          IF ( conv_flg(it) == 0 ) CYCLE
     593          IF (iflag_con.LT.2) THEN
     594             !--pas de transport convectif
     595
     596             d_tr_cv(:,:,it)=0.
     597          ELSE IF (iflag_con.EQ.2) THEN
     598             !--ancien transport convectif de Tiedtke
     599
     600             CALL nflxtr(pdtphys, pmfu, pmfd, pen_u, pde_u, pen_d, pde_d, &
     601                  pplay, paprs, tr_seri(:,:,it), d_tr_cv(:,:,it))
     602          ELSE   
     603             !--nouveau transport convectif de Emanuel
     604
     605             IF (flag_cvltr(it)) THEN
     606                !--nouveau transport convectif de Emanuel avec lessivage convectif
     607                !
     608                !
     609                ccntrAA_3d(:,:) =ccntrAA(it)
     610                ccntrENV_3d(:,:)=ccntrENV(it)
     611                coefcoli_3d(:,:)=coefcoli(it)
     612
     613                !--beware this interface is a bit weird because it is called for each tracer
     614                !--with the full array tr_seri even if only item it is processed
     615
     616                CALL cvltr_scav(pdtphys, da, phi,phi2,d1a,dam, mp,ep,         &
     617                     sigd,sij,wght_cvfd,clw,elij,epmlmMm,eplaMm,              &     
     618                     pmflxr,pmflxs,evap,t_seri,wdtrainA,wdtrainM,             &   
     619                     paprs,it,tr_seri,upwd,dnwd,itop_con,ibas_con,            &
     620                     ccntrAA_3d,ccntrENV_3d,coefcoli_3d,                      &
     621                     d_tr_cv,d_tr_trsp,d_tr_sscav,d_tr_sat,d_tr_uscav,qDi,qPr,&
     622                     qPa,qMel,qTrdi,dtrcvMA,Mint,                             &
     623                     zmfd1a,zmfphi2,zmfdam)
     624
     625
     626             ELSE  !---flag_cvltr(it).EQ.FALSE
     627                !--nouveau transport convectif de Emanuel mais pas de lessivage convectif
     628
     629                !--beware this interface is a bit weird because it is called for each tracer
     630                !--with the full array tr_seri even if only item it is processed
     631                !
     632                CALL cvltr_noscav(it,pdtphys, da, phi,mp,wght_cvfd,paprs,pplay, &  !jyg
     633                     tr_seri,upwd,dnwd,d_tr_cv)                                !jyg
     634
     635             ENDIF
     636
     637          ENDIF !--iflag
     638
     639          !--on ajoute les tendances
     640
     641          DO k = 1, klev
     642             DO i = 1, klon       
     643                tr_seri(i,k,it) = tr_seri(i,k,it) + d_tr_cv(i,k,it)
     644             END DO
     645          END DO
     646
     647          CALL minmaxqfi(tr_seri(:,:,it),0.,1.e33,'convection it = '//solsym(it))
     648
     649       END DO ! nbtr
     650
     651    END IF ! convection
     652
     653    !======================================================================
     654    !    -- Calcul de l'effet des thermiques --
     655    !======================================================================
     656
    594657    DO it=1,nbtr
    595        d_tr_cl(:,1,it)=source(:,it)*rg/delp(:,1)*pdtphys
    596        tr_seri(:,1,it)=tr_seri(:,1,it)+d_tr_cl(:,1,it)
    597     ENDDO
    598     d_tr_cl(:,2:klev,1:nbtr)=0.
    599   ELSE IF (iflag_vdf_trac==-1) THEN
    600     d_tr_cl=0.
    601   ELSE
    602     CALL abort_gcm('iflag_vdf_trac', 'cas non prevu',1)
    603   END IF ! couche limite
    604 
    605 
    606 
    607 !======================================================================
    608 !   Calcul de l'effet de la precipitation grande echelle
    609 !======================================================================
    610   IF (lessivage) THEN
    611 
    612    ql_incloud_ref = 10.e-4
    613    ql_incloud_ref =  5.e-4
    614 
    615 
    616 ! calcul du contenu en eau liquide au sein du nuage
    617      ql_incl = ql_incloud_ref
    618 ! choix du lessivage
    619 !
    620   IF (iflag_lscav .EQ. 3 .OR. iflag_lscav .EQ. 4) THEN
    621 ! ********  Olivier Boucher version (3) possibly with modified ql_incl (4)
    622 !
    623    DO it = 1, nbtr
    624 !  incloud scavenging and removal by large scale rain ! orig : ql_incl was replaced by 0.5e-3 kg/kg
    625 ! the value 0.5e-3 kg/kg is from Giorgi and Chameides (1986), JGR
    626 ! Liu (2001) proposed to use 1.5e-3 kg/kg
    627 
    628     CALL lsc_scav(pdtphys,it,iflag_lscav,ql_incl,prfl,psfl,rneb,beta_fisrt,  &
     658       DO k=1,klev
     659          DO i=1,klon
     660             d_tr_th(i,k,it)=0.
     661             tr_seri(i,k,it)=MAX(tr_seri(i,k,it),0.)
     662             tr_seri(i,k,it)=MIN(tr_seri(i,k,it),1.e10)
     663          END DO
     664       END DO
     665    END DO
     666
     667    IF (iflag_thermals.GT.0.AND.iflag_the_trac>0) THEN   
     668
     669       DO it=1, nbtr
     670
     671          CALL thermcell_dq(klon,klev,1,pdtphys,fm_therm,entr_therm, &
     672               zmasse,tr_seri(1:klon,1:klev,it),        &
     673               d_tr_th(1:klon,1:klev,it),ztra_th,0 )
     674
     675          DO k=1,klev
     676             DO i=1,klon
     677                d_tr_th(i,k,it)=pdtphys*d_tr_th(i,k,it)
     678                tr_seri(i,k,it)=MAX(tr_seri(i,k,it)+d_tr_th(i,k,it),0.)
     679             END DO
     680          END DO
     681
     682       END DO ! it
     683
     684    END IF ! Thermiques
     685
     686    !======================================================================
     687    !     -- Calcul de l'effet de la couche limite --
     688    !======================================================================
     689
     690    IF (iflag_vdf_trac==1) THEN
     691
     692       !  Injection during BL mixing
     693       !
     694       DO it=1, nbtr
     695          !
     696          IF( pbl_flg(it) /= 0 ) THEN
     697             !
     698             CALL cltrac(pdtphys, coefh,t_seri,       &
     699                  tr_seri(:,:,it), source(:,it),      &
     700                  paprs, pplay, delp,                 &
     701                  d_tr_cl(:,:,it),d_tr_dry(:,it),flux_tr_dry(:,it))
     702             !
     703             tr_seri(:,:,it)=tr_seri(:,:,it)+d_tr_cl(:,:,it)
     704             !
     705          END IF
     706          !
     707       END DO
     708       !
     709    ELSE IF (iflag_vdf_trac==0) THEN
     710       !
     711       !   Injection of source in the first model layer
     712       !
     713       DO it=1,nbtr
     714          d_tr_cl(:,1,it)=source(:,it)*RG/delp(:,1)*pdtphys
     715          tr_seri(:,1,it)=tr_seri(:,1,it)+d_tr_cl(:,1,it)
     716       ENDDO
     717       d_tr_cl(:,2:klev,1:nbtr)=0.
     718       !
     719    ELSE IF (iflag_vdf_trac==-1) THEN
     720       !
     721       ! Nothing happens
     722       !
     723       d_tr_cl=0.
     724       !
     725    ELSE
     726       !
     727       CALL abort_gcm('iflag_vdf_trac', 'cas non prevu',1)
     728       !
     729    END IF ! couche limite
     730
     731    !======================================================================
     732    !   Calcul de l'effet de la precipitation grande echelle
     733    !   POUR INCA le lessivage est fait directement dans INCA
     734    !======================================================================
     735
     736    IF (lessivage) THEN
     737
     738       ql_incloud_ref = 10.e-4
     739       ql_incloud_ref =  5.e-4
     740
     741
     742       ! calcul du contenu en eau liquide au sein du nuage
     743       ql_incl = ql_incloud_ref
     744       ! choix du lessivage
     745       !
     746       IF (iflag_lscav .EQ. 3 .OR. iflag_lscav .EQ. 4) THEN
     747          ! ********  Olivier Boucher version (3) possibly with modified ql_incl (4)
     748          !
     749          DO it = 1, nbtr
     750             !  incloud scavenging and removal by large scale rain ! orig : ql_incl was replaced by 0.5e-3 kg/kg
     751             ! the value 0.5e-3 kg/kg is from Giorgi and Chameides (1986), JGR
     752             ! Liu (2001) proposed to use 1.5e-3 kg/kg
     753
     754             CALL lsc_scav(pdtphys,it,iflag_lscav,ql_incl,prfl,psfl,rneb,beta_fisrt,  &
    629755                  beta_v1,pplay,paprs,t_seri,tr_seri,d_tr_insc,   &
    630756                  d_tr_bcscav,d_tr_evapls,qPrls)
    631757
    632 !large scale scavenging tendency
    633    DO k = 1, klev
    634     DO i = 1, klon
    635     d_tr_ls(i,k,it)=d_tr_insc(i,k,it)+d_tr_bcscav(i,k,it)+d_tr_evapls(i,k,it)
    636     tr_seri(i,k,it)=tr_seri(i,k,it)+d_tr_ls(i,k,it)
    637     ENDDO
    638    ENDDO
    639      CALL minmaxqfi(tr_seri(:,:,it),0.,1.e33,'lsc scav it = '//solsym(it))
    640    END DO  !tr
    641 
    642  ELSE IF (iflag_lscav .EQ. 2) THEN ! frac_impa, frac_nucl
    643 ! *********   modified  old version
    644 
    645      d_tr_lessi_nucl(:,:,:) = 0.
    646      d_tr_lessi_impa(:,:,:) = 0.
    647      flestottr(:,:,:) = 0.
    648 ! Tendance des aerosols nuclees et impactes
    649      DO it = 1, nbtr
    650         IF (aerosol(it)) THEN
    651         his_dh(:)=0.
    652            DO k = 1, klev
    653               DO i = 1, klon
    654 !PhH
    655               zrho(i,k)=pplay(i,k)/t_seri(i,k)/RD
    656               zdz(i,k)=(paprs(i,k)-paprs(i,k+1))/zrho(i,k)/RG
    657 !
    658               END DO
    659            END DO
    660 
    661           DO k=klev-1, 1, -1
    662             DO i=1, klon
    663 !             d_tr_ls(i,k,it)=tr_seri(i,k,it)*(frac_impa(i,k)*frac_nucl(i,k)-1.)
    664              dx=d_tr_ls(i,k,it)
    665              his_dh(i)=his_dh(i)-dx*zrho(i,k)*zdz(i,k)/pdtphys !  kg/m2/s
    666              evaplsc = prfl(i,k) - prfl(i,k+1) + psfl(i,k) - psfl(i,k+1)
    667 ! Evaporation Partielle -> Liberation Partielle 0.5*evap
    668             IF ( evaplsc .LT.0..and.abs(prfl(i,k+1)+psfl(i,k+1)).gt.1.e-10) THEN
    669                 evaplsc = (-evaplsc)/(prfl(i,k+1)+psfl(i,k+1))
    670 ! evaplsc est donc positif, his_dh(i) est positif
    671 !-------------- 
    672              d_tr_evapls(i,k,it)=0.5*evaplsc*(d_tr_lessi_nucl(i,k+1,it) &
    673                                   +d_tr_lessi_impa(i,k+1,it))
    674 !-------------   d_tr_evapls(i,k,it)=-0.5*evaplsc*(d_tr_lsc(i,k+1,it))
    675              beta=0.5*evaplsc
    676               if ((prfl(i,k)+psfl(i,k)).lt.1.e-10) THEN
    677                beta=1.0*evaplsc
    678               endif
    679             dx=beta*his_dh(i)/zrho(i,k)/zdz(i,k)*pdtphys
    680             his_dh(i)=(1.-beta)*his_dh(i)   ! tracer from
    681             d_tr_evapls(i,k,it)=dx
    682             ENDIF
    683             d_tr_ls(i,k,it)=tr_seri(i,k,it)*(frac_impa(i,k)*frac_nucl(i,k)-1.) &
    684                             +d_tr_evapls(i,k,it)
    685 
    686 !--------------
    687                  d_tr_lessi_nucl(i,k,it) = d_tr_lessi_nucl(i,k,it) +    &
    688                       ( 1 - frac_nucl(i,k) )*tr_seri(i,k,it)
    689                  d_tr_lessi_impa(i,k,it) = d_tr_lessi_impa(i,k,it) +    &
    690                       ( 1 - frac_impa(i,k) )*tr_seri(i,k,it)
    691 !
    692 ! Flux lessivage total
    693                  flestottr(i,k,it) = flestottr(i,k,it) -   &
    694                       ( d_tr_lessi_nucl(i,k,it)   +        &
    695                       d_tr_lessi_impa(i,k,it) ) *          &
    696                       ( paprs(i,k)-paprs(i,k+1) ) /        &
    697                       (RG * pdtphys)
    698 !! Mise a jour des traceurs due a l'impaction,nucleation
    699 !                 tr_seri(i,k,it)=tr_seri(i,k,it)*frac_impa(i,k)*frac_nucl(i,k)
    700 !!  calcul de la tendance liee au lessivage stratiforme
    701 !                 d_tr_ls(i,k,it)=tr_seri(i,k,it)*&
    702 !                                (1.-1./(frac_impa(i,k)*frac_nucl(i,k)))
    703 !--------------
    704               END DO
    705            END DO
    706         END IF
    707      END DO
    708 ! *********   end modified old version
    709 
    710  ELSE IF (iflag_lscav .EQ. 1) THEN ! frac_impa, frac_nucl
    711 ! *********    old version
    712 
    713      d_tr_lessi_nucl(:,:,:) = 0.
    714      d_tr_lessi_impa(:,:,:) = 0.
    715      flestottr(:,:,:) = 0.
    716 !=========================
    717 ! LESSIVAGE LARGE SCALE :
    718 !=========================
    719 
    720 ! Tendance des aerosols nuclees et impactes
    721 ! -----------------------------------------
    722      DO it = 1, nbtr
    723         IF (aerosol(it)) THEN
    724            DO k = 1, klev
    725               DO i = 1, klon
    726                  d_tr_lessi_nucl(i,k,it) = d_tr_lessi_nucl(i,k,it) +    &
    727                       ( 1 - frac_nucl(i,k) )*tr_seri(i,k,it)
    728                  d_tr_lessi_impa(i,k,it) = d_tr_lessi_impa(i,k,it) +    &
    729                       ( 1 - frac_impa(i,k) )*tr_seri(i,k,it)
    730 
    731 !
    732 ! Flux lessivage total
    733 ! ------------------------------------------------------------
    734                  flestottr(i,k,it) = flestottr(i,k,it) -   &
    735                       ( d_tr_lessi_nucl(i,k,it)   +        &
    736                       d_tr_lessi_impa(i,k,it) ) *          &
    737                       ( paprs(i,k)-paprs(i,k+1) ) /        &
    738                       (RG * pdtphys)
    739 !
    740 ! Mise a jour des traceurs due a l'impaction,nucleation
    741 ! ----------------------------------------------------------------------
    742                  tr_seri(i,k,it)=tr_seri(i,k,it)*frac_impa(i,k)*frac_nucl(i,k)
    743               END DO
    744            END DO
    745         END IF
    746      END DO
    747      
    748 ! *********   end old version
    749   ENDIF  !  iflag_lscav . EQ. 1, 2, 3 or 4
    750 !
    751   END IF !  lessivage
    752 
    753 !=============================================================
    754 !   Ecriture des sorties
    755 !=============================================================
     758             !large scale scavenging tendency
     759             DO k = 1, klev
     760                DO i = 1, klon
     761                   d_tr_ls(i,k,it)=d_tr_insc(i,k,it)+d_tr_bcscav(i,k,it)+d_tr_evapls(i,k,it)
     762                   tr_seri(i,k,it)=tr_seri(i,k,it)+d_tr_ls(i,k,it)
     763                ENDDO
     764             ENDDO
     765             CALL minmaxqfi(tr_seri(:,:,it),0.,1.e33,'lsc scav it = '//solsym(it))
     766          END DO  !tr
     767
     768       ELSE IF (iflag_lscav .EQ. 2) THEN ! frac_impa, frac_nucl
     769          ! *********   modified  old version
     770
     771          d_tr_lessi_nucl(:,:,:) = 0.
     772          d_tr_lessi_impa(:,:,:) = 0.
     773          flestottr(:,:,:) = 0.
     774          ! Tendance des aerosols nuclees et impactes
     775          DO it = 1, nbtr
     776             IF (aerosol(it)) THEN
     777                his_dh(:)=0.
     778                DO k = 1, klev
     779                   DO i = 1, klon
     780                      !PhH
     781                      zrho(i,k)=pplay(i,k)/t_seri(i,k)/RD
     782                      zdz(i,k)=(paprs(i,k)-paprs(i,k+1))/zrho(i,k)/RG
     783                      !
     784                   END DO
     785                END DO
     786
     787                DO k=klev-1, 1, -1
     788                   DO i=1, klon
     789                      !             d_tr_ls(i,k,it)=tr_seri(i,k,it)*(frac_impa(i,k)*frac_nucl(i,k)-1.)
     790                      dx=d_tr_ls(i,k,it)
     791                      his_dh(i)=his_dh(i)-dx*zrho(i,k)*zdz(i,k)/pdtphys !  kg/m2/s
     792                      evaplsc = prfl(i,k) - prfl(i,k+1) + psfl(i,k) - psfl(i,k+1)
     793                      ! Evaporation Partielle -> Liberation Partielle 0.5*evap
     794                      IF ( evaplsc .LT.0..and.abs(prfl(i,k+1)+psfl(i,k+1)).gt.1.e-10) THEN
     795                         evaplsc = (-evaplsc)/(prfl(i,k+1)+psfl(i,k+1))
     796                         ! evaplsc est donc positif, his_dh(i) est positif
     797                         !-------------- 
     798                         d_tr_evapls(i,k,it)=0.5*evaplsc*(d_tr_lessi_nucl(i,k+1,it) &
     799                              +d_tr_lessi_impa(i,k+1,it))
     800                         !-------------   d_tr_evapls(i,k,it)=-0.5*evaplsc*(d_tr_lsc(i,k+1,it))
     801                         beta=0.5*evaplsc
     802                         if ((prfl(i,k)+psfl(i,k)).lt.1.e-10) THEN
     803                            beta=1.0*evaplsc
     804                         endif
     805                         dx=beta*his_dh(i)/zrho(i,k)/zdz(i,k)*pdtphys
     806                         his_dh(i)=(1.-beta)*his_dh(i)   ! tracer from
     807                         d_tr_evapls(i,k,it)=dx
     808                      ENDIF
     809                      d_tr_ls(i,k,it)=tr_seri(i,k,it)*(frac_impa(i,k)*frac_nucl(i,k)-1.) &
     810                           +d_tr_evapls(i,k,it)
     811
     812                      !--------------
     813                      d_tr_lessi_nucl(i,k,it) = d_tr_lessi_nucl(i,k,it) +    &
     814                           ( 1 - frac_nucl(i,k) )*tr_seri(i,k,it)
     815                      d_tr_lessi_impa(i,k,it) = d_tr_lessi_impa(i,k,it) +    &
     816                           ( 1 - frac_impa(i,k) )*tr_seri(i,k,it)
     817                      !
     818                      ! Flux lessivage total
     819                      flestottr(i,k,it) = flestottr(i,k,it) -   &
     820                           ( d_tr_lessi_nucl(i,k,it)   +        &
     821                           d_tr_lessi_impa(i,k,it) ) *          &
     822                           ( paprs(i,k)-paprs(i,k+1) ) /        &
     823                           (RG * pdtphys)
     824                      !! Mise a jour des traceurs due a l'impaction,nucleation
     825                      !                 tr_seri(i,k,it)=tr_seri(i,k,it)*frac_impa(i,k)*frac_nucl(i,k)
     826                      !!  calcul de la tendance liee au lessivage stratiforme
     827                      !                 d_tr_ls(i,k,it)=tr_seri(i,k,it)*&
     828                      !                                (1.-1./(frac_impa(i,k)*frac_nucl(i,k)))
     829                      !--------------
     830                   END DO
     831                END DO
     832             END IF
     833          END DO
     834          ! *********   end modified old version
     835
     836       ELSE IF (iflag_lscav .EQ. 1) THEN ! frac_impa, frac_nucl
     837          ! *********    old version
     838
     839          d_tr_lessi_nucl(:,:,:) = 0.
     840          d_tr_lessi_impa(:,:,:) = 0.
     841          flestottr(:,:,:) = 0.
     842          !=========================
     843          ! LESSIVAGE LARGE SCALE :
     844          !=========================
     845
     846          ! Tendance des aerosols nuclees et impactes
     847          ! -----------------------------------------
     848          DO it = 1, nbtr
     849             IF (aerosol(it)) THEN
     850                DO k = 1, klev
     851                   DO i = 1, klon
     852                      d_tr_lessi_nucl(i,k,it) = d_tr_lessi_nucl(i,k,it) +    &
     853                           ( 1 - frac_nucl(i,k) )*tr_seri(i,k,it)
     854                      d_tr_lessi_impa(i,k,it) = d_tr_lessi_impa(i,k,it) +    &
     855                           ( 1 - frac_impa(i,k) )*tr_seri(i,k,it)
     856
     857                      !
     858                      ! Flux lessivage total
     859                      ! ------------------------------------------------------------
     860                      flestottr(i,k,it) = flestottr(i,k,it) -   &
     861                           ( d_tr_lessi_nucl(i,k,it)   +        &
     862                           d_tr_lessi_impa(i,k,it) ) *          &
     863                           ( paprs(i,k)-paprs(i,k+1) ) /        &
     864                           (RG * pdtphys)
     865                      !
     866                      ! Mise a jour des traceurs due a l'impaction,nucleation
     867                      ! ----------------------------------------------------------------------
     868                      tr_seri(i,k,it)=tr_seri(i,k,it)*frac_impa(i,k)*frac_nucl(i,k)
     869                   END DO
     870                END DO
     871             END IF
     872          END DO
     873
     874          ! *********   end old version
     875       ENDIF  !  iflag_lscav . EQ. 1, 2, 3 or 4
     876       !
     877    END IF !  lessivage
     878
     879    !=============================================================
     880    !   Ecriture des sorties
     881    !=============================================================
    756882#ifdef CPP_IOIPSL
    757 ! INCLUDE "write_histrac.h"
     883    ! INCLUDE "write_histrac.h"
    758884#endif
    759885
    760 END SUBROUTINE phytrac
     886  END SUBROUTINE phytrac
    761887
    762888END MODULE
  • LMDZ5/trunk/libf/phylmd/radlwsw_m.F90

    r2043 r2146  
    1616   flag_aerosol_strat,&
    1717   tau_aero, piz_aero, cg_aero,&
    18    tau_aero_rrtm, piz_aero_rrtm, cg_aero_rrtm,& ! rajoute par OB pour RRTM
     18   tau_aero_sw_rrtm, piz_aero_sw_rrtm, cg_aero_sw_rrtm,& ! rajoute par OB pour RRTM
     19   tau_aero_lw_rrtm, &                                   ! rajoute par C. Kleinschmitt pour RRTM
    1920   cldtaupi, new_aod, &
    2021   qsat, flwc, fiwc, &
     
    3233   solsw_aero, solsw0_aero, &
    3334   topswcf_aero, solswcf_aero,&
     35!-C. Kleinschmitt for LW diagnostics
     36   toplwad_aero, sollwad_aero,&
     37   toplwai_aero, sollwai_aero, &
     38   toplwad0_aero, sollwad0_aero,&
     39!-end
    3440   ZLWFT0_i, ZFLDN0, ZFLUP0,&
    3541   ZSWFT0_i, ZFSDN0, ZFSUP0)
     
    5157!     USE YOERAD   , ONLY : NSW      ,LRRTM    ,LCCNL    ,LCCNO ,&
    5258! NSW mis dans .def MPL 20140211
    53       USE YOERAD   , ONLY : LRRTM    ,LCCNL    ,LCCNO ,&
     59! NLW ajoute par OB
     60      USE YOERAD   , ONLY : NLW, LRRTM    ,LCCNL    ,LCCNO ,&
    5461          NRADIP   , NRADLP , NICEOPT, NLIQOPT ,RCCNLND  , RCCNSEA
    5562      USE YOELW    , ONLY : NSIL     ,NTRA     ,NUA      ,TSTAND   ,XP
     
    6774      USE YOERRTWN , ONLY : DELWAVE   ,TOTPLNK     
    6875      USE YOMPHY3  , ONLY : RII0
     76#else
     77      USE aero_mod, ONLY : nbands_lw_rrtm
    6978#endif
    7079
     
    182191  REAL,    INTENT(in)  :: cg_aero(KLON,KLEV,9,2)                         ! aerosol optical properties (see aeropt.F)
    183192!--OB
    184   REAL,    INTENT(in)  :: tau_aero_rrtm(KLON,KLEV,2,NSW)                 ! aerosol optical properties RRTM
    185   REAL,    INTENT(in)  :: piz_aero_rrtm(KLON,KLEV,2,NSW)                 ! aerosol optical properties RRTM
    186   REAL,    INTENT(in)  :: cg_aero_rrtm(KLON,KLEV,2,NSW)                  ! aerosol optical properties RRTM
     193  REAL,    INTENT(in)  :: tau_aero_sw_rrtm(KLON,KLEV,2,NSW)                 ! aerosol optical properties RRTM
     194  REAL,    INTENT(in)  :: piz_aero_sw_rrtm(KLON,KLEV,2,NSW)                 ! aerosol optical properties RRTM
     195  REAL,    INTENT(in)  :: cg_aero_sw_rrtm(KLON,KLEV,2,NSW)                  ! aerosol optical properties RRTM
    187196!--OB fin
     197
     198!--C. Kleinschmitt
     199#ifdef CPP_RRTM
     200  REAL,    INTENT(in)  :: tau_aero_lw_rrtm(KLON,KLEV,2,NLW)                 ! LW aerosol optical properties RRTM
     201#else
     202  REAL,    INTENT(in)  :: tau_aero_lw_rrtm(KLON,KLEV,2,nbands_lw_rrtm)
     203#endif
     204!--C. Kleinschmitt end
     205
    188206  REAL,    INTENT(in)  :: cldtaupi(KLON,KLEV)                            ! cloud optical thickness for pre-industrial aerosol concentrations
    189207  LOGICAL, INTENT(in)  :: new_aod                                        ! flag pour retrouver les resultats exacts de l'AR4 dans le cas ou l'on ne travaille qu'avec les sulfates
     
    209227  REAL,    INTENT(out) :: topswad_aero(KLON), solswad_aero(KLON)         ! output: aerosol direct forcing at TOA and surface
    210228  REAL,    INTENT(out) :: topswai_aero(KLON), solswai_aero(KLON)         ! output: aerosol indirect forcing atTOA and surface
     229  REAL,    INTENT(out) :: toplwad_aero(KLON), sollwad_aero(KLON)         ! output: LW aerosol direct forcing at TOA and surface
     230  REAL,    INTENT(out) :: toplwai_aero(KLON), sollwai_aero(KLON)         ! output: LW aerosol indirect forcing atTOA and surface
    211231  REAL, DIMENSION(klon), INTENT(out)    :: topswad0_aero
    212232  REAL, DIMENSION(klon), INTENT(out)    :: solswad0_aero
     233  REAL, DIMENSION(klon), INTENT(out)    :: toplwad0_aero
     234  REAL, DIMENSION(klon), INTENT(out)    :: sollwad0_aero
    213235  REAL, DIMENSION(kdlon,9), INTENT(out) :: topsw_aero
    214236  REAL, DIMENSION(kdlon,9), INTENT(out) :: topsw0_aero
     
    271293  REAL(KIND=8) ztopswad0aero(kdlon), zsolswad0aero(kdlon)   ! Aerosol direct forcing at TOAand surface
    272294  REAL(KIND=8) ztopswaiaero(kdlon), zsolswaiaero(kdlon)     ! dito, indirect
     295!-LW by CK
     296  REAL(KIND=8) ztoplwadaero(kdlon), zsollwadaero(kdlon)     ! LW Aerosol direct forcing at TOAand surface
     297  REAL(KIND=8) ztoplwad0aero(kdlon), zsollwad0aero(kdlon)   ! LW Aerosol direct forcing at TOAand surface
     298  REAL(KIND=8) ztoplwaiaero(kdlon), zsollwaiaero(kdlon)     ! dito, indirect
     299!-end
    273300  REAL(KIND=8) ztopsw_aero(kdlon,9), ztopsw0_aero(kdlon,9)
    274301  REAL(KIND=8) zsolsw_aero(kdlon,9), zsolsw0_aero(kdlon,9)
     
    316343      REAL(KIND=8) PCGA_NAT(klon,klev,NSW)
    317344      REAL(KIND=8) PTAU_NAT(klon,klev,NSW)
     345#ifdef CPP_RRTM
     346      REAL(KIND=8) PTAU_LW_TOT(klon,klev,NLW)
     347      REAL(KIND=8) PTAU_LW_NAT(klon,klev,NLW)
     348#endif
    318349      REAL(KIND=8) PSFSWDIR(klon,NSW)
    319350      REAL(KIND=8) PSFSWDIF(klon,NSW)
     
    644675      DO kk=1, NSW
    645676!
    646       PTAU_TOT(i,kflev+1-k,kk)=tau_aero_rrtm(i,k,2,kk)
    647       PPIZA_TOT(i,kflev+1-k,kk)=piz_aero_rrtm(i,k,2,kk)
    648       PCGA_TOT(i,kflev+1-k,kk)=cg_aero_rrtm(i,k,2,kk)
    649 !
    650       PTAU_NAT(i,kflev+1-k,kk)=tau_aero_rrtm(i,k,1,kk)
    651       PPIZA_NAT(i,kflev+1-k,kk)=piz_aero_rrtm(i,k,1,kk)
    652       PCGA_NAT(i,kflev+1-k,kk)=cg_aero_rrtm(i,k,1,kk)
     677      PTAU_TOT(i,kflev+1-k,kk)=tau_aero_sw_rrtm(i,k,2,kk)
     678      PPIZA_TOT(i,kflev+1-k,kk)=piz_aero_sw_rrtm(i,k,2,kk)
     679      PCGA_TOT(i,kflev+1-k,kk)=cg_aero_sw_rrtm(i,k,2,kk)
     680!
     681      PTAU_NAT(i,kflev+1-k,kk)=tau_aero_sw_rrtm(i,k,1,kk)
     682      PPIZA_NAT(i,kflev+1-k,kk)=piz_aero_sw_rrtm(i,k,1,kk)
     683      PCGA_NAT(i,kflev+1-k,kk)=cg_aero_sw_rrtm(i,k,1,kk)
    653684!
    654685      ENDDO
     
    657688!-end OB
    658689!
     690!--C. Kleinschmitt
     691!--aerosol TOT  - anthropogenic+natural
     692!--aerosol NAT  - natural only
     693!
     694      DO i = 1, kdlon
     695      DO k = 1, kflev
     696      DO kk=1, NLW
     697!
     698      PTAU_LW_TOT(i,kflev+1-k,kk)=tau_aero_lw_rrtm(i,k,2,kk)
     699      PTAU_LW_NAT(i,kflev+1-k,kk)=tau_aero_lw_rrtm(i,k,1,kk)
     700!
     701      ENDDO
     702      ENDDO
     703      ENDDO
     704!-end C. Kleinschmitt
    659705!     
    660706      DO i = 1, kdlon
     
    761807         PPIZA_TOT, PCGA_TOT,PTAU_TOT,&
    762808         PPIZA_NAT, PCGA_NAT,PTAU_NAT,           &  ! rajoute par OB pour diagnostiquer effet direct
     809         PTAU_LW_TOT, PTAU_LW_NAT,               &  ! rajoute par C. Kleinschmitt
    763810         ZFLUX_i  , ZFLUC_i ,&
    764811         ZFSDWN_i , ZFSUP_i , ZFCDWN_i, ZFCUP_i,&
     
    767814         ZTOPSWAIAERO,ZSOLSWAIAERO, &
    768815         ZTOPSWCF_AERO,ZSOLSWCF_AERO, &
     816         ZTOPLWADAERO,ZSOLLWADAERO,&  ! rajoute par C. Kleinscmitt pour LW diagnostics
     817         ZTOPLWAD0AERO,ZSOLLWAD0AERO,&
     818         ZTOPLWAIAERO,ZSOLLWAIAERO, &
    769819         ok_ade, ok_aie, flag_aerosol,flag_aerosol_strat) ! flags aerosols
    770820           
     
    813863!  PPIZA_NAT    (KPROMA,KLEV,NSW); Single scattering albedo of natural aerosols
    814864!  PCGA_NAT     (KPROMA,KLEV,NSW); Assymetry factor for natural aerosols
    815 !  PTAU_NAT     (KPROMA,KLEV,NSW); Optical depth of natiral aerosols
     865!  PTAU_NAT     (KPROMA,KLEV,NSW); Optical depth of natiral aerosols
     866!  PTAU_LW_TOT  (KPROMA,KLEV,NLW); LW Optical depth of total aerosols 
     867!  PTAU_LW_NAT  (KPROMA,KLEV,NLW); LW Optical depth of natural aerosols 
    816868!  PSFSWDIR     (KPROMA,NSW)     ;
    817869!  PSFSWDIF     (KPROMA,NSW)     ;
     
    9741026          solsw0_aero(iof+i,:) = zsolsw0_aero(i,:)
    9751027          topswcf_aero(iof+i,:) = ztopswcf_aero(i,:)
    976           solswcf_aero(iof+i,:) = zsolswcf_aero(i,:)         
     1028          solswcf_aero(iof+i,:) = zsolswcf_aero(i,:)   
     1029          !-LW
     1030          toplwad_aero(iof+i) = ztoplwadaero(i)
     1031          toplwad0_aero(iof+i) = ztoplwad0aero(i)
     1032          sollwad_aero(iof+i) = zsollwadaero(i)
     1033          sollwad0_aero(iof+i) = zsollwad0aero(i)   
    9771034        ENDDO
    9781035    ELSE
     
    9861043          solsw_aero(iof+i,:) = 0.
    9871044          solsw0_aero(iof+i,:) = 0.
     1045          !-LW
     1046          toplwad_aero(iof+i) = 0.0
     1047          sollwad_aero(iof+i) = 0.0
     1048          toplwad0_aero(iof+i) = 0.0
     1049          sollwad0_aero(iof+i) = 0.0
    9881050        ENDDO
    9891051    ENDIF
     
    9921054          topswai_aero(iof+i) = ztopswaiaero(i)
    9931055          solswai_aero(iof+i) = zsolswaiaero(i)
     1056          !-LW
     1057          toplwai_aero(iof+i) = ztoplwaiaero(i)
     1058          sollwai_aero(iof+i) = zsollwaiaero(i)
    9941059        ENDDO
    9951060    ELSE
     
    9971062          topswai_aero(iof+i) = 0.0
    9981063          solswai_aero(iof+i) = 0.0
     1064          !-LW
     1065          toplwai_aero(iof+i) = 0.0
     1066          sollwai_aero(iof+i) = 0.0
    9991067        ENDDO
    10001068    ENDIF
  • LMDZ5/trunk/libf/phylmd/readaerosol_optic.F90

    r2003 r2146  
    1414  USE dimphy
    1515  USE aero_mod
    16   USE phys_local_var_mod, only: sconcso4,sconcoa,sconcbc,sconcss,sconcdust, &
    17       concso4,concoa,concbc,concss,concdust,loadso4,loadoa,loadbc,loadss,loaddust, &
     16  USE phys_local_var_mod, only: sconcso4,sconcno3,sconcoa,sconcbc,sconcss,sconcdust, &
     17      concso4,concno3,concoa,concbc,concss,concdust,loadso4,loadoa,loadbc,loadss,loaddust, &
    1818      load_tmp1,load_tmp2,load_tmp3,load_tmp4,load_tmp5,load_tmp6,load_tmp7
    1919  IMPLICIT NONE
     
    8282       flag_aerosol .EQ. 6 ) THEN
    8383
    84      CALL readaerosol_interp(id_ASSO4M, itap, pdtphys, rjourvrai, debut, pplay, paprs, t_seri, sulfate, sulfate_pi,loadso4)
     84     CALL readaerosol_interp(id_ASSO4M_phy, itap, pdtphys, rjourvrai, debut, pplay, paprs, t_seri, sulfate, sulfate_pi,loadso4)
    8585  ELSE
    8686     sulfate(:,:) = 0. ; sulfate_pi(:,:) = 0.
     
    9393
    9494     ! Get bc aerosol distribution
    95      CALL readaerosol_interp(id_ASBCM, itap, pdtphys, rjourvrai, debut, pplay, paprs, t_seri, bcsol, bcsol_pi, load_tmp1 )
    96      CALL readaerosol_interp(id_AIBCM, itap, pdtphys, rjourvrai, debut, pplay, paprs, t_seri, bcins, bcins_pi, load_tmp2 )
     95     CALL readaerosol_interp(id_ASBCM_phy, itap, pdtphys, rjourvrai, debut, pplay, paprs, t_seri, bcsol, bcsol_pi, load_tmp1 )
     96     CALL readaerosol_interp(id_AIBCM_phy, itap, pdtphys, rjourvrai, debut, pplay, paprs, t_seri, bcins, bcins_pi, load_tmp2 )
    9797     loadbc(:)=load_tmp1(:)+load_tmp2(:)
    9898  ELSE
     
    107107       flag_aerosol .EQ. 6 ) THEN
    108108
    109      CALL readaerosol_interp(id_ASPOMM, itap, pdtphys, rjourvrai, debut, pplay, paprs, t_seri, pomsol, pomsol_pi, load_tmp3)
    110      CALL readaerosol_interp(id_AIPOMM, itap, pdtphys, rjourvrai, debut, pplay, paprs, t_seri, pomins, pomins_pi, load_tmp4)
     109     CALL readaerosol_interp(id_ASPOMM_phy, itap, pdtphys, rjourvrai, debut, pplay, paprs, t_seri, pomsol, pomsol_pi, load_tmp3)
     110     CALL readaerosol_interp(id_AIPOMM_phy, itap, pdtphys, rjourvrai, debut, pplay, paprs, t_seri, pomins, pomins_pi, load_tmp4)
    111111     loadoa(:)=load_tmp3(:)+load_tmp4(:)
    112112  ELSE
     
    121121      flag_aerosol .EQ. 6 ) THEN
    122122
    123       CALL readaerosol_interp(id_SSSSM ,itap, pdtphys, rjourvrai, debut, pplay, paprs, t_seri, sssupco, sssupco_pi, load_tmp5)
    124       CALL readaerosol_interp(id_CSSSM ,itap, pdtphys, rjourvrai, debut, pplay, paprs, t_seri, sscoarse,sscoarse_pi, load_tmp6)
    125       CALL readaerosol_interp(id_ASSSM ,itap, pdtphys, rjourvrai, debut, pplay, paprs, t_seri, ssacu, ssacu_pi, load_tmp7)
     123      CALL readaerosol_interp(id_SSSSM_phy ,itap, pdtphys, rjourvrai, debut, pplay, paprs, t_seri, sssupco, sssupco_pi, load_tmp5)
     124      CALL readaerosol_interp(id_CSSSM_phy ,itap, pdtphys, rjourvrai, debut, pplay, paprs, t_seri, sscoarse,sscoarse_pi, load_tmp6)
     125      CALL readaerosol_interp(id_ASSSM_phy ,itap, pdtphys, rjourvrai, debut, pplay, paprs, t_seri, ssacu, ssacu_pi, load_tmp7)
    126126     loadss(:)=load_tmp5(:)+load_tmp6(:)+load_tmp7(:)
    127127  ELSE
     
    136136      flag_aerosol .EQ. 6 ) THEN
    137137
    138       CALL readaerosol_interp(id_CIDUSTM, itap, pdtphys, rjourvrai, debut, pplay, paprs, t_seri, cidust, cidust_pi, loaddust)
     138      CALL readaerosol_interp(id_CIDUSTM_phy, itap, pdtphys, rjourvrai, debut, pplay, paprs, t_seri, cidust, cidust_pi, loaddust)
    139139
    140140  ELSE
     
    146146! Store all aerosols in one variable
    147147!
    148   m_allaer(:,:,id_ASBCM)  = bcsol(:,:)        ! ASBCM
    149   m_allaer(:,:,id_ASPOMM) = pomsol(:,:)       ! ASPOMM
    150   m_allaer(:,:,id_ASSO4M) = sulfate(:,:)      ! ASSO4M (= SO4)
    151   m_allaer(:,:,id_CSSO4M) = 0.                ! CSSO4M
    152   m_allaer(:,:,id_SSSSM)  = sssupco(:,:)      ! SSSSM
    153   m_allaer(:,:,id_CSSSM)  = sscoarse(:,:)     ! CSSSM
    154   m_allaer(:,:,id_ASSSM)  = ssacu(:,:)        ! ASSSM
    155   m_allaer(:,:,id_CIDUSTM)= cidust(:,:)       ! CIDUSTM
    156   m_allaer(:,:,id_AIBCM)  = bcins(:,:)        ! AIBCM
    157   m_allaer(:,:,id_AIPOMM) = pomins(:,:)       ! AIPOMM
     148  m_allaer(:,:,id_ASBCM_phy)  = bcsol(:,:)        ! ASBCM
     149  m_allaer(:,:,id_ASPOMM_phy) = pomsol(:,:)       ! ASPOMM
     150  m_allaer(:,:,id_ASSO4M_phy) = sulfate(:,:)      ! ASSO4M (= SO4)
     151  m_allaer(:,:,id_CSSO4M_phy) = 0.                ! CSSO4M
     152  m_allaer(:,:,id_SSSSM_phy)  = sssupco(:,:)      ! SSSSM
     153  m_allaer(:,:,id_CSSSM_phy)  = sscoarse(:,:)     ! CSSSM
     154  m_allaer(:,:,id_ASSSM_phy)  = ssacu(:,:)        ! ASSSM
     155  m_allaer(:,:,id_CIDUSTM_phy)= cidust(:,:)       ! CIDUSTM
     156  m_allaer(:,:,id_AIBCM_phy)  = bcins(:,:)        ! AIBCM
     157  m_allaer(:,:,id_AIPOMM_phy) = pomins(:,:)       ! AIPOMM
    158158
    159159!RAF
     
    207207
    208208     CALL aeropt(pplay, paprs, t_seri, sulfate, rhcl, &
    209           tau_aero(:,:,id_ASSO4M,:), piz_aero(:,:,id_ASSO4M,:), cg_aero(:,:,id_ASSO4M,:), aerindex)
     209          tau_aero(:,:,id_ASSO4M_phy,:), piz_aero(:,:,id_ASSO4M_phy,:), cg_aero(:,:,id_ASSO4M_phy,:), aerindex)
    210210     
    211211  END IF
     
    213213
    214214! Diagnostics calculation for CMIP5 protocol
    215   sconcso4(:)=m_allaer(:,1,id_ASSO4M)*1.e-9
    216   sconcoa(:)=(m_allaer(:,1,id_ASPOMM)+m_allaer(:,1,id_AIPOMM))*1.e-9
    217   sconcbc(:)=(m_allaer(:,1,id_ASBCM)+m_allaer(:,1,id_AIBCM))*1.e-9
    218   sconcss(:)=(m_allaer(:,1,id_ASSSM)+m_allaer(:,1,id_CSSSM)+m_allaer(:,1,id_SSSSM))*1.e-9
    219   sconcdust(:)=m_allaer(:,1,id_CIDUSTM)*1.e-9
    220   concso4(:,:)=m_allaer(:,:,id_ASSO4M)*1.e-9
    221   concoa(:,:)=(m_allaer(:,:,id_ASPOMM)+m_allaer(:,:,id_AIPOMM))*1.e-9
    222   concbc(:,:)=(m_allaer(:,:,id_ASBCM)+m_allaer(:,:,id_AIBCM))*1.e-9
    223   concss(:,:)=(m_allaer(:,:,id_ASSSM)+m_allaer(:,:,id_CSSSM)+m_allaer(:,:,id_SSSSM))*1.e-9
    224   concdust(:,:)=m_allaer(:,:,id_CIDUSTM)*1.e-9
     215  sconcso4(:)=m_allaer(:,1,id_ASSO4M_phy)*1.e-9
     216!  sconcno3(:)=m_allaer(:,1,id_ASNO3M_phy)*1.e-9
     217  sconcoa(:)=(m_allaer(:,1,id_ASPOMM_phy)+m_allaer(:,1,id_AIPOMM_phy))*1.e-9
     218  sconcbc(:)=(m_allaer(:,1,id_ASBCM_phy)+m_allaer(:,1,id_AIBCM_phy))*1.e-9
     219  sconcss(:)=(m_allaer(:,1,id_ASSSM_phy)+m_allaer(:,1,id_CSSSM_phy)+m_allaer(:,1,id_SSSSM_phy))*1.e-9
     220  sconcdust(:)=m_allaer(:,1,id_CIDUSTM_phy)*1.e-9
     221  concso4(:,:)=m_allaer(:,:,id_ASSO4M_phy)*1.e-9
     222!  concno3(:,:)=m_allaer(:,:,id_ASNO3M_phy)*1.e-9
     223  concoa(:,:)=(m_allaer(:,:,id_ASPOMM_phy)+m_allaer(:,:,id_AIPOMM_phy))*1.e-9
     224  concbc(:,:)=(m_allaer(:,:,id_ASBCM_phy)+m_allaer(:,:,id_AIBCM_phy))*1.e-9
     225  concss(:,:)=(m_allaer(:,:,id_ASSSM_phy)+m_allaer(:,:,id_CSSSM_phy)+m_allaer(:,:,id_SSSSM_phy))*1.e-9
     226  concdust(:,:)=m_allaer(:,:,id_CIDUSTM_phy)*1.e-9
    225227
    226228
  • LMDZ5/trunk/libf/phylmd/readaerosolstrato.F90

    r1907 r2146  
    142142    ENDIF !--debut ou nouveau mois
    143143
    144 !--total vertical aod at the 5 wavelengths
     144!--total vertical aod at the 6 wavelengths
    145145    DO wave=1, nwave
    146146    DO k=1, klev
    147     tausum_aero(:,wave,id_STRAT)=tausum_aero(:,wave,id_STRAT)+tau_aer_strat(:,k)*alpha_strat_wave(wave)/alpha_strat_wave(2)
    148 !    tausum_aero(:,wave,id_ASBCM)=tausum_aero(:,wave,id_ASBCM)+tau_aer_strat(:,k)*alpha_strat_wave(wave)/alpha_strat_wave(2)
     147    tausum_aero(:,wave,id_STRAT_phy)=tausum_aero(:,wave,id_STRAT_phy)+tau_aer_strat(:,k)*alpha_strat_wave(wave)/alpha_strat_wave(2)
    149148    ENDDO
    150149    ENDDO
  • 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)
  • LMDZ5/trunk/libf/phylmd/rrtm/aeropt_6bands_rrtm.F90

    r2058 r2146  
    66     tau_allaer, piz_allaer, &
    77     cg_allaer, m_allaer_pi, &
    8      flag_aerosol, pplay, t_seri )
     8     flag_aerosol, zrho )
    99
    1010  USE dimphy
    1111  USE aero_mod
    1212  USE phys_local_var_mod, only: absvisaer
    13   USE YOMCST            , only: RD , RG
    1413
    1514  !    Yves Balkanski le 12 avril 2006
     
    2221  IMPLICIT NONE
    2322
     23  INCLUDE "YOMCST.h"
    2424  INCLUDE "iniprint.h"
    2525  INCLUDE "clesphys.h"
     
    3030  REAL, DIMENSION(klon,klev),     INTENT(in)  :: pdel
    3131  REAL,                           INTENT(in)  :: delt
    32   REAL, DIMENSION(klon,klev,naero_spc),   INTENT(in)  :: m_allaer
    33   REAL, DIMENSION(klon,klev,naero_spc),   INTENT(in)  :: m_allaer_pi
     32  REAL, DIMENSION(klon,klev,naero_tot),   INTENT(in)  :: m_allaer
     33  REAL, DIMENSION(klon,klev,naero_tot),   INTENT(in)  :: m_allaer_pi
    3434  REAL, DIMENSION(klon,klev),     INTENT(in)  :: RHcl       ! humidite relative ciel clair
    3535  INTEGER,                        INTENT(in)  :: flag_aerosol
    36   REAL, DIMENSION(klon,klev),     INTENT(in)  :: pplay
    37   REAL, DIMENSION(klon,klev),     INTENT(in)  :: t_seri
     36  REAL, DIMENSION(klon,klev),     INTENT(in)  :: zrho
    3837  !
    3938  ! Output arguments:
     
    4140  ! 2= natural aerosols
    4241  !
    43   REAL, DIMENSION(klon,klev,2,nbands_rrtm), INTENT(out) :: tau_allaer ! epaisseur optique aerosol
    44   REAL, DIMENSION(klon,klev,2,nbands_rrtm), INTENT(out) :: piz_allaer ! single scattering albedo aerosol
    45   REAL, DIMENSION(klon,klev,2,nbands_rrtm), INTENT(out) :: cg_allaer  ! asymmetry parameter aerosol
     42  REAL, DIMENSION(klon,klev,2,nbands_sw_rrtm), INTENT(out) :: tau_allaer ! epaisseur optique aerosol
     43  REAL, DIMENSION(klon,klev,2,nbands_sw_rrtm), INTENT(out) :: piz_allaer ! single scattering albedo aerosol
     44  REAL, DIMENSION(klon,klev,2,nbands_sw_rrtm), INTENT(out) :: cg_allaer  ! asymmetry parameter aerosol
    4645
    4746  !
     
    6766  REAL :: cg_ae2b_int    ! Intermediate computation of Assymetry parameter
    6867  REAL :: Fact_RH(nbre_RH)
    69   REAL :: zrho
    7068  REAL :: fac
    7169  REAL :: zdp1(klon,klev)
     
    7371  INTEGER :: nb_aer
    7472
    75   REAL, DIMENSION(klon,klev,naero_spc) :: mass_temp
    76   REAL, DIMENSION(klon,klev,naero_spc) :: mass_temp_pi
    77   REAL, DIMENSION(klon,klev,naero_tot,nbands_rrtm) ::  tau_ae
    78   REAL, DIMENSION(klon,klev,naero_tot,nbands_rrtm) ::  tau_ae_pi
    79   REAL, DIMENSION(klon,klev,naero_tot,nbands_rrtm) ::  piz_ae
    80   REAL, DIMENSION(klon,klev,naero_tot,nbands_rrtm) ::  cg_ae
     73  REAL, DIMENSION(klon,klev,naero_tot) :: mass_temp
     74  REAL, DIMENSION(klon,klev,naero_tot) :: mass_temp_pi
     75  REAL, DIMENSION(klon,klev,naero_tot,nbands_sw_rrtm) ::  tau_ae
     76  REAL, DIMENSION(klon,klev,naero_tot,nbands_sw_rrtm) ::  tau_ae_pi
     77  REAL, DIMENSION(klon,klev,naero_tot,nbands_sw_rrtm) ::  piz_ae
     78  REAL, DIMENSION(klon,klev,naero_tot,nbands_sw_rrtm) ::  cg_ae
    8179
    8280
     
    8482  ! Proprietes optiques
    8583  !
    86   REAL:: alpha_aers_6bands(nbre_RH,nbands_rrtm,naero_soluble)   !--unit m2/g SO4
    87   REAL:: alpha_aeri_6bands(nbands_rrtm,naero_insoluble)
    88   REAL:: cg_aers_6bands(nbre_RH,nbands_rrtm,naero_soluble)      !--unit
    89   REAL:: cg_aeri_6bands(nbands_rrtm,naero_insoluble)
    90   REAL:: piz_aers_6bands(nbre_RH,nbands_rrtm,naero_soluble)     !-- unit
    91   REAL:: piz_aeri_6bands(nbands_rrtm,naero_insoluble)        !-- unit
     84  REAL:: alpha_aers_6bands(nbre_RH,nbands_sw_rrtm,naero_soluble)   !--unit m2/g SO4
     85  REAL:: alpha_aeri_6bands(nbands_sw_rrtm,naero_insoluble)
     86  REAL:: cg_aers_6bands(nbre_RH,nbands_sw_rrtm,naero_soluble)      !--unit
     87  REAL:: cg_aeri_6bands(nbands_sw_rrtm,naero_insoluble)
     88  REAL:: piz_aers_6bands(nbre_RH,nbands_sw_rrtm,naero_soluble)     !-- unit
     89  REAL:: piz_aeri_6bands(nbands_sw_rrtm,naero_insoluble)        !-- unit
    9290
    9391  INTEGER :: id
     
    280278  spsol = 0
    281279  spinsol = 0
    282   if(NSW.NE.nbands_rrtm) then
     280  IF (NSW.NE.nbands_sw_rrtm) THEN
    283281     print *,'Erreur NSW doit etre egal a 6 pour cette routine'
    284282     stop
    285   endif
     283  ENDIF
    286284
    287285  DO k=1, klev
    288286    DO i=1, klon
    289       zrho=pplay(i,k)/t_seri(i,k)/RD                  ! kg/m3
    290 !CDIR UNROLL=naero_spc
    291       mass_temp(i,k,:) = m_allaer(i,k,:) / zrho / 1.e+9
    292 !CDIR UNROLL=naero_spc
    293       mass_temp_pi(i,k,:) = m_allaer_pi(i,k,:) / zrho / 1.e+9
     287!CDIR UNROLL=naero_tot
     288      mass_temp(i,k,:) = m_allaer(i,k,:) / zrho(i,k) / 1.e+9  !--kg/kg
     289!CDIR UNROLL=naero_tot
     290      mass_temp_pi(i,k,:) = m_allaer_pi(i,k,:) / zrho(i,k) / 1.e+9
    294291      zdp1(i,k)=pdel(i,k)/(RG*delt)      ! air mass auxiliary  variable --> zdp1 [kg/(m^2 *s)]
    295292    ENDDO
     
    299296     nb_aer = 2
    300297     ALLOCATE (aerosol_name(nb_aer))
    301      aerosol_name(1) = id_ASSO4M
    302      aerosol_name(2) = id_CSSO4M
     298     aerosol_name(1) = id_ASSO4M_phy
     299     aerosol_name(2) = id_CSSO4M_phy
    303300  ELSEIF (flag_aerosol .EQ. 2) THEN
    304301     nb_aer = 2
    305302     ALLOCATE (aerosol_name(nb_aer))
    306      aerosol_name(1) = id_ASBCM
    307      aerosol_name(2) = id_AIBCM
     303     aerosol_name(1) = id_ASBCM_phy
     304     aerosol_name(2) = id_AIBCM_phy
    308305  ELSEIF (flag_aerosol .EQ. 3) THEN
    309306     nb_aer = 2
    310307     ALLOCATE (aerosol_name(nb_aer))
    311      aerosol_name(1) = id_ASPOMM
    312      aerosol_name(2) = id_AIPOMM
     308     aerosol_name(1) = id_ASPOMM_phy
     309     aerosol_name(2) = id_AIPOMM_phy
    313310  ELSEIF (flag_aerosol .EQ. 4) THEN
    314311     nb_aer = 3
    315312     ALLOCATE (aerosol_name(nb_aer))
    316      aerosol_name(1) = id_CSSSM
    317      aerosol_name(2) = id_SSSSM
    318      aerosol_name(3) = id_ASSSM
     313     aerosol_name(1) = id_CSSSM_phy
     314     aerosol_name(2) = id_SSSSM_phy
     315     aerosol_name(3) = id_ASSSM_phy
    319316  ELSEIF (flag_aerosol .EQ. 5) THEN
    320317     nb_aer = 1
    321318     ALLOCATE (aerosol_name(nb_aer))
    322      aerosol_name(1) = id_CIDUSTM
     319     aerosol_name(1) = id_CIDUSTM_phy
    323320  ELSEIF (flag_aerosol .EQ. 6) THEN
    324321     nb_aer = 10
    325322     ALLOCATE (aerosol_name(nb_aer))
    326      aerosol_name(1) = id_ASSO4M     
    327      aerosol_name(2) = id_ASBCM
    328      aerosol_name(3) = id_AIBCM
    329      aerosol_name(4) = id_ASPOMM
    330      aerosol_name(5) = id_AIPOMM
    331      aerosol_name(6) = id_CSSSM
    332      aerosol_name(7) = id_SSSSM
    333      aerosol_name(8) = id_ASSSM
    334      aerosol_name(9) = id_CIDUSTM
    335      aerosol_name(10)= id_CSSO4M
     323     aerosol_name(1) = id_ASSO4M_phy     
     324     aerosol_name(2) = id_ASBCM_phy
     325     aerosol_name(3) = id_AIBCM_phy
     326     aerosol_name(4) = id_ASPOMM_phy
     327     aerosol_name(5) = id_AIPOMM_phy
     328     aerosol_name(6) = id_CSSSM_phy
     329     aerosol_name(7) = id_SSSSM_phy
     330     aerosol_name(8) = id_ASSSM_phy
     331     aerosol_name(9) = id_CIDUSTM_phy
     332     aerosol_name(10)= id_CSSO4M_phy
    336333  ENDIF
    337334
     
    354351    DO i=1, KLON
    355352      rh(i,k)=MIN(RHcl(i,k)*100.,RH_MAX)
    356       RH_num(i,k) = INT( rh(i,k)/10. + 1.)
     353      RH_num(i,k) = INT(rh(i,k)/10. + 1.)
    357354      IF (rh(i,k).GT.85.) RH_num(i,k)=10
    358355      IF (rh(i,k).GT.90.) RH_num(i,k)=11
     
    365362  DO m=1,nb_aer   ! tau is only computed for each mass
    366363     fac=1.0
    367      IF (aerosol_name(m).EQ.id_ASBCM) THEN
     364     IF (aerosol_name(m).EQ.id_ASBCM_phy) THEN
    368365        soluble=.TRUE.
    369366        spsol=1
    370      ELSEIF (aerosol_name(m).EQ.id_ASPOMM) THEN
     367     ELSEIF (aerosol_name(m).EQ.id_ASPOMM_phy) THEN
    371368        soluble=.TRUE.
    372369        spsol=2
    373      ELSEIF (aerosol_name(m).EQ.id_ASSO4M) THEN
     370     ELSEIF (aerosol_name(m).EQ.id_ASSO4M_phy) THEN
    374371        soluble=.TRUE.
    375372        spsol=3
    376373        fac=1.375    ! (NH4)2-SO4/SO4 132/96 mass conversion factor for OD
    377      ELSEIF  (aerosol_name(m).EQ.id_CSSO4M) THEN
     374     ELSEIF  (aerosol_name(m).EQ.id_CSSO4M_phy) THEN
    378375        soluble=.TRUE.
    379376        spsol=4
    380377        fac=1.375    ! (NH4)2-SO4/SO4 132/96 mass conversion factor for OD
    381      ELSEIF (aerosol_name(m).EQ.id_SSSSM) THEN
     378     ELSEIF (aerosol_name(m).EQ.id_SSSSM_phy) THEN
    382379         soluble=.TRUE.
    383380         spsol=5
    384      ELSEIF (aerosol_name(m).EQ.id_CSSSM) THEN
     381     ELSEIF (aerosol_name(m).EQ.id_CSSSM_phy) THEN
    385382         soluble=.TRUE.
    386383         spsol=6
    387      ELSEIF (aerosol_name(m).EQ.id_ASSSM) THEN
     384     ELSEIF (aerosol_name(m).EQ.id_ASSSM_phy) THEN
    388385         soluble=.TRUE.
    389386         spsol=7
    390      ELSEIF (aerosol_name(m).EQ.id_CIDUSTM) THEN
     387     ELSEIF (aerosol_name(m).EQ.id_CIDUSTM_phy) THEN
    391388         soluble=.FALSE.
    392389         spinsol=1
    393      ELSEIF  (aerosol_name(m).EQ.id_AIBCM) THEN
     390     ELSEIF  (aerosol_name(m).EQ.id_AIBCM_phy) THEN
    394391         soluble=.FALSE.
    395392         spinsol=2
    396      ELSEIF (aerosol_name(m).EQ.id_AIPOMM) THEN
     393     ELSEIF (aerosol_name(m).EQ.id_AIPOMM_phy) THEN
    397394         soluble=.FALSE.
    398395         spinsol=3
     
    471468       DO i=1, KLON
    472469!--anthropogenic aerosol
    473          tau_allaer(i,k,2,inu)=tau_ae(i,k,id_ASSO4M,inu)+tau_ae(i,k,id_CSSO4M,inu)+ &
    474                                tau_ae(i,k,id_ASBCM,inu)+tau_ae(i,k,id_AIBCM,inu)+   &
    475                                tau_ae(i,k,id_ASPOMM,inu)+tau_ae(i,k,id_AIPOMM,inu)+ &
    476                                tau_ae(i,k,id_ASSSM,inu)+tau_ae(i,k,id_CSSSM,inu)+   &
    477                                tau_ae(i,k,id_SSSSM,inu)+ tau_ae(i,k,id_CIDUSTM,inu)
     470         tau_allaer(i,k,2,inu)=tau_ae(i,k,id_ASSO4M_phy,inu)+tau_ae(i,k,id_CSSO4M_phy,inu)+ &
     471                               tau_ae(i,k,id_ASBCM_phy,inu)+tau_ae(i,k,id_AIBCM_phy,inu)+   &
     472                               tau_ae(i,k,id_ASPOMM_phy,inu)+tau_ae(i,k,id_AIPOMM_phy,inu)+ &
     473                               tau_ae(i,k,id_ASSSM_phy,inu)+tau_ae(i,k,id_CSSSM_phy,inu)+   &
     474                               tau_ae(i,k,id_SSSSM_phy,inu)+ tau_ae(i,k,id_CIDUSTM_phy,inu)
    478475         tau_allaer(i,k,2,inu)=MAX(tau_allaer(i,k,2,inu),1e-5)
    479476
    480          piz_allaer(i,k,2,inu)=(tau_ae(i,k,id_ASSO4M,inu)*piz_ae(i,k,id_ASSO4M,inu)+ &
    481                                 tau_ae(i,k,id_CSSO4M,inu)*piz_ae(i,k,id_CSSO4M,inu)+ &
    482                                 tau_ae(i,k,id_ASBCM,inu)*piz_ae(i,k,id_ASBCM,inu)+ &
    483                                 tau_ae(i,k,id_AIBCM,inu)*piz_ae(i,k,id_AIBCM,inu)+ &
    484                                 tau_ae(i,k,id_ASPOMM,inu)*piz_ae(i,k,id_ASPOMM,inu)+ &
    485                                 tau_ae(i,k,id_AIPOMM,inu)*piz_ae(i,k,id_AIPOMM,inu)+ &
    486                                 tau_ae(i,k,id_ASSSM,inu)*piz_ae(i,k,id_ASSSM,inu)+ &
    487                                 tau_ae(i,k,id_CSSSM,inu)*piz_ae(i,k,id_CSSSM,inu)+ &
    488                                 tau_ae(i,k,id_SSSSM,inu)*piz_ae(i,k,id_SSSSM,inu)+ &
    489                                 tau_ae(i,k,id_CIDUSTM,inu)*piz_ae(i,k,id_CIDUSTM,inu)) &
     477         piz_allaer(i,k,2,inu)=(tau_ae(i,k,id_ASSO4M_phy,inu)*piz_ae(i,k,id_ASSO4M_phy,inu)+ &
     478                                tau_ae(i,k,id_CSSO4M_phy,inu)*piz_ae(i,k,id_CSSO4M_phy,inu)+ &
     479                                tau_ae(i,k,id_ASBCM_phy,inu)*piz_ae(i,k,id_ASBCM_phy,inu)+ &
     480                                tau_ae(i,k,id_AIBCM_phy,inu)*piz_ae(i,k,id_AIBCM_phy,inu)+ &
     481                                tau_ae(i,k,id_ASPOMM_phy,inu)*piz_ae(i,k,id_ASPOMM_phy,inu)+ &
     482                                tau_ae(i,k,id_AIPOMM_phy,inu)*piz_ae(i,k,id_AIPOMM_phy,inu)+ &
     483                                tau_ae(i,k,id_ASSSM_phy,inu)*piz_ae(i,k,id_ASSSM_phy,inu)+ &
     484                                tau_ae(i,k,id_CSSSM_phy,inu)*piz_ae(i,k,id_CSSSM_phy,inu)+ &
     485                                tau_ae(i,k,id_SSSSM_phy,inu)*piz_ae(i,k,id_SSSSM_phy,inu)+ &
     486                                tau_ae(i,k,id_CIDUSTM_phy,inu)*piz_ae(i,k,id_CIDUSTM_phy,inu)) &
    490487                                /tau_allaer(i,k,2,inu)
    491488         piz_allaer(i,k,2,inu)=MAX(piz_allaer(i,k,2,inu),0.1)
    492489
    493          cg_allaer(i,k,2,inu)=(tau_ae(i,k,id_ASSO4M,inu)*piz_ae(i,k,id_ASSO4M,inu)*cg_ae(i,k,id_ASSO4M,inu)+ &
    494                                tau_ae(i,k,id_CSSO4M,inu)*piz_ae(i,k,id_CSSO4M,inu)*cg_ae(i,k,id_CSSO4M,inu)+ &
    495                                tau_ae(i,k,id_ASBCM,inu)*piz_ae(i,k,id_ASBCM,inu)*cg_ae(i,k,id_ASBCM,inu)+ &
    496                                tau_ae(i,k,id_AIBCM,inu)*piz_ae(i,k,id_AIBCM,inu)*cg_ae(i,k,id_AIBCM,inu)+ &
    497                                tau_ae(i,k,id_ASPOMM,inu)*piz_ae(i,k,id_ASPOMM,inu)*cg_ae(i,k,id_ASPOMM,inu)+ &
    498                                tau_ae(i,k,id_AIPOMM,inu)*piz_ae(i,k,id_AIPOMM,inu)*cg_ae(i,k,id_AIPOMM,inu)+ &
    499                                tau_ae(i,k,id_ASSSM,inu)*piz_ae(i,k,id_ASSSM,inu)*cg_ae(i,k,id_ASSSM,inu)+ &
    500                                tau_ae(i,k,id_CSSSM,inu)*piz_ae(i,k,id_CSSSM,inu)*cg_ae(i,k,id_CSSSM,inu)+ &
    501                                tau_ae(i,k,id_SSSSM,inu)*piz_ae(i,k,id_SSSSM,inu)*cg_ae(i,k,id_SSSSM,inu)+ &
    502                                tau_ae(i,k,id_CIDUSTM,inu)*piz_ae(i,k,id_CIDUSTM,inu)*cg_ae(i,k,id_CIDUSTM,inu))/ &
     490         cg_allaer(i,k,2,inu)=(tau_ae(i,k,id_ASSO4M_phy,inu)*piz_ae(i,k,id_ASSO4M_phy,inu)*cg_ae(i,k,id_ASSO4M_phy,inu)+ &
     491                               tau_ae(i,k,id_CSSO4M_phy,inu)*piz_ae(i,k,id_CSSO4M_phy,inu)*cg_ae(i,k,id_CSSO4M_phy,inu)+ &
     492                               tau_ae(i,k,id_ASBCM_phy,inu)*piz_ae(i,k,id_ASBCM_phy,inu)*cg_ae(i,k,id_ASBCM_phy,inu)+ &
     493                               tau_ae(i,k,id_AIBCM_phy,inu)*piz_ae(i,k,id_AIBCM_phy,inu)*cg_ae(i,k,id_AIBCM_phy,inu)+ &
     494                               tau_ae(i,k,id_ASPOMM_phy,inu)*piz_ae(i,k,id_ASPOMM_phy,inu)*cg_ae(i,k,id_ASPOMM_phy,inu)+ &
     495                               tau_ae(i,k,id_AIPOMM_phy,inu)*piz_ae(i,k,id_AIPOMM_phy,inu)*cg_ae(i,k,id_AIPOMM_phy,inu)+ &
     496                               tau_ae(i,k,id_ASSSM_phy,inu)*piz_ae(i,k,id_ASSSM_phy,inu)*cg_ae(i,k,id_ASSSM_phy,inu)+ &
     497                               tau_ae(i,k,id_CSSSM_phy,inu)*piz_ae(i,k,id_CSSSM_phy,inu)*cg_ae(i,k,id_CSSSM_phy,inu)+ &
     498                               tau_ae(i,k,id_SSSSM_phy,inu)*piz_ae(i,k,id_SSSSM_phy,inu)*cg_ae(i,k,id_SSSSM_phy,inu)+ &
     499                               tau_ae(i,k,id_CIDUSTM_phy,inu)*piz_ae(i,k,id_CIDUSTM_phy,inu)*cg_ae(i,k,id_CIDUSTM_phy,inu))/ &
    503500                               (tau_allaer(i,k,2,inu)*piz_allaer(i,k,2,inu))
    504501
    505502!--natural aerosol
    506          tau_allaer(i,k,1,inu)=tau_ae_pi(i,k,id_ASSO4M,inu)+tau_ae_pi(i,k,id_CSSO4M,inu)+ &
    507                                tau_ae_pi(i,k,id_ASBCM,inu)+tau_ae_pi(i,k,id_AIBCM,inu)+   &
    508                                tau_ae_pi(i,k,id_ASPOMM,inu)+tau_ae_pi(i,k,id_AIPOMM,inu)+ &
    509                                tau_ae_pi(i,k,id_ASSSM,inu)+tau_ae_pi(i,k,id_CSSSM,inu)+   &
    510                                tau_ae_pi(i,k,id_SSSSM,inu)+ tau_ae_pi(i,k,id_CIDUSTM,inu)
     503         tau_allaer(i,k,1,inu)=tau_ae_pi(i,k,id_ASSO4M_phy,inu)+tau_ae_pi(i,k,id_CSSO4M_phy,inu)+ &
     504                               tau_ae_pi(i,k,id_ASBCM_phy,inu)+tau_ae_pi(i,k,id_AIBCM_phy,inu)+   &
     505                               tau_ae_pi(i,k,id_ASPOMM_phy,inu)+tau_ae_pi(i,k,id_AIPOMM_phy,inu)+ &
     506                               tau_ae_pi(i,k,id_ASSSM_phy,inu)+tau_ae_pi(i,k,id_CSSSM_phy,inu)+   &
     507                               tau_ae_pi(i,k,id_SSSSM_phy,inu)+ tau_ae_pi(i,k,id_CIDUSTM_phy,inu)
    511508         tau_allaer(i,k,1,inu)=MAX(tau_allaer(i,k,1,inu),1e-5)
    512509
    513          piz_allaer(i,k,1,inu)=(tau_ae_pi(i,k,id_ASSO4M,inu)*piz_ae(i,k,id_ASSO4M,inu)+ &
    514                                 tau_ae_pi(i,k,id_CSSO4M,inu)*piz_ae(i,k,id_CSSO4M,inu)+ &
    515                                 tau_ae_pi(i,k,id_ASBCM,inu)*piz_ae(i,k,id_ASBCM,inu)+ &
    516                                 tau_ae_pi(i,k,id_AIBCM,inu)*piz_ae(i,k,id_AIBCM,inu)+ &
    517                                 tau_ae_pi(i,k,id_ASPOMM,inu)*piz_ae(i,k,id_ASPOMM,inu)+ &
    518                                 tau_ae_pi(i,k,id_AIPOMM,inu)*piz_ae(i,k,id_AIPOMM,inu)+ &
    519                                 tau_ae_pi(i,k,id_ASSSM,inu)*piz_ae(i,k,id_ASSSM,inu)+ &
    520                                 tau_ae_pi(i,k,id_CSSSM,inu)*piz_ae(i,k,id_CSSSM,inu)+ &
    521                                 tau_ae_pi(i,k,id_SSSSM,inu)*piz_ae(i,k,id_SSSSM,inu)+ &
    522                                 tau_ae_pi(i,k,id_CIDUSTM,inu)*piz_ae(i,k,id_CIDUSTM,inu)) &
     510         piz_allaer(i,k,1,inu)=(tau_ae_pi(i,k,id_ASSO4M_phy,inu)*piz_ae(i,k,id_ASSO4M_phy,inu)+ &
     511                                tau_ae_pi(i,k,id_CSSO4M_phy,inu)*piz_ae(i,k,id_CSSO4M_phy,inu)+ &
     512                                tau_ae_pi(i,k,id_ASBCM_phy,inu)*piz_ae(i,k,id_ASBCM_phy,inu)+ &
     513                                tau_ae_pi(i,k,id_AIBCM_phy,inu)*piz_ae(i,k,id_AIBCM_phy,inu)+ &
     514                                tau_ae_pi(i,k,id_ASPOMM_phy,inu)*piz_ae(i,k,id_ASPOMM_phy,inu)+ &
     515                                tau_ae_pi(i,k,id_AIPOMM_phy,inu)*piz_ae(i,k,id_AIPOMM_phy,inu)+ &
     516                                tau_ae_pi(i,k,id_ASSSM_phy,inu)*piz_ae(i,k,id_ASSSM_phy,inu)+ &
     517                                tau_ae_pi(i,k,id_CSSSM_phy,inu)*piz_ae(i,k,id_CSSSM_phy,inu)+ &
     518                                tau_ae_pi(i,k,id_SSSSM_phy,inu)*piz_ae(i,k,id_SSSSM_phy,inu)+ &
     519                                tau_ae_pi(i,k,id_CIDUSTM_phy,inu)*piz_ae(i,k,id_CIDUSTM_phy,inu)) &
    523520                                /tau_allaer(i,k,1,inu)
    524521         piz_allaer(i,k,1,inu)=MAX(piz_allaer(i,k,1,inu),0.1)
    525522
    526          cg_allaer(i,k,1,inu)=(tau_ae_pi(i,k,id_ASSO4M,inu)*piz_ae(i,k,id_ASSO4M,inu)*cg_ae(i,k,id_ASSO4M,inu)+ &
    527                                tau_ae_pi(i,k,id_CSSO4M,inu)*piz_ae(i,k,id_CSSO4M,inu)*cg_ae(i,k,id_CSSO4M,inu)+ &
    528                                tau_ae_pi(i,k,id_ASBCM,inu)*piz_ae(i,k,id_ASBCM,inu)*cg_ae(i,k,id_ASBCM,inu)+ &
    529                                tau_ae_pi(i,k,id_AIBCM,inu)*piz_ae(i,k,id_AIBCM,inu)*cg_ae(i,k,id_AIBCM,inu)+ &
    530                                tau_ae_pi(i,k,id_ASPOMM,inu)*piz_ae(i,k,id_ASPOMM,inu)*cg_ae(i,k,id_ASPOMM,inu)+ &
    531                                tau_ae_pi(i,k,id_AIPOMM,inu)*piz_ae(i,k,id_AIPOMM,inu)*cg_ae(i,k,id_AIPOMM,inu)+ &
    532                                tau_ae_pi(i,k,id_ASSSM,inu)*piz_ae(i,k,id_ASSSM,inu)*cg_ae(i,k,id_ASSSM,inu)+ &
    533                                tau_ae_pi(i,k,id_CSSSM,inu)*piz_ae(i,k,id_CSSSM,inu)*cg_ae(i,k,id_CSSSM,inu)+ &
    534                                tau_ae_pi(i,k,id_SSSSM,inu)*piz_ae(i,k,id_SSSSM,inu)*cg_ae(i,k,id_SSSSM,inu)+ &
    535                                tau_ae_pi(i,k,id_CIDUSTM,inu)*piz_ae(i,k,id_CIDUSTM,inu)*cg_ae(i,k,id_CIDUSTM,inu))/ &
     523         cg_allaer(i,k,1,inu)=(tau_ae_pi(i,k,id_ASSO4M_phy,inu)*piz_ae(i,k,id_ASSO4M_phy,inu)*cg_ae(i,k,id_ASSO4M_phy,inu)+ &
     524                               tau_ae_pi(i,k,id_CSSO4M_phy,inu)*piz_ae(i,k,id_CSSO4M_phy,inu)*cg_ae(i,k,id_CSSO4M_phy,inu)+ &
     525                               tau_ae_pi(i,k,id_ASBCM_phy,inu)*piz_ae(i,k,id_ASBCM_phy,inu)*cg_ae(i,k,id_ASBCM_phy,inu)+ &
     526                               tau_ae_pi(i,k,id_AIBCM_phy,inu)*piz_ae(i,k,id_AIBCM_phy,inu)*cg_ae(i,k,id_AIBCM_phy,inu)+ &
     527                               tau_ae_pi(i,k,id_ASPOMM_phy,inu)*piz_ae(i,k,id_ASPOMM_phy,inu)*cg_ae(i,k,id_ASPOMM_phy,inu)+ &
     528                               tau_ae_pi(i,k,id_AIPOMM_phy,inu)*piz_ae(i,k,id_AIPOMM_phy,inu)*cg_ae(i,k,id_AIPOMM_phy,inu)+ &
     529                               tau_ae_pi(i,k,id_ASSSM_phy,inu)*piz_ae(i,k,id_ASSSM_phy,inu)*cg_ae(i,k,id_ASSSM_phy,inu)+ &
     530                               tau_ae_pi(i,k,id_CSSSM_phy,inu)*piz_ae(i,k,id_CSSSM_phy,inu)*cg_ae(i,k,id_CSSSM_phy,inu)+ &
     531                               tau_ae_pi(i,k,id_SSSSM_phy,inu)*piz_ae(i,k,id_SSSSM_phy,inu)*cg_ae(i,k,id_SSSSM_phy,inu)+ &
     532                               tau_ae_pi(i,k,id_CIDUSTM_phy,inu)*piz_ae(i,k,id_CIDUSTM_phy,inu)*cg_ae(i,k,id_CIDUSTM_phy,inu))/ &
    536533                               (tau_allaer(i,k,1,inu)*piz_allaer(i,k,1,inu))
    537534
  • LMDZ5/trunk/libf/phylmd/rrtm/radlsw.F90

    r2043 r2146  
    1111 & PFRSOD,PSUDU , PUVDF, PPARF, PPARCF, PTINCF,&
    1212 & PSFSWDIR, PSFSWDIF,PFSDNN,PFSDNV ,& 
    13  & LRDUST,PPIZA_DST,PCGA_DST,PTAUREL_DST,PFLUX,PFLUC,&
    14  & PFSDN ,PFSUP , PFSCDN , PFSCUP)
     13 & LRDUST,PPIZA_DST,PCGA_DST,PTAUREL_DST,&
     14 & PTAU_LW,&
     15 & PFLUX,PFLUC,PFSDN ,PFSUP , PFSCDN , PFSCUP)
    1516
    1617use write_field_phy
     
    5758! PCGA_DST   : (KPROMA,KLEV,NSW); Assymetry factor for dust
    5859! PTAUREL_DST: (KPROMA,KLEV,NSW); Optical depth of dust relative to at 550nm
     60! PTAU_LW  (KPROMA,KLEV,NLW); LW Optical depth of aerosols
    5961! PREF_LIQ (KPROMA,KLEV)        ; Liquid droplet radius (um)
    6062! PREF_ICE (KPROMA,KLEV)        ; Ice crystal radius (um)
     
    127129!USE YOERAD   , ONLY : NSW      ,LRRTM    ,LCCNL    ,LCCNO, LDIFFC, &
    128130! NSW mis dans .def MPL 20140211
    129 USE YOERAD   , ONLY : LRRTM    ,LCCNL    ,LCCNO, LDIFFC, &
     131USE YOERAD   , ONLY : NLW, LRRTM    ,LCCNL    ,LCCNO, LDIFFC, &
    130132 & NRADIP , NRADLP , NICEOPT, NLIQOPT, NINHOM ,NLAYINH ,&
    131133 & RCCNLND, RCCNSEA, RLWINHF, RSWINHF, RRe2De ,& 
     
    154156
    155157include "clesphys.h"
     158!!include "clesrrtm.h"
    156159include "YOETHF.h"
    157160INTEGER(KIND=JPIM),INTENT(IN)    :: KLON
     
    192195REAL(KIND=JPRB)   ,INTENT(IN)    :: PCGA_DST(KLON,KLEV,NSW)
    193196REAL(KIND=JPRB)   ,INTENT(IN)    :: PTAUREL_DST(KLON,KLEV,NSW)
     197!--C.Kleinschmitt
     198REAL(KIND=JPRB)   ,INTENT(IN)    :: PTAU_LW(KLON,KLEV,NLW)
     199!--end
    194200REAL(KIND=JPRB)   ,INTENT(IN)    :: PREF_LIQ(KLON,KLEV)
    195201REAL(KIND=JPRB)   ,INTENT(IN)    :: PREF_ICE(KLON,KLEV)
     
    11011107     & PTS   , PTH   , PT,&
    11021108     & ZEMIS , ZEMIW,&
    1103      & PQ    , PCCO2 , ZOZN  , ZCLDSW  , ZTAUCLD,&
    1104      & ZEMIT , PFLUX , PFLUC , ZTCLEAR &
    1105      & ) 
     1109     & PQ    , PCCO2 , ZOZN  ,&
     1110     & ZCLDSW  , ZTAUCLD,&
     1111     & PTAU_LW,&
     1112     & ZEMIT , PFLUX , PFLUC , ZTCLEAR )
    11061113    print *,'RADLSW: apres CALL RRTM_RRTM_140GP'
    11071114
  • LMDZ5/trunk/libf/phylmd/rrtm/radlsw.intfb.h

    r1990 r2146  
    11INTERFACE
    2 SUBROUTINE RADLSW&
    3  & ( KIDIA, KFDIA , KLON , KLEV , KMODE, KAER,&
     2SUBROUTINE RADLSW &
     3 & ( KIDIA, KFDIA , KLON , KLEV  , KMODE, KAER,&
    44 & PRII0,&
    55 & PAER , PALBD , PALBP, PAPH , PAP,&
    66 & PCCNL, PCCNO,&
    7  & PCCO2, PCLFR , PDP , PEMIS, PEMIW , PLSM , PMU0, POZON,&
    8  & PQ , PQIWP , PQLWP, PQS , PQRAIN, PRAINT,&
    9  & PTH , PT , PTS , PNBAS, PNTOP,&
    10  & PREF_LIQ , PREF_ICE,&
    11  & PEMIT, PFCT , PFLT , PFCS , PFLS,&
     7 & PCCO2, PCLFR , PDP  , PEMIS, PEMIW , PLSM , PMU0, POZON,&
     8 & PQ   , PQIWP , PQLWP, PQS , PQRAIN, PRAINT,&
     9 & PTH  , PT    , PTS , PNBAS, PNTOP,&
     10 & PREF_LIQ, PREF_ICE,&
     11 & PEMIT, PFCT  , PFLT , PFCS , PFLS,&
    1212 & PFRSOD,PSUDU , PUVDF, PPARF, PPARCF, PTINCF,&
    13  & PSFSWDIR, PSFSWDIF,PFSDNN,PFSDNV,&
    14  & LRDUST,PPIZA_DST,PCGA_DST,PTAUREL_DST,PFLUX,PFLUC,&
    15  & PFSDN ,PFSUP , PFSCDN , PFSCUP)
     13 & PSFSWDIR, PSFSWDIF,PFSDNN,PFSDNV ,& 
     14 & LRDUST,PPIZA_DST,PCGA_DST,PTAUREL_DST,&
     15 & PTAU_LW,&
     16 & PFLUX,PFLUC,PFSDN ,PFSUP , PFSCDN , PFSCUP)
     17
    1618USE PARKIND1 ,ONLY : JPIM ,JPRB
    17 USE YOERAD , ONLY : LRRTM ,LCCNL ,LCCNO, LDIFFC,&
     19USE YOERAD , ONLY : NLW, LRRTM ,LCCNL ,LCCNO, LDIFFC,&
    1820 & NRADIP , NRADLP , NICEOPT, NLIQOPT, NINHOM ,NLAYINH ,&
    1921 & RCCNLND, RCCNSEA, RLWINHF, RSWINHF, RRe2De ,&
     
    5961REAL(KIND=JPRB) ,INTENT(IN) :: PCGA_DST(KLON,KLEV,NSW)
    6062REAL(KIND=JPRB) ,INTENT(IN) :: PTAUREL_DST(KLON,KLEV,NSW)
     63!--C.Kleinschmitt
     64REAL(KIND=JPRB)   ,INTENT(IN)    :: PTAU_LW(KLON,KLEV,NLW)
     65!--end
    6166REAL(KIND=JPRB) ,INTENT(OUT) :: PEMIT(KLON)
    6267REAL(KIND=JPRB) ,INTENT(OUT) :: PFCT(KLON,KLEV+1)
  • LMDZ5/trunk/libf/phylmd/rrtm/readaerosol_optic_rrtm.F90

    r2005 r2146  
    11! $Id$
    22!
    3 SUBROUTINE readaerosol_optic_rrtm(debut, new_aod, flag_aerosol, itap, rjourvrai, &
     3SUBROUTINE readaerosol_optic_rrtm(debut, aerosol_couple,  &
     4     new_aod, flag_aerosol, itap, rjourvrai, &
    45     pdtphys, pplay, paprs, t_seri, rhcl, presnivs, &
    5      mass_solu_aero, mass_solu_aero_pi, &
     6     tr_seri, mass_solu_aero, mass_solu_aero_pi, &
    67     tau_aero, piz_aero, cg_aero, &
    78     tausum_aero, tau3d_aero )
    89
    9 ! This routine will :
    10 ! 1) recevie the aerosols(already read and interpolated) corresponding to flag_aerosol
    11 ! 2) calculate the optical properties for the aerosols
    12 !
    13  
     10  ! This routine will :
     11  ! 1) recevie the aerosols(already read and interpolated) corresponding to flag_aerosol
     12  ! 2) calculate the optical properties for the aerosols
     13  !
     14
    1415  USE dimphy
    1516  USE aero_mod
    16   USE phys_local_var_mod, only: sconcso4,sconcoa,sconcbc,sconcss,sconcdust, &
    17       concso4,concoa,concbc,concss,concdust,loadso4,loadoa,loadbc,loadss,loaddust, &
    18       load_tmp1,load_tmp2,load_tmp3,load_tmp4,load_tmp5,load_tmp6,load_tmp7
     17  USE phys_local_var_mod, only: sconcso4,sconcno3,sconcoa,sconcbc,sconcss,sconcdust, &
     18       concso4,concno3,concoa,concbc,concss,concdust,loadso4,loadoa,loadbc,loadss,loaddust, &
     19       load_tmp1,load_tmp2,load_tmp3,load_tmp4,load_tmp5,load_tmp6,load_tmp7
     20
     21  USE infotrac
     22
    1923  IMPLICIT NONE
    2024  include "clesphys.h"
    21 
    22 ! Input arguments
    23 !****************************************************************************************
     25  include "YOMCST.h"
     26
     27
     28  ! Input arguments
     29  !****************************************************************************************
    2430  LOGICAL, INTENT(IN)                      :: debut
     31  LOGICAL, INTENT(IN)                      :: aerosol_couple
    2532  LOGICAL, INTENT(IN)                      :: new_aod
    2633  INTEGER, INTENT(IN)                      :: flag_aerosol
     
    3340  REAL, DIMENSION(klon,klev), INTENT(IN)   :: rhcl   ! humidite relative ciel clair
    3441  REAL, DIMENSION(klev), INTENT(IN)        :: presnivs
    35 
    36 ! Output arguments
    37 !****************************************************************************************
     42  REAL, DIMENSION(klon,klev,nbtr), INTENT(IN) :: tr_seri ! concentration tracer
     43
     44  ! Output arguments
     45  !****************************************************************************************
    3846  REAL, DIMENSION(klon,klev), INTENT(OUT)     :: mass_solu_aero    ! Total mass for all soluble aerosols
    3947  REAL, DIMENSION(klon,klev), INTENT(OUT)     :: mass_solu_aero_pi !     -"-     preindustrial values
     
    4149  REAL, DIMENSION(klon,klev,2,NSW), INTENT(OUT) :: piz_aero    ! Single scattering albedo aerosol
    4250  REAL, DIMENSION(klon,klev,2,NSW), INTENT(OUT) :: cg_aero     ! asymmetry parameter aerosol
    43 !  REAL, DIMENSION(klon,nwave,naero_spc), INTENT(OUT)       :: tausum_aero
    44 !  REAL, DIMENSION(klon,klev,nwave,naero_spc), INTENT(OUT)  :: tau3d_aero
    45 !--correction minibug OB
    4651  REAL, DIMENSION(klon,nwave,naero_tot), INTENT(OUT)       :: tausum_aero
    4752  REAL, DIMENSION(klon,klev,nwave,naero_tot), INTENT(OUT)  :: tau3d_aero
    4853
    49 ! Local variables
    50 !****************************************************************************************
    51   REAL, DIMENSION(klon)        :: aerindex ! POLDER aerosol index
    52   REAL, DIMENSION(klon,klev)   :: sulfate  ! SO4 aerosol concentration [ug/m3]
    53   REAL, DIMENSION(klon,klev)   :: bcsol    ! BC soluble concentration [ug/m3]
    54   REAL, DIMENSION(klon,klev)   :: bcins    ! BC insoluble concentration [ug/m3]
    55   REAL, DIMENSION(klon,klev)   :: pomsol   ! POM soluble concentration [ug/m3]
    56   REAL, DIMENSION(klon,klev)   :: pomins   ! POM insoluble concentration [ug/m3]
    57   REAL, DIMENSION(klon,klev)   :: cidust    ! DUST aerosol concentration  [ug/m3]
    58   REAL, DIMENSION(klon,klev)   :: sscoarse  ! SS Coarse concentration [ug/m3]
    59   REAL, DIMENSION(klon,klev)   :: sssupco   ! SS Super Coarse concentration [ug/m3]
    60   REAL, DIMENSION(klon,klev)   :: ssacu     ! SS Acumulation concentration [ug/m3]
    61   REAL, DIMENSION(klon,klev)   :: sulfate_pi
     54  ! Local variables
     55  !****************************************************************************************
     56  REAL, DIMENSION(klon)        :: aerindex      ! POLDER aerosol index
     57  REAL, DIMENSION(klon,klev)   :: sulfacc       ! SO4 accumulation concentration [ug/m3]
     58  REAL, DIMENSION(klon,klev)   :: sulfcoarse    ! SO4 coarse concentration [ug/m3]
     59  REAL, DIMENSION(klon,klev)   :: bcsol         ! BC soluble concentration [ug/m3]
     60  REAL, DIMENSION(klon,klev)   :: bcins         ! BC insoluble concentration [ug/m3]
     61  REAL, DIMENSION(klon,klev)   :: pomsol        ! POM soluble concentration [ug/m3]
     62  REAL, DIMENSION(klon,klev)   :: pomins        ! POM insoluble concentration [ug/m3]
     63  REAL, DIMENSION(klon,klev)   :: cidust        ! DUST aerosol concentration  [ug/m3]
     64  REAL, DIMENSION(klon,klev)   :: sscoarse      ! SS Coarse concentration [ug/m3]
     65  REAL, DIMENSION(klon,klev)   :: sssupco       ! SS Super Coarse concentration [ug/m3]
     66  REAL, DIMENSION(klon,klev)   :: ssacu         ! SS Acumulation concentration [ug/m3]
     67  REAL, DIMENSION(klon,klev)   :: nitracc       ! nitrate accumulation concentration [ug/m3]
     68  REAL, DIMENSION(klon,klev)   :: nitrcoarse    ! nitrate coarse concentration [ug/m3]
     69  REAL, DIMENSION(klon,klev)   :: nitrinscoarse ! nitrate insoluble coarse concentration [ug/m3]
     70  REAL, DIMENSION(klon,klev)   :: sulfacc_pi
     71  REAL, DIMENSION(klon,klev)   :: sulfcoarse_pi
    6272  REAL, DIMENSION(klon,klev)   :: bcsol_pi
    6373  REAL, DIMENSION(klon,klev)   :: bcins_pi
     
    6878  REAL, DIMENSION(klon,klev)   :: sssupco_pi
    6979  REAL, DIMENSION(klon,klev)   :: ssacu_pi
    70   REAL, DIMENSION(klon,klev)   :: pdel
    71   REAL, DIMENSION(klon,klev,naero_spc) :: m_allaer
    72   REAL, DIMENSION(klon,klev,naero_spc) :: m_allaer_pi !RAF 
    73 !  REAL, DIMENSION(klon,naero_tot)      :: fractnat_allaer !RAF delete??
    74 
     80  REAL, DIMENSION(klon,klev)   :: nitracc_pi
     81  REAL, DIMENSION(klon,klev)   :: nitrcoarse_pi
     82  REAL, DIMENSION(klon,klev)   :: nitrinscoarse_pi
     83  REAL, DIMENSION(klon,klev)   :: pdel, zrho
     84  REAL, DIMENSION(klon,klev,naero_tot) :: m_allaer
     85  REAL, DIMENSION(klon,klev,naero_tot) :: m_allaer_pi !RAF 
     86  !  REAL, DIMENSION(klon,naero_tot)      :: fractnat_allaer !RAF delete??
     87  character(len=8), dimension(nbtr) :: tracname
     88  integer :: id_ASBCM, id_ASPOMM, id_ASSO4M, id_ASMSAM, id_CSSO4M, id_CSMSAM, id_SSSSM
     89  integer :: id_CSSSM, id_ASSSM, id_CIDUSTM, id_AIBCM, id_AIPOMM, id_ASNO3M, id_CSNO3M, id_CINO3M
    7590  INTEGER :: k, i
    76  
    77 !****************************************************************************************
    78 ! 1) Get aerosol mass
    79 !   
    80 !****************************************************************************************
    81 ! Read and interpolate sulfate
    82   IF ( flag_aerosol .EQ. 1 .OR. &
    83        flag_aerosol .EQ. 6 ) THEN
    84 
    85      CALL readaerosol_interp(id_ASSO4M, itap, pdtphys, rjourvrai, debut, pplay, paprs, t_seri, sulfate, sulfate_pi,loadso4)
    86   ELSE
    87      sulfate(:,:) = 0. ; sulfate_pi(:,:) = 0.
    88      loadso4=0.
    89   END IF
    90 
    91 ! Read and interpolate bcsol and bcins
    92   IF ( flag_aerosol .EQ. 2 .OR. &
    93        flag_aerosol .EQ. 6 ) THEN
    94 
    95      ! Get bc aerosol distribution
    96      CALL readaerosol_interp(id_ASBCM, itap, pdtphys, rjourvrai, debut, pplay, paprs, t_seri, bcsol, bcsol_pi, load_tmp1 )
    97      CALL readaerosol_interp(id_AIBCM, itap, pdtphys, rjourvrai, debut, pplay, paprs, t_seri, bcins, bcins_pi, load_tmp2 )
    98      loadbc(:)=load_tmp1(:)+load_tmp2(:)
    99   ELSE
    100      bcsol(:,:) = 0. ; bcsol_pi(:,:) = 0.
    101      bcins(:,:) = 0. ; bcins_pi(:,:) = 0.
    102      loadbc=0.
    103   END IF
    104 
    105 
    106 ! Read and interpolate pomsol and pomins
    107   IF ( flag_aerosol .EQ. 3 .OR. &
    108        flag_aerosol .EQ. 6 ) THEN
    109 
    110      CALL readaerosol_interp(id_ASPOMM, itap, pdtphys, rjourvrai, debut, pplay, paprs, t_seri, pomsol, pomsol_pi, load_tmp3)
    111      CALL readaerosol_interp(id_AIPOMM, itap, pdtphys, rjourvrai, debut, pplay, paprs, t_seri, pomins, pomins_pi, load_tmp4)
    112      loadoa(:)=load_tmp3(:)+load_tmp4(:)
    113   ELSE
    114      pomsol(:,:) = 0. ; pomsol_pi(:,:) = 0.
    115      pomins(:,:) = 0. ; pomins_pi(:,:) = 0.
    116      loadoa=0.
    117   END IF
    118 
    119 
    120 ! Read and interpolate csssm, ssssm, assssm
    121   IF (flag_aerosol .EQ. 4 .OR. &
    122       flag_aerosol .EQ. 6 ) THEN
    123 
    124       CALL readaerosol_interp(id_SSSSM ,itap, pdtphys, rjourvrai, debut, pplay, paprs, t_seri, sssupco, sssupco_pi, load_tmp5)
    125       CALL readaerosol_interp(id_CSSSM ,itap, pdtphys, rjourvrai, debut, pplay, paprs, t_seri, sscoarse,sscoarse_pi, load_tmp6)
    126       CALL readaerosol_interp(id_ASSSM ,itap, pdtphys, rjourvrai, debut, pplay, paprs, t_seri, ssacu, ssacu_pi, load_tmp7)
    127      loadss(:)=load_tmp5(:)+load_tmp6(:)+load_tmp7(:)
    128   ELSE
    129      sscoarse(:,:) = 0. ; sscoarse_pi(:,:) = 0.
    130      ssacu(:,:)    = 0. ; ssacu_pi(:,:) = 0.
    131      sssupco(:,:)  = 0. ; sssupco_pi = 0.
    132      loadss=0.
    133   ENDIF
    134 
    135 ! Read and interpolate cidustm
    136   IF (flag_aerosol .EQ. 5 .OR.  &
    137       flag_aerosol .EQ. 6 ) THEN
    138 
    139       CALL readaerosol_interp(id_CIDUSTM, itap, pdtphys, rjourvrai, debut, pplay, paprs, t_seri, cidust, cidust_pi, loaddust)
    140 
    141   ELSE
    142       cidust(:,:) = 0. ; cidust_pi(:,:) = 0.
    143       loaddust=0.
    144   ENDIF
    145 
    146 !
    147 ! Store all aerosols in one variable
    148 !
    149   m_allaer(:,:,id_ASBCM)  = bcsol(:,:)        ! ASBCM
    150   m_allaer(:,:,id_ASPOMM) = pomsol(:,:)       ! ASPOMM
    151   m_allaer(:,:,id_ASSO4M) = sulfate(:,:)      ! ASSO4M (= SO4)
    152   m_allaer(:,:,id_CSSO4M) = 0.                ! CSSO4M
    153   m_allaer(:,:,id_SSSSM)  = sssupco(:,:)      ! SSSSM
    154   m_allaer(:,:,id_CSSSM)  = sscoarse(:,:)     ! CSSSM
    155   m_allaer(:,:,id_ASSSM)  = ssacu(:,:)        ! ASSSM
    156   m_allaer(:,:,id_CIDUSTM)= cidust(:,:)       ! CIDUSTM
    157   m_allaer(:,:,id_AIBCM)  = bcins(:,:)        ! AIBCM
    158   m_allaer(:,:,id_AIPOMM) = pomins(:,:)       ! AIPOMM
    159 
    160 !RAF
    161   m_allaer_pi(:,:,1)  = bcsol_pi(:,:)        ! ASBCM pre-ind
    162   m_allaer_pi(:,:,2)  = pomsol_pi(:,:)       ! ASPOMM pre-ind
    163   m_allaer_pi(:,:,3)  = sulfate_pi(:,:)      ! ASSO4M (= SO4) pre-ind
    164   m_allaer_pi(:,:,4)  = 0.                   ! CSSO4M pre-ind
    165   m_allaer_pi(:,:,5)  = sssupco_pi(:,:)      ! SSSSM pre-ind
    166   m_allaer_pi(:,:,6)  = sscoarse_pi(:,:)     ! CSSSM pre-ind
    167   m_allaer_pi(:,:,7)  = ssacu_pi(:,:)        ! ASSSM pre-ind
    168   m_allaer_pi(:,:,8)  = cidust_pi(:,:)       ! CIDUSTM pre-ind
    169   m_allaer_pi(:,:,9)  = bcins_pi(:,:)        ! AIBCM pre-ind
    170   m_allaer_pi(:,:,10) = pomins_pi(:,:)       ! AIPOMM pre-ind
    171 
    172 !
    173 ! Calculate the total mass of all soluble aersosols
    174 !
    175   mass_solu_aero(:,:)    = sulfate(:,:)    + bcsol(:,:)    + pomsol(:,:) !   + &
    176 !       sscoarse(:,:)    + ssacu(:,:)    + sssupco(:,:)
    177   mass_solu_aero_pi(:,:) = sulfate_pi(:,:) + bcsol_pi(:,:) + pomsol_pi(:,:) ! + &
    178 !       sscoarse_pi(:,:) + ssacu_pi(:,:) + sssupco_pi(:,:)
    179 
    180 !****************************************************************************************
    181 ! 2) Calculate optical properties for the aerosols
    182 !
    183 !****************************************************************************************
     91
     92  !--air density
     93  zrho(:,:)=pplay(:,:)/t_seri(:,:)/RD                     !--kg/m3
     94
     95  !****************************************************************************************
     96  ! 1) Get aerosol mass
     97  !   
     98  !****************************************************************************************
     99  !
     100  !
     101  IF (aerosol_couple) THEN   !--we get aerosols from tr_seri array from INCA
     102     !
     103     !--copy fields from INCA tr_seri
     104     !--convert to ug m-3 unit for consistency with offline fields
     105     !
     106#ifdef INCA
     107     call tracinca_name(tracname)
     108#endif
     109
     110     do i=1,nbtr
     111        select case(trim(tracname(i)))
     112           case ("ASBCM")
     113              id_ASBCM = i
     114           case ("ASPOMM")
     115              id_ASPOMM = i
     116           case ("ASSO4M")
     117              id_ASSO4M = i
     118           case ("ASMSAM")
     119              id_ASMSAM = i
     120           case ("CSSO4M")
     121              id_CSSO4M = i
     122           case ("CSMSAM")
     123              id_CSMSAM = i
     124           case ("SSSSM")
     125              id_SSSSM = i
     126           case ("CSSSM")
     127              id_CSSSM = i
     128           case ("ASSSM")
     129              id_ASSSM = i
     130           case ("CIDUSTM")
     131              id_CIDUSTM = i
     132           case ("AIBCM")
     133              id_AIBCM = i
     134           case ("AIPOMM")
     135              id_AIPOMM = i
     136           case ("ASNO3M")
     137              id_ASNO3M = i
     138           case ("CSNO3M")
     139              id_CSNO3M = i
     140           case ("CINO3M")
     141              id_CINO3M = i
     142           end select
     143     enddo
     144
     145
     146     bcsol(:,:)        =   tr_seri(:,:,id_ASBCM)                         *zrho(:,:)*1.e9  ! ASBCM
     147     pomsol(:,:)       =   tr_seri(:,:,id_ASPOMM)                        *zrho(:,:)*1.e9  ! ASPOMM
     148     sulfacc(:,:)      =  (tr_seri(:,:,id_ASSO4M)+tr_seri(:,:,id_ASMSAM))*zrho(:,:)*1.e9  ! ASSO4M (=SO4) + ASMSAM (=MSA)
     149     sulfcoarse(:,:)   =  (tr_seri(:,:,id_CSSO4M)+tr_seri(:,:,id_CSMSAM))*zrho(:,:)*1.e9  ! CSSO4M (=SO4) + CSMSAM (=MSA)
     150     sssupco(:,:)      =   tr_seri(:,:,id_SSSSM)                         *zrho(:,:)*1.e9  ! SSSSM
     151     sscoarse(:,:)     =   tr_seri(:,:,id_CSSSM)                         *zrho(:,:)*1.e9  ! CSSSM
     152     ssacu(:,:)        =   tr_seri(:,:,id_ASSSM)                         *zrho(:,:)*1.e9  ! ASSSM
     153     cidust(:,:)       =   tr_seri(:,:,id_CIDUSTM)                       *zrho(:,:)*1.e9  ! CIDUSTM
     154     bcins(:,:)        =   tr_seri(:,:,id_AIBCM)                         *zrho(:,:)*1.e9  ! AIBCM
     155     pomins(:,:)       =   tr_seri(:,:,id_AIPOMM)                        *zrho(:,:)*1.e9  ! AIPOMM
     156     nitracc(:,:)      =   tr_seri(:,:,id_ASNO3M)                        *zrho(:,:)*1.e9  ! ASNO3M
     157     nitrcoarse(:,:)   =   tr_seri(:,:,id_CSNO3M)                        *zrho(:,:)*1.e9  ! CSNO3M
     158     nitrinscoarse(:,:)=   tr_seri(:,:,id_CINO3M)                        *zrho(:,:)*1.e9  ! CINO3M
     159     !
     160     bcsol_pi(:,:)        =   0.0 ! ASBCM pre-ind
     161     pomsol_pi(:,:)       =   0.0 ! ASPOMM pre-ind
     162     sulfacc_pi(:,:)      =   0.0 ! ASSO4M (=SO4) + ASMSAM (=MSA) pre-ind
     163     sulfcoarse_pi(:,:)   =   0.0 ! CSSO4M (=SO4) + CSMSAM (=MSA) pre-ind
     164     sssupco_pi(:,:)      =   0.0 ! SSSSM pre-ind
     165     sscoarse_pi(:,:)     =   0.0 ! CSSSM pre-ind
     166     ssacu_pi(:,:)        =   0.0 ! ASSSM pre-ind
     167     cidust_pi(:,:)       =   0.0 ! CIDUSTM pre-ind
     168     bcins_pi(:,:)        =   0.0 ! AIBCM pre-ind
     169     pomins_pi(:,:)       =   0.0 ! AIPOMM pre-ind
     170     nitracc_pi(:,:)      =   0.0 ! ASNO3M pre-ind
     171     nitrcoarse_pi(:,:)   =   0.0 ! CSNO3M pre-ind
     172     nitrinscoarse_pi(:,:)=   0.0 ! CINO3M
     173     !
     174  ELSE !--not aerosol_couple
     175     !
     176     ! Read and interpolate sulfate
     177     IF ( flag_aerosol .EQ. 1 .OR. &
     178          flag_aerosol .EQ. 6 ) THEN
     179
     180        CALL readaerosol_interp(id_ASSO4M_phy, itap, pdtphys, rjourvrai, debut, pplay, paprs, t_seri, sulfacc, sulfacc_pi,loadso4)
     181     ELSE
     182        sulfacc(:,:) = 0. ; sulfacc_pi(:,:) = 0.
     183        loadso4=0.
     184     END IF
     185
     186     ! Read and interpolate bcsol and bcins
     187     IF ( flag_aerosol .EQ. 2 .OR. &
     188          flag_aerosol .EQ. 6 ) THEN
     189
     190        ! Get bc aerosol distribution
     191        CALL readaerosol_interp(id_ASBCM_phy, itap, pdtphys, rjourvrai, debut, pplay, paprs, t_seri, bcsol, bcsol_pi, load_tmp1 )
     192        CALL readaerosol_interp(id_AIBCM_phy, itap, pdtphys, rjourvrai, debut, pplay, paprs, t_seri, bcins, bcins_pi, load_tmp2 )
     193        loadbc(:)=load_tmp1(:)+load_tmp2(:)
     194     ELSE
     195        bcsol(:,:) = 0. ; bcsol_pi(:,:) = 0.
     196        bcins(:,:) = 0. ; bcins_pi(:,:) = 0.
     197        loadbc=0.
     198     END IF
     199
     200
     201     ! Read and interpolate pomsol and pomins
     202     IF ( flag_aerosol .EQ. 3 .OR. &
     203          flag_aerosol .EQ. 6 ) THEN
     204
     205        CALL readaerosol_interp(id_ASPOMM_phy, itap, pdtphys, rjourvrai, debut, pplay, paprs, t_seri, pomsol, pomsol_pi, load_tmp3)
     206        CALL readaerosol_interp(id_AIPOMM_phy, itap, pdtphys, rjourvrai, debut, pplay, paprs, t_seri, pomins, pomins_pi, load_tmp4)
     207        loadoa(:)=load_tmp3(:)+load_tmp4(:)
     208     ELSE
     209        pomsol(:,:) = 0. ; pomsol_pi(:,:) = 0.
     210        pomins(:,:) = 0. ; pomins_pi(:,:) = 0.
     211        loadoa=0.
     212     END IF
     213
     214
     215     ! Read and interpolate csssm, ssssm, assssm
     216     IF (flag_aerosol .EQ. 4 .OR. &
     217          flag_aerosol .EQ. 6 ) THEN
     218
     219        CALL readaerosol_interp(id_SSSSM_phy ,itap, pdtphys, rjourvrai, debut, pplay, paprs, t_seri, sssupco, sssupco_pi, load_tmp5)
     220        CALL readaerosol_interp(id_CSSSM_phy ,itap, pdtphys, rjourvrai, debut, pplay, paprs, t_seri, sscoarse,sscoarse_pi, load_tmp6)
     221        CALL readaerosol_interp(id_ASSSM_phy ,itap, pdtphys, rjourvrai, debut, pplay, paprs, t_seri, ssacu, ssacu_pi, load_tmp7)
     222        loadss(:)=load_tmp5(:)+load_tmp6(:)+load_tmp7(:)
     223     ELSE
     224        sscoarse(:,:) = 0. ; sscoarse_pi(:,:) = 0.
     225        ssacu(:,:)    = 0. ; ssacu_pi(:,:) = 0.
     226        sssupco(:,:)  = 0. ; sssupco_pi = 0.
     227        loadss=0.
     228     ENDIF
     229
     230     ! Read and interpolate cidustm
     231     IF (flag_aerosol .EQ. 5 .OR.  &
     232          flag_aerosol .EQ. 6 ) THEN
     233
     234        CALL readaerosol_interp(id_CIDUSTM_phy, itap, pdtphys, rjourvrai, debut, pplay, paprs, t_seri, cidust, cidust_pi, loaddust)
     235
     236     ELSE
     237        cidust(:,:) = 0. ; cidust_pi(:,:) = 0.
     238        loaddust=0.
     239     ENDIF
     240     !
     241     sulfcoarse(:,:)      =   0.0 ! CSSO4M (=SO4) + CSMSAM (=MSA)
     242     sulfcoarse_pi(:,:)   =   0.0 ! CSSO4M (=SO4) + CSMSAM (=MSA) pre-ind
     243     !
     244     !--placeholder for offline nitrate   
     245     !
     246     nitracc(:,:)         =   0.0
     247     nitracc_pi(:,:)      =   0.0
     248     nitrcoarse(:,:)      =   0.0
     249     nitrcoarse_pi(:,:)   =   0.0
     250     nitrinscoarse(:,:)   =   0.0
     251     nitrinscoarse_pi(:,:)=   0.0
     252
     253  ENDIF !--not aerosol_couple
     254
     255  !
     256  ! Store all aerosols in one variable
     257  !
     258  m_allaer(:,:,id_ASBCM_phy)  = bcsol(:,:)        ! ASBCM
     259  m_allaer(:,:,id_ASPOMM_phy) = pomsol(:,:)       ! ASPOMM
     260  m_allaer(:,:,id_ASSO4M_phy) = sulfacc(:,:)      ! ASSO4M (= SO4)
     261  m_allaer(:,:,id_CSSO4M_phy) = sulfcoarse(:,:)   ! CSSO4M
     262  m_allaer(:,:,id_SSSSM_phy)  = sssupco(:,:)      ! SSSSM
     263  m_allaer(:,:,id_CSSSM_phy)  = sscoarse(:,:)     ! CSSSM
     264  m_allaer(:,:,id_ASSSM_phy)  = ssacu(:,:)        ! ASSSM
     265  m_allaer(:,:,id_CIDUSTM_phy)= cidust(:,:)       ! CIDUSTM
     266  m_allaer(:,:,id_AIBCM_phy)  = bcins(:,:)        ! AIBCM
     267  m_allaer(:,:,id_ASNO3M_phy) = nitracc(:,:)      ! ASNO3M
     268  m_allaer(:,:,id_CSNO3M_phy) = nitrcoarse(:,:)   ! CSNO3M
     269  m_allaer(:,:,id_CINO3M_phy) = nitrinscoarse(:,:)! CINO3M
     270  m_allaer(:,:,id_AIPOMM_phy) = pomins(:,:)       ! AIPOMM
     271  m_allaer(:,:,id_STRAT_phy)  = 0.0
     272
     273  !RAF
     274  m_allaer_pi(:,:,id_ASBCM_phy)  = bcsol_pi(:,:)        ! ASBCM pre-ind
     275  m_allaer_pi(:,:,id_ASPOMM_phy) = pomsol_pi(:,:)       ! ASPOMM pre-ind
     276  m_allaer_pi(:,:,id_ASSO4M_phy) = sulfacc_pi(:,:)      ! ASSO4M (= SO4) pre-ind
     277  m_allaer_pi(:,:,id_CSSO4M_phy) = sulfcoarse_pi(:,:)   ! CSSO4M pre-ind
     278  m_allaer_pi(:,:,id_SSSSM_phy)  = sssupco_pi(:,:)      ! SSSSM pre-ind
     279  m_allaer_pi(:,:,id_CSSSM_phy)  = sscoarse_pi(:,:)     ! CSSSM pre-ind
     280  m_allaer_pi(:,:,id_ASSSM_phy)  = ssacu_pi(:,:)        ! ASSSM pre-ind
     281  m_allaer_pi(:,:,id_CIDUSTM_phy)= cidust_pi(:,:)       ! CIDUSTM pre-ind
     282  m_allaer_pi(:,:,id_AIBCM_phy)  = bcins_pi(:,:)        ! AIBCM pre-ind
     283  m_allaer_pi(:,:,id_ASNO3M_phy) = nitracc_pi(:,:)      ! ASNO3M pre-ind
     284  m_allaer_pi(:,:,id_CSNO3M_phy) = nitrcoarse_pi(:,:)   ! CSNO3M pre-ind
     285  m_allaer_pi(:,:,id_CINO3M_phy) = nitrinscoarse_pi(:,:)! CINO3M pre-ind
     286  m_allaer_pi(:,:,id_AIPOMM_phy) = pomins_pi(:,:)       ! AIPOMM pre-ind
     287  m_allaer_pi(:,:,id_STRAT_phy)  = 0.0
     288
     289  !
     290  ! Calculate the total mass of all soluble aersosols
     291  ! to be revisited for AR6
     292  mass_solu_aero(:,:)    = sulfacc(:,:)    + bcsol(:,:)    + pomsol(:,:)   + nitracc(:,:)   ! + &
     293  !                           sscoarse(:,:)    + ssacu(:,:)    + sssupco(:,:)
     294  mass_solu_aero_pi(:,:) = sulfacc_pi(:,:) + bcsol_pi(:,:) + pomsol_pi(:,:) + nitracc_pi(:,:) ! + &
     295  !                           sscoarse_pi(:,:) + ssacu_pi(:,:) + sssupco_pi(:,:)
     296
     297  !****************************************************************************************
     298  ! 2) Calculate optical properties for the aerosols
     299  !
     300  !****************************************************************************************
    184301  DO k = 1, klev
    185302     DO i = 1, klon
     
    188305  END DO
    189306
     307  ! aeropt_6bands for rrtm
    190308  CALL aeropt_6bands_rrtm( &
    191           pdel, m_allaer, pdtphys, rhcl, &
    192           tau_aero, piz_aero, cg_aero,   &
    193           m_allaer_pi, flag_aerosol, &
    194           pplay, t_seri, presnivs)
    195      
    196      ! aeropt_5wv only for validation and diagnostics.
    197      CALL aeropt_5wv_rrtm(                    &
    198           pdel, m_allaer,                &
    199           pdtphys, rhcl, aerindex,       &
    200           flag_aerosol, pplay, t_seri,   &
    201           tausum_aero, tau3d_aero )
    202 
    203 ! Diagnostics calculation for CMIP5 protocol
    204   sconcso4(:)=m_allaer(:,1,id_ASSO4M)*1.e-9
    205   sconcoa(:)=(m_allaer(:,1,id_ASPOMM)+m_allaer(:,1,id_AIPOMM))*1.e-9
    206   sconcbc(:)=(m_allaer(:,1,id_ASBCM)+m_allaer(:,1,id_AIBCM))*1.e-9
    207   sconcss(:)=(m_allaer(:,1,id_ASSSM)+m_allaer(:,1,id_CSSSM)+m_allaer(:,1,id_SSSSM))*1.e-9
    208   sconcdust(:)=m_allaer(:,1,id_CIDUSTM)*1.e-9
    209   concso4(:,:)=m_allaer(:,:,id_ASSO4M)*1.e-9
    210   concoa(:,:)=(m_allaer(:,:,id_ASPOMM)+m_allaer(:,:,id_AIPOMM))*1.e-9
    211   concbc(:,:)=(m_allaer(:,:,id_ASBCM)+m_allaer(:,:,id_AIBCM))*1.e-9
    212   concss(:,:)=(m_allaer(:,:,id_ASSSM)+m_allaer(:,:,id_CSSSM)+m_allaer(:,:,id_SSSSM))*1.e-9
    213   concdust(:,:)=m_allaer(:,:,id_CIDUSTM)*1.e-9
     309       pdel, m_allaer, pdtphys, rhcl, &
     310       tau_aero, piz_aero, cg_aero,   &
     311       m_allaer_pi, flag_aerosol, &
     312       zrho )
     313
     314  ! aeropt_5wv only for validation and diagnostics
     315  CALL aeropt_5wv_rrtm(                    &
     316       pdel, m_allaer,                &
     317       pdtphys, rhcl, aerindex,       &
     318       flag_aerosol, pplay, t_seri,   &
     319       tausum_aero, tau3d_aero )
     320
     321  ! Diagnostics calculation for CMIP5 protocol
     322  sconcso4(:)  =m_allaer(:,1,id_ASSO4M_phy)*1.e-9
     323  sconcno3(:)  =(m_allaer(:,1,id_ASNO3M_phy)+m_allaer(:,1,id_CSNO3M_phy)+m_allaer(:,1,id_CINO3M_phy))*1.e-9
     324  sconcoa(:)   =(m_allaer(:,1,id_ASPOMM_phy)+m_allaer(:,1,id_AIPOMM_phy))*1.e-9
     325  sconcbc(:)   =(m_allaer(:,1,id_ASBCM_phy)+m_allaer(:,1,id_AIBCM_phy))*1.e-9
     326  sconcss(:)   =(m_allaer(:,1,id_ASSSM_phy)+m_allaer(:,1,id_CSSSM_phy)+m_allaer(:,1,id_SSSSM_phy))*1.e-9
     327  sconcdust(:) =m_allaer(:,1,id_CIDUSTM_phy)*1.e-9
     328  concso4(:,:) =m_allaer(:,:,id_ASSO4M_phy)*1.e-9
     329  concno3(:,:) =(m_allaer(:,:,id_ASNO3M_phy)+m_allaer(:,:,id_CSNO3M_phy)+m_allaer(:,:,id_CINO3M_phy))*1.e-9
     330  concoa(:,:)  =(m_allaer(:,:,id_ASPOMM_phy)+m_allaer(:,:,id_AIPOMM_phy))*1.e-9
     331  concbc(:,:)  =(m_allaer(:,:,id_ASBCM_phy)+m_allaer(:,:,id_AIBCM_phy))*1.e-9
     332  concss(:,:)  =(m_allaer(:,:,id_ASSSM_phy)+m_allaer(:,:,id_CSSSM_phy)+m_allaer(:,:,id_SSSSM_phy))*1.e-9
     333  concdust(:,:)=m_allaer(:,:,id_CIDUSTM_phy)*1.e-9
    214334
    215335END SUBROUTINE readaerosol_optic_rrtm
  • LMDZ5/trunk/libf/phylmd/rrtm/readaerosolstrato_rrtm.F90

    r2058 r2146  
    1616    USE aero_mod
    1717    USE dimphy
     18    USE YOERAD   , ONLY : NLW
    1819
    1920    implicit none
    2021
     22    include "YOMCST.h"
    2123    include "dimensions.h"
    2224
     
    3335    real, pointer:: time(:)
    3436    real, pointer:: lev(:)
    35     integer k, band, wave
     37    integer k, band, wave, i
    3638    integer, save :: mth_pre
    3739
     
    4547    real, allocatable:: tauaerstrat_mois_glo_bands(:,:,:)
    4648
     49    real, allocatable:: sum_tau_aer_strat(:)
     50
    4751! For NetCDF:
    4852    integer ncid_in  ! IDs for input files
     
    5054
    5155! Stratospheric aerosols optical properties
    52 ! alpha_strat over the 2 bands is normalised by the 550 nm extinction coefficient
    53 ! alpha_strat_wave is *not* normalised by the 550 nm extinction coefficient
    54     real, dimension(nbands_rrtm) :: alpha_strat, piz_strat, cg_strat
    55     data alpha_strat/0.938538969, 0.990073204, 0.992904723, 0.829215884, 0.439313501, 0.156857833/
    56     data cg_strat   /0.699142992, 0.716326416, 0.735462785, 0.736726701, 0.712068975, 0.575097859/
    57     data piz_strat  /1.000000000, 1.000000000, 1.000000000, 1.000000000, 0.997781098, 0.452584684/
    58     real, dimension(nwave) :: alpha_strat_wave
    59     data alpha_strat_wave/3.36780953,3.34667683,3.20444202,3.0293026,2.82108808/
    60 
     56! alpha_sw_strat over the 6 bands is normalised by the 550 nm extinction coefficient
     57    real, dimension(nbands_sw_rrtm) :: alpha_sw_strat, piz_sw_strat, cg_sw_strat
     58    data alpha_sw_strat/0.8545564, 0.8451642, 0.9821724, 0.8145110, 0.3073565, 7.7966176E-02/
     59    data cg_sw_strat   /0.6997170, 0.6810035, 0.7403592, 0.7562674, 0.6676504, 0.3478689/
     60    data piz_sw_strat  /0.9999998, 0.9999998, 1.000000000, 0.9999958, 0.9977155, 0.4510679/
     61!
     62!--diagnostics AOD in the SW
     63! alpha_sw_strat_wave is *not* normalised by the 550 nm extinction coefficient
     64    real, dimension(nwave) :: alpha_sw_strat_wave
     65    data alpha_sw_strat_wave/3.708007,4.125824,4.136584,3.887478,3.507738/
     66!
     67!--diagnostics AOD in the LW at 10 um
     68    real :: alpha_lw_strat_wave
     69    data alpha_lw_strat_wave/0.2746812/
     70!
     71    real, dimension(nbands_lw_rrtm) :: alpha_lw_abs_rrtm
     72    data alpha_lw_abs_rrtm/   8.8340312E-02, 6.9856711E-02, 6.2652975E-02, 5.7188231E-02, &
     73                              6.3157059E-02, 5.5072524E-02, 5.0571125E-02, 0.1349073, &   
     74                              0.1381676, 9.6506312E-02, 5.1312990E-02, 2.4256418E-02, &
     75                              2.7191756E-02, 3.3862915E-02, 1.6132960E-02, 1.4275438E-02/ ! calculated with Mie_SW_LW_RRTM_V2.4 (bimodal, corrected)
     76                                                                                          ! for r_0=/0.13E-6, 0.41E-6/ m, sigma_g=/1.26, 1.30/
     77                                                                                          ! order: increasing wavelength!
    6178!--------------------------------------------------------
    6279
    6380    IF (.not.ALLOCATED(tau_aer_strat)) ALLOCATE(tau_aer_strat(klon,klev))
     81    IF (.not.ALLOCATED(sum_tau_aer_strat)) ALLOCATE(sum_tau_aer_strat(klon))
    6482
    6583    IF (is_mpi_root) THEN
     
    6785    IF (debut.OR.mth_cur.NE.mth_pre) THEN
    6886
    69     IF (nbands_rrtm.NE.6) THEN
    70         print *,'nbands_rrtm doit etre egal a 6 dans readaerosolstrat_rrtm'
     87    IF (nbands_sw_rrtm.NE.6) THEN
     88        print *,'nbands_sw_rrtm doit etre egal a 6 dans readaerosolstrat_rrtm'
    7189        STOP
    7290    ENDIF
     
    112130    ALLOCATE(tauaerstrat_mois(n_lon, n_lat, n_lev))
    113131    ALLOCATE(tauaerstrat_mois_glo(klon_glo, n_lev))
    114     ALLOCATE(tauaerstrat_mois_glo_bands(klon_glo, n_lev,nbands_rrtm))
     132    ALLOCATE(tauaerstrat_mois_glo_bands(klon_glo, n_lev,nbands_sw_rrtm))
    115133
    116134!--reading stratospheric AOD at 550 nm
     
    143161    ENDIF !--is_mpi_root
    144162
    145 !--total vertical aod at the 5 wavelengths
     163!--total vertical aod at the 5 SW wavelengths
    146164    DO wave=1, nwave
    147165    DO k=1, klev
    148     tausum_aero(:,wave,id_strat)=tausum_aero(:,wave,id_strat)+tau_aer_strat(:,k)*alpha_strat_wave(wave)/alpha_strat_wave(2)
     166    tausum_aero(:,wave,id_STRAT_phy)=tausum_aero(:,wave,id_STRAT_phy)+tau_aer_strat(:,k)*alpha_sw_strat_wave(wave)/alpha_sw_strat_wave(2)
    149167    ENDDO
    150168    ENDDO
    151169
    152170!--weighted average for cg, piz and tau, adding strat aerosols on top of tropospheric ones
    153     DO band=1, nbands_rrtm
    154 !--anthropogenic aerosols bands 1 to nbands_rrtm
    155     cg_aero_rrtm(:,:,2,band)  = ( cg_aero_rrtm(:,:,2,band)*piz_aero_rrtm(:,:,2,band)*tau_aero_rrtm(:,:,2,band) + &
    156                                   cg_strat(band)*piz_strat(band)*alpha_strat(band)*tau_aer_strat(:,:) ) /        &
    157                              MAX( piz_aero_rrtm(:,:,2,band)*tau_aero_rrtm(:,:,2,band) +                          &
    158                                   piz_strat(band)*alpha_strat(band)*tau_aer_strat(:,:), 1.e-15 )
    159     piz_aero_rrtm(:,:,2,band)  = ( piz_aero_rrtm(:,:,2,band)*tau_aero_rrtm(:,:,2,band) +                         &
    160                               piz_strat(band)*alpha_strat(band)*tau_aer_strat(:,:) ) /                           &
    161                               MAX( tau_aero_rrtm(:,:,2,band) + alpha_strat(band)*tau_aer_strat(:,:), 1.e-15 )
    162     tau_aero_rrtm(:,:,2,band)  = tau_aero_rrtm(:,:,2,band) + alpha_strat(band)*tau_aer_strat(:,:)
    163 !--natural aerosols bands 1 to nbands_rrtm
    164     cg_aero_rrtm(:,:,1,band)  = ( cg_aero_rrtm(:,:,1,band)*piz_aero_rrtm(:,:,1,band)*tau_aero_rrtm(:,:,1,band) + &
    165                              cg_strat(band)*piz_strat(band)*alpha_strat(band)*tau_aer_strat(:,:) ) /             &
    166                              MAX( piz_aero_rrtm(:,:,1,band)*tau_aero_rrtm(:,:,1,band) +                          &
    167                                   piz_strat(band)*alpha_strat(band)*tau_aer_strat(:,:), 1.e-15 )
    168     piz_aero_rrtm(:,:,1,band)  = ( piz_aero_rrtm(:,:,1,band)*tau_aero_rrtm(:,:,1,band) +                         &
    169                               piz_strat(band)*alpha_strat(band)*tau_aer_strat(:,:) ) /                           &
    170                               MAX( tau_aero_rrtm(:,:,1,band) + alpha_strat(band)*tau_aer_strat(:,:),1.e-15 )
    171     tau_aero_rrtm(:,:,1,band)  = tau_aero_rrtm(:,:,1,band) + alpha_strat(band)*tau_aer_strat(:,:)
     171    DO band=1, nbands_sw_rrtm
     172!--anthropogenic aerosols bands 1 to nbands_sw_rrtm
     173    cg_aero_sw_rrtm(:,:,2,band)  = ( cg_aero_sw_rrtm(:,:,2,band)*piz_aero_sw_rrtm(:,:,2,band)*tau_aero_sw_rrtm(:,:,2,band) + &
     174                                  cg_sw_strat(band)*piz_sw_strat(band)*alpha_sw_strat(band)*tau_aer_strat(:,:) ) /           &
     175                             MAX( piz_aero_sw_rrtm(:,:,2,band)*tau_aero_sw_rrtm(:,:,2,band) +                                &
     176                                  piz_sw_strat(band)*alpha_sw_strat(band)*tau_aer_strat(:,:), 1.e-15 )
     177    piz_aero_sw_rrtm(:,:,2,band)  = ( piz_aero_sw_rrtm(:,:,2,band)*tau_aero_sw_rrtm(:,:,2,band) +                            &
     178                              piz_sw_strat(band)*alpha_sw_strat(band)*tau_aer_strat(:,:) ) /                                 &
     179                              MAX( tau_aero_sw_rrtm(:,:,2,band) + alpha_sw_strat(band)*tau_aer_strat(:,:), 1.e-15 )
     180    tau_aero_sw_rrtm(:,:,2,band)  = tau_aero_sw_rrtm(:,:,2,band) + alpha_sw_strat(band)*tau_aer_strat(:,:)
     181!--natural aerosols bands 1 to nbands_sw_rrtm
     182    cg_aero_sw_rrtm(:,:,1,band)  = ( cg_aero_sw_rrtm(:,:,1,band)*piz_aero_sw_rrtm(:,:,1,band)*tau_aero_sw_rrtm(:,:,1,band) + &
     183                             cg_sw_strat(band)*piz_sw_strat(band)*alpha_sw_strat(band)*tau_aer_strat(:,:) ) /                &
     184                             MAX( piz_aero_sw_rrtm(:,:,1,band)*tau_aero_sw_rrtm(:,:,1,band) +                                &
     185                                  piz_sw_strat(band)*alpha_sw_strat(band)*tau_aer_strat(:,:), 1.e-15 )
     186    piz_aero_sw_rrtm(:,:,1,band)  = ( piz_aero_sw_rrtm(:,:,1,band)*tau_aero_sw_rrtm(:,:,1,band) +                            &
     187                              piz_sw_strat(band)*alpha_sw_strat(band)*tau_aer_strat(:,:) ) /                                 &
     188                              MAX( tau_aero_sw_rrtm(:,:,1,band) + alpha_sw_strat(band)*tau_aer_strat(:,:),1.e-15 )
     189    tau_aero_sw_rrtm(:,:,1,band)  = tau_aero_sw_rrtm(:,:,1,band) + alpha_sw_strat(band)*tau_aer_strat(:,:)
     190!--no stratospheric aerosol in index 1 for these tests
     191!    cg_aero_sw_rrtm(:,:,1,band)  =  cg_aero_sw_rrtm(:,:,1,band)
     192!    piz_aero_sw_rrtm(:,:,1,band)  = piz_aero_sw_rrtm(:,:,1,band)
     193!    tau_aero_sw_rrtm(:,:,1,band)  = tau_aero_sw_rrtm(:,:,1,band)
     194    ENDDO
     195
     196!--stratospheric AOD in LW
     197    IF (nbands_lw_rrtm .NE. NLW) then
     198      print*, 'different values for NLW (=',NLW,') and nbands_lw_rrtm (=', nbands_lw_rrtm, ')'
     199      STOP
     200    ENDIF
     201
     202    DO band=1, nbands_lw_rrtm
     203    tau_aero_lw_rrtm(:,:,2,band)  = tau_aero_lw_rrtm(:,:,2,band) + alpha_lw_abs_rrtm(band)*tau_aer_strat(:,:)
     204    tau_aero_lw_rrtm(:,:,1,band)  = tau_aero_lw_rrtm(:,:,1,band) + alpha_lw_abs_rrtm(band)*tau_aer_strat(:,:)
     205!--no stratospheric aerosols in index 1 for these tests
     206!    tau_aero_lw_rrtm(:,:,1,band)  = tau_aero_lw_rrtm(:,:,1,band)
    172207    ENDDO
    173208
  • LMDZ5/trunk/libf/phylmd/rrtm/recmwf_aero.F90

    r2005 r2146  
    2020 & PPIZA_NAT,PCGA_NAT,PTAU_NAT, &
    2121!--fin OB
     22!--C.Kleinschmitt
     23 & PTAU_LW_TOT, PTAU_LW_NAT, &
     24!--end
    2225 & PFLUX,PFLUC,&
    2326 & PFSDN ,PFSUP , PFSCDN , PFSCUP,&
     
    2730 & PTOPSWAIAERO,PSOLSWAIAERO,&
    2831 & PTOPSWCFAERO,PSOLSWCFAERO,&
     32!--LW diagnostics CK
     33 & PTOPLWADAERO,PSOLLWADAERO,&
     34 & PTOPLWAD0AERO,PSOLLWAD0AERO,&
     35 & PTOPLWAIAERO,PSOLLWAIAERO,&
     36!..end
    2937 & ok_ade, ok_aie, flag_aerosol,flag_aerosol_strat)
    3038!--fin
     
    7987! PCGA_NAT   : (KPROMA,KLEV,NSW); Assymetry factor for natural aerosol
    8088! PTAU_NAT: (KPROMA,KLEV,NSW)   ; Optical depth of natural aerosol
     89! PTAU_LW_TOT  (KPROMA,KLEV,NLW); LW Optical depth of total aerosols 
     90! PTAU_LW_NAT  (KPROMA,KLEV,NLW); LW Optical depth of natural aerosols
    8191!--fin OB
    8292
     
    136146USE YOMCST   , ONLY :         RMD      ,RMO3
    137147USE YOMPHY3  , ONLY : RII0
     148USE YOERAD   , ONLY : NLW, NAER, RCCNLND  ,RCCNSEA 
    138149USE YOERAD   , ONLY : NAER, RCCNLND  ,RCCNSEA 
    139150USE YOERDU   , ONLY : REPSCQ
     
    150161IMPLICIT NONE
    151162INCLUDE "clesphys.h"
     163
    152164
    153165INTEGER(KIND=JPIM),INTENT(IN)    :: KPROMA
     
    186198REAL(KIND=JPRB)                  :: PTAU_ZERO(KPROMA,KLEV,NSW)
    187199!--fin
     200!--C.Kleinschmitt
     201REAL(KIND=JPRB)                  :: PTAU_LW_ZERO(KPROMA,KLEV,NLW)
     202REAL(KIND=JPRB)   ,INTENT(IN)    :: PTAU_LW_TOT(KPROMA,KLEV,NLW)
     203REAL(KIND=JPRB)   ,INTENT(IN)    :: PTAU_LW_NAT(KPROMA,KLEV,NLW)
     204!--end
    188205REAL(KIND=JPRB)   ,INTENT(IN)    :: PREF_LIQ(KPROMA,KLEV)
    189206REAL(KIND=JPRB)   ,INTENT(IN)    :: PREF_ICE(KPROMA,KLEV)
     
    199216REAL(KIND=JPRB)   ,INTENT(OUT)   :: PTOPSWCFAERO(KPROMA,3), PSOLSWCFAERO(KPROMA,3) !--do we keep this ?
    200217!--fin
     218!--CK
     219REAL(KIND=JPRB)   ,INTENT(out)   :: PTOPLWADAERO(KPROMA), PSOLLWADAERO(KPROMA)       ! LW Aerosol direct forcing at TOA + surface
     220REAL(KIND=JPRB)   ,INTENT(OUT)   :: PTOPLWAD0AERO(KPROMA), PSOLLWAD0AERO(KPROMA)     ! LW Aerosol direct forcing at TOA + surface
     221REAL(KIND=JPRB)   ,INTENT(OUT)   :: PTOPLWAIAERO(KPROMA), PSOLLWAIAERO(KPROMA)       ! LW Aer. indirect forcing at TOA + surface
     222!--end
    201223REAL(KIND=JPRB)   ,INTENT(OUT)   :: PEMTD(KPROMA,KLEV+1)
    202224REAL(KIND=JPRB)   ,INTENT(OUT)   :: PEMTU(KPROMA,KLEV+1)
     
    295317REAL(KIND=JPRB) ::  ZFSUP0_AERO(KPROMA,KLEV+1,5)
    296318REAL(KIND=JPRB) ::  ZFSDN0_AERO(KPROMA,KLEV+1,5)
     319!--LW (CK):
     320REAL(KIND=JPRB) ::  LWUP_AERO(KPROMA,KLEV+1,5)
     321REAL(KIND=JPRB) ::  LWDN_AERO(KPROMA,KLEV+1,5)
     322REAL(KIND=JPRB) ::  LWUP0_AERO(KPROMA,KLEV+1,5)
     323REAL(KIND=JPRB) ::  LWDN0_AERO(KPROMA,KLEV+1,5)
    297324
    298325#include "radlsw.intfb.h"
     
    313340ZFSDN0_AERO(:,:,:)=0.
    314341
     342LWUP_AERO (:,:,:)=0.
     343LWDN_AERO (:,:,:)=0.
     344LWUP0_AERO(:,:,:)=0.
     345LWDN0_AERO(:,:,:)=0.
     346
    315347PTAU_ZERO(:,:,:) =1.e-15
    316348PPIZA_ZERO(:,:,:)=1.0
    317349PCGA_ZERO(:,:,:) =0.0
     350
     351PTAU_LW_ZERO(:,:,:) =1.e-15
    318352
    319353
     
    431465 & ZFRSOD, ZSUDU  , ZUVDF   , ZPARF   , ZPARCF, ZTINCF, PSFSWDIR,&
    432466 & PSFSWDIF,PFSDNN, PFSDNV  ,& 
    433  & LRDUST,PPIZA_NAT,PCGA_NAT,PTAU_NAT,PFLUX,PFLUC,&
     467 & LRDUST,PPIZA_NAT,PCGA_NAT,PTAU_NAT,PTAU_LW_NAT,PFLUX,PFLUC,&
    434468 & PFSDN , PFSUP  , PFSCDN  , PFSCUP )
    435469
     
    440474ZFSUP_AERO(:,:,1) =  PFSUP(:,:)
    441475ZFSDN_AERO(:,:,1) =  PFSDN(:,:)
     476
     477LWUP0_AERO(:,:,1) = PFLUC(:,1,:)
     478LWDN0_AERO(:,:,1) = PFLUC(:,2,:)
     479
     480LWUP_AERO(:,:,1) = PFLUX(:,1,:)
     481LWDN_AERO(:,:,1) = PFLUX(:,2,:)
    442482
    443483ENDIF
     
    463503 & ZFRSOD, ZSUDU  , ZUVDF   , ZPARF   , ZPARCF, ZTINCF, PSFSWDIR,&
    464504 & PSFSWDIF,PFSDNN, PFSDNV  ,& 
    465  & LRDUST,PPIZA_NAT,PCGA_NAT,PTAU_NAT,PFLUX,PFLUC,&
     505 & LRDUST,PPIZA_NAT,PCGA_NAT,PTAU_NAT,PTAU_LW_NAT,PFLUX,PFLUC,&
    466506 & PFSDN , PFSUP  , PFSCDN  , PFSCUP )
    467507
     
    472512ZFSUP_AERO(:,:,2) =  PFSUP(:,:)
    473513ZFSDN_AERO(:,:,2) =  PFSDN(:,:)
     514
     515LWUP0_AERO(:,:,2) = PFLUC(:,1,:)
     516LWDN0_AERO(:,:,2) = PFLUC(:,2,:)
     517
     518LWUP_AERO(:,:,2) = PFLUX(:,1,:)
     519LWDN_AERO(:,:,2) = PFLUX(:,2,:)
    474520
    475521ENDIF ! ok_aie     
     
    495541 & ZFRSOD, ZSUDU  , ZUVDF   , ZPARF   , ZPARCF, ZTINCF, PSFSWDIR,&
    496542 & PSFSWDIF,PFSDNN, PFSDNV  ,& 
    497  & LRDUST,PPIZA_TOT,PCGA_TOT,PTAU_TOT,PFLUX,PFLUC,&
     543 & LRDUST,PPIZA_TOT,PCGA_TOT,PTAU_TOT,PTAU_LW_TOT,PFLUX,PFLUC,&
    498544 & PFSDN , PFSUP  , PFSCDN  , PFSCUP )
    499545
     
    504550ZFSUP_AERO(:,:,3) =  PFSUP(:,:)
    505551ZFSDN_AERO(:,:,3) =  PFSDN(:,:)
     552
     553LWUP0_AERO(:,:,3) = PFLUC(:,1,:)
     554LWDN0_AERO(:,:,3) = PFLUC(:,2,:)
     555
     556LWUP_AERO(:,:,3) = PFLUX(:,1,:)
     557LWDN_AERO(:,:,3) = PFLUX(:,2,:)
    506558
    507559ENDIF !-end ok_ade
     
    527579 & ZFRSOD, ZSUDU  , ZUVDF   , ZPARF   , ZPARCF, ZTINCF, PSFSWDIR,&
    528580 & PSFSWDIF,PFSDNN, PFSDNV  ,& 
    529  & LRDUST,PPIZA_TOT,PCGA_TOT,PTAU_TOT,PFLUX,PFLUC,&
     581 & LRDUST,PPIZA_TOT,PCGA_TOT,PTAU_TOT,PTAU_LW_TOT,PFLUX,PFLUC,&
    530582 & PFSDN , PFSUP  , PFSCDN  , PFSCUP )
    531583
     
    536588ZFSUP_AERO(:,:,4) =  PFSUP(:,:)
    537589ZFSDN_AERO(:,:,4) =  PFSDN(:,:)
     590
     591LWUP0_AERO(:,:,4) = PFLUC(:,1,:)
     592LWDN0_AERO(:,:,4) = PFLUC(:,2,:)
     593
     594LWUP_AERO(:,:,4) = PFLUX(:,1,:)
     595LWDN_AERO(:,:,4) = PFLUX(:,2,:)
    538596
    539597ENDIF ! ok_ade .and. ok_aie
     
    563621 & ZFRSOD, ZSUDU  , ZUVDF   , ZPARF   , ZPARCF, ZTINCF, PSFSWDIR,&
    564622 & PSFSWDIF,PFSDNN, PFSDNV  ,& 
    565  & LRDUST,PPIZA_ZERO,PCGA_ZERO,PTAU_ZERO,PFLUX,PFLUC,&
     623 & LRDUST,PPIZA_ZERO,PCGA_ZERO,PTAU_ZERO, PTAU_LW_ZERO,PFLUX,PFLUC,&
    566624 & PFSDN , PFSUP  , PFSCDN  , PFSCUP )
    567625
     
    572630ZFSUP_AERO(:,:,5) =  PFSUP(:,:)
    573631ZFSDN_AERO(:,:,5) =  PFSDN(:,:)
     632
     633LWUP0_AERO(:,:,5) = PFLUC(:,1,:)
     634LWDN0_AERO(:,:,5) = PFLUC(:,2,:)
     635
     636LWUP_AERO(:,:,5) = PFLUX(:,1,:)
     637LWDN_AERO(:,:,5) = PFLUX(:,2,:)
    574638
    575639ENDIF ! .not. AEROSOLFEEDBACK_ACTIVE
     
    643707    PFSCUP(:,:) =   ZFSUP0_AERO(:,:,4)
    644708    PFSCDN(:,:) =   ZFSDN0_AERO(:,:,4)
     709
     710    PFLUX(:,1,:) =  LWUP_AERO(:,:,4)
     711    PFLUX(:,2,:) =  LWDN_AERO(:,:,4)
     712    PFLUC(:,1,:) =  LWUP0_AERO(:,:,4)
     713    PFLUC(:,2,:) =  LWDN0_AERO(:,:,4)   
    645714  ENDIF
    646715
     
    650719    PFSCUP(:,:) =   ZFSUP0_AERO(:,:,3)
    651720    PFSCDN(:,:) =   ZFSDN0_AERO(:,:,3)
     721
     722    PFLUX(:,1,:) =  LWUP_AERO(:,:,3)
     723    PFLUX(:,2,:) =  LWDN_AERO(:,:,3)
     724    PFLUC(:,1,:) =  LWUP0_AERO(:,:,3)
     725    PFLUC(:,2,:) =  LWDN0_AERO(:,:,3)
    652726  ENDIF
    653727
     
    657731    PFSCUP(:,:) =   ZFSUP0_AERO(:,:,2)
    658732    PFSCDN(:,:) =   ZFSDN0_AERO(:,:,2)
     733
     734    PFLUX(:,1,:) =  LWUP_AERO(:,:,2)
     735    PFLUX(:,2,:) =  LWDN_AERO(:,:,2)
     736    PFLUC(:,1,:) =  LWUP0_AERO(:,:,2)
     737    PFLUC(:,2,:) =  LWDN0_AERO(:,:,2)
    659738  ENDiF
    660739
     
    664743    PFSCUP(:,:) =   ZFSUP0_AERO(:,:,1)
    665744    PFSCDN(:,:) =   ZFSDN0_AERO(:,:,1)
     745
     746    PFLUX(:,1,:) =  LWUP_AERO(:,:,1)
     747    PFLUX(:,2,:) =  LWDN_AERO(:,:,1)
     748    PFLUC(:,1,:) =  LWUP0_AERO(:,:,1)
     749    PFLUC(:,2,:) =  LWDN0_AERO(:,:,1)
    666750  ENDIF
    667751
     
    677761    PFSCDN(:,:) =   ZFSDN0_AERO(:,:,5)
    678762
     763    PFLUX(:,1,:) =  LWUP_AERO(:,:,5)
     764    PFLUX(:,2,:) =  LWDN_AERO(:,:,5)
     765    PFLUC(:,1,:) =  LWUP0_AERO(:,:,5)
     766    PFLUC(:,2,:) =  LWDN0_AERO(:,:,5)
     767
    679768ENDIF
    680769
     
    683772! requires a natural aerosol field read and used
    684773! Difference of net fluxes from double call to radiation
    685 ! Will need to be extended to LW radiation
     774! Will need to be extended to LW radiation -> done by CK (2014-05-23)
    686775
    687776IF (flag_aerosol .GT. 0 .OR. flag_aerosol_strat) THEN
     
    709798     PTOPSWCFAERO(:,3) = 0.0
    710799
     800! LW direct anthropogenic forcing
     801     PSOLLWADAERO(:)  = (-LWDN_AERO(:,1,4)      -LWUP_AERO(:,1,4))      -(-LWDN_AERO(:,1,2)      -LWUP_AERO(:,1,2))
     802     PTOPLWADAERO(:)  = (-LWDN_AERO(:,KLEV+1,4) -LWUP_AERO(:,KLEV+1,4)) -(-LWDN_AERO(:,KLEV+1,2) -LWUP_AERO(:,KLEV+1,2))
     803     PSOLLWAD0AERO(:) = (-LWDN0_AERO(:,1,4)     -LWUP0_AERO(:,1,4))     -(-LWDN0_AERO(:,1,2)     -LWUP0_AERO(:,1,2))
     804     PTOPLWAD0AERO(:) = (-LWDN0_AERO(:,KLEV+1,4)-LWUP0_AERO(:,KLEV+1,4))-(-LWDN0_AERO(:,KLEV+1,2)-LWUP0_AERO(:,KLEV+1,2))
     805
     806! LW indirect anthropogenic forcing
     807     PSOLLWAIAERO(:) = (-LWDN_AERO(:,1,4)     -LWUP_AERO(:,1,4))     -(-LWDN_AERO(:,1,3)     -LWUP_AERO(:,1,3))
     808     PTOPLWAIAERO(:) = (-LWDN_AERO(:,KLEV+1,4)-LWUP_AERO(:,KLEV+1,4))-(-LWDN_AERO(:,KLEV+1,3)-LWUP_AERO(:,KLEV+1,3))
     809
    711810ENDIF
    712811
     
    733832     PTOPSWCFAERO(:,3) = 0.0
    734833
     834! LW direct anthropogenic forcing
     835     PSOLLWADAERO(:)  = (-LWDN_AERO(:,1,3)      -LWUP_AERO(:,1,3))      -(-LWDN_AERO(:,1,1)      -LWUP_AERO(:,1,1))
     836     PTOPLWADAERO(:)  = (-LWDN_AERO(:,KLEV+1,3) -LWUP_AERO(:,KLEV+1,3)) -(-LWDN_AERO(:,KLEV+1,1) -LWUP_AERO(:,KLEV+1,1))
     837     PSOLLWAD0AERO(:) = (-LWDN0_AERO(:,1,3)     -LWUP0_AERO(:,1,3))     -(-LWDN0_AERO(:,1,1)     -LWUP0_AERO(:,1,1))
     838     PTOPLWAD0AERO(:) = (-LWDN0_AERO(:,KLEV+1,3)-LWUP0_AERO(:,KLEV+1,3))-(-LWDN0_AERO(:,KLEV+1,1)-LWUP0_AERO(:,KLEV+1,1))
     839
     840! LW indirect anthropogenic forcing
     841     PSOLLWAIAERO(:) = 0.0
     842     PTOPLWAIAERO(:) = 0.0
     843
    735844ENDIF
    736845
     
    757866     PTOPSWCFAERO(:,3) = 0.0
    758867
     868! LW direct anthropogenic forcing
     869     PSOLLWADAERO(:)  = 0.0
     870     PTOPLWADAERO(:)  = 0.0
     871     PSOLLWAD0AERO(:) = 0.0
     872     PTOPLWAD0AERO(:) = 0.0
     873
     874! LW indirect anthropogenic forcing
     875     PSOLLWAIAERO(:) = (-LWDN_AERO(:,1,2)     -LWUP_AERO(:,1,2))     -(-LWDN_AERO(:,1,1)     -LWUP_AERO(:,1,1))
     876     PTOPLWAIAERO(:) = (-LWDN_AERO(:,KLEV+1,2)-LWUP_AERO(:,KLEV+1,2))-(-LWDN_AERO(:,KLEV+1,1)-LWUP_AERO(:,KLEV+1,1))
     877
    759878ENDIF
    760879
     
    781900     PTOPSWCFAERO(:,3) = 0.0
    782901
     902! LW direct anthropogenic forcing
     903     PSOLLWADAERO(:)  = 0.0
     904     PTOPLWADAERO(:)  = 0.0
     905     PSOLLWAD0AERO(:) = 0.0
     906     PTOPLWAD0AERO(:) = 0.0
     907
     908! LW indirect anthropogenic forcing
     909     PSOLLWAIAERO(:) = 0.0
     910     PTOPLWAIAERO(:) = 0.0
     911
    783912ENDIF
    784913
     
    790919     PSOLSWCFAERO(:,3) = (ZFSDN_AERO(:,1,5)     -ZFSUP_AERO(:,1,5))     -(ZFSDN0_AERO(:,1,5)     -ZFSUP0_AERO(:,1,5))
    791920     PTOPSWCFAERO(:,3) = (ZFSDN_AERO(:,KLEV+1,5)-ZFSUP_AERO(:,KLEV+1,5))-(ZFSDN0_AERO(:,KLEV+1,5)-ZFSUP0_AERO(:,KLEV+1,5))
     921
    792922ENDIF
    793923
  • LMDZ5/trunk/libf/phylmd/rrtm/rrtm_ecrt_140gp.F90

    r2027 r2146  
    1010 & P_ZEMIS, P_ZEMIW,&
    1111 & pq   , pcco2, pozn, pcldf, ptaucld, ptclear,&
    12  & P_CLDFRAC,P_TAUCLD,P_COLDRY,P_WKL,P_WX,&
    13  & P_TAUAERL,PAVEL,P_TAVEL,PZ,P_TZ,P_TBOUND,K_NLAYERS,P_SEMISS,K_IREFLECT) 
     12 & P_CLDFRAC,P_TAUCLD,&
     13 & PTAU_LW,&
     14 & P_COLDRY,P_WKL,P_WX,&
     15 & P_TAUAERL,PAVEL,P_TAVEL,PZ,P_TZ,P_TBOUND,K_NLAYERS,P_SEMISS,K_IREFLECT ) 
    1416
    1517!     Reformatted for F90 by JJMorcrette, ECMWF, 980714
     
    2830USE PARRRTM  , ONLY : JPBAND   ,JPXSEC   ,JPLAY   ,&
    2931 & JPINPX 
    30 USE YOERAD   , ONLY : NOVLP
    31 !USE YOERDI   , ONLY :    RCH4     ,RN2O    ,RCFC11  ,RCFC12
     32USE YOERAD   , ONLY : NLW      ,NOVLP
     33USE YOERDI   , ONLY :    RCH4     ,RN2O    ,RCFC11  ,RCFC12
    3234USE YOESW    , ONLY : RAER
    3335
    3436!------------------------------Arguments--------------------------------
    3537
    36 
    37 
    3838IMPLICIT NONE
    3939
    40 #include "clesphys.h"
     40
    4141INTEGER(KIND=JPIM),INTENT(IN)    :: KLON! Number of atmospheres (longitudes)
    4242INTEGER(KIND=JPIM),INTENT(IN)    :: KLEV! Number of atmospheric layers
     
    5656REAL(KIND=JPRB)   ,INTENT(IN)    :: PCLDF(KLON,KLEV) ! Cloud fraction
    5757REAL(KIND=JPRB)   ,INTENT(IN)    :: PTAUCLD(KLON,KLEV,JPBAND) ! Cloud optical depth
     58!--C.Kleinschmitt
     59REAL(KIND=JPRB)   ,INTENT(IN)    :: PTAU_LW(KLON,KLEV,NLW) ! LW Optical depth of aerosols 
     60!--end
    5861REAL(KIND=JPRB)   ,INTENT(OUT)   :: PTCLEAR
    5962REAL(KIND=JPRB)   ,INTENT(OUT)   :: P_CLDFRAC(JPLAY) ! Cloud fraction
     
    258261  P_TAUAERL(I_L,16)=ZTAUAER(5)
    259262ENDDO
     263!--Use LW AOD from own Mie calculations (C. Kleinschmitt)
     264DO I_L=1,KLEV
     265  JK=KLEV-I_L+1
     266!  DO JAE=1, NLW
     267  DO JAE=1, 16
     268    P_TAUAERL(I_L,JAE) = MAX( PTAU_LW(K_IPLON, JK, JAE), 1e-30 )
     269  ENDDO
     270ENDDO
     271!--end C. Kleinschmitt
    260272
    261273DO J2=1,KLEV
     
    390402!     ------------------------------------------------------------------
    391403
    392 
    393 
    394404IF (LHOOK) CALL DR_HOOK('RRTM_ECRT_140GP',1,ZHOOK_HANDLE)
    395405END SUBROUTINE RRTM_ECRT_140GP
  • LMDZ5/trunk/libf/phylmd/rrtm/rrtm_ecrt_140gp.intfb.h

    r1990 r2146  
    1 INTERFACE
    2 SUBROUTINE RRTM_ECRT_140GP&
     1INTERFACE 
     2SUBROUTINE RRTM_ECRT_140GP &
    33 & ( K_IPLON, klon , klev, kcld,&
    44 & paer , paph , pap,&
    5  & pts , pth , pt,&
     5 & pts  , pth , pt,&
    66 & P_ZEMIS, P_ZEMIW,&
    7  & pq , pcco2, pozn, pcldf, ptaucld, ptclear,&
    8  & P_CLDFRAC,P_TAUCLD,P_COLDRY,P_WKL,P_WX,&
    9  & P_TAUAERL,PAVEL,P_TAVEL,PZ,P_TZ,P_TBOUND,K_NLAYERS,P_SEMISS,K_IREFLECT)
    10 USE PARKIND1 ,ONLY : JPIM ,JPRB
    11 USE PARRRTM , ONLY : JPBAND ,JPXSEC ,JPLAY ,&
    12  & JPINPX
     7 & pq   , pcco2, pozn, pcldf, ptaucld, ptclear,&
     8 & P_CLDFRAC,P_TAUCLD,&
     9 & PTAU_LW,&
     10 & P_COLDRY,P_WKL,P_WX,&
     11 & P_TAUAERL,PAVEL,P_TAVEL,PZ,P_TZ,P_TBOUND,K_NLAYERS,P_SEMISS,K_IREFLECT )
     12USE PARKIND1  ,ONLY : JPIM     ,JPRB
     13USE PARRRTM  , ONLY : JPBAND   ,JPXSEC   ,JPLAY   ,&
     14 & JPINPX 
     15USE YOERAD   , ONLY : NLW      ,NOVLP
     16USE YOERDI   , ONLY :    RCH4     ,RN2O    ,RCFC11  ,RCFC12
     17USE YOESW    , ONLY : RAER
    1318INTEGER(KIND=JPIM),INTENT(IN) :: KLON
    1419INTEGER(KIND=JPIM),INTENT(IN) :: KLEV
     
    2833REAL(KIND=JPRB) ,INTENT(IN) :: PCLDF(KLON,KLEV)
    2934REAL(KIND=JPRB) ,INTENT(IN) :: PTAUCLD(KLON,KLEV,JPBAND)
     35!--C.Kleinschmitt
     36REAL(KIND=JPRB)   ,INTENT(IN)    :: PTAU_LW(KLON,KLEV,NLW) ! LW Optical depth of aerosols 
     37!--end
    3038REAL(KIND=JPRB) ,INTENT(OUT) :: PTCLEAR
    3139REAL(KIND=JPRB) ,INTENT(OUT) :: P_CLDFRAC(JPLAY)
  • LMDZ5/trunk/libf/phylmd/rrtm/rrtm_rrtm_140gp.F90

    r1990 r2146  
    4040 & PQ    , PCCO2 , POZN,&
    4141 & PCLDF , PTAUCLD,&
     42 & PTAU_LW,&
    4243 & PEMIT , PFLUX , PFLUC, PTCLEAR &
    4344 & ) 
     
    5556USE PARKIND1  ,ONLY : JPIM     ,JPRB
    5657USE YOMHOOK   ,ONLY : LHOOK,   DR_HOOK
    57 
     58USE YOERAD    ,ONLY : NLW
    5859USE PARRRTM  , ONLY : JPBAND   ,JPXSEC   ,JPGPT    ,JPLAY    ,&
    5960 & JPINPX 
     
    8081REAL(KIND=JPRB)   ,INTENT(IN)    :: PCLDF(KLON,KLEV) ! Cloud fraction
    8182REAL(KIND=JPRB)   ,INTENT(IN)    :: PTAUCLD(KLON,KLEV,JPBAND) ! Cloud optical depth
     83!--C.Kleinschmitt
     84REAL(KIND=JPRB)   ,INTENT(IN)    :: PTAU_LW(KLON,KLEV,NLW) ! LW Optical depth of aerosols
     85!--end
    8286REAL(KIND=JPRB)   ,INTENT(OUT)   :: PEMIT(KLON) ! Surface LW emissivity
    8387REAL(KIND=JPRB)   ,INTENT(OUT)   :: PFLUX(KLON,2,KLEV+1) ! LW total sky flux (1=up, 2=down)
     
    204208   & P_ZEMIS, P_ZEMIW,&
    205209   & pq   , pcco2, pozn, pcldf, ptaucld, ztclear,&
    206    & Z_CLDFRAC,Z_TAUCLD,Z_COLDRY,Z_WKL,Z_WX,&
     210   & Z_CLDFRAC,Z_TAUCLD,&
     211   & PTAU_LW,&
     212   & Z_COLDRY,Z_WKL,Z_WX,&
    207213   & Z_TAUAERL,Z_PAVEL,Z_TAVEL,Z_PZ,Z_TZ,Z_TBOUND,I_NLAYERS,Z_SEMISS,IREFLECT) 
    208214
  • LMDZ5/trunk/libf/phylmd/rrtm/rrtm_rrtm_140gp.intfb.h

    r1990 r2146  
    11INTERFACE
    2 SUBROUTINE RRTM_RRTM_140GP&
     2SUBROUTINE RRTM_RRTM_140GP &
    33 & ( KIDIA , KFDIA , KLON , KLEV,&
    4  & PAER , PAPH , PAP,&
    5  & PTS , PTH , PT,&
     4 & PAER  , PAPH , PAP,&
     5 & PTS   , PTH  , PT,&
    66 & P_ZEMIS , P_ZEMIW,&
    7  & PQ , PCCO2 , POZN,&
     7 & PQ    , PCCO2 , POZN,&
    88 & PCLDF , PTAUCLD,&
    9  & PEMIT , PFLUX , PFLUC, PTCLEAR&
    10  & )
     9 & PTAU_LW,&
     10 & PEMIT , PFLUX , PFLUC, PTCLEAR )
    1111USE PARKIND1 ,ONLY : JPIM ,JPRB
     12USE YOERAD   ,ONLY : NLW !--C.Kleinschmitt
    1213USE PARRRTM , ONLY : JPBAND ,JPXSEC ,JPGPT ,JPLAY ,&
    13  & JPINPX
     14 & JPINPX 
     15!-NLW in clesphys now OB
     16include "clesphys.h"
    1417INTEGER(KIND=JPIM),INTENT(IN) :: KLON
    1518INTEGER(KIND=JPIM),INTENT(IN) :: KLEV
     
    2932REAL(KIND=JPRB) ,INTENT(IN) :: PCLDF(KLON,KLEV)
    3033REAL(KIND=JPRB) ,INTENT(IN) :: PTAUCLD(KLON,KLEV,JPBAND)
     34!--C.Kleinschmitt
     35REAL(KIND=JPRB)   ,INTENT(IN)    :: PTAU_LW(KLON,KLEV,NLW) ! LW Optical depth of aerosols 
     36!--end
    3137REAL(KIND=JPRB) ,INTENT(OUT) :: PEMIT(KLON)
    3238REAL(KIND=JPRB) ,INTENT(OUT) :: PFLUX(KLON,2,KLEV+1)
  • LMDZ5/trunk/libf/phylmd/tracinca_mod.F90

    r1907 r2146  
    2828       nstep,    julien,   gmtime,         lafin,     &
    2929       pdtphys,  t_seri,   paprs,          pplay,     &
    30        pmfu,     ftsol,    pctsrf,        pphis,     &
     30       pmfu,     upwd,     ftsol,  pctsrf, pphis,     &
    3131       pphi,     albsol,   sh,             rh,        &
    3232       cldfra,   rneb,     diafra,         cldliq,    &
     
    8888!Convection:
    8989!----------
    90     REAL,DIMENSION(klon,klev),INTENT(IN) :: pmfu  ! flux de masse dans le panache montant
     90    REAL,DIMENSION(klon,klev),INTENT(IN) :: pmfu  ! flux de masse dans le panache montant - Tiedtke
     91    REAL,DIMENSION(klon,klev),INTENT(IN) :: upwd  ! flux de masse dans le panache montant - Emanuel
    9192
    9293!...Tiedke     
     
    120121    INTEGER :: k
    121122    REAL,DIMENSION(klon,klev) :: pdel
     123    REAL,DIMENSION(klon,klev) :: zpmfu  ! flux de masse dans le panache montant
    122124    REAL    :: calday
    123125    INTEGER :: ncsec
     
    133135    END DO
    134136   
     137    zpmfu(:,:)=pmfu(:,:)
     138
    135139    IF (config_inca == 'aero') THEN
    136140#ifdef INCA
     
    138142            aerosol_couple,tr_seri,pdtphys, &
    139143            pplay,pdel,prfl,pmflxr,psfl,    &
    140             pmflxs,pmfu,itop_con,ibas_con,  &
     144            pmflxs,zpmfu,itop_con,ibas_con,  &
    141145            pphi,airephy,nstep,rneb,t_seri, &     
    142146            rh,tau_aero,piz_aero,cg_aero,   &
     
    144148#endif
    145149    END IF
     150
     151    IF (config_inca == 'aeNP') THEN
     152#ifdef INCA
     153       zpmfu(:,:)=upwd(:,:)
     154       CALL aerosolmainNP(                  &
     155            aerosol_couple,tr_seri,pdtphys, &
     156            pplay,pdel,prfl,pmflxr,psfl,    &
     157            pmflxs,zpmfu,itop_con,ibas_con,  &
     158            pphi,airephy,nstep,rneb,t_seri, &     
     159            rh,lafin)
     160#endif
     161    END IF
     162
    146163
    147164#ifdef INCA
     
    172189         psfl,       & !flxsst
    173190         pmflxs,     & !flxscv
    174          pmfu,       & !flxupd
     191         zpmfu,      & !flxupd   !--now depends on whether AP or NP
    175192         flxmass_w,  & !flxmass_w
    176193         t_seri,     & !tfld
Note: See TracChangeset for help on using the changeset viewer.