diff --git a/src/MNH/ice4_tendencies.f90 b/src/MNH/ice4_tendencies.f90 index 87f1eb77afc18b10114508aeaacc05703ab13cb2..5c86a1dd2b06584c0cb7a011829eeff0b042a641 100644 --- a/src/MNH/ice4_tendencies.f90 +++ b/src/MNH/ice4_tendencies.f90 @@ -318,6 +318,7 @@ REAL, DIMENSION(:,:,:), INTENT(OUT) :: PRAINFR ! Rain fraction ! INTEGER :: IDX,JI,JJ,JK,JL INTEGER :: ISIZE +LOGICAL, DIMENSION(:), allocatable :: GLDCOMPUTE REAL, DIMENSION(:), allocatable :: ZWETG ! 1. if graupel growths in wet mode, 0. otherwise REAL, DIMENSION(:), allocatable :: ZRVT, ZRCT, ZRRT, ZRIT, ZRST, ZRGT, & & ZT, ZTHT, ZRHT, & @@ -385,6 +386,7 @@ END IF isize = size( pcompute ) +allocate( gldcompute(isize ) ) allocate( zwetg (isize ) ) allocate( zrvt (isize ) ) allocate( zrct (isize ) ) @@ -414,7 +416,7 @@ allocate( zrst3d(kit, kjt, kkt ) ) allocate( zrgt3d(kit, kjt, kkt ) ) allocate( zrht3d(kit, kjt, kkt ) ) -!$acc data create(ZWETG,ZRVT,ZRCT,ZRRT,ZRIT,ZRST,ZRGT,ZT,ZTHT,ZRHT,ZZW,ZKA,ZDV,ZAI,ZCJ,ZRF, & +!$acc data create(GLDCOMPUTE, ZWETG,ZRVT,ZRCT,ZRRT,ZRIT,ZRST,ZRGT,ZT,ZTHT,ZRHT,ZZW,ZKA,ZDV,ZAI,ZCJ,ZRF, & !$acc& ZLBDAR,ZLBDAS,ZLBDAG,ZLBDAH,ZLBDAR_RF,ZRGSI,ZRGSI_MR,ZRRT3D,ZRST3D,ZRGT3D,ZRHT3D) !$acc kernels @@ -458,7 +460,11 @@ ELSE ! !* 2. COMPUTES THE SLOW COLD PROCESS SOURCES ! -------------------------------------- - CALL ICE4_NUCLEATION(ODSOFT, PCOMPUTE==1., & +!$acc kernels + GLDCOMPUTE = PCOMPUTE==1. +!$acc end kernels + + CALL ICE4_NUCLEATION(ODSOFT, GLDCOMPUTE, & ZTHT, PPRES, PRHODREF, PEXN, PLSFACT, ZT, & ZRVT, & PCIT, PRVHENI_MR, PB_TH, PB_RV, PB_RI) diff --git a/src/MNH/modeln.f90 b/src/MNH/modeln.f90 index e885690fc5792bc75bcaff6ef88cd726fb4e7f03..3ad1f6d48935f03b92625175642e0eeb33d481eb 100644 --- a/src/MNH/modeln.f90 +++ b/src/MNH/modeln.f90 @@ -1898,7 +1898,8 @@ IF (CCLOUD /= 'NONE' .AND. CELEC == 'NONE') THEN !$acc & XSOLORG, XMI) & !$acc & copy (XSUPSAT, XNACT, XNPRO, XSSPRO, & !$acc & XRTHS, XRT, XRRS, XSVT, XRSVS, XCLDFR, XCIT, XINPRR3D, XEVAP3D, & -!$acc & XINPRC, XINPRR, XINPRS, XINPRG, XINPRH, XINDEP) & +!$acc & XINPRC, XINPRR, XINPRS, XINPRG, XINPRH, XINDEP, & +!$acc & XHLC_HRC, XHLC_HCF, XHLI_HRI, XHLI_HCF) & !$acc & copyout(XSRCT, XRAINFR) IF (CSURF=='EXTE') THEN ALLOCATE (ZSEA(SIZE(XRHODJ,1),SIZE(XRHODJ,2))) diff --git a/src/MNH/rain_ice.f90 b/src/MNH/rain_ice.f90 index 457174c73ba646e4acc1b9c6beaeab930a171ebc..ddad84fccc481cda99545ccd86bb1f0254cdab33 100644 --- a/src/MNH/rain_ice.f90 +++ b/src/MNH/rain_ice.f90 @@ -397,6 +397,9 @@ REAL, DIMENSION(:), ALLOCATABLE :: ZRHODREF, & ! RHO Dry REFerence ! = ZHLC_HRC/HCF+ ZHLC_LRC/LCF REAL, DIMENSION(:,:), ALLOCATABLE :: ZZW1 ! Work arrays REAL, DIMENSION(:,:,:), ALLOCATABLE :: ZRR, ZRS, ZRG ! work arrays +#ifdef MNH_OPENACC +REAL, DIMENSION(:,:,:), ALLOCATABLE :: ZRS_ZERO, ZRG_ZERO ! work arrays filled with zeros +#endif REAL, DIMENSION(:,:,:), ALLOCATABLE :: ZT ! Temperature ! ! IN variables @@ -464,9 +467,13 @@ ALLOCATE( GMICRO(SIZE(PEXNREF,1),SIZE(PEXNREF,2),SIZE(PEXNREF,3)) ) ALLOCATE( ZRR (SIZE(PEXNREF,1),SIZE(PEXNREF,2),SIZE(PEXNREF,3)) ) ALLOCATE( ZRS (SIZE(PEXNREF,1),SIZE(PEXNREF,2),SIZE(PEXNREF,3)) ) ALLOCATE( ZRG (SIZE(PEXNREF,1),SIZE(PEXNREF,2),SIZE(PEXNREF,3)) ) +#ifdef MNH_OPENACC +ALLOCATE( ZRS_ZERO(SIZE(PEXNREF,1),SIZE(PEXNREF,2),SIZE(PEXNREF,3)) ) +ALLOCATE( ZRG_ZERO(SIZE(PEXNREF,1),SIZE(PEXNREF,2),SIZE(PEXNREF,3)) ) +#endif ALLOCATE( ZT (SIZE(PEXNREF,1),SIZE(PEXNREF,2),SIZE(PEXNREF,3)) ) -!$acc data create( I1, I2, I3, GMICRO, ZRR, ZRS, ZRG, ZT ) +!$acc data create( I1, I2, I3, GMICRO, ZRR, ZRS, ZRG, ZRS_ZERO, ZRG_ZERO, ZT ) !------------------------------------------------------------------------------- ! @@ -878,14 +885,22 @@ IF( IMICRO >= 0 ) THEN !Diagnostic of precipitation fraction !$acc kernels PRAINFR(:,:,:) = 0. +#ifdef MNH_OPENACC + ZRS_ZERO(:,:,:) = 0. + ZRG_ZERO(:,:,:) = 0. +#endif !$acc loop independent DO JL=1,IMICRO PRAINFR(I1(JL),I2(JL),I3(JL)) = ZRF(JL) END DO !$acc end kernels CALL ICE4_RAINFR_VERT( IIB, IIE, IIT, IJB, IJE, IJT, IKB, IKE, IKT, KKL, PRAINFR, PRRT(:,:,:), & +#ifndef MNH_OPENACC RESHAPE( SOURCE = [ ( 0., JL = 1, SIZE( PRSS ) ) ], SHAPE = SHAPE( PRSS ) ), & RESHAPE( SOURCE = [ ( 0., JL = 1, SIZE( PRGS ) ) ], SHAPE = SHAPE( PRGS ) ) ) +#else + ZRS_ZERO(:,:,:), ZRG_ZERO(:,:,:) ) +#endif !$acc kernels !$acc loop independent DO JL=1,IMICRO