GCC Code Coverage Report
Directory: ./ Exec Total Coverage
File: phylmd/rrtm/readaerosol_optic_rrtm.F90 Lines: 0 173 0.0 %
Date: 2023-06-30 12:51:15 Branches: 0 436 0.0 %

Line Branch Exec Source
1
! $Id: readaerosol_optic_rrtm.F90 4124 2022-04-08 14:47:04Z dcugnet $
2
!
3
SUBROUTINE readaerosol_optic_rrtm(debut, aerosol_couple, ok_alw, ok_volcan, &
4
     flag_aerosol, flag_bc_internal_mixture, itap, rjourvrai, &
5
     pdtphys, pplay, paprs, t_seri, rhcl, presnivs, &
6
     tr_seri, mass_solu_aero, mass_solu_aero_pi, &
7
     tau_aero, piz_aero, cg_aero, &
8
     tausum_aero, drytausum_aero, tau3d_aero )
9
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
15
  USE dimphy
16
  USE aero_mod
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
       loadno3,load_tmp1,load_tmp2,load_tmp3,load_tmp4,load_tmp5,load_tmp6,load_tmp7, &
20
       load_tmp8,load_tmp9,load_tmp10
21
22
  USE infotrac_phy, ONLY: tracers, nqtot, nbtr
23
  USE YOMCST
24
25
  IMPLICIT NONE
26
27
  include "clesphys.h"
28
29
  ! Input arguments
30
  !****************************************************************************************
31
  LOGICAL, INTENT(IN)                      :: debut
32
  LOGICAL, INTENT(IN)                      :: aerosol_couple
33
  LOGICAL, INTENT(IN)                      :: ok_alw
34
  LOGICAL, INTENT(IN)                      :: ok_volcan
35
  INTEGER, INTENT(IN)                      :: flag_aerosol
36
  LOGICAL, INTENT(IN)                      :: flag_bc_internal_mixture
37
  INTEGER, INTENT(IN)                      :: itap
38
  REAL, INTENT(IN)                         :: rjourvrai
39
  REAL, INTENT(IN)                         :: pdtphys
40
  REAL, DIMENSION(klon,klev), INTENT(IN)   :: pplay
41
  REAL, DIMENSION(klon,klev+1), INTENT(IN) :: paprs
42
  REAL, DIMENSION(klon,klev), INTENT(IN)   :: t_seri
43
  REAL, DIMENSION(klon,klev), INTENT(IN)   :: rhcl   ! humidite relative ciel clair
44
  REAL, DIMENSION(klev), INTENT(IN)        :: presnivs
45
  REAL, DIMENSION(klon,klev,nbtr), INTENT(IN) :: tr_seri ! concentration tracer
46
47
  ! Output arguments
48
  !****************************************************************************************
49
  REAL, DIMENSION(klon,klev), INTENT(OUT)     :: mass_solu_aero    ! Total mass for all soluble aerosols
50
  REAL, DIMENSION(klon,klev), INTENT(OUT)     :: mass_solu_aero_pi !     -"-     preindustrial values
51
  REAL, DIMENSION(klon,klev,2,NSW), INTENT(OUT) :: tau_aero    ! Aerosol optical thickness
52
  REAL, DIMENSION(klon,klev,2,NSW), INTENT(OUT) :: piz_aero    ! Single scattering albedo aerosol
53
  REAL, DIMENSION(klon,klev,2,NSW), INTENT(OUT) :: cg_aero     ! asymmetry parameter aerosol
54
  REAL, DIMENSION(klon,nwave,naero_tot), INTENT(OUT)       :: tausum_aero
55
  REAL, DIMENSION(klon,naero_tot), INTENT(OUT)             :: drytausum_aero
56
  REAL, DIMENSION(klon,klev,nwave,naero_tot), INTENT(OUT)  :: tau3d_aero
57
58
  ! Local variables
59
  !****************************************************************************************
60
  REAL, DIMENSION(klon)        :: aerindex      ! POLDER aerosol index
61
  REAL, DIMENSION(klon,klev)   :: sulfacc       ! SO4 accumulation concentration [ug/m3]
62
  REAL, DIMENSION(klon,klev)   :: sulfcoarse    ! SO4 coarse concentration [ug/m3]
63
  REAL, DIMENSION(klon,klev)   :: bcsol         ! BC soluble concentration [ug/m3]
64
  REAL, DIMENSION(klon,klev)   :: bcins         ! BC insoluble concentration [ug/m3]
65
  REAL, DIMENSION(klon,klev)   :: pomsol        ! POM soluble concentration [ug/m3]
66
  REAL, DIMENSION(klon,klev)   :: pomins        ! POM insoluble concentration [ug/m3]
67
  REAL, DIMENSION(klon,klev)   :: cidust        ! DUST aerosol concentration  [ug/m3]
68
  REAL, DIMENSION(klon,klev)   :: sscoarse      ! SS Coarse concentration [ug/m3]
69
  REAL, DIMENSION(klon,klev)   :: sssupco       ! SS Super Coarse concentration [ug/m3]
70
  REAL, DIMENSION(klon,klev)   :: ssacu         ! SS Acumulation concentration [ug/m3]
71
  REAL, DIMENSION(klon,klev)   :: nitracc       ! nitrate accumulation concentration [ug/m3]
72
  REAL, DIMENSION(klon,klev)   :: nitrcoarse    ! nitrate coarse concentration [ug/m3]
73
  REAL, DIMENSION(klon,klev)   :: nitrinscoarse ! nitrate insoluble coarse concentration [ug/m3]
74
  REAL, DIMENSION(klon,klev)   :: sulfacc_pi
75
  REAL, DIMENSION(klon,klev)   :: sulfcoarse_pi
76
  REAL, DIMENSION(klon,klev)   :: bcsol_pi
77
  REAL, DIMENSION(klon,klev)   :: bcins_pi
78
  REAL, DIMENSION(klon,klev)   :: pomsol_pi
79
  REAL, DIMENSION(klon,klev)   :: pomins_pi
80
  REAL, DIMENSION(klon,klev)   :: cidust_pi
81
  REAL, DIMENSION(klon,klev)   :: sscoarse_pi
82
  REAL, DIMENSION(klon,klev)   :: sssupco_pi
83
  REAL, DIMENSION(klon,klev)   :: ssacu_pi
84
  REAL, DIMENSION(klon,klev)   :: nitracc_pi
85
  REAL, DIMENSION(klon,klev)   :: nitrcoarse_pi
86
  REAL, DIMENSION(klon,klev)   :: nitrinscoarse_pi
87
  REAL, DIMENSION(klon,klev)   :: pdel, zrho
88
  REAL, DIMENSION(klon,klev,naero_tot) :: m_allaer
89
  REAL, DIMENSION(klon,klev,naero_tot) :: m_allaer_pi !RAF
90
91
  integer :: id_ASBCM, id_ASPOMM, id_ASSO4M, id_ASMSAM, id_CSSO4M, id_CSMSAM, id_SSSSM
92
  integer :: id_CSSSM, id_ASSSM, id_CIDUSTM, id_AIBCM, id_AIPOMM, id_ASNO3M, id_CSNO3M, id_CINO3M
93
  INTEGER :: k, i, iq, itr
94
95
  !--air density
96
  zrho(:,:)=pplay(:,:)/t_seri(:,:)/RD                     !--kg/m3
97
98
  !****************************************************************************************
99
  ! 1) Get aerosol mass
100
  !
101
  !****************************************************************************************
102
  !
103
  !
104
  IF (aerosol_couple) THEN   !--we get aerosols from tr_seri array from INCA
105
     !
106
     !--copy fields from INCA tr_seri
107
     !--convert to ug m-3 unit for consistency with offline fields
108
     !
109
     itr = 0
110
     DO iq = 1,nqtot
111
        IF(.NOT. tracers(iq)%isInPhysics) CYCLE
112
        itr = itr+1
113
        SELECT CASE(trim(tracers(iq)%name))
114
           CASE ("ASBCM");  id_ASBCM  = itr
115
           CASE ("ASPOMM"); id_ASPOMM = itr
116
           CASE ("ASSO4M"); id_ASSO4M = itr
117
           CASE ("ASMSAM"); id_ASMSAM = itr
118
           CASE ("CSSO4M"); id_CSSO4M = itr
119
           CASE ("CSMSAM"); id_CSMSAM = itr
120
           CASE ("SSSSM");  id_SSSSM  = itr
121
           CASE ("CSSSM");  id_CSSSM  = itr
122
           CASE ("ASSSM");  id_ASSSM  = itr
123
           CASE ("CIDUSTM");id_CIDUSTM= itr
124
           CASE ("AIBCM");  id_AIBCM  = itr
125
           CASE ("AIPOMM"); id_AIPOMM = itr
126
           CASE ("ASNO3M"); id_ASNO3M = itr
127
           CASE ("CSNO3M"); id_CSNO3M = itr
128
           CASE ("CINO3M"); id_CINO3M = itr
129
        END SELECT
130
     END DO
131
132
     bcsol(:,:)        =   tr_seri(:,:,id_ASBCM)                         *zrho(:,:)*1.e9  ! ASBCM
133
     pomsol(:,:)       =   tr_seri(:,:,id_ASPOMM)                        *zrho(:,:)*1.e9  ! ASPOMM
134
     sulfacc(:,:)      =  (tr_seri(:,:,id_ASSO4M)+tr_seri(:,:,id_ASMSAM))*zrho(:,:)*1.e9  ! ASSO4M (=SO4) + ASMSAM (=MSA)
135
     sulfcoarse(:,:)   =  (tr_seri(:,:,id_CSSO4M)+tr_seri(:,:,id_CSMSAM))*zrho(:,:)*1.e9  ! CSSO4M (=SO4) + CSMSAM (=MSA)
136
     sssupco(:,:)      =   tr_seri(:,:,id_SSSSM)                         *zrho(:,:)*1.e9  ! SSSSM
137
     sscoarse(:,:)     =   tr_seri(:,:,id_CSSSM)                         *zrho(:,:)*1.e9  ! CSSSM
138
     ssacu(:,:)        =   tr_seri(:,:,id_ASSSM)                         *zrho(:,:)*1.e9  ! ASSSM
139
     cidust(:,:)       =   tr_seri(:,:,id_CIDUSTM)                       *zrho(:,:)*1.e9  ! CIDUSTM
140
     bcins(:,:)        =   tr_seri(:,:,id_AIBCM)                         *zrho(:,:)*1.e9  ! AIBCM
141
     pomins(:,:)       =   tr_seri(:,:,id_AIPOMM)                        *zrho(:,:)*1.e9  ! AIPOMM
142
     nitracc(:,:)      =   tr_seri(:,:,id_ASNO3M)                        *zrho(:,:)*1.e9  ! ASNO3M
143
     nitrcoarse(:,:)   =   tr_seri(:,:,id_CSNO3M)                        *zrho(:,:)*1.e9  ! CSNO3M
144
     nitrinscoarse(:,:)=   tr_seri(:,:,id_CINO3M)                        *zrho(:,:)*1.e9  ! CINO3M
145
     !
146
     bcsol_pi(:,:)        =   0.0 ! ASBCM pre-ind
147
     pomsol_pi(:,:)       =   0.0 ! ASPOMM pre-ind
148
     sulfacc_pi(:,:)      =   0.0 ! ASSO4M (=SO4) + ASMSAM (=MSA) pre-ind
149
     sulfcoarse_pi(:,:)   =   0.0 ! CSSO4M (=SO4) + CSMSAM (=MSA) pre-ind
150
     sssupco_pi(:,:)      =   0.0 ! SSSSM pre-ind
151
     sscoarse_pi(:,:)     =   0.0 ! CSSSM pre-ind
152
     ssacu_pi(:,:)        =   0.0 ! ASSSM pre-ind
153
     cidust_pi(:,:)       =   0.0 ! CIDUSTM pre-ind
154
     bcins_pi(:,:)        =   0.0 ! AIBCM pre-ind
155
     pomins_pi(:,:)       =   0.0 ! AIPOMM pre-ind
156
     nitracc_pi(:,:)      =   0.0 ! ASNO3M pre-ind
157
     nitrcoarse_pi(:,:)   =   0.0 ! CSNO3M pre-ind
158
     nitrinscoarse_pi(:,:)=   0.0 ! CINO3M
159
     !
160
  ELSE !--not aerosol_couple
161
     !
162
     ! Read and interpolate sulfate
163
     IF ( flag_aerosol .EQ. 1 .OR. flag_aerosol .EQ. 6 .OR. flag_aerosol .EQ. 7 ) THEN
164
165
        CALL readaerosol_interp(id_ASSO4M_phy, itap, pdtphys, rjourvrai, debut, pplay, paprs, t_seri, sulfacc, sulfacc_pi,loadso4)
166
     ELSE
167
        sulfacc(:,:) = 0. ; sulfacc_pi(:,:) = 0.
168
        loadso4=0.
169
     ENDIF
170
171
     ! Read and interpolate bcsol and bcins
172
     IF ( flag_aerosol .EQ. 2 .OR. flag_aerosol .EQ. 6 .OR. flag_aerosol .EQ. 7 ) THEN
173
174
        ! Get bc aerosol distribution
175
        CALL readaerosol_interp(id_ASBCM_phy, itap, pdtphys, rjourvrai, debut, pplay, paprs, t_seri, bcsol, bcsol_pi, load_tmp1 )
176
        CALL readaerosol_interp(id_AIBCM_phy, itap, pdtphys, rjourvrai, debut, pplay, paprs, t_seri, bcins, bcins_pi, load_tmp2 )
177
        loadbc(:)=load_tmp1(:)+load_tmp2(:)
178
     ELSE
179
        bcsol(:,:) = 0. ; bcsol_pi(:,:) = 0.
180
        bcins(:,:) = 0. ; bcins_pi(:,:) = 0.
181
        loadbc=0.
182
     ENDIF
183
184
     ! Read and interpolate pomsol and pomins
185
     IF ( flag_aerosol .EQ. 3 .OR. flag_aerosol .EQ. 6 .OR. flag_aerosol .EQ. 7 ) THEN
186
187
        CALL readaerosol_interp(id_ASPOMM_phy, itap, pdtphys, rjourvrai, debut, pplay, paprs, t_seri, pomsol, pomsol_pi, load_tmp3)
188
        CALL readaerosol_interp(id_AIPOMM_phy, itap, pdtphys, rjourvrai, debut, pplay, paprs, t_seri, pomins, pomins_pi, load_tmp4)
189
        loadoa(:)=load_tmp3(:)+load_tmp4(:)
190
     ELSE
191
        pomsol(:,:) = 0. ; pomsol_pi(:,:) = 0.
192
        pomins(:,:) = 0. ; pomins_pi(:,:) = 0.
193
        loadoa=0.
194
     ENDIF
195
196
     ! Read and interpolate csssm, ssssm, assssm
197
     IF (flag_aerosol .EQ. 4 .OR. flag_aerosol .EQ. 6 .OR. flag_aerosol .EQ. 7 ) THEN
198
199
        CALL readaerosol_interp(id_SSSSM_phy ,itap, pdtphys,rjourvrai, &
200
        debut, pplay, paprs, t_seri, sssupco, sssupco_pi, load_tmp5)
201
        CALL readaerosol_interp(id_CSSSM_phy ,itap, pdtphys,rjourvrai, &
202
        debut, pplay, paprs, t_seri, sscoarse,sscoarse_pi, load_tmp6)
203
        CALL readaerosol_interp(id_ASSSM_phy ,itap, pdtphys,rjourvrai, &
204
        debut, pplay, paprs, t_seri, ssacu, ssacu_pi, load_tmp7)
205
        loadss(:)=load_tmp5(:)+load_tmp6(:)+load_tmp7(:)
206
     ELSE
207
        sscoarse(:,:) = 0. ; sscoarse_pi(:,:) = 0.
208
        ssacu(:,:)    = 0. ; ssacu_pi(:,:) = 0.
209
        sssupco(:,:)  = 0. ; sssupco_pi = 0.
210
        loadss=0.
211
     ENDIF
212
213
     ! Read and interpolate cidustm
214
     IF (flag_aerosol .EQ. 5 .OR. flag_aerosol .EQ. 6 .OR. flag_aerosol .EQ. 7 ) THEN
215
216
        CALL readaerosol_interp(id_CIDUSTM_phy, itap, pdtphys, rjourvrai, debut, pplay, paprs, t_seri, cidust, cidust_pi, loaddust)
217
218
     ELSE
219
        cidust(:,:) = 0. ; cidust_pi(:,:) = 0.
220
        loaddust=0.
221
     ENDIF
222
     !
223
     ! Read and interpolate asno3m, csno3m, cino3m
224
     IF (flag_aerosol .EQ. 6 .OR. flag_aerosol .EQ. 7 ) THEN
225
226
        CALL readaerosol_interp(id_ASNO3M_phy, itap, pdtphys, rjourvrai, &
227
        debut, pplay, paprs, t_seri, nitracc, nitracc_pi, load_tmp8)
228
        CALL readaerosol_interp(id_CSNO3M_phy, itap, pdtphys, rjourvrai, &
229
        debut, pplay, paprs, t_seri, nitrcoarse, nitrcoarse_pi, load_tmp9)
230
        CALL readaerosol_interp(id_CINO3M_phy, itap, pdtphys, rjourvrai, &
231
        debut, pplay, paprs, t_seri, nitrinscoarse, nitrinscoarse_pi, load_tmp10)
232
        loadno3(:)=load_tmp8(:)+load_tmp9(:)+load_tmp10(:)
233
234
     ELSE
235
        nitracc(:,:)         =   0.0 ; nitracc_pi(:,:)      =   0.0
236
        nitrcoarse(:,:)      =   0.0 ; nitrcoarse_pi(:,:)   =   0.0
237
        nitrinscoarse(:,:)   =   0.0 ; nitrinscoarse_pi(:,:)=   0.0
238
        loadno3(:)=0.0
239
     ENDIF
240
     !
241
     ! CSSO4M is set to 0 as not reliable
242
     sulfcoarse(:,:)      =   0.0 ! CSSO4M (=SO4) + CSMSAM (=MSA)
243
     sulfcoarse_pi(:,:)   =   0.0 ! CSSO4M (=SO4) + CSMSAM (=MSA) pre-ind
244
245
  ENDIF !--not aerosol_couple
246
247
  !
248
  ! Store all aerosols in one variable
249
  !
250
  m_allaer(:,:,id_ASBCM_phy)  = bcsol(:,:)        ! ASBCM
251
  m_allaer(:,:,id_ASPOMM_phy) = pomsol(:,:)       ! ASPOMM
252
  m_allaer(:,:,id_ASSO4M_phy) = sulfacc(:,:)      ! ASSO4M (= SO4)
253
  m_allaer(:,:,id_CSSO4M_phy) = sulfcoarse(:,:)   ! CSSO4M
254
  m_allaer(:,:,id_SSSSM_phy)  = sssupco(:,:)      ! SSSSM
255
  m_allaer(:,:,id_CSSSM_phy)  = sscoarse(:,:)     ! CSSSM
256
  m_allaer(:,:,id_ASSSM_phy)  = ssacu(:,:)        ! ASSSM
257
  m_allaer(:,:,id_CIDUSTM_phy)= cidust(:,:)       ! CIDUSTM
258
  m_allaer(:,:,id_AIBCM_phy)  = bcins(:,:)        ! AIBCM
259
  m_allaer(:,:,id_ASNO3M_phy) = nitracc(:,:)      ! ASNO3M
260
  m_allaer(:,:,id_CSNO3M_phy) = nitrcoarse(:,:)   ! CSNO3M
261
  m_allaer(:,:,id_CINO3M_phy) = nitrinscoarse(:,:)! CINO3M
262
  m_allaer(:,:,id_AIPOMM_phy) = pomins(:,:)       ! AIPOMM
263
  m_allaer(:,:,id_STRAT_phy)  = 0.0
264
265
  !RAF
266
  m_allaer_pi(:,:,id_ASBCM_phy)  = bcsol_pi(:,:)        ! ASBCM pre-ind
267
  m_allaer_pi(:,:,id_ASPOMM_phy) = pomsol_pi(:,:)       ! ASPOMM pre-ind
268
  m_allaer_pi(:,:,id_ASSO4M_phy) = sulfacc_pi(:,:)      ! ASSO4M (= SO4) pre-ind
269
  m_allaer_pi(:,:,id_CSSO4M_phy) = sulfcoarse_pi(:,:)   ! CSSO4M pre-ind
270
  m_allaer_pi(:,:,id_SSSSM_phy)  = sssupco_pi(:,:)      ! SSSSM pre-ind
271
  m_allaer_pi(:,:,id_CSSSM_phy)  = sscoarse_pi(:,:)     ! CSSSM pre-ind
272
  m_allaer_pi(:,:,id_ASSSM_phy)  = ssacu_pi(:,:)        ! ASSSM pre-ind
273
  m_allaer_pi(:,:,id_CIDUSTM_phy)= cidust_pi(:,:)       ! CIDUSTM pre-ind
274
  m_allaer_pi(:,:,id_AIBCM_phy)  = bcins_pi(:,:)        ! AIBCM pre-ind
275
  m_allaer_pi(:,:,id_ASNO3M_phy) = nitracc_pi(:,:)      ! ASNO3M pre-ind
276
  m_allaer_pi(:,:,id_CSNO3M_phy) = nitrcoarse_pi(:,:)   ! CSNO3M pre-ind
277
  m_allaer_pi(:,:,id_CINO3M_phy) = nitrinscoarse_pi(:,:)! CINO3M pre-ind
278
  m_allaer_pi(:,:,id_AIPOMM_phy) = pomins_pi(:,:)       ! AIPOMM pre-ind
279
  m_allaer_pi(:,:,id_STRAT_phy)  = 0.0
280
281
  !
282
  ! Calculate the total mass of all soluble aersosols
283
  ! to be revisited for AR6
284
  mass_solu_aero(:,:)    = sulfacc(:,:)    + bcsol(:,:)    + pomsol(:,:)    + nitracc(:,:)    + ssacu(:,:)
285
  mass_solu_aero_pi(:,:) = sulfacc_pi(:,:) + bcsol_pi(:,:) + pomsol_pi(:,:) + nitracc_pi(:,:) + ssacu_pi(:,:)
286
287
  !****************************************************************************************
288
  ! 2) Calculate optical properties for the aerosols
289
  !
290
  !****************************************************************************************
291
  DO k = 1, klev
292
     DO i = 1, klon
293
        pdel(i,k) = paprs(i,k) - paprs (i,k+1)
294
     ENDDO
295
  ENDDO
296
297
!--new aerosol properties
298
  ! aeropt_6bands for rrtm
299
  CALL aeropt_6bands_rrtm(          &
300
       pdel, m_allaer, rhcl,        &
301
       tau_aero, piz_aero, cg_aero, &
302
       m_allaer_pi, flag_aerosol,   &
303
       flag_bc_internal_mixture, zrho, ok_volcan )
304
305
  ! aeropt_5wv only for validation and diagnostics
306
  CALL aeropt_5wv_rrtm(              &
307
       pdel, m_allaer,               &
308
       rhcl, aerindex,               &
309
       flag_aerosol,                 &
310
       flag_bc_internal_mixture,     &
311
       pplay, t_seri,                &
312
       tausum_aero, drytausum_aero, tau3d_aero )
313
314
  !--call LW optical properties for tropospheric aerosols
315
  CALL aeropt_lw_rrtm(ok_alw, pdel, zrho, flag_aerosol, m_allaer, m_allaer_pi)
316
317
  ! Diagnostics calculation for CMIP5 protocol
318
  sconcso4(:)  =m_allaer(:,1,id_ASSO4M_phy)*1.e-9
319
  sconcno3(:)  =(m_allaer(:,1,id_ASNO3M_phy)+m_allaer(:,1,id_CSNO3M_phy)+m_allaer(:,1,id_CINO3M_phy))*1.e-9
320
  sconcoa(:)   =(m_allaer(:,1,id_ASPOMM_phy)+m_allaer(:,1,id_AIPOMM_phy))*1.e-9
321
  sconcbc(:)   =(m_allaer(:,1,id_ASBCM_phy)+m_allaer(:,1,id_AIBCM_phy))*1.e-9
322
  sconcss(:)   =(m_allaer(:,1,id_ASSSM_phy)+m_allaer(:,1,id_CSSSM_phy)+m_allaer(:,1,id_SSSSM_phy))*1.e-9
323
  sconcdust(:) =m_allaer(:,1,id_CIDUSTM_phy)*1.e-9
324
  concso4(:,:) =m_allaer(:,:,id_ASSO4M_phy)*1.e-9
325
  concno3(:,:) =(m_allaer(:,:,id_ASNO3M_phy)+m_allaer(:,:,id_CSNO3M_phy)+m_allaer(:,:,id_CINO3M_phy))*1.e-9
326
  concoa(:,:)  =(m_allaer(:,:,id_ASPOMM_phy)+m_allaer(:,:,id_AIPOMM_phy))*1.e-9
327
  concbc(:,:)  =(m_allaer(:,:,id_ASBCM_phy)+m_allaer(:,:,id_AIBCM_phy))*1.e-9
328
  concss(:,:)  =(m_allaer(:,:,id_ASSSM_phy)+m_allaer(:,:,id_CSSSM_phy)+m_allaer(:,:,id_SSSSM_phy))*1.e-9
329
  concdust(:,:)=m_allaer(:,:,id_CIDUSTM_phy)*1.e-9
330
331
END SUBROUTINE readaerosol_optic_rrtm