diff --git a/src/MNH/resolved_cloud.f90 b/src/MNH/resolved_cloud.f90 index a78ace969ea25378dbf3945f822977ea770627a3..5ec8f3fa4b40ba39fc5764adbc5a02f2ea9151d4 100644 --- a/src/MNH/resolved_cloud.f90 +++ b/src/MNH/resolved_cloud.f90 @@ -1389,13 +1389,14 @@ SELECT CASE ( HCLOUD ) IF (GELEC) THEN CALL LIMA (YLDIMPHYEX,CST, RAIN_ICE_DESCRN, RAIN_ICE_PARAMN, & ELEC_DESCR, ELEC_PARAM, & - TBUCONF,TBUDGETS,SIZE(TBUDGETS), & + TBUCONF,TBUDGETS,HACTCCN, SIZE(TBUDGETS), & PTSTEP, GELEC, HCLOUD, & PRHODREF, PEXNREF, ZDZZ, XTHVREFZ(IKB), & PRHODJ, PPABST, & NMOD_CCN, NMOD_IFN, NMOD_IMM, & PDTHRAD, PTHT, PRT, & PSVT(:,:,:,NSV_LIMA_BEG:NSV_LIMA_END), PW_ACT, & + PSVT,PSOLORG, PMI, & PTHS, PRS, PSVS(:,:,:,NSV_LIMA_BEG:NSV_LIMA_END), & PINPRC, PINDEP, PINPRR, ZINPRI, PINPRS, PINPRG, PINPRH, & PEVAP3D, PCLDFR, PICEFR, PRAINFR, ZFPR, & @@ -1405,25 +1406,27 @@ SELECT CASE ( HCLOUD ) ELSE CALL LIMA (YLDIMPHYEX,CST, RAIN_ICE_DESCRN, RAIN_ICE_PARAMN, & ELEC_DESCR, ELEC_PARAM, & - TBUCONF,TBUDGETS,SIZE(TBUDGETS), & + TBUCONF,TBUDGETS,HACTCCN,SIZE(TBUDGETS), & PTSTEP, GELEC, HCLOUD, & PRHODREF, PEXNREF, ZDZZ, XTHVREFZ(IKB), & PRHODJ, PPABST, & NMOD_CCN, NMOD_IFN, NMOD_IMM, & PDTHRAD, PTHT, PRT, & PSVT(:,:,:,NSV_LIMA_BEG:NSV_LIMA_END), PW_ACT, & + PSVT,PSOLORG, PMI, & PTHS, PRS, PSVS(:,:,:,NSV_LIMA_BEG:NSV_LIMA_END), & PINPRC, PINDEP, PINPRR, ZINPRI, PINPRS, PINPRG, PINPRH, & PEVAP3D, PCLDFR, PICEFR, PRAINFR, ZFPR, & ZLATHAM_IAGGS ) END IF ELSE - IF (OWARM) CALL LIMA_WARM(OACTIT, OSEDC, ORAIN, KSPLITR, PTSTEP, KMI, & + IF (OWARM) CALL LIMA_WARM(OACTIT, HACTCCN, OSEDC, ORAIN, KSPLITR, PTSTEP, KMI, & TPFILE, KRR, PZZ, PRHODJ, & PRHODREF, PEXNREF, PW_ACT, PPABST, & PDTHRAD, & PTHT, PRT, PSVT(:,:,:,NSV_LIMA_BEG:NSV_LIMA_END), & PTHS, PRS, PSVS(:,:,:,NSV_LIMA_BEG:NSV_LIMA_END), & + PSVT,PSOLORG, PMI, & PINPRC, PINPRR, PINDEP, PINPRR3D, PEVAP3D ) ! IF (NMOM_I.GE.1) CALL LIMA_COLD(CST, OSEDI, OHHONI, KSPLITG, PTSTEP, KMI, & @@ -1462,6 +1465,7 @@ SELECT CASE ( HCLOUD ) PDTHRAD, PW_ACT, & PRT, PRS, PSVT(:,:,:,NSV_LIMA_BEG:NSV_LIMA_END), & PSVS(:,:,:,NSV_LIMA_BEG:NSV_LIMA_END), & + HACTCCN, PSVT,PSOLORG, PMI, & PTHS, PSRCS, PCLDFR, PICEFR, PRC_MF, PRI_MF, PCF_MF ) ELSE CALL LIMA_ADJUST(KRR, KMI, TPFILE, & diff --git a/src/PHYEX/micro/lima.f90 b/src/PHYEX/micro/lima.f90 index 3d0b361705c622998abfc2b7339330dc451abe2a..d35f7858aa34d54861bf4f59b62bc9ba240ea5ac 100644 --- a/src/PHYEX/micro/lima.f90 +++ b/src/PHYEX/micro/lima.f90 @@ -4,13 +4,13 @@ !MNH_LIC for details. version 1. !----------------------------------------------------------------- ! ##################################################################### -SUBROUTINE LIMA ( D, CST, ICED, ICEP, ELECD, ELECP,BUCONF, TBUDGETS, KBUDGETS,& +SUBROUTINE LIMA ( D, CST, ICED, ICEP, ELECD, ELECP,BUCONF, TBUDGETS, HACTCCN, KBUDGETS,& PTSTEP, OELEC, HCLOUD, & PRHODREF, PEXNREF, PDZZ,PTHVREFZIKB, & PRHODJ, PPABST, & NCCN, NIFN, NIMM, & PDTHRAD, PTHT, PRT, PSVT, PW_NU, & - PTHS, PRS, PSVS, & + PAERO,PSOLORG, PMI, PTHS, PRS, PSVS, & PINPRC, PINDEP, PINPRR, PINPRI, PINPRS, PINPRG, PINPRH, & PEVAP3D, PCLDFR, PICEFR, PPRCFR, PFPR, & PLATHAM_IAGGS, PEFIELDW, PSV_ELEC_T, PSV_ELEC_S ) @@ -89,6 +89,7 @@ TYPE(RAIN_ICE_PARAM_t), INTENT(IN) :: ICEP TYPE(ELEC_PARAM_t), INTENT(IN) :: ELECP ! electrical parameters TYPE(ELEC_DESCR_t), INTENT(IN) :: ELECD ! electrical descriptive csts TYPE(TBUDGETCONF_t), INTENT(IN) :: BUCONF +CHARACTER(LEN=4), INTENT(IN) :: HACTCCN ! kind of CCN activation TYPE(TBUDGETDATA), DIMENSION(KBUDGETS), INTENT(INOUT) :: TBUDGETS CHARACTER (LEN=4), INTENT(IN) :: HCLOUD ! Kind of microphysical scheme INTEGER, INTENT(IN) :: KBUDGETS @@ -113,6 +114,11 @@ REAL, DIMENSION(:,:,:), INTENT(IN) :: PTHT ! Theta at time t REAL, DIMENSION(:,:,:,:), INTENT(IN) :: PRT ! Mixing ratios at time t REAL, DIMENSION(:,:,:,:), INTENT(IN) :: PSVT ! Concentrations at time t REAL, DIMENSION(:,:,:), INTENT(IN) :: PW_NU ! w for CCN activation + +REAL, DIMENSION(:,:,:,:), INTENT(INOUT) :: PAERO ! Aerosol concentration +REAL, DIMENSION(:,:,:,:), INTENT(IN) :: PSOLORG ![%] solubility fraction of soa +REAL, DIMENSION(:,:,:,:), INTENT(IN) :: PMI + ! REAL, DIMENSION(:,:,:), INTENT(INOUT) :: PTHS ! Theta source REAL, DIMENSION(:,:,:,:), INTENT(INOUT) :: PRS ! Mixing ratios sources @@ -1044,7 +1050,7 @@ CALL LIMA_NUCLEATION_PROCS (D, CST, BUCONF, TBUDGETS, KBUDGETS, PTSTEP, PRHODJ, & PRHODREF, ZEXN, PPABST, ZT, PDTHRAD, PW_NU, & ZTHT, ZRVT, ZRCT, ZRRT, ZRIT, ZRST, ZRGT, ZRHT, & - ZCCT, ZCRT, ZCIT, & + ZCCT, ZCRT, ZCIT, PAERO,PSOLORG, PMI, HACTCCN, & ZCCNFT, ZCCNAT, ZIFNFT, ZIFNNT, ZIMMNT, ZHOMFT, & PCLDFR, PICEFR, PPRCFR, & ZTOT_RV_HENU, ZTOT_RC_HINC, ZTOT_RI_HIND, ZTOT_RV_HONH) diff --git a/src/PHYEX/micro/lima_adjust_split.f90 b/src/PHYEX/micro/lima_adjust_split.f90 index 33d7255bcd0280b0e9cff5864df549a2074f48b8..b5e73dec727146f5a07186ec486cf028b3f472f0 100644 --- a/src/PHYEX/micro/lima_adjust_split.f90 +++ b/src/PHYEX/micro/lima_adjust_split.f90 @@ -10,6 +10,7 @@ SUBROUTINE LIMA_ADJUST_SPLIT(D, CST, BUCONF, TBUDGETS, KBUDGETS, PRHODREF, PRHODJ, PEXNREF, PSIGS, PMFCONV, & PPABST, PPABSTT, PZZ, PDTHRAD, PW_NU, & PRT, PRS, PSVT, PSVS, & + HACTCCN, PAERO,PSOLORG, PMI, & PTHS, PSRCS, PCLDFR, PICEFR, PRC_MF, PRI_MF, PCF_MF) ! ########################################################################### ! @@ -144,6 +145,11 @@ SUBROUTINE LIMA_ADJUST_SPLIT(D, CST, BUCONF, TBUDGETS, KBUDGETS, REAL, DIMENSION(:,:,:), INTENT(IN) :: PZZ ! REAL, DIMENSION(:,:,:), INTENT(IN) :: PDTHRAD ! Radiative temperature tendency REAL, DIMENSION(:,:,:), INTENT(IN) :: PW_NU ! updraft velocity used for + REAL, DIMENSION(:,:,:,:), INTENT(INOUT) :: PAERO ! Aerosol concentration + REAL, DIMENSION(:,:,:,:), INTENT(IN) :: PSOLORG ![%] solubility fraction of soa + REAL, DIMENSION(:,:,:,:), INTENT(IN) :: PMI + CHARACTER(LEN=4), INTENT(IN) :: HACTCCN ! kind of CCN activation + ! the nucleation param. ! REAL, DIMENSION(:,:,:,:), INTENT(IN) :: PRT ! m.r. at t ! @@ -424,6 +430,7 @@ SUBROUTINE LIMA_ADJUST_SPLIT(D, CST, BUCONF, TBUDGETS, KBUDGETS, ZRC2=PRCT CALL LIMA_CCN_ACTIVATION (CST, & PRHODREF, PEXNREF, PPABST, ZT2, PDTHRAD, PW_NU+ZW_MF, & + PAERO,PSOLORG, PMI, HACTCCN, & PTHT, ZRV2, ZRC2, PCCT, PRRT, PNFT, PNAT, & PCLDFR ) END IF diff --git a/src/PHYEX/micro/lima_warm.f90 b/src/PHYEX/micro/lima_warm.f90 index e4f1db134a5f1b3f1dad42bca2cf83a7eb048d88..caf74ddc2eea96bde0625f5047ee105d252222de 100644 --- a/src/PHYEX/micro/lima_warm.f90 +++ b/src/PHYEX/micro/lima_warm.f90 @@ -9,12 +9,13 @@ ! IMPLICIT NONE INTERFACE - SUBROUTINE LIMA_WARM (OACTIT, OSEDC, ORAIN, KSPLITR, PTSTEP, KMI, & + SUBROUTINE LIMA_WARM (OACTIT, HACTCCN, OSEDC, ORAIN, KSPLITR, PTSTEP, KMI, & TPFILE, KRR, PZZ, PRHODJ, & PRHODREF, PEXNREF, PW_NU, PPABST, & PTHM, & PTHT, PRT, PSVT, & PTHS, PRS, PSVS, & + PAERO,PSOLORG, PMI, & PINPRC, PINPRR, PINDEP, PINPRR3D, PEVAP3D ) ! USE MODD_IO, ONLY: TFILEDATA @@ -56,6 +57,10 @@ REAL, DIMENSION(:,:,:), INTENT(INOUT) :: PTHS ! Theta source REAL, DIMENSION(:,:,:,:), INTENT(INOUT) :: PRS ! m.r. source REAL, DIMENSION(:,:,:,NSV_LIMA_BEG:), INTENT(INOUT) :: PSVS ! Concentration sources ! +REAL, DIMENSION(:,:,:,:), INTENT(INOUT) :: PAERO ! Aerosol concentration +REAL, DIMENSION(:,:,:,:), INTENT(IN) :: PSOLORG ![%] solubility fraction of soa +REAL, DIMENSION(:,:,:,:), INTENT(IN) :: PMI +CHARACTER(LEN=4), INTENT(IN) :: HACTCCN ! kind of CCN activation ! ! REAL, DIMENSION(:,:), INTENT(INOUT) :: PINPRC ! Cloud instant precip @@ -68,12 +73,13 @@ END SUBROUTINE LIMA_WARM END INTERFACE END MODULE MODI_LIMA_WARM ! ##################################################################### - SUBROUTINE LIMA_WARM (OACTIT, OSEDC, ORAIN, KSPLITR, PTSTEP, KMI, & + SUBROUTINE LIMA_WARM (OACTIT, HACTCCN, OSEDC, ORAIN, KSPLITR, PTSTEP, KMI, & TPFILE, KRR, PZZ, PRHODJ, & PRHODREF, PEXNREF, PW_NU, PPABST, & PTHM, & PTHT, PRT, PSVT, & PTHS, PRS, PSVS, & + PAERO,PSOLORG, PMI, & PINPRC, PINPRR, PINDEP, PINPRR3D, PEVAP3D ) ! ##################################################################### ! @@ -195,6 +201,11 @@ REAL, DIMENSION(:,:,:), INTENT(INOUT) :: PTHS ! Theta source REAL, DIMENSION(:,:,:,:), INTENT(INOUT) :: PRS ! m.r. source REAL, DIMENSION(:,:,:,NSV_LIMA_BEG:), INTENT(INOUT) :: PSVS ! Concentration sources ! +REAL, DIMENSION(:,:,:,:), INTENT(INOUT) :: PAERO ! Aerosol concentration +REAL, DIMENSION(:,:,:,:), INTENT(IN) :: PSOLORG ![%] solubility fraction of soa +REAL, DIMENSION(:,:,:,:), INTENT(IN) :: PMI +CHARACTER(LEN=4), INTENT(IN) :: HACTCCN ! kind of CCN activation + ! ! REAL, DIMENSION(:,:), INTENT(INOUT) :: PINPRC ! Cloud instant precip @@ -377,6 +388,7 @@ IF ( LACTI .AND. NMOD_CCN > 0 .AND. .NOT. LSPRO ) THEN CALL LIMA_WARM_NUCL( OACTIT, PTSTEP, KMI, TPFILE, & PRHODREF, PEXNREF, PPABST, ZT, PTHM, PW_NU, & PRVT, PRCT, PRRT, & + PAERO,PSOLORG, PMI, HACTCCN, & PTHS, PRVS, PRCS, PCCS, ZNFS, ZNAS ) if ( lbudget_th ) call Budget_store_end( tbudgets(NBUDGET_TH), 'HENU', pths(:, :, :) * prhodj(:, :, :) ) diff --git a/src/PHYEX/micro/lima_warm_nucl.f90 b/src/PHYEX/micro/lima_warm_nucl.f90 index 2b4ce331ef47a3ea0ac34d839a5c021d9a5e7412..daffe09a10efdcb5304968947b6c70961f51e5f8 100644 --- a/src/PHYEX/micro/lima_warm_nucl.f90 +++ b/src/PHYEX/micro/lima_warm_nucl.f90 @@ -12,6 +12,7 @@ INTERFACE SUBROUTINE LIMA_WARM_NUCL( OACTIT, PTSTEP, KMI, TPFILE, & PRHODREF, PEXNREF, PPABST, PT, PTM, PW_NU, & PRVT, PRCT, PRRT, & + PAERO,PSOLORG, PMI, HACTCCN, & PTHS, PRVS, PRCS, PCCS, PNFS, PNAS ) ! USE MODD_IO, ONLY: TFILEDATA @@ -38,6 +39,11 @@ REAL, DIMENSION(:,:,:), INTENT(IN) :: PRVT ! Water vapor m.r. at t REAL, DIMENSION(:,:,:), INTENT(IN) :: PRCT ! Cloud water m.r. at t REAL, DIMENSION(:,:,:), INTENT(IN) :: PRRT ! Rain water m.r. at t ! +REAL, DIMENSION(:,:,:,:), INTENT(INOUT) :: PAERO ! Aerosol concentration +REAL, DIMENSION(:,:,:,:), INTENT(IN) :: PSOLORG ![%] solubility fraction of soa +REAL, DIMENSION(:,:,:,:), INTENT(IN) :: PMI +CHARACTER(LEN=4), INTENT(IN) :: HACTCCN ! kind of CCN activation + REAL, DIMENSION(:,:,:), INTENT(INOUT) :: PTHS ! Theta source REAL, DIMENSION(:,:,:), INTENT(INOUT) :: PRVS ! Water vapor m.r. source REAL, DIMENSION(:,:,:), INTENT(INOUT) :: PRCS ! Cloud water m.r. source @@ -53,6 +59,7 @@ END MODULE MODI_LIMA_WARM_NUCL SUBROUTINE LIMA_WARM_NUCL( OACTIT, PTSTEP, KMI, TPFILE, & PRHODREF, PEXNREF, PPABST, PT, PTM, PW_NU, & PRVT, PRCT, PRRT, & + PAERO,PSOLORG, PMI, HACTCCN, & PTHS, PRVS, PRCS, PCCS, PNFS, PNAS ) ! ####################################################################### ! @@ -116,6 +123,11 @@ USE MODD_LUNIT_n, ONLY: TLUOUT USE MODD_PARAMETERS, ONLY : JPHEXT, JPVEXT USE MODD_PARAM_LIMA USE MODD_PARAM_LIMA_WARM +USE MODD_CH_AEROSOL +USE MODD_DUST +USE MODD_SALT +USE MODI_CH_AER_ACTIVATION + USE MODE_IO_FIELD_WRITE, only: IO_Field_write use mode_tools, only: Countjv @@ -146,6 +158,11 @@ REAL, DIMENSION(:,:,:), INTENT(IN) :: PW_NU ! updraft velocity used fo REAL, DIMENSION(:,:,:), INTENT(IN) :: PRVT ! Water vapor m.r. at t REAL, DIMENSION(:,:,:), INTENT(IN) :: PRCT ! Cloud water m.r. at t REAL, DIMENSION(:,:,:), INTENT(IN) :: PRRT ! Rain water m.r. at t + +REAL, DIMENSION(:,:,:,:), INTENT(INOUT) :: PAERO ! Aerosol concentration +REAL, DIMENSION(:,:,:,:), INTENT(IN) :: PSOLORG ![%] solubility fraction of soa +REAL, DIMENSION(:,:,:,:), INTENT(IN) :: PMI +CHARACTER(LEN=4), INTENT(IN) :: HACTCCN ! kind of CCN activation ! REAL, DIMENSION(:,:,:), INTENT(INOUT) :: PTHS ! Theta source REAL, DIMENSION(:,:,:), INTENT(INOUT) :: PRVS ! Water vapor m.r. source @@ -192,6 +209,9 @@ REAL, DIMENSION(SIZE(PNFS,1),SIZE(PNFS,2),SIZE(PNFS,3)) & ! INTEGER, DIMENSION(:), ALLOCATABLE :: IVEC1 ! Vectors of indices for ! interpolations +REAL, DIMENSION(:), ALLOCATABLE :: ZMCN +REAL, DIMENSION(:) , ALLOCATABLE :: ZPABST ! Pressure +REAL, DIMENSION(:,:), ALLOCATABLE :: ZAERO, ZAEROS, ZSOLORG, ZMI ! ! REAL :: ZEPS ! molar mass ratio @@ -276,6 +296,12 @@ IF( INUCT >= 1 ) THEN ALLOCATE(IVEC1(INUCT)) ALLOCATE(ZRHODREF(INUCT)) ALLOCATE(ZEXNREF(INUCT)) + ALLOCATE(ZPABST(INUCT)) + ALLOCATE(ZAERO(INUCT,SIZE(PAERO,4))) + ALLOCATE(ZSMAX(INUCT)) + ALLOCATE(ZSOLORG(INUCT,SIZE(PSOLORG,4))) + ALLOCATE(ZMI(INUCT,SIZE(PMI,4))) + DO JL=1,INUCT ZRCS(JL) = PRCS(I1(JL),I2(JL),I3(JL)) ZCCS(JL) = PCCS(I1(JL),I2(JL),I3(JL)) @@ -286,6 +312,20 @@ IF( INUCT >= 1 ) THEN ZSW(JL) = PRVT(I1(JL),I2(JL),I3(JL))/ZRVSAT(I1(JL),I2(JL),I3(JL)) - 1. ZRHODREF(JL) = PRHODREF(I1(JL),I2(JL),I3(JL)) ZEXNREF(JL) = PEXNREF(I1(JL),I2(JL),I3(JL)) + ZPABST(JL) = PPABST(I1(JL),I2(JL),I3(JL)) + IF ((LORILAM).OR.(LDUST).OR.(LSALT)) THEN + ZAERO(JL,:) = PAERO(I1(JL),I2(JL),I3(JL),:) + ELSE + ZAERO(JL,:) = 0. + END IF + IF (LORILAM) THEN + ZSOLORG(JL,:) = PSOLORG(I1(JL),I2(JL),I3(JL),:) + ZMI(JL,:) = PMI(I1(JL),I2(JL),I3(JL),:) + ELSE + ZSOLORG(JL,:) = 0. + ZMI(JL,:) = 0. + END IF + DO JMOD = 1,NMOD_CCN ZNFS(JL,JMOD) = PNFS(I1(JL),I2(JL),I3(JL),JMOD) ZNAS(JL,JMOD) = PNAS(I1(JL),I2(JL),I3(JL),JMOD) @@ -297,6 +337,32 @@ IF( INUCT >= 1 ) THEN ZZW1(:) = 1.0/ZEPS + 1.0/ZZW1(:) & + (((XLVTT+(XCPV-XCL)*(ZZT(:)-XTT))/ZZT(:))**2)/(XCPD*XRV) ! Psi2 ! +IF ((HACTCCN == 'ABRK').AND.((LORILAM).OR.(LDUST).OR.(LSALT))) THEN !P.Tulet +! + ZZW1(:) = 0. + ZZW3(:) = 0. + ZSMAX(:) = 0. + + ALLOCATE(ZMCN(INUCT)) + ZMCN(:) = 0. !masse activée (non utilisée!!) + + !ZZW2 veetical activation velocity + CALL CH_AER_ACTIVATION(ZAERO, ZZT, ZZW2, ZZTDT, ZRHODREF, ZPABST,& + ZTMP(:,1), ZMCN, ZSOLORG, ZMI, ZSMAX) + + ZZW1(:) = MAX(ZTMP(:,1)/PTSTEP - ZNAS(:,1), 0.0 ) + PNAS(:,:,:,1) = PNAS(:,:,:,1) + & + UNPACK( ZZW1(:), MASK=GNUCT(:,:,:), FIELD=0.0 ) +! + ZW(:,:,:) = UNPACK( ZZW1(:),MASK=GNUCT(:,:,:),FIELD=0.0 ) + + !* prepare to update the cloud water concentration + ZZW6(:) = ZZW1(:) + DEALLOCATE(ZMCN) +! +ELSE + + ! !------------------------------------------------------------------------------- ! @@ -310,7 +376,7 @@ IF( INUCT >= 1 ) THEN ZVEC1(:) = MAX( 1.0001, MIN( REAL(NAHEN)-0.0001, XAHENINTP1 * ZZT(:) + XAHENINTP2 ) ) IVEC1(:) = INT( ZVEC1(:) ) ZVEC1(:) = ZVEC1(:) - REAL( IVEC1(:) ) - ALLOCATE(ZSMAX(INUCT)) +! ALLOCATE(ZSMAX(INUCT)) ! ! IF (OACTIT) THEN ! including a cooling rate @@ -452,6 +518,8 @@ IF( INUCT >= 1 ) THEN ZZW6(:) = ZZW6(:) + ZZW1(:) ENDDO ! +END IF ! CH_AER_ACTIVATION + ! Update PRVS, PRCS, PCCS, and PTHS ! ZZW1(:)=0. @@ -487,7 +555,6 @@ IF( INUCT >= 1 ) THEN DEALLOCATE(ZCCS) DEALLOCATE(ZRCS) DEALLOCATE(ZZT) - DEALLOCATE(ZSMAX) DEALLOCATE(ZZW1) DEALLOCATE(ZZW2) DEALLOCATE(ZZW3) @@ -499,6 +566,11 @@ IF( INUCT >= 1 ) THEN DEALLOCATE(ZRHODREF) DEALLOCATE(ZCHEN_MULTI) DEALLOCATE(ZEXNREF) + DEALLOCATE(ZPABST) + DEALLOCATE(ZAERO) + DEALLOCATE(ZSMAX) + DEALLOCATE(ZSOLORG) + DEALLOCATE(ZMI) ! END IF ! INUCT ! diff --git a/src/PHYEX/micro/mode_init_aerosol_properties.f90 b/src/PHYEX/micro/mode_init_aerosol_properties.f90 index 8664af9f3519e53e54e1edbeb3684d05e92dda1a..26c8babf6de20304a71d5d6fe3e0f6672348c288 100644 --- a/src/PHYEX/micro/mode_init_aerosol_properties.f90 +++ b/src/PHYEX/micro/mode_init_aerosol_properties.f90 @@ -94,7 +94,8 @@ REAL :: X1, X2, X3, X4, X5 ! 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 +INTEGER :: II, IJ, IK, IDX +REAL, DIMENSION(NMODE_DST) :: ZINIRADIUS ! !------------------------------------------------------------------------------- ! @@ -167,20 +168,20 @@ IF (LORILAM) THEN ! for sulphates and hydrophilic aerosols ! 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 + RCCN(3) = XINIRADIUSJ * EXP(-3.*(LOG(XINISIGJ))**2) * 1E-6 ! Hydrophilic ELSE RCCN(2) = XINIRADIUSJ * 1E-6 ! Sulfates - RCCN(3) = XINIRADIUSI * 1E-6 ! Hydrophilic + RCCN(3) = XINIRADIUSJ * 1E-6 ! Hydrophilic END IF LOGSIGCCN(2) = LOG(XINISIGJ) - LOGSIGCCN(3) = LOG(XINISIGI) + LOGSIGCCN(3) = LOG(XINISIGJ) 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 >= 5) JMOD = 4 ! choose mode 4 of Ovadnevaite 2014 (r = 0.115 µm, sigma = 1.53) 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 @@ -396,30 +397,51 @@ IF ( NMOD_IFN .GE. 1 ) THEN ENDSELECT IF (LORILAM) THEN -! assumption: only the aitken mode is considered as ifn + IF (LDUST) THEN + IDX=MIN(NMODE_DST-1,NMOD_IFN) + ELSE + IDX= 2 + END IF + + IF ((IDX+1) .LE. NMOD_IFN) THEN 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 + XMDIAM_IFN(IDX+1) = 2 * XINIRADIUSI * EXP(-3.*(LOG(XINISIGI))**2) * 1E-6 ELSE - XMDIAM_IFN(3) = 2 * XINIRADIUSI * 1E-6 - XMDIAM_IFN(4) = 2 * XINIRADIUSI * 1E-6 + XMDIAM_IFN(IDX+1) = 2 * XINIRADIUSI * 1E-6 + END IF + XRHO_IFN(IDX+1) = XRHOI(JP_AER_BC) + XSIGMA_IFN(IDX+1) = XINISIGI + END IF + + IF ((IDX+2) .LE. NMOD_IFN) THEN + IF (CRGUNIT=="MASS") THEN + XMDIAM_IFN(IDX+2) = 2 * XINIRADIUSJ * EXP(-3.*(LOG(XINISIGJ))**2) * 1E-6 + ELSE + XMDIAM_IFN(IDX+2) = 2 * XINIRADIUSJ * 1E-6 + END IF + XRHO_IFN(IDX+2) = XRHOI(JP_AER_OC) + XSIGMA_IFN(IDX+2) = XINISIGJ END IF - XRHO_IFN(3) = XRHOI(JP_AER_BC) - XRHO_IFN(4) = XRHOI(JP_AER_OC) - XSIGMA_IFN(3) = XINISIGI - XSIGMA_IFN(4) = XINISIGI 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) = XINISIG(JPDUSTORDER(JMOD)) - XRHO_IFN(JMOD) = XDENSITY_DUST + 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)) + ELSE + XMDIAM_IFN(JMOD) = 2 * ZINIRADIUS(3) * 1E-6 + XSIGMA_IFN(JMOD) = XINISIG(JPDUSTORDER(3)) + END IF + ENDDO END IF ! @@ -436,6 +458,11 @@ 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') XFRAC(1,1)=0.99 XFRAC(2,1)=0.01 diff --git a/src/PHYEX/micro/mode_lima_ccn_activation.f90 b/src/PHYEX/micro/mode_lima_ccn_activation.f90 index 9153fd9f000ce3e5ad9f9bd117fd16f7776cab01..3a20104d354d7229ea38f467a81db7bb10297e8a 100644 --- a/src/PHYEX/micro/mode_lima_ccn_activation.f90 +++ b/src/PHYEX/micro/mode_lima_ccn_activation.f90 @@ -9,6 +9,7 @@ CONTAINS ! ############################################################################## SUBROUTINE LIMA_CCN_ACTIVATION (CST, & PRHODREF, PEXNREF, PPABST, PT, PDTHRAD, PW_NU, & + PAERO,PSOLORG, PMI, HACTCCN, & PTHT, PRVT, PRCT, PCCT, PRRT, PNFT, PNAT, & PCLDFR, PTOT_RV_HENU ) ! ############################################################################## @@ -76,6 +77,12 @@ USE MODD_PARAM_LIMA_WARM, ONLY: XWMIN, NAHEN, NHYP, XAHENINTP1, XAHENINTP2, XCST XHYPINTP1, XHYPINTP2, XTMIN, XHYPF32, XPSI3, XAHENG, XAHENG2, XPSI1, & XLBC, XLBEXC USE MODD_NEB_n, ONLY: LSUBG_COND +USE MODD_CH_AEROSOL +USE MODD_DUST +USE MODD_SALT +USE MODD_NSV +USE MODI_CH_AER_ACTIVATION + !USE MODE_IO_FIELD_WRITE, only: IO_Field_write use mode_tools, only: Countjv @@ -97,6 +104,11 @@ REAL, DIMENSION(:,:,:), INTENT(IN) :: PDTHRAD ! Radiative temperature te ! REAL, DIMENSION(:,:,:), INTENT(IN) :: PW_NU ! updraft velocity used for ! the nucleation param. +REAL, DIMENSION(:,:,:,:), INTENT(INOUT) :: PAERO ! Aerosol concentration +REAL, DIMENSION(:,:,:,:), INTENT(IN) :: PSOLORG ![%] solubility fraction of soa +REAL, DIMENSION(:,:,:,:), INTENT(IN) :: PMI +CHARACTER(LEN=4), INTENT(IN) :: HACTCCN ! kind of CCN activation + ! REAL, DIMENSION(:,:,:), INTENT(INOUT) :: PTHT ! Theta at t REAL, DIMENSION(:,:,:), INTENT(INOUT) :: PRVT ! Water vapor m.r. at t @@ -145,6 +157,8 @@ REAL, DIMENSION(SIZE(PNFT,1),SIZE(PNFT,2),SIZE(PNFT,3)) & ! INTEGER, DIMENSION(:), ALLOCATABLE :: IVEC1 ! Vectors of indices for ! interpolations +REAL, DIMENSION(:) , ALLOCATABLE :: ZPABST, ZMCN, ZNATOLD +REAL, DIMENSION(:,:), ALLOCATABLE :: ZAERO, ZSOLORG, ZMI ! ! REAL :: ZEPS ! molar mass ratio @@ -236,6 +250,11 @@ IF( INUCT >= 1 ) THEN ALLOCATE(IVEC1(INUCT)) ALLOCATE(ZRHODREF(INUCT)) ALLOCATE(ZEXNREF(INUCT)) + ALLOCATE(ZPABST(INUCT)) + ALLOCATE(ZAERO(INUCT,SIZE(PAERO,4))) + ALLOCATE(ZSOLORG(INUCT,SIZE(PSOLORG,4))) + ALLOCATE(ZMI(INUCT,SIZE(PMI,4))) + DO JL=1,INUCT ZRCT(JL) = PRCT(I1(JL),I2(JL),I3(JL))/ZCLDFR(I1(JL),I2(JL),I3(JL)) ZCCT(JL) = PCCT(I1(JL),I2(JL),I3(JL))/ZCLDFR(I1(JL),I2(JL),I3(JL)) @@ -246,6 +265,21 @@ IF( INUCT >= 1 ) THEN ZSW(JL) = PRVT(I1(JL),I2(JL),I3(JL))/ZRVSAT(I1(JL),I2(JL),I3(JL)) - 1. ZRHODREF(JL) = PRHODREF(I1(JL),I2(JL),I3(JL)) ZEXNREF(JL) = PEXNREF(I1(JL),I2(JL),I3(JL)) + ZPABST(JL) = PPABST(I1(JL),I2(JL),I3(JL)) + IF ((LORILAM).OR.(LDUST).OR.(LSALT)) THEN + ZAERO(JL,:) = PAERO(I1(JL),I2(JL),I3(JL),:) + ELSE + ZAERO(JL,:) = 0. + END IF + + IF (LORILAM) THEN + ZSOLORG(JL,:) = PSOLORG(I1(JL),I2(JL),I3(JL),:) + ZMI(JL,:) = PMI(I1(JL),I2(JL),I3(JL),:) + ELSE + ZSOLORG(JL,:) = 0. + ZMI(JL,:) = 0. + END IF + DO JMOD = 1,NMOD_CCN ZNFT(JL,JMOD) = PNFT(I1(JL),I2(JL),I3(JL),JMOD) ZNAT(JL,JMOD) = PNAT(I1(JL),I2(JL),I3(JL),JMOD) @@ -254,6 +288,41 @@ IF( INUCT >= 1 ) THEN ENDDO ENDDO ! +IF ((HACTCCN == 'ABRK').AND.((LORILAM).OR.(LDUST).OR.(LSALT))) THEN ! CCN activation from Abdul-Razack (only if prognostic aerosols) +! + ALLOCATE(ZMCN(INUCT)) + ALLOCATE(ZNATOLD(INUCT)) + ALLOCATE(ZSMAX(INUCT)) + + ZZW1(:) = 0. + ZZW2(:) = 0. + ZZW3(:) = 0. + ZSMAX(:) = 0. + + ZMCN(:) = 0. !masse activée (non utilisée!!) + + ZNATOLD(:) = ZNAT(:,1) + ! + !ZZW2 veetical activation velocity + + CALL CH_AER_ACTIVATION(ZAERO, ZZT, ZZW2, ZZTDT, ZRHODREF, ZPABST,& + ZNAT(:,1), ZMCN, ZSOLORG, ZMI, ZSMAX) + + ZZW1(:) = MAX(ZNATOLD(:)- ZNAT(:,1) , 0.0 ) +! + ZW(:,:,:) = UNPACK( ZZW1(:),MASK=GNUCT(:,:,:),FIELD=0.0 ) + PNAT(:,:,:,1) = PNAT(:,:,:,1) + ZW(:,:,:) + ! Je sais pas ce que c'est: + ZZW4(:) = 1. + ZZW5(:) = 1. + ! + !* prepare to update the cloud water concentration + ! + ZZW6(:) = ZZW1(:) + DEALLOCATE(ZMCN) + DEALLOCATE(ZNATOLD) +! +ELSE ! CCN activation from Cohard-Pinty ALLOCATE(ZSMAX(INUCT)) IF (LADJ) THEN ZZW1(:) = 1.0/ZEPS + 1.0/ZZW1(:) & @@ -416,6 +485,7 @@ IF( INUCT >= 1 ) THEN ! ZZW6(:) = ZZW6(:) + ZZW1(:) ENDDO +END IF ! AER_ACTIVATION ! ! Output tendencies ! @@ -470,6 +540,10 @@ IF( INUCT >= 1 ) THEN DEALLOCATE(ZRHODREF) DEALLOCATE(ZCHEN_MULTI) DEALLOCATE(ZEXNREF) + DEALLOCATE(ZPABST) + DEALLOCATE(ZAERO) + DEALLOCATE(ZSOLORG) + DEALLOCATE(ZMI) ! END IF ! INUCT ! diff --git a/src/PHYEX/micro/mode_lima_nucleation_procs.f90 b/src/PHYEX/micro/mode_lima_nucleation_procs.f90 index 7a70adf55443ad065d97e46b04548f0416f840d4..0f48596fd66cb5cd78be5b08023f7afb81b1b622 100644 --- a/src/PHYEX/micro/mode_lima_nucleation_procs.f90 +++ b/src/PHYEX/micro/mode_lima_nucleation_procs.f90 @@ -11,7 +11,7 @@ CONTAINS PTSTEP, PRHODJ, & PRHODREF, PEXNREF, PPABST, PT, PDTHRAD, PW_NU, & PTHT, PRVT, PRCT, PRRT, PRIT, PRST, PRGT, PRHT, & - PCCT, PCRT, PCIT, & + PCCT, PCRT, PCIT,PAERO,PSOLORG, PMI, HACTCCN, & PNFT, PNAT, PIFT, PINT, PNIT, PNHT, & PCLDFR, PICEFR, PPRCFR, & PTOT_RV_HENU, PTOT_RC_HINC, PTOT_RI_HIND, & @@ -78,6 +78,10 @@ REAL, DIMENSION(:,:,:), INTENT(IN) :: PPABST ! abs. pressure at time t REAL, DIMENSION(:,:,:), INTENT(IN) :: PT ! Temperature REAL, DIMENSION(:,:,:), INTENT(IN) :: PDTHRAD ! Radiative temperature tendency REAL, DIMENSION(:,:,:), INTENT(IN) :: PW_NU ! updraft velocity used for +REAL, DIMENSION(:,:,:,:), INTENT(INOUT) :: PAERO ! Aerosol concentration +REAL, DIMENSION(:,:,:,:), INTENT(IN) :: PSOLORG ![%] solubility fraction of soa +REAL, DIMENSION(:,:,:,:), INTENT(IN) :: PMI +CHARACTER(LEN=4), INTENT(IN) :: HACTCCN ! kind of CCN activation ! REAL, DIMENSION(:,:,:), INTENT(INOUT) :: PTHT ! Theta at t REAL, DIMENSION(:,:,:), INTENT(INOUT) :: PRVT ! Water vapor m.r. at t @@ -143,6 +147,7 @@ IF ( LACTI .AND. NMOD_CCN >=1 .AND. NMOM_C.GE.2) THEN CALL LIMA_CCN_ACTIVATION( CST, & PRHODREF, PEXNREF, PPABST, PT, PDTHRAD, PW_NU, & + PAERO, PSOLORG, PMI, HACTCCN, & PTHT, PRVT, PRCT, PCCT, PRRT, PNFT, PNAT, PCLDFR, & PTOT_RV_HENU ) diff --git a/src/PHYEX/micro/modi_lima.f90 b/src/PHYEX/micro/modi_lima.f90 index 74f5ba53b482491dfa36636c728b1761c53a6d01..13915f024706c952d8710812f4986dee1ce61a6f 100644 --- a/src/PHYEX/micro/modi_lima.f90 +++ b/src/PHYEX/micro/modi_lima.f90 @@ -3,13 +3,13 @@ MODULE MODI_LIMA IMPLICIT NONE INTERFACE ! - SUBROUTINE LIMA ( D, CST, ICED, ICEP, ELECD, ELECP, BUCONF, TBUDGETS, KBUDGETS,& + SUBROUTINE LIMA ( D, CST, ICED, ICEP, ELECD, ELECP, BUCONF, TBUDGETS, HACTCCN, KBUDGETS,& PTSTEP, OELEC, HCLOUD, & PRHODREF, PEXNREF, PDZZ, PTHVREFZIKB, & PRHODJ, PPABST, & NCCN, NIFN, NIMM, & PDTHRAD, PTHT, PRT, PSVT, PW_NU, & - PTHS, PRS, PSVS, & + PAERO,PSOLORG, PMI, PTHS, PRS, PSVS, & PINPRC, PINDEP, PINPRR, PINPRI, PINPRS, PINPRG, PINPRH, & PEVAP3D, PCLDFR, PICEFR, PPRCFR, PFPR, & PLATHAM_IAGGS, PEFIELDW, PSV_ELEC_T, PSV_ELEC_S ) @@ -31,6 +31,7 @@ TYPE(RAIN_ICE_PARAM_t), INTENT(IN) :: ICEP TYPE(ELEC_PARAM_t), INTENT(IN) :: ELECP ! electrical parameters TYPE(ELEC_DESCR_t), INTENT(IN) :: ELECD ! electrical descriptive csts TYPE(TBUDGETCONF_t), INTENT(IN) :: BUCONF +CHARACTER(LEN=4), INTENT(IN) :: HACTCCN ! kind of CCN activation TYPE(TBUDGETDATA), DIMENSION(KBUDGETS), INTENT(INOUT) :: TBUDGETS INTEGER, INTENT(IN) :: KBUDGETS ! @@ -54,7 +55,13 @@ REAL, DIMENSION(:,:,:), INTENT(IN) :: PDTHRAD ! dT/dt due to radiation REAL, DIMENSION(:,:,:), INTENT(IN) :: PTHT ! Theta at time t REAL, DIMENSION(:,:,:,:), INTENT(IN) :: PRT ! Mixing ratios at time t REAL, DIMENSION(:,:,:,:), INTENT(IN) :: PSVT ! Concentrations at time t + REAL, DIMENSION(:,:,:), INTENT(IN) :: PW_NU ! w for CCN activation +REAL, DIMENSION(:,:,:,:), INTENT(INOUT) :: PAERO ! Aerosol concentration +REAL, DIMENSION(:,:,:,:), INTENT(IN) :: PSOLORG ![%] solubility fraction of soa +REAL, DIMENSION(:,:,:,:), INTENT(IN) :: PMI + + ! REAL, DIMENSION(:,:,:), INTENT(INOUT) :: PTHS ! Theta source REAL, DIMENSION(:,:,:,:), INTENT(INOUT) :: PRS ! Mixing ratios sources diff --git a/src/PHYEX/micro/modi_lima_adjust_split.f90 b/src/PHYEX/micro/modi_lima_adjust_split.f90 index cc4920e2f6c3284d349fec561e1693b4856424a5..747a7a502d2079b142e41a8f759e657d62f9db56 100644 --- a/src/PHYEX/micro/modi_lima_adjust_split.f90 +++ b/src/PHYEX/micro/modi_lima_adjust_split.f90 @@ -11,6 +11,7 @@ INTERFACE PRHODREF, PRHODJ, PEXNREF, PSIGS, PMFCONV, & PPABST, PPABSTT, PZZ, PDTHRAD, PW_NU, & PRT, PRS, PSVT, PSVS, & + HACTCCN, PAERO,PSOLORG, PMI, & PTHS, PSRCS, PCLDFR, PICEFR, PRC_MF, PRI_MF, PCF_MF) ! !USE MODD_IO, ONLY: TFILEDATA @@ -49,6 +50,11 @@ REAL, DIMENSION(:,:,:), INTENT(IN) :: PZZ ! REAL, DIMENSION(:,:,:), INTENT(IN) :: PDTHRAD ! Radiative temperature tendency REAL, DIMENSION(:,:,:), INTENT(IN) :: PW_NU ! updraft velocity used for ! +REAL, DIMENSION(:,:,:,:), INTENT(INOUT) :: PAERO ! Aerosol concentration +REAL, DIMENSION(:,:,:,:), INTENT(IN) :: PSOLORG ![%] solubility fraction of soa +REAL, DIMENSION(:,:,:,:), INTENT(IN) :: PMI +CHARACTER(LEN=4), INTENT(IN) :: HACTCCN ! kind of CCN activation + REAL, DIMENSION(:,:,:,:), INTENT(IN) :: PRT ! m.r. at t ! REAL, DIMENSION(:,:,:,:), INTENT(INOUT) :: PRS ! m.r. source