diff --git a/src/MNH/lima_cold_hom_nucl.f90 b/src/MNH/lima_cold_hom_nucl.f90 index 4007c1355ca200c23083f654577d539ab5c6d554..12242d7b7eb82286997f78f5d95a16eca4c2e4d8 100644 --- a/src/MNH/lima_cold_hom_nucl.f90 +++ b/src/MNH/lima_cold_hom_nucl.f90 @@ -91,7 +91,7 @@ END MODULE MODI_LIMA_COLD_HOM_NUCL !! C. Barthe * LACy* jan. 2014 add budgets !! B.Vie 10/2016 Bug zero division !! Philippe Wautelet: 05/2016-04/2018: new data structures and calls for I/O -!! +!! B.Vie 03/2020 Correction of budgets parallelization !------------------------------------------------------------------------------- ! !* 0. DECLARATIONS @@ -441,33 +441,33 @@ IF (INEGT.GT.0) THEN ZTHS(:) = ZTHS(:) + ZZW(:) * (ZLSFACT(:)-ZLVFACT(:)) ! f(L_s*(RHHONI)) ZCIS(:) = ZCIS(:) + ZZX(:) ! +! + ZW(:,:,:) = PRVS(:,:,:) + PRVS(:,:,:) = UNPACK( ZRVS(:),MASK=GNEGT(:,:,:),FIELD=ZW(:,:,:) ) + ZW(:,:,:) = PRIS(:,:,:) + PRIS(:,:,:) = UNPACK( ZRIS(:),MASK=GNEGT(:,:,:),FIELD=ZW(:,:,:) ) + ZW(:,:,:) = PTHS(:,:,:) + PTHS(:,:,:) = UNPACK( ZTHS(:),MASK=GNEGT(:,:,:),FIELD=ZW(:,:,:) ) + ZW(:,:,:) = PCIS(:,:,:) + PCIS(:,:,:) = UNPACK( ZCIS(:),MASK=GNEGT(:,:,:),FIELD=ZW(:,:,:) ) END IF ! OHHONI +END IF ! INEGT (exclude calls to BUDGET from INEGT test ! ! Budget storage - IF (NBUMOD==KMI .AND. LBU_ENABLE .AND. OHHONI .AND. NMOD_CCN.GT.0 ) THEN - IF (LBUDGET_TH) CALL BUDGET ( & - UNPACK(ZTHS(:),MASK=GNEGT(:,:,:),FIELD=PTHS)*PRHODJ(:,:,:),& - 4,'HONH_BU_RTH') - IF (LBUDGET_RV) CALL BUDGET ( & - UNPACK(ZRVS(:),MASK=GNEGT(:,:,:),FIELD=PRVS)*PRHODJ(:,:,:),& - 6,'HONH_BU_RRV') - IF (LBUDGET_RI) CALL BUDGET ( & - UNPACK(ZRIS(:),MASK=GNEGT(:,:,:),FIELD=PRIS)*PRHODJ(:,:,:),& - 9,'HONH_BU_RRI') - IF (LBUDGET_SV) THEN - CALL BUDGET ( UNPACK(ZCIS(:),MASK=GNEGT(:,:,:),FIELD=PCIS)*PRHODJ(:,:,:),& - 12+NSV_LIMA_NI,'HONH_BU_RSV') ! RCI - IF (NMOD_CCN.GE.1) THEN - DO JL=1, NMOD_CCN - CALL BUDGET ( UNPACK(ZNFS(:,JL),MASK=GNEGT(:,:,:),FIELD=PNFS(:,:,:,JL))*PRHODJ(:,:,:),& - 12+NSV_LIMA_CCN_FREE+JL-1,'HONH_BU_RSV') - END DO - CALL BUDGET ( UNPACK(ZZNHS(:),MASK=GNEGT(:,:,:),FIELD=ZNHS(:,:,:))*PRHODJ(:,:,:),& - 12+NSV_LIMA_HOM_HAZE,'HONH_BU_RSV') - - END IF - END IF +IF (NBUMOD==KMI .AND. LBU_ENABLE .AND. OHHONI .AND. NMOD_CCN.GT.0 ) THEN + IF (LBUDGET_TH) CALL BUDGET (PTHS(:,:,:)*PRHODJ(:,:,:),4,'HONH_BU_RTH') + IF (LBUDGET_RV) CALL BUDGET (PRVS(:,:,:)*PRHODJ(:,:,:),6,'HONH_BU_RRV') + IF (LBUDGET_RI) CALL BUDGET (PRIS(:,:,:)*PRHODJ(:,:,:),9,'HONH_BU_RRI') + IF (LBUDGET_SV) THEN + CALL BUDGET (PCIS(:,:,:)*PRHODJ(:,:,:),12+NSV_LIMA_NI,'HONH_BU_RSV') + IF (NMOD_CCN.GE.1) THEN + DO JL=1, NMOD_CCN + CALL BUDGET (PNFS(:,:,:,JL)*PRHODJ(:,:,:),12+NSV_LIMA_CCN_FREE+JL-1,'HONH_BU_RSV') + END DO + CALL BUDGET (PNHS(:,:,:)*PRHODJ(:,:,:),12+NSV_LIMA_HOM_HAZE,'HONH_BU_RSV') + END IF END IF +END IF ! ! !------------------------------------------------------------------------------- @@ -481,44 +481,48 @@ IF (INEGT.GT.0) THEN ! -> Pruppacher(1995) ! IF (LWARM) THEN - ZZW(:) = 0.0 - ZZX(:) = 0.0 - WHERE( (ZZT(:)<XTT-35.0) .AND. (ZCCT(:)>XCTMIN(2)) .AND. (ZRCT(:)>XRTMIN(2)) ) - ZLBDAC(:) = XLBC*ZCCT(:) / (ZRCT(:)) ! Lambda_c**3 - ZZX(:) = 1.0 / ( 1.0 + (XC_HONC/ZLBDAC(:))*PTSTEP* & - EXP( XTEXP1_HONC + ZTCELSIUS(:)*( & - XTEXP2_HONC + ZTCELSIUS(:)*( & - XTEXP3_HONC + ZTCELSIUS(:)*( & - XTEXP4_HONC + ZTCELSIUS(:)*XTEXP5_HONC))) ) )**XNUC - ZZW(:) = ZCCS(:) * (1.0 - ZZX(:)) ! CCHONI -! - ZCCS(:) = ZCCS(:) - ZZW(:) - ZCIS(:) = ZCIS(:) + ZZW(:) -! - ZZW(:) = ZRCS(:) * (1.0 - ZZX(:)) ! RCHONI -! - ZRCS(:) = ZRCS(:) - ZZW(:) - ZRIS(:) = ZRIS(:) + ZZW(:) - ZTHS(:) = ZTHS(:) + ZZW(:) * (ZLSFACT(:)-ZLVFACT(:)) ! f(L_f*(RCHONI)) - END WHERE -! + IF (INEGT.GT.0) THEN + ZZW(:) = 0.0 + ZZX(:) = 0.0 + WHERE( (ZZT(:)<XTT-35.0) .AND. (ZCCT(:)>XCTMIN(2)) .AND. (ZRCT(:)>XRTMIN(2)) ) + ZLBDAC(:) = XLBC*ZCCT(:) / (ZRCT(:)) ! Lambda_c**3 + ZZX(:) = 1.0 / ( 1.0 + (XC_HONC/ZLBDAC(:))*PTSTEP* & + EXP( XTEXP1_HONC + ZTCELSIUS(:)*( & + XTEXP2_HONC + ZTCELSIUS(:)*( & + XTEXP3_HONC + ZTCELSIUS(:)*( & + XTEXP4_HONC + ZTCELSIUS(:)*XTEXP5_HONC))) ) )**XNUC + ZZW(:) = ZCCS(:) * (1.0 - ZZX(:)) ! CCHONI + ! + ZCCS(:) = ZCCS(:) - ZZW(:) + ZCIS(:) = ZCIS(:) + ZZW(:) + ! + ZZW(:) = ZRCS(:) * (1.0 - ZZX(:)) ! RCHONI + ! + ZRCS(:) = ZRCS(:) - ZZW(:) + ZRIS(:) = ZRIS(:) + ZZW(:) + ZTHS(:) = ZTHS(:) + ZZW(:) * (ZLSFACT(:)-ZLVFACT(:)) ! f(L_f*(RCHONI)) + END WHERE + ! + ZW(:,:,:) = PRCS(:,:,:) + PRCS(:,:,:) = UNPACK( ZRCS(:),MASK=GNEGT(:,:,:),FIELD=ZW(:,:,:) ) + ZW(:,:,:) = PRIS(:,:,:) + PRIS(:,:,:) = UNPACK( ZRIS(:),MASK=GNEGT(:,:,:),FIELD=ZW(:,:,:) ) + ZW(:,:,:) = PTHS(:,:,:) + PTHS(:,:,:) = UNPACK( ZTHS(:),MASK=GNEGT(:,:,:),FIELD=ZW(:,:,:) ) + ZW(:,:,:) = PCCS(:,:,:) + PCCS(:,:,:) = UNPACK( ZCCS(:),MASK=GNEGT(:,:,:),FIELD=ZW(:,:,:) ) + ZW(:,:,:) = PCIS(:,:,:) + PCIS(:,:,:) = UNPACK( ZCIS(:),MASK=GNEGT(:,:,:),FIELD=ZW(:,:,:) ) + END IF ! Budget storage IF (NBUMOD==KMI .AND. LBU_ENABLE) THEN - IF (LBUDGET_TH) CALL BUDGET ( & - UNPACK(ZTHS(:),MASK=GNEGT(:,:,:),FIELD=PTHS)*PRHODJ(:,:,:),& - 4,'HONC_BU_RTH') - IF (LBUDGET_RC) CALL BUDGET ( & - UNPACK(ZRCS(:),MASK=GNEGT(:,:,:),FIELD=PRCS)*PRHODJ(:,:,:),& - 7,'HONC_BU_RRC') - IF (LBUDGET_RI) CALL BUDGET ( & - UNPACK(ZRIS(:),MASK=GNEGT(:,:,:),FIELD=PRIS)*PRHODJ(:,:,:),& - 9,'HONC_BU_RRI') - IF (LBUDGET_SV) THEN - CALL BUDGET ( UNPACK(ZCCS(:),MASK=GNEGT(:,:,:),FIELD=PCCS)*PRHODJ(:,:,:),& - 12+NSV_LIMA_NC,'HONC_BU_RSV') - CALL BUDGET ( UNPACK(ZCIS(:),MASK=GNEGT(:,:,:),FIELD=PCIS)*PRHODJ(:,:,:),& - 12+NSV_LIMA_NI,'HONC_BU_RSV') - END IF + IF (LBUDGET_TH) CALL BUDGET (PTHS(:,:,:)*PRHODJ(:,:,:),4,'HONC_BU_RTH') + IF (LBUDGET_RC) CALL BUDGET (PRCS(:,:,:)*PRHODJ(:,:,:),7,'HONC_BU_RRC') + IF (LBUDGET_RI) CALL BUDGET (PRIS(:,:,:)*PRHODJ(:,:,:),9,'HONC_BU_RRI') + IF (LBUDGET_SV) THEN + CALL BUDGET (PCCS(:,:,:)*PRHODJ(:,:,:),12+NSV_LIMA_NC,'HONC_BU_RSV') + CALL BUDGET (PCIS(:,:,:)*PRHODJ(:,:,:),12+NSV_LIMA_NI,'HONC_BU_RSV') + END IF END IF END IF ! @@ -533,31 +537,34 @@ END IF ! Compute the drop homogeneous nucleation source: RRHONG ! IF (LWARM .AND. LRAIN) THEN - ZZW(:) = 0.0 - WHERE( (ZZT(:)<XTT-35.0) .AND. (ZRRS(:)>XRTMIN(3)/PTSTEP) ) - ZZW(:) = ZRRS(:) ! Instantaneous freezing of the raindrops - ZRRS(:) = ZRRS(:) - ZZW(:) - ZRGS(:) = ZRGS(:) + ZZW(:) - ZTHS(:) = ZTHS(:) + ZZW(:)*(ZLSFACT(:)-ZLVFACT(:)) ! f(L_f*(RRHONG)) -! - ZCRS(:) = 0.0 ! No more raindrops when T<-35 C - ENDWHERE -! -! Budget storage + IF (INEGT.GT.0) THEN + ZZW(:) = 0.0 + WHERE( (ZZT(:)<XTT-35.0) .AND. (ZRRS(:)>XRTMIN(3)/PTSTEP) ) + ZZW(:) = ZRRS(:) ! Instantaneous freezing of the raindrops + ZRRS(:) = ZRRS(:) - ZZW(:) + ZRGS(:) = ZRGS(:) + ZZW(:) + ZTHS(:) = ZTHS(:) + ZZW(:)*(ZLSFACT(:)-ZLVFACT(:)) ! f(L_f*(RRHONG)) + ! + ZCRS(:) = 0.0 ! No more raindrops when T<-35 C + ENDWHERE + ! + ZW(:,:,:) = PRRS(:,:,:) + PRRS(:,:,:) = UNPACK( ZRRS(:),MASK=GNEGT(:,:,:),FIELD=ZW(:,:,:) ) + ZW(:,:,:) = PRGS(:,:,:) + PRGS(:,:,:) = UNPACK( ZRGS(:),MASK=GNEGT(:,:,:),FIELD=ZW(:,:,:) ) + ZW(:,:,:) = PTHS(:,:,:) + PTHS(:,:,:) = UNPACK( ZTHS(:),MASK=GNEGT(:,:,:),FIELD=ZW(:,:,:) ) + ZW(:,:,:) = PCRS(:,:,:) + PCRS(:,:,:) = UNPACK( ZCRS(:),MASK=GNEGT(:,:,:),FIELD=ZW(:,:,:) ) + END IF + ! Budget storage IF (NBUMOD==KMI .AND. LBU_ENABLE) THEN - IF (LBUDGET_TH) CALL BUDGET ( & - UNPACK(ZTHS(:),MASK=GNEGT(:,:,:),FIELD=PTHS)*PRHODJ(:,:,:),& - 4,'HONR_BU_RTH') - IF (LBUDGET_RR) CALL BUDGET ( & - UNPACK(ZRRS(:),MASK=GNEGT(:,:,:),FIELD=PRRS)*PRHODJ(:,:,:),& - 8,'HONR_BU_RRR') - IF (LBUDGET_RG) CALL BUDGET ( & - UNPACK(ZRGS(:),MASK=GNEGT(:,:,:),FIELD=PRGS)*PRHODJ(:,:,:),& - 11,'HONR_BU_RRG') - IF (LBUDGET_SV) THEN - CALL BUDGET ( UNPACK(ZCRS(:),MASK=GNEGT(:,:,:),FIELD=PCRS)*PRHODJ(:,:,:),& - 12+NSV_LIMA_NR,'HONR_BU_RSV') - END IF + IF (LBUDGET_TH) CALL BUDGET (PTHS(:,:,:)*PRHODJ(:,:,:),4,'HONR_BU_RTH') + IF (LBUDGET_RR) CALL BUDGET (PRRS(:,:,:)*PRHODJ(:,:,:),8,'HONR_BU_RRR') + IF (LBUDGET_RG) CALL BUDGET (PRGS(:,:,:)*PRHODJ(:,:,:),11,'HONR_BU_RRG') + IF (LBUDGET_SV) THEN + CALL BUDGET (PCRS(:,:,:)*PRHODJ(:,:,:),12+NSV_LIMA_NR,'HONR_BU_RSV') + END IF END IF END IF ! @@ -568,27 +575,7 @@ END IF !* 4. Unpack variables, clean ! ----------------------- ! -! -! End of homogeneous nucleation processes -! - ZW(:,:,:) = PRVS(:,:,:) - PRVS(:,:,:) = UNPACK( ZRVS(:),MASK=GNEGT(:,:,:),FIELD=ZW(:,:,:) ) - ZW(:,:,:) = PRCS(:,:,:) - PRCS(:,:,:) = UNPACK( ZRCS(:),MASK=GNEGT(:,:,:),FIELD=ZW(:,:,:) ) - ZW(:,:,:) = PRRS(:,:,:) - PRRS(:,:,:) = UNPACK( ZRRS(:),MASK=GNEGT(:,:,:),FIELD=ZW(:,:,:) ) - ZW(:,:,:) = PRIS(:,:,:) - PRIS(:,:,:) = UNPACK( ZRIS(:),MASK=GNEGT(:,:,:),FIELD=ZW(:,:,:) ) - ZW(:,:,:) = PRGS(:,:,:) - PRGS(:,:,:) = UNPACK( ZRGS(:),MASK=GNEGT(:,:,:),FIELD=ZW(:,:,:) ) - ZW(:,:,:) = PTHS(:,:,:) - PTHS(:,:,:) = UNPACK( ZTHS(:),MASK=GNEGT(:,:,:),FIELD=ZW(:,:,:) ) - ZW(:,:,:) = PCCS(:,:,:) - PCCS(:,:,:) = UNPACK( ZCCS(:),MASK=GNEGT(:,:,:),FIELD=ZW(:,:,:) ) - ZW(:,:,:) = PCRS(:,:,:) - PCRS(:,:,:) = UNPACK( ZCRS(:),MASK=GNEGT(:,:,:),FIELD=ZW(:,:,:) ) - ZW(:,:,:) = PCIS(:,:,:) - PCIS(:,:,:) = UNPACK( ZCIS(:),MASK=GNEGT(:,:,:),FIELD=ZW(:,:,:) ) +IF (INEGT.GT.0) THEN ! DEALLOCATE(ZRVT) DEALLOCATE(ZRCT) @@ -630,57 +617,6 @@ END IF DEALLOCATE(ZZX) DEALLOCATE(ZZY) ! -ELSE -! -! Advance the budget calls -! - IF (NBUMOD==KMI .AND. LBU_ENABLE) THEN - IF (LBUDGET_TH) THEN - ZW(:,:,:) = PTHS(:,:,:)*PRHODJ(:,:,:) - IF( OHHONI .AND. NMOD_CCN.GT.0 ) CALL BUDGET (ZW,4,'HONH_BU_RTH') - IF (LWARM) CALL BUDGET (ZW,4,'HONC_BU_RTH') - IF (LWARM .AND. LRAIN) CALL BUDGET (ZW,4,'HONR_BU_RTH') - ENDIF - IF (LBUDGET_RV) THEN - ZW(:,:,:) = PRVS(:,:,:)*PRHODJ(:,:,:) - IF( OHHONI .AND. NMOD_CCN.GT.0 ) CALL BUDGET (ZW,6,'HONH_BU_RRV') - ENDIF - IF (LBUDGET_RC) THEN - ZW(:,:,:) = PRCS(:,:,:)*PRHODJ(:,:,:) - IF (LWARM) CALL BUDGET (ZW,7,'HONC_BU_RRC') - ENDIF - IF (LBUDGET_RR) THEN - ZW(:,:,:) = PRRS(:,:,:)*PRHODJ(:,:,:) - IF (LWARM .AND. LRAIN) CALL BUDGET (ZW,8,'HONR_BU_RRR') - ENDIF - IF (LBUDGET_RI) THEN - ZW(:,:,:) = PRIS(:,:,:)*PRHODJ(:,:,:) - IF( OHHONI .AND. NMOD_CCN.GT.0 ) CALL BUDGET (ZW,9,'HONH_BU_RRI') - IF (LWARM) CALL BUDGET (ZW,9,'HONC_BU_RRI') - ENDIF - IF (LBUDGET_RG) THEN - ZW(:,:,:) = PRGS(:,:,:)*PRHODJ(:,:,:) - IF (LWARM .AND. LRAIN) CALL BUDGET (ZW,11,'HONR_BU_RRG') - ENDIF - IF (LBUDGET_SV) THEN - ZW(:,:,:) = PCCS(:,:,:)*PRHODJ(:,:,:) - IF (LWARM) CALL BUDGET (ZW,12+NSV_LIMA_NC,'HONC_BU_RSV') - ZW(:,:,:) = PCRS(:,:,:)*PRHODJ(:,:,:) - IF (LWARM .AND. LRAIN) CALL BUDGET (ZW,12+NSV_LIMA_NR,'HONR_BU_RSV') - ZW(:,:,:) = PCIS(:,:,:)*PRHODJ(:,:,:) - IF( OHHONI .AND. NMOD_CCN.GT.0 ) CALL BUDGET (ZW,12+NSV_LIMA_NI,'HONH_BU_RSV') - IF (LWARM) CALL BUDGET (ZW,12+NSV_LIMA_NI,'HONC_BU_RSV') - IF( OHHONI .AND. NMOD_CCN.GT.0 ) THEN - DO JL=1, NMOD_CCN - ZW(:,:,:) = PNFS(:,:,:,JL)*PRHODJ(:,:,:) - CALL BUDGET (ZW,12+NSV_LIMA_CCN_FREE+JL-1,'HONH_BU_RSV') - END DO - ZW(:,:,:) = ZNHS(:,:,:)*PRHODJ(:,:,:) - CALL BUDGET (ZW,12+NSV_LIMA_HOM_HAZE,'HONH_BU_RSV') - END IF - END IF - END IF -! END IF ! INEGT>0 ! ! diff --git a/src/MNH/lima_cold_slow_processes.f90 b/src/MNH/lima_cold_slow_processes.f90 index 0aeb16cfc4c97576272de1ebcc5d2262155663be..a9292842045800529c39c2ef051ce8ddb891c6de 100644 --- a/src/MNH/lima_cold_slow_processes.f90 +++ b/src/MNH/lima_cold_slow_processes.f90 @@ -78,6 +78,7 @@ END MODULE MODI_LIMA_COLD_SLOW_PROCESSES !! Original ??/??/13 !! C. Barthe * LACy * jan. 2014 add budgets !! Philippe Wautelet: 05/2016-04/2018: new data structures and calls for I/O +!! B.Vie 03/2020 Correction of budgets parallelization !! !------------------------------------------------------------------------------- ! @@ -349,25 +350,27 @@ IF( IMICRO >= 1 ) THEN ZZW(:) = ZZW(:)*( XC0DEPSI+XC1DEPSI*ZCJ(:) )/( XR0DEPSI+XR1DEPSI*ZCJ(:) ) ZCIS(:) = ZCIS(:) + ZZW(:) END WHERE + ZW(:,:,:) = PRIS(:,:,:) + PRIS(:,:,:) = UNPACK( ZRIS(:),MASK=GMICRO(:,:,:),FIELD=ZW(:,:,:) ) + ZW(:,:,:) = PRSS(:,:,:) + PRSS(:,:,:) = UNPACK( ZRSS(:),MASK=GMICRO(:,:,:),FIELD=ZW(:,:,:) ) + ZW(:,:,:) = PCIS(:,:,:) + PCIS(:,:,:) = UNPACK( ZCIS(:),MASK=GMICRO(:,:,:),FIELD=ZW(:,:,:) ) + END IF ! IMICRO ! ! Budget storage - IF (NBUMOD==KMI .AND. LBU_ENABLE) THEN - IF (LBUDGET_RI) CALL BUDGET ( & - UNPACK(ZRIS(:),MASK=GMICRO(:,:,:),FIELD=PRIS)*PRHODJ(:,:,:),& - 9,'CNVI_BU_RRI') - IF (LBUDGET_RS) CALL BUDGET ( & - UNPACK(ZRSS(:),MASK=GMICRO(:,:,:),FIELD=PRSS)*PRHODJ(:,:,:),& - 10,'CNVI_BU_RRS') - IF (LBUDGET_SV) CALL BUDGET ( & - UNPACK(ZCIS(:),MASK=GMICRO(:,:,:),FIELD=PCIS)*PRHODJ(:,:,:), & - 12+NSV_LIMA_NI,'CNVI_BU_RSV') - END IF + IF (NBUMOD==KMI .AND. LBU_ENABLE) THEN + IF (LBUDGET_RI) CALL BUDGET (PRIS(:,:,:)*PRHODJ(:,:,:),9,'CNVI_BU_RRI') + IF (LBUDGET_RS) CALL BUDGET (PRSS(:,:,:)*PRHODJ(:,:,:),10,'CNVI_BU_RRS') + IF (LBUDGET_SV) CALL BUDGET (PCIS(:,:,:)*PRHODJ(:,:,:),12+NSV_LIMA_NI,'CNVI_BU_RSV') + END IF ! ! !* 2.2 Deposition of water vapor on r_s: RVDEPS ! ----------------------------------------------- ! ! + IF( IMICRO >= 1 ) THEN ZZW(:) = 0.0 WHERE ( (ZRST(:)>XRTMIN(5)) .AND. (ZRSS(:)>ZRTMIN(5)) ) ZZW(:) = ( ZSSI(:)/(ZRHODREF(:)*ZAI(:)) ) * & @@ -378,25 +381,27 @@ IF( IMICRO >= 1 ) THEN ZRVS(:) = ZRVS(:) - ZZW(:) ZTHS(:) = ZTHS(:) + ZZW(:)*ZLSFACT(:) END WHERE -! + ! + ZW(:,:,:) = PRVS(:,:,:) + PRVS(:,:,:) = UNPACK( ZRVS(:),MASK=GMICRO(:,:,:),FIELD=ZW(:,:,:) ) + ZW(:,:,:) = PRSS(:,:,:) + PRSS(:,:,:) = UNPACK( ZRSS(:),MASK=GMICRO(:,:,:),FIELD=ZW(:,:,:) ) + ZW(:,:,:) = PTHS(:,:,:) + PTHS(:,:,:) = UNPACK( ZTHS(:),MASK=GMICRO(:,:,:),FIELD=ZW(:,:,:) ) + END IF ! Budget storage - IF (NBUMOD==KMI .AND. LBU_ENABLE) THEN - IF (LBUDGET_TH) CALL BUDGET ( & - UNPACK(ZTHS(:),MASK=GMICRO(:,:,:),FIELD=PTHS)*PRHODJ(:,:,:),& - 4,'DEPS_BU_RTH') - IF (LBUDGET_RV) CALL BUDGET ( & - UNPACK(ZRVS(:),MASK=GMICRO(:,:,:),FIELD=PRVS)*PRHODJ(:,:,:),& - 6,'DEPS_BU_RRV') - IF (LBUDGET_RS) CALL BUDGET ( & - UNPACK(ZRSS(:),MASK=GMICRO(:,:,:),FIELD=PRSS)*PRHODJ(:,:,:),& - 10,'DEPS_BU_RRS') - END IF + IF (NBUMOD==KMI .AND. LBU_ENABLE) THEN + IF (LBUDGET_TH) CALL BUDGET (PTHS(:,:,:)*PRHODJ(:,:,:),4,'DEPS_BU_RTH') + IF (LBUDGET_RV) CALL BUDGET (PRVS(:,:,:)*PRHODJ(:,:,:),6,'DEPS_BU_RRV') + IF (LBUDGET_RS) CALL BUDGET (PRSS(:,:,:)*PRHODJ(:,:,:),10,'DEPS_BU_RRS') + END IF ! ! !* 2.3 Conversion of pristine ice to r_s: RICNVS ! ------------------------------------------------ ! ! + IF( IMICRO >= 1 ) THEN ZZW(:) = 0.0 WHERE ( (ZLBDAI(:)<XLBDAICNVS_LIM) .AND. (ZCIT(:)>XCTMIN(4)) & .AND. (ZSSI(:)>0.0) ) @@ -415,24 +420,26 @@ IF( IMICRO >= 1 ) THEN ZCIS(:) = ZCIS(:) - ZZW(:) END WHERE ! + ZW(:,:,:) = PRIS(:,:,:) + PRIS(:,:,:) = UNPACK( ZRIS(:),MASK=GMICRO(:,:,:),FIELD=ZW(:,:,:) ) + ZW(:,:,:) = PRSS(:,:,:) + PRSS(:,:,:) = UNPACK( ZRSS(:),MASK=GMICRO(:,:,:),FIELD=ZW(:,:,:) ) + ZW(:,:,:) = PCIS(:,:,:) + PCIS(:,:,:) = UNPACK( ZCIS(:),MASK=GMICRO(:,:,:),FIELD=ZW(:,:,:) ) + END IF ! Budget storage - IF (NBUMOD==KMI .AND. LBU_ENABLE) THEN - IF (LBUDGET_RI) CALL BUDGET ( & - UNPACK(ZRIS(:),MASK=GMICRO(:,:,:),FIELD=PRIS)*PRHODJ(:,:,:),& - 9,'CNVS_BU_RRI') - IF (LBUDGET_RS) CALL BUDGET ( & - UNPACK(ZRSS(:),MASK=GMICRO(:,:,:),FIELD=PRSS)*PRHODJ(:,:,:),& - 10,'CNVS_BU_RRS') - IF (LBUDGET_SV) CALL BUDGET ( & - UNPACK(ZCIS(:),MASK=GMICRO(:,:,:),FIELD=PCIS)*PRHODJ(:,:,:), & - 12+NSV_LIMA_NI,'CNVS_BU_RSV') - END IF + IF (NBUMOD==KMI .AND. LBU_ENABLE) THEN + IF (LBUDGET_RI) CALL BUDGET (PRIS(:,:,:)*PRHODJ(:,:,:),9,'CNVS_BU_RRI') + IF (LBUDGET_RS) CALL BUDGET (PRSS(:,:,:)*PRHODJ(:,:,:),10,'CNVS_BU_RRS') + IF (LBUDGET_SV) CALL BUDGET (PCIS(:,:,:)*PRHODJ(:,:,:),12+NSV_LIMA_NI,'CNVS_BU_RSV') + END IF ! ! !* 2.4 Aggregation of r_i on r_s: CIAGGS and RIAGGS ! --------------------------------------------------- ! ! + IF( IMICRO >= 1 ) THEN WHERE ( (ZRIT(:)>XRTMIN(4)) .AND. (ZRST(:)>XRTMIN(5)) .AND. (ZRIS(:)>ZRTMIN(4)) & .AND. (ZCIS(:)>ZCTMIN(4)) ) ZZW1(:,3) = (ZLBDAI(:) / ZLBDAS(:))**3 @@ -446,19 +453,20 @@ IF( IMICRO >= 1 ) THEN ZRIS(:) = ZRIS(:) - ZZW1(:,2) ZRSS(:) = ZRSS(:) + ZZW1(:,2) END WHERE -! + ! + ZW(:,:,:) = PRIS(:,:,:) + PRIS(:,:,:) = UNPACK( ZRIS(:),MASK=GMICRO(:,:,:),FIELD=ZW(:,:,:) ) + ZW(:,:,:) = PRSS(:,:,:) + PRSS(:,:,:) = UNPACK( ZRSS(:),MASK=GMICRO(:,:,:),FIELD=ZW(:,:,:) ) + ZW(:,:,:) = PCIS(:,:,:) + PCIS(:,:,:) = UNPACK( ZCIS(:),MASK=GMICRO(:,:,:),FIELD=ZW(:,:,:) ) + END IF ! Budget storage - IF (NBUMOD==KMI .AND. LBU_ENABLE) THEN - IF (LBUDGET_RI) CALL BUDGET ( & - UNPACK(ZRIS(:),MASK=GMICRO(:,:,:),FIELD=PRIS)*PRHODJ(:,:,:), & - 9,'AGGS_BU_RRI') - IF (LBUDGET_RS) CALL BUDGET ( & - UNPACK(ZRSS(:),MASK=GMICRO(:,:,:),FIELD=PRSS)*PRHODJ(:,:,:), & - 10,'AGGS_BU_RRS') - IF (LBUDGET_SV) CALL BUDGET ( & - UNPACK(ZCIS(:),MASK=GMICRO(:,:,:),FIELD=PCIS)*PRHODJ(:,:,:), & - 12+NSV_LIMA_NI,'AGGS_BU_RSV') - END IF + IF (NBUMOD==KMI .AND. LBU_ENABLE) THEN + IF (LBUDGET_RI) CALL BUDGET (PRIS(:,:,:)*PRHODJ(:,:,:),9,'AGGS_BU_RRI') + IF (LBUDGET_RS) CALL BUDGET (PRSS(:,:,:)*PRHODJ(:,:,:),10,'AGGS_BU_RRS') + IF (LBUDGET_SV) CALL BUDGET (PCIS(:,:,:)*PRHODJ(:,:,:),12+NSV_LIMA_NI,'AGGS_BU_RSV') + END IF ! ! !------------------------------------------------------------------------------ @@ -467,90 +475,38 @@ IF( IMICRO >= 1 ) THEN !* 3. Unpacking & Deallocating ! ------------------------ ! -! + IF( IMICRO >= 1 ) THEN + DEALLOCATE(ZRVT) + DEALLOCATE(ZRCT) + DEALLOCATE(ZRRT) + DEALLOCATE(ZRIT) + DEALLOCATE(ZRST) + DEALLOCATE(ZRGT) + DEALLOCATE(ZCIT) + DEALLOCATE(ZRVS) + DEALLOCATE(ZRIS) + DEALLOCATE(ZRSS) + DEALLOCATE(ZTHS) + DEALLOCATE(ZCIS) + DEALLOCATE(ZRHODREF) + DEALLOCATE(ZZT) + DEALLOCATE(ZPRES) + DEALLOCATE(ZEXNREF) + DEALLOCATE(ZZW) + DEALLOCATE(ZZX) + DEALLOCATE(ZLSFACT) + DEALLOCATE(ZSSI) + DEALLOCATE(ZLBDAI) + DEALLOCATE(ZLBDAS) + DEALLOCATE(ZAI) + DEALLOCATE(ZCJ) + DEALLOCATE(ZKA) + DEALLOCATE(ZDV) + DEALLOCATE(ZZW1) + IF (NBUMOD==KMI .AND. LBU_ENABLE) DEALLOCATE(ZRHODJ) + END IF ! - ZW(:,:,:) = PRVS(:,:,:) - PRVS(:,:,:) = UNPACK( ZRVS(:),MASK=GMICRO(:,:,:),FIELD=ZW(:,:,:) ) - ZW(:,:,:) = PRIS(:,:,:) - PRIS(:,:,:) = UNPACK( ZRIS(:),MASK=GMICRO(:,:,:),FIELD=ZW(:,:,:) ) - ZW(:,:,:) = PRSS(:,:,:) - PRSS(:,:,:) = UNPACK( ZRSS(:),MASK=GMICRO(:,:,:),FIELD=ZW(:,:,:) ) -! - ZW(:,:,:) = PCIS(:,:,:) - PCIS(:,:,:) = UNPACK( ZCIS(:),MASK=GMICRO(:,:,:),FIELD=ZW(:,:,:) ) -! - ZW(:,:,:) = PTHS(:,:,:) - PTHS(:,:,:) = UNPACK( ZTHS(:),MASK=GMICRO(:,:,:),FIELD=ZW(:,:,:) ) -! - DEALLOCATE(ZRVT) - DEALLOCATE(ZRCT) - DEALLOCATE(ZRRT) - DEALLOCATE(ZRIT) - DEALLOCATE(ZRST) - DEALLOCATE(ZRGT) - DEALLOCATE(ZCIT) - DEALLOCATE(ZRVS) - DEALLOCATE(ZRIS) - DEALLOCATE(ZRSS) - DEALLOCATE(ZTHS) - DEALLOCATE(ZCIS) - DEALLOCATE(ZRHODREF) - DEALLOCATE(ZZT) - DEALLOCATE(ZPRES) - DEALLOCATE(ZEXNREF) - DEALLOCATE(ZZW) - DEALLOCATE(ZZX) - DEALLOCATE(ZLSFACT) - DEALLOCATE(ZSSI) - DEALLOCATE(ZLBDAI) - DEALLOCATE(ZLBDAS) - DEALLOCATE(ZAI) - DEALLOCATE(ZCJ) - DEALLOCATE(ZKA) - DEALLOCATE(ZDV) - DEALLOCATE(ZZW1) - IF (NBUMOD==KMI .AND. LBU_ENABLE) DEALLOCATE(ZRHODJ) -! -! -ELSE -! -! Advance the budget calls -! - IF (NBUMOD==KMI .AND. LBU_ENABLE) THEN - IF (LBUDGET_TH) THEN - ZW(:,:,:) = PTHS(:,:,:)*PRHODJ(:,:,:) - CALL BUDGET (ZW,4,'DEPS_BU_RTH') - ENDIF - IF (LBUDGET_RV) THEN - ZW(:,:,:) = PRVS(:,:,:)*PRHODJ(:,:,:) - CALL BUDGET (ZW,6,'DEPS_BU_RRV') - ENDIF - IF (LBUDGET_RI) THEN - ZW(:,:,:) = PRIS(:,:,:)*PRHODJ(:,:,:) - CALL BUDGET (ZW,9,'CNVI_BU_RRI') - CALL BUDGET (ZW,9,'CNVS_BU_RRI') - CALL BUDGET (ZW,9,'AGGS_BU_RRI') - ENDIF - IF (LBUDGET_RS) THEN - ZW(:,:,:) = PRSS(:,:,:)*PRHODJ(:,:,:) - CALL BUDGET (ZW,10,'CNVI_BU_RRS') - CALL BUDGET (ZW,10,'DEPS_BU_RRS') - CALL BUDGET (ZW,10,'CNVS_BU_RRS') - CALL BUDGET (ZW,10,'AGGS_BU_RRS') - ENDIF - IF (LBUDGET_SV) THEN - ZW(:,:,:) = PCIS(:,:,:)*PRHODJ(:,:,:) - CALL BUDGET (ZW,12+NSV_LIMA_NI,'CNVI_BU_RSV') - CALL BUDGET (ZW,12+NSV_LIMA_NI,'CNVS_BU_RSV') - CALL BUDGET (ZW,12+NSV_LIMA_NI,'AGGS_BU_RSV') - ENDIF - ENDIF -! -END IF -! -!++cb++ -DEALLOCATE(ZRTMIN) -DEALLOCATE(ZCTMIN) -!--cb-- + DEALLOCATE(ZRTMIN) + DEALLOCATE(ZCTMIN) ! -END SUBROUTINE LIMA_COLD_SLOW_PROCESSES + END SUBROUTINE LIMA_COLD_SLOW_PROCESSES diff --git a/src/MNH/lima_meyers.f90 b/src/MNH/lima_meyers.f90 index 5d560781521993fc88a4979fba75c117c7963e87..1dd7bf0ac630fcb5f6b73665ed00b7850c9bb8a8 100644 --- a/src/MNH/lima_meyers.f90 +++ b/src/MNH/lima_meyers.f90 @@ -107,6 +107,7 @@ END MODULE MODI_LIMA_MEYERS !! Original ??/??/13 !! C. Barthe * LACy * jan. 2014 add budgets !! Philippe Wautelet: 05/2016-04/2018: new data structures and calls for I/O +!! B.Vie 03/2020 Correction of budgets parallelization !! !------------------------------------------------------------------------------- ! @@ -336,26 +337,32 @@ IF( INEGT >= 1 ) THEN ZTHS(:) = ZTHS(:) + ZZW(:) * (ZLSFACT(:)-ZLVFACT(:)) ! f(L_s*(RVHNDI)) ZCIS(:) = ZCIS(:) + ZZX(:) ! +!* unpack variables +! + ZW(:,:,:) = PRVS(:,:,:) + PRVS(:,:,:) = UNPACK( ZRVS(:),MASK=GNEGT(:,:,:),FIELD=ZW(:,:,:) ) + ZW(:,:,:) = PRIS(:,:,:) + PRIS(:,:,:) = UNPACK( ZRIS(:),MASK=GNEGT(:,:,:),FIELD=ZW(:,:,:) ) + ZW(:,:,:) = PTHS(:,:,:) + PTHS(:,:,:) = UNPACK( ZTHS(:),MASK=GNEGT(:,:,:),FIELD=ZW(:,:,:) ) + ZW(:,:,:) = PCIS(:,:,:) + PCIS(:,:,:) = UNPACK( ZCIS(:),MASK=GNEGT(:,:,:),FIELD=ZW(:,:,:) ) +! +END IF ! ! Budget storage - IF (NBUMOD==KMI .AND. LBU_ENABLE) THEN - IF (LBUDGET_TH) CALL BUDGET ( & - UNPACK(ZTHS(:),MASK=GNEGT(:,:,:),FIELD=PTHS)*PRHODJ(:,:,:),& - 4,'HIND_BU_RTH') - IF (LBUDGET_RV) CALL BUDGET ( & - UNPACK(ZRVS(:),MASK=GNEGT(:,:,:),FIELD=PRVS)*PRHODJ(:,:,:),& - 6,'HIND_BU_RRV') - IF (LBUDGET_RI) CALL BUDGET ( & - UNPACK(ZRIS(:),MASK=GNEGT(:,:,:),FIELD=PRIS)*PRHODJ(:,:,:),& - 9,'HIND_BU_RRI') - IF (LBUDGET_SV) THEN - CALL BUDGET ( UNPACK(ZCIS(:),MASK=GNEGT(:,:,:),FIELD=PCIS)*PRHODJ(:,:,:),& - 12+NSV_LIMA_NI,'HIND_BU_RSV') - END IF - END IF +IF (NBUMOD==KMI .AND. LBU_ENABLE) THEN + IF (LBUDGET_TH) CALL BUDGET (PTHS(:,:,:)*PRHODJ(:,:,:),4,'HIND_BU_RTH') + IF (LBUDGET_RV) CALL BUDGET (PRVS(:,:,:)*PRHODJ(:,:,:),6,'HIND_BU_RRV') + IF (LBUDGET_RI) CALL BUDGET (PRIS(:,:,:)*PRHODJ(:,:,:),9,'HIND_BU_RRI') + IF (LBUDGET_SV) THEN + CALL BUDGET (PCIS(:,:,:)*PRHODJ(:,:,:),12+NSV_LIMA_NI,'HIND_BU_RSV') + END IF +END IF ! !* compute the heterogeneous nucleation by contact: RVHNCI ! +IF( INEGT >= 1 ) THEN DO JL=1,INEGT ZINS(JL,1) = PINS(I1(JL),I2(JL),I3(JL),1) END DO @@ -394,18 +401,6 @@ IF( INEGT >= 1 ) THEN PCCS(:,:,:) = UNPACK( ZCCS(:),MASK=GNEGT(:,:,:),FIELD=ZW(:,:,:) ) ZW(:,:,:) = PCIS(:,:,:) PCIS(:,:,:) = UNPACK( ZCIS(:),MASK=GNEGT(:,:,:),FIELD=ZW(:,:,:) ) -! -! Budget storage - IF (NBUMOD==KMI .AND. LBU_ENABLE) THEN - IF (LBUDGET_TH) CALL BUDGET (PTHS(:,:,:)*PRHODJ(:,:,:), 4,'HINC_BU_RTH') - IF (LBUDGET_RC) CALL BUDGET (PRCS(:,:,:)*PRHODJ(:,:,:), 7,'HINC_BU_RRC') - IF (LBUDGET_RI) CALL BUDGET (PRIS(:,:,:)*PRHODJ(:,:,:), 9,'HINC_BU_RRI') - IF (LBUDGET_SV) THEN - CALL BUDGET ( PCCS(:,:,:)*PRHODJ(:,:,:),12+NSV_LIMA_NC,'HINC_BU_RSV') - CALL BUDGET ( PCIS(:,:,:)*PRHODJ(:,:,:),12+NSV_LIMA_NI,'HINC_BU_RSV') - END IF - END IF - ! DEALLOCATE(ZRVT) DEALLOCATE(ZRCT) @@ -438,43 +433,19 @@ IF( INEGT >= 1 ) THEN DEALLOCATE(ZLSFACT) DEALLOCATE(ZLVFACT) ! -ELSE -! -! Advance the budget calls -! - IF (NBUMOD==KMI .AND. LBU_ENABLE) THEN - IF (LBUDGET_TH) THEN - ZW(:,:,:) = PTHS(:,:,:)*PRHODJ(:,:,:) - CALL BUDGET (ZW,4,'HIND_BU_RTH') - CALL BUDGET (ZW,4,'HINC_BU_RTH') - ENDIF - IF (LBUDGET_RV) THEN - ZW(:,:,:) = PRVS(:,:,:)*PRHODJ(:,:,:) - CALL BUDGET (ZW,6,'HIND_BU_RRV') - ENDIF - IF (LBUDGET_RC) THEN - ZW(:,:,:) = PRCS(:,:,:)*PRHODJ(:,:,:) - CALL BUDGET (ZW,7,'HINC_BU_RRC') - ENDIF - IF (LBUDGET_RI) THEN - ZW(:,:,:) = PRIS(:,:,:)*PRHODJ(:,:,:) - CALL BUDGET (ZW,9,'HIND_BU_RRI') - CALL BUDGET (ZW,9,'HINC_BU_RRI') - ENDIF - IF (LBUDGET_SV) THEN - ZW(:,:,:) = PCCS(:,:,:)*PRHODJ(:,:,:) - CALL BUDGET (ZW,12+NSV_LIMA_NC,'HINC_BU_RSV') - ZW(:,:,:) = PCIS(:,:,:)*PRHODJ(:,:,:) - CALL BUDGET (ZW,12+NSV_LIMA_NI,'HIND_BU_RSV') - CALL BUDGET (ZW,12+NSV_LIMA_NI,'HINC_BU_RSV') - END IF - END IF +END IF ! +! Budget storage +IF (NBUMOD==KMI .AND. LBU_ENABLE) THEN + IF (LBUDGET_TH) CALL BUDGET (PTHS(:,:,:)*PRHODJ(:,:,:), 4,'HINC_BU_RTH') + IF (LBUDGET_RC) CALL BUDGET (PRCS(:,:,:)*PRHODJ(:,:,:), 7,'HINC_BU_RRC') + IF (LBUDGET_RI) CALL BUDGET (PRIS(:,:,:)*PRHODJ(:,:,:), 9,'HINC_BU_RRI') + IF (LBUDGET_SV) THEN + CALL BUDGET ( PCCS(:,:,:)*PRHODJ(:,:,:),12+NSV_LIMA_NC,'HINC_BU_RSV') + CALL BUDGET ( PCIS(:,:,:)*PRHODJ(:,:,:),12+NSV_LIMA_NI,'HINC_BU_RSV') + END IF END IF - - - - +! ! !------------------------------------------------------------------------------- ! diff --git a/src/MNH/lima_mixed.f90 b/src/MNH/lima_mixed.f90 index 63a64e3c495f024b48fcb5e77e27b4f99d3422d8..38a3cce6526425acc5a07d4001c8b91f885ad7ec 100644 --- a/src/MNH/lima_mixed.f90 +++ b/src/MNH/lima_mixed.f90 @@ -92,6 +92,7 @@ END MODULE MODI_LIMA_MIXED !! Original ??/??/13 !! C. Barthe * LACy * jan. 2014 add budgets !! Philippe Wautelet: 05/2016-04/2018: new data structures and calls for I/O +!! B.Vie 03/2020 Correction of budgets parallelization !! !------------------------------------------------------------------------------- ! @@ -380,7 +381,7 @@ GMICRO(IIB:IIE,IJB:IJE,IKB:IKE) = PRCT(IIB:IIE,IJB:IJE,IKB:IKE)>XRTMIN(2) .OR. & ! IMICRO = COUNTJV( GMICRO(:,:,:),I1(:),I2(:),I3(:)) ! -IF( IMICRO >= 1 ) THEN +IF( IMICRO >= 0 ) THEN ! ALLOCATE(ZRVT(IMICRO)) ALLOCATE(ZRCT(IMICRO)) diff --git a/src/MNH/lima_phillips.f90 b/src/MNH/lima_phillips.f90 index e91caa983c5ad0277ef23783b23c5f4953b6ad00..0aa2276d319683fbbec5c194ae9082e304425ba5 100644 --- a/src/MNH/lima_phillips.f90 +++ b/src/MNH/lima_phillips.f90 @@ -116,6 +116,7 @@ END MODULE MODI_LIMA_PHILLIPS !! Original ??/??/13 !! C. Barthe * LACy * jan. 2014 add budgets !! Philippe Wautelet: 05/2016-04/2018: new data structures and calls for I/O +!! B.Vie 03/2020 Correction of budgets parallelization !! !------------------------------------------------------------------------------- ! @@ -465,27 +466,29 @@ DO JMOD_IFN = 1,NMOD_IFN ! IFN modes ZCIS(:) = ZCIS(:) + ZZX(:) END DO ! +ZW(:,:,:) = PRVS(:,:,:) +PRVS(:,:,:) = UNPACK( ZRVS(:),MASK=GNEGT(:,:,:),FIELD=ZW(:,:,:) ) +ZW(:,:,:) = PRIS(:,:,:) +PRIS(:,:,:) = UNPACK( ZRIS(:),MASK=GNEGT(:,:,:),FIELD=ZW(:,:,:) ) +ZW(:,:,:) = PTHS(:,:,:) +PTHS(:,:,:) = UNPACK( ZTHS(:),MASK=GNEGT(:,:,:),FIELD=ZW(:,:,:) ) +ZW(:,:,:) = PCIS(:,:,:) +PCIS(:,:,:) = UNPACK( ZCIS(:),MASK=GNEGT(:,:,:),FIELD=ZW(:,:,:) ) +END IF ! INEGT - call budget out of INEGT test ! ! Budget storage IF (NBUMOD==KMI .AND. LBU_ENABLE) THEN - IF (LBUDGET_TH) CALL BUDGET ( & - UNPACK(ZTHS(:),MASK=GNEGT(:,:,:),FIELD=PTHS)*PRHODJ(:,:,:),& - 4,'HIND_BU_RTH') - IF (LBUDGET_RV) CALL BUDGET ( & - UNPACK(ZRVS(:),MASK=GNEGT(:,:,:),FIELD=PRVS)*PRHODJ(:,:,:),& - 6,'HIND_BU_RRV') - IF (LBUDGET_RI) CALL BUDGET ( & - UNPACK(ZRIS(:),MASK=GNEGT(:,:,:),FIELD=PRIS)*PRHODJ(:,:,:),& - 9,'HIND_BU_RRI') - IF (LBUDGET_SV) THEN - CALL BUDGET ( UNPACK(ZCIS(:),MASK=GNEGT(:,:,:),FIELD=PCIS)*PRHODJ(:,:,:),& - 12+NSV_LIMA_NI,'HIND_BU_RSV') - IF (NMOD_IFN.GE.1) THEN - DO JL=1, NMOD_IFN - CALL BUDGET ( PIFS(:,:,:,JL)*PRHODJ(:,:,:),12+NSV_LIMA_IFN_FREE+JL-1,'HIND_BU_RSV') - END DO - END IF - END IF + IF (LBUDGET_TH) CALL BUDGET (PTHS(:,:,:)*PRHODJ(:,:,:),4,'HIND_BU_RTH') + IF (LBUDGET_RV) CALL BUDGET (PRVS(:,:,:)*PRHODJ(:,:,:),6,'HIND_BU_RRV') + IF (LBUDGET_RI) CALL BUDGET (PRIS(:,:,:)*PRHODJ(:,:,:),9,'HIND_BU_RRI') + IF (LBUDGET_SV) THEN + CALL BUDGET (PCIS(:,:,:)*PRHODJ(:,:,:),12+NSV_LIMA_NI,'HIND_BU_RSV') + IF (NMOD_IFN.GE.1) THEN + DO JL=1, NMOD_IFN + CALL BUDGET (PIFS(:,:,:,JL)*PRHODJ(:,:,:),12+NSV_LIMA_IFN_FREE+JL-1,'HIND_BU_RSV') + END DO + END IF + END IF END IF ! ! @@ -500,58 +503,63 @@ END IF ! Currently, we represent coated IFN as a pure aerosol type (NIND_SPECIE) ! ! -DO JMOD_IMM = 1,NMOD_IMM ! Coated IFN modes - JMOD_CCN = NINDICE_CCN_IMM(JMOD_IMM) ! Corresponding CCN mode - IF (JMOD_CCN .GT. 0) THEN -! -! OLD LIMA : Compute the appropriate mean diameter and sigma -! XMDIAM_IMM = MIN( XMDIAM_IFN(NIND_SPECIE) , XR_MEAN_CCN(JMOD_CCN)*2. ) -! XSIGMA_IMM = MIN( XSIGMA_IFN(JSPECIE) , EXP(XLOGSIG_CCN(JMOD_CCN)) ) -! - ZZW(:) = MIN( ZCCS(:) , ZNAS(:,JMOD_CCN) ) - ZZX(:)= ( ZZW(:)+ZNIS(:,JMOD_IMM) ) * Z_FRAC_ACT(:,NIND_SPECIE) -! Now : ZZX(:) = number of activable AP. -! Activated AP at this time step = activable AP - already activated AP - ZZX(:) = MIN( ZZW(:), MAX( (ZZX(:)-ZNIS(:,JMOD_IMM)),0.0 ) ) -! Correction BVIE division by PTSTEP ? -! ZZY(:) = MIN( XMNU0*ZZX(:) / PTSTEP , ZRVS(:) ) - ZZY(:) = MIN( XMNU0*ZZX(:) , ZRVS(:) ) -! -! Update the concentrations and MMR -! - ZNAS(:,JMOD_CCN) = ZNAS(:,JMOD_CCN) - ZZX(:) - ZW(:,:,:) = PNAS(:,:,:,JMOD_CCN) - PNAS(:,:,:,JMOD_CCN) = UNPACK(ZNAS(:,JMOD_CCN),MASK=GNEGT(:,:,:), & - FIELD=ZW(:,:,:)) - ZNIS(:,JMOD_IMM) = ZNIS(:,JMOD_IMM) + ZZX(:) - ZW(:,:,:) = PNIS(:,:,:,JMOD_IMM) - PNIS(:,:,:,JMOD_IMM) = UNPACK(ZNIS(:,JMOD_IMM),MASK=GNEGT(:,:,:), & - FIELD=ZW(:,:,:)) -! - ZRCS(:) = ZRCS(:) - ZZY(:) - ZRIS(:) = ZRIS(:) + ZZY(:) - ZTHS(:) = ZTHS(:) + ZZY(:)*ZLSFACT(:) !-ZLVFACT(:)) ! f(L_s*(RVHNCI)) - ZCCS(:) = ZCCS(:) - ZZX(:) - ZCIS(:) = ZCIS(:) + ZZX(:) - END IF -END DO +IF (INEGT > 0) THEN + DO JMOD_IMM = 1,NMOD_IMM ! Coated IFN modes + JMOD_CCN = NINDICE_CCN_IMM(JMOD_IMM) ! Corresponding CCN mode + IF (JMOD_CCN .GT. 0) THEN + ! + ! OLD LIMA : Compute the appropriate mean diameter and sigma + ! XMDIAM_IMM = MIN( XMDIAM_IFN(NIND_SPECIE) , XR_MEAN_CCN(JMOD_CCN)*2. ) + ! XSIGMA_IMM = MIN( XSIGMA_IFN(JSPECIE) , EXP(XLOGSIG_CCN(JMOD_CCN)) ) + ! + ZZW(:) = MIN( ZCCS(:) , ZNAS(:,JMOD_CCN) ) + ZZX(:)= ( ZZW(:)+ZNIS(:,JMOD_IMM) ) * Z_FRAC_ACT(:,NIND_SPECIE) + ! Now : ZZX(:) = number of activable AP. + ! Activated AP at this time step = activable AP - already activated AP + ZZX(:) = MIN( ZZW(:), MAX( (ZZX(:)-ZNIS(:,JMOD_IMM)),0.0 ) ) + ! Correction BVIE division by PTSTEP ? + ! ZZY(:) = MIN( XMNU0*ZZX(:) / PTSTEP , ZRVS(:) ) + ZZY(:) = MIN( XMNU0*ZZX(:) , ZRVS(:) ) + ! + ! Update the concentrations and MMR + ! + ZNAS(:,JMOD_CCN) = ZNAS(:,JMOD_CCN) - ZZX(:) + ZW(:,:,:) = PNAS(:,:,:,JMOD_CCN) + PNAS(:,:,:,JMOD_CCN) = UNPACK(ZNAS(:,JMOD_CCN),MASK=GNEGT(:,:,:), & + FIELD=ZW(:,:,:)) + ZNIS(:,JMOD_IMM) = ZNIS(:,JMOD_IMM) + ZZX(:) + ZW(:,:,:) = PNIS(:,:,:,JMOD_IMM) + PNIS(:,:,:,JMOD_IMM) = UNPACK(ZNIS(:,JMOD_IMM),MASK=GNEGT(:,:,:), & + FIELD=ZW(:,:,:)) + ! + ZRCS(:) = ZRCS(:) - ZZY(:) + ZRIS(:) = ZRIS(:) + ZZY(:) + ZTHS(:) = ZTHS(:) + ZZY(:)*ZLSFACT(:) !-ZLVFACT(:)) ! f(L_s*(RVHNCI)) + ZCCS(:) = ZCCS(:) - ZZX(:) + ZCIS(:) = ZCIS(:) + ZZX(:) + END IF + END DO + ! + ZW(:,:,:) = PRCS(:,:,:) + PRCS(:,:,:) = UNPACK( ZRCS(:),MASK=GNEGT(:,:,:),FIELD=ZW(:,:,:) ) + ZW(:,:,:) = PRIS(:,:,:) + PRIS(:,:,:) = UNPACK( ZRIS(:),MASK=GNEGT(:,:,:),FIELD=ZW(:,:,:) ) + ZW(:,:,:) = PTHS(:,:,:) + PTHS(:,:,:) = UNPACK( ZTHS(:),MASK=GNEGT(:,:,:),FIELD=ZW(:,:,:) ) + ZW(:,:,:) = PCCS(:,:,:) + PCCS(:,:,:) = UNPACK( ZCCS(:),MASK=GNEGT(:,:,:),FIELD=ZW(:,:,:) ) + ZW(:,:,:) = PCIS(:,:,:) + PCIS(:,:,:) = UNPACK( ZCIS(:),MASK=GNEGT(:,:,:),FIELD=ZW(:,:,:) ) +END IF ! INEGT ! ! Budget storage IF (NBUMOD==KMI .AND. LBU_ENABLE) THEN - IF (LBUDGET_TH) CALL BUDGET ( & - UNPACK(ZTHS(:),MASK=GNEGT(:,:,:),FIELD=PTHS)*PRHODJ(:,:,:),& - 4,'HINC_BU_RTH') - IF (LBUDGET_RC) CALL BUDGET ( & - UNPACK(ZRCS(:),MASK=GNEGT(:,:,:),FIELD=PRCS)*PRHODJ(:,:,:),& - 7,'HINC_BU_RRC') - IF (LBUDGET_RI) CALL BUDGET ( & - UNPACK(ZRIS(:),MASK=GNEGT(:,:,:),FIELD=PRIS)*PRHODJ(:,:,:),& - 9,'HINC_BU_RRI') + IF (LBUDGET_TH) CALL BUDGET (PTHS(:,:,:)*PRHODJ(:,:,:),4,'HINC_BU_RTH') + IF (LBUDGET_RC) CALL BUDGET (PRCS(:,:,:)*PRHODJ(:,:,:),7,'HINC_BU_RRC') + IF (LBUDGET_RI) CALL BUDGET (PRIS(:,:,:)*PRHODJ(:,:,:),9,'HINC_BU_RRI') IF (LBUDGET_SV) THEN - CALL BUDGET ( UNPACK(ZCCS(:),MASK=GNEGT(:,:,:),FIELD=PCCS)*PRHODJ(:,:,:),& - 12+NSV_LIMA_NC,'HINC_BU_RSV') - CALL BUDGET ( UNPACK(ZCIS(:),MASK=GNEGT(:,:,:),FIELD=PCIS)*PRHODJ(:,:,:),& - 12+NSV_LIMA_NI,'HINC_BU_RSV') + CALL BUDGET (PCCS(:,:,:)*PRHODJ(:,:,:),12+NSV_LIMA_NC,'HINC_BU_RSV') + CALL BUDGET (PCIS(:,:,:)*PRHODJ(:,:,:),12+NSV_LIMA_NI,'HINC_BU_RSV') END IF END IF ! @@ -563,102 +571,43 @@ END IF ! -------------------------- ! ! -! End of the heterogeneous nucleation following Phillips 08 -! Unpack variables, deallocate... -! -! -ZW(:,:,:) = PRVS(:,:,:) -PRVS(:,:,:) = UNPACK( ZRVS(:),MASK=GNEGT(:,:,:),FIELD=ZW(:,:,:) ) -ZW(:,:,:) = PRCS(:,:,:) -PRCS(:,:,:) = UNPACK( ZRCS(:),MASK=GNEGT(:,:,:),FIELD=ZW(:,:,:) ) -ZW(:,:,:) = PRIS(:,:,:) -PRIS(:,:,:) = UNPACK( ZRIS(:),MASK=GNEGT(:,:,:),FIELD=ZW(:,:,:) ) -ZW(:,:,:) = PTHS(:,:,:) -PTHS(:,:,:) = UNPACK( ZTHS(:),MASK=GNEGT(:,:,:),FIELD=ZW(:,:,:) ) -ZW(:,:,:) = PCCS(:,:,:) -PCCS(:,:,:) = UNPACK( ZCCS(:),MASK=GNEGT(:,:,:),FIELD=ZW(:,:,:) ) -ZW(:,:,:) = PCIS(:,:,:) -PCIS(:,:,:) = UNPACK( ZCIS(:),MASK=GNEGT(:,:,:),FIELD=ZW(:,:,:) ) -! -DEALLOCATE(ZRTMIN) -DEALLOCATE(ZCTMIN) -DEALLOCATE(ZRVT) -DEALLOCATE(ZRCT) -DEALLOCATE(ZRRT) -DEALLOCATE(ZRIT) -DEALLOCATE(ZRST) -DEALLOCATE(ZRGT) -DEALLOCATE(ZCIT) -DEALLOCATE(ZRVS) -DEALLOCATE(ZRCS) -DEALLOCATE(ZRIS) -DEALLOCATE(ZTHS) -DEALLOCATE(ZCCS) -DEALLOCATE(ZCIS) -DEALLOCATE(ZNAS) -DEALLOCATE(ZIFS) -DEALLOCATE(ZINS) -DEALLOCATE(ZNIS) -DEALLOCATE(ZRHODREF) -DEALLOCATE(ZZT) -DEALLOCATE(ZPRES) -DEALLOCATE(ZEXNREF) -DEALLOCATE(ZLSFACT) -DEALLOCATE(ZLVFACT) -DEALLOCATE(ZSI) -DEALLOCATE(ZTCELSIUS) -DEALLOCATE(ZZT_SI0_BC) -DEALLOCATE(ZLBDAC) -DEALLOCATE(ZSI0) -DEALLOCATE(Z_FRAC_ACT) -DEALLOCATE(ZSW) -DEALLOCATE(ZZW) -DEALLOCATE(ZZX) -DEALLOCATE(ZZY) -!++cb++ - DEALLOCATE(ZSI_W) -!--cb-- -! -! -ELSE -! -! Advance the budget calls -! - IF (NBUMOD==KMI .AND. LBU_ENABLE) THEN - IF (LBUDGET_TH) THEN - ZW(:,:,:) = PTHS(:,:,:)*PRHODJ(:,:,:) - CALL BUDGET (ZW,4,'HIND_BU_RTH') - CALL BUDGET (ZW,4,'HINC_BU_RTH') - ENDIF - IF (LBUDGET_RV) THEN - ZW(:,:,:) = PRVS(:,:,:)*PRHODJ(:,:,:) - CALL BUDGET (ZW,6,'HIND_BU_RRV') - ENDIF - IF (LBUDGET_RC) THEN - ZW(:,:,:) = PRCS(:,:,:)*PRHODJ(:,:,:) - CALL BUDGET (ZW,7,'HINC_BU_RRC') - ENDIF - IF (LBUDGET_RI) THEN - ZW(:,:,:) = PRIS(:,:,:)*PRHODJ(:,:,:) - CALL BUDGET (ZW,9,'HIND_BU_RRI') - CALL BUDGET (ZW,9,'HINC_BU_RRI') - ENDIF - IF (LBUDGET_SV) THEN -!print*, 'LBUDGET_SV dans lima_phillips = ', LBUDGET_SV - ZW(:,:,:) = PCCS(:,:,:)*PRHODJ(:,:,:) - CALL BUDGET (ZW,12+NSV_LIMA_NC,'HINC_BU_RSV') - ZW(:,:,:) = PCIS(:,:,:)*PRHODJ(:,:,:) - CALL BUDGET (ZW,12+NSV_LIMA_NI,'HIND_BU_RSV') - CALL BUDGET (ZW,12+NSV_LIMA_NI,'HINC_BU_RSV') - IF (NMOD_IFN.GE.1) THEN - DO JL=1, NMOD_IFN - CALL BUDGET ( PIFS(:,:,:,JL)*PRHODJ(:,:,:),12+NSV_LIMA_IFN_FREE+JL-1,'HIND_BU_RSV') - END DO - END IF - END IF - END IF -! -! +IF (INEGT > 0) THEN + DEALLOCATE(ZRTMIN) + DEALLOCATE(ZCTMIN) + DEALLOCATE(ZRVT) + DEALLOCATE(ZRCT) + DEALLOCATE(ZRRT) + DEALLOCATE(ZRIT) + DEALLOCATE(ZRST) + DEALLOCATE(ZRGT) + DEALLOCATE(ZCIT) + DEALLOCATE(ZRVS) + DEALLOCATE(ZRCS) + DEALLOCATE(ZRIS) + DEALLOCATE(ZTHS) + DEALLOCATE(ZCCS) + DEALLOCATE(ZCIS) + DEALLOCATE(ZNAS) + DEALLOCATE(ZIFS) + DEALLOCATE(ZINS) + DEALLOCATE(ZNIS) + DEALLOCATE(ZRHODREF) + DEALLOCATE(ZZT) + DEALLOCATE(ZPRES) + DEALLOCATE(ZEXNREF) + DEALLOCATE(ZLSFACT) + DEALLOCATE(ZLVFACT) + DEALLOCATE(ZSI) + DEALLOCATE(ZTCELSIUS) + DEALLOCATE(ZZT_SI0_BC) + DEALLOCATE(ZLBDAC) + DEALLOCATE(ZSI0) + DEALLOCATE(Z_FRAC_ACT) + DEALLOCATE(ZSW) + DEALLOCATE(ZZW) + DEALLOCATE(ZZX) + DEALLOCATE(ZZY) + DEALLOCATE(ZSI_W) END IF ! INEGT > 0 ! !------------------------------------------------------------------------------- diff --git a/src/MNH/lima_warm_coal.f90 b/src/MNH/lima_warm_coal.f90 index 4623cd61eb057f55a9f0c64c765a358a234f554f..a65b708ce6bc92ef00ce2580d262538a2407b0e2 100644 --- a/src/MNH/lima_warm_coal.f90 +++ b/src/MNH/lima_warm_coal.f90 @@ -96,6 +96,7 @@ END MODULE MODI_LIMA_WARM_COAL !! Original ??/??/13 !! C. Barthe * LACy * jan. 2014 add budgets !! Philippe Wautelet: 05/2016-04/2018: new data structures and calls for I/O +!! B.Vie 03/2020 Correction of budgets parallelization !! !------------------------------------------------------------------------------- ! @@ -238,6 +239,7 @@ IF( IMICRO >= 1 ) THEN ALLOCATE(ZZW1(IMICRO)) ALLOCATE(ZZW2(IMICRO)) ALLOCATE(ZZW3(IMICRO)) +END IF ! IMICRO ! ! !------------------------------------------------------------------------------- @@ -248,20 +250,21 @@ IF (LRAIN) THEN ! ------------------------------------ ! ! - GSELF(:) = ZCCT(:)>XCTMIN(2) - ISELF = COUNT(GSELF(:)) - IF( ISELF>0 ) THEN - ZZW1(:) = XSELFC*(ZCCT(:)/ZLBDC3(:))**2 * ZRHODREF(:) ! analytical integration - WHERE( GSELF(:) ) - ZCCS(:) = ZCCS(:) - MIN( ZCCS(:),ZZW1(:) ) - END WHERE + IF( IMICRO >= 1 ) THEN + GSELF(:) = ZCCT(:)>XCTMIN(2) + ISELF = COUNT(GSELF(:)) + IF( ISELF>0 ) THEN + ZZW1(:) = XSELFC*(ZCCT(:)/ZLBDC3(:))**2 * ZRHODREF(:) ! analytical integration + WHERE( GSELF(:) ) + ZCCS(:) = ZCCS(:) - MIN( ZCCS(:),ZZW1(:) ) + END WHERE + END IF + ! + ZW(:,:,:) = PCCS(:,:,:) + PCCS(:,:,:) = UNPACK( ZCCS(:),MASK=GMICRO(:,:,:),FIELD=ZW(:,:,:) ) END IF -! -! - ZW(:,:,:) = PCCS(:,:,:) - IF (LBUDGET_SV) CALL BUDGET ( & - UNPACK(ZCCS(:),MASK=GMICRO(:,:,:),FIELD=ZW(:,:,:))& - &*PRHODJ(:,:,:),12+NSV_LIMA_NC,'SELF_BU_RSV') + ! + IF (LBUDGET_SV) CALL BUDGET (PCCS(:,:,:)*PRHODJ(:,:,:),12+NSV_LIMA_NC,'SELF_BU_RSV') ! ! !------------------------------------------------------------------------------- @@ -272,44 +275,42 @@ IF (LRAIN) THEN ! ! ! - ZZW2(:) = 0.0 - ZZW1(:) = 0.0 - WHERE( ZRCT(:)>XRTMIN(2) ) - ZZW2(:) = MAX( 0.0,XLAUTR*ZRHODREF(:)*ZRCT(:)* & - (XAUTO1/min(ZLBDC(:),1.e9)**4-XLAUTR_THRESHOLD) ) ! L -! - ZZW3(:) = MIN( ZRCS(:), MAX( 0.0,XITAUTR*ZZW2(:)*ZRCT(:)* & - (XAUTO2/ZLBDC(:)-XITAUTR_THRESHOLD) ) ) ! L/tau -! - ZRCS(:) = ZRCS(:) - ZZW3(:) - ZRRS(:) = ZRRS(:) + ZZW3(:) -! - ZZW1(:) = MIN( MIN( 1.2E4,(XACCR4/ZLBDC(:)-XACCR5)/XACCR3), & - ZLBDR(:)/XACCR1 ) ! D**-1 threshold diameter for - ! switching the autoconversion regimes - ! min (80 microns, D_h, D_r) - ZZW3(:) = ZZW3(:) * MAX( 0.0,ZZW1(:) )**3 / XAC - ZCRS(:) = ZCRS(:) + ZZW3(:) - END WHERE -! -! - ZW(:,:,:) = PRCS(:,:,:) - IF (LBUDGET_RC) CALL BUDGET ( & - UNPACK(ZRCS(:),MASK=GMICRO(:,:,:),FIELD=ZW(:,:,:)) & - *PRHODJ(:,:,:),7 ,'AUTO_BU_RRC') - - ZW(:,:,:) = PRRS(:,:,:) - IF (LBUDGET_RR) CALL BUDGET ( & - UNPACK(ZRRS(:),MASK=GMICRO(:,:,:),FIELD=ZW(:,:,:)) & - *PRHODJ(:,:,:),8 ,'AUTO_BU_RRR') - ZW(:,:,:) = PCRS(:,:,:) - IF (LBUDGET_SV) THEN - ZW(:,:,:) = PCRS(:,:,:) - CALL BUDGET (UNPACK(ZCRS(:),MASK=GMICRO(:,:,:),FIELD=ZW(:,:,:)) & - *PRHODJ(:,:,:),12+NSV_LIMA_NR,'AUTO_BU_RSV') + IF( IMICRO >= 1 ) THEN + ZZW2(:) = 0.0 + ZZW1(:) = 0.0 + WHERE( ZRCT(:)>XRTMIN(2) ) + ZZW2(:) = MAX( 0.0,XLAUTR*ZRHODREF(:)*ZRCT(:)* & + (XAUTO1/min(ZLBDC(:),1.e9)**4-XLAUTR_THRESHOLD) ) ! L + ! + ZZW3(:) = MIN( ZRCS(:), MAX( 0.0,XITAUTR*ZZW2(:)*ZRCT(:)* & + (XAUTO2/ZLBDC(:)-XITAUTR_THRESHOLD) ) ) ! L/tau + ! + ZRCS(:) = ZRCS(:) - ZZW3(:) + ZRRS(:) = ZRRS(:) + ZZW3(:) + ! + ZZW1(:) = MIN( MIN( 1.2E4,(XACCR4/ZLBDC(:)-XACCR5)/XACCR3), & + ZLBDR(:)/XACCR1 ) ! D**-1 threshold diameter for + ! switching the autoconversion regimes + ! min (80 microns, D_h, D_r) + ZZW3(:) = ZZW3(:) * MAX( 0.0,ZZW1(:) )**3 / XAC + ZCRS(:) = ZCRS(:) + ZZW3(:) + END WHERE + ! + ZW(:,:,:) = PRCS(:,:,:) + PRCS(:,:,:) = UNPACK( ZRCS(:),MASK=GMICRO(:,:,:),FIELD=ZW(:,:,:) ) + ZW(:,:,:) = PRRS(:,:,:) + PRRS(:,:,:) = UNPACK( ZRRS(:),MASK=GMICRO(:,:,:),FIELD=ZW(:,:,:) ) ZW(:,:,:) = PCCS(:,:,:) - CALL BUDGET (UNPACK(ZCCS(:),MASK=GMICRO(:,:,:),FIELD=ZW(:,:,:)) & - *PRHODJ(:,:,:),12+NSV_LIMA_NC,'AUTO_BU_RSV') + PCCS(:,:,:) = UNPACK( ZCCS(:),MASK=GMICRO(:,:,:),FIELD=ZW(:,:,:) ) + ZW(:,:,:) = PCRS(:,:,:) + PCRS(:,:,:) = UNPACK( ZCRS(:),MASK=GMICRO(:,:,:),FIELD=ZW(:,:,:) ) + END IF + ! + IF (LBUDGET_RC) CALL BUDGET (PRCS(:,:,:)*PRHODJ(:,:,:),7 ,'AUTO_BU_RRC') + IF (LBUDGET_RR) CALL BUDGET (PRRS(:,:,:)*PRHODJ(:,:,:),8 ,'AUTO_BU_RRR') + IF (LBUDGET_SV) THEN + CALL BUDGET (PCRS(:,:,:)*PRHODJ(:,:,:),12+NSV_LIMA_NR,'AUTO_BU_RSV') + CALL BUDGET (PCCS(:,:,:)*PRHODJ(:,:,:),12+NSV_LIMA_NC,'AUTO_BU_RSV') END IF ! ! @@ -320,58 +321,57 @@ IF (LRAIN) THEN ! -------------------- ! ! - GACCR(:) = ZRRT(:)>XRTMIN(3) .AND. ZCRT(:)>XCTMIN(3) - IACCR = COUNT(GACCR(:)) - IF( IACCR>0 ) THEN - ALLOCATE(ZZW4(IMICRO)); ZZW4(:) = XACCR1/ZLBDR(:) - ALLOCATE(GENABLE_ACCR_SCBU(IMICRO)) - GENABLE_ACCR_SCBU(:) = ZRRT(:)>1.2*ZZW2(:)/ZRHODREF(:) .OR. & - ZZW4(:)>=MAX( XACCR2,XACCR3/(XACCR4/ZLBDC(:)-XACCR5) ) - GACCR(:) = GACCR(:) .AND. ZRCT(:)>XRTMIN(2) .AND. ZCCT(:)>XCTMIN(2) .AND. GENABLE_ACCR_SCBU(:) - END IF -! - IACCR = COUNT(GACCR(:)) - IF( IACCR>0 ) THEN - WHERE( GACCR(:).AND.(ZZW4(:)>1.E-4) ) ! Accretion for D>100 10-6 m - ZZW3(:) = ZLBDC3(:) / ZLBDR3(:) - ZZW1(:) = ( ZCCT(:)*ZCRT(:) / ZLBDC3(:) )*ZRHODREF(:) - ZZW2(:) = MIN( ZZW1(:)*(XACCR_CLARGE1+XACCR_CLARGE2*ZZW3(:)),ZCCS(:) ) - ZCCS(:) = ZCCS(:) - ZZW2(:) -! - ZZW1(:) = ( ZZW1(:) / ZLBDC3(:) ) - ZZW2(:) = MIN( ZZW1(:)*(XACCR_RLARGE1+XACCR_RLARGE2*ZZW3(:)),ZRCS(:) ) - ZRCS(:) = ZRCS(:) - ZZW2(:) - ZRRS(:) = ZRRS(:) + ZZW2(:) - END WHERE - WHERE( GACCR(:).AND.(ZZW4(:)<=1.E-4) ) ! Accretion for D<100 10-6 m - ZZW3(:) = MIN(ZLBDC3(:) / ZLBDR3(:), 1.E8) - ZZW1(:) = ( ZCCT(:)*ZCRT(:) / ZLBDC3(:) )*ZRHODREF(:) - ZZW1(:) = ZZW1(:) / ZLBDC3(:) - ZZW3(:) = ZZW3(:)**2 - ZZW2(:) = MIN( ZZW1(:)*(XACCR_CSMALL1+XACCR_CSMALL2*ZZW3(:)),ZCCS(:) ) - ZCCS(:) = ZCCS(:) - ZZW2(:) -! - ZZW1(:) = ZZW1(:) / ZLBDC3(:) - ZZW2(:) = MIN( ZZW1(:)*(XACCR_RSMALL1+XACCR_RSMALL2*ZZW3(:)) & - ,ZRCS(:) ) - ZRCS(:) = ZRCS(:) - ZZW2(:) - ZRRS(:) = ZRRS(:) + ZZW2(:) - END WHERE + IF( IMICRO >= 1 ) THEN + GACCR(:) = ZRRT(:)>XRTMIN(3) .AND. ZCRT(:)>XCTMIN(3) + IACCR = COUNT(GACCR(:)) + IF( IACCR>0 ) THEN + ALLOCATE(ZZW4(IMICRO)); ZZW4(:) = XACCR1/ZLBDR(:) + ALLOCATE(GENABLE_ACCR_SCBU(IMICRO)) + GENABLE_ACCR_SCBU(:) = ZRRT(:)>1.2*ZZW2(:)/ZRHODREF(:) .OR. & + ZZW4(:)>=MAX( XACCR2,XACCR3/(XACCR4/ZLBDC(:)-XACCR5) ) + GACCR(:) = GACCR(:) .AND. ZRCT(:)>XRTMIN(2) .AND. ZCCT(:)>XCTMIN(2) .AND. GENABLE_ACCR_SCBU(:) + END IF + ! + IACCR = COUNT(GACCR(:)) + IF( IACCR>0 ) THEN + WHERE( GACCR(:).AND.(ZZW4(:)>1.E-4) ) ! Accretion for D>100 10-6 m + ZZW3(:) = ZLBDC3(:) / ZLBDR3(:) + ZZW1(:) = ( ZCCT(:)*ZCRT(:) / ZLBDC3(:) )*ZRHODREF(:) + ZZW2(:) = MIN( ZZW1(:)*(XACCR_CLARGE1+XACCR_CLARGE2*ZZW3(:)),ZCCS(:) ) + ZCCS(:) = ZCCS(:) - ZZW2(:) + ! + ZZW1(:) = ( ZZW1(:) / ZLBDC3(:) ) + ZZW2(:) = MIN( ZZW1(:)*(XACCR_RLARGE1+XACCR_RLARGE2*ZZW3(:)),ZRCS(:) ) + ZRCS(:) = ZRCS(:) - ZZW2(:) + ZRRS(:) = ZRRS(:) + ZZW2(:) + END WHERE + WHERE( GACCR(:).AND.(ZZW4(:)<=1.E-4) ) ! Accretion for D<100 10-6 m + ZZW3(:) = MIN(ZLBDC3(:) / ZLBDR3(:), 1.E8) + ZZW1(:) = ( ZCCT(:)*ZCRT(:) / ZLBDC3(:) )*ZRHODREF(:) + ZZW1(:) = ZZW1(:) / ZLBDC3(:) + ZZW3(:) = ZZW3(:)**2 + ZZW2(:) = MIN( ZZW1(:)*(XACCR_CSMALL1+XACCR_CSMALL2*ZZW3(:)),ZCCS(:) ) + ZCCS(:) = ZCCS(:) - ZZW2(:) + ! + ZZW1(:) = ZZW1(:) / ZLBDC3(:) + ZZW2(:) = MIN( ZZW1(:)*(XACCR_RSMALL1+XACCR_RSMALL2*ZZW3(:)) & + ,ZRCS(:) ) + ZRCS(:) = ZRCS(:) - ZZW2(:) + ZRRS(:) = ZRRS(:) + ZZW2(:) + END WHERE + END IF + ! + ZW(:,:,:) = PRCS(:,:,:) + PRCS(:,:,:) = UNPACK( ZRCS(:),MASK=GMICRO(:,:,:),FIELD=ZW(:,:,:) ) + ZW(:,:,:) = PRRS(:,:,:) + PRRS(:,:,:) = UNPACK( ZRRS(:),MASK=GMICRO(:,:,:),FIELD=ZW(:,:,:) ) + ZW(:,:,:) = PCCS(:,:,:) + PCCS(:,:,:) = UNPACK( ZCCS(:),MASK=GMICRO(:,:,:),FIELD=ZW(:,:,:) ) END IF ! -! - ZW(:,:,:) = PRCS(:,:,:) - IF (LBUDGET_RC) CALL BUDGET ( & - UNPACK(ZRCS(:),MASK=GMICRO(:,:,:),FIELD=ZW(:,:,:)) & - *PRHODJ(:,:,:),7 ,'ACCR_BU_RRC') - ZW(:,:,:) = PRRS(:,:,:) - IF (LBUDGET_RR) CALL BUDGET ( & - UNPACK(ZRRS(:),MASK=GMICRO(:,:,:),FIELD=ZW(:,:,:)) & - *PRHODJ(:,:,:),8 ,'ACCR_BU_RRR') - ZW(:,:,:) = PCCS(:,:,:) - IF (LBUDGET_SV) CALL BUDGET ( & - UNPACK(ZCCS(:),MASK=GMICRO(:,:,:),FIELD=ZW(:,:,:)) & - *PRHODJ(:,:,:),12+NSV_LIMA_NC,'ACCR_BU_RSV') + IF (LBUDGET_RC) CALL BUDGET (PRCS(:,:,:)*PRHODJ(:,:,:),7 ,'ACCR_BU_RRC') + IF (LBUDGET_RR) CALL BUDGET (PRRS(:,:,:)*PRHODJ(:,:,:),8 ,'ACCR_BU_RRR') + IF (LBUDGET_SV) CALL BUDGET (PCCS(:,:,:)*PRHODJ(:,:,:),12+NSV_LIMA_NC,'ACCR_BU_RSV') ! ! !------------------------------------------------------------------------------- @@ -381,48 +381,49 @@ IF (LRAIN) THEN ! ----------------------------------------- ! ! - IF( IACCR>0 ) THEN - GSCBU(:) = ZCRT(:)>XCTMIN(3) .AND. GENABLE_ACCR_SCBU(:) - ISCBU = COUNT(GSCBU(:)) - ELSE - ISCBU = 0.0 - END IF - IF( ISCBU>0 ) THEN -! -!* 5.1 efficiencies -! - IF (.NOT.ALLOCATED(ZZW4)) ALLOCATE(ZZW4(IMICRO)) - ZZW4(:) = XACCR1 / ZLBDR(:) ! Mean diameter - ALLOCATE(ZSCBU(IMICRO)) - ZSCBU(:) = 1.0 - WHERE (ZZW4(:)>=XSCBU_EFF1 .AND. GSCBU(:)) ZSCBU(:) = & ! Coalescence - EXP(XSCBUEXP1*(ZZW4(:)-XSCBU_EFF1)) ! efficiency - WHERE (ZZW4(:)>=XSCBU_EFF2) ZSCBU(:) = 0.0 ! Break-up -! -!* 5.2 integration -! - ZZW1(:) = 0.0 - ZZW2(:) = 0.0 - ZZW3(:) = 0.0 - ZZW4(:) = XACCR1 / ZLBDR(:) ! Mean volume drop diameter - WHERE (GSCBU(:).AND.(ZZW4(:)>1.E-4)) ! analytical integration - ZZW1(:) = XSCBU2 * ZCRT(:)**2 / ZLBDR3(:) ! D>100 10-6 m - ZZW3(:) = ZZW1(:)*ZSCBU(:) - END WHERE - WHERE (GSCBU(:).AND.(ZZW4(:)<=1.E-4)) - ZZW2(:) = XSCBU3 *(ZCRT(:) / ZLBDR3(:))**2 ! D<100 10-6 m - ZZW3(:) = ZZW2(:) - END WHERE - ZCRS(:) = ZCRS(:) - MIN( ZCRS(:),ZZW3(:) * ZRHODREF(:) ) - DEALLOCATE(ZSCBU) + IF( IMICRO >= 1 ) THEN + IF( IACCR>0 ) THEN + GSCBU(:) = ZCRT(:)>XCTMIN(3) .AND. GENABLE_ACCR_SCBU(:) + ISCBU = COUNT(GSCBU(:)) + ELSE + ISCBU = 0.0 + END IF + IF( ISCBU>0 ) THEN + ! + !* 5.1 efficiencies + ! + IF (.NOT.ALLOCATED(ZZW4)) ALLOCATE(ZZW4(IMICRO)) + ZZW4(:) = XACCR1 / ZLBDR(:) ! Mean diameter + ALLOCATE(ZSCBU(IMICRO)) + ZSCBU(:) = 1.0 + WHERE (ZZW4(:)>=XSCBU_EFF1 .AND. GSCBU(:)) ZSCBU(:) = & ! Coalescence + EXP(XSCBUEXP1*(ZZW4(:)-XSCBU_EFF1)) ! efficiency + WHERE (ZZW4(:)>=XSCBU_EFF2) ZSCBU(:) = 0.0 ! Break-up + ! + !* 5.2 integration + ! + ZZW1(:) = 0.0 + ZZW2(:) = 0.0 + ZZW3(:) = 0.0 + ZZW4(:) = XACCR1 / ZLBDR(:) ! Mean volume drop diameter + WHERE (GSCBU(:).AND.(ZZW4(:)>1.E-4)) ! analytical integration + ZZW1(:) = XSCBU2 * ZCRT(:)**2 / ZLBDR3(:) ! D>100 10-6 m + ZZW3(:) = ZZW1(:)*ZSCBU(:) + END WHERE + WHERE (GSCBU(:).AND.(ZZW4(:)<=1.E-4)) + ZZW2(:) = XSCBU3 *(ZCRT(:) / ZLBDR3(:))**2 ! D<100 10-6 m + ZZW3(:) = ZZW2(:) + END WHERE + ZCRS(:) = ZCRS(:) - MIN( ZCRS(:),ZZW3(:) * ZRHODREF(:) ) + DEALLOCATE(ZSCBU) + END IF + ! + ZW(:,:,:) = PCRS(:,:,:) + PCRS(:,:,:) = UNPACK( ZCRS(:),MASK=GMICRO(:,:,:),FIELD=ZW(:,:,:) ) END IF -! -! - ZW(:,:,:) = PCRS(:,:,:) - IF (LBUDGET_SV) CALL BUDGET ( & - UNPACK(ZCRS(:),MASK=GMICRO(:,:,:),FIELD=ZW(:,:,:)) & - *PRHODJ(:,:,:),12+NSV_LIMA_NR,'SCBU_BU_RSV') -! + ! + IF (LBUDGET_SV) CALL BUDGET (PCRS(:,:,:)*PRHODJ(:,:,:),12+NSV_LIMA_NR,'SCBU_BU_RSV') + ! END IF ! LRAIN ! ! @@ -433,15 +434,7 @@ END IF ! LRAIN ! ------------------- ! ! - ZW(:,:,:) = PRCS(:,:,:) - PRCS(:,:,:) = UNPACK( ZRCS(:),MASK=GMICRO(:,:,:),FIELD=ZW(:,:,:) ) - ZW(:,:,:) = PRRS(:,:,:) - PRRS(:,:,:) = UNPACK( ZRRS(:),MASK=GMICRO(:,:,:),FIELD=ZW(:,:,:) ) - ZW(:,:,:) = PCCS(:,:,:) - PCCS(:,:,:) = UNPACK( ZCCS(:),MASK=GMICRO(:,:,:),FIELD=ZW(:,:,:) ) - ZW(:,:,:) = PCRS(:,:,:) - PCRS(:,:,:) = UNPACK( ZCRS(:),MASK=GMICRO(:,:,:),FIELD=ZW(:,:,:) ) -! +IF( IMICRO >= 1 ) THEN DEALLOCATE(ZRCT) DEALLOCATE(ZRRT) DEALLOCATE(ZCCT) @@ -463,28 +456,6 @@ END IF ! LRAIN DEALLOCATE(ZLBDC3) DEALLOCATE(ZLBDR) DEALLOCATE(ZLBDC) -! -! -!------------------------------------------------------------------------------- -! -ELSE -!* 7. Budgets are forwarded -! ------------------------ -! -! - IF (LBUDGET_SV .AND. LRAIN) CALL BUDGET (PCCS(:,:,:)*PRHODJ(:,:,:),12+NSV_LIMA_NC,'SELF_BU_RSV') -! - IF (LBUDGET_RC .AND. LRAIN) CALL BUDGET (PRCS(:,:,:)*PRHODJ(:,:,:),7 ,'AUTO_BU_RRC') - IF (LBUDGET_RR .AND. LRAIN) CALL BUDGET (PRRS(:,:,:)*PRHODJ(:,:,:),8 ,'AUTO_BU_RRR') - IF (LBUDGET_SV .AND. LRAIN) CALL BUDGET (PCRS(:,:,:)*PRHODJ(:,:,:),12+NSV_LIMA_NR,'AUTO_BU_RSV') - IF (LBUDGET_SV .AND. LRAIN) CALL BUDGET (PCCS(:,:,:)*PRHODJ(:,:,:),12+NSV_LIMA_NC,'AUTO_BU_RSV') -! - IF (LBUDGET_RC .AND. LRAIN) CALL BUDGET (PRCS(:,:,:)*PRHODJ(:,:,:),7 ,'ACCR_BU_RRC') - IF (LBUDGET_RR .AND. LRAIN) CALL BUDGET (PRRS(:,:,:)*PRHODJ(:,:,:),8 ,'ACCR_BU_RRR') - IF (LBUDGET_SV .AND. LRAIN) CALL BUDGET (PCCS(:,:,:)*PRHODJ(:,:,:),12+NSV_LIMA_NC,'ACCR_BU_RSV') -! - IF (LBUDGET_SV .AND. LRAIN) CALL BUDGET (PCRS(:,:,:)*PRHODJ(:,:,:),12+NSV_LIMA_NR,'SCBU_BU_RSV') - END IF ! IMICRO ! !-------------------------------------------------------------------------------