diff --git a/src/MNH/ice4_compute_pdf.f90 b/src/MNH/ice4_compute_pdf.f90 index c8164539c22451f1c6aa15fbdf22402f11a9e158..5eff4c083a615b1f597f43d3f163b342ad86bdc8 100644 --- a/src/MNH/ice4_compute_pdf.f90 +++ b/src/MNH/ice4_compute_pdf.f90 @@ -106,6 +106,8 @@ REAL, DIMENSION(:), allocatable :: ZRCRAUTC, & !RC value to begin rain f ! note that ZRC/CF = ZHLC_HRCLOCAL+ ZHLC_LRCLOCAL ! = PHLC_HRC/HCF+ PHLC_LRC/LCF ZSUMRC, ZSUMRI +! +INTEGER :: IHSUBG_PR_PDF ! temporary variable for OpenCC character limitation (Cray CCE) ! !------------------------------------------------------------------------------- @@ -257,6 +259,20 @@ ELSEIF(HSUBG_AUCV_RC=='PDF ') THEN ZCOEFFRCM=4. END IF !$acc update device(ZCOEFFRCM) + +SELECT CASE( HSUBG_PR_PDF ) + CASE ( 'HLCRECTPDF' ) + IHSUBG_PR_PDF = 1 + CASE ( 'HLCTRIANGPDF' ) + IHSUBG_PR_PDF = 2 + CASE ( 'HLCQUADRAPDF' ) + IHSUBG_PR_PDF = 3 + CASE ( 'HLCISOTRIPDF' ) + IHSUBG_PR_PDF = 4 + CASE DEFAULT + IHSUBG_PR_PDF = 0 +END SELECT + !$acc kernels GWORK(:) = PRCT(:)>0. .AND. PCF(:)>0. WHERE(GWORK(:)) @@ -265,18 +281,21 @@ ELSEIF(HSUBG_AUCV_RC=='PDF ') THEN ! Split available water and cloud fraction in two parts ! Calculate local mean values int he low and high parts for the 3 PDF forms: GWORK(:) = PRCT(:)>0. .AND. PCF(:)>0. .AND. ZHLC_RCMAX(:)>ZRCRAUTC(:) - IF(HSUBG_PR_PDF=='HLCRECTPDF') THEN + !IF(HSUBG_PR_PDF=='HLCRECTPDF') THEN + IF (IHSUBG_PR_PDF==1) THEN WHERE(GWORK(:)) ZHLC_LRCLOCAL(:)=0.5*ZRCRAUTC(:) ZHLC_HRCLOCAL(:)=( ZHLC_RCMAX(:) + ZRCRAUTC(:))/2.0 END WHERE - ELSE IF(HSUBG_PR_PDF=='HLCTRIANGPDF') THEN + !ELSE IF(HSUBG_PR_PDF=='HLCTRIANGPDF') THEN + ELSE IF (IHSUBG_PR_PDF==2) THEN WHERE(GWORK(:)) ZHLC_LRCLOCAL(:)=( ZRCRAUTC(:) *(3.0 * ZHLC_RCMAX(:) - 2.0 * ZRCRAUTC(:) ) ) & / (3.0 * (2.0 * ZHLC_RCMAX(:) - ZRCRAUTC(:) ) ) ZHLC_HRCLOCAL(:)=(ZHLC_RCMAX(:) + 2.0*ZRCRAUTC(:)) / 3.0 END WHERE - ELSE IF(HSUBG_PR_PDF=='HLCQUADRAPDF') THEN + !ELSE IF(HSUBG_PR_PDF=='HLCQUADRAPDF') THEN + ELSE IF (IHSUBG_PR_PDF==3) THEN WHERE(GWORK(:)) #ifndef MNH_BITREP ZHLC_LRCLOCAL(:)=(3.0 *ZRCRAUTC(:)**3 - 8.0 *ZRCRAUTC(:)**2 * ZHLC_RCMAX(:) & @@ -293,7 +312,8 @@ ELSEIF(HSUBG_AUCV_RC=='PDF ') THEN #endif ZHLC_HRCLOCAL(:)=(ZHLC_RCMAX(:) + 3.0*ZRCRAUTC(:))/4.0 END WHERE - ELSE IF(HSUBG_PR_PDF=='HLCISOTRIPDF') THEN + !ELSE IF(HSUBG_PR_PDF=='HLCISOTRIPDF') THEN + ELSE IF (IHSUBG_PR_PDF==4) THEN GWORK2(:) = PRCT(:) <= ZRCRAUTC(:)*PCF(:) WHERE(GWORK(:)) WHERE(GWORK2(:)) @@ -443,3 +463,4 @@ END IF !$acc end data END SUBROUTINE ICE4_COMPUTE_PDF + diff --git a/src/MNH/ice4_warm.f90 b/src/MNH/ice4_warm.f90 index 95a0c756caada79f2c521d28bd27ce150f42e9b4..a07d25cd7161608e788dfc9846c60286cec5f395 100644 --- a/src/MNH/ice4_warm.f90 +++ b/src/MNH/ice4_warm.f90 @@ -128,6 +128,8 @@ REAL, DIMENSION(:), allocatable :: ZUSW ! Undersaturation over water REAL, DIMENSION(:), allocatable :: ZTHLT ! Liquid potential temperature REAL, DIMENSION(:), allocatable :: ZMASK, ZMASK1, ZMASK2 +LOGICAL :: GHSUBG_RR_EVAP ! temporary variable for OpenACC character limitation (Cray CCE) + !$acc data present(PCOMPUTE,PRHODREF,PLVFACT,PT,PPRES,PTHT, & !$acc& PLBDAR,PLBDAR_RF,PKA,PDV,PCJ,PHLC_LCF,PHLC_HCF,PHLC_LRC,PHLC_HRC,PCF,PRF, & !$acc& PRVT,PRCT,PRRT,PRCAUTR,PRCACCR,PRREVAV,PA_TH,PA_RV,PA_RC,PA_RR ) @@ -340,12 +342,15 @@ IF (HSUBG_RR_EVAP=='NONE') THEN !$acc end kernels ELSEIF (HSUBG_RR_EVAP=='CLFR' .OR. HSUBG_RR_EVAP=='PRFR') THEN +GHSUBG_RR_EVAP=.false. +IF (HSUBG_RR_EVAP=='CLFR') GHSUBG_RR_EVAP=.true. !$acc kernels !Evaporation in clear sky part !With CLFR, rain is diluted over the grid box !With PRFR, rain is concentrated in its fraction !Use temperature and humidity in clear sky part like Bechtold et al. (1993) - IF (HSUBG_RR_EVAP=='CLFR') THEN + !IF (HSUBG_RR_EVAP=='CLFR') THEN + IF (GHSUBG_RR_EVAP) THEN ZZW4(:)=1. !Precipitation fraction ZZW3(:)=PLBDAR(:) ELSE @@ -435,3 +440,4 @@ END IF !$acc end data END SUBROUTINE ICE4_WARM + diff --git a/src/MNH/rain_ice_red.f90 b/src/MNH/rain_ice_red.f90 index f82d14821a0efb775330e1e6494c47869c483e0e..08462db53099c8bd7552cf5af7230936eeceabc4 100644 --- a/src/MNH/rain_ice_red.f90 +++ b/src/MNH/rain_ice_red.f90 @@ -520,6 +520,7 @@ REAL, DIMENSION(:), allocatable :: ZSSI REAL, DIMENSION(:,:,:), allocatable :: & &ZW_RVS, ZW_RCS, ZW_RRS, ZW_RIS, ZW_RSS, ZW_RGS, ZW_RHS, ZW_THS ! +LOGICAL :: GTEST ! temporary variable for OpenACC character limitation (Cray CCE) !$acc data present( ODMICRO, PEXN, PDZZ, PRHODJ, PRHODREF, PEXNREF, PPABST, PCIT, PCLDFR, & !$acc & PHLC_HRC, PTHT, PRVT, & @@ -991,6 +992,8 @@ IMICRO=COUNTJV(ODMICRO(:,:,:), I1(:), I2(:), I3(:)) CALL COUNTJV_DEVICE(ODMICRO(:,:,:),I1(:),I2(:),I3(:),IMICRO) #endif !Packing +GTEST=.false. +IF(HSUBG_AUCV_RC=='PDF ' .AND. CSUBG_PR_PDF=='SIGM') GTEST=.true. !$acc kernels IF(IMICRO>0) THEN DO JL=1, IMICRO @@ -1035,7 +1038,8 @@ IF(IMICRO>0) THEN !The th tendency is not related to a mixing ratio change, there is no exn/exnref issue here ENDDO ENDIF - IF(HSUBG_AUCV_RC=='PDF ' .AND. CSUBG_PR_PDF=='SIGM') THEN + !IF(HSUBG_AUCV_RC=='PDF ' .AND. CSUBG_PR_PDF=='SIGM') THEN + IF (GTEST) THEN DO JL=1, IMICRO ZSIGMA_RC(JL) = PSIGS(I1(JL),I2(JL),I3(JL))*2. ENDDO @@ -2414,3 +2418,4 @@ CONTAINS ! END SUBROUTINE RAIN_ICE_RED + diff --git a/src/MNH/rain_ice_warm.f90 b/src/MNH/rain_ice_warm.f90 index 4dbce215476eab85e53f8c1e702e31136fb9678a..a524b3949ca194b914ae299ad1a54d0f2f8063fb 100644 --- a/src/MNH/rain_ice_warm.f90 +++ b/src/MNH/rain_ice_warm.f90 @@ -92,6 +92,8 @@ REAL, DIMENSION(:), ALLOCATABLE :: ZZW4 ! Work array ! INTEGER :: JLU ! +LOGICAL :: GCSUBG_RR_EVAP ! temporary variable for OpenCC character limitation (Cray CCE) +! !------------------------------------------------------------------------------- ! ! IN variables @@ -312,12 +314,15 @@ ALLOCATE( ZZW4 (size(PRHODREF)) ) #ifdef MNH_OPENACC CALL PRINT_MSG(NVERB_WARNING,'GEN','RAIN_ICE_WARM','OPENACC: CSUBG_RR_EVAP=="CLFR" or "PRFR" not yet tested') #endif +GCSUBG_RR_EVAP=.false. +IF (CSUBG_RR_EVAP=='CLFR') GCSUBG_RR_EVAP=.true. !$acc kernels !Evaporation in clear sky part !With CLFR, rain is diluted over the grid box !With PRFR, rain is concentrated in its fraction !Use temperature and humidity in clear sky part like Bechtold et al. (1993) - IF (CSUBG_RR_EVAP=='CLFR') THEN + !IF (CSUBG_RR_EVAP=='CLFR') THEN + IF (GCSUBG_RR_EVAP) THEN ZZW4(:)=1. !Precipitation fraction ZZW3(:)=PLBDAR(:) ELSE @@ -409,3 +414,4 @@ END IF END SUBROUTINE RAIN_ICE_WARM END MODULE MODE_RAIN_ICE_WARM +