From a602bef9716f62b185ff09ec2fee878391a1f2c3 Mon Sep 17 00:00:00 2001 From: Philippe WAUTELET <philippe.wautelet@aero.obs-mip.fr> Date: Fri, 10 Feb 2017 11:41:29 +0100 Subject: [PATCH] Philippe 10/02/2017: BITREP for rain_ice.f90 --- src/MNH/rain_ice.f90 | 367 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 367 insertions(+) diff --git a/src/MNH/rain_ice.f90 b/src/MNH/rain_ice.f90 index 65c766ea9..5a0c4b83c 100644 --- a/src/MNH/rain_ice.f90 +++ b/src/MNH/rain_ice.f90 @@ -630,7 +630,11 @@ IF( IMICRO >= 0 ) THEN !$acc end kernels !$acc update self(ZZW) !acc kernels +#ifndef MNH_BITREP ZZW(:) = EXP( XALPI - XBETAI/ZZT(:) - XGAMI*ALOG(ZZT(:) ) ) +#else + ZZW(:) = BR_EXP( XALPI - XBETAI/ZZT(:) - XGAMI*BR_LOG(ZZT(:) ) ) +#endif !$acc update device(ZZW) !$acc kernels ZSSI(:) = ZRVT(:)*( ZPRES(:)-ZZW(:) ) / ( (XMV/XMD) * ZZW(:) ) - 1.0 @@ -653,7 +657,11 @@ IF( IMICRO >= 0 ) THEN !* 3.1 compute the slope parameter Lbda_r ! WHERE( ZRRT(:)>0.0 ) +#ifndef MNH_BITREP ZLBDAR(:) = XLBR*( ZRHODREF(:)*MAX( ZRRT(:),XRTMIN(3) ) )**XLBEXR +#else + ZLBDAR(:) = XLBR*BR_POW( ZRHODREF(:)*MAX( ZRRT(:),XRTMIN(3) ) ,XLBEXR) +#endif END WHERE ! IF( OWARM ) THEN ! Check if the formation of the raindrops by the slow @@ -1115,13 +1123,26 @@ DO JN = 1 , KSPLITR JL = ILISTC(JJ) IF (ZRCS(JL) .GT. ZRTMIN(2) .AND. ZRCT(JL) .GT. XRTMIN(2)) THEN ZWLBDC(JL) = ZWLBDC(JL) * ZCONC(JL) / (ZRHODREFC(JL) * ZRCT(JL)) +#ifndef MNH_BITREP ZWLBDC(JL) = ZWLBDC(JL)**XLBEXC +#else + ZWLBDC(JL) = BR_POW(ZWLBDC(JL),XLBEXC) +#endif ZRAY1D(JL) = ZRAY1D(JL) / ZWLBDC(JL) !! ZRAY : mean diameter=M(1)/2 +#ifndef MNH_BITREP ZZT(JL) = ZZT(JL) * (ZPRES(JL)/XP00)**(XRD/XCPD) +#else + ZZT(JL) = ZZT(JL) * BR_POW(ZPRES(JL)/XP00,XRD/XCPD) +#endif ZWLBDA(JL) = 6.6E-8*(101325./ZPRES(JL))*(ZZT(JL)/293.15) ZCC(JL) = XCC*(1.+1.26*ZWLBDA(JL)/ZRAY1D(JL)) !! XCC modified for cloud +#ifndef MNH_BITREP ZWSED (IC1(JL),IC2(JL),IC3(JL))= ZRHODREFC(JL)**(-XCEXVT +1 ) * & ZWLBDC(JL)**(-XDC)*ZCC(JL)*ZFSEDC1D(JL) * ZRCS(JL) +#else + ZWSED (IC1(JL),IC2(JL),IC3(JL))= BR_POW(ZRHODREFC(JL),-XCEXVT +1) * & + BR_POW(ZWLBDC(JL),-XDC)*ZCC(JL)*ZFSEDC1D(JL) * ZRCS(JL) +#endif END IF END DO END IF @@ -1162,8 +1183,13 @@ DO JN = 1 , KSPLITR END DO DO JJ = 1, ILISTLENR JL = ILISTR(JJ) +#ifndef MNH_BITREP ZWSED (IR1(JL),IR2(JL),IR3(JL))= XFSEDR * ZRRS(JL)**XEXSEDR * & ZRHODREFR(JL)**(XEXSEDR-XCEXVT) +#else + ZWSED (IR1(JL),IR2(JL),IR3(JL))= XFSEDR * BR_POW(ZRRS(JL),XEXSEDR) * & + BR_POW(ZRHODREFR(JL),XEXSEDR-XCEXVT) +#endif END DO END IF DO JK = IKTB , IKTE @@ -1203,10 +1229,17 @@ DO JN = 1 , KSPLITR END DO DO JJ = 1, ILISTLENI JL = ILISTI(JJ) +#ifndef MNH_BITREP ZWSED (II1(JL),II2(JL),II3(JL))= XFSEDI * ZRIS(JL) * & ZRHODREFI(JL)**(1.0-XCEXVT) * & ! McF&H MAX( 0.05E6,-0.15319E6-0.021454E6* & ALOG(ZRHODREFI(JL)*ZRIS(JL)) )**XEXCSEDI +#else + ZWSED (II1(JL),II2(JL),II3(JL))= XFSEDI * ZRIS(JL) * & + BR_POW(ZRHODREFI(JL),1.0-XCEXVT) * & ! McF&H + BR_POW(MAX( 0.05E6,-0.15319E6-0.021454E6* & + BR_LOG(ZRHODREFI(JL)*ZRIS(JL)) ),XEXCSEDI) +#endif END DO END IF DO JK = IKTB , IKTE @@ -1244,8 +1277,13 @@ DO JN = 1 , KSPLITR END DO DO JJ = 1, ILISTLENS JL = ILISTS(JJ) +#ifndef MNH_BITREP ZWSED (IS1(JL),IS2(JL),IS3(JL))= XFSEDS * ZRSS(JL)**XEXSEDS * & ZRHODREFS(JL)**(XEXSEDS-XCEXVT) +#else + ZWSED (IS1(JL),IS2(JL),IS3(JL))= XFSEDS * BR_POW(ZRSS(JL),XEXSEDS) * & + BR_POW(ZRHODREFS(JL),XEXSEDS-XCEXVT) +#endif END DO END IF DO JK = IKTB , IKTE @@ -1284,8 +1322,13 @@ DO JN = 1 , KSPLITR END DO DO JJ = 1, ILISTLENG JL = ILISTG(JJ) +#ifndef MNH_BITREP ZWSED (IG1(JL),IG2(JL),IG3(JL))= XFSEDG * ZRGS(JL)**XEXSEDG * & ZRHODREFG(JL)**(XEXSEDG-XCEXVT) +#else + ZWSED (IG1(JL),IG2(JL),IG3(JL))= XFSEDG * BR_POW(ZRGS(JL),XEXSEDG) * & + BR_POW(ZRHODREFG(JL),XEXSEDG-XCEXVT) +#endif END DO END IF DO JK = IKTB , IKTE @@ -1325,8 +1368,13 @@ END IF END DO DO JJ = 1, ILISTLENH JL = ILISTH(JJ) +#ifndef MNH_BITREP ZWSED (IH1(JL),IH2(JL),IH3(JL))= XFSEDH * ZRHS(JL)**XEXSEDH * & ZRHODREFH(JL)**(XEXSEDH-XCEXVT) +#else + ZWSED (IH1(JL),IH2(JL),IH3(JL))= XFSEDH * BR_POW(ZRHS(JL),XEXSEDH) * & + BR_POW(ZRHODREFH(JL),XEXSEDH-XCEXVT) +#endif END DO END IF DO JK = IKTB , IKTE @@ -1496,19 +1544,39 @@ END DO !IF ( PRCS(JI,JJ,JK) > ZRTMIN(2) ) THEN IF(PRCS(JI,JJ,JK) > ZRTMIN(2) .AND. PRCT(JI,JJ,JK) > ZRTMIN(2)) THEN ZZWLBDA=6.6E-8*(101325./PPABST(JI,JJ,JK))*(PTHT(JI,JJ,JK)/293.15) +#ifndef MNH_BITREP ZZWLBDC=(ZLBC(JI,JJ,JK)*ZCONC3D(JI,JJ,JK) & &/(PRHODREF(JI,JJ,JK)*PRCT(JI,JJ,JK)))**XLBEXC +#else + ZZWLBDC=BR_POW(ZLBC(JI,JJ,JK)*ZCONC3D(JI,JJ,JK) & + &/(PRHODREF(JI,JJ,JK)*PRCT(JI,JJ,JK)),XLBEXC) +#endif ZZCC=XCC*(1.+1.26*ZZWLBDA*ZZWLBDC/ZRAY(JI,JJ,JK)) !! ZCC : Fall speed +#ifndef MNH_BITREP ZWSEDW1 (JI,JJ,JK)=PRHODREF(JI,JJ,JK)**(-XCEXVT ) * & & ZZWLBDC**(-XDC)*ZZCC*ZFSEDC(JI,JJ,JK) +#else + ZWSEDW1 (JI,JJ,JK)=BR_POW(PRHODREF(JI,JJ,JK),-XCEXVT) * & + & BR_POW(ZZWLBDC,-XDC)*ZZCC*ZFSEDC(JI,JJ,JK) +#endif ENDIF IF ( ZQP(JI,JJ) > ZRTMIN(2) ) THEN ZZWLBDA=6.6E-8*(101325./PPABST(JI,JJ,JK))*(PTHT(JI,JJ,JK)/293.15) +#ifndef MNH_BITREP ZZWLBDC=(ZLBC(JI,JJ,JK)*ZCONC3D(JI,JJ,JK) & &/(PRHODREF(JI,JJ,JK)*ZQP(JI,JJ)))**XLBEXC +#else + ZZWLBDC=BR_POW(ZLBC(JI,JJ,JK)*ZCONC3D(JI,JJ,JK) & + &/(PRHODREF(JI,JJ,JK)*ZQP(JI,JJ)),XLBEXC) +#endif ZZCC=XCC*(1.+1.26*ZZWLBDA*ZZWLBDC/ZRAY(JI,JJ,JK)) !! ZCC : Fall speed +#ifndef MNH_BITREP ZWSEDW2 (JI,JJ,JK)=PRHODREF(JI,JJ,JK)**(-XCEXVT ) * & & ZZWLBDC**(-XDC)*ZZCC*ZFSEDC(JI,JJ,JK) +#else + ZWSEDW2 (JI,JJ,JK)=BR_POW(PRHODREF(JI,JJ,JK),-XCEXVT ) * & + & BR_POW(ZZWLBDC,-XDC)*ZZCC*ZFSEDC(JI,JJ,JK) +#endif ENDIF ENDDO @@ -1559,12 +1627,22 @@ END DO JJ=I2(JL) !calculation of w IF ( PRRS(JI,JJ,JK) > ZRTMIN(3) ) THEN +#ifndef MNH_BITREP ZWSEDW1 (JI,JJ,JK)= XFSEDR *PRRS(JI,JJ,JK)**(XEXSEDR-1)* & PRHODREF(JI,JJ,JK)**(XEXSEDR-XCEXVT-1) +#else + ZWSEDW1 (JI,JJ,JK)= XFSEDR *BR_POW(PRRS(JI,JJ,JK),XEXSEDR-1)* & + BR_POW(PRHODREF(JI,JJ,JK),XEXSEDR-XCEXVT-1) +#endif ENDIF IF ( ZQP(JI,JJ) > ZRTMIN(3) ) THEN +#ifndef MNH_BITREP ZWSEDW2 (JI,JJ,JK)= XFSEDR *(ZQP(JI,JJ))**(XEXSEDR-1)* & PRHODREF(JI,JJ,JK)**(XEXSEDR-XCEXVT-1) +#else + ZWSEDW2 (JI,JJ,JK)= XFSEDR *BR_POW(ZQP(JI,JJ),XEXSEDR-1)* & + BR_POW(PRHODREF(JI,JJ,JK),XEXSEDR-XCEXVT-1) +#endif ENDIF ENDDO DO JJ = IJB, IJE @@ -1611,16 +1689,30 @@ END DO JJ=I2(JL) !calculation of w IF ( PRIS(JI,JJ,JK) > MAX(ZRTMIN(4),1.0E-7 ) ) THEN +#ifndef MNH_BITREP ZWSEDW1 (JI,JJ,JK)= XFSEDI * & & PRHODREF(JI,JJ,JK)**(XCEXVT) * & ! McF&H & MAX( 0.05E6,-0.15319E6-0.021454E6* & & ALOG(PRHODREF(JI,JJ,JK)*PRIS(JI,JJ,JK)) )**XEXCSEDI +#else + ZWSEDW1 (JI,JJ,JK)= XFSEDI * & + & BR_POW(PRHODREF(JI,JJ,JK),XCEXVT) * & ! McF&H + & BR_POW(MAX( 0.05E6,-0.15319E6-0.021454E6* & + & BR_LOG(PRHODREF(JI,JJ,JK)*PRIS(JI,JJ,JK)) ),XEXCSEDI) +#endif ENDIF IF ( ZQP(JI,JJ) > MAX(ZRTMIN(4),1.0E-7 ) ) THEN +#ifndef MNH_BITREP ZWSEDW2 (JI,JJ,JK)= XFSEDI * & & PRHODREF(JI,JJ,JK)**(XCEXVT) * & ! McF&H & MAX( 0.05E6,-0.15319E6-0.021454E6* & & ALOG(PRHODREF(JI,JJ,JK)*ZQP(JI,JJ)) )**XEXCSEDI +#else + ZWSEDW2 (JI,JJ,JK)= XFSEDI * & + & BR_POW(PRHODREF(JI,JJ,JK),XCEXVT) * & ! McF&H + & BR_POW(MAX( 0.05E6,-0.15319E6-0.021454E6* & + & BR_LOG(PRHODREF(JI,JJ,JK)*ZQP(JI,JJ)) ),XEXCSEDI) +#endif ENDIF ENDDO DO JJ = IJB, IJE @@ -1668,12 +1760,22 @@ END DO JJ=I2(JL) !calculation of w IF (PRSS(JI,JJ,JK) > ZRTMIN(5) ) THEN +#ifndef MNH_BITREP ZWSEDW1(JI,JJ,JK)=XFSEDS*(PRSS(JI,JJ,JK))**(XEXSEDS-1)*& PRHODREF(JI,JJ,JK)**(XEXSEDS-XCEXVT-1) +#else + ZWSEDW1(JI,JJ,JK)=XFSEDS*BR_POW(PRSS(JI,JJ,JK),XEXSEDS-1)*& + BR_POW(PRHODREF(JI,JJ,JK),XEXSEDS-XCEXVT-1) +#endif ENDIF IF ( ZQP(JI,JJ) > ZRTMIN(5) ) THEN +#ifndef MNH_BITREP ZWSEDW2(JI,JJ,JK)=XFSEDS*(ZQP(JI,JJ))**(XEXSEDS-1)*& PRHODREF(JI,JJ,JK)**(XEXSEDS-XCEXVT-1) +#else + ZWSEDW2(JI,JJ,JK)=XFSEDS*BR_POW(ZQP(JI,JJ),XEXSEDS-1)*& + BR_POW(PRHODREF(JI,JJ,JK),XEXSEDS-XCEXVT-1) +#endif ENDIF ENDDO DO JJ = IJB, IJE @@ -1721,12 +1823,22 @@ END DO JJ=I2(JL) !calculation of w IF ( PRGS(JI,JJ,JK) > ZRTMIN(6) ) THEN +#ifndef MNH_BITREP ZWSEDW1 (JI,JJ,JK)= XFSEDG*(PRGS(JI,JJ,JK))**(XEXSEDG-1) * & PRHODREF(JI,JJ,JK)**(XEXSEDG-XCEXVT-1) +#else + ZWSEDW1 (JI,JJ,JK)= XFSEDG*BR_POW(PRGS(JI,JJ,JK),XEXSEDG-1) * & + BR_POW(PRHODREF(JI,JJ,JK),XEXSEDG-XCEXVT-1) +#endif ENDIF IF ( ZQP(JI,JJ) > ZRTMIN(6) ) THEN +#ifndef MNH_BITREP ZWSEDW2 (JI,JJ,JK)= XFSEDG*(ZQP(JI,JJ))**(XEXSEDG-1) * & PRHODREF(JI,JJ,JK)**(XEXSEDG-XCEXVT-1) +#else + ZWSEDW2 (JI,JJ,JK)= XFSEDG*BR_POW(ZQP(JI,JJ),XEXSEDG-1) * & + BR_POW(PRHODREF(JI,JJ,JK),XEXSEDG-XCEXVT-1) +#endif ENDIF ENDDO DO JJ = IJB, IJE @@ -1772,12 +1884,22 @@ END DO JJ=I2(JL) !calculation of w IF ((PRHS(JI,JJ,JK)+ZQP(JI,JJ)) > ZRTMIN(7) ) THEN +#ifndef MNH_BITREP ZWSEDW1 (JI,JJ,JK)= XFSEDH * (PRHS(JI,JJ,JK))**(XEXSEDH-1) * & PRHODREF(JI,JJ,JK)**(XEXSEDH-XCEXVT-1) +#else + ZWSEDW1 (JI,JJ,JK)= XFSEDH * BR_POW(PRHS(JI,JJ,JK),XEXSEDH-1) * & + BR_POW(PRHODREF(JI,JJ,JK),XEXSEDH-XCEXVT-1) +#endif ENDIF IF ( ZQP(JI,JJ) > ZRTMIN(7) ) THEN +#ifndef MNH_BITREP ZWSEDW2 (JI,JJ,JK)= XFSEDH * ZQP(JI,JJ)**(XEXSEDH-1) * & PRHODREF(JI,JJ,JK)**(XEXSEDH-XCEXVT-1) +#else + ZWSEDW2 (JI,JJ,JK)= XFSEDH * BR_POW(ZQP(JI,JJ),XEXSEDH-1) * & + BR_POW(PRHODREF(JI,JJ,JK),XEXSEDH-XCEXVT-1) +#endif ENDIF ENDDO DO JJ = IJB, IJE @@ -1896,11 +2018,19 @@ IF( INEGT >= 1 ) THEN ZZT(JL) = ZT (I1(JL),I2(JL),I3(JL)) ZPRES(JL) = PPABST(I1(JL),I2(JL),I3(JL)) ENDDO +#ifndef MNH_BITREP ZZW(:) = EXP( XALPI - XBETAI/ZZT(:) - XGAMI*ALOG(ZZT(:) ) ) ! es_i +#else + ZZW(:) = BR_EXP( XALPI - XBETAI/ZZT(:) - XGAMI*BR_LOG(ZZT(:) ) ) ! es_i +#endif ZZW(:) = MIN(ZPRES(:)/2., ZZW(:)) ! safety limitation ZSSI(:) = ZRVT(:)*( ZPRES(:)-ZZW(:) ) / ( (XMV/XMD) * ZZW(:) ) - 1.0 ! Supersaturation over ice +#ifndef MNH_BITREP ZUSW(:) = EXP( XALPW - XBETAW/ZZT(:) - XGAMW*ALOG(ZZT(:) ) ) ! es_w +#else + ZUSW(:) = BR_EXP( XALPW - XBETAW/ZZT(:) - XGAMW*BR_LOG(ZZT(:) ) ) ! es_w +#endif ZUSW(:) = MIN(ZPRES(:)/2.,ZUSW(:)) ! safety limitation ZUSW(:) = ( ZUSW(:)/ZZW(:) )*( (ZPRES(:)-ZZW(:))/(ZPRES(:)-ZUSW(:)) ) - 1.0 ! Supersaturation of saturated water vapor over ice @@ -1912,11 +2042,20 @@ IF( INEGT >= 1 ) THEN ZZW(:) = 0.0 ZSSI(:) = MIN( ZSSI(:), ZUSW(:) ) ! limitation of SSi according to SSw=0 WHERE( (ZZT(:)<XTT-5.0) .AND. (ZSSI(:)>0.0) ) +#ifndef MNH_BITREP ZZW(:) = XNU20 * EXP( XALPHA2*ZSSI(:)-XBETA2 ) +#else + ZZW(:) = XNU20 * BR_EXP( XALPHA2*ZSSI(:)-XBETA2 ) +#endif END WHERE WHERE( (ZZT(:)<=XTT-2.0) .AND. (ZZT(:)>=XTT-5.0) .AND. (ZSSI(:)>0.0) ) +#ifndef MNH_BITREP ZZW(:) = MAX( XNU20 * EXP( -XBETA2 ),XNU10 * EXP( -XBETA1*(ZZT(:)-XTT) ) * & ( ZSSI(:)/ZUSW(:) )**XALPHA1 ) +#else + ZZW(:) = MAX( XNU20 * BR_EXP( -XBETA2 ),XNU10 * BR_EXP( -XBETA1*(ZZT(:)-XTT) ) * & + BR_POW( ZSSI(:)/ZUSW(:),XALPHA1 ) ) +#endif END WHERE ZZW(:) = ZZW(:) - ZCIT(:) ZZWMAX = MAXVAL(ZZW(:)) @@ -2004,7 +2143,11 @@ LOGICAL,DIMENSION(:),ALLOCATABLE :: GWORK GWORK =(ZZT(:)<XTT-35.0) .AND. (ZRCT(:)>XRTMIN(2)) .AND. (ZRCS(:)>0.) WHERE (GWORK) ZZW(:) = MIN( ZRCS(:),XHON*ZRHODREF(:)*ZRCT(:) & +#ifndef MNH_BITREP *EXP( XALPHA3*(ZZT(:)-XTT)-XBETA3 ) ) +#else + *BR_EXP( XALPHA3*(ZZT(:)-XTT)-XBETA3 ) ) +#endif ZRIS(:) = ZRIS(:) + ZZW(:) ZRCS(:) = ZRCS(:) - ZZW(:) ZTHS(:) = ZTHS(:) + ZZW(:)*(ZLSFACT(:)-ZLVFACT(:)) ! f(L_f*(RCHONI)) @@ -2048,17 +2191,28 @@ LOGICAL,DIMENSION(:),ALLOCATABLE :: GWORK ! !acc kernels ZKA(:) = 2.38E-2 + 0.0071E-2 * ( ZZT(:) - XTT ) ! k_a +#ifndef MNH_BITREP ZDV(:) = 0.211E-4 * (ZZT(:)/XTT)**1.94 * (XP00/ZPRES(:)) ! D_v +#else + ZDV(:) = 0.211E-4 * BR_POW(ZZT(:)/XTT,1.94) * (XP00/ZPRES(:)) ! D_v +#endif !acc end kernels ! !* 3.4.1 compute the thermodynamical function A_i(T,P) !* and the c^prime_j (in the ventilation factor) ! +#ifndef MNH_BITREP ZAI(:) = EXP( XALPI - XBETAI/ZZT(:) - XGAMI*ALOG(ZZT(:) ) ) ! es_i ZAI(:) = ( XLSTT + (XCPV-XCI)*(ZZT(:)-XTT) )**2 / (ZKA(:)*XRV*ZZT(:)**2) & + ( XRV*ZZT(:) ) / (ZDV(:)*ZAI(:)) ZCJ(:) = XSCFAC * ZRHODREF(:)**0.3 / SQRT( 1.718E-5+0.0049E-5*(ZZT(:)-XTT) ) +#else + ZAI(:) = BR_EXP( XALPI - XBETAI/ZZT(:) - XGAMI*BR_LOG(ZZT(:) ) ) ! es_i + ZAI(:) = ( XLSTT + (XCPV-XCI)*(ZZT(:)-XTT) )**2 / (ZKA(:)*XRV*ZZT(:)**2) & + + ( XRV*ZZT(:) ) / (ZDV(:)*ZAI(:)) + ZCJ(:) = XSCFAC * BR_POW(ZRHODREF(:),0.3) / SQRT( 1.718E-5+0.0049E-5*(ZZT(:)-XTT) ) +#endif ! !* 3.4.2 compute the riming-conversion of r_c for r_i production: RCAUTI ! @@ -2074,13 +2228,23 @@ LOGICAL,DIMENSION(:),ALLOCATABLE :: GWORK !* 3.4.3 compute the deposition on r_s: RVDEPS ! WHERE ( ZRST(:)>0.0 ) +#ifndef MNH_BITREP ZLBDAS(:) = MIN( XLBDAS_MAX, & XLBS*( ZRHODREF(:)*MAX( ZRST(:),XRTMIN(5) ) )**XLBEXS ) +#else + ZLBDAS(:) = MIN( XLBDAS_MAX, & + XLBS*BR_POW( ZRHODREF(:)*MAX( ZRST(:),XRTMIN(5) ),XLBEXS ) ) +#endif END WHERE ZZW(:) = 0.0 WHERE ( (ZRST(:)>XRTMIN(5)) .AND. (ZRSS(:)>0.0) ) +#ifndef MNH_BITREP ZZW(:) = ( ZSSI(:)/(ZRHODREF(:)*ZAI(:)) ) * & ( X0DEPS*ZLBDAS(:)**XEX0DEPS + X1DEPS*ZCJ(:)*ZLBDAS(:)**XEX1DEPS ) +#else + ZZW(:) = ( ZSSI(:)/(ZRHODREF(:)*ZAI(:)) ) * & + ( X0DEPS*BR_POW(ZLBDAS(:),XEX0DEPS) + X1DEPS*ZCJ(:)*BR_POW(ZLBDAS(:),XEX1DEPS) ) +#endif ZZW(:) = MIN( ZRVS(:),ZZW(:) )*(0.5+SIGN(0.5,ZZW(:))) & - MIN( ZRSS(:),ABS(ZZW(:)) )*(0.5-SIGN(0.5,ZZW(:))) ZRSS(:) = ZRSS(:) + ZZW(:) @@ -2101,10 +2265,17 @@ LOGICAL,DIMENSION(:),ALLOCATABLE :: GWORK ! ZZW(:) = 0.0 WHERE ( (ZRIT(:)>XRTMIN(4)) .AND. (ZRST(:)>XRTMIN(5)) .AND. (ZRIS(:)>0.0) ) +#ifndef MNH_BITREP ZZW(:) = MIN( ZRIS(:),XFIAGGS * EXP( XCOLEXIS*(ZZT(:)-XTT) ) & * ZRIT(:) & * ZLBDAS(:)**XEXIAGGS & * ZRHODREF(:)**(-XCEXVT) ) +#else + ZZW(:) = MIN( ZRIS(:),XFIAGGS * BR_EXP( XCOLEXIS*(ZZT(:)-XTT) ) & + * ZRIT(:) & + * BR_POW(ZLBDAS(:),XEXIAGGS) & + * BR_POW(ZRHODREF(:),-XCEXVT) ) +#endif ZRSS(:) = ZRSS(:) + ZZW(:) ZRIS(:) = ZRIS(:) - ZZW(:) END WHERE @@ -2118,11 +2289,20 @@ LOGICAL,DIMENSION(:),ALLOCATABLE :: GWORK !* 3.4.5 compute the autoconversion of r_i for r_s production: RIAUTS ! ALLOCATE(ZCRIAUTI(IMICRO)) +#ifndef MNH_BITREP ZCRIAUTI(:)=MIN(XCRIAUTI,10**(XACRIAUTI*(ZZT(:)-XTT)+XBCRIAUTI)) +#else + ZCRIAUTI(:)=MIN(XCRIAUTI, BR_POW(10.,XACRIAUTI*(ZZT(:)-XTT)+XBCRIAUTI) ) +#endif ZZW(:) = 0.0 WHERE ( (ZRIT(:)>XRTMIN(4)) .AND. (ZRIS(:)>0.0) ) +#ifndef MNH_BITREP ZZW(:) = MIN( ZRIS(:),XTIMAUTI * EXP( XTEXAUTI*(ZZT(:)-XTT) ) & * MAX( ZRIT(:)-ZCRIAUTI(:),0.0 ) ) +#else + ZZW(:) = MIN( ZRIS(:),XTIMAUTI * BR_EXP( XTEXAUTI*(ZZT(:)-XTT) ) & + * MAX( ZRIT(:)-ZCRIAUTI(:),0.0 ) ) +#endif ZRSS(:) = ZRSS(:) + ZZW(:) ZRIS(:) = ZRIS(:) - ZZW(:) END WHERE @@ -2138,12 +2318,21 @@ LOGICAL,DIMENSION(:),ALLOCATABLE :: GWORK ! ! WHERE ( ZRGT(:)>0.0 ) +#ifndef MNH_BITREP ZLBDAG(:) = XLBG*( ZRHODREF(:)*MAX( ZRGT(:),XRTMIN(6) ) )**XLBEXG +#else + ZLBDAG(:) = XLBG*BR_POW( ZRHODREF(:)*MAX( ZRGT(:),XRTMIN(6) ),XLBEXG) +#endif END WHERE ZZW(:) = 0.0 WHERE ( (ZRGT(:)>XRTMIN(6)) .AND. (ZRGS(:)>0.0) ) +#ifndef MNH_BITREP ZZW(:) = ( ZSSI(:)/(ZRHODREF(:)*ZAI(:)) ) * & ( X0DEPG*ZLBDAG(:)**XEX0DEPG + X1DEPG*ZCJ(:)*ZLBDAG(:)**XEX1DEPG ) +#else + ZZW(:) = ( ZSSI(:)/(ZRHODREF(:)*ZAI(:)) ) * & + ( X0DEPG*BR_POW(ZLBDAG(:),XEX0DEPG) + X1DEPG*ZCJ(:)*BR_POW(ZLBDAG(:),XEX1DEPG) ) +#endif ZZW(:) = MIN( ZRVS(:),ZZW(:) )*(0.5+SIGN(0.5,ZZW(:))) & - MIN( ZRGS(:),ABS(ZZW(:)) )*(0.5-SIGN(0.5,ZZW(:))) ZRGS(:) = ZRGS(:) + ZZW(:) @@ -2197,8 +2386,13 @@ REAL :: ZCRIAUTC ! Critical cloud mixing ratio ZZW(JL) = MIN( ZRCS(JL) , XTIMAUTC* ( ZRCT(JL)-ZCRIAUTC ) ) ELSEIF ( ZRCT(JL) > ( ZCRIAUTC - ZSIGMA_RC(JL) ) .AND. & ZRCT(JL) <= ( ZCRIAUTC + ZSIGMA_RC(JL) ) ) THEN +#ifndef MNH_BITREP ZZW(JL) = MIN( ZRCS(JL) , XTIMAUTC*( ZRCT(JL)+ZSIGMA_RC(JL)-ZCRIAUTC )**2 & /( 4. * ZSIGMA_RC(JL) ) ) +#else + ZZW(JL) = MIN( ZRCS(JL) , XTIMAUTC*( ZRCT(JL)+ZSIGMA_RC(JL)-ZCRIAUTC )**2 & + /( 4. * ZSIGMA_RC(JL) ) ) +#endif ENDIF ZRCS(JL) = ZRCS(JL) - ZZW(JL) ZRRS(JL) = ZRRS(JL) + ZZW(JL) @@ -2223,9 +2417,15 @@ REAL :: ZCRIAUTC ! Critical cloud mixing ratio ! ZZW(:) = 0.0 WHERE( (ZRCT(:)>XRTMIN(2)) .AND. (ZRRT(:)>XRTMIN(3)) .AND. (ZRCS(:)>0.0) ) +#ifndef MNH_BITREP ZZW(:) = MIN( ZRCS(:),XFCACCR * ZRCT(:) & * ZLBDAR(:)**XEXCACCR & * ZRHODREF(:)**(-XCEXVT) ) +#else + ZZW(:) = MIN( ZRCS(:),XFCACCR * ZRCT(:) & + * BR_POW(ZLBDAR(:),XEXCACCR) & + * BR_POW(ZRHODREF(:),-XCEXVT) ) +#endif ZRCS(:) = ZRCS(:) - ZZW(:) ZRRS(:) = ZRRS(:) + ZZW(:) END WHERE @@ -2240,13 +2440,24 @@ REAL :: ZCRIAUTC ! Critical cloud mixing ratio ! ZZW(:) = 0.0 WHERE( (ZRRT(:)>XRTMIN(3)) .AND. (ZRCT(:)<=XRTMIN(2)) ) +#ifndef MNH_BITREP ZZW(:) = EXP( XALPW - XBETAW/ZZT(:) - XGAMW*ALOG(ZZT(:) ) ) ! es_w +#else + ZZW(:) = BR_EXP( XALPW - XBETAW/ZZT(:) - XGAMW*BR_LOG(ZZT(:) ) ) ! es_w +#endif ZUSW(:) = 1.0 - ZRVT(:)*( ZPRES(:)-ZZW(:) ) / ( (XMV/XMD) * ZZW(:) ) ! Undersaturation over water +#ifndef MNH_BITREP ZZW(:) = ( XLVTT+(XCPV-XCL)*(ZZT(:)-XTT) )**2 / ( ZKA(:)*XRV*ZZT(:)**2 ) & + ( XRV*ZZT(:) ) / ( ZDV(:)*ZZW(:) ) ZZW(:) = MIN( ZRRS(:),( MAX( 0.0,ZUSW(:) )/(ZRHODREF(:)*ZZW(:)) ) * & ( X0EVAR*ZLBDAR(:)**XEX0EVAR+X1EVAR*ZCJ(:)*ZLBDAR(:)**XEX1EVAR ) ) +#else + ZZW(:) = ( XLVTT+(XCPV-XCL)*(ZZT(:)-XTT) )**2 / ( ZKA(:)*XRV*ZZT(:)**2 ) & + + ( XRV*ZZT(:) ) / ( ZDV(:)*ZZW(:) ) + ZZW(:) = MIN( ZRRS(:),( MAX( 0.0,ZUSW(:) )/(ZRHODREF(:)*ZZW(:)) ) * & + ( X0EVAR*BR_POW(ZLBDAR(:),XEX0EVAR)+X1EVAR*ZCJ(:)*BR_POW(ZLBDAR(:),XEX1EVAR) ) ) +#endif ZRRS(:) = ZRRS(:) - ZZW(:) ZRVS(:) = ZRVS(:) + ZZW(:) ZTHS(:) = ZTHS(:) - ZZW(:)*ZLVFACT(:) @@ -2305,7 +2516,11 @@ IMPLICIT NONE ! gamma function ! ZVEC2(1:IGRIM) = MAX( 1.00001, MIN( FLOAT(NGAMINC)-0.00001, & +#ifndef MNH_BITREP XRIMINTP1 * LOG( ZVEC1(1:IGRIM) ) + XRIMINTP2 ) ) +#else + XRIMINTP1 * BR_LOG( ZVEC1(1:IGRIM) ) + XRIMINTP2 ) ) +#endif IVEC2(1:IGRIM) = INT( ZVEC2(1:IGRIM) ) ZVEC2(1:IGRIM) = ZVEC2(1:IGRIM) - FLOAT( IVEC2(1:IGRIM) ) ! @@ -2319,10 +2534,17 @@ IMPLICIT NONE ! 5.1.4 riming of the small sized aggregates ! WHERE ( GRIM(:) ) +#ifndef MNH_BITREP ZZW1(:,1) = MIN( ZRCS(:), & XCRIMSS * ZZW(:) * ZRCT(:) & ! RCRIMSS * ZLBDAS(:)**XEXCRIMSS & * ZRHODREF(:)**(-XCEXVT) ) +#else + ZZW1(:,1) = MIN( ZRCS(:), & + XCRIMSS * ZZW(:) * ZRCT(:) & ! RCRIMSS + * BR_POW(ZLBDAS(:),XEXCRIMSS) & + * BR_POW(ZRHODREF(:),-XCEXVT) ) +#endif ZRCS(:) = ZRCS(:) - ZZW1(:,1) ZRSS(:) = ZRSS(:) + ZZW1(:,1) ZTHS(:) = ZTHS(:) + ZZW1(:,1)*(ZLSFACT(:)-ZLVFACT(:)) ! f(L_f*(RCRIMSS)) @@ -2339,6 +2561,7 @@ IMPLICIT NONE ! ! WHERE ( GRIM(:) .AND. (ZRSS(:)>0.0) ) +#ifndef MNH_BITREP ZZW1(:,2) = MIN( ZRCS(:), & XCRIMSG * ZRCT(:) & ! RCRIMSG * ZLBDAS(:)**XEXCRIMSG & @@ -2347,6 +2570,16 @@ IMPLICIT NONE ZZW1(:,3) = MIN( ZRSS(:), & XSRIMCG * ZLBDAS(:)**XEXSRIMCG & ! RSRIMCG * (1.0 - ZZW(:) )/(PTSTEP*ZRHODREF(:)) ) +#else + ZZW1(:,2) = MIN( ZRCS(:), & + XCRIMSG * ZRCT(:) & ! RCRIMSG + * BR_POW(ZLBDAS(:),XEXCRIMSG) & + * BR_POW(ZRHODREF(:),-XCEXVT) & + - ZZW1(:,1) ) + ZZW1(:,3) = MIN( ZRSS(:), & + XSRIMCG * BR_POW(ZLBDAS(:),XEXSRIMCG) & ! RSRIMCG + * (1.0 - ZZW(:) )/(PTSTEP*ZRHODREF(:)) ) +#endif ZRCS(:) = ZRCS(:) - ZZW1(:,2) ZRSS(:) = ZRSS(:) - ZZW1(:,3) ZRGS(:) = ZRGS(:) + ZZW1(:,2)+ZZW1(:,3) @@ -2399,12 +2632,20 @@ IMPLICIT NONE ! tabulate the RACCSS-kernel ! ZVEC1(1:IGACC) = MAX( 1.00001, MIN( FLOAT(NACCLBDAS)-0.00001, & +#ifndef MNH_BITREP XACCINTP1S * LOG( ZVEC1(1:IGACC) ) + XACCINTP2S ) ) +#else + XACCINTP1S * BR_LOG( ZVEC1(1:IGACC) ) + XACCINTP2S ) ) +#endif IVEC1(1:IGACC) = INT( ZVEC1(1:IGACC) ) ZVEC1(1:IGACC) = ZVEC1(1:IGACC) - FLOAT( IVEC1(1:IGACC) ) ! ZVEC2(1:IGACC) = MAX( 1.00001, MIN( FLOAT(NACCLBDAR)-0.00001, & +#ifndef MNH_BITREP XACCINTP1R * LOG( ZVEC2(1:IGACC) ) + XACCINTP2R ) ) +#else + XACCINTP1R * BR_LOG( ZVEC2(1:IGACC) ) + XACCINTP2R ) ) +#endif IVEC2(1:IGACC) = INT( ZVEC2(1:IGACC) ) ZVEC2(1:IGACC) = ZVEC2(1:IGACC) - FLOAT( IVEC2(1:IGACC) ) ! @@ -2424,11 +2665,19 @@ IMPLICIT NONE ! 5.2.4 raindrop accretion on the small sized aggregates ! WHERE ( GACC(:) ) +#ifndef MNH_BITREP ZZW1(:,2) = & !! coef of RRACCS XFRACCSS*( ZLBDAS(:)**XCXS )*( ZRHODREF(:)**(-XCEXVT-1.) ) & *( XLBRACCS1/((ZLBDAS(:)**2) ) + & XLBRACCS2/( ZLBDAS(:) * ZLBDAR(:) ) + & XLBRACCS3/( (ZLBDAR(:)**2)) )/ZLBDAR(:)**4 +#else + ZZW1(:,2) = & !! coef of RRACCS + XFRACCSS*( BR_POW(ZLBDAS(:),XCXS) )*( BR_POW(ZRHODREF(:),-XCEXVT-1.) ) & + *( XLBRACCS1/((ZLBDAS(:)**2) ) + & + XLBRACCS2/( ZLBDAS(:) * ZLBDAR(:) ) + & + XLBRACCS3/( (ZLBDAR(:)**2)) )/ZLBDAR(:)**4 +#endif ZZW1(:,4) = MIN( ZRRS(:),ZZW1(:,2)*ZZW(:) ) ! RRACCSS ZRRS(:) = ZRRS(:) - ZZW1(:,4) ZRSS(:) = ZRSS(:) + ZZW1(:,4) @@ -2468,11 +2717,19 @@ IMPLICIT NONE ZZW1(:,2) = MAX( MIN( ZRRS(:),ZZW1(:,2)-ZZW1(:,4) ),0.0 ) ! RRACCSG END WHERE WHERE ( GACC(:) .AND. (ZRSS(:)>0.0) .AND. ZZW1(:,2)>0.0 ) +#ifndef MNH_BITREP ZZW1(:,3) = MIN( ZRSS(:),XFSACCRG*ZZW(:)* & ! RSACCRG ( ZLBDAS(:)**(XCXS-XBS) )*( ZRHODREF(:)**(-XCEXVT-1.) ) & *( XLBSACCR1/((ZLBDAR(:)**2) ) + & XLBSACCR2/( ZLBDAR(:) * ZLBDAS(:) ) + & XLBSACCR3/( (ZLBDAS(:)**2)) )/ZLBDAR(:) ) +#else + ZZW1(:,3) = MIN( ZRSS(:),XFSACCRG*ZZW(:)* & ! RSACCRG + ( BR_POW(ZLBDAS(:),XCXS-XBS) )*( BR_POW(ZRHODREF(:),-XCEXVT-1.) ) & + *( XLBSACCR1/((ZLBDAR(:)**2) ) + & + XLBSACCR2/( ZLBDAR(:) * ZLBDAS(:) ) + & + XLBSACCR3/( (ZLBDAS(:)**2)) )/ZLBDAR(:) ) +#endif ZRRS(:) = ZRRS(:) - ZZW1(:,2) ZRSS(:) = ZRSS(:) - ZZW1(:,3) ZRGS(:) = ZRGS(:) + ZZW1(:,2)+ZZW1(:,3) @@ -2510,12 +2767,21 @@ IMPLICIT NONE ! ! compute RSMLT ! +#ifndef MNH_BITREP ZZW(:) = MIN( ZRSS(:), XFSCVMG*MAX( 0.0,( -ZZW(:) * & ( X0DEPS* ZLBDAS(:)**XEX0DEPS + & X1DEPS*ZCJ(:)*ZLBDAS(:)**XEX1DEPS ) - & ( ZZW1(:,1)+ZZW1(:,4) ) * & ( ZRHODREF(:)*XCL*(XTT-ZZT(:))) ) / & ( ZRHODREF(:)*XLMTT ) ) ) +#else + ZZW(:) = MIN( ZRSS(:), XFSCVMG*MAX( 0.0,( -ZZW(:) * & + ( X0DEPS* BR_POW(ZLBDAS(:),XEX0DEPS) + & + X1DEPS*ZCJ(:)*BR_POW(ZLBDAS(:),XEX1DEPS) ) - & + ( ZZW1(:,1)+ZZW1(:,4) ) * & + ( ZRHODREF(:)*XCL*(XTT-ZZT(:))) ) / & + ( ZRHODREF(:)*XLMTT ) ) ) +#endif ! ! note that RSCVMG = RSMLT*XFSCVMG but no heat is exchanged (at the rate RSMLT) ! because the graupeln produced by this process are still icy!!! @@ -2549,12 +2815,21 @@ IMPLICIT NONE ZZW1(:,3:4) = 0.0 WHERE( (ZRIT(:)>XRTMIN(4)) .AND. (ZRRT(:)>XRTMIN(3)) .AND. & (ZRIS(:)>0.0) .AND. (ZRRS(:)>0.0) ) +#ifndef MNH_BITREP ZZW1(:,3) = MIN( ZRIS(:),XICFRR * ZRIT(:) & ! RICFRRG * ZLBDAR(:)**XEXICFRR & * ZRHODREF(:)**(-XCEXVT) ) ZZW1(:,4) = MIN( ZRRS(:),XRCFRI * ZCIT(:) & ! RRCFRIG * ZLBDAR(:)**XEXRCFRI & * ZRHODREF(:)**(-XCEXVT-1.) ) +#else + ZZW1(:,3) = MIN( ZRIS(:),XICFRR * ZRIT(:) & ! RICFRRG + * BR_POW(ZLBDAR(:),XEXICFRR) & + * BR_POW(ZRHODREF(:),-XCEXVT) ) + ZZW1(:,4) = MIN( ZRRS(:),XRCFRI * ZCIT(:) & ! RRCFRIG + * BR_POW(ZLBDAR(:),XEXRCFRI) & + * BR_POW(ZRHODREF(:),-XCEXVT-1.) ) +#endif ZRIS(:) = ZRIS(:) - ZZW1(:,3) ZRRS(:) = ZRRS(:) - ZZW1(:,4) ZRGS(:) = ZRGS(:) + ZZW1(:,3)+ZZW1(:,4) @@ -2577,13 +2852,23 @@ IMPLICIT NONE ! ZZW1(:,:) = 0.0 WHERE( (ZRGT(:)>XRTMIN(6)) .AND. ((ZRCT(:)>XRTMIN(2) .AND. ZRCS(:)>0.0)) ) +#ifndef MNH_BITREP ZZW(:) = ZLBDAG(:)**(XCXG-XDG-2.0) * ZRHODREF(:)**(-XCEXVT) +#else + ZZW(:) = BR_POW(ZLBDAG(:),XCXG-XDG-2.0) * BR_POW(ZRHODREF(:),-XCEXVT) +#endif ZZW1(:,1) = MIN( ZRCS(:),XFCDRYG * ZRCT(:) * ZZW(:) ) ! RCDRYG END WHERE WHERE( (ZRGT(:)>XRTMIN(6)) .AND. ((ZRIT(:)>XRTMIN(4) .AND. ZRIS(:)>0.0)) ) +#ifndef MNH_BITREP ZZW(:) = ZLBDAG(:)**(XCXG-XDG-2.0) * ZRHODREF(:)**(-XCEXVT) ZZW1(:,2) = MIN( ZRIS(:),XFIDRYG * EXP( XCOLEXIG*(ZZT(:)-XTT) ) & * ZRIT(:) * ZZW(:) ) ! RIDRYG +#else + ZZW(:) = BR_POW(ZLBDAG(:),XCXG-XDG-2.0) * BR_POW(ZRHODREF(:),-XCEXVT) + ZZW1(:,2) = MIN( ZRIS(:),XFIDRYG * BR_EXP( XCOLEXIG*(ZZT(:)-XTT) ) & + * ZRIT(:) * ZZW(:) ) ! RIDRYG +#endif END WHERE ! !* 6.2.1 accretion of aggregates on the graupeln @@ -2612,12 +2897,20 @@ IMPLICIT NONE ! tabulate the SDRYG-kernel ! ZVEC1(1:IGDRY) = MAX( 1.00001, MIN( FLOAT(NDRYLBDAG)-0.00001, & +#ifndef MNH_BITREP XDRYINTP1G * LOG( ZVEC1(1:IGDRY) ) + XDRYINTP2G ) ) +#else + XDRYINTP1G * BR_LOG( ZVEC1(1:IGDRY) ) + XDRYINTP2G ) ) +#endif IVEC1(1:IGDRY) = INT( ZVEC1(1:IGDRY) ) ZVEC1(1:IGDRY) = ZVEC1(1:IGDRY) - FLOAT( IVEC1(1:IGDRY) ) ! ZVEC2(1:IGDRY) = MAX( 1.00001, MIN( FLOAT(NDRYLBDAS)-0.00001, & +#ifndef MNH_BITREP XDRYINTP1S * LOG( ZVEC2(1:IGDRY) ) + XDRYINTP2S ) ) +#else + XDRYINTP1S * BR_LOG( ZVEC2(1:IGDRY) ) + XDRYINTP2S ) ) +#endif IVEC2(1:IGDRY) = INT( ZVEC2(1:IGDRY) ) ZVEC2(1:IGDRY) = ZVEC2(1:IGDRY) - FLOAT( IVEC2(1:IGDRY) ) ! @@ -2635,6 +2928,7 @@ IMPLICIT NONE ZZW(:) = UNPACK( VECTOR=ZVEC3(:),MASK=GDRY,FIELD=0.0 ) ! WHERE( GDRY(:) ) +#ifndef MNH_BITREP ZZW1(:,3) = MIN( ZRSS(:),XFSDRYG*ZZW(:) & ! RSDRYG * EXP( XCOLEXSG*(ZZT(:)-XTT) ) & *( ZLBDAS(:)**(XCXS-XBS) )*( ZLBDAG(:)**XCXG ) & @@ -2642,6 +2936,15 @@ IMPLICIT NONE *( XLBSDRYG1/( ZLBDAG(:)**2 ) + & XLBSDRYG2/( ZLBDAG(:) * ZLBDAS(:) ) + & XLBSDRYG3/( ZLBDAS(:)**2) ) ) +#else + ZZW1(:,3) = MIN( ZRSS(:),XFSDRYG*ZZW(:) & ! RSDRYG + * BR_EXP( XCOLEXSG*(ZZT(:)-XTT) ) & + *( BR_POW(ZLBDAS(:),XCXS-XBS) )*( BR_POW(ZLBDAG(:),XCXG) ) & + *( BR_POW(ZRHODREF(:),-XCEXVT-1.) ) & + *( XLBSDRYG1/( ZLBDAG(:)**2 ) + & + XLBSDRYG2/( ZLBDAG(:) * ZLBDAS(:) ) + & + XLBSDRYG3/( ZLBDAS(:)**2) ) ) +#endif END WHERE DEALLOCATE(IVEC2) DEALLOCATE(IVEC1) @@ -2675,12 +2978,20 @@ IMPLICIT NONE ! tabulate the RDRYG-kernel ! ZVEC1(1:IGDRY) = MAX( 1.00001, MIN( FLOAT(NDRYLBDAG)-0.00001, & +#ifndef MNH_BITREP XDRYINTP1G * LOG( ZVEC1(1:IGDRY) ) + XDRYINTP2G ) ) +#else + XDRYINTP1G * BR_LOG( ZVEC1(1:IGDRY) ) + XDRYINTP2G ) ) +#endif IVEC1(1:IGDRY) = INT( ZVEC1(1:IGDRY) ) ZVEC1(1:IGDRY) = ZVEC1(1:IGDRY) - FLOAT( IVEC1(1:IGDRY) ) ! ZVEC2(1:IGDRY) = MAX( 1.00001, MIN( FLOAT(NDRYLBDAR)-0.00001, & +#ifndef MNH_BITREP XDRYINTP1R * LOG( ZVEC2(1:IGDRY) ) + XDRYINTP2R ) ) +#else + XDRYINTP1R * BR_LOG( ZVEC2(1:IGDRY) ) + XDRYINTP2R ) ) +#endif IVEC2(1:IGDRY) = INT( ZVEC2(1:IGDRY) ) ZVEC2(1:IGDRY) = ZVEC2(1:IGDRY) - FLOAT( IVEC2(1:IGDRY) ) ! @@ -2698,12 +3009,21 @@ IMPLICIT NONE ZZW(:) = UNPACK( VECTOR=ZVEC3(:),MASK=GDRY,FIELD=0.0 ) ! WHERE( GDRY(:) ) +#ifndef MNH_BITREP ZZW1(:,4) = MIN( ZRRS(:),XFRDRYG*ZZW(:) & ! RRDRYG *( ZLBDAR(:)**(-4) )*( ZLBDAG(:)**XCXG ) & *( ZRHODREF(:)**(-XCEXVT-1.) ) & *( XLBRDRYG1/( ZLBDAG(:)**2 ) + & XLBRDRYG2/( ZLBDAG(:) * ZLBDAR(:) ) + & XLBRDRYG3/( ZLBDAR(:)**2) ) ) +#else + ZZW1(:,4) = MIN( ZRRS(:),XFRDRYG*ZZW(:) & ! RRDRYG + *( BR_POW(ZLBDAR(:),-4.) )*( BR_POW(ZLBDAG(:),XCXG) ) & + *( BR_POW(ZRHODREF(:),-XCEXVT-1.) ) & + *( XLBRDRYG1/( ZLBDAG(:)**2 ) + & + XLBRDRYG2/( ZLBDAG(:) * ZLBDAR(:) ) + & + XLBRDRYG3/( ZLBDAR(:)**2) ) ) +#endif END WHERE DEALLOCATE(IVEC2) DEALLOCATE(IVEC1) @@ -2720,10 +3040,17 @@ IMPLICIT NONE ZZW(:) = 0.0 ZRWETG(:) = 0.0 WHERE( ZRGT(:)>XRTMIN(6) ) +#ifndef MNH_BITREP ZZW1(:,5) = MIN( ZRIS(:), & ZZW1(:,2) / (XCOLIG*EXP(XCOLEXIG*(ZZT(:)-XTT)) ) ) ! RIWETG ZZW1(:,6) = MIN( ZRSS(:), & ZZW1(:,3) / (XCOLSG*EXP(XCOLEXSG*(ZZT(:)-XTT)) ) ) ! RSWETG +#else + ZZW1(:,5) = MIN( ZRIS(:), & + ZZW1(:,2) / (XCOLIG*BR_EXP(XCOLEXIG*(ZZT(:)-XTT)) ) ) ! RIWETG + ZZW1(:,6) = MIN( ZRSS(:), & + ZZW1(:,3) / (XCOLSG*BR_EXP(XCOLEXSG*(ZZT(:)-XTT)) ) ) ! RSWETG +#endif ! ZZW(:) = ZRVT(:)*ZPRES(:)/((XMV/XMD)+ZRVT(:)) ! Vapor pressure ZZW(:) = ZKA(:)*(XTT-ZZT(:)) + & @@ -2732,12 +3059,21 @@ IMPLICIT NONE ! ! compute RWETG ! +#ifndef MNH_BITREP ZRWETG(:)=MAX( 0.0, & ( ZZW(:) * ( X0DEPG* ZLBDAG(:)**XEX0DEPG + & X1DEPG*ZCJ(:)*ZLBDAG(:)**XEX1DEPG ) + & ( ZZW1(:,5)+ZZW1(:,6) ) * & ( ZRHODREF(:)*(XLMTT+(XCI-XCL)*(XTT-ZZT(:))) ) ) / & ( ZRHODREF(:)*(XLMTT-XCL*(XTT-ZZT(:))) ) ) +#else + ZRWETG(:)=MAX( 0.0, & + ( ZZW(:) * ( X0DEPG* BR_POW(ZLBDAG(:),XEX0DEPG) + & + X1DEPG*ZCJ(:)*BR_POW(ZLBDAG(:),XEX1DEPG) ) + & + ( ZZW1(:,5)+ZZW1(:,6) ) * & + ( ZRHODREF(:)*(XLMTT+(XCI-XCL)*(XTT-ZZT(:))) ) ) / & + ( ZRHODREF(:)*(XLMTT-XCL*(XTT-ZZT(:))) ) ) +#endif END WHERE ! !* 6.4 Select Wet or Dry case @@ -2858,12 +3194,21 @@ IMPLICIT NONE ! ! compute RGMLTR ! +#ifndef MNH_BITREP ZZW(:) = MIN( ZRGS(:), MAX( 0.0,( -ZZW(:) * & ( X0DEPG* ZLBDAG(:)**XEX0DEPG + & X1DEPG*ZCJ(:)*ZLBDAG(:)**XEX1DEPG ) - & ( ZZW1(:,1)+ZZW1(:,4) ) * & ( ZRHODREF(:)*XCL*(XTT-ZZT(:))) ) / & ( ZRHODREF(:)*XLMTT ) ) ) +#else + ZZW(:) = MIN( ZRGS(:), MAX( 0.0,( -ZZW(:) * & + ( X0DEPG* BR_POW(ZLBDAG(:),XEX0DEPG) + & + X1DEPG*ZCJ(:)*BR_POW(ZLBDAG(:),XEX1DEPG) ) - & + ( ZZW1(:,1)+ZZW1(:,4) ) * & + ( ZRHODREF(:)*XCL*(XTT-ZZT(:))) ) / & + ( ZRHODREF(:)*XLMTT ) ) ) +#endif ZRRS(:) = ZRRS(:) + ZZW(:) ZRGS(:) = ZRGS(:) - ZZW(:) ZTHS(:) = ZTHS(:) - ZZW(:)*(ZLSFACT(:)-ZLVFACT(:)) ! f(L_f*(-RGMLTR)) @@ -2940,12 +3285,20 @@ IMPLICIT NONE ! tabulate the SWETH-kernel ! ZVEC1(1:IGWET) = MAX( 1.00001, MIN( FLOAT(NWETLBDAH)-0.00001, & +#ifndef MNH_BITREP XWETINTP1H * LOG( ZVEC1(1:IGWET) ) + XWETINTP2H ) ) +#else + XWETINTP1H * BR_LOG( ZVEC1(1:IGWET) ) + XWETINTP2H ) ) +#endif IVEC1(1:IGWET) = INT( ZVEC1(1:IGWET) ) ZVEC1(1:IGWET) = ZVEC1(1:IGWET) - FLOAT( IVEC1(1:IGWET) ) ! ZVEC2(1:IGWET) = MAX( 1.00001, MIN( FLOAT(NWETLBDAS)-0.00001, & +#ifndef MNH_BITREP XWETINTP1S * LOG( ZVEC2(1:IGWET) ) + XWETINTP2S ) ) +#else + XWETINTP1S * BR_LOG( ZVEC2(1:IGWET) ) + XWETINTP2S ) ) +#endif IVEC2(1:IGWET) = INT( ZVEC2(1:IGWET) ) ZVEC2(1:IGWET) = ZVEC2(1:IGWET) - FLOAT( IVEC2(1:IGWET) ) ! @@ -3002,12 +3355,20 @@ IMPLICIT NONE ! tabulate the GWETH-kernel ! ZVEC1(1:IGWET) = MAX( 1.00001, MIN( FLOAT(NWETLBDAG)-0.00001, & +#ifndef MNH_BITREP XWETINTP1H * LOG( ZVEC1(1:IGWET) ) + XWETINTP2H ) ) +#else + XWETINTP1H * BR_LOG( ZVEC1(1:IGWET) ) + XWETINTP2H ) ) +#endif IVEC1(1:IGWET) = INT( ZVEC1(1:IGWET) ) ZVEC1(1:IGWET) = ZVEC1(1:IGWET) - FLOAT( IVEC1(1:IGWET) ) ! ZVEC2(1:IGWET) = MAX( 1.00001, MIN( FLOAT(NWETLBDAG)-0.00001, & +#ifndef MNH_BITREP XWETINTP1G * LOG( ZVEC2(1:IGWET) ) + XWETINTP2G ) ) +#else + XWETINTP1G * BR_LOG( ZVEC2(1:IGWET) ) + XWETINTP2G ) ) +#endif IVEC2(1:IGWET) = INT( ZVEC2(1:IGWET) ) ZVEC2(1:IGWET) = ZVEC2(1:IGWET) - FLOAT( IVEC2(1:IGWET) ) ! @@ -3214,9 +3575,15 @@ IMPLICIT NONE ZZW(:) = 0.0 WHERE( (ZRCS(:)>0.0) .AND. (ZSSI(:)>0.0) .AND. & (ZRIT(:)>XRTMIN(4)) .AND. (ZCIT(:)>0.0) ) +#ifndef MNH_BITREP ZZW(:) = MIN(1.E8,XLBI*( ZRHODREF(:)*ZRIT(:)/ZCIT(:) )**XLBEXI) ! Lbda_i ZZW(:) = MIN( ZRCS(:),( ZSSI(:) / (ZRHODREF(:)*ZAI(:)) ) * ZCIT(:) * & ( X0DEPI/ZZW(:) + X2DEPI*ZCJ(:)*ZCJ(:)/ZZW(:)**(XDI+2.0) ) ) +#else + ZZW(:) = MIN(1.E8,XLBI*BR_POW( ZRHODREF(:)*ZRIT(:)/ZCIT(:),XLBEXI) ) ! Lbda_i + ZZW(:) = MIN( ZRCS(:),( ZSSI(:) / (ZRHODREF(:)*ZAI(:)) ) * ZCIT(:) * & + ( X0DEPI/ZZW(:) + X2DEPI*ZCJ(:)*ZCJ(:)/BR_POW(ZZW(:),XDI+2.0) ) ) +#endif ZRCS(:) = ZRCS(:) - ZZW(:) ZRIS(:) = ZRIS(:) + ZZW(:) ZTHS(:) = ZTHS(:) + ZZW(:)*(ZLSFACT(:)-ZLVFACT(:)) ! f(L_f*(RCBERI)) -- GitLab