diff --git a/src/MNH/ch_monitorn.f90 b/src/MNH/ch_monitorn.f90 index e4eb5b0d7c4c3ccc9d4630bd3af39a20d7a5e612..b61f19288e3472fd3542f6188ba7cd5b26472f24 100644 --- a/src/MNH/ch_monitorn.f90 +++ b/src/MNH/ch_monitorn.f90 @@ -392,6 +392,7 @@ REAL, DIMENSION(:,:), ALLOCATABLE :: ZRHOP, ZSOLORG REAL, DIMENSION(:), ALLOCATABLE :: ZSO4RAT REAL, DIMENSION(:), ALLOCATABLE :: ZJNUC, ZJ2RAT +REAL,DIMENSION(SIZE(XSVT,1),SIZE(XSVT,2),SIZE(XSVT,3),SIZE(XSVT,4)) :: ZSVT REAL,DIMENSION(SIZE(XSVT,1),SIZE(XSVT,2),SIZE(XSVT,3),NSV_AER) :: ZCWETAERO ! !------------------------------------------------------------------------------- @@ -608,6 +609,25 @@ ENDIF ! first time step ! ZDTSOLVER = PTSTEP / NCH_SUBSTEPS ! +!* 1.3 give minimum value and conserve mass for aerosols +! +! +IF (LORILAM) THEN + + IF (CPROGRAM/='DIAG ') THEN + DO JSV = 1, SIZE(XSVT,4) + ZSVT(:,:,:,JSV) = XRSVS(:,:,:,JSV) *PTSTEP / XRHODJ(:,:,:) + END DO + ELSE + DO JSV = 1, SIZE(XSVT,4) + ZSVT(:,:,:,JSV) = XSVT(:,:,:,JSV) + END DO + END IF + ZSVT(:,:,:,NSV_CHEMBEG:NSV_CHEMEND) = MAX(ZSVT(:,:,:,NSV_CHEMBEG:NSV_CHEMEND), XMNH_TINY) + ZSVT(:,:,:,NSV_AERBEG:NSV_AEREND) = MAX(ZSVT(:,:,:,NSV_AERBEG:NSV_AEREND), XMNH_TINY) +! +END IF +! !* 1.4 compute conversion factor ppv/m3 --> molec/cm3 ! ZDEN2MOL = 1E-6 * XAVOGADRO / XMD @@ -754,10 +774,10 @@ IF (LORILAM) THEN ! IF ((LSEDIMAERO).AND.(CPROGRAM/='DIAG ')) THEN CALL CH_AER_SEDIM_n(PTSTEP, & - XSVT(IIB:IIE,IJB:IJE,IKB:IKE,NSV_AERBEG:NSV_AEREND), & + ZSVT(IIB:IIE,IJB:IJE,IKB:IKE,NSV_AERBEG:NSV_AEREND), & XTHT(IIB:IIE,IJB:IJE,IKB:IKE), XRHODREF(IIB:IIE,IJB:IJE,IKB:IKE), & - XPABST(IIB:IIE,IJB:IJE,IKB:IKE), XVDEPAERO(IIB:IIE,IJB:IJE,:), & - XZZ(IIB:IIE,IJB:IJE,IKB:IKE), XSEDA(IIB:IIE,IJB:IJE,IKB:IKE,:)) + XPABST(IIB:IIE,IJB:IJE,IKB:IKE), XVDEPAERO(IIB:IIE,IJB:IJE,:), & + XZZ(IIB:IIE,IJB:IJE,IKB:IKE), XSEDA(IIB:IIE,IJB:IJE,IKB:IKE,:)) ENDIF ! implicit wet deposition IF ((LCH_CONV_SCAV).AND.(CPROGRAM/='DIAG ')) THEN @@ -766,7 +786,7 @@ IF (LORILAM) THEN END DO ZCWETAERO(:,:,:,:)= MAX(ZCWETAERO(:,:,:,:), XMNH_TINY) - CALL CH_AER_WETDEP_n(PTSTEP, XSVT(IIB:IIE,IJB:IJE,IKB:IKE,NSV_AERBEG:NSV_AEREND), & + CALL CH_AER_WETDEP_n(PTSTEP, ZSVT(IIB:IIE,IJB:IJE,IKB:IKE,NSV_AERBEG:NSV_AEREND), & ZCWETAERO(IIB:IIE,IJB:IJE,IKB:IKE,:), XRHODREF(IIB:IIE,IJB:IJE,IKB:IKE), & XSEDA(IIB:IIE,IJB:IJE,IKB:IKE,:)) ENDIF @@ -778,7 +798,7 @@ IF (LORILAM) THEN XRT(IIB:IIE,IJB:IJE,IKB:IKE,:), & XRRS(IIB:IIE,IJB:IJE,IKB:IKE,:), & XRHODJ(IIB:IIE,IJB:IJE,IKB:IKE), & - XSVT(IIB:IIE,IJB:IJE,IKB:IKE,:), & + ZSVT(IIB:IIE,IJB:IJE,IKB:IKE,:), & XMI(IIB:IIE,IJB:IJE,IKB:IKE,:), & XTHT(IIB:IIE,IJB:IJE,IKB:IKE), & XPABST(IIB:IIE,IJB:IJE,IKB:IKE), & @@ -788,7 +808,7 @@ IF (LORILAM) THEN ENDIF ! Update aerosol tendency before aerosol solver DO JSV = 1, SIZE(XSVT,4) - XRSVS(:,:,:,JSV) = XSVT(:,:,:,JSV) * XRHODJ(:,:,:) / PTSTEP + XRSVS(:,:,:,JSV) = ZSVT(:,:,:,JSV) * XRHODJ(:,:,:) / PTSTEP END DO ENDIF !