Skip to content
Snippets Groups Projects
init_aerosol_properties.f90 18.7 KiB
Newer Older
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412
!MNH_LIC Copyright 2013-2021 CNRS, Meteo-France and Universite Paul Sabatier
!MNH_LIC This is part of the Meso-NH software governed by the CeCILL-C licence
!MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt
!MNH_LIC for details. version 1.
!-----------------------------------------------------------------
!      ####################
       MODULE MODI_INIT_AEROSOL_PROPERTIES
INTERFACE
   SUBROUTINE INIT_AEROSOL_PROPERTIES
   END SUBROUTINE INIT_AEROSOL_PROPERTIES
END INTERFACE
END MODULE MODI_INIT_AEROSOL_PROPERTIES
!      ####################
!
!     #############################################################
      SUBROUTINE INIT_AEROSOL_PROPERTIES
!     #############################################################

!!
!!
!!      PURPOSE
!!      -------
!!      
!!      Define the aerosol properties
!!
!!
!!    AUTHOR
!!    ------
!!      J.-P. Pinty      * Laboratoire d'Aerologie*
!!      S.    Berthet    * Laboratoire d'Aerologie*
!!      B.    Vié        * Laboratoire d'Aerologie*
!!
!!    MODIFICATIONS
!!    -------------
!!      Original             ??/??/13 
!!  Philippe Wautelet: 05/2016-04/2018: new data structures and calls for I/O
!!  Philippe Wautelet: 22/01/2019: bugs correction: incorrect writes + unauthorized goto
!  P. Wautelet 10/04/2019: replace ABORT and STOP calls by Print_msg
!  P. Wautelet 30/03/2021: move NINDICE_CCN_IMM and NIMM initializations from init_aerosol_properties to ini_nsv
!  B. Vié         06/2021: kappa-kohler CCN activation parameters
!
!-------------------------------------------------------------------------------
!
!*       0.    DECLARATIONS
!              ------------
!
!USE MODD_LUNIT,           ONLY : TLUOUT0
USE MODD_PARAM_LIMA,      ONLY : NMOD_CCN, HINI_CCN, HTYPE_CCN,        &
                                 XR_MEAN_CCN, XLOGSIG_CCN, XRHO_CCN,                 &
                                 XKHEN_MULTI, XMUHEN_MULTI, XBETAHEN_MULTI,          &
                                 XLIMIT_FACTOR, CCCN_MODES, LSCAV,                    &
                                 XACTEMP_CCN, XFSOLUB_CCN,                           &
                                 NMOD_IFN, NSPECIE, CIFN_SPECIES,       &
                                 XMDIAM_IFN, XSIGMA_IFN, XRHO_IFN, XFRAC, XFRAC_REF, &
                                 CINT_MIXING, NPHILLIPS,           &
                                 NIMM, NMOD_IMM, NINDICE_CCN_IMM
!
USE MODD_CH_AEROSOL
USE MODD_SALT
USE MODD_CSTS_SALT
USE MODD_DUST
USE MODD_CSTS_DUST
use mode_msg
!
USE MODI_GAMMA
USE MODE_LIMA_INIT_CCN_ACTIVATION_SPECTRUM, ONLY: LIMA_INIT_CCN_ACTIVATION_SPECTRUM
!
IMPLICIT NONE
!
REAL             ::  XKHEN0     
REAL             ::  XLOGSIG0   
REAL             ::  XALPHA1     
REAL             ::  XMUHEN0    
REAL             ::  XALPHA2   
REAL             ::  XBETAHEN0  
REAL             ::  XR_MEAN0  
REAL             ::  XALPHA3    
REAL             ::  XALPHA4     
REAL             ::  XALPHA5      
REAL             ::  XACTEMP0    
REAL             ::  XALPHA6   
!
REAL, DIMENSION(6) :: XKHEN_TMP   = (/1.56, 1.56, 1.56, 1.56, 1.56, 1.56 /)
REAL, DIMENSION(6) :: XMUHEN_TMP  = (/0.80, 0.80, 0.80, 0.80, 0.80, 0.80 /)
REAL, DIMENSION(6) :: XBETAHEN_TMP= (/136., 136., 136., 136., 136., 136. /)
!
REAL, DIMENSION(3) :: RCCN
REAL, DIMENSION(3) :: LOGSIGCCN
REAL, DIMENSION(3) :: RHOCCN
!
INTEGER            :: I,J,JMOD
!
!INTEGER  :: ILUOUT0 ! Logical unit number for output-listing
!INTEGER  :: IRESP   ! Return code of FM-routines
!
REAL :: X1, X2, X3, X4, X5
! REAL, DIMENSION(7) :: diameters=(/ 0.01E-6, 0.05E-6, 0.1E-6, 0.2E-6, 0.5E-6, 1.E-6, 2.E-6 /)
! REAL, DIMENSION(3) :: sigma=(/ 2., 2.5, 3. /)
! CHARACTER(LEN=7), DIMENSION(3) :: types=(/ 'NH42SO4', 'NaCl   ', '       ' /)
!REAL, DIMENSION(1) :: diameters=(/ 0.25E-6 /)
!CHARACTER(LEN=7), DIMENSION(1) :: types=(/ '       ' /)
INTEGER :: II, IJ, IK
!
!-------------------------------------------------------------------------------
!
!ILUOUT0 = TLUOUT0%NLU
!
!!!!!!!!!!!!!!!!
! CCN properties
!!!!!!!!!!!!!!!!
!
IF ( NMOD_CCN .GE. 1 ) THEN
!
   IF (.NOT.(ALLOCATED(XR_MEAN_CCN))) ALLOCATE(XR_MEAN_CCN(NMOD_CCN))
   IF (.NOT.(ALLOCATED(XLOGSIG_CCN))) ALLOCATE(XLOGSIG_CCN(NMOD_CCN))
   IF (.NOT.(ALLOCATED(XRHO_CCN)))    ALLOCATE(XRHO_CCN(NMOD_CCN))
!
   SELECT CASE (CCCN_MODES)
   CASE ('JUNGFRAU')
      RCCN(:)   = (/ 0.02E-6 , 0.058E-6 , 0.763E-6 /)
      LOGSIGCCN(:) = (/ 0.28 , 0.57 , 0.34 /)
      RHOCCN(:) = (/ 1500. , 1500. , 1500. /)
   CASE ('COPT')
      RCCN(:)   = (/ 0.125E-6 , 0.4E-6 , 1.0E-6 /)
      LOGSIGCCN(:) = (/ 0.69 , 0.41 , 0.47 /)
      RHOCCN(:) = (/ 1000. , 1000. , 1000. /)
   CASE ('CAMS')
      RCCN(:)   = (/ 0.4E-6 , 0.25E-6 , 0.1E-6 /)
      LOGSIGCCN(:) = (/ 0.64 , 0.47 , 0.47 /)
      RHOCCN(:) = (/ 2160. , 2000. , 1750. /)
   CASE ('CAMS_JPP')
! sea-salt, sulfate, hydrophilic (GADS data)
      RCCN(:)      = (/ 0.209E-6 , 0.0695E-6 , 0.0212E-6 /)
      LOGSIGCCN(:) = (/ 0.708    , 0.708     , 0.806     /)
      RHOCCN(:)    = (/ 2200.    , 1700.     , 1800.     /)
   CASE ('CAMS_ACC')
! sea-salt, sulfate, hydrophilic (GADS data)
      RCCN(:) = (/ 0.2E-6   , 0.5E-6    , 0.4E-6 /)
      LOGSIGCCN(:) = (/ 0.693    , 0.476     , 0.788  /)
      RHOCCN(:)    = (/ 2200.    , 1700.     , 1800.  /)
   CASE ('CAMS_AIT')
! sea-salt, sulfate, hydrophilic (GADS data)
      RCCN(:) = (/ 0.2E-6   , 0.05E-6   , 0.02E-6 /)
      LOGSIGCCN(:) = (/ 0.693    , 0.693     , 0.788   /)
      RHOCCN(:)    = (/ 2200.    , 1700.     , 1800.   /)
   CASE ('SIRTA')
      RCCN(:)   = (/ 0.153E-6 , 0.058E-6 , 0.763E-6 /)
      LOGSIGCCN(:) = (/ 0.846 , 0.57 , 0.34 /)
      RHOCCN(:) = (/ 1500. , 1500. , 1500. /)
   CASE ('CPS00')
      RCCN(:)   = (/ 0.0218E-6 , 0.058E-6 , 0.763E-6 /)
      LOGSIGCCN(:) = (/ 1.16 , 0.57 , 0.34 /)
      RHOCCN(:) = (/ 1500. , 1500. , 1500. /)
   CASE ('MOCAGE') ! ordre : sulfates, sels marins, BC+O
      RCCN(:)   = (/ 0.01E-6 , 0.05E-6 , 0.008E-6 /)
      LOGSIGCCN(:) = (/ 0.788 , 0.993 , 0.916 /)
      RHOCCN(:) = (/ 1000. , 2200. , 1000. /)
   CASE ('FREETROP') ! d'après Jaenicke 1993, aerosols troposphere libre, masse volumique typique
      RCCN(:)   = (/ 0.0035E-6 , 0.125E-6 , 0.26E-6 /)
      LOGSIGCCN(:) = (/ 0.645 , 0.253 , 0.425 /)
      RHOCCN(:) = (/ 1000. , 1000. , 1000. /)
   CASE DEFAULT
      call Print_msg(NVERB_FATAL,'GEN','INIT_AEROSOL_PROPERTIES','CCN_MODES must be JUNGFRAU, COPT, CAMS, CAMS_JPP,'// &
                                                                 'CAMS_ACC, CAMS_AIT, SIRTA, CPS00, MOCAGE or FREETROP')
   ENDSELECT

IF (LORILAM) THEN   ! for sulphates and hydrophilic aerosols
  IF (.NOT.(ALLOCATED(XRHOI))) ALLOCATE(XRHOI(NSP+NSOA+NCARB))
  XRHOI(:)          = 1.8e3
  XRHOI(JP_AER_H2O) = 1.0e3   ! water
  XRHOI(JP_AER_DST) = XDENSITY_DUST   ! water

  ! assumption: we choose to put sulfates in mode J and hydrophilics compounds in mode I
  IF (CRGUNIT=="MASS") THEN
  RCCN(2)   = XINIRADIUSJ * EXP(-3.*(LOG(XINISIGJ))**2) * 1E-6 ! Sulfates
  RCCN(3)   = XINIRADIUSI * EXP(-3.*(LOG(XINISIGI))**2) * 1E-6 ! Hydrophilic
  ELSE
  RCCN(2)   = XINIRADIUSJ * 1E-6  ! Sulfates
  RCCN(3)   = XINIRADIUSI * 1E-6  ! Hydrophilic

  END IF
  LOGSIGCCN(2) = LOG(XINISIGJ)
  LOGSIGCCN(3) = LOG(XINISIGI)
  RHOCCN(2)    = XRHOI(JP_AER_SO4) 
  RHOCCN(3)    = XRHOI(JP_AER_BC)
END IF
IF (LSALT) THEN ! for sea salts
  JMOD = 1
  IF (NMODE_SLT >= 5) JMOD = 5  ! choose mode 5 of Ovadnevaite 2014 (r = 0.415 µm, sigma = 1.85)
  IF (NMODE_SLT == 3) JMOD = 1  ! choose mode 1 of Vig01 (r = 0.2 µm, sigma = 1.9) or Sch04 (r = 0.14 µm, sigma = 1.59)
  IF (CRGUNITS=="MASS") THEN
  RCCN(1)   = XINIRADIUS_SLT(JMOD) * EXP(-3.*(LOG(XINISIG_SLT(JMOD)))**2) * 1E-6
  ELSE
  RCCN(1)   = XINIRADIUS_SLT(JMOD) * 1E-6
  END IF
  LOGSIGCCN(1) = LOG(XINISIG_SLT(JMOD))
  RHOCCN(1) = XDENSITY_SALT
END IF

!
  DO I=1, MIN(NMOD_CCN,3)
    XR_MEAN_CCN(I) = RCCN(I)
    XLOGSIG_CCN(I) = LOGSIGCCN(I)
    XRHO_CCN(I)    = RHOCCN(I)
  END DO
!
  IF (NMOD_CCN .EQ. 4) THEN
! default values as coarse sea salt mode
    XR_MEAN_CCN(4) = 1.75E-6
    XLOGSIG_CCN(4) = 0.708
    XRHO_CCN(4)    = 2200.   
    IF ((LSALT).AND.(NMODE_SLT > 5)) THEN
      IF (CRGUNITS=="MASS") THEN
       XR_MEAN_CCN(4) = XINIRADIUS_SLT(6) * EXP(-3.*(LOG(XINISIG_SLT(6)))**2) * 1E-6
      ELSE
       XR_MEAN_CCN(4) = XINIRADIUS_SLT(6) * 1E-6
      END IF
     XLOGSIG_CCN(4) = LOG(XINISIG_SLT(6))
     XRHO_CCN(4)    = XDENSITY_SALT
    END IF
  END IF
!
!
!		Compute CCN spectra parameters from CCN characteristics
!
!* INPUT : XBETAHEN_TEST is in 'percent' and XBETAHEN_MULTI in 'no units', 
!  XK... and XMU... are invariant
!
  IF (.NOT.(ALLOCATED(XKHEN_MULTI)))    ALLOCATE(XKHEN_MULTI(NMOD_CCN))  
  IF (.NOT.(ALLOCATED(XMUHEN_MULTI)))   ALLOCATE(XMUHEN_MULTI(NMOD_CCN))
  IF (.NOT.(ALLOCATED(XBETAHEN_MULTI))) ALLOCATE(XBETAHEN_MULTI(NMOD_CCN))
  IF (.NOT.(ALLOCATED(XLIMIT_FACTOR)))  ALLOCATE(XLIMIT_FACTOR(NMOD_CCN))
!
  IF (HINI_CCN == 'CCN') THEN
!!$    IF (LSCAV) THEN
!!$! Attention !
!!$      WRITE(UNIT=ILUOUT0,FMT='("You are using a numerical initialization &
!!$        &not depending on the aerosol properties, however you need it for &
!!$        &scavenging.                                                      &
!!$        &With LSCAV = true, HINI_CCN should be set to AER for consistency")')
!!$    END IF
! Numerical initialization without dependence on AP physical properties
    DO JMOD = 1, NMOD_CCN
      XKHEN_MULTI(JMOD)    = XKHEN_TMP(JMOD)  
      XMUHEN_MULTI(JMOD)   = XMUHEN_TMP(JMOD)
      XBETAHEN_MULTI(JMOD) = XBETAHEN_TMP(JMOD)*(100.)**2                    
! no units relative to smax 
      XLIMIT_FACTOR(JMOD)  = ( GAMMA_X0D(0.5*XKHEN_MULTI(JMOD)+1.)&
           *GAMMA_X0D(XMUHEN_MULTI(JMOD)-0.5*XKHEN_MULTI(JMOD)) ) &
           /( XBETAHEN_MULTI(JMOD)**(0.5*XKHEN_MULTI(JMOD))       &
           *GAMMA_X0D(XMUHEN_MULTI(JMOD)) ) ! N/C
    END DO
  ELSE IF (HINI_CCN == 'AER') THEN
! 
! Initialisation depending on aerosol physical properties
!
! First, computing k, mu, beta, and XLIMIT_FACTOR as in CPS2000 (eqs 9a-9c)
!
! XLIMIT_FACTOR replaces C, because C depends on the CCN number concentration
! which is therefore determined at each grid point and time step as 
! Nccn / XLIMIT_FACTOR
!
    DO JMOD = 1, NMOD_CCN 
!
!!$       SELECT CASE (HTYPE_CCN(JMOD))
!!$       CASE ('M') ! CCN marins
!!$          XKHEN0     = 3.251
!!$          XLOGSIG0   = 0.4835
!!$          XALPHA1    = -1.297
!!$          XMUHEN0    = 2.589
!!$          XALPHA2    = -1.511
!!$          XBETAHEN0  = 621.689
!!$          XR_MEAN0   = 0.133E-6
!!$          XALPHA3    = 3.002
!!$          XALPHA4    = 1.081
!!$          XALPHA5    = 1.0
!!$          XACTEMP0   = 290.16
!!$          XALPHA6    = 2.995
!!$       CASE ('C') ! CCN continentaux
!!$          XKHEN0     = 1.403
!!$          XLOGSIG0   = 1.16
!!$          XALPHA1    = -1.172
!!$          XMUHEN0    = 0.834
!!$          XALPHA2    = -1.350
!!$          XBETAHEN0  = 25.499
!!$          XR_MEAN0   = 0.0218E-6
!!$          XALPHA3    = 3.057
!!$          XALPHA4    = 4.092
!!$          XALPHA5    = 1.011
!!$          XACTEMP0   = 290.16
!!$          XALPHA6    = 3.076
!!$       CASE DEFAULT
!!$          call Print_msg(NVERB_FATAL,'GEN','INIT_AEROSOL_PROPERTIES','HTYPE_CNN(JMOD)=C or M must be specified'// &
!!$                                                                     ' in EXSEG1.nam for each CCN mode')
!!$       ENDSELECT
!!$!
!!$      XKHEN_MULTI(JMOD)   =   XKHEN0*(XLOGSIG_CCN(JMOD)/XLOGSIG0)**XALPHA1
!!$      XMUHEN_MULTI(JMOD)  =  XMUHEN0*(XLOGSIG_CCN(JMOD)/XLOGSIG0)**XALPHA2
!!$      XBETAHEN_MULTI(JMOD)=XBETAHEN0*(XR_MEAN_CCN(JMOD)/XR_MEAN0)**XALPHA3 &
!!$           * EXP( XALPHA4*((XLOGSIG_CCN(JMOD)/XLOGSIG0)-1.) )              &
!!$           * XFSOLUB_CCN**XALPHA5                                          &
!!$           * (XACTEMP_CCN/XACTEMP0)**XALPHA6
!!$      XLIMIT_FACTOR(JMOD)  = ( GAMMA_X0D(0.5*XKHEN_MULTI(JMOD)+1.) &
!!$           *GAMMA_X0D(XMUHEN_MULTI(JMOD)-0.5*XKHEN_MULTI(JMOD)) )  &
!!$           /( XBETAHEN_MULTI(JMOD)**(0.5*XKHEN_MULTI(JMOD))        &
!!$           *GAMMA_X0D(XMUHEN_MULTI(JMOD)) )
!!$
!!$
       CALL LIMA_INIT_CCN_ACTIVATION_SPECTRUM (HTYPE_CCN(JMOD),XR_MEAN_CCN(JMOD)*2.,EXP(XLOGSIG_CCN(JMOD)),X1,X2,X3,X4,X5)
       !
       ! LIMA_INIT_CCN_ACTIVATION_SPECTRUM returns X1=C/Nccn (instead of XLIMIT_FACTOR), X2=k, X3=mu, X4=beta, X5=kappa
       ! So XLIMIT_FACTOR = 1/X1
       ! Nc = Nccn/XLIMIT_FACTOR * S^k *F() = Nccn * X1 * S^k *F()
       !
       XLIMIT_FACTOR(JMOD) = 1./X1
       XKHEN_MULTI(JMOD)   = X2
       XMUHEN_MULTI(JMOD)  = X3
       XBETAHEN_MULTI(JMOD)= X4
    ENDDO
!
! These parameters are correct for a nucleation spectra 
! Nccn(Smax) = C Smax^k F(mu,k/2,1+k/2,-beta Smax^2)
! with Smax expressed in % (Smax=1 for a supersaturation of 1%).
!
! All the computations in LIMA are done for an adimensional Smax (Smax=0.01 for 
! a 1% supersaturation). So beta and C (XLIMIT_FACTOR) are changed :
! new_beta = beta * 100^2
! new_C = C * 100^k (ie XLIMIT_FACTOR = XLIMIT_FACTOR / 100^k)
!
    XBETAHEN_MULTI(:) = XBETAHEN_MULTI(:) * 10000
    XLIMIT_FACTOR(:)  = XLIMIT_FACTOR(:) / (100**XKHEN_MULTI(:))
  END IF
END IF ! NMOD_CCN > 0
!
!!!!!!!!!!!!!!!!
! IFN properties
!!!!!!!!!!!!!!!!
!
IF ( NMOD_IFN .GE. 1 ) THEN
  SELECT CASE (CIFN_SPECIES)
   CASE ('MOCAGE')
         NSPECIE = 4
         IF (.NOT.(ALLOCATED(XMDIAM_IFN))) ALLOCATE(XMDIAM_IFN(NSPECIE))
         IF (.NOT.(ALLOCATED(XSIGMA_IFN))) ALLOCATE(XSIGMA_IFN(NSPECIE))
         IF (.NOT.(ALLOCATED(XRHO_IFN)))   ALLOCATE(XRHO_IFN(NSPECIE))
         XMDIAM_IFN = (/ 0.05E-6 , 3.E-6 , 0.016E-6 , 0.016E-6 /)
         XSIGMA_IFN = (/ 2.4 , 1.6 , 2.5 , 2.5 /)
         XRHO_IFN   = (/ 2650. , 2650. , 1000. , 1000. /)
   CASE ('CAMS_JPP')
! sea-salt, sulfate, hydrophilic (GADS data)
! 2 species, dust-metallic and hydrophobic (as BC)
! (Phillips et al. 2013 and GADS data)
      NSPECIE = 4 ! DM1, DM2, BC, BIO+(O)
      IF (.NOT.(ALLOCATED(XMDIAM_IFN))) ALLOCATE(XMDIAM_IFN(NSPECIE))
      IF (.NOT.(ALLOCATED(XSIGMA_IFN))) ALLOCATE(XSIGMA_IFN(NSPECIE))
      IF (.NOT.(ALLOCATED(XRHO_IFN)))   ALLOCATE(XRHO_IFN(NSPECIE))
      XMDIAM_IFN = (/0.8E-6, 3.0E-6, 0.025E-6, 0.2E-6/)
      XSIGMA_IFN = (/2.0, 2.15, 2.0, 1.6 /)
      XRHO_IFN   = (/2600., 2600., 1000., 1500./) 
   CASE ('CAMS_ACC')
! sea-salt, sulfate, hydrophilic (GADS data)
! 2 species, dust-metallic and hydrophobic (as BC)
! (Phillips et al. 2013 and GADS data)
      NSPECIE = 4 ! DM1, DM2, BC, BIO+(O)
      IF (.NOT.(ALLOCATED(XMDIAM_IFN))) ALLOCATE(XMDIAM_IFN(NSPECIE))
      IF (.NOT.(ALLOCATED(XSIGMA_IFN))) ALLOCATE(XSIGMA_IFN(NSPECIE))
      IF (.NOT.(ALLOCATED(XRHO_IFN)))   ALLOCATE(XRHO_IFN(NSPECIE))
      XMDIAM_IFN = (/0.8E-6, 3.0E-6, 0.04E-6, 0.8E-6 /)
      XSIGMA_IFN = (/2.0,    2.15,   2.0,     2.2    /)
      XRHO_IFN   = (/2600.,  2600.,  1000.,   2000.  /)
   CASE ('CAMS_AIT')
! sea-salt, sulfate, hydrophilic (GADS data)
! 2 species, dust-metallic and hydrophobic (as BC)
! (Phillips et al. 2013 and GADS data)
      NSPECIE = 4 ! DM1, DM2, BC, BIO+(O)
      IF (.NOT.(ALLOCATED(XMDIAM_IFN))) ALLOCATE(XMDIAM_IFN(NSPECIE))
      IF (.NOT.(ALLOCATED(XSIGMA_IFN))) ALLOCATE(XSIGMA_IFN(NSPECIE))
      IF (.NOT.(ALLOCATED(XRHO_IFN)))   ALLOCATE(XRHO_IFN(NSPECIE))
      XMDIAM_IFN = (/0.8E-6, 3.0E-6, 0.04E-6, 0.04E-6/)
      XSIGMA_IFN = (/2.0,    2.15,   2.0,     2.2 /)
      XRHO_IFN   = (/2600.,  2600.,  1000.,   1800./)
   CASE DEFAULT
      IF (NPHILLIPS == 8) THEN
! 4 species, according to Phillips et al. 2008
         NSPECIE = 4
         IF (.NOT.(ALLOCATED(XMDIAM_IFN))) ALLOCATE(XMDIAM_IFN(NSPECIE))
         IF (.NOT.(ALLOCATED(XSIGMA_IFN))) ALLOCATE(XSIGMA_IFN(NSPECIE))
         IF (.NOT.(ALLOCATED(XRHO_IFN)))   ALLOCATE(XRHO_IFN(NSPECIE))
         XMDIAM_IFN = (/0.8E-6, 3.0E-6, 0.2E-6, 0.2E-6/)
         XSIGMA_IFN = (/1.9, 1.6, 1.6, 1.6 /)
         XRHO_IFN   = (/2300., 2300., 1860., 1500./)
      ELSE IF (NPHILLIPS == 13) THEN
! 4 species, according to Phillips et al. 2013
         NSPECIE = 4
         IF (.NOT.(ALLOCATED(XMDIAM_IFN))) ALLOCATE(XMDIAM_IFN(NSPECIE))
         IF (.NOT.(ALLOCATED(XSIGMA_IFN))) ALLOCATE(XSIGMA_IFN(NSPECIE))
         IF (.NOT.(ALLOCATED(XRHO_IFN)))   ALLOCATE(XRHO_IFN(NSPECIE))
         XMDIAM_IFN = (/0.8E-6, 3.0E-6, 90.E-9, 0.163E-6/)
         XSIGMA_IFN = (/1.9, 1.6, 1.6, 2.54 /)
         XRHO_IFN   = (/2300., 2300., 1860., 1000./)
      END IF
   ENDSELECT

IF (LORILAM) THEN
! assumption: only the aitken mode is considered as ifn
  IF (CRGUNIT=="MASS") THEN
  XMDIAM_IFN(3)   = 2 * XINIRADIUSI * EXP(-3.*(LOG(XINISIGI))**2) * 1E-6
  XMDIAM_IFN(4)   = 2 * XINIRADIUSI * EXP(-3.*(LOG(XINISIGI))**2) * 1E-6
  ELSE
  XMDIAM_IFN(3)   = 2 * XINIRADIUSI * 1E-6
  XMDIAM_IFN(4)   = 2 * XINIRADIUSI * 1E-6
  END IF
  XSIGMA_IFN(3) = LOG(XINISIGJ)
  XSIGMA_IFN(4) = LOG(XINISIGJ)
  XRHO_IFN(3)    = XRHOI(JP_AER_BC) 
  XRHO_IFN(4)    = XRHOI(JP_AER_OC)
END IF

IF (LDUST) THEN
! assumption: we considered the two finest dust modes as ifn
  DO JMOD = 1,2
  IF (CRGUNITD=="MASS") THEN
    XMDIAM_IFN(JMOD) = 2 * XINIRADIUS(JPDUSTORDER(JMOD)) * EXP(-3.*(LOG(XINISIG(JPDUSTORDER(JMOD))))**2) * 1E-6 
  ELSE
    XMDIAM_IFN(JMOD) = 2 * XINIRADIUS(JPDUSTORDER(JMOD)) * 1E-6 
  END IF
  XSIGMA_IFN(JMOD) = LOG(XINISIG(JPDUSTORDER(JMOD)))
  XRHO_IFN(JMOD) = XDENSITY_DUST
  ENDDO
END IF
!
! internal mixing
!
   IF (.NOT.(ALLOCATED(XFRAC))) ALLOCATE(XFRAC(NSPECIE,NMOD_IFN))
   XFRAC(:,:)=0. 
   SELECT CASE (CINT_MIXING)
   CASE ('DM1')
      XFRAC(1,:)=1.
   CASE ('DM2')
      XFRAC(2,:)=1.
   CASE ('BC')
      XFRAC(3,:)=1.
   CASE ('O')
      XFRAC(4,:)=1.
   CASE ('CAMS')
      XFRAC(1,1)=0.99
      XFRAC(2,1)=0.01
      XFRAC(3,1)=0.
      XFRAC(4,1)=0.
      XFRAC(1,2)=0.
      XFRAC(2,2)=0.
      XFRAC(3,2)=0.5
      XFRAC(4,2)=0.5
   CASE ('CAMS_JPP')
      XFRAC(1,1)=1.0
      XFRAC(2,1)=0.0
      XFRAC(3,1)=0.0
      XFRAC(4,1)=0.0
      XFRAC(1,2)=0.0
      XFRAC(2,2)=0.0
      XFRAC(3,2)=0.5
      XFRAC(4,2)=0.5
   CASE ('CAMS_ACC')
      XFRAC(1,1)=1.0
      XFRAC(2,1)=0.0
      XFRAC(3,1)=0.0
      XFRAC(4,1)=0.0
      XFRAC(1,2)=0.0
      XFRAC(2,2)=0.0
      XFRAC(3,2)=0.0
      XFRAC(4,2)=1.0
   CASE ('CAMS_AIT')
      XFRAC(1,1)=1.0
      XFRAC(2,1)=0.0
      XFRAC(3,1)=0.0
      XFRAC(4,1)=0.0
      XFRAC(1,2)=0.0
      XFRAC(2,2)=0.0
      XFRAC(3,2)=0.0
      XFRAC(4,2)=1.0
   CASE ('MOCAGE')
      XFRAC(1,1)=1.
      XFRAC(2,1)=0.
      XFRAC(3,1)=0.
      XFRAC(4,1)=0.
      XFRAC(1,2)=0.
      XFRAC(2,2)=0.
      XFRAC(3,2)=0.7
      XFRAC(4,2)=0.3
   CASE DEFAULT
      XFRAC(1,:)=0.6
      XFRAC(2,:)=0.009
      XFRAC(3,:)=0.33
      XFRAC(4,:)=0.06
   ENDSELECT
!
! Phillips 08 alpha (table 1) 
   IF (.NOT.(ALLOCATED(XFRAC_REF))) ALLOCATE(XFRAC_REF(4))
      IF (NPHILLIPS == 13) THEN
         XFRAC_REF(1)=0.66
         XFRAC_REF(2)=0.66
         XFRAC_REF(3)=0.31
         XFRAC_REF(4)=0.03
      ELSE IF (NPHILLIPS == 8) THEN
         XFRAC_REF(1)=0.66
         XFRAC_REF(2)=0.66
         XFRAC_REF(3)=0.28
         XFRAC_REF(4)=0.06
      END IF
!
END IF ! NMOD_IFN > 0
! 
END SUBROUTINE INIT_AEROSOL_PROPERTIES