Skip to content
Snippets Groups Projects
Commit ce070e94 authored by WAUTELET Philippe's avatar WAUTELET Philippe
Browse files

Philippe 10/09/2021: OpenACC: add missing data on device (due to transition to MNH 5.5.0)

parent e8d67109
No related branches found
No related tags found
1 merge request!4Jean Wurtz 30/04/2025 : Bugfixes mainly for TEB and for simple precision
...@@ -318,6 +318,7 @@ REAL, DIMENSION(:,:,:), INTENT(OUT) :: PRAINFR ! Rain fraction ...@@ -318,6 +318,7 @@ REAL, DIMENSION(:,:,:), INTENT(OUT) :: PRAINFR ! Rain fraction
! !
INTEGER :: IDX,JI,JJ,JK,JL INTEGER :: IDX,JI,JJ,JK,JL
INTEGER :: ISIZE INTEGER :: ISIZE
LOGICAL, DIMENSION(:), allocatable :: GLDCOMPUTE
REAL, DIMENSION(:), allocatable :: ZWETG ! 1. if graupel growths in wet mode, 0. otherwise REAL, DIMENSION(:), allocatable :: ZWETG ! 1. if graupel growths in wet mode, 0. otherwise
REAL, DIMENSION(:), allocatable :: ZRVT, ZRCT, ZRRT, ZRIT, ZRST, ZRGT, & REAL, DIMENSION(:), allocatable :: ZRVT, ZRCT, ZRRT, ZRIT, ZRST, ZRGT, &
& ZT, ZTHT, ZRHT, & & ZT, ZTHT, ZRHT, &
...@@ -385,6 +386,7 @@ END IF ...@@ -385,6 +386,7 @@ END IF
isize = size( pcompute ) isize = size( pcompute )
allocate( gldcompute(isize ) )
allocate( zwetg (isize ) ) allocate( zwetg (isize ) )
allocate( zrvt (isize ) ) allocate( zrvt (isize ) )
allocate( zrct (isize ) ) allocate( zrct (isize ) )
...@@ -414,7 +416,7 @@ allocate( zrst3d(kit, kjt, kkt ) ) ...@@ -414,7 +416,7 @@ allocate( zrst3d(kit, kjt, kkt ) )
allocate( zrgt3d(kit, kjt, kkt ) ) allocate( zrgt3d(kit, kjt, kkt ) )
allocate( zrht3d(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& ZLBDAR,ZLBDAS,ZLBDAG,ZLBDAH,ZLBDAR_RF,ZRGSI,ZRGSI_MR,ZRRT3D,ZRST3D,ZRGT3D,ZRHT3D)
!$acc kernels !$acc kernels
...@@ -458,7 +460,11 @@ ELSE ...@@ -458,7 +460,11 @@ ELSE
! !
!* 2. COMPUTES THE SLOW COLD PROCESS SOURCES !* 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, & ZTHT, PPRES, PRHODREF, PEXN, PLSFACT, ZT, &
ZRVT, & ZRVT, &
PCIT, PRVHENI_MR, PB_TH, PB_RV, PB_RI) PCIT, PRVHENI_MR, PB_TH, PB_RV, PB_RI)
......
...@@ -1898,7 +1898,8 @@ IF (CCLOUD /= 'NONE' .AND. CELEC == 'NONE') THEN ...@@ -1898,7 +1898,8 @@ IF (CCLOUD /= 'NONE' .AND. CELEC == 'NONE') THEN
!$acc & XSOLORG, XMI) & !$acc & XSOLORG, XMI) &
!$acc & copy (XSUPSAT, XNACT, XNPRO, XSSPRO, & !$acc & copy (XSUPSAT, XNACT, XNPRO, XSSPRO, &
!$acc & XRTHS, XRT, XRRS, XSVT, XRSVS, XCLDFR, XCIT, XINPRR3D, XEVAP3D, & !$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) !$acc & copyout(XSRCT, XRAINFR)
IF (CSURF=='EXTE') THEN IF (CSURF=='EXTE') THEN
ALLOCATE (ZSEA(SIZE(XRHODJ,1),SIZE(XRHODJ,2))) ALLOCATE (ZSEA(SIZE(XRHODJ,1),SIZE(XRHODJ,2)))
......
...@@ -397,6 +397,9 @@ REAL, DIMENSION(:), ALLOCATABLE :: ZRHODREF, & ! RHO Dry REFerence ...@@ -397,6 +397,9 @@ REAL, DIMENSION(:), ALLOCATABLE :: ZRHODREF, & ! RHO Dry REFerence
! = ZHLC_HRC/HCF+ ZHLC_LRC/LCF ! = ZHLC_HRC/HCF+ ZHLC_LRC/LCF
REAL, DIMENSION(:,:), ALLOCATABLE :: ZZW1 ! Work arrays REAL, DIMENSION(:,:), ALLOCATABLE :: ZZW1 ! Work arrays
REAL, DIMENSION(:,:,:), ALLOCATABLE :: ZRR, ZRS, ZRG ! 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 REAL, DIMENSION(:,:,:), ALLOCATABLE :: ZT ! Temperature
! !
! IN variables ! IN variables
...@@ -464,9 +467,13 @@ ALLOCATE( GMICRO(SIZE(PEXNREF,1),SIZE(PEXNREF,2),SIZE(PEXNREF,3)) ) ...@@ -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( ZRR (SIZE(PEXNREF,1),SIZE(PEXNREF,2),SIZE(PEXNREF,3)) )
ALLOCATE( ZRS (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)) ) 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)) ) 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 ...@@ -878,14 +885,22 @@ IF( IMICRO >= 0 ) THEN
!Diagnostic of precipitation fraction !Diagnostic of precipitation fraction
!$acc kernels !$acc kernels
PRAINFR(:,:,:) = 0. PRAINFR(:,:,:) = 0.
#ifdef MNH_OPENACC
ZRS_ZERO(:,:,:) = 0.
ZRG_ZERO(:,:,:) = 0.
#endif
!$acc loop independent !$acc loop independent
DO JL=1,IMICRO DO JL=1,IMICRO
PRAINFR(I1(JL),I2(JL),I3(JL)) = ZRF(JL) PRAINFR(I1(JL),I2(JL),I3(JL)) = ZRF(JL)
END DO END DO
!$acc end kernels !$acc end kernels
CALL ICE4_RAINFR_VERT( IIB, IIE, IIT, IJB, IJE, IJT, IKB, IKE, IKT, KKL, PRAINFR, PRRT(:,:,:), & 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( PRSS ) ) ], SHAPE = SHAPE( PRSS ) ), &
RESHAPE( SOURCE = [ ( 0., JL = 1, SIZE( PRGS ) ) ], SHAPE = SHAPE( PRGS ) ) ) RESHAPE( SOURCE = [ ( 0., JL = 1, SIZE( PRGS ) ) ], SHAPE = SHAPE( PRGS ) ) )
#else
ZRS_ZERO(:,:,:), ZRG_ZERO(:,:,:) )
#endif
!$acc kernels !$acc kernels
!$acc loop independent !$acc loop independent
DO JL=1,IMICRO DO JL=1,IMICRO
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment