From 53fc0481ac7aed4e05fa6a4f4f697fd26b9abeec Mon Sep 17 00:00:00 2001 From: Juan ESCOBAR <juan.escobar@aero.obs-mip.fr> Date: Tue, 17 May 2022 11:55:28 +0200 Subject: [PATCH] Juan 17/05/2022:Juan&Naima:MNH/rain*, Bit Reproductible for CRAY -> MNH_BITREP_OMP --- src/MNH/condensation.f90 | 16 ++--- src/MNH/rain_ice.f90 | 6 +- src/MNH/rain_ice_nucleation.f90 | 12 ++-- src/MNH/rain_ice_sedimentation_split.f90 | 18 +++--- src/MNH/rain_ice_slow.f90 | 79 +++++++++++++----------- src/MNH/resolved_cloud.f90 | 14 +++-- src/MNH/sources_neg_correct.f90 | 14 +++-- 7 files changed, 89 insertions(+), 70 deletions(-) diff --git a/src/MNH/condensation.f90 b/src/MNH/condensation.f90 index 0afa5265f..3e1e76a5c 100644 --- a/src/MNH/condensation.f90 +++ b/src/MNH/condensation.f90 @@ -143,7 +143,7 @@ USE MODE_MPPDB use mode_msg ! USE MODI_COMPUTE_FRAC_ICE -#ifdef MNH_BITREP +#if defined(MNH_BITREP) || defined(MNH_BITREP_OMP) USE MODI_BITREP #endif ! @@ -505,7 +505,7 @@ END DO DO CONCURRENT (JI=KIB:KIE,JJ=KJB:KJE,JK=IKTB:IKTE) ! latent heats ! saturated water vapor mixing ratio over liquid water -#ifndef MNH_BITREP +#if !defined(MNH_BITREP) && !defined(MNH_BITREP_OMP) ZPVP(JI,JJ,JK) = MIN(EXP( XALPW - XBETAW / PT(JI,JJ,JK) - XGAMW * LOG( PT(JI,JJ,JK) ) ), .99*PPABS(JI,JJ,JK)) #else ZPVP(JI,JJ,JK) = MIN(BR_EXP( XALPW - XBETAW / PT(JI,JJ,JK) - XGAMW * BR_LOG( PT(JI,JJ,JK) ) ), .99*PPABS(JI,JJ,JK)) @@ -513,7 +513,7 @@ DO CONCURRENT (JI=KIB:KIE,JJ=KJB:KJE,JK=IKTB:IKTE) ZQSLP(JI,JJ,JK) = XRD / XRV * ZPVP(JI,JJ,JK) / ( PPABS(JI,JJ,JK) - ZPVP(JI,JJ,JK) ) ! saturated water vapor mixing ratio over ice -#ifndef MNH_BITREP +#if !defined(MNH_BITREP) && !defined(MNH_BITREP_OMP) ZPIVP(JI,JJ,JK) = MIN(EXP( XALPI - XBETAI / PT(JI,JJ,JK) - XGAMI * LOG( PT(JI,JJ,JK) ) ), .99*PPABS(JI,JJ,JK)) #else ZPIVP(JI,JJ,JK) = MIN(BR_EXP( XALPI - XBETAI / PT(JI,JJ,JK) - XGAMI * BR_LOG( PT(JI,JJ,JK) ) ), .99*PPABS(JI,JJ,JK)) @@ -526,7 +526,7 @@ DO CONCURRENT (JI=KIB:KIE,JJ=KJB:KJE,JK=IKTB:IKTE) & ZFRAC(JI,JJ,JK) * ZLS(JI,JJ,JK) ! coefficients a and b -#ifndef MNH_BITREP +#if !defined(MNH_BITREP) && !defined(MNH_BITREP_OMP) ZAHP(JI,JJ,JK) = ZLVSP(JI,JJ,JK) * ZQSLP(JI,JJ,JK) / ( XRV * PT(JI,JJ,JK)**2 ) * (XRV * ZQSLP(JI,JJ,JK) / XRD + 1.) #else ZAHP(JI,JJ,JK) = ZLVSP(JI,JJ,JK) * ZQSLP(JI,JJ,JK) / ( XRV * BR_P2(PT(JI,JJ,JK)) ) * (XRV * ZQSLP(JI,JJ,JK) / XRD + 1.) @@ -541,7 +541,7 @@ DO CONCURRENT (JI=KIB:KIE,JJ=KJB:KJE,JK=IKTB:IKTE) ! or that of Meso-NH turbulence scheme IF ( OSIGMAS ) THEN IF (PSIGQSAT/=0.) THEN -#ifndef MNH_BITREP +#if !defined(MNH_BITREP) && !defined(MNH_BITREP_OMP) ZSIGMAP(JI,JJ,JK) = SQRT((2*PSIGS(JI,JJ,JK))**2 + (PSIGQSAT*ZQSLP(JI,JJ,JK)*ZAP(JI,JJ,JK))**2) #else ZSIGMAP(JI,JJ,JK) = BR_POW(BR_P2(2*PSIGS(JI,JJ,JK)) + BR_P2(PSIGQSAT*ZQSLP(JI,JJ,JK)*ZAP(JI,JJ,JK)) , 0.5) @@ -630,7 +630,7 @@ DO CONCURRENT (JI=KIB:KIE,JJ=KJB:KJE,JK=IKTB:IKTE) ELSEIF(HCONDENS == 'CB02')THEN !Cloud fraction -#ifndef MNH_BITREP +#if !defined(MNH_BITREP) && !defined(MNH_BITREP_OMP) PCLDFR(JI,JJ,JK) = MAX( 0., MIN(1.,0.5+0.36*ATAN(1.55*ZQ1P(JI,JJ,JK))) ) #else PCLDFR(JI,JJ,JK) = MAX( 0., MIN(1.,0.5+0.36*BR_ATAN(1.55*ZQ1P(JI,JJ,JK))) ) @@ -638,7 +638,7 @@ DO CONCURRENT (JI=KIB:KIE,JJ=KJB:KJE,JK=IKTB:IKTE) !Total condensate IF (ZQ1P(JI,JJ,JK) > 0. .AND. ZQ1P(JI,JJ,JK) <= 2 ) THEN -#ifndef MNH_BITREP +#if !defined(MNH_BITREP) && !defined(MNH_BITREP_OMP) ZCONDP(JI,JJ,JK) = MIN(EXP(-1.)+.66*ZQ1P(JI,JJ,JK)+.086*ZQ1P(JI,JJ,JK)**2, 2.) ! We use the MIN function for continuity #else ZCONDP(JI,JJ,JK) = MIN(BR_EXP(-1.)+.66*ZQ1P(JI,JJ,JK)+.086*BR_P2(ZQ1P(JI,JJ,JK)), 2.) ! We use the MIN function for continuity @@ -646,7 +646,7 @@ DO CONCURRENT (JI=KIB:KIE,JJ=KJB:KJE,JK=IKTB:IKTE) ELSE IF (ZQ1P(JI,JJ,JK) > 2.) THEN ZCONDP(JI,JJ,JK) = ZQ1P(JI,JJ,JK) ELSE -#ifndef MNH_BITREP +#if !defined(MNH_BITREP) && !defined(MNH_BITREP_OMP) ZCONDP(JI,JJ,JK) = EXP( 1.2*ZQ1P(JI,JJ,JK)-1. ) #else ZCONDP(JI,JJ,JK) = BR_EXP( 1.2*ZQ1P(JI,JJ,JK)-1. ) diff --git a/src/MNH/rain_ice.f90 b/src/MNH/rain_ice.f90 index dd8f5ccb6..dcb3637c4 100644 --- a/src/MNH/rain_ice.f90 +++ b/src/MNH/rain_ice.f90 @@ -250,7 +250,7 @@ use mode_tools, only: Countjv_device #endif use mode_tools_ll, only: GET_INDICE_ll -#ifdef MNH_BITREP +#if defined(MNH_BITREP) || defined(MNH_BITREP_OMP) USE MODI_BITREP #endif USE MODI_ICE4_RAINFR_VERT @@ -768,7 +768,7 @@ IF( IMICRO >= 0 ) THEN ZLVFACT(JL) = (XLVTT+(XCPV-XCL)*(ZZT(JL)-XTT))/ZZW(JL) ! L_v/(Pi_ref*C_ph) END DO -#ifndef MNH_BITREP +#if !defined(MNH_BITREP) && !defined(MNH_BITREP_OMP) !$acc loop independent DO CONCURRENT ( JL=1:IMICRO ) ZZW(JL) = EXP( XALPI - XBETAI/ZZT(JL) - XGAMI*LOG(ZZT(JL) ) ) @@ -1037,7 +1037,7 @@ IF( IMICRO >= 0 ) THEN ! !$acc kernels !ZLBDAR will be used when we consider rain diluted over the grid box -#ifndef MNH_BITREP +#if !defined(MNH_BITREP) && !defined(MNH_BITREP_OMP) !$acc loop independent DO CONCURRENT ( JL=1:IMICRO ) IF ( ZRRT(JL)>0.0 ) THEN diff --git a/src/MNH/rain_ice_nucleation.f90 b/src/MNH/rain_ice_nucleation.f90 index 9b411edbf..c44d51d60 100644 --- a/src/MNH/rain_ice_nucleation.f90 +++ b/src/MNH/rain_ice_nucleation.f90 @@ -41,7 +41,7 @@ use mode_tools, only: Countjv use mode_tools, only: Countjv_device #endif -#ifdef MNH_BITREP +#if defined(MNH_BITREP) || defined(MNH_BITREP_OMP) use modi_bitrep #endif @@ -162,7 +162,7 @@ if ( lbudget_ri ) call Budget_store_init( tbudgets(NBUDGET_RI), 'HENU', pris(:, ! compute the temperature and the pressure ! !$acc kernels -#ifndef MNH_BITREP +#if !defined(MNH_BITREP) && !defined(MNH_BITREP_OMP) PT(:,:,:) = PTHT(:,:,:) * ( PPABST(:,:,:) / XP00 ) ** ( XRD / XCPD ) #else #ifdef MNH_COMPILER_NVHPC @@ -216,7 +216,7 @@ IF( INEGT >= 1 ) THEN ZZT(JL) = PT (I1(JL),I2(JL),I3(JL)) ZPRES(JL) = PPABST(I1(JL),I2(JL),I3(JL)) ENDDO -#ifndef MNH_BITREP +#if !defined(MNH_BITREP) && !defined(MNH_BITREP_OMP) !$acc loop independent DO CONCURRENT ( JL=1:INEGT ) ZZW(JL) = EXP( XALPI - XBETAI/ZZT(JL) - XGAMI*LOG(ZZT(JL) ) ) ! es_i @@ -233,7 +233,7 @@ IF( INEGT >= 1 ) THEN ZSSI(JL) = ZRVT(JL)*( ZPRES(JL)-ZZW(JL) ) / ( (XMV/XMD) * ZZW(JL) ) - 1.0 ! Supersaturation over ice END DO -#ifndef MNH_BITREP +#if !defined(MNH_BITREP) && !defined(MNH_BITREP_OMP) !$acc loop independent DO CONCURRENT ( JL=1:INEGT ) ZUSW(JL) = EXP( XALPW - XBETAW/ZZT(JL) - XGAMW*LOG(ZZT(JL) ) ) ! es_w @@ -260,14 +260,14 @@ DO CONCURRENT ( JL=1:INEGT ) ZZW(JL) = 0.0 ZSSI(JL) = MIN( ZSSI(JL), ZUSW(JL) ) ! limitation of SSi according to SSw=0 IF ( (ZZT(JL)<XTT-5.0) .AND. (ZSSI(JL)>0.0) ) THEN -#ifndef MNH_BITREP +#if !defined(MNH_BITREP) && !defined(MNH_BITREP_OMP) ZZW(JL) = XNU20 * EXP( XALPHA2*ZSSI(JL)-XBETA2 ) #else ZZW(JL) = XNU20 * BR_EXP( XALPHA2*ZSSI(JL)-XBETA2 ) #endif END IF END DO -#ifndef MNH_BITREP +#if !defined(MNH_BITREP) && !defined(MNH_BITREP_OMP) !$acc loop independent DO CONCURRENT ( JL=1:INEGT ) IF ( (ZZT(JL)<=XTT-2.0) .AND. (ZZT(JL)>=XTT-5.0) .AND. (ZSSI(JL)>0.0) ) THEN diff --git a/src/MNH/rain_ice_sedimentation_split.f90 b/src/MNH/rain_ice_sedimentation_split.f90 index 9e9f29c71..b51714242 100644 --- a/src/MNH/rain_ice_sedimentation_split.f90 +++ b/src/MNH/rain_ice_sedimentation_split.f90 @@ -47,7 +47,7 @@ use mode_tools, only: Countjv use mode_tools, only: Countjv_device #endif -#ifdef MNH_BITREP +#if defined(MNH_BITREP) || defined(MNH_BITREP_OMP) USE MODI_BITREP #endif @@ -492,20 +492,20 @@ DO JN = 1 , KSPLITR ! #else ! ZWLBDC = BR_POW(ZWLBDC,XLBEXC) ! #endif -#ifndef MNH_BITREP +#if !defined(MNH_BITREP) && !defined(MNH_BITREP_OMP) ZWLBDC = (ZWLBDC * ZCONC / (ZRHODREFLOC * ZRTLOC))**XLBEXC #else ZWLBDC = BR_POW(ZWLBDC * ZCONC / (ZRHODREFLOC * ZRTLOC),XLBEXC) #endif ZRAY1D = ZRAY1D / ZWLBDC !! ZRAY : mean diameter=M(1)/2 -#ifndef MNH_BITREP +#if !defined(MNH_BITREP) && !defined(MNH_BITREP_OMP) ZZT = ZZT * (ZPRES/XP00)**(XRD/XCPD) #else ZZT = ZZT * BR_POW(ZPRES/XP00,XRD/XCPD) #endif ZWLBDA = 6.6E-8*(101325./ZPRES)*(ZZT/293.15) ZCC = XCC*(1.+1.26*ZWLBDA/ZRAY1D) !! XCC modified for cloud -#ifndef MNH_BITREP +#if !defined(MNH_BITREP) && !defined(MNH_BITREP_OMP) ZWSED (IC1(JL),IC2(JL),IC3(JL)) = ZRHODREFLOC**(-XCEXVT +1 ) & * ZWLBDC**(-XDC)*ZCC*ZFSEDC1D * ZRSLOC #else @@ -538,7 +538,7 @@ DO JN = 1 , KSPLITR IF( ZRSLOC > ZRTMIN(3) ) THEN ZRHODREFLOC = PRHODREF(IR1(JL),IR2(JL),IR3(JL)) -#ifndef MNH_BITREP +#if !defined(MNH_BITREP) && !defined(MNH_BITREP_OMP) ZWSED (IR1(JL),IR2(JL),IR3(JL))= XFSEDR * ZRSLOC**XEXSEDR * & ZRHODREFLOC**(XEXSEDR-XCEXVT) #else @@ -570,7 +570,7 @@ DO JN = 1 , KSPLITR ZRSLOC = PRIS(II1(JL),II2(JL),II3(JL)) IF( ZRSLOC > MAX(ZRTMIN(4),1.0E-7 )) THEN ! limitation of the McF&H formula ZRHODREFLOC = PRHODREF(II1(JL),II2(JL),II3(JL)) -#ifndef MNH_BITREP +#if !defined(MNH_BITREP) && !defined(MNH_BITREP_OMP) ZWSED (II1(JL),II2(JL),II3(JL)) = XFSEDI * ZRSLOC * & ZRHODREFLOC**(1.0-XCEXVT) * & ! McF&H MAX( 0.05E6,-0.15319E6-0.021454E6* & @@ -604,7 +604,7 @@ DO JN = 1 , KSPLITR ZRSLOC = PRSS(IS1(JL),IS2(JL),IS3(JL)) IF( ZRSLOC > ZRTMIN(5) ) THEN ZRHODREFLOC = PRHODREF(IS1(JL),IS2(JL),IS3(JL)) -#ifndef MNH_BITREP +#if !defined(MNH_BITREP) && !defined(MNH_BITREP_OMP) ZWSED (IS1(JL),IS2(JL),IS3(JL)) = XFSEDS * ZRSLOC**XEXSEDS * & ZRHODREFLOC**(XEXSEDS-XCEXVT) #else @@ -635,7 +635,7 @@ DO JN = 1 , KSPLITR ZRSLOC = PRGS(IG1(JL),IG2(JL),IG3(JL)) IF( ZRSLOC > ZRTMIN(6) ) THEN ZRHODREFLOC = PRHODREF(IG1(JL),IG2(JL),IG3(JL)) -#ifndef MNH_BITREP +#if !defined(MNH_BITREP) && !defined(MNH_BITREP_OMP) ZWSED (IG1(JL),IG2(JL),IG3(JL)) = XFSEDG * ZRSLOC**XEXSEDG * & ZRHODREFLOC**(XEXSEDG-XCEXVT) #else @@ -667,7 +667,7 @@ DO JN = 1 , KSPLITR ZRSLOC = PRHS(IH1(JL),IH2(JL),IH3(JL)) IF( ZRSLOC > ZRTMIN(7) ) THEN ZRHODREFLOC = PRHODREF(IH1(JL),IH2(JL),IH3(JL)) -#ifndef MNH_BITREP +#if !defined(MNH_BITREP) && !defined(MNH_BITREP_OMP) ZWSED (IH1(JL),IH2(JL),IH3(JL)) = XFSEDH * ZRSLOC**XEXSEDH * & ZRHODREFLOC**(XEXSEDH-XCEXVT) #else diff --git a/src/MNH/rain_ice_slow.f90 b/src/MNH/rain_ice_slow.f90 index 64fc0840e..22818930d 100644 --- a/src/MNH/rain_ice_slow.f90 +++ b/src/MNH/rain_ice_slow.f90 @@ -39,8 +39,7 @@ use mode_budget, only: Budget_store_add USE MODE_MNH_ZWORK, ONLY: MNH_MEM_GET, MNH_MEM_POSITION_PIN, MNH_MEM_RELEASE #endif use mode_mppdb - -#ifdef MNH_BITREP +#if defined(MNH_BITREP) || defined(MNH_BITREP_OMP) USE MODI_BITREP #endif @@ -156,17 +155,19 @@ CALL MNH_MEM_GET( zz_diff, SIZE(PLSFACT) ) ZZW(:) = 0.0 GWORK(:) = PZT(:)<XTT-35.0 .AND. PRCT(:)>XRTMIN(2) .AND. PRCS(:)>0. - WHERE( GWORK(:) ) - ZZW(:) = MIN( PRCS(:),XHON*PRHODREF(:)*PRCT(:) & -#ifndef MNH_BITREP - *EXP( MIN(XMNH_HUGE_12_LOG,XALPHA3*(PZT(:)-XTT)-XBETA3) ) ) + DO CONCURRENT ( JL=1:JLU ) + IF ( GWORK(JL) ) THEN + ZZW(JL) = MIN( PRCS(JL),XHON*PRHODREF(JL)*PRCT(JL) & +#if !defined(MNH_BITREP) && !defined(MNH_BITREP_OMP) + *EXP( MIN(XMNH_HUGE_12_LOG,XALPHA3*(PZT(JL)-XTT)-XBETA3) ) ) #else - *BR_EXP(MIN(XMNH_HUGE_12_LOG, XALPHA3*(PZT(:)-XTT)-XBETA3) ) ) + *BR_EXP(MIN(XMNH_HUGE_12_LOG, XALPHA3*(PZT(JL)-XTT)-XBETA3) ) ) #endif - PRIS(:) = PRIS(:) + ZZW(:) - PRCS(:) = PRCS(:) - ZZW(:) - PTHS(:) = PTHS(:) + ZZW(:) * zz_diff(:) ! f(L_f*(RCHONI)) - ENDWHERE + PRIS(JL) = PRIS(JL) + ZZW(JL) + PRCS(JL) = PRCS(JL) - ZZW(JL) + PTHS(JL) = PTHS(JL) + ZZW(JL) * zz_diff(JL) ! f(L_f*(RCHONI)) + END IF +ENDDO !$acc end kernels if ( lbudget_th ) call Budget_store_add( tbudgets(NBUDGET_TH), 'HON', & @@ -200,26 +201,29 @@ CALL MNH_MEM_GET( zz_diff, SIZE(PLSFACT) ) ! !$acc kernels PKA(:) = 2.38E-2 + 0.0071E-2 * ( PZT(:) - XTT ) ! k_a -#ifndef MNH_BITREP +#if !defined(MNH_BITREP) && !defined(MNH_BITREP_OMP) PDV(:) = 0.211E-4 * (PZT(:)/XTT)**1.94 * (XP00/PPRES(:)) ! D_v #else - PDV(:) = 0.211E-4 * BR_POW(PZT(:)/XTT,1.94) * (XP00/PPRES(:)) ! D_v +DO CONCURRENT ( JL=1:JLU ) + PDV(JL) = 0.211E-4 * BR_POW(PZT(JL)/XTT,1.94) * (XP00/PPRES(JL)) ! D_v +END DO #endif ! !* 3.4.1 compute the thermodynamical function A_i(T,P) !* and the c^prime_j (in the ventilation factor) ! - -#ifndef MNH_BITREP +#if !defined(MNH_BITREP) && !defined(MNH_BITREP_OMP) PAI(:) = EXP( XALPI - XBETAI/PZT(:) - XGAMI*ALOG(PZT(:) ) ) ! es_i PAI(:) = ( XLSTT + (XCPV-XCI)*(PZT(:)-XTT) )**2 / (PKA(:)*XRV*PZT(:)**2) & + ( XRV*PZT(:) ) / (PDV(:)*PAI(:)) PCJ(:) = XSCFAC * PRHODREF(:)**0.3 / SQRT( 1.718E-5+0.0049E-5*(PZT(:)-XTT) ) #else - PAI(:) = BR_EXP( XALPI - XBETAI/PZT(:) - XGAMI*BR_LOG(PZT(:) ) ) ! es_i - PAI(:) = BR_P2( XLSTT + (XCPV-XCI)*(PZT(:)-XTT) ) / (PKA(:)*XRV*BR_P2(PZT(:))) & - + ( XRV*PZT(:) ) / (PDV(:)*PAI(:)) - PCJ(:) = XSCFAC * BR_POW(PRHODREF(:),0.3) / BR_POW( 1.718E-5+0.0049E-5*(PZT(:)-XTT) , 0.5) +DO CONCURRENT ( JL=1:JLU ) + PAI(JL) = BR_EXP( XALPI - XBETAI/PZT(JL) - XGAMI*BR_LOG(PZT(JL) ) ) ! es_i + PAI(JL) = BR_P2( XLSTT + (XCPV-XCI)*(PZT(JL)-XTT) ) / (PKA(JL)*XRV*BR_P2(PZT(JL))) & + + ( XRV*PZT(JL) ) / (PDV(JL)*PAI(JL)) + PCJ(JL) = XSCFAC * BR_POW(PRHODREF(JL),0.3) / BR_POW( 1.718E-5+0.0049E-5*(PZT(JL)-XTT) , 0.5) +END DO #endif ! !* 3.4.2 compute the riming-conversion of r_c for r_i production: RCAUTI @@ -240,7 +244,7 @@ CALL MNH_MEM_GET( zz_diff, SIZE(PLSFACT) ) DO CONCURRENT ( JL=1:JLU ) IF ( GWORK(JL) ) THEN PLBDAS(JL) = MIN( XLBDAS_MAX, & -#ifndef MNH_BITREP +#if !defined(MNH_BITREP) && !defined(MNH_BITREP_OMP) XLBS*( PRHODREF(JL)*MAX( PRST(JL),XRTMIN(5) ) )**XLBEXS ) #else XLBS*BR_POW( PRHODREF(JL)*MAX( PRST(JL),XRTMIN(5) ),XLBEXS ) ) @@ -255,7 +259,7 @@ CALL MNH_MEM_GET( zz_diff, SIZE(PLSFACT) ) DO CONCURRENT ( JL=1:JLU ) IF ( GWORK(JL) ) THEN ZZW(JL) = ( PSSI(JL)/(PRHODREF(JL)*PAI(JL)) ) * & -#ifndef MNH_BITREP +#if !defined(MNH_BITREP) && !defined(MNH_BITREP_OMP) ( X0DEPS*PLBDAS(JL)**XEX0DEPS + X1DEPS*PCJ(JL)*PLBDAS(JL)**XEX1DEPS ) #else ( X0DEPS*BR_POW(PLBDAS(JL),XEX0DEPS) + X1DEPS*PCJ(JL)*BR_POW(PLBDAS(JL),XEX1DEPS) ) @@ -284,7 +288,7 @@ CALL MNH_MEM_GET( zz_diff, SIZE(PLSFACT) ) !$acc loop independent DO CONCURRENT ( JL=1:JLU ) IF ( GWORK(JL) ) THEN -#ifndef MNH_BITREP +#if !defined(MNH_BITREP) && !defined(MNH_BITREP_OMP) ZZW(JL) = MIN( PRIS(JL),XFIAGGS * EXP( XCOLEXIS*(PZT(JL)-XTT) ) & * PRIT(JL) & * PLBDAS(JL)**XEXIAGGS & @@ -309,24 +313,29 @@ CALL MNH_MEM_GET( zz_diff, SIZE(PLSFACT) ) !* 3.4.5 compute the autoconversion of r_i for r_s production: RIAUTS ! !$acc kernels -#ifndef MNH_BITREP +#if !defined(MNH_BITREP) && !defined(MNH_BITREP_OMP) ZCRIAUTI(:)=MIN(XCRIAUTI,10**(XACRIAUTI*(PZT(:)-XTT)+XBCRIAUTI)) #else - ZCRIAUTI(:)=MIN(XCRIAUTI, BR_POW(10.,XACRIAUTI*(PZT(:)-XTT)+XBCRIAUTI) ) +DO CONCURRENT ( JL=1:JLU ) + ZCRIAUTI(JL)=MIN(XCRIAUTI, BR_POW(10.,XACRIAUTI*(PZT(JL)-XTT)+XBCRIAUTI) ) +END DO #endif ZZW(:) = 0.0 GWORK(:) = PRIT(:)>XRTMIN(4) .AND. PRIS(:)>0.0 - WHERE ( GWORK(:) ) -#ifndef MNH_BITREP - ZZW(:) = MIN( PRIS(:),XTIMAUTI * EXP( XTEXAUTI*(PZT(:)-XTT) ) & - * MAX( PRIT(:)-ZCRIAUTI(:),0.0 ) ) +DO CONCURRENT ( JL=1:JLU ) + IF ( GWORK(JL) ) THEN +#if !defined(MNH_BITREP) && !defined(MNH_BITREP_OMP) + ZZW(JL) = MIN( PRIS(JL),XTIMAUTI * EXP( XTEXAUTI*(PZT(JL)-XTT) ) & + * MAX( PRIT(JL)-ZCRIAUTI(JL),0.0 ) ) #else - ZZW(:) = MIN( PRIS(:),XTIMAUTI * BR_EXP( XTEXAUTI*(PZT(:)-XTT) ) & - * MAX( PRIT(:)-ZCRIAUTI(:),0.0 ) ) + ZZW(JL) = MIN( PRIS(JL),XTIMAUTI * BR_EXP( XTEXAUTI*(PZT(JL)-XTT) ) & + * MAX( PRIT(JL)-ZCRIAUTI(JL),0.0 ) ) #endif - PRSS(:) = PRSS(:) + ZZW(:) - PRIS(:) = PRIS(:) - ZZW(:) - END WHERE + PRSS(JL) = PRSS(JL) + ZZW(JL) + PRIS(JL) = PRIS(JL) - ZZW(JL) + !!END WHERE + END IF +END DO !$acc end kernels if ( lbudget_ri ) call Budget_store_add( tbudgets(NBUDGET_RI), 'AUTS', & @@ -342,7 +351,7 @@ CALL MNH_MEM_GET( zz_diff, SIZE(PLSFACT) ) !$acc loop independent DO CONCURRENT ( JL=1:JLU ) IF ( GWORK(JL) ) THEN -#ifndef MNH_BITREP +#if !defined(MNH_BITREP) && !defined(MNH_BITREP_OMP) PLBDAG(JL) = XLBG*( PRHODREF(JL)*MAX( PRGT(JL),XRTMIN(6) ) )**XLBEXG #else PLBDAG(JL) = XLBG*BR_POW( PRHODREF(JL)*MAX( PRGT(JL),XRTMIN(6) ), XLBEXG) @@ -357,7 +366,7 @@ CALL MNH_MEM_GET( zz_diff, SIZE(PLSFACT) ) DO CONCURRENT ( JL=1:JLU ) IF ( GWORK(JL) ) THEN ZZW(JL) = ( PSSI(JL)/(PRHODREF(JL)*PAI(JL)) ) * & -#ifndef MNH_BITREP +#if !defined(MNH_BITREP) && !defined(MNH_BITREP_OMP) ( X0DEPG*PLBDAG(JL)**XEX0DEPG + X1DEPG*PCJ(JL)*PLBDAG(JL)**XEX1DEPG ) #else ( X0DEPG*BR_POW(PLBDAG(JL),XEX0DEPG) + X1DEPG*PCJ(JL)*BR_POW(PLBDAG(JL),XEX1DEPG) ) diff --git a/src/MNH/resolved_cloud.f90 b/src/MNH/resolved_cloud.f90 index 0012f0876..d97d37e34 100644 --- a/src/MNH/resolved_cloud.f90 +++ b/src/MNH/resolved_cloud.f90 @@ -314,7 +314,7 @@ USE MODE_MSG use mode_sources_neg_correct, only: Sources_neg_correct use mode_sum_ll, only: MIN_ll, SUM3D_ll ! -#ifdef MNH_BITREP +#if defined(MNH_BITREP) || defined(MNH_BITREP_OMP) USE MODI_BITREP #endif ! @@ -922,10 +922,12 @@ CALL PRINT_MSG(NVERB_FATAL,'GEN','RESOLVED_CLOUD','C2R2//KHKO not yet implemente ! ----------------------------------------------------- ! !$acc kernels -#ifndef MNH_BITREP +#if !defined(MNH_BITREP) && !defined(MNH_BITREP_OMP) ZEXN(:,:,:)= (PPABST(:,:,:)/XP00)**(XRD/XCPD) #else - ZEXN(:,:,:)= BR_POW( PPABST(:,:,:)/XP00, XRD/XCPD ) +DO CONCURRENT ( JI=1:JIU,JJ=1:JJU,JK=1:JKU ) + ZEXN(JI,JJ,JK)= BR_POW( PPABST(JI,JJ,JK)/XP00, XRD/XCPD ) +ENDDO #endif !$acc end kernels ! @@ -1041,10 +1043,12 @@ CALL PRINT_MSG(NVERB_FATAL,'GEN','RESOLVED_CLOUD','ICE4 not yet implemented') ! ----------------------------------------------------- ! !$acc kernels -#ifndef MNH_BITREP +#if !defined(MNH_BITREP) && !defined(MNH_BITREP_OMP) ZEXN(:,:,:)= (PPABST(:,:,:)/XP00)**(XRD/XCPD) #else - ZEXN(:,:,:)= BR_POW( PPABST(:,:,:)/XP00, XRD/XCPD ) + DO CONCURRENT ( JI=1:JIU,JJ=1:JJU,JK=1:JKU ) + ZEXN(JI,JJ,JK)= BR_POW( PPABST(JI,JJ,JK)/XP00, XRD/XCPD ) + ENDDO #endif !$acc end kernels ! diff --git a/src/MNH/sources_neg_correct.f90 b/src/MNH/sources_neg_correct.f90 index 5602b75cc..d27079dd0 100644 --- a/src/MNH/sources_neg_correct.f90 +++ b/src/MNH/sources_neg_correct.f90 @@ -38,7 +38,7 @@ use mode_mnh_zwork, only: Mnh_mem_get, Mnh_mem_position_pin, Mnh_mem_release use mode_mppdb use mode_msg -#ifdef MNH_BITREP +#if defined(MNH_BITREP) || defined(MNH_BITREP_OMP) use modi_bitrep #endif @@ -242,13 +242,19 @@ end if !$acc data present( zt, zexn, zlv, zcph, zls, zcor ) - +#if !defined(MNH_BITREP) && !defined(MNH_BITREP_OMP) !$acc kernels present_cr(zexn,zt,zlv) -#ifndef MNH_BITREP zexn(:, :, :) = ( ppabst(:, :, :) / xp00 ) ** (xrd / xcpd ) +!$acc end kernels #else -zexn(:, :, :) = Br_pow( ppabst(:, :, :) / xp00, xrd / xcpd ) +!$acc kernels +!$acc_nv loop collapse(3) +DO CONCURRENT(ji=1:jiu, jj=1:jju, jk=1:jku ) +zexn(ji,jj,jk) = Br_pow( ppabst(ji,jj,jk) / xp00, xrd / xcpd ) +ENDDO +!$acc end kernels #endif +!$acc kernels present_cr(zexn,zt,zlv) zt (:, :, :) = ptht(:, :, :) * zexn(:, :, :) zlv (:, :, :) = xlvtt + ( xcpv - xcl ) * ( zt(:, :, :) - xtt ) !$acc end kernels -- GitLab