diff --git a/src/ZSOLVER/ice_adjust.f90 b/src/ZSOLVER/ice_adjust.f90 index 864b5bc88ec32ff45953d8c38e6bab3b092fc26d..d19aa6b93f9c21a966943bdc63c3e4ab4343f274 100644 --- a/src/ZSOLVER/ice_adjust.f90 +++ b/src/ZSOLVER/ice_adjust.f90 @@ -1,4 +1,4 @@ -!MNH_LIC Copyright 1996-2021 CNRS, Meteo-France and Universite Paul Sabatier +!MNH_LIC Copyright 1996-2022 CNRS, Meteo-France and Universite Paul Sabatier !MNH_LIC This is part of the Meso-NH software governed by the CeCILL-C licence !MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt !MNH_LIC for details. version 1. @@ -280,6 +280,20 @@ INTEGER :: IKE ! K index value of the last inner mass point INTEGER :: JITER,ITERMAX ! iterative loop for first order adjustment INTEGER :: JI,JJ,JK ! +#ifndef MNH_OPENACC +LOGICAL,DIMENSION(:,:,:), allocatable :: GTEMP +! +REAL, DIMENSION(:,:,:), allocatable :: ZSIGS,ZSRCS +REAL, DIMENSION(:,:,:), allocatable & + :: ZT, & ! adjusted temperature + ZRV, ZRC, ZRI, & ! adjusted state + ZCPH, & ! guess of the CPh for the mixing + ZLV, & ! guess of the Lv at t+1 + ZLS, & ! guess of the Ls at t+1 + ZW1,ZW2, & ! Work arrays for intermediate fields + ZCRIAUT, & ! Autoconversion thresholds + ZHCF, ZHR +#else LOGICAL,DIMENSION(:,:,:), POINTER, CONTIGUOUS :: GTEMP ! REAL, DIMENSION(:,:,:), POINTER, CONTIGUOUS :: ZSIGS,ZSRCS @@ -293,9 +307,16 @@ REAL, DIMENSION(:,:,:), POINTER, CONTIGUOUS & ZCRIAUT, & ! Autoconversion thresholds ZHCF, ZHR REAL, DIMENSION(:,:,:), pointer , contiguous :: ZTEMP_BUD +#endif ! +LOGICAL :: GPOUT_RV,GPOUT_RC,GPOUT_RI,GPOUT_TH !------------------------------------------------------------------------------- ! +GPOUT_RV = PRESENT(POUT_RV) +GPOUT_RC = PRESENT(POUT_RC) +GPOUT_RI = PRESENT(POUT_RI) +GPOUT_TH = PRESENT(POUT_TH) +! ! IN variables ! !$acc data present( PRHODJ, PEXNREF, PSIGS, PMFCONV, PPABST, PZZ, & @@ -434,7 +455,7 @@ DO JITER =1,ITERMAX !* 2.3 compute the latent heat of vaporization Lv(T*) at t+1 ! and the latent heat of sublimation Ls(T*) at t+1 ! -!$acc kernels +!$acc kernels present_cr(ZLV,ZLS,ZCPH) ZLV(:,:,:) = XLVTT + ( XCPV - XCL ) * ( ZT(:,:,:) -XTT ) ZLS(:,:,:) = XLSTT + ( XCPV - XCI ) * ( ZT(:,:,:) -XTT ) ! @@ -547,13 +568,15 @@ ENDDO !* 5.2 compute the cloud fraction PCLDFR ! IF ( .NOT. OSUBG_COND ) THEN -!$acc kernels - GTEMP(:,:,:) = PRCS(:,:,:) + PRIS(:,:,:) > 1.E-12 / PTSTEP - WHERE ( GTEMP(:,:,:) ) - PCLDFR(:,:,:) = 1. - ELSEWHERE - PCLDFR(:,:,:) = 0. - ENDWHERE +!$acc kernels present_cr(GTEMP) +DO CONCURRENT (JI=1:IIU,JJ=1:IJU,JK=1:IKU) + GTEMP(JI,JJ,JK) = PRCS(JI,JJ,JK) + PRIS(JI,JJ,JK) > 1.E-12 / PTSTEP + IF ( GTEMP(JI,JJ,JK) )THEN + PCLDFR(JI,JJ,JK) = 1. + ELSE + PCLDFR(JI,JJ,JK) = 0. + ENDIF +ENDDO IF ( SIZE(PSRCS,3) /= 0 ) THEN PSRCS(:,:,:) = PCLDFR(:,:,:) END IF @@ -630,8 +653,8 @@ ELSE PTHS(:,:,:) = PTHS(:,:,:) + & (ZW1 * ZLV(:,:,:) + ZW2 * ZLS(:,:,:)) / ZCPH(:,:,:) & / PEXNREF(:,:,:) - IF(PRESENT(POUT_RV) .OR. PRESENT(POUT_RC) .OR. & - &PRESENT(POUT_RI) .OR. PRESENT(POUT_TH)) THEN + IF(GPOUT_RV .OR. GPOUT_RC .OR. & + &GPOUT_RI .OR. GPOUT_TH) THEN ZW1(:,:,:)=PRC_MF(:,:,:) ZW2(:,:,:)=PRI_MF(:,:,:) GTEMP(:,:,:) = ZW1(:,:,:)+ZW2(:,:,:)>ZRV(:,:,:) @@ -648,10 +671,10 @@ ELSE ENDIF ! !$acc kernels -IF(PRESENT(POUT_RV)) POUT_RV=ZRV -IF(PRESENT(POUT_RC)) POUT_RC=ZRC -IF(PRESENT(POUT_RI)) POUT_RI=ZRI -IF(PRESENT(POUT_TH)) POUT_TH=ZT / PEXN(:,:,:) +IF(GPOUT_RV) POUT_RV=ZRV +IF(GPOUT_RC) POUT_RC=ZRC +IF(GPOUT_RI) POUT_RI=ZRI +IF(GPOUT_TH) POUT_TH=ZT / PEXN(:,:,:) !$acc end kernels ! ! @@ -701,10 +724,10 @@ CALL MPPDB_CHECK3D(PRIS,"ICE_ADJUST end:PRIS",PRECISION) !Check all OUT arrays CALL MPPDB_CHECK3D(PSRCS,"ICE_ADJUST end:PSRCS",PRECISION) CALL MPPDB_CHECK3D(PCLDFR,"ICE_ADJUST end:PCLDFR",PRECISION) -IF (PRESENT(POUT_RV)) CALL MPPDB_CHECK3D(POUT_RV,"ICE_ADJUST end:POUT_RV") -IF (PRESENT(POUT_RC)) CALL MPPDB_CHECK3D(POUT_RC,"ICE_ADJUST end:POUT_RC") -IF (PRESENT(POUT_RI)) CALL MPPDB_CHECK3D(POUT_RI,"ICE_ADJUST end:POUT_RI") -IF (PRESENT(POUT_TH)) CALL MPPDB_CHECK3D(POUT_TH,"ICE_ADJUST end:POUT_TH") +IF (GPOUT_RV) CALL MPPDB_CHECK3D(POUT_RV,"ICE_ADJUST end:POUT_RV") +IF (GPOUT_RC) CALL MPPDB_CHECK3D(POUT_RC,"ICE_ADJUST end:POUT_RC") +IF (GPOUT_RI) CALL MPPDB_CHECK3D(POUT_RI,"ICE_ADJUST end:POUT_RI") +IF (GPOUT_TH) CALL MPPDB_CHECK3D(POUT_TH,"ICE_ADJUST end:POUT_TH") IF (PRESENT(PHLC_HRC)) CALL MPPDB_CHECK3D(PHLC_HRC,"ICE_ADJUST end:PHLC_HRC") IF (PRESENT(PHLC_HCF)) CALL MPPDB_CHECK3D(PHLC_HCF,"ICE_ADJUST end:PHLC_HCF") IF (PRESENT(PHLI_HRI)) CALL MPPDB_CHECK3D(PHLI_HRI,"ICE_ADJUST end:PHLI_HRI") diff --git a/src/ZSOLVER/sources_neg_correct.f90 b/src/ZSOLVER/sources_neg_correct.f90 index c712ef026ac09badd5cb03c8b11287b15d931de5..5602b75ccf615817e299c332cf382beb9053c7f6 100644 --- a/src/ZSOLVER/sources_neg_correct.f90 +++ b/src/ZSOLVER/sources_neg_correct.f90 @@ -243,11 +243,7 @@ end if !$acc data present( zt, zexn, zlv, zcph, zls, zcor ) -#ifdef MNH_COMPILER_CCE -!$acc kernels present(zexn,zt,zlv) -#else -!$acc kernels -#endif +!$acc kernels present_cr(zexn,zt,zlv) #ifndef MNH_BITREP zexn(:, :, :) = ( ppabst(:, :, :) / xp00 ) ** (xrd / xcpd ) #else @@ -257,11 +253,7 @@ zt (:, :, :) = ptht(:, :, :) * zexn(:, :, :) zlv (:, :, :) = xlvtt + ( xcpv - xcl ) * ( zt(:, :, :) - xtt ) !$acc end kernels if ( hcloud == 'ICE3' .or. hcloud == 'ICE4' .or. hcloud == 'LIMA' ) then -#ifdef MNH_COMPILER_CCE -!$acc kernels present(zls) -#else -!$acc kernels -#endif +!$acc kernels present_cr(zls) zls(:, :, :) = xlstt + ( xcpv - xci ) * ( zt(:, :, :) - xtt ) !$acc end kernels end if