Skip to content
Snippets Groups Projects
Commit 51e54955 authored by RIETTE Sébastien's avatar RIETTE Sébastien
Browse files

S. Riette 12 Jan 2022: sedimentation

Suppression of old packing code in sedimentation_split
Suppression of sedimentation_split_momentum
parent c2529c75
No related branches found
No related tags found
No related merge requests found
...@@ -46,8 +46,6 @@ Pb identifiés à corriger plus tard: ...@@ -46,8 +46,6 @@ Pb identifiés à corriger plus tard:
- seules quelques options sont testées avec les cas test (par exemple, il faudrait tester RMC01 mais - seules quelques options sont testées avec les cas test (par exemple, il faudrait tester RMC01 mais
l'option n'est pas remontée en namelist) l'option n'est pas remontée en namelist)
- th_r_from_thl_rt appelée partout, il faudrait limiter à OTEST - th_r_from_thl_rt appelée partout, il faudrait limiter à OTEST
- sedimentation momentum non branchée
- si possible, modifier ice4_sedimentation_split* dans le même esprit que stat, supprimer le faux packing
- La taille du buffer utilisé pour th_r_from_thl_rt doit être mise en module et - La taille du buffer utilisé pour th_r_from_thl_rt doit être mise en module et
utilisée pour déclarer le buffer dans les routines appelantes et dans th_r_from_thl_rt utilisée pour déclarer le buffer dans les routines appelantes et dans th_r_from_thl_rt
- rain_ice: - rain_ice:
......
...@@ -46,7 +46,6 @@ USE MODE_BUDGET, ONLY: BUDGET_STORE_INIT_PHY, BUDGET_STORE_END_PHY ...@@ -46,7 +46,6 @@ USE MODE_BUDGET, ONLY: BUDGET_STORE_INIT_PHY, BUDGET_STORE_END_PHY
! !
USE MODE_ICE4_SEDIMENTATION_STAT, ONLY: ICE4_SEDIMENTATION_STAT USE MODE_ICE4_SEDIMENTATION_STAT, ONLY: ICE4_SEDIMENTATION_STAT
USE MODE_ICE4_SEDIMENTATION_SPLIT, ONLY: ICE4_SEDIMENTATION_SPLIT USE MODE_ICE4_SEDIMENTATION_SPLIT, ONLY: ICE4_SEDIMENTATION_SPLIT
USE MODE_ICE4_SEDIMENTATION_SPLIT_MOMENTUM, ONLY: ICE4_SEDIMENTATION_SPLIT_MOMENTUM
USE MODE_ICE4_CORRECT_NEGATIVITIES, ONLY: ICE4_CORRECT_NEGATIVITIES USE MODE_ICE4_CORRECT_NEGATIVITIES, ONLY: ICE4_CORRECT_NEGATIVITIES
! !
! !
...@@ -200,27 +199,6 @@ ELSEIF(PARAMI%CSEDIM=='NONE') THEN ...@@ -200,27 +199,6 @@ ELSEIF(PARAMI%CSEDIM=='NONE') THEN
ELSE ELSE
CALL PRINT_MSG(NVERB_FATAL, 'GEN', 'RAIN_ICE', 'no sedimentation scheme for PARAMI%CSEDIM='//PARAMI%CSEDIM) CALL PRINT_MSG(NVERB_FATAL, 'GEN', 'RAIN_ICE', 'no sedimentation scheme for PARAMI%CSEDIM='//PARAMI%CSEDIM)
END IF END IF
!!! ajouter momentum
! !
! !
IF (BUCONF%LBUDGET_RC .AND. PARAMI%LSEDIC) CALL BUDGET_STORE_END_PHY(D, TBUDGETS(NBUDGET_RC), 'SEDI', PRCS(:, :) * PRHODJ(:, :)) IF (BUCONF%LBUDGET_RC .AND. PARAMI%LSEDIC) CALL BUDGET_STORE_END_PHY(D, TBUDGETS(NBUDGET_RC), 'SEDI', PRCS(:, :) * PRHODJ(:, :))
......
...@@ -238,27 +238,27 @@ ENDIF ...@@ -238,27 +238,27 @@ ENDIF
!* 2.4 for aggregates/snow !* 2.4 for aggregates/snow
! !
CALL INTERNAL_SEDIM_SPLI(D, CST, ICEP, ICED, PARAMI, KRR, & CALL INTERNAL_SEDIM_SPLI(D, CST, ICEP, ICED, PARAMI, KRR, &
&PRHODREF, ZW, PDZZ, PPABST, PTHT, PT, PTSTEP, & &PRHODREF, ZW, PDZZ, PPABST, PTHT, PT, PTSTEP, &
&5, & &5, &
&ZRST, PRSS, PINPRS, ZPRSS, & &ZRST, PRSS, PINPRS, ZPRSS, &
&PFPR=PFPR) &PFPR=PFPR)
! !
!* 2.5 for graupeln !* 2.5 for graupeln
! !
CALL INTERNAL_SEDIM_SPLI(D, CST, ICEP, ICED, PARAMI, KRR, & CALL INTERNAL_SEDIM_SPLI(D, CST, ICEP, ICED, PARAMI, KRR, &
&PRHODREF, ZW, PDZZ, PPABST, PTHT, PT, PTSTEP, & &PRHODREF, ZW, PDZZ, PPABST, PTHT, PT, PTSTEP, &
&6, & &6, &
&ZRGT, PRGS, PINPRG, ZPRGS, & &ZRGT, PRGS, PINPRG, ZPRGS, &
&PFPR=PFPR) &PFPR=PFPR)
! !
!* 2.6 for hail !* 2.6 for hail
! !
IF (IRR==7) THEN IF (IRR==7) THEN
CALL INTERNAL_SEDIM_SPLI(D, CST, ICEP, ICED, PARAMI, KRR, & CALL INTERNAL_SEDIM_SPLI(D, CST, ICEP, ICED, PARAMI, KRR, &
&PRHODREF, ZW, PDZZ, PPABST, PTHT, PT, PTSTEP, & &PRHODREF, ZW, PDZZ, PPABST, PTHT, PT, PTSTEP, &
&7, & &7, &
&ZRHT, PRHS, PINPRH, ZPRHS, & &ZRHT, PRHS, PINPRH, ZPRHS, &
&PFPR=PFPR) &PFPR=PFPR)
ENDIF ENDIF
! !
IF (LHOOK) CALL DR_HOOK('ICE4_SEDIMENTATION_SPLIT', 1, ZHOOK_HANDLE) IF (LHOOK) CALL DR_HOOK('ICE4_SEDIMENTATION_SPLIT', 1, ZHOOK_HANDLE)
...@@ -270,8 +270,9 @@ CONTAINS ...@@ -270,8 +270,9 @@ CONTAINS
! !
! !
SUBROUTINE INTERNAL_SEDIM_SPLI(D, CST, ICEP, ICED, PARAMI, KRR, & SUBROUTINE INTERNAL_SEDIM_SPLI(D, CST, ICEP, ICED, PARAMI, KRR, &
&PRHODREF, POORHODZ, PDZZ, PPABST,PTHT,PT,PTSTEP, & &PRHODREF, POORHODZ, PDZZ, PPABST, PTHT, PT, PTSTEP, &
&KSPE, PRXT, PRXS, PINPRX, PPRXS, & &KSPE, &
&PRXT, PRXS, PINPRX, PPRXS, &
&PRAY, PLBC, PFSEDC, PCONC3D, PFPR) &PRAY, PLBC, PFSEDC, PCONC3D, PFPR)
! !
!* 0. DECLARATIONS !* 0. DECLARATIONS
...@@ -293,7 +294,7 @@ TYPE(RAIN_ICE_DESCR_t), INTENT(IN) :: ICED ...@@ -293,7 +294,7 @@ TYPE(RAIN_ICE_DESCR_t), INTENT(IN) :: ICED
TYPE(PARAM_ICE_t), INTENT(IN) :: PARAMI TYPE(PARAM_ICE_t), INTENT(IN) :: PARAMI
INTEGER, INTENT(IN) :: KRR INTEGER, INTENT(IN) :: KRR
REAL, DIMENSION(D%NIJT,D%NKT), INTENT(IN) :: PRHODREF ! Reference density REAL, DIMENSION(D%NIJT,D%NKT), INTENT(IN) :: PRHODREF ! Reference density
REAL, DIMENSION(D%NIJT,D%NKTB:D%NKTE), INTENT(IN) :: POORHODZ ! One Over (Rhodref times delta Z) REAL, DIMENSION(D%NIJT,D%NKTB:D%NKTE), INTENT(IN) :: POORHODZ ! One Over (Rhodref times delta Z)
REAL, DIMENSION(D%NIJT,D%NKT), INTENT(IN) :: PDZZ ! layer thikness (m) REAL, DIMENSION(D%NIJT,D%NKT), INTENT(IN) :: PDZZ ! layer thikness (m)
REAL, DIMENSION(D%NIJT,D%NKT), INTENT(IN) :: PPABST REAL, DIMENSION(D%NIJT,D%NKT), INTENT(IN) :: PPABST
REAL, DIMENSION(D%NIJT,D%NKT), INTENT(IN) :: PTHT REAL, DIMENSION(D%NIJT,D%NKT), INTENT(IN) :: PTHT
...@@ -310,9 +311,7 @@ REAL, DIMENSION(D%NIJT,D%NKT,KRR), INTENT(INOUT), OPTIONAL :: PFPR ! upper-ai ...@@ -310,9 +311,7 @@ REAL, DIMENSION(D%NIJT,D%NKT,KRR), INTENT(INOUT), OPTIONAL :: PFPR ! upper-ai
!* 0.2 declaration of local variables !* 0.2 declaration of local variables
! !
CHARACTER(LEN=10) :: YSPE ! String for error message CHARACTER(LEN=10) :: YSPE ! String for error message
INTEGER :: IDX, ISEDIM
INTEGER :: JIJ, JK, JL INTEGER :: JIJ, JK, JL
INTEGER, DIMENSION(D%NIJT*D%NKT) :: I1,I2 ! Used to replace the COUNT
LOGICAL :: GPRESENT_PFPR LOGICAL :: GPRESENT_PFPR
REAL :: ZINVTSTEP REAL :: ZINVTSTEP
REAL :: ZZWLBDC, ZRAY, ZZT, ZZWLBDA, ZZCC REAL :: ZZWLBDC, ZRAY, ZZT, ZZWLBDA, ZZCC
...@@ -349,19 +348,6 @@ ZREMAINT(:) = 0. ...@@ -349,19 +348,6 @@ ZREMAINT(:) = 0.
ZREMAINT(IIJB:IIJE) = PTSTEP ZREMAINT(IIJB:IIJE) = PTSTEP
! !
DO WHILE (ANY(ZREMAINT>0.)) DO WHILE (ANY(ZREMAINT>0.))
ISEDIM = 0
DO JK = IKTB,IKTE
DO JIJ = IIJB,IIJE
IF( (PRXT (JIJ,JK)>ICED%XRTMIN(KSPE) .OR. &
PPRXS(JIJ,JK)>ZRSMIN(KSPE)) .AND. &
ZREMAINT(JIJ)>0. ) THEN
ISEDIM = ISEDIM + 1
IDX = ISEDIM
I1(IDX) = JIJ
I2(IDX) = JK
END IF
END DO
END DO
! !
! !
!* 1. Parameters for cloud sedimentation !* 1. Parameters for cloud sedimentation
...@@ -373,43 +359,42 @@ DO WHILE (ANY(ZREMAINT>0.)) ...@@ -373,43 +359,42 @@ DO WHILE (ANY(ZREMAINT>0.))
IF(KSPE==2) THEN IF(KSPE==2) THEN
!******* for cloud !******* for cloud
ZWSED(:,:) = 0. ZWSED(:,:) = 0.
DO JL=1, ISEDIM DO JK = IKTB,IKTE
JIJ=I1(JL) DO JIJ = IIJB,IIJE
JK=I2(JL) IF(PRXT(JIJ,JK)>ICED%XRTMIN(KSPE) .AND. ZREMAINT(JIJ)>0.) THEN
IF(PRXT(JIJ,JK)>ICED%XRTMIN(KSPE)) THEN ZZWLBDC = PLBC(JIJ,JK) * PCONC3D(JIJ,JK) / &
ZZWLBDC = PLBC(JIJ,JK) * PCONC3D(JIJ,JK) / & &(PRHODREF(JIJ,JK) * PRXT(JIJ,JK))
&(PRHODREF(JIJ,JK) * PRXT(JIJ,JK)) ZZWLBDC = ZZWLBDC**ICED%XLBEXC
ZZWLBDC = ZZWLBDC**ICED%XLBEXC ZRAY = PRAY(JIJ,JK) / ZZWLBDC
ZRAY = PRAY(JIJ,JK) / ZZWLBDC ZZT = PTHT(JIJ,JK) * (PPABST(JIJ,JK)/CST%XP00)**(CST%XRD/CST%XCPD)
ZZT = PTHT(JIJ,JK) * (PPABST(JIJ,JK)/CST%XP00)**(CST%XRD/CST%XCPD) ZZWLBDA = 6.6E-8*(101325./PPABST(JIJ,JK))*(ZZT/293.15)
ZZWLBDA = 6.6E-8*(101325./PPABST(JIJ,JK))*(ZZT/293.15) ZZCC = ICED%XCC*(1.+1.26*ZZWLBDA/ZRAY)
ZZCC = ICED%XCC*(1.+1.26*ZZWLBDA/ZRAY) ZWSED(JIJ, JK) = PRHODREF(JIJ,JK)**(-ICED%XCEXVT +1 ) * &
ZWSED(JIJ, JK) = PRHODREF(JIJ,JK)**(-ICED%XCEXVT +1 ) * & &ZZWLBDC**(-ICED%XDC)*ZZCC*PFSEDC(JIJ,JK) * PRXT(JIJ,JK)
&ZZWLBDC**(-ICED%XDC)*ZZCC*PFSEDC(JIJ,JK) * PRXT(JIJ,JK) ENDIF
ENDIF ENDDO
ENDDO ENDDO
ELSEIF(KSPE==4) THEN ELSEIF(KSPE==4) THEN
! ******* for pristine ice ! ******* for pristine ice
ZWSED(:,:) = 0. ZWSED(:,:) = 0.
DO JL=1, ISEDIM DO JK = IKTB,IKTE
JIJ=I1(JL) DO JIJ = IIJB,IIJE
JK=I2(JL) IF(PRXT(JIJ, JK) .GT. MAX(ICED%XRTMIN(4), 1.0E-7) .AND. ZREMAINT(JIJ)>0.) THEN
IF(PRXT(JIJ, JK) .GT. MAX(ICED%XRTMIN(4), 1.0E-7)) THEN ZWSED(JIJ, JK) = ICEP%XFSEDI * PRXT(JIJ, JK) * &
ZWSED(JIJ, JK) = ICEP%XFSEDI * PRXT(JIJ, JK) * & & PRHODREF(JIJ,JK)**(1.-ICED%XCEXVT) * & ! McF&H
& PRHODREF(JIJ,JK)**(1.-ICED%XCEXVT) * & ! McF&H & MAX( 0.05E6,-0.15319E6-0.021454E6* &
& MAX( 0.05E6,-0.15319E6-0.021454E6* & & ALOG(PRHODREF(JIJ,JK)*PRXT(JIJ,JK)) )**ICEP%XEXCSEDI
& ALOG(PRHODREF(JIJ,JK)*PRXT(JIJ,JK)) )**ICEP%XEXCSEDI ENDIF
ENDIF ENDDO
ENDDO ENDDO
#if defined(REPRO48) || defined(REPRO55) #if defined(REPRO48) || defined(REPRO55)
#else #else
ELSEIF(KSPE==5) THEN ELSEIF(KSPE==5) THEN
! ******* for snow ! ******* for snow
ZWSED(:,:) = 0. ZWSED(:,:) = 0.
DO JL=1, ISEDIM DO JK = IKTB,IKTE
JIJ=I1(JL) DO JIJ = IIJB,IIJE
JK=I2(JL) IF(PRXT(JIJ,JK)> ICED%XRTMIN(KSPE) .AND. ZREMAINT(JIJ)>0.) THEN
IF(PRXT(JIJ,JK)> ICED%XRTMIN(KSPE)) THEN
IF (PARAMI%LSNOW_T .AND. PT(JIJ,JK)>263.15) THEN IF (PARAMI%LSNOW_T .AND. PT(JIJ,JK)>263.15) THEN
ZLBDA = MAX(MIN(ICED%XLBDAS_MAX, 10**(14.554-0.0423*PT(JIJ,JK))),ICED%XLBDAS_MIN)*ICED%XTRANS_MP_GAMMAS ZLBDA = MAX(MIN(ICED%XLBDAS_MAX, 10**(14.554-0.0423*PT(JIJ,JK))),ICED%XLBDAS_MIN)*ICED%XTRANS_MP_GAMMAS
ELSE IF (PARAMI%LSNOW_T) THEN ELSE IF (PARAMI%LSNOW_T) THEN
...@@ -425,6 +410,7 @@ DO WHILE (ANY(ZREMAINT>0.)) ...@@ -425,6 +410,7 @@ DO WHILE (ANY(ZREMAINT>0.))
ENDIF ENDIF
ENDDO ENDDO
ENDDO
#endif #endif
ELSE ELSE
! ******* for other species ! ******* for other species
...@@ -450,23 +436,23 @@ DO WHILE (ANY(ZREMAINT>0.)) ...@@ -450,23 +436,23 @@ DO WHILE (ANY(ZREMAINT>0.))
END SELECT END SELECT
! !
ZWSED(:,:) = 0. ZWSED(:,:) = 0.
DO JL=1, ISEDIM DO JK = IKTB,IKTE
JIJ=I1(JL) DO JIJ = IIJB,IIJE
JK=I2(JL) IF(PRXT(JIJ,JK)>ICED%XRTMIN(KSPE) .AND. ZREMAINT(JIJ)>0.) THEN
IF(PRXT(JIJ,JK)>ICED%XRTMIN(KSPE)) THEN ZWSED(JIJ, JK) = ZFSED * PRXT(JIJ, JK)**ZEXSED &
ZWSED(JIJ, JK) = ZFSED * PRXT(JIJ, JK)**ZEXSED & & * PRHODREF(JIJ, JK)**(ZEXSED-ICED%XCEXVT)
& * PRHODREF(JIJ, JK)**(ZEXSED-ICED%XCEXVT) ENDIF
ENDIF ENDDO
ENDDO ENDDO
ENDIF ENDIF
ZMAX_TSTEP(:) = ZREMAINT(:) ZMAX_TSTEP(:) = ZREMAINT(:)
DO JL=1, ISEDIM DO JK = IKTB,IKTE
JIJ=I1(JL) DO JIJ = IIJB,IIJE
JK=I2(JL) IF(PRXT(JIJ,JK)>ICED%XRTMIN(KSPE) .AND. ZWSED(JIJ, JK)>1.E-20 .AND. ZREMAINT(JIJ)>0.) THEN
IF(PRXT(JIJ,JK)>ICED%XRTMIN(KSPE) .AND. ZWSED(JIJ, JK)>1.E-20) THEN ZMAX_TSTEP(JIJ) = MIN(ZMAX_TSTEP(JIJ), PARAMI%XSPLIT_MAXCFL * PRHODREF(JIJ, JK) * &
ZMAX_TSTEP(JIJ) = MIN(ZMAX_TSTEP(JIJ), PARAMI%XSPLIT_MAXCFL * PRHODREF(JIJ, JK) * & & PRXT(JIJ, JK) * PDZZ(JIJ, JK) / ZWSED(JIJ, JK))
& PRXT(JIJ, JK) * PDZZ(JIJ, JK) / ZWSED(JIJ, JK)) ENDIF
ENDIF ENDDO
ENDDO ENDDO
DO JIJ = IIJB, IIJE DO JIJ = IIJB, IIJE
......
This diff is collapsed.
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment