diff --git a/src/common/micro/mode_ice4_sedimentation_stat.F90 b/src/common/micro/mode_ice4_sedimentation_stat.F90 index cd1d7d109e6f660f3646e55146f1184deec1605f..379a1ff26e88da2a65d3b9ee75ad6a6e0cd2530e 100644 --- a/src/common/micro/mode_ice4_sedimentation_stat.F90 +++ b/src/common/micro/mode_ice4_sedimentation_stat.F90 @@ -90,17 +90,10 @@ REAL, DIMENSION(D%NIJT,D%NKT,KRR), OPTIONAL, INTENT(OUT) :: PFPR ! upper-ai LOGICAL :: LLSEA_AND_TOWN INTEGER :: JRR, JIJ, JK, IKB, IKE,IKL, IIJB, IIJE, IKTB, IKTE INTEGER :: ISHIFT, IK, IKPLUS -REAL :: ZQP, ZINVTSTEP, ZGAC, ZGC, ZGAC2, ZGC2, ZRAYDEFO, ZLBDAS -REAL, DIMENSION(D%NIJT) :: ZWSEDW1, ZWSEDW2 ! sedimentation speed +REAL :: ZINVTSTEP, ZGAC, ZGC, ZGAC2, ZGC2, ZRAYDEFO REAL, DIMENSION(D%NIJT) :: ZTSORHODZ ! TimeStep Over (Rhodref times delta Z) REAL, DIMENSION(D%NIJT,0:1,2:KRR) :: ZSED ! sedimentation flux array for each species and for above and current levels -REAL :: PWSEDW, PWSEDWSUP, PINVTSTEP, PTSTEP1, PDZZ1, PRHODREF1, PRXT1 ! -REAL :: ZLBC ! XLBC weighted by sea fraction -REAL :: ZFSEDC -REAL :: ZCONC3D ! droplet condensation -REAL :: ZRAY ! Cloud Mean radius -REAL :: ZZWLBDA, ZZWLBDC, ZZCC REAL(KIND=JPHOOK) :: ZHOOK_HANDLE ! !------------------------------------------------------------------------------- @@ -246,6 +239,9 @@ CONTAINS REAL :: ZCONC3D ! droplet condensation REAL :: ZRAY ! Cloud Mean radius REAL :: ZZWLBDA, ZZWLBDC, ZZCC + INTEGER :: JIJ + REAL :: ZQP + REAL :: ZWSEDW1, ZWSEDW2 !!REAL(KIND=JPHOOK) :: ZHOOK_HANDLE @@ -272,28 +268,28 @@ CONTAINS ZZWLBDA=6.6E-8*(101325./PPABST(JIJ,JK))*(PTHT(JIJ,JK)/293.15) ZZWLBDC=(ZLBC*ZCONC3D/(PRHODREF(JIJ,JK)*PRXT(JIJ)))**ICED%XLBEXC ZZCC=ICED%XCC*(1.+1.26*ZZWLBDA*ZZWLBDC/ZRAY) !! ZCC : Fall speed - ZWSEDW1(JIJ)=PRHODREF(JIJ,JK)**(-ICED%XCEXVT ) * ZZWLBDC**(-ICED%XDC)*ZZCC*ZFSEDC + ZWSEDW1=PRHODREF(JIJ,JK)**(-ICED%XCEXVT ) * ZZWLBDC**(-ICED%XDC)*ZZCC*ZFSEDC ELSE - ZWSEDW1(JIJ)=0. + ZWSEDW1=0. ENDIF IF ( ZQP > ICED%XRTMIN(JRR) ) THEN ZZWLBDA=6.6E-8*(101325./PPABST(JIJ,JK))*(PTHT(JIJ,JK)/293.15) ZZWLBDC=(ZLBC*ZCONC3D/(PRHODREF(JIJ,JK)*ZQP))**ICED%XLBEXC ZZCC=ICED%XCC*(1.+1.26*ZZWLBDA*ZZWLBDC/ZRAY) !! ZCC : Fall speed - ZWSEDW2(JIJ)=PRHODREF(JIJ,JK)**(-ICED%XCEXVT ) * ZZWLBDC**(-ICED%XDC)*ZZCC*ZFSEDC + ZWSEDW2=PRHODREF(JIJ,JK)**(-ICED%XCEXVT ) * ZZWLBDC**(-ICED%XDC)*ZZCC*ZFSEDC ELSE - ZWSEDW2(JIJ)=0. + ZWSEDW2=0. ENDIF ELSE - ZWSEDW1(JIJ)=0. - ZWSEDW2(JIJ)=0. + ZWSEDW1=0. + ZWSEDW2=0. ENDIF !- duplicated code ------------------------------------------------------------------------- - IF (ZWSEDW2(JIJ) /= 0.) THEN - ZSED(JIJ,IK,JRR)=FWSED1(ZWSEDW1(JIJ),PTSTEP,PDZZ(JIJ,JK),PRHODREF(JIJ,JK),PRXT(JIJ),ZINVTSTEP) & - & + FWSED2(ZWSEDW2(JIJ),PTSTEP,PDZZ(JIJ,JK),ZSED(JIJ,IKPLUS,JRR)) + IF (ZWSEDW2 /= 0.) THEN + ZSED(JIJ,IK,JRR)=FWSED1(ZWSEDW1,PTSTEP,PDZZ(JIJ,JK),PRHODREF(JIJ,JK),PRXT(JIJ),ZINVTSTEP) & + & + FWSED2(ZWSEDW2,PTSTEP,PDZZ(JIJ,JK),ZSED(JIJ,IKPLUS,JRR)) ELSE - ZSED(JIJ,IK,JRR)=FWSED1(ZWSEDW1(JIJ),PTSTEP,PDZZ(JIJ,JK),PRHODREF(JIJ,JK),PRXT(JIJ),ZINVTSTEP) + ZSED(JIJ,IK,JRR)=FWSED1(ZWSEDW1,PTSTEP,PDZZ(JIJ,JK),PRHODREF(JIJ,JK),PRXT(JIJ),ZINVTSTEP) ENDIF !------------------------------------------------------------------------------------------- ENDDO @@ -305,6 +301,9 @@ CONTAINS SUBROUTINE PRISTINE_ICE(PRXT) REAL, INTENT(IN) :: PRXT(D%NIJT) ! mr of specy X + INTEGER :: JIJ + REAL :: ZQP + REAL :: ZWSEDW1, ZWSEDW2 !!REAL(KIND=JPHOOK) :: ZHOOK_HANDLE @@ -316,31 +315,31 @@ CONTAINS IF ((PRXT(JIJ) > ICED%XRTMIN(JRR)) .OR. (ZQP > ICED%XRTMIN(JRR))) THEN !calculation of w IF ( PRXT(JIJ) > MAX(ICED%XRTMIN(JRR),1.0E-7 ) ) THEN - ZWSEDW1(JIJ)= ICEP%XFSEDI * & + ZWSEDW1= ICEP%XFSEDI * & & PRHODREF(JIJ,JK)**(-ICED%XCEXVT) * & ! McF&H & MAX( 0.05E6,-0.15319E6-0.021454E6* & & ALOG(PRHODREF(JIJ,JK)*PRXT(JIJ)) )**ICEP%XEXCSEDI ELSE - ZWSEDW1(JIJ)=0. + ZWSEDW1=0. ENDIF IF ( ZQP > MAX(ICED%XRTMIN(JRR),1.0E-7 ) ) THEN - ZWSEDW2(JIJ)= ICEP%XFSEDI * & + ZWSEDW2= ICEP%XFSEDI * & & PRHODREF(JIJ,JK)**(-ICED%XCEXVT) * & ! McF&H & MAX( 0.05E6,-0.15319E6-0.021454E6* & & ALOG(PRHODREF(JIJ,JK)*ZQP) )**ICEP%XEXCSEDI ELSE - ZWSEDW2(JIJ)=0. + ZWSEDW2=0. ENDIF ELSE - ZWSEDW1(JIJ)=0. - ZWSEDW2(JIJ)=0. + ZWSEDW1=0. + ZWSEDW2=0. ENDIF !- duplicated code ------------------------------------------------------------------------- - IF (ZWSEDW2(JIJ) /= 0.) THEN - ZSED(JIJ,IK,JRR)=FWSED1(ZWSEDW1(JIJ),PTSTEP,PDZZ(JIJ,JK),PRHODREF(JIJ,JK),PRXT(JIJ),ZINVTSTEP) & - & + FWSED2(ZWSEDW2(JIJ),PTSTEP,PDZZ(JIJ,JK),ZSED(JIJ,IKPLUS,JRR)) + IF (ZWSEDW2 /= 0.) THEN + ZSED(JIJ,IK,JRR)=FWSED1(ZWSEDW1,PTSTEP,PDZZ(JIJ,JK),PRHODREF(JIJ,JK),PRXT(JIJ),ZINVTSTEP) & + & + FWSED2(ZWSEDW2,PTSTEP,PDZZ(JIJ,JK),ZSED(JIJ,IKPLUS,JRR)) ELSE - ZSED(JIJ,IK,JRR)=FWSED1(ZWSEDW1(JIJ),PTSTEP,PDZZ(JIJ,JK),PRHODREF(JIJ,JK),PRXT(JIJ),ZINVTSTEP) + ZSED(JIJ,IK,JRR)=FWSED1(ZWSEDW1,PTSTEP,PDZZ(JIJ,JK),PRHODREF(JIJ,JK),PRXT(JIJ),ZINVTSTEP) ENDIF !------------------------------------------------------------------------------------------- ENDDO @@ -352,6 +351,9 @@ CONTAINS SUBROUTINE SNOW(PRXT) REAL, INTENT(IN) :: PRXT(D%NIJT) ! mr of specy X + INTEGER :: JIJ + REAL :: ZQP, ZLBDAS + REAL :: ZWSEDW1, ZWSEDW2 !!REAL(KIND=JPHOOK) :: ZHOOK_HANDLE @@ -373,31 +375,31 @@ CONTAINS END IF !calculation of w IF ( PRXT(JIJ) > ICED%XRTMIN(JRR) ) THEN - ZWSEDW1(JIJ)= ICEP%XFSEDS * & + ZWSEDW1= ICEP%XFSEDS * & & PRHODREF(JIJ,JK)**(-ICED%XCEXVT) * & & (1+(ICED%XFVELOS/ZLBDAS)**ICED%XALPHAS)**(-ICED%XNUS+ICEP%XEXSEDS/ICED%XALPHAS)* & & ZLBDAS**(ICED%XBS+ICEP%XEXSEDS) ELSE - ZWSEDW1(JIJ)=0. + ZWSEDW1=0. ENDIF IF ( ZQP > ICED%XRTMIN(JRR) ) THEN - ZWSEDW2(JIJ)= ICEP%XFSEDS * & + ZWSEDW2= ICEP%XFSEDS * & & PRHODREF(JIJ,JK)**(-ICED%XCEXVT) * & & (1+(ICED%XFVELOS/ZLBDAS)**ICED%XALPHAS)**(-ICED%XNUS+ICEP%XEXSEDS/ICED%XALPHAS)* & & ZLBDAS**(ICED%XBS+ICEP%XEXSEDS) ELSE - ZWSEDW2(JIJ)=0. + ZWSEDW2=0. ENDIF ELSE - ZWSEDW1(JIJ)=0. - ZWSEDW2(JIJ)=0. + ZWSEDW1=0. + ZWSEDW2=0. ENDIF !- duplicated code ------------------------------------------------------------------------- - IF (ZWSEDW2(JIJ) /= 0.) THEN - ZSED(JIJ,IK,JRR)=FWSED1(ZWSEDW1(JIJ),PTSTEP,PDZZ(JIJ,JK),PRHODREF(JIJ,JK),PRXT(JIJ),ZINVTSTEP) & - & + FWSED2(ZWSEDW2(JIJ),PTSTEP,PDZZ(JIJ,JK),ZSED(JIJ,IKPLUS,JRR)) + IF (ZWSEDW2 /= 0.) THEN + ZSED(JIJ,IK,JRR)=FWSED1(ZWSEDW1,PTSTEP,PDZZ(JIJ,JK),PRHODREF(JIJ,JK),PRXT(JIJ),ZINVTSTEP) & + & + FWSED2(ZWSEDW2,PTSTEP,PDZZ(JIJ,JK),ZSED(JIJ,IKPLUS,JRR)) ELSE - ZSED(JIJ,IK,JRR)=FWSED1(ZWSEDW1(JIJ),PTSTEP,PDZZ(JIJ,JK),PRHODREF(JIJ,JK),PRXT(JIJ),ZINVTSTEP) + ZSED(JIJ,IK,JRR)=FWSED1(ZWSEDW1,PTSTEP,PDZZ(JIJ,JK),PRHODREF(JIJ,JK),PRXT(JIJ),ZINVTSTEP) ENDIF !------------------------------------------------------------------------------------------- ENDDO @@ -411,6 +413,9 @@ CONTAINS REAL, INTENT(IN) :: PFSED REAL, INTENT(IN) :: PEXSED REAL, INTENT(IN) :: PRXT(D%NIJT) ! mr of specy X + INTEGER :: JIJ + REAL :: ZQP + REAL :: ZWSEDW1, ZWSEDW2 !!REAL(KIND=JPHOOK) :: ZHOOK_HANDLE @@ -422,25 +427,25 @@ CONTAINS IF ((PRXT(JIJ) > ICED%XRTMIN(JRR)) .OR. (ZQP > ICED%XRTMIN(JRR))) THEN !calculation of w IF ( PRXT(JIJ) > ICED%XRTMIN(JRR) ) THEN - ZWSEDW1(JIJ)= PFSED *PRXT(JIJ)**(PEXSED-1)*PRHODREF(JIJ,JK)**(PEXSED-ICED%XCEXVT-1) + ZWSEDW1= PFSED *PRXT(JIJ)**(PEXSED-1)*PRHODREF(JIJ,JK)**(PEXSED-ICED%XCEXVT-1) ELSE - ZWSEDW1(JIJ)=0. + ZWSEDW1=0. ENDIF IF ( ZQP > ICED%XRTMIN(JRR) ) THEN - ZWSEDW2(JIJ)= PFSED *ZQP**(PEXSED-1)*PRHODREF(JIJ,JK)**(PEXSED-ICED%XCEXVT-1) + ZWSEDW2= PFSED *ZQP**(PEXSED-1)*PRHODREF(JIJ,JK)**(PEXSED-ICED%XCEXVT-1) ELSE - ZWSEDW2(JIJ)=0. + ZWSEDW2=0. ENDIF ELSE - ZWSEDW1(JIJ)=0. - ZWSEDW2(JIJ)=0. + ZWSEDW1=0. + ZWSEDW2=0. ENDIF !- duplicated code ------------------------------------------------------------------------- - IF (ZWSEDW2(JIJ) /= 0.) THEN - ZSED(JIJ,IK,JRR)=FWSED1(ZWSEDW1(JIJ),PTSTEP,PDZZ(JIJ,JK),PRHODREF(JIJ,JK),PRXT(JIJ),ZINVTSTEP) & - & + FWSED2(ZWSEDW2(JIJ),PTSTEP,PDZZ(JIJ,JK),ZSED(JIJ,IKPLUS,JRR)) + IF (ZWSEDW2 /= 0.) THEN + ZSED(JIJ,IK,JRR)=FWSED1(ZWSEDW1,PTSTEP,PDZZ(JIJ,JK),PRHODREF(JIJ,JK),PRXT(JIJ),ZINVTSTEP) & + & + FWSED2(ZWSEDW2,PTSTEP,PDZZ(JIJ,JK),ZSED(JIJ,IKPLUS,JRR)) ELSE - ZSED(JIJ,IK,JRR)=FWSED1(ZWSEDW1(JIJ),PTSTEP,PDZZ(JIJ,JK),PRHODREF(JIJ,JK),PRXT(JIJ),ZINVTSTEP) + ZSED(JIJ,IK,JRR)=FWSED1(ZWSEDW1,PTSTEP,PDZZ(JIJ,JK),PRHODREF(JIJ,JK),PRXT(JIJ),ZINVTSTEP) ENDIF !------------------------------------------------------------------------------------------- ENDDO