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