diff --git a/src/MNH/aer2lima.f90 b/src/MNH/aer2lima.f90 index e53c2c91d1157053aae740a38236ee066765c4b5..2c38baf74abdd4c5db5cebcc108e4c67d5e55ac1 100644 --- a/src/MNH/aer2lima.f90 +++ b/src/MNH/aer2lima.f90 @@ -77,7 +77,6 @@ USE MODD_CH_M9_n, ONLY : CNAMES USE MODE_AERO_PSD USE MODE_SALT_PSD USE MODE_DUST_PSD -USE MODI_CH_AER_EQSAM USE MODI_DUSTLFI_n USE MODI_SALTLFI_n ! @@ -93,6 +92,7 @@ REAL, DIMENSION(:,:,:), INTENT(IN) :: PRHODREF, PRV, PPABST, PTHT, PZZ REAL, DIMENSION(SIZE(PSVT,1), SIZE(PSVT,2), SIZE(PSVT,3), NSP+NCARB+NSOA,JPMODE) :: ZCTOTA REAL, DIMENSION(SIZE(PSVT,1), SIZE(PSVT,2), SIZE(PSVT,3)) :: ZSUM, ZSUM2, ZRATH2O, ZRATSO4, ZRATDST +REAL, DIMENSION(SIZE(PSVT,1), SIZE(PSVT,2), SIZE(PSVT,3)) :: ZRATBC, ZRATOC REAL, DIMENSION(SIZE(PSVT,1), SIZE(PSVT,2), SIZE(PSVT,3),JPMODE) :: ZSIG_AER, ZRG_AER, ZN0_AER REAL, DIMENSION(SIZE(PSVT,1), SIZE(PSVT,2), SIZE(PSVT,3),NMODE_SLT) :: ZSIG_SLT, ZRG_SLT, ZN0_SLT REAL, DIMENSION(SIZE(PSVT,1), SIZE(PSVT,2), SIZE(PSVT,3),NMODE_DST) :: ZSIG_DST, ZRG_DST, ZN0_DST @@ -102,25 +102,14 @@ REAL, DIMENSION(SIZE(PSVT,1), SIZE(PSVT,2), SIZE(PSVT,3)) :: ZPKM, ZPKH2O, ZTE REAL, DIMENSION(SIZE(PSVT,1), SIZE(PSVT,2), SIZE(PSVT,3),6) :: ZAER REAL, DIMENSION(SIZE(PSVT,1), SIZE(PSVT,2), SIZE(PSVT,3),NSV) :: ZTOT REAL, DIMENSION(SIZE(PSVT,1), SIZE(PSVT,2), SIZE(PSVT,3),JPMODE) :: ZOM +REAL, DIMENSION(SIZE(PSVT,1), SIZE(PSVT,2), SIZE(PSVT,3)) :: ZU, ZN0_CCN REAL, DIMENSION(NSV) :: ZMI INTEGER :: JSV, JJ, JI, II, IJ, IK, JK, IDX -REAL :: ZCCNRADIUS, ZRATMASSH2O - -ZCCNRADIUS = 0.02 ! to suppress the aitken mode (µm) +REAL :: ZCCNRADIUS, ZRATMASSH2O, ZIFNRADIUS -IF ((CPROGRAM=="REAL ").OR.(CPROGRAM=="IDEAL ")) CMINERAL = "EQSAM" - -IF (CMINERAL == 'EQSAM') THEN - ZRATMASSH2O = 0.02 -ELSE - ZRATMASSH2O = 0. -END IF +ZCCNRADIUS = 0.04 ! to suppress the aitken mode (µm) +ZIFNRADIUS = 0.03 ! ! -ZMI(:) = 250. -ZMI(JP_AER_SO4) = 98. -ZMI(JP_AER_NO3) = 63. -ZMI(JP_AER_NH3) = 17. -ZMI(JP_AER_H2O) = 18. ZCCN_SUM(:,:,:,:) = 0. ZIFN_SUM(:,:,:,:) = 0. ! @@ -132,83 +121,17 @@ IF (LORILAM) THEN CALL PPP2AERO(PSVT(:,:,:,NSV_AERBEG:NSV_AEREND),PRHODREF,& PSIG3D=ZSIG_AER,PRG3D=ZRG_AER,PN3D=ZN0_AER,PCTOTA=ZCTOTA) -ZCTOTA=MAX(ZCTOTA,XMNH_TINY) - IF ((CPROGRAM=="REAL ").OR.(CPROGRAM=="IDEAL ")) THEN - JP_CH_HNO3 = 0 - JP_CH_NH3 = 0 - DO JJ=1,SIZE(CNAMES) - IF (CNAMES(JJ) == "HNO3") JP_CH_HNO3 = JJ - IF (CNAMES(JJ) == "NH3") JP_CH_NH3 = JJ - END DO - ZPKM(:,:,:) = 1E-3*PRHODREF(:,:,:) * 6.0221367E+23 / 28.9644 - ZPKH2O(:,:,:) = ZPKM(:,:,:)*1.6077*PRV(:,:,:) -! -! compute air temperature - ZTEMP(:,:,:) = PTHT(:,:,:)*((PPABST(:,:,:)/XP00)**(XRD/XCPD)) - -! compute relative humidity - ZSAT(:,:,:)=0.611*EXP(17.2694*(ZTEMP(:,:,:)-273.16)/(ZTEMP(:,:,:)-35.86)) - ZSAT(:,:,:)=ZSAT(:,:,:)*1000. - ZRH(:,:,:)=(ZPKH2O(:,:,:)/(ZPKM(:,:,:)*1.6077))*PPABST(:,:,:)/& - &(0.622+(ZPKH2O(:,:,:)/(ZPKM(:,:,:)*1.6077)))/ZSAT(:,:,:) - ZRH(:,:,:) = MIN(0.95, MAX(ZRH(:,:,:), .01)) ! until 0.95 thermodynamic code is not valid - -! Gas-particles equilibrium => H2O, SO4 aerosol mass - DO JI=1,NSP - ZTOT(:,:,:,JI)=ZCTOTA(:,:,:,JI,1)+ZCTOTA(:,:,:,JI,2) - ZTOT(:,:,:,JI) = MAX(ZTOT(:,:,:,JI),XMNH_TINY) - ENDDO -! - ZAER(:,:,:,:) = 0. - ZAER(:,:,:,1)=ZTOT(:,:,:,JP_AER_SO4) - -! conversion ppp to µg/m3 - IF (JP_CH_NH3 .NE. 0) ZAER(:,:,:,2)=PSVT(:,:,:,NSV_CHEMBEG-1+JP_CH_NH3)*XNH3*1E-3*PRHODREF(:,:,:)/XMD -! conversion ppp to µg/m3 - IF (JP_CH_HNO3 .NE. 0) ZAER(:,:,:,3)=PSVT(:,:,:,NSV_CHEMBEG-1+JP_CH_HNO3)*XHNO3*1E-3*PRHODREF(:,:,:)/XMD - ZAER(:,:,:,4)=ZTOT(:,:,:,JP_AER_H2O) - ZAER(:,:,:,5)=ZTOT(:,:,:,JP_AER_NO3) - ZAER(:,:,:,6)=ZTOT(:,:,:,JP_AER_NH3) - ZAER(:,:,:,:)=MAX(ZAER(:,:,:,:),0.) - - DO IK=1,SIZE(PSVT,3) - DO IJ=1,SIZE(PSVT,2) - CALL CH_AER_EQSAM(ZAER(:,IJ,IK,:),ZRH(:,IJ,IK),PPABST(:,IJ,IK),ZTEMP(:,IJ,IK)) - END DO - END DO - ZTOT(:,:,:,JP_AER_SO4) = ZAER(:,:,:,1) - ZTOT(:,:,:,JP_AER_H2O) = ZAER(:,:,:,4) - ZTOT(:,:,:,JP_AER_NO3) = ZAER(:,:,:,5) - ZTOT(:,:,:,JP_AER_NH3) = ZAER(:,:,:,6) - -! Balance the mass according to size - ZSUM(:,:,:) = 0. - ZOM(:,:,:,:) = 0. - DO JSV=1,JPMODE - DO JJ=1,NSP - ZSUM(:,:,:) = ZSUM(:,:,:) + ZCTOTA(:,:,:,JJ,JSV) - ZOM(:,:,:,JSV) = ZOM(:,:,:,JSV) + ZCTOTA(:,:,:,JJ,JSV) - ENDDO - ENDDO - - DO JSV=1,JPMODE - ZOM(:,:,:,JSV) = ZOM(:,:,:,JSV) / ZSUM(:,:,:) - ENDDO - - DO JSV=1,JPMODE - DO JJ=1,NSP - ZCTOTA(:,:,:,JJ,JSV)=MAX(XMNH_TINY,ZTOT(:,:,:,JJ)*ZOM(:,:,:,JSV)) - END DO - END DO +ZCTOTA=MAX(ZCTOTA,XMNH_TINY) -END IF !end part of init in case of IDEAL or REAL ! Compute mass ratio of sulfates, water and dusts DO JSV=1,JPMODE ZRATH2O(:,:,:) = 0. ZRATSO4(:,:,:) = 0. ZRATDST(:,:,:) = 0. + ZRATBC(:,:,:) = 0. + ZRATOC(:,:,:) = 0. ZSUM(:,:,:) = 0. ZSUM2(:,:,:) = 0. @@ -230,50 +153,50 @@ DO JSV=1,JPMODE ZRATDST(:,:,:) = ZCTOTA(:,:,:,JP_AER_DST,JSV) / ZSUM2(:,:,:) END WHERE + WHERE (ZSUM2(:,:,:) .GT. 0.) + ZRATBC(:,:,:) = ZCTOTA(:,:,:,JP_AER_BC,JSV) / ZSUM2(:,:,:) + END WHERE + + WHERE (ZSUM2(:,:,:) .GT. 0.) + ZRATOC(:,:,:) = ZCTOTA(:,:,:,JP_AER_OC,JSV) / ZSUM2(:,:,:) + END WHERE + ! #/m3 --> #/kg ZN0_AER(:,:,:,JSV) = ZN0_AER(:,:,:,JSV) / PRHODREF(:,:,:) ! CCN_FREE initialization ! aerosol radius greater than ZCCNRADIUS µm to be considers as CCN -! water mass greater than ZRATMASSH2O % +! Von der Emde and Wacker, 1993 +ZU(:,:,:)=LOG(ZCCNRADIUS/ZRG_AER(:,:,:,JSV)) / (SQRT(2.)*LOG(ZSIG_AER(:,:,:,JSV))) +ZN0_CCN(:,:,:) = 0.5*ZN0_AER(:,:,:,JSV) * (1 - ERFA(ZU(:,:,:))) IF (CACTCCN=="ABRK") THEN ! only one CCN_FREE mode (activation is not performed upon aerosol class but by physical paramters) ! - WHERE (ZRG_AER(:,:,:,JSV) .GT. ZCCNRADIUS) - ZCCN_SUM(:,:,:,1) = ZCCN_SUM(:,:,:,1) + ZN0_AER(:,:,:,JSV) - END WHERE +! WHERE (ZRG_AER(:,:,:,JSV) .GT. ZCCNRADIUS) + ZCCN_SUM(:,:,:,1) = ZCCN_SUM(:,:,:,1) + ZN0_CCN(:,:,:) +! END WHERE ELSE ! Sulfates IF (NMOD_CCN .GE. 2) THEN - WHERE ((ZRG_AER(:,:,:,JSV) .GT. ZCCNRADIUS).AND.(ZRATH2O(:,:,:).GT.ZRATMASSH2O)) - ZCCN_SUM(:,:,:,2) = ZCCN_SUM(:,:,:,2) + ZN0_AER(:,:,:,JSV) * ZRATSO4(:,:,:) - END WHERE + ! WHERE (ZRG_AER(:,:,:,JSV) .GT. ZCCNRADIUS) + ZCCN_SUM(:,:,:,2) = ZCCN_SUM(:,:,:,2) + ZN0_CCN(:,:,:) * ZRATSO4(:,:,:) + ! END WHERE END IF - ! Hyrdophylic aerosols + ! Hydrophylic aerosols IF (NMOD_CCN .GE. 3) THEN - WHERE ((ZRG_AER(:,:,:,JSV) .GT. ZCCNRADIUS).AND.(ZRATH2O(:,:,:).GT.ZRATMASSH2O)) - ZCCN_SUM(:,:,:,3) = ZCCN_SUM(:,:,:,3) + ZN0_AER(:,:,:,JSV) * (1.-ZRATSO4(:,:,:)) - END WHERE + ! WHERE (ZRG_AER(:,:,:,JSV) .GT. ZCCNRADIUS) + ZCCN_SUM(:,:,:,3) = ZCCN_SUM(:,:,:,3) + ZN0_CCN(:,:,:) * & + (1.-ZRATSO4(:,:,:)-ZRATDST(:,:,:)-ZRATBC(:,:,:)) + ! END WHERE END IF END IF ! IFN_FREE initialization - IF (LDUST) THEN - IDX=MIN(NMODE_DST,NMOD_IFN)+JSV - ELSE - IDX= 1 + JSV - END IF - - IF (IDX .LE. NMOD_IFN) THEN - ZIFN_SUM(:,:,:,IDX) = 0. - WHERE (ZRATH2O(:,:,:) .LE. ZRATMASSH2O) ! fraction of dust if low water - ZIFN_SUM(:,:,:,IDX) = ZIFN_SUM(:,:,:,IDX) + ZN0_AER(:,:,:,JSV) * ZRATDST(:,:,:) - END WHERE - END IF + ZIFN_SUM(:,:,:,2) = ZIFN_SUM(:,:,:,2) + ZN0_AER(:,:,:,JSV) * ZRATBC(:,:,:) END DO ELSE ! keep lima class intiatialization @@ -293,13 +216,7 @@ ELSE ! keep lima class intiatialization END IF END IF - IF (LDUST) THEN - IDX =MIN(NMODE_DST,NMOD_IFN)+1 - ELSE - IDX = 2 - END IF - - DO JI = IDX, NMOD_IFN + DO JI = 2, NMOD_IFN ZIFN_SUM(:,:,:,JI) = PSVT(:,:,:,NSV_LIMA_IFN_FREE+JI-1) + PSVT(:,:,:,NSV_LIMA_IFN_NUCL+JI-1) END DO @@ -318,14 +235,14 @@ IF (LSALT) THEN PSIG3D=ZSIG_SLT,PRG3D=ZRG_SLT,PN3D=ZN0_SLT) ! DO JSV=1,NMODE_SLT + ZU(:,:,:)=LOG(ZCCNRADIUS/ZRG_SLT(:,:,:,JSV)) / (SQRT(2.)*LOG(ZSIG_SLT(:,:,:,JSV))) + ZN0_CCN(:,:,:) = 0.5*ZN0_SLT(:,:,:,JSV) * (1 - ERFA(ZU(:,:,:))) ! #/m3 --> #/kg - ZN0_SLT(:,:,:,JSV) = ZN0_SLT(:,:,:,JSV) / PRHODREF(:,:,:) + ZN0_CCN(:,:,:) = ZN0_CCN(:,:,:) / PRHODREF(:,:,:) ! CCN_FREE initialization ! - WHERE (ZRG_SLT(:,:,:,JSV) .GT. ZCCNRADIUS) - ZCCN_SUM(:,:,:,1) = ZCCN_SUM(:,:,:,1) + ZN0_SLT(:,:,:,JSV) - END WHERE + ZCCN_SUM(:,:,:,1) = ZCCN_SUM(:,:,:,1) + ZN0_CCN(:,:,:) END DO ELSE ! keep lima class intiatialization for sea salt + ccn from orilam @@ -347,9 +264,15 @@ IF (LDUST) THEN CALL PPP2DUST(PSVT(:,:,:,NSV_DSTBEG:NSV_DSTEND),PRHODREF,& PSIG3D=ZSIG_DST,PRG3D=ZRG_DST,PN3D=ZN0_DST) ! - IDX = MIN(NMODE_DST-1,NMOD_IFN) - ZIFN_SUM(:,:,:,1) = ZN0_DST(:,:,:,2) / PRHODREF(:,:,:) - ZIFN_SUM(:,:,:,2) = ZN0_DST(:,:,:,3) / PRHODREF(:,:,:) + DO JSV=1,NMODE_DST + ZU(:,:,:)=LOG(ZIFNRADIUS/ZRG_DST(:,:,:,JSV)) / (SQRT(2.)*LOG(ZSIG_DST(:,:,:,JSV))) + ZN0_DST(:,:,:,JSV) = 0.5*ZN0_DST(:,:,:,JSV) * (1 - ERFA(ZU(:,:,:))) +! #/m3 --> #/kg + ZN0_DST(:,:,:,JSV) = ZN0_DST(:,:,:,JSV) / PRHODREF(:,:,:) +! IFN_FREE initialization (all dusts) + ZIFN_SUM(:,:,:,1) = ZIFN_SUM(:,:,:,1) + ZN0_DST(:,:,:,JSV) + + END DO ELSE ! keep lima class intiatialization IF (NMOD_IFN.GE.1) & @@ -368,5 +291,22 @@ IF (NMOD_IFN .GE. 1) THEN PSVT(:,:,:,NSV_LIMA_IFN_FREE+JI-1) = MAX(ZIFN_SUM(:,:,:,JI) - PSVT(:,:,:,NSV_LIMA_IFN_NUCL+JI-1), 0.) END DO END IF +! +CONTAINS + +FUNCTION ERFA(X) RESULT(PERF) +USE MODI_ERF +REAL, DIMENSION(:,:,:), INTENT(IN) :: X +REAL, DIMENSION(SIZE(X,1),SIZE(X,2),SIZE(X,3)) :: PERF +INTEGER :: II,IJ,IK +DO II=1,SIZE(X,1) +DO IJ=1,SIZE(X,2) +DO IK=1,SIZE(X,3) + PERF(II,IJ,IK) = erf(X(II,IJ,IK)) +ENDDO +ENDDO +ENDDO +END FUNCTION ERFA + ! END SUBROUTINE AER2LIMA diff --git a/src/MNH/mode_aero_psd.f90 b/src/MNH/mode_aero_psd.f90 index f03bdfcee1b9b84623a350d908857a96eff8ec4d..a5bf879e03c1d2b05586181bbb3ee903065d891c 100644 --- a/src/MNH/mode_aero_psd.f90 +++ b/src/MNH/mode_aero_psd.f90 @@ -257,7 +257,8 @@ END IF IF (LVARSIGI) THEN ! set M6 variable standard deviation IF ((CPROGRAM=="REAL ").OR.(CPROGRAM=="IDEAL ")) THEN - ZM(:,:,:,3)= ZM(:,:,:,1) * (ZINIRADIUSJ**6)*EXP(18. * LOG(XINISIGJ)**2) + ZM(:,:,:,3)= ZM(:,:,:,1) * (ZINIRADIUSI**6)*EXP(18. * LOG(XINISIGI)**2) + ZSIGMA(:,:,:) = XINISIGI ELSE ZM(:,:,:,3) = MAX(ZSV(:,:,:,JP_CH_M6i), XMNH_TINY) @@ -287,6 +288,7 @@ END IF IF (LVARSIGJ) THEN ! set M6 variable standard deviation IF ((CPROGRAM=="REAL ").OR.(CPROGRAM=="IDEAL ")) THEN ZM(:,:,:,6)= ZM(:,:,:,4) * (ZINIRADIUSJ**6)*EXP(18. * LOG(XINISIGJ)**2) + ZSIGMA(:,:,:) = XINISIGJ ELSE ZM(:,:,:,6) = MAX(ZSV(:,:,:,JP_CH_M6j), XMNH_TINY) @@ -313,7 +315,6 @@ ELSE ! fixed standard deviation IF(PRESENT(PSIG3D)) PSIG3D(:,:,:,2) = XINISIGJ END IF - !------------------------------------------------------------------------------- ! !* 6 calculate modal parameters from moments diff --git a/src/MNH/saltcamsn.f90 b/src/MNH/saltcamsn.f90 index 8e16d07f19c8afda78d5c2114fab13b8e9c116ab..f569a4b5c72562d9ffb522c10ca49f0c1d3a6748 100644 --- a/src/MNH/saltcamsn.f90 +++ b/src/MNH/saltcamsn.f90 @@ -161,14 +161,14 @@ ZMASS(:,:,:,5) = (PMASSCAMS(:,:,:,3) * RATIO_6) + ZMASS(:,:,:,5) ! Attribution M !======================================================== ! Adjust the mass / SSA emissions after a few hours -ZMASS(:,:,:,1) = MAX(ZMASS(:,:,:,1) * 0.3, 1E-18) -ZMASS(:,:,:,2) = MAX(ZMASS(:,:,:,2) * 0.1, 1E-17) -ZMASS(:,:,:,3) = MAX(ZMASS(:,:,:,3) * 0.5, 1E-16) -ZMASS(:,:,:,4) = MAX(ZMASS(:,:,:,4) * 0.3, 1E-15) -ZMASS(:,:,:,5) = MAX(ZMASS(:,:,:,5) * 0.1, 1E-14) +ZMASS(:,:,:,1) = MAX(ZMASS(:,:,:,1), 1E-18) +ZMASS(:,:,:,2) = MAX(ZMASS(:,:,:,2), 1E-17) +ZMASS(:,:,:,3) = MAX(ZMASS(:,:,:,3), 1E-16) +ZMASS(:,:,:,4) = MAX(ZMASS(:,:,:,4), 1E-15) +ZMASS(:,:,:,5) = MAX(ZMASS(:,:,:,5), 1E-14) IF (NMODE_SLT >= 6) ZMASS(:,:,:,6) = MAX(ZMASS(:,:,:,5) * 0.1, 1E-14) -IF (NMODE_SLT >= 7) ZMASS(:,:,:,7) = MAX(ZMASS(:,:,:,5) * 0.1, 1E-14) -IF (NMODE_SLT >= 8) ZMASS(:,:,:,8) = MAX(ZMASS(:,:,:,5) * 0.1, 1E-14) +IF (NMODE_SLT >= 7) ZMASS(:,:,:,7) = MAX(ZMASS(:,:,:,5) * 0.01, 1E-14) +IF (NMODE_SLT >= 8) ZMASS(:,:,:,8) = MAX(ZMASS(:,:,:,5) * 0.001, 1E-14) !======================================================== diff --git a/src/PHYEX/micro/mode_init_aerosol_properties.f90 b/src/PHYEX/micro/mode_init_aerosol_properties.f90 index 26c8babf6de20304a71d5d6fe3e0f6672348c288..d6920ff167d96a8bd1ef1b10ccccf9b50f7ff21a 100644 --- a/src/PHYEX/micro/mode_init_aerosol_properties.f90 +++ b/src/PHYEX/micro/mode_init_aerosol_properties.f90 @@ -165,7 +165,7 @@ IF (LORILAM) THEN ! for sulphates and hydrophilic aerosols 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 + ! assumption: we choose to put sulfates and hydrophilics compounds in mode J (accumulation) IF (CRGUNIT=="MASS") THEN RCCN(2) = XINIRADIUSJ * EXP(-3.*(LOG(XINISIGJ))**2) * 1E-6 ! Sulfates RCCN(3) = XINIRADIUSJ * EXP(-3.*(LOG(XINISIGJ))**2) * 1E-6 ! Hydrophilic @@ -177,7 +177,7 @@ IF (LORILAM) THEN ! for sulphates and hydrophilic aerosols LOGSIGCCN(2) = LOG(XINISIGJ) LOGSIGCCN(3) = LOG(XINISIGJ) RHOCCN(2) = XRHOI(JP_AER_SO4) - RHOCCN(3) = XRHOI(JP_AER_BC) + RHOCCN(3) = XRHOI(JP_AER_OC) END IF IF (LSALT) THEN ! for sea salts JMOD = 1 @@ -341,6 +341,14 @@ IF ( NMOD_IFN .GE. 1 ) THEN 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_PT') + NSPECIE = 4 ! Dust, Hydrophilic mixture , BC, BIO+(O) + IF (.NOT.(ASSOCIATED(XMDIAM_IFN))) CALL PARAM_LIMA_ALLOCATE('XMDIAM_IFN', NSPECIE) + IF (.NOT.(ASSOCIATED(XSIGMA_IFN))) CALL PARAM_LIMA_ALLOCATE('XSIGMA_IFN', NSPECIE) + IF (.NOT.(ASSOCIATED(XRHO_IFN))) CALL PARAM_LIMA_ALLOCATE('XRHO_IFN', NSPECIE) + XMDIAM_IFN = (/0.09E-6, 3.0E-6, 0.025E-6, 0.2E-6/) + XSIGMA_IFN = (/1.75, 2.15, 2.0, 1.6 /) + XRHO_IFN = (/1800., 2600., 1000., 1500./) CASE ('CAMS_JPP') ! sea-salt, sulfate, hydrophilic (GADS data) ! 2 species, dust-metallic and hydrophobic (as BC) @@ -397,17 +405,13 @@ IF ( NMOD_IFN .GE. 1 ) THEN ENDSELECT IF (LORILAM) THEN - IF (LDUST) THEN - IDX=MIN(NMODE_DST-1,NMOD_IFN) - ELSE - IDX= 2 - END IF + IDX=1 IF ((IDX+1) .LE. NMOD_IFN) THEN IF (CRGUNIT=="MASS") THEN - XMDIAM_IFN(IDX+1) = 2 * XINIRADIUSI * EXP(-3.*(LOG(XINISIGI))**2) * 1E-6 + XMDIAM_IFN(IDX+1) = 2 * XINIRADIUSJ * EXP(-3.*(LOG(XINISIGJ))**2) * 1E-6 ELSE - XMDIAM_IFN(IDX+1) = 2 * XINIRADIUSI * 1E-6 + XMDIAM_IFN(IDX+1) = 2 * XINIRADIUSJ * 1E-6 END IF XRHO_IFN(IDX+1) = XRHOI(JP_AER_BC) XSIGMA_IFN(IDX+1) = XINISIGI @@ -423,28 +427,18 @@ IF (LORILAM) THEN XSIGMA_IFN(IDX+2) = XINISIGJ END IF END IF - IF (LDUST) THEN - DO JMOD = 1,NMODE_DST - IF (CRGUNITD=="MASS") THEN - ZINIRADIUS(JMOD) = XINIRADIUS(JPDUSTORDER(JMOD)) * EXP(-3.*(LOG(XINISIG(JPDUSTORDER(JMOD))))**2) - ELSE - ZINIRADIUS(JMOD) = XINIRADIUS(JPDUSTORDER(JMOD)) - END IF - ENDDO - IDX = MIN(NMODE_DST-1,NMOD_IFN) - DO JMOD = 1,IDX - IF (JMOD==1) THEN - XMDIAM_IFN(JMOD) = 2 * ZINIRADIUS(2) * 1E-6 - XSIGMA_IFN(JMOD) = XINISIG(JPDUSTORDER(2)) + IF (CRGUNITD=="MASS") THEN + XMDIAM_IFN(1) = 2.*XINIRADIUS(JPDUSTORDER(3))*EXP(-3.*(LOG(XINISIG(JPDUSTORDER(3))))**2) ELSE - XMDIAM_IFN(JMOD) = 2 * ZINIRADIUS(3) * 1E-6 - XSIGMA_IFN(JMOD) = XINISIG(JPDUSTORDER(3)) + XMDIAM_IFN(1) = 2.*XINIRADIUS(JPDUSTORDER(3)) END IF + XSIGMA_IFN(1) = XINISIG(JPDUSTORDER(3)) + XRHO_IFN(1) = XDENSITY_DUST + - ENDDO END IF -! + ! internal mixing ! IF (.NOT.(ASSOCIATED(XFRAC))) CALL PARAM_LIMA_ALLOCATE('XFRAC', NSPECIE,NMOD_IFN) @@ -458,11 +452,15 @@ END IF XFRAC(3,:)=1. CASE ('O') XFRAC(4,:)=1. - CASE ('TULP') - XFRAC(1,1)=1. - XFRAC(1,2)=1. - XFRAC(3,3)=0.5 - XFRAC(4,3)=0.5 + CASE ('CAMS_PT') + XFRAC(1,1)=0.99 + XFRAC(2,1)=0.01 + XFRAC(3,1)=0.0 + XFRAC(4,1)=0.0 + XFRAC(1,2)=0. + XFRAC(2,2)=0. + XFRAC(3,2)=0.5 + XFRAC(4,2)=0.5 CASE ('CAMS') XFRAC(1,1)=0.99 XFRAC(2,1)=0.01