| 1 | SUBROUTINE AEROPT_2BANDS( & |
|---|
| 2 | pdel, m_allaer, delt, RHcl, & |
|---|
| 3 | tau_allaer, piz_allaer, & |
|---|
| 4 | cg_allaer, fractnat_allaer, & |
|---|
| 5 | flag_aerosol, pplay, t_seri) |
|---|
| 6 | |
|---|
| 7 | USE dimphy |
|---|
| 8 | |
|---|
| 9 | |
|---|
| 10 | ! Yves Balkanski le 12 avril 2006 |
|---|
| 11 | ! Celine Deandreis |
|---|
| 12 | ! Anne Cozic Avril 2009 |
|---|
| 13 | ! a partir d'une sous-routine de Johannes Quaas pour les sulfates |
|---|
| 14 | ! |
|---|
| 15 | IMPLICIT NONE |
|---|
| 16 | |
|---|
| 17 | INCLUDE "YOMCST.h" |
|---|
| 18 | INCLUDE "iniprint.h" |
|---|
| 19 | |
|---|
| 20 | ! |
|---|
| 21 | ! Input arguments: |
|---|
| 22 | ! |
|---|
| 23 | REAL, INTENT(in) :: pdel(KLON,KLEV) |
|---|
| 24 | REAL, INTENT(in) :: delt |
|---|
| 25 | REAL, DIMENSION(klon,klev,8), INTENT(in) :: m_allaer |
|---|
| 26 | REAL, INTENT(in) :: RHcl(KLON,KLEV) ! humidite relative ciel clair |
|---|
| 27 | REAL, DIMENSION(klon,10), INTENT(in) :: fractnat_allaer |
|---|
| 28 | INTEGER, INTENT(in) :: flag_aerosol |
|---|
| 29 | REAL, INTENT(in) :: pplay(klon,klev) |
|---|
| 30 | REAL, INTENT(in) :: t_seri(klon,klev) |
|---|
| 31 | |
|---|
| 32 | ! |
|---|
| 33 | ! Output arguments: |
|---|
| 34 | ! |
|---|
| 35 | REAL, DIMENSION(klon,klev,9,2), INTENT(out) :: tau_allaer ! epaisseur optique aerosol |
|---|
| 36 | REAL, DIMENSION(klon,klev,9,2), INTENT(out) :: piz_allaer ! single scattering albedo aerosol |
|---|
| 37 | REAL, DIMENSION(klon,klev,9,2), INTENT(out) :: cg_allaer ! asymmetry parameter aerosol |
|---|
| 38 | |
|---|
| 39 | ! |
|---|
| 40 | ! Local |
|---|
| 41 | ! |
|---|
| 42 | REAL, DIMENSION(klon,klev,10,2) :: tau_ae |
|---|
| 43 | REAL, DIMENSION(klon,klev,10,2) :: piz_ae |
|---|
| 44 | REAL, DIMENSION(klon,klev,10,2) :: cg_ae |
|---|
| 45 | LOGICAL :: soluble |
|---|
| 46 | INTEGER :: i, k, inu, m, mrfspecies |
|---|
| 47 | INTEGER :: spsol, spinsol |
|---|
| 48 | INTEGER :: RH_num, nbre_RH, nbsol_compaer, nbinsol_compaer |
|---|
| 49 | |
|---|
| 50 | PARAMETER (nbre_RH=12) |
|---|
| 51 | PARAMETER (nbsol_compaer=5) ! 1- Seasalt AS: 2- Sesalt CS; 3- BC soluble; 4- POM soluble; 5- SO4. |
|---|
| 52 | PARAMETER (nbinsol_compaer=3) ! 1- Dust; 2- BC insoluble; 3- POM insoluble |
|---|
| 53 | REAL:: RH_tab(nbre_RH) |
|---|
| 54 | REAL:: RH_MAX, DELTA, rh |
|---|
| 55 | REAL:: tau_ae2b_int(KLON,KLEV,2) ! Intermediate computation of epaisseur optique aerosol |
|---|
| 56 | REAL:: piz_ae2b_int(KLON,KLEV,2) ! Intermediate computation of Single scattering albedo |
|---|
| 57 | REAL:: cg_ae2b_int(KLON,KLEV,2) ! Intermediate computation of Assymetry parameter |
|---|
| 58 | PARAMETER (RH_MAX=95.) |
|---|
| 59 | DATA RH_tab/0.,10.,20.,30.,40.,50.,60.,70.,80.,85.,90.,95./ |
|---|
| 60 | REAL :: zrho |
|---|
| 61 | REAL :: fac |
|---|
| 62 | REAL :: zdp1(klon,klev) |
|---|
| 63 | REAL, PARAMETER :: gravit = 9.80616 ! m2/s |
|---|
| 64 | INTEGER, ALLOCATABLE, DIMENSION(:) :: aerosol_name |
|---|
| 65 | INTEGER, PARAMETER :: id_SSSSM = 1 |
|---|
| 66 | INTEGER, PARAMETER :: id_CSSSM = 2 |
|---|
| 67 | INTEGER, PARAMETER :: id_ASSSM = 3 |
|---|
| 68 | INTEGER, PARAMETER :: id_ASBCM = 4 |
|---|
| 69 | INTEGER, PARAMETER :: id_ASPOMM = 5 |
|---|
| 70 | INTEGER, PARAMETER :: id_ASSO4M = 6 |
|---|
| 71 | INTEGER, PARAMETER :: id_CSSO4M = 7 |
|---|
| 72 | INTEGER, PARAMETER :: id_CIDUSTM = 8 |
|---|
| 73 | INTEGER, PARAMETER :: id_AIBCM = 9 |
|---|
| 74 | INTEGER, PARAMETER :: id_AIPOMM = 10 |
|---|
| 75 | INTEGER :: nb_aer |
|---|
| 76 | REAL, DIMENSION(klon,klev,8) :: mass_temp |
|---|
| 77 | |
|---|
| 78 | ! |
|---|
| 79 | ! Proprietes optiques |
|---|
| 80 | ! |
|---|
| 81 | REAL:: alpha_aers_2bands(nbre_RH,2,nbsol_compaer) !--unit m2/g SO4 |
|---|
| 82 | REAL:: alpha_aeri_2bands(2,nbinsol_compaer) |
|---|
| 83 | REAL:: cg_aers_2bands(nbre_RH,2,nbsol_compaer) !--unit |
|---|
| 84 | REAL:: cg_aeri_2bands(2,nbinsol_compaer) |
|---|
| 85 | REAL:: piz_aers_2bands(nbre_RH,2,nbsol_compaer) !-- unit |
|---|
| 86 | REAL:: piz_aeri_2bands(2,nbinsol_compaer) !-- unit |
|---|
| 87 | |
|---|
| 88 | |
|---|
| 89 | spsol = 0 |
|---|
| 90 | spinsol = 0 |
|---|
| 91 | |
|---|
| 92 | |
|---|
| 93 | DATA alpha_aers_2bands/ & |
|---|
| 94 | ! seasalt soluble Coarse Soluble (CS) |
|---|
| 95 | 0.5090,0.6554,0.7129,0.7767,0.8529,1.2728, & |
|---|
| 96 | 1.3820,1.5792,1.9173,2.2002,2.7173,4.1487, & |
|---|
| 97 | 0.5167,0.6613,0.7221,0.7868,0.8622,1.3027, & |
|---|
| 98 | 1.4227,1.6317,1.9887,2.2883,2.8356,4.3453, & |
|---|
| 99 | ! seasalt soluble Accumulation Soluble (AS) |
|---|
| 100 | 4.125, 4.674, 5.005, 5.434, 5.985, 10.006, & |
|---|
| 101 | 11.175,13.376,17.264,20.540,26.604, 42.349,& |
|---|
| 102 | 4.187, 3.939, 3.919, 3.937, 3.995, 5.078, & |
|---|
| 103 | 5.511, 6.434, 8.317,10.152,14.024, 26.537, & |
|---|
| 104 | ! bc soluble |
|---|
| 105 | 7.675,7.675,7.675,7.675,7.675,7.675, & |
|---|
| 106 | 7.675,7.675,10.433,11.984,13.767,15.567,& |
|---|
| 107 | 4.720,4.720,4.720,4.720,4.720,4.720, & |
|---|
| 108 | 4.720,4.720,6.081,6.793,7.567,9.344, & |
|---|
| 109 | ! pom soluble |
|---|
| 110 | 5.503,5.503,5.503,5.503,5.588,5.957, & |
|---|
| 111 | 6.404,7.340,8.545,10.319,13.595,20.398, & |
|---|
| 112 | 1.402,1.402,1.402,1.402,1.431,1.562, & |
|---|
| 113 | 1.715,2.032,2.425,2.991,4.193,7.133, & |
|---|
| 114 | ! sulfate |
|---|
| 115 | 4.681,5.062,5.460,5.798,6.224,6.733, & |
|---|
| 116 | 7.556,8.613,10.687,12.265,16.32,21.692, & |
|---|
| 117 | 1.107,1.239,1.381,1.490,1.635,1.8030, & |
|---|
| 118 | 2.071,2.407,3.126,3.940,5.539,7.921/ |
|---|
| 119 | |
|---|
| 120 | |
|---|
| 121 | DATA alpha_aeri_2bands/ & |
|---|
| 122 | ! dust insoluble |
|---|
| 123 | 0.7661,0.7123,& |
|---|
| 124 | ! bc insoluble |
|---|
| 125 | 10.360,4.437, & |
|---|
| 126 | ! pom insoluble |
|---|
| 127 | 3.741,0.606/ |
|---|
| 128 | |
|---|
| 129 | |
|---|
| 130 | DATA cg_aers_2bands/ & |
|---|
| 131 | ! seasalt Coarse soluble (CS) |
|---|
| 132 | 0.727, 0.747, 0.755, 0.761, 0.770, 0.788, & |
|---|
| 133 | 0.792, 0.799, 0.805, 0.809, 0.815, 0.826, & |
|---|
| 134 | 0.717, 0.738, 0.745, 0.752, 0.761, 0.779, & |
|---|
| 135 | 0.781, 0.786, 0.793, 0.797, 0.803, 0.813, & |
|---|
| 136 | ! Sesalt Accumulation Soluble (AS) |
|---|
| 137 | 0.727, 0.741, 0.748, 0.754, 0.761, 0.782, & |
|---|
| 138 | 0.787, 0.792, 0.797, 0.799, 0.801, 0.799, & |
|---|
| 139 | 0.606, 0.645, 0.658, 0.669, 0.681, 0.726, & |
|---|
| 140 | 0.734, 0.746, 0.761, 0.770, 0.782, 0.798, & |
|---|
| 141 | ! bc soluble |
|---|
| 142 | .612, .612, .612, .612, .612, .612, & |
|---|
| 143 | .612, .612, .702, .734, .760, .796, & |
|---|
| 144 | .433, .433, .433, .433, .433, .433, & |
|---|
| 145 | .433, .433, .534, .575, .613, .669, & |
|---|
| 146 | ! pom soluble |
|---|
| 147 | .663, .663, .663, .663, .666, .674, & |
|---|
| 148 | .685, .702, .718, .737, .757, .777, & |
|---|
| 149 | .544, .544, .544, .544, .547, .554, & |
|---|
| 150 | .565, .583, .604, .631, .661, .698, & |
|---|
| 151 | ! sulfate |
|---|
| 152 | .658, .669, .680, .688, .698, .707, & |
|---|
| 153 | .719, .733, .752, .760, .773, .786, & |
|---|
| 154 | .544, .555, .565, .573, .583, .593, & |
|---|
| 155 | .610, .628, .655, .666, .692, .719/ |
|---|
| 156 | |
|---|
| 157 | |
|---|
| 158 | DATA cg_aeri_2bands/ & |
|---|
| 159 | ! dust insoluble |
|---|
| 160 | .701, .670, & |
|---|
| 161 | ! bc insoluble |
|---|
| 162 | .471, .297, & |
|---|
| 163 | ! pom insoluble |
|---|
| 164 | .568, .365/ |
|---|
| 165 | |
|---|
| 166 | DATA piz_aers_2bands/& |
|---|
| 167 | ! seasalt Coarse soluble (CS) |
|---|
| 168 | 1.000,1.000,1.000,1.000,1.000,1.000, & |
|---|
| 169 | 1.000,1.000,1.000,1.000,1.000,1.000, & |
|---|
| 170 | 0.992,0.989,0.987,0.986,0.986,0.980, & |
|---|
| 171 | 0.980,0.978,0.976,0.976,0.974,0.971, & |
|---|
| 172 | ! seasalt Accumulation Soluble (AS) |
|---|
| 173 | 1.000, 1.000, 1.000, 1.000, 1.000, 1.000, & |
|---|
| 174 | 1.000, 1.000, 1.000, 1.000, 1.000, 1.000, & |
|---|
| 175 | 0.970, 0.975, 0.976, 0.977, 0.978, 0.982, & |
|---|
| 176 | 0.982, 0.983, 0.984, 0.984, 0.985, 0.985, & |
|---|
| 177 | ! bc soluble |
|---|
| 178 | .445, .445, .445, .445, .445, .445, & |
|---|
| 179 | .445, .445, .461, .480, .505, .528, & |
|---|
| 180 | .362, .362, .362, .362, .362, .362, & |
|---|
| 181 | .362, .362, .381, .405, .437, .483, & |
|---|
| 182 | ! pom soluble |
|---|
| 183 | .972, .972, .972, .972, .972, .974, & |
|---|
| 184 | .976, .979, .982, .986, .989, .992, & |
|---|
| 185 | .924, .924, .924, .924, .925, .927, & |
|---|
| 186 | .932, .938, .945, .952, .961, .970, & |
|---|
| 187 | ! sulfate |
|---|
| 188 | 1.000,1.000,1.000,1.000,1.000,1.000, & |
|---|
| 189 | 1.000,1.000,1.000,1.000,1.000,1.000, & |
|---|
| 190 | .992, .988, .988, .987, .986, .985, & |
|---|
| 191 | .985, .985, .984, .984, .984, .984 / |
|---|
| 192 | |
|---|
| 193 | |
|---|
| 194 | DATA piz_aeri_2bands/ & |
|---|
| 195 | ! dust insoluble |
|---|
| 196 | .963, .987, & |
|---|
| 197 | ! bc insoluble |
|---|
| 198 | .395, .264, & |
|---|
| 199 | ! pom insoluble |
|---|
| 200 | .966, .859/ |
|---|
| 201 | |
|---|
| 202 | |
|---|
| 203 | DO k=1, klev |
|---|
| 204 | DO i=1, klon |
|---|
| 205 | IF (t_seri(i,k).EQ.0.) THEN |
|---|
| 206 | WRITE(lunout,*) 't_seri(i,k)=0 for i=',i,'k=',k |
|---|
| 207 | CALL abort_gcm('aeropt_2bands','t_seri=0',1) |
|---|
| 208 | END IF |
|---|
| 209 | IF (pplay(i,k).EQ.0.) THEN |
|---|
| 210 | WRITE(lunout,*) 'pplay(i,k)=0 for i=',i,'k=',k |
|---|
| 211 | CALL abort_gcm('aeropt_2bands','pplay=0',1) |
|---|
| 212 | END IF |
|---|
| 213 | |
|---|
| 214 | zrho=pplay(i,k)/t_seri(i,k)/RD ! kg/m3 |
|---|
| 215 | mass_temp(i,k,:) = m_allaer(i,k,:) / zrho / 1.e+9 |
|---|
| 216 | |
|---|
| 217 | ENDDO |
|---|
| 218 | ENDDO |
|---|
| 219 | |
|---|
| 220 | IF (flag_aerosol .EQ. 1) THEN |
|---|
| 221 | nb_aer = 1 |
|---|
| 222 | ALLOCATE (aerosol_name(nb_aer)) |
|---|
| 223 | aerosol_name(1) = id_ASSO4M |
|---|
| 224 | ELSEIF (flag_aerosol .EQ. 2) THEN |
|---|
| 225 | nb_aer = 2 |
|---|
| 226 | ALLOCATE (aerosol_name(nb_aer)) |
|---|
| 227 | aerosol_name(1) = id_ASBCM |
|---|
| 228 | aerosol_name(2) = id_AIBCM |
|---|
| 229 | ELSEIF (flag_aerosol .EQ. 3) THEN |
|---|
| 230 | nb_aer = 2 |
|---|
| 231 | ALLOCATE (aerosol_name(nb_aer)) |
|---|
| 232 | aerosol_name(1) = id_ASPOMM |
|---|
| 233 | aerosol_name(2) = id_AIPOMM |
|---|
| 234 | ELSEIF (flag_aerosol .EQ. 4) THEN |
|---|
| 235 | nb_aer = 5 |
|---|
| 236 | ALLOCATE (aerosol_name(nb_aer)) |
|---|
| 237 | aerosol_name(1) = id_ASSO4M |
|---|
| 238 | aerosol_name(2) = id_ASBCM |
|---|
| 239 | aerosol_name(3) = id_AIBCM |
|---|
| 240 | aerosol_name(4) = id_ASPOMM |
|---|
| 241 | aerosol_name(5) = id_AIPOMM |
|---|
| 242 | ELSEIF (flag_aerosol .EQ. 5) THEN |
|---|
| 243 | nb_aer = 4 |
|---|
| 244 | ALLOCATE (aerosol_name(nb_aer)) |
|---|
| 245 | aerosol_name(1) = id_ASBCM |
|---|
| 246 | aerosol_name(2) = id_AIBCM |
|---|
| 247 | aerosol_name(3) = id_ASPOMM |
|---|
| 248 | aerosol_name(4) = id_AIPOMM |
|---|
| 249 | ELSEIF (flag_aerosol .EQ. 6) THEN |
|---|
| 250 | nb_aer = 3 |
|---|
| 251 | ALLOCATE (aerosol_name(nb_aer)) |
|---|
| 252 | aerosol_name(1) = id_ASSO4M |
|---|
| 253 | aerosol_name(2) = id_ASPOMM |
|---|
| 254 | aerosol_name(3) = id_AIPOMM |
|---|
| 255 | ENDIF |
|---|
| 256 | |
|---|
| 257 | |
|---|
| 258 | ! |
|---|
| 259 | ! loop over modes, use of precalculated nmd and corresponding sigma |
|---|
| 260 | ! loop over wavelengths |
|---|
| 261 | ! for each mass species in mode |
|---|
| 262 | ! interpolate from Sext to retrieve Sext_at_gridpoint_per_species |
|---|
| 263 | ! compute optical_thickness_at_gridpoint_per_species |
|---|
| 264 | |
|---|
| 265 | tau_ae(:,:,:,:)=0. |
|---|
| 266 | piz_ae(:,:,:,:)=0. |
|---|
| 267 | cg_ae(:,:,:,:)=0. |
|---|
| 268 | tau_allaer(:,:,:,:)=0. |
|---|
| 269 | piz_allaer(:,:,:,:)=0. |
|---|
| 270 | cg_allaer(:,:,:,:)=0. |
|---|
| 271 | |
|---|
| 272 | ! |
|---|
| 273 | ! Calculations that need to be done since we are not in the subroutines INCA |
|---|
| 274 | ! |
|---|
| 275 | ! air mass auxiliary variable --> zdp1 [kg/(m^2 *s)] |
|---|
| 276 | zdp1(:,:)=pdel(:,:)/(gravit*delt) |
|---|
| 277 | |
|---|
| 278 | |
|---|
| 279 | DO m=1,nb_aer ! tau is only computed for each mass |
|---|
| 280 | |
|---|
| 281 | fac=1.0 |
|---|
| 282 | IF (aerosol_name(m).EQ.id_SSSSM) THEN ! for now |
|---|
| 283 | soluble=.TRUE. |
|---|
| 284 | spsol=1 |
|---|
| 285 | ELSEIF (aerosol_name(m).EQ.id_CSSSM) THEN |
|---|
| 286 | soluble=.TRUE. |
|---|
| 287 | spsol=1 |
|---|
| 288 | ELSEIF (aerosol_name(m).EQ.id_ASSSM) THEN |
|---|
| 289 | soluble=.TRUE. |
|---|
| 290 | spsol=2 |
|---|
| 291 | ELSEIF (aerosol_name(m).EQ.id_ASBCM) THEN |
|---|
| 292 | soluble=.TRUE. |
|---|
| 293 | spsol=3 |
|---|
| 294 | ELSEIF (aerosol_name(m).EQ.id_ASPOMM) THEN |
|---|
| 295 | soluble=.TRUE. |
|---|
| 296 | spsol=4 |
|---|
| 297 | ELSEIF ((aerosol_name(m).EQ.id_ASSO4M) .OR. (aerosol_name(m).EQ.id_CSSO4M)) THEN |
|---|
| 298 | soluble=.TRUE. |
|---|
| 299 | spsol=5 |
|---|
| 300 | fac=1.375 ! (NH4)2-SO4/SO4 132/96 mass conversion factor for OD |
|---|
| 301 | ELSEIF (aerosol_name(m).EQ.id_CIDUSTM) THEN |
|---|
| 302 | soluble=.FALSE. |
|---|
| 303 | spinsol=1 |
|---|
| 304 | ELSEIF (aerosol_name(m).EQ.id_AIBCM) THEN |
|---|
| 305 | soluble=.FALSE. |
|---|
| 306 | spinsol=2 |
|---|
| 307 | ELSEIF (aerosol_name(m).EQ.id_AIPOMM) THEN |
|---|
| 308 | soluble=.FALSE. |
|---|
| 309 | spinsol=3 |
|---|
| 310 | ELSE |
|---|
| 311 | CYCLE |
|---|
| 312 | ENDIF |
|---|
| 313 | |
|---|
| 314 | |
|---|
| 315 | tau_ae2b_int(:,:,:)=0. |
|---|
| 316 | piz_ae2b_int(:,:,:)=0. |
|---|
| 317 | cg_ae2b_int(:,:,:)=0. |
|---|
| 318 | |
|---|
| 319 | DO k=1, KLEV |
|---|
| 320 | DO i=1, KLON |
|---|
| 321 | |
|---|
| 322 | rh=MIN(RHcl(i,k)*100.,RH_MAX) |
|---|
| 323 | RH_num = INT( rh/10. + 1.) |
|---|
| 324 | |
|---|
| 325 | IF (rh.GT.85.) RH_num=10 |
|---|
| 326 | IF (rh.GT.90.) RH_num=11 |
|---|
| 327 | DELTA=(rh-RH_tab(RH_num))/(RH_tab(RH_num+1)-RH_tab(RH_num)) |
|---|
| 328 | |
|---|
| 329 | DO inu=1,2 |
|---|
| 330 | IF (soluble) THEN |
|---|
| 331 | tau_ae2b_int(i,k,inu)= & |
|---|
| 332 | alpha_aers_2bands(RH_num,inu,spsol)+ & |
|---|
| 333 | DELTA* (alpha_aers_2bands(RH_num+1,inu,spsol) - & |
|---|
| 334 | alpha_aers_2bands(RH_num,inu,spsol)) |
|---|
| 335 | |
|---|
| 336 | piz_ae2b_int(i,k,inu)= & |
|---|
| 337 | piz_aers_2bands(RH_num,inu,spsol) + & |
|---|
| 338 | DELTA* (piz_aers_2bands(RH_num+1,inu,spsol) - & |
|---|
| 339 | piz_aers_2bands(RH_num,inu,spsol)) |
|---|
| 340 | |
|---|
| 341 | cg_ae2b_int(i,k,inu)= & |
|---|
| 342 | cg_aers_2bands(RH_num,inu,spsol) + & |
|---|
| 343 | DELTA* (cg_aers_2bands(RH_num+1,inu,spsol) - & |
|---|
| 344 | cg_aers_2bands(RH_num,inu,spsol)) |
|---|
| 345 | |
|---|
| 346 | tau_ae(i,k,aerosol_name(m),inu) = mass_temp(i,k,spsol)*1000.*zdp1(i,k)*delt*tau_ae2b_int(i,k,inu)*fac |
|---|
| 347 | |
|---|
| 348 | ELSE |
|---|
| 349 | tau_ae2b_int(i,k,inu) = alpha_aeri_2bands(inu,spinsol) |
|---|
| 350 | piz_ae2b_int(i,k,inu) = piz_aeri_2bands(inu,spinsol) |
|---|
| 351 | cg_ae2b_int(i,k,inu) = cg_aeri_2bands(inu,spinsol) |
|---|
| 352 | |
|---|
| 353 | tau_ae(i,k,aerosol_name(m),inu) = mass_temp(i,k,5+ spinsol)*1000.*zdp1(i,k)*delt*tau_ae2b_int(i,k,inu)*fac |
|---|
| 354 | ENDIF |
|---|
| 355 | |
|---|
| 356 | piz_ae(i,k,aerosol_name(m),inu) = piz_ae2b_int(i,k,inu) |
|---|
| 357 | |
|---|
| 358 | cg_ae(i,k,aerosol_name(m),inu)= cg_ae2b_int(i,k,inu) |
|---|
| 359 | |
|---|
| 360 | |
|---|
| 361 | ENDDO ! boucle sur les bandes spectrale |
|---|
| 362 | ENDDO ! Boucle sur les points géographiques (grille horizontale) |
|---|
| 363 | ENDDO ! Boucle sur les niveaux verticaux |
|---|
| 364 | ENDDO ! Boucle sur les masses de traceurs |
|---|
| 365 | |
|---|
| 366 | |
|---|
| 367 | DO inu=1, 2 |
|---|
| 368 | DO mrfspecies=1,9 |
|---|
| 369 | DO k=1, KLEV |
|---|
| 370 | DO i=1, KLON |
|---|
| 371 | IF (mrfspecies .EQ. 2) THEN ! = total aerosol AER |
|---|
| 372 | tau_allaer(i,k,mrfspecies,inu)=tau_ae(i,k,id_ASSO4M,inu)+tau_ae(i,k,id_CSSO4M,inu)+ & |
|---|
| 373 | tau_ae(i,k,id_ASBCM,inu)+tau_ae(i,k,id_AIBCM,inu)+ & |
|---|
| 374 | tau_ae(i,k,id_ASPOMM,inu)+tau_ae(i,k,id_AIPOMM,inu)+ & |
|---|
| 375 | tau_ae(i,k,id_ASSSM,inu)+tau_ae(i,k,id_CSSSM,inu)+tau_ae(i,k,id_SSSSM,inu)+ & |
|---|
| 376 | tau_ae(i,k,id_CIDUSTM,inu) |
|---|
| 377 | tau_allaer(i,k,mrfspecies,inu)=MAX(tau_allaer(i,k,mrfspecies,inu),1e-20) |
|---|
| 378 | |
|---|
| 379 | piz_allaer(i,k,mrfspecies,inu)=(tau_ae(i,k,id_ASSO4M,inu)*piz_ae(i,k,id_ASSO4M,inu)+ & |
|---|
| 380 | tau_ae(i,k,id_CSSO4M,inu)*piz_ae(i,k,id_CSSO4M,inu)+ & |
|---|
| 381 | tau_ae(i,k,id_ASBCM,inu)*piz_ae(i,k,id_ASBCM,inu)+ & |
|---|
| 382 | tau_ae(i,k,id_AIBCM,inu)*piz_ae(i,k,id_AIBCM,inu)+ & |
|---|
| 383 | tau_ae(i,k,id_ASPOMM,inu)*piz_ae(i,k,id_ASPOMM,inu)+ & |
|---|
| 384 | tau_ae(i,k,id_AIPOMM,inu)*piz_ae(i,k,id_AIPOMM,inu)+ & |
|---|
| 385 | tau_ae(i,k,id_ASSSM,inu)*piz_ae(i,k,id_ASSSM,inu)+ & |
|---|
| 386 | tau_ae(i,k,id_CSSSM,inu)*piz_ae(i,k,id_CSSSM,inu)+ & |
|---|
| 387 | tau_ae(i,k,id_SSSSM,inu)*piz_ae(i,k,id_SSSSM,inu)+ & |
|---|
| 388 | tau_ae(i,k,id_CIDUSTM,inu)*piz_ae(i,k,id_CIDUSTM,inu))/tau_allaer(i,k,mrfspecies,inu) |
|---|
| 389 | piz_allaer(i,k,mrfspecies,inu)=MAX(piz_allaer(i,k,mrfspecies,inu),1e-20) |
|---|
| 390 | |
|---|
| 391 | 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)+ & |
|---|
| 392 | tau_ae(i,k,id_CSSO4M,inu)*piz_ae(i,k,id_CSSO4M,inu)*cg_ae(i,k,id_CSSO4M,inu)+ & |
|---|
| 393 | tau_ae(i,k,id_ASBCM,inu)*piz_ae(i,k,id_ASBCM,inu)*cg_ae(i,k,id_ASBCM,inu)+ & |
|---|
| 394 | tau_ae(i,k,id_AIBCM,inu)*piz_ae(i,k,id_AIBCM,inu)*cg_ae(i,k,id_AIBCM,inu)+ & |
|---|
| 395 | tau_ae(i,k,id_ASPOMM,inu)*piz_ae(i,k,id_ASPOMM,inu)*cg_ae(i,k,id_ASPOMM,inu)+ & |
|---|
| 396 | tau_ae(i,k,id_AIPOMM,inu)*piz_ae(i,k,id_AIPOMM,inu)*cg_ae(i,k,id_AIPOMM,inu)+ & |
|---|
| 397 | tau_ae(i,k,id_ASSSM,inu)*piz_ae(i,k,id_ASSSM,inu)*cg_ae(i,k,id_ASSSM,inu)+ & |
|---|
| 398 | tau_ae(i,k,id_CSSSM,inu)*piz_ae(i,k,id_CSSSM,inu)*cg_ae(i,k,id_CSSSM,inu)+ & |
|---|
| 399 | tau_ae(i,k,id_SSSSM,inu)*piz_ae(i,k,id_SSSSM,inu)*cg_ae(i,k,id_SSSSM,inu)+ & |
|---|
| 400 | tau_ae(i,k,id_CIDUSTM,inu)*piz_ae(i,k,id_CIDUSTM,inu)*cg_ae(i,k,id_CIDUSTM,inu))/ & |
|---|
| 401 | (tau_allaer(i,k,mrfspecies,inu)*piz_allaer(i,k,mrfspecies,inu)) |
|---|
| 402 | |
|---|
| 403 | |
|---|
| 404 | ELSEIF (mrfspecies .EQ. 3) THEN ! = natural aerosol NAT |
|---|
| 405 | tau_allaer(i,k,mrfspecies,inu)=tau_ae(i,k,id_ASSO4M,inu)*fractnat_allaer(i,id_ASSO4M)+ & |
|---|
| 406 | tau_ae(i,k,id_CSSO4M,inu)*fractnat_allaer(i,id_CSSO4M)+ & |
|---|
| 407 | tau_ae(i,k,id_ASBCM,inu)*fractnat_allaer(i,id_ASBCM)+ & |
|---|
| 408 | tau_ae(i,k,id_AIBCM,inu)*fractnat_allaer(i,id_AIBCM)+ & |
|---|
| 409 | tau_ae(i,k,id_ASPOMM,inu)*fractnat_allaer(i,id_ASPOMM)+ & |
|---|
| 410 | tau_ae(i,k,id_AIPOMM,inu)*fractnat_allaer(i,id_AIPOMM)+ & |
|---|
| 411 | tau_ae(i,k,id_ASSSM,inu)*fractnat_allaer(i,id_ASSSM)+ & |
|---|
| 412 | tau_ae(i,k,id_CSSSM,inu)*fractnat_allaer(i,id_CSSSM)+ & |
|---|
| 413 | tau_ae(i,k,id_SSSSM,inu)*fractnat_allaer(i,id_SSSSM)+ & |
|---|
| 414 | tau_ae(i,k,id_CIDUSTM,inu)*fractnat_allaer(i,id_CIDUSTM) |
|---|
| 415 | tau_allaer(i,k,mrfspecies,inu)=MAX(tau_allaer(i,k,mrfspecies,inu),1e-20) |
|---|
| 416 | |
|---|
| 417 | piz_allaer(i,k,mrfspecies,inu)=(tau_ae(i,k,id_ASSO4M,inu)*fractnat_allaer(i,id_ASSO4M)*piz_ae(i,k,id_ASSO4M,inu)+ & |
|---|
| 418 | tau_ae(i,k,id_CSSO4M,inu)*fractnat_allaer(i,id_CSSO4M)*piz_ae(i,k,id_CSSO4M,inu)+ & |
|---|
| 419 | tau_ae(i,k,id_ASBCM,inu)*fractnat_allaer(i,id_ASBCM)*piz_ae(i,k,id_ASBCM,inu)+ & |
|---|
| 420 | tau_ae(i,k,id_AIBCM,inu)*fractnat_allaer(i,id_AIBCM)*piz_ae(i,k,id_AIBCM,inu)+ & |
|---|
| 421 | tau_ae(i,k,id_ASPOMM,inu)*fractnat_allaer(i,id_ASPOMM)*piz_ae(i,k,id_ASPOMM,inu)+ & |
|---|
| 422 | tau_ae(i,k,id_AIPOMM,inu)*fractnat_allaer(i,id_AIPOMM)*piz_ae(i,k,id_AIPOMM,inu)+ & |
|---|
| 423 | tau_ae(i,k,id_ASSSM,inu)*fractnat_allaer(i,id_ASSSM)*piz_ae(i,k,id_ASSSM,inu)+ & |
|---|
| 424 | tau_ae(i,k,id_CSSSM,inu)*fractnat_allaer(i,id_CSSSM)*piz_ae(i,k,id_CSSSM,inu)+ & |
|---|
| 425 | tau_ae(i,k,id_SSSSM,inu)*fractnat_allaer(i,id_SSSSM)*piz_ae(i,k,id_SSSSM,inu)+ & |
|---|
| 426 | tau_ae(i,k,id_CIDUSTM,inu)*fractnat_allaer(i,id_CIDUSTM)*piz_ae(i,k,id_CIDUSTM,inu)) & |
|---|
| 427 | /tau_allaer(i,k,mrfspecies,inu) |
|---|
| 428 | piz_allaer(i,k,mrfspecies,inu)=MAX(piz_allaer(i,k,mrfspecies,inu),1e-20) |
|---|
| 429 | |
|---|
| 430 | cg_allaer(i,k,mrfspecies,inu)=(& |
|---|
| 431 | tau_ae(i,k,id_ASSO4M,inu)*fractnat_allaer(i,id_ASSO4M)*piz_ae(i,k,id_ASSO4M,inu)*cg_ae(i,k,id_ASSO4M,inu)+ & |
|---|
| 432 | tau_ae(i,k,id_CSSO4M,inu)*fractnat_allaer(i,id_CSSO4M)*piz_ae(i,k,id_CSSO4M,inu)*cg_ae(i,k,id_CSSO4M,inu)+ & |
|---|
| 433 | tau_ae(i,k,id_ASBCM,inu)*fractnat_allaer(i,id_ASBCM)*piz_ae(i,k,id_ASBCM,inu)*cg_ae(i,k,id_ASBCM,inu)+ & |
|---|
| 434 | tau_ae(i,k,id_AIBCM,inu)*fractnat_allaer(i,id_AIBCM)*piz_ae(i,k,id_AIBCM,inu)*cg_ae(i,k,id_AIBCM,inu)+ & |
|---|
| 435 | tau_ae(i,k,id_ASPOMM,inu)*fractnat_allaer(i,id_ASPOMM)*piz_ae(i,k,id_ASPOMM,inu)*cg_ae(i,k,id_ASPOMM,inu)+ & |
|---|
| 436 | tau_ae(i,k,id_AIPOMM,inu)*fractnat_allaer(i,id_AIPOMM)*piz_ae(i,k,id_AIPOMM,inu)*cg_ae(i,k,id_AIPOMM,inu)+ & |
|---|
| 437 | tau_ae(i,k,id_ASSSM,inu)*fractnat_allaer(i,id_ASSSM)*piz_ae(i,k,id_ASSSM,inu)*cg_ae(i,k,id_ASSSM,inu)+ & |
|---|
| 438 | tau_ae(i,k,id_CSSSM,inu)*fractnat_allaer(i,id_CSSSM)*piz_ae(i,k,id_CSSSM,inu)*cg_ae(i,k,id_CSSSM,inu)+ & |
|---|
| 439 | tau_ae(i,k,id_SSSSM,inu)*fractnat_allaer(i,id_SSSSM)*piz_ae(i,k,id_SSSSM,inu)*cg_ae(i,k,id_SSSSM,inu)+ & |
|---|
| 440 | tau_ae(i,k,id_CIDUSTM,inu)*fractnat_allaer(i,id_CIDUSTM)*piz_ae(i,k,id_CIDUSTM,inu)*& |
|---|
| 441 | cg_ae(i,k,id_CIDUSTM,inu))/ & |
|---|
| 442 | (tau_allaer(i,k,mrfspecies,inu)*piz_allaer(i,k,mrfspecies,inu)) |
|---|
| 443 | |
|---|
| 444 | |
|---|
| 445 | ELSEIF (mrfspecies .EQ. 4) THEN ! = BC |
|---|
| 446 | tau_allaer(i,k,mrfspecies,inu)=tau_ae(i,k,id_ASBCM,inu)+tau_ae(i,k,id_AIBCM,inu) |
|---|
| 447 | tau_allaer(i,k,mrfspecies,inu)=MAX(tau_allaer(i,k,mrfspecies,inu),1e-20) |
|---|
| 448 | piz_allaer(i,k,mrfspecies,inu)=(tau_ae(i,k,id_ASBCM,inu)*piz_ae(i,k,id_ASBCM,inu) & |
|---|
| 449 | +tau_ae(i,k,id_AIBCM,inu)*piz_ae(i,k,id_AIBCM,inu))/ & |
|---|
| 450 | tau_allaer(i,k,mrfspecies,inu) |
|---|
| 451 | piz_allaer(i,k,mrfspecies,inu)=MAX(piz_allaer(i,k,mrfspecies,inu),1e-20) |
|---|
| 452 | 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)& |
|---|
| 453 | +tau_ae(i,k,id_AIBCM,inu)*piz_ae(i,k,id_AIBCM,inu)*cg_ae(i,k,id_AIBCM,inu))/ & |
|---|
| 454 | (tau_allaer(i,k,mrfspecies,inu)*piz_allaer(i,k,mrfspecies,inu)) |
|---|
| 455 | ELSEIF (mrfspecies .EQ. 5) THEN ! = SO4 |
|---|
| 456 | tau_allaer(i,k,mrfspecies,inu)=tau_ae(i,k,id_ASSO4M,inu)+tau_ae(i,k,id_CSSO4M,inu) |
|---|
| 457 | tau_allaer(i,k,mrfspecies,inu)=MAX(tau_allaer(i,k,mrfspecies,inu),1e-20) |
|---|
| 458 | piz_allaer(i,k,mrfspecies,inu)=(tau_ae(i,k,id_CSSO4M,inu)*piz_ae(i,k,id_CSSO4M,inu) & |
|---|
| 459 | +tau_ae(i,k,id_ASSO4M,inu)*piz_ae(i,k,id_ASSO4M,inu))/ & |
|---|
| 460 | tau_allaer(i,k,mrfspecies,inu) |
|---|
| 461 | piz_allaer(i,k,mrfspecies,inu)=MAX(piz_allaer(i,k,mrfspecies,inu),1e-20) |
|---|
| 462 | 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)& |
|---|
| 463 | +tau_ae(i,k,id_ASSO4M,inu)*piz_ae(i,k,id_ASSO4M,inu)*cg_ae(i,k,id_ASSO4M,inu))/ & |
|---|
| 464 | (tau_allaer(i,k,mrfspecies,inu)*piz_allaer(i,k,mrfspecies,inu)) |
|---|
| 465 | |
|---|
| 466 | ELSEIF (mrfspecies .EQ. 6) THEN ! = POM |
|---|
| 467 | tau_allaer(i,k,mrfspecies,inu)=tau_ae(i,k,id_ASPOMM,inu)+tau_ae(i,k,id_AIPOMM,inu) |
|---|
| 468 | tau_allaer(i,k,mrfspecies,inu)=MAX(tau_allaer(i,k,mrfspecies,inu),1e-20) |
|---|
| 469 | piz_allaer(i,k,mrfspecies,inu)=(tau_ae(i,k,id_ASPOMM,inu)*piz_ae(i,k,id_ASPOMM,inu) & |
|---|
| 470 | +tau_ae(i,k,id_AIPOMM,inu)*piz_ae(i,k,id_AIPOMM,inu))/ & |
|---|
| 471 | tau_allaer(i,k,mrfspecies,inu) |
|---|
| 472 | piz_allaer(i,k,mrfspecies,inu)=MAX(piz_allaer(i,k,mrfspecies,inu),1e-20) |
|---|
| 473 | 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)& |
|---|
| 474 | +tau_ae(i,k,id_AIPOMM,inu)*piz_ae(i,k,id_AIPOMM,inu)*cg_ae(i,k,id_AIPOMM,inu))/ & |
|---|
| 475 | (tau_allaer(i,k,mrfspecies,inu)*piz_allaer(i,k,mrfspecies,inu)) |
|---|
| 476 | ELSEIF (mrfspecies .EQ. 7) THEN ! = DUST |
|---|
| 477 | tau_allaer(i,k,mrfspecies,inu)=tau_ae(i,k,id_CIDUSTM,inu) |
|---|
| 478 | tau_allaer(i,k,mrfspecies,inu)=MAX(tau_allaer(i,k,mrfspecies,inu),1e-20) |
|---|
| 479 | piz_allaer(i,k,mrfspecies,inu)=piz_ae(i,k,id_CIDUSTM,inu) |
|---|
| 480 | cg_allaer(i,k,mrfspecies,inu)=cg_ae(i,k,id_CIDUSTM,inu) |
|---|
| 481 | |
|---|
| 482 | ELSEIF (mrfspecies .EQ. 8) THEN ! = SS |
|---|
| 483 | 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) |
|---|
| 484 | tau_allaer(i,k,mrfspecies,inu)=MAX(tau_allaer(i,k,mrfspecies,inu),1e-20) |
|---|
| 485 | piz_allaer(i,k,mrfspecies,inu)=(tau_ae(i,k,id_ASSSM,inu)*piz_ae(i,k,id_ASSSM,inu) & |
|---|
| 486 | +tau_ae(i,k,id_CSSSM,inu)*piz_ae(i,k,id_CSSSM,inu) & |
|---|
| 487 | +tau_ae(i,k,id_SSSSM,inu)*piz_ae(i,k,id_SSSSM,inu))/ & |
|---|
| 488 | tau_allaer(i,k,mrfspecies,inu) |
|---|
| 489 | piz_allaer(i,k,mrfspecies,inu)=MAX(piz_allaer(i,k,mrfspecies,inu),1e-20) |
|---|
| 490 | 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)& |
|---|
| 491 | +tau_ae(i,k,id_CSSSM,inu)*piz_ae(i,k,id_CSSSM,inu)*cg_ae(i,k,id_CSSSM,inu) & |
|---|
| 492 | +tau_ae(i,k,id_SSSSM,inu)*piz_ae(i,k,id_SSSSM,inu)*cg_ae(i,k,id_SSSSM,inu))/ & |
|---|
| 493 | (tau_allaer(i,k,mrfspecies,inu)*piz_allaer(i,k,mrfspecies,inu)) |
|---|
| 494 | |
|---|
| 495 | ELSEIF (mrfspecies .EQ. 9) THEN ! = NO3 |
|---|
| 496 | tau_allaer(i,k,mrfspecies,inu)=0. ! preliminary |
|---|
| 497 | piz_allaer(i,k,mrfspecies,inu)=0. |
|---|
| 498 | cg_allaer(i,k,mrfspecies,inu)=0. |
|---|
| 499 | ENDIF |
|---|
| 500 | ENDDO |
|---|
| 501 | ENDDO |
|---|
| 502 | ENDDO |
|---|
| 503 | ENDDO |
|---|
| 504 | |
|---|
| 505 | DEALLOCATE(aerosol_name) |
|---|
| 506 | |
|---|
| 507 | END SUBROUTINE AEROPT_2BANDS |
|---|