From 056fdc3f3ee9bd95b22a88051537bbd6656788a2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9bastien=20Riette?= <sebastien.riette@meteo.fr> Date: Tue, 17 Jan 2023 16:02:28 +0100 Subject: [PATCH] S. Riette 17 Jan 2022: sedimentation call simplified --- src/common/micro/mode_ice4_sedimentation.F90 | 78 ++++++------------- .../micro/mode_ice4_sedimentation_stat.F90 | 4 +- src/common/micro/rain_ice.F90 | 72 +++++++---------- 3 files changed, 56 insertions(+), 98 deletions(-) diff --git a/src/common/micro/mode_ice4_sedimentation.F90 b/src/common/micro/mode_ice4_sedimentation.F90 index 15e613adf..f6fc795ed 100644 --- a/src/common/micro/mode_ice4_sedimentation.F90 +++ b/src/common/micro/mode_ice4_sedimentation.F90 @@ -123,64 +123,34 @@ IF (BUCONF%LBUDGET_RG) CALL BUDGET_STORE_INIT_PHY(D, TBUDGETS(NBUDG IF (BUCONF%LBUDGET_RH .AND. KRR==7) CALL BUDGET_STORE_INIT_PHY(D, TBUDGETS(NBUDGET_RH), 'SEDI', PRHS(:, :) * PRHODJ(:, :)) IF(PARAMI%CSEDIM=='STAT') THEN - IF (KRR==7) THEN - DO JK = IKTB,IKTE - DO JIJ = IIJB,IIJE - ZRCT(JIJ,JK)=PRCS(JIJ,JK)*PTSTEP - ZRRT(JIJ,JK)=PRRS(JIJ,JK)*PTSTEP - ZRIT(JIJ,JK)=PRIS(JIJ,JK)*PTSTEP - ZRST(JIJ,JK)=PRSS(JIJ,JK)*PTSTEP - ZRGT(JIJ,JK)=PRGS(JIJ,JK)*PTSTEP - ZRHT(JIJ,JK)=PRHS(JIJ,JK)*PTSTEP - ENDDO + DO JK = IKTB,IKTE + DO JIJ = IIJB,IIJE + ZRCT(JIJ,JK)=PRCS(JIJ,JK)*PTSTEP + ZRRT(JIJ,JK)=PRRS(JIJ,JK)*PTSTEP + ZRIT(JIJ,JK)=PRIS(JIJ,JK)*PTSTEP + ZRST(JIJ,JK)=PRSS(JIJ,JK)*PTSTEP + ZRGT(JIJ,JK)=PRGS(JIJ,JK)*PTSTEP + IF (KRR==7) ZRHT(JIJ,JK)=PRHS(JIJ,JK)*PTSTEP ENDDO - CALL ICE4_SEDIMENTATION_STAT(D, CST, ICEP, ICED, PARAMI, & - &PTSTEP, KRR, PDZZ, & - &PRHODREF, PPABST, PTHT, PT, PRHODJ, & - &PRCS, ZRCT, PRRS, ZRRT, PRIS, ZRIT,& - &PRSS, ZRST, PRGS, ZRGT,& - &PINPRC, PINPRR, ZINPRI, PINPRS, PINPRG, & - &PSEA=PSEA, PTOWN=PTOWN, & - &PINPRH=PINPRH, PRHT=ZRHT, PRHS=PRHS, PFPR=PFPR) - ELSE - DO JK = IKTB,IKTE - DO JIJ = IIJB,IIJE - ZRCT(JIJ,JK)=PRCS(JIJ,JK)*PTSTEP - ZRRT(JIJ,JK)=PRRS(JIJ,JK)*PTSTEP - ZRIT(JIJ,JK)=PRIS(JIJ,JK)*PTSTEP - ZRST(JIJ,JK)=PRSS(JIJ,JK)*PTSTEP - ZRGT(JIJ,JK)=PRGS(JIJ,JK)*PTSTEP - ENDDO - ENDDO - CALL ICE4_SEDIMENTATION_STAT(D, CST, ICEP, ICED, PARAMI, & - &PTSTEP, KRR, PDZZ, & - &PRHODREF, PPABST, PTHT, PT, PRHODJ, & - &PRCS, ZRCT, PRRS, ZRRT, PRIS, ZRIT,& - &PRSS, ZRST, PRGS, ZRGT,& - &PINPRC, PINPRR, ZINPRI, PINPRS, PINPRG, & - &PSEA=PSEA, PTOWN=PTOWN, & - &PFPR=PFPR) - ENDIF + ENDDO + CALL ICE4_SEDIMENTATION_STAT(D, CST, ICEP, ICED, PARAMI, & + &PTSTEP, KRR, PDZZ, & + &PRHODREF, PPABST, PTHT, PT, PRHODJ, & + &PRCS, ZRCT, PRRS, ZRRT, PRIS, ZRIT,& + &PRSS, ZRST, PRGS, ZRGT,& + &PINPRC, PINPRR, ZINPRI, PINPRS, PINPRG, & + &PSEA=PSEA, PTOWN=PTOWN, & + &PINPRH=PINPRH, PRHT=ZRHT, PRHS=PRHS, PFPR=PFPR) PINPRS(IIJB:IIJE) = PINPRS(IIJB:IIJE) + ZINPRI(IIJB:IIJE) !No negativity correction here as we apply sedimentation on PR.S*PTSTEP variables ELSEIF(PARAMI%CSEDIM=='SPLI') THEN - IF(KRR==7) THEN - CALL ICE4_SEDIMENTATION_SPLIT(D, CST, ICEP, ICED, PARAMI, & - &PTSTEP, KRR, PDZZ, & - &PRHODREF, PPABST, PTHT, PT, PRHODJ, & - &PRCS, PRCT, PRRS, PRRT, PRIS, PRIT, PRSS, PRST, PRGS, PRGT,& - &PINPRC, PINPRR, ZINPRI, PINPRS, PINPRG, & - &PSEA=PSEA, PTOWN=PTOWN, & - &PINPRH=PINPRH, PRHT=PRHT, PRHS=PRHS, PFPR=PFPR) - ELSE - CALL ICE4_SEDIMENTATION_SPLIT(D, CST, ICEP, ICED, PARAMI, & - &PTSTEP, KRR, PDZZ, & - &PRHODREF, PPABST, PTHT, PT, PRHODJ, & - &PRCS, PRCT, PRRS, PRRT, PRIS, PRIT, PRSS, PRST, PRGS, PRGT,& - &PINPRC, PINPRR, ZINPRI, PINPRS, PINPRG, & - &PSEA=PSEA, PTOWN=PTOWN, & - &PFPR=PFPR) - ENDIF + CALL ICE4_SEDIMENTATION_SPLIT(D, CST, ICEP, ICED, PARAMI, & + &PTSTEP, KRR, PDZZ, & + &PRHODREF, PPABST, PTHT, PT, PRHODJ, & + &PRCS, PRCT, PRRS, PRRT, PRIS, PRIT, PRSS, PRST, PRGS, PRGT,& + &PINPRC, PINPRR, ZINPRI, PINPRS, PINPRG, & + &PSEA=PSEA, PTOWN=PTOWN, & + &PINPRH=PINPRH, PRHT=PRHT, PRHS=PRHS, PFPR=PFPR) PINPRS(IIJB:IIJE) = PINPRS(IIJB:IIJE) + ZINPRI(IIJB:IIJE) !We correct negativities with conservation !SPLI algorith uses a time-splitting. Inside the loop a temporary m.r. is used. diff --git a/src/common/micro/mode_ice4_sedimentation_stat.F90 b/src/common/micro/mode_ice4_sedimentation_stat.F90 index 5d64266c1..52183c854 100644 --- a/src/common/micro/mode_ice4_sedimentation_stat.F90 +++ b/src/common/micro/mode_ice4_sedimentation_stat.F90 @@ -216,7 +216,7 @@ DO JK = IKE , IKB, -1*IKL PRIS(JIJ,JK) = PRIS(JIJ,JK)+ZTSORHODZ(JIJ)*(ZSED(JIJ,IKPLUS,4)-ZSED(JIJ,IK,4))*ZINVTSTEP PRSS(JIJ,JK) = PRSS(JIJ,JK)+ZTSORHODZ(JIJ)*(ZSED(JIJ,IKPLUS,5)-ZSED(JIJ,IK,5))*ZINVTSTEP PRGS(JIJ,JK) = PRGS(JIJ,JK)+ZTSORHODZ(JIJ)*(ZSED(JIJ,IKPLUS,6)-ZSED(JIJ,IK,6))*ZINVTSTEP - IF (PRESENT(PRHS)) THEN + IF (PRESENT(PRHS) .AND. KRR==7) THEN PRHS(JIJ,JK) = PRHS(JIJ,JK)+ZTSORHODZ(JIJ)*(ZSED(JIJ,IKPLUS,7)-ZSED(JIJ,IK,7))*ZINVTSTEP ENDIF ENDDO @@ -228,7 +228,7 @@ DO JK = IKE , IKB, -1*IKL PINPRI(JIJ) = ZSED(JIJ,IK,4)/CST%XRHOLW PINPRS(JIJ) = ZSED(JIJ,IK,5)/CST%XRHOLW PINPRG(JIJ) = ZSED(JIJ,IK,6)/CST%XRHOLW - IF (PRESENT(PINPRH)) THEN + IF (PRESENT(PINPRH) .AND. KRR==7) THEN PINPRH(JIJ) = ZSED(JIJ,IK,7)/CST%XRHOLW ENDIF ENDDO diff --git a/src/common/micro/rain_ice.F90 b/src/common/micro/rain_ice.F90 index d17b45a36..38e184690 100644 --- a/src/common/micro/rain_ice.F90 +++ b/src/common/micro/rain_ice.F90 @@ -336,25 +336,14 @@ ENDDO ! ------------------------------------- ! IF(.NOT. PARAMI%LSEDIM_AFTER) THEN - IF(KRR==7) THEN - CALL ICE4_SEDIMENTATION(D, CST, ICEP, ICED, PARAMI, BUCONF, & - &PTSTEP, KRR, PDZZ, & - &ZZ_LVFACT, ZZ_LSFACT, PRHODREF, PPABST, PTHT, ZT, PRHODJ, & - &PTHS, PRVS, PRCS, PRCT, PRRS, PRRT, PRIS, PRIT, PRSS, PRST, PRGS, PRGT,& - &PINPRC, PINPRR, PINPRS, PINPRG, & - &TBUDGETS, KBUDGETS, & - &PSEA=PSEA, PTOWN=PTOWN, & - &PINPRH=PINPRH, PRHT=PRHT, PRHS=PRHS, PFPR=PFPR) - ELSE - CALL ICE4_SEDIMENTATION(D, CST, ICEP, ICED, PARAMI, BUCONF, & - &PTSTEP, KRR, PDZZ, & - &ZZ_LVFACT, ZZ_LSFACT, PRHODREF, PPABST, PTHT, ZT, PRHODJ, & - &PTHS, PRVS, PRCS, PRCT, PRRS, PRRT, PRIS, PRIT, PRSS, PRST, PRGS, PRGT,& - &PINPRC, PINPRR, PINPRS, PINPRG, & - &TBUDGETS, KBUDGETS, & - &PSEA=PSEA, PTOWN=PTOWN, & - &PFPR=PFPR) - ENDIF + CALL ICE4_SEDIMENTATION(D, CST, ICEP, ICED, PARAMI, BUCONF, & + &PTSTEP, KRR, PDZZ, & + &ZZ_LVFACT, ZZ_LSFACT, PRHODREF, PPABST, PTHT, ZT, PRHODJ, & + &PTHS, PRVS, PRCS, PRCT, PRRS, PRRT, PRIS, PRIT, PRSS, PRST, PRGS, PRGT,& + &PINPRC, PINPRR, PINPRS, PINPRG, & + &TBUDGETS, KBUDGETS, & + &PSEA=PSEA, PTOWN=PTOWN, & + &PINPRH=PINPRH, PRHT=PRHT, PRHS=PRHS, PFPR=PFPR) ENDIF ! ! @@ -526,33 +515,32 @@ END IF ! ------------------------------------- ! IF(PARAMI%LSEDIM_AFTER) THEN - IF(KRR==7) THEN - CALL ICE4_SEDIMENTATION(D, CST, ICEP, ICED, PARAMI, BUCONF, & - &PTSTEP, KRR, PDZZ, & - &ZZ_LVFACT, ZZ_LSFACT, PRHODREF, PPABST, PTHT, ZT, PRHODJ, & - &PTHS, PRVS, PRCS, PRCT, PRRS, PRRT, PRIS, PRIT, PRSS, PRST, PRGS, PRGT,& - &PINPRC, PINPRR, PINPRS, PINPRG, & - &TBUDGETS, KBUDGETS, & - &PSEA=PSEA, PTOWN=PTOWN, & - &PINPRH=PINPRH, PRHT=PRHT, PRHS=PRHS, PFPR=PFPR) - ELSE - CALL ICE4_SEDIMENTATION(D, CST, ICEP, ICED, PARAMI, BUCONF, & - &PTSTEP, KRR, PDZZ, & - &ZZ_LVFACT, ZZ_LSFACT, PRHODREF, PPABST, PTHT, ZT, PRHODJ, & - &PTHS, PRVS, PRCS, PRCT, PRRS, PRRT, PRIS, PRIT, PRSS, PRST, PRGS, PRGT,& - &PINPRC, PINPRR, PINPRS, PINPRG, & - &TBUDGETS, KBUDGETS, & - &PSEA=PSEA, PTOWN=PTOWN, & - &PFPR=PFPR) - ENDIF + CALL ICE4_SEDIMENTATION(D, CST, ICEP, ICED, PARAMI, BUCONF, & + &PTSTEP, KRR, PDZZ, & + &ZZ_LVFACT, ZZ_LSFACT, PRHODREF, PPABST, PTHT, ZT, PRHODJ, & + &PTHS, PRVS, PRCS, PRCT, PRRS, PRRT, PRIS, PRIT, PRSS, PRST, PRGS, PRGT,& + &PINPRC, PINPRR, PINPRS, PINPRG, & + &TBUDGETS, KBUDGETS, & + &PSEA=PSEA, PTOWN=PTOWN, & + &PINPRH=PINPRH, PRHT=PRHT, PRHS=PRHS, PFPR=PFPR) !"sedimentation" of rain fraction + DO JK = IKTB, IKTE + DO JIJ=IIJB,IIJE + ZWR(JIJ,JK,IRR)=PRRS(JIJ,JK)*PTSTEP + ZWR(JIJ,JK,IRS)=PRSS(JIJ,JK)*PTSTEP + ZWR(JIJ,JK,IRG)=PRGS(JIJ,JK)*PTSTEP + IF(KRR==7) THEN + ZWR(JIJ,JK,IRH)=PRHS(JIJ,JK)*PTSTEP + ENDIF + ENDDO + ENDDO IF (PRESENT(PRHS)) THEN - CALL ICE4_RAINFR_VERT(D, ICED, PRAINFR, PRRS(:,:)*PTSTEP, & - &PRSS(:,:)*PTSTEP, PRGS(:,:)*PTSTEP, PRHS(:,:)*PTSTEP) + CALL ICE4_RAINFR_VERT(D, ICED, PRAINFR, ZWR(:,:,IRR), & + &ZWR(:,:,IRS), ZWR(:,:,IRG), ZWR(:,:,IRH)) ELSE - CALL ICE4_RAINFR_VERT(D, ICED, PRAINFR, PRRS(:,:)*PTSTEP, & - &PRSS(:,:)*PTSTEP, PRGS(:,:)*PTSTEP) + CALL ICE4_RAINFR_VERT(D, ICED, PRAINFR, ZWR(:,:,IRR), & + &ZWR(:,:,IRS), ZWR(:,:,IRG)) ENDIF ENDIF ! -- GitLab