Ignore:
Timestamp:
Nov 28, 2014, 4:36:29 PM (10 years ago)
Author:
Laurent Fairhead
Message:

Merged trunk changes -r2070:2158 into testing branch. Compilation problems introduced by revision r2155 have been corrected by hand

Location:
LMDZ5/branches/testing
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • LMDZ5/branches/testing

  • LMDZ5/branches/testing/libf/phylmd/rrtm/readaerosol_optic_rrtm.F90

    r2056 r2160  
    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, &
     220        debut, pplay, paprs, t_seri, sssupco, sssupco_pi, load_tmp5)
     221        CALL readaerosol_interp(id_CSSSM_phy ,itap, pdtphys,rjourvrai, &
     222        debut, pplay, paprs, t_seri, sscoarse,sscoarse_pi, load_tmp6)
     223        CALL readaerosol_interp(id_ASSSM_phy ,itap, pdtphys, rjourvrai, &
     224        debut, pplay, paprs, t_seri, ssacu, ssacu_pi, load_tmp7)
     225        loadss(:)=load_tmp5(:)+load_tmp6(:)+load_tmp7(:)
     226     ELSE
     227        sscoarse(:,:) = 0. ; sscoarse_pi(:,:) = 0.
     228        ssacu(:,:)    = 0. ; ssacu_pi(:,:) = 0.
     229        sssupco(:,:)  = 0. ; sssupco_pi = 0.
     230        loadss=0.
     231     ENDIF
     232
     233     ! Read and interpolate cidustm
     234     IF (flag_aerosol .EQ. 5 .OR.  &
     235          flag_aerosol .EQ. 6 ) THEN
     236
     237        CALL readaerosol_interp(id_CIDUSTM_phy, itap, pdtphys, rjourvrai, debut, pplay, paprs, t_seri, cidust, cidust_pi, loaddust)
     238
     239     ELSE
     240        cidust(:,:) = 0. ; cidust_pi(:,:) = 0.
     241        loaddust=0.
     242     ENDIF
     243     !
     244     sulfcoarse(:,:)      =   0.0 ! CSSO4M (=SO4) + CSMSAM (=MSA)
     245     sulfcoarse_pi(:,:)   =   0.0 ! CSSO4M (=SO4) + CSMSAM (=MSA) pre-ind
     246     !
     247     !--placeholder for offline nitrate   
     248     !
     249     nitracc(:,:)         =   0.0
     250     nitracc_pi(:,:)      =   0.0
     251     nitrcoarse(:,:)      =   0.0
     252     nitrcoarse_pi(:,:)   =   0.0
     253     nitrinscoarse(:,:)   =   0.0
     254     nitrinscoarse_pi(:,:)=   0.0
     255
     256  ENDIF !--not aerosol_couple
     257
     258  !
     259  ! Store all aerosols in one variable
     260  !
     261  m_allaer(:,:,id_ASBCM_phy)  = bcsol(:,:)        ! ASBCM
     262  m_allaer(:,:,id_ASPOMM_phy) = pomsol(:,:)       ! ASPOMM
     263  m_allaer(:,:,id_ASSO4M_phy) = sulfacc(:,:)      ! ASSO4M (= SO4)
     264  m_allaer(:,:,id_CSSO4M_phy) = sulfcoarse(:,:)   ! CSSO4M
     265  m_allaer(:,:,id_SSSSM_phy)  = sssupco(:,:)      ! SSSSM
     266  m_allaer(:,:,id_CSSSM_phy)  = sscoarse(:,:)     ! CSSSM
     267  m_allaer(:,:,id_ASSSM_phy)  = ssacu(:,:)        ! ASSSM
     268  m_allaer(:,:,id_CIDUSTM_phy)= cidust(:,:)       ! CIDUSTM
     269  m_allaer(:,:,id_AIBCM_phy)  = bcins(:,:)        ! AIBCM
     270  m_allaer(:,:,id_ASNO3M_phy) = nitracc(:,:)      ! ASNO3M
     271  m_allaer(:,:,id_CSNO3M_phy) = nitrcoarse(:,:)   ! CSNO3M
     272  m_allaer(:,:,id_CINO3M_phy) = nitrinscoarse(:,:)! CINO3M
     273  m_allaer(:,:,id_AIPOMM_phy) = pomins(:,:)       ! AIPOMM
     274  m_allaer(:,:,id_STRAT_phy)  = 0.0
     275
     276  !RAF
     277  m_allaer_pi(:,:,id_ASBCM_phy)  = bcsol_pi(:,:)        ! ASBCM pre-ind
     278  m_allaer_pi(:,:,id_ASPOMM_phy) = pomsol_pi(:,:)       ! ASPOMM pre-ind
     279  m_allaer_pi(:,:,id_ASSO4M_phy) = sulfacc_pi(:,:)      ! ASSO4M (= SO4) pre-ind
     280  m_allaer_pi(:,:,id_CSSO4M_phy) = sulfcoarse_pi(:,:)   ! CSSO4M pre-ind
     281  m_allaer_pi(:,:,id_SSSSM_phy)  = sssupco_pi(:,:)      ! SSSSM pre-ind
     282  m_allaer_pi(:,:,id_CSSSM_phy)  = sscoarse_pi(:,:)     ! CSSSM pre-ind
     283  m_allaer_pi(:,:,id_ASSSM_phy)  = ssacu_pi(:,:)        ! ASSSM pre-ind
     284  m_allaer_pi(:,:,id_CIDUSTM_phy)= cidust_pi(:,:)       ! CIDUSTM pre-ind
     285  m_allaer_pi(:,:,id_AIBCM_phy)  = bcins_pi(:,:)        ! AIBCM pre-ind
     286  m_allaer_pi(:,:,id_ASNO3M_phy) = nitracc_pi(:,:)      ! ASNO3M pre-ind
     287  m_allaer_pi(:,:,id_CSNO3M_phy) = nitrcoarse_pi(:,:)   ! CSNO3M pre-ind
     288  m_allaer_pi(:,:,id_CINO3M_phy) = nitrinscoarse_pi(:,:)! CINO3M pre-ind
     289  m_allaer_pi(:,:,id_AIPOMM_phy) = pomins_pi(:,:)       ! AIPOMM pre-ind
     290  m_allaer_pi(:,:,id_STRAT_phy)  = 0.0
     291
     292  !
     293  ! Calculate the total mass of all soluble aersosols
     294  ! to be revisited for AR6
     295  mass_solu_aero(:,:)    = sulfacc(:,:)    + bcsol(:,:)    + pomsol(:,:)   + nitracc(:,:)   ! + &
     296  !                           sscoarse(:,:)    + ssacu(:,:)    + sssupco(:,:)
     297  mass_solu_aero_pi(:,:) = sulfacc_pi(:,:) + bcsol_pi(:,:) + pomsol_pi(:,:) + nitracc_pi(:,:) ! + &
     298  !                           sscoarse_pi(:,:) + ssacu_pi(:,:) + sssupco_pi(:,:)
     299
     300  !****************************************************************************************
     301  ! 2) Calculate optical properties for the aerosols
     302  !
     303  !****************************************************************************************
    184304  DO k = 1, klev
    185305     DO i = 1, klon
     
    188308  END DO
    189309
     310  ! aeropt_6bands for rrtm
    190311  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
     312       pdel, m_allaer, pdtphys, rhcl, &
     313       tau_aero, piz_aero, cg_aero,   &
     314       m_allaer_pi, flag_aerosol, &
     315       zrho )
     316
     317  ! aeropt_5wv only for validation and diagnostics
     318  CALL aeropt_5wv_rrtm(                    &
     319       pdel, m_allaer,                &
     320       pdtphys, rhcl, aerindex,       &
     321       flag_aerosol, pplay, t_seri,   &
     322       tausum_aero, tau3d_aero )
     323
     324  ! Diagnostics calculation for CMIP5 protocol
     325  sconcso4(:)  =m_allaer(:,1,id_ASSO4M_phy)*1.e-9
     326  sconcno3(:)  =(m_allaer(:,1,id_ASNO3M_phy)+m_allaer(:,1,id_CSNO3M_phy)+m_allaer(:,1,id_CINO3M_phy))*1.e-9
     327  sconcoa(:)   =(m_allaer(:,1,id_ASPOMM_phy)+m_allaer(:,1,id_AIPOMM_phy))*1.e-9
     328  sconcbc(:)   =(m_allaer(:,1,id_ASBCM_phy)+m_allaer(:,1,id_AIBCM_phy))*1.e-9
     329  sconcss(:)   =(m_allaer(:,1,id_ASSSM_phy)+m_allaer(:,1,id_CSSSM_phy)+m_allaer(:,1,id_SSSSM_phy))*1.e-9
     330  sconcdust(:) =m_allaer(:,1,id_CIDUSTM_phy)*1.e-9
     331  concso4(:,:) =m_allaer(:,:,id_ASSO4M_phy)*1.e-9
     332  concno3(:,:) =(m_allaer(:,:,id_ASNO3M_phy)+m_allaer(:,:,id_CSNO3M_phy)+m_allaer(:,:,id_CINO3M_phy))*1.e-9
     333  concoa(:,:)  =(m_allaer(:,:,id_ASPOMM_phy)+m_allaer(:,:,id_AIPOMM_phy))*1.e-9
     334  concbc(:,:)  =(m_allaer(:,:,id_ASBCM_phy)+m_allaer(:,:,id_AIBCM_phy))*1.e-9
     335  concss(:,:)  =(m_allaer(:,:,id_ASSSM_phy)+m_allaer(:,:,id_CSSSM_phy)+m_allaer(:,:,id_SSSSM_phy))*1.e-9
     336  concdust(:,:)=m_allaer(:,:,id_CIDUSTM_phy)*1.e-9
    214337
    215338END SUBROUTINE readaerosol_optic_rrtm
Note: See TracChangeset for help on using the changeset viewer.