Skip to content
Snippets Groups Projects
Commit 3f536359 authored by Wautelet Philippe's avatar Wautelet Philippe
Browse files

Philippe 26/10/2021: OpenACC: use GT1DFLAT and ZT1DFLAT

parent 24e96357
No related branches found
No related tags found
No related merge requests found
......@@ -106,13 +106,16 @@ USE MODD_RAIN_ICE_PARAM, ONLY: NDRYLBDAG,NDRYLBDAR,NDRYLBDAS,X0DEPG,X1DEPG,XCOLE
XDRYINTP1R,XDRYINTP1S,XDRYINTP2G,XDRYINTP2R,XDRYINTP2S,XEX0DEPG,XEX1DEPG,XEXICFRR, &
XEXRCFRI,XFCDRYG,XFIDRYG,XFRDRYG,XFSDRYG,XICFRR,XKER_RDRYG,XKER_SDRYG,XLBRDRYG1, &
XLBRDRYG2,XLBRDRYG3,XLBSDRYG1,XLBSDRYG2,XLBSDRYG3,XRCFRI
!
#ifdef MNH_OPENACC
USE MODE_MNH_ZWORK, ONLY: MNH_ALLOCATE_FLAT, MNH_ALLOCATE_IT1DP, MNH_RELEASE_FLAT, MNH_REL_GT1DFLAT, MNH_REL_IT1D
#endif
USE MODE_MPPDB
#ifdef MNH_BITREP
USE MODI_BITREP
#endif
!
USE MODE_MPPDB
!
IMPLICIT NONE
!
!* 0.1 Declarations of dummy arguments :
......@@ -174,14 +177,21 @@ INTEGER, PARAMETER :: IRCDRYG=1, IRIDRYG=2, IRIWETG=3, IRSDRYG=4, IRSWETG=5, IRR
INTEGER :: IGDRY
INTEGER :: ISIZE
INTEGER :: IDX, JJ, JL
INTEGER, DIMENSION(:), allocatable :: I1
INTEGER, DIMENSION(:), allocatable :: IVEC1, IVEC2
LOGICAL, DIMENSION(:), allocatable :: GDRY
REAL, DIMENSION(:), allocatable :: ZDRY, ZDRYG, ZMASK
REAL, DIMENSION(:), allocatable :: ZVEC1, ZVEC2, ZVEC3
REAL, DIMENSION(:), allocatable :: ZZW, &
ZRDRYG_INIT, & !Initial dry growth rate of the graupeln
ZRWETG_INIT !Initial wet growth rate of the graupeln
INTEGER, DIMENSION(:), POINTER, CONTIGUOUS :: I1
INTEGER, DIMENSION(:), POINTER, CONTIGUOUS :: IVEC1, IVEC2
LOGICAL, DIMENSION(:), POINTER, CONTIGUOUS :: GDRY
REAL, DIMENSION(:), POINTER, CONTIGUOUS :: ZDRY, ZDRYG, ZMASK
REAL, DIMENSION(:), POINTER, CONTIGUOUS :: ZVEC1, ZVEC2, ZVEC3
REAL, DIMENSION(:), POINTER, CONTIGUOUS :: ZZW, &
ZRDRYG_INIT, & !Initial dry growth rate of the graupeln
ZRWETG_INIT !Initial wet growth rate of the graupeln
#ifdef MNH_OPENACC
INTEGER :: II1, IIVEC1, IIVEC2
INTEGER :: IDXGDRY
INTEGER :: IZDRY, IZDRYG, IZMASK
INTEGER :: IZVEC1, IZVEC2, IZVEC3
INTEGER :: IZZW, IZRDRYG_INIT, IZRWETG_INIT
#endif
!
!-------------------------------------------------------------------------------
!
......@@ -232,21 +242,41 @@ END IF
ISIZE = Size( PRHODREF )
allocate( i1 ( size( prhodref ) ) )
allocate( ivec1 ( size( prhodref ) ) )
allocate( ivec2 ( size( prhodref ) ) )
allocate( gdry ( size( prhodref ) ) )
allocate( zdry ( size( prhodref ) ) )
allocate( zdryg ( size( prhodref ) ) )
allocate( zmask ( size( prhodref ) ) )
allocate( zvec1 ( size( prhodref ) ) )
allocate( zvec2 ( size( prhodref ) ) )
allocate( zvec3 ( size( prhodref ) ) )
allocate( zzw ( size( prhodref ) ) )
allocate( zrdryg_init( size( prhodref ) ) )
allocate( zrwetg_init( size( prhodref ) ) )
!$acc data create(I1,IVEC1,IVEC2,GDRY, ZDRY, ZDRYG, ZMASK, ZVEC1,ZVEC2,ZVEC3,ZZW,ZRDRYG_INIT,ZRWETG_INIT)
#ifndef MNH_OPENACC
allocate( i1 ( isize ) )
allocate( ivec1 ( isize ) )
allocate( ivec2 ( isize ) )
allocate( gdry ( isize ) )
allocate( zdry ( isize ) )
allocate( zdryg ( isize ) )
allocate( zmask ( isize ) )
allocate( zvec1 ( isize ) )
allocate( zvec2 ( isize ) )
allocate( zvec3 ( isize ) )
allocate( zzw ( isize ) )
allocate( zrdryg_init( isize ) )
allocate( zrwetg_init( isize ) )
#else
II1 = MNH_ALLOCATE_IT1DP( I1, ISIZE )
IIVEC1 = MNH_ALLOCATE_IT1DP( IVEC1, ISIZE )
IIVEC2 = MNH_ALLOCATE_IT1DP( IVEC2, ISIZE )
IDXGDRY = MNH_ALLOCATE_FLAT( gdry, isize )
IZDRY = MNH_ALLOCATE_FLAT( zdry, isize )
IZDRYG = MNH_ALLOCATE_FLAT( zdryg, isize )
IZMASK = MNH_ALLOCATE_FLAT( zmask, isize )
IZVEC1 = MNH_ALLOCATE_FLAT( zvec1, isize )
IZVEC2 = MNH_ALLOCATE_FLAT( zvec2, isize )
IZVEC3 = MNH_ALLOCATE_FLAT( zvec3, isize )
IZZW = MNH_ALLOCATE_FLAT( zzw, isize )
IZRDRYG_INIT = MNH_ALLOCATE_FLAT( zrdryg_init, isize )
IZRWETG_INIT = MNH_ALLOCATE_FLAT( zrwetg_init, isize )
#endif
!$acc data create ( IGDRY ) &
!$acc& present( I1, IVEC1, IVEC2, GDRY, ZDRY, ZDRYG, ZMASK, ZVEC1, ZVEC2, ZVEC3, ZZW, ZRDRYG_INIT, ZRWETG_INIT ) &
!$acc& copyin ( XRTMIN )
!
!* 6.1 rain contact freezing
......@@ -791,6 +821,24 @@ END IF
!$acc end data
#ifdef MNH_OPENACC
CALL MNH_RELEASE_FLAT( IZRWETG_INIT )
CALL MNH_RELEASE_FLAT( IZRDRYG_INIT )
CALL MNH_RELEASE_FLAT( IZZW )
CALL MNH_RELEASE_FLAT( IZVEC3 )
CALL MNH_RELEASE_FLAT( IZVEC2 )
CALL MNH_RELEASE_FLAT( IZVEC1 )
CALL MNH_RELEASE_FLAT( IZMASK )
CALL MNH_RELEASE_FLAT( IZDRYG )
CALL MNH_RELEASE_FLAT( IZDRY )
CALL MNH_REL_GT1DFLAT( IDXGDRY )
CALL MNH_REL_IT1D( IIVEC2 )
CALL MNH_REL_IT1D( IIVEC1 )
CALL MNH_REL_IT1D( II1 )
#endif
!$acc end data
END SUBROUTINE ICE4_FAST_RG
......@@ -92,12 +92,16 @@ USE MODD_RAIN_ICE_PARAM, ONLY: NACCLBDAR,NACCLBDAS,NGAMINC,X0DEPS,X1DEPS,XACCINT
XFSACCRG,XFSCVMG,XGAMINC_RIM1,XGAMINC_RIM2,XGAMINC_RIM4,XKER_RACCS, &
XKER_RACCSS,XKER_SACCRG,XLBRACCS1,XLBRACCS2,XLBRACCS3,XLBSACCR1,XLBSACCR2,XLBSACCR3, &
XRIMINTP1,XRIMINTP2,XSRIMCG,XSRIMCG2,XSRIMCG3
!
#ifdef MNH_OPENACC
USE MODE_MNH_ZWORK, ONLY: MNH_ALLOCATE_FLAT, MNH_ALLOCATE_IT1DP, MNH_RELEASE_FLAT, MNH_REL_GT1DFLAT, MNH_REL_IT1D
#endif
USE MODE_MPPDB
#ifdef MNH_BITREP
USE MODI_BITREP
#endif
!
USE MODE_MPPDB
!
IMPLICIT NONE
!
......@@ -143,13 +147,19 @@ INTEGER, PARAMETER :: IRCRIMS=1, IRCRIMSS=2, IRSRIMCG=3, IRRACCS=4, IRRACCSS=5,
INTEGER :: IGRIM, IGACC
INTEGER :: ISIZE
INTEGER :: IDX, JJ, JL
INTEGER, DIMENSION(:), allocatable :: I1
INTEGER, DIMENSION(:), allocatable :: IVEC1, IVEC2
LOGICAL, DIMENSION(:), allocatable :: GRIM, GACC
REAL, DIMENSION(:), allocatable :: ZRIM, ZACC, ZMASK
REAL, DIMENSION(:), allocatable :: ZVEC1, ZVEC2, ZVEC3
REAL, DIMENSION(:), allocatable :: ZZW, ZZW2, ZZW6, ZFREEZ_RATE
! real, DIMENSION(:), allocatable :: xprov
INTEGER, DIMENSION(:), POINTER, CONTIGUOUS :: I1
INTEGER, DIMENSION(:), POINTER, CONTIGUOUS :: IVEC1, IVEC2
LOGICAL, DIMENSION(:), POINTER, CONTIGUOUS :: GRIM, GACC
REAL, DIMENSION(:), POINTER, CONTIGUOUS :: ZRIM, ZACC, ZMASK
REAL, DIMENSION(:), POINTER, CONTIGUOUS :: ZVEC1, ZVEC2, ZVEC3
REAL, DIMENSION(:), POINTER, CONTIGUOUS :: ZZW, ZZW2, ZZW6, ZFREEZ_RATE
#ifdef MNH_OPENACC
INTEGER :: II1, IIVEC1, IIVEC2
INTEGER :: IDXGRIM, IDXGACC
INTEGER :: IZRIM, IZACC, IZMASK
INTEGER :: IZVEC1, IZVEC2, IZVEC3
INTEGER :: IZZW, IZZW2, IZZW6, IZFREEZ_RATE
#endif
!$acc data present( PCOMPUTE, PRHODREF, PLVFACT, PLSFACT, PPRES, PDV, PKA, PCJ, &
!$acc& PLBDAR, PLBDAS, PT, PRVT, PRCT, PRRT, PRST, PRIAGGS, PRCRIMSS, PRCRIMSG, PRSRIMCG, &
......@@ -190,23 +200,44 @@ END IF
ISIZE = Size( PRHODREF )
allocate( i1 ( size( prhodref ) ) )
allocate( ivec1 ( size( prhodref ) ) )
allocate( ivec2 ( size( prhodref ) ) )
allocate( grim ( size( prhodref ) ) )
allocate( gacc ( size( prhodref ) ) )
allocate( zrim ( size( prhodref ) ) )
allocate( zacc ( size( prhodref ) ) )
allocate( zmask ( size( prhodref ) ) )
allocate( zvec1 ( size( prhodref ) ) )
allocate( zvec2 ( size( prhodref ) ) )
allocate( zvec3 ( size( prhodref ) ) )
allocate( zzw ( size( prhodref ) ) )
allocate( zzw2 ( size( prhodref ) ) )
allocate( zzw6 ( size( prhodref ) ) )
allocate( zfreez_rate ( size( prhodref ) ) )
#ifndef MNH_OPENACC
allocate( i1 ( isize ) )
allocate( ivec1 ( isize ) )
allocate( ivec2 ( isize ) )
allocate( grim ( isize ) )
allocate( gacc ( isize ) )
allocate( zrim ( isize ) )
allocate( zacc ( isize ) )
allocate( zmask ( isize ) )
allocate( zvec1 ( isize ) )
allocate( zvec2 ( isize ) )
allocate( zvec3 ( isize ) )
allocate( zzw ( isize ) )
allocate( zzw2 ( isize ) )
allocate( zzw6 ( isize ) )
allocate( zfreez_rate ( isize ) )
#else
II1 = MNH_ALLOCATE_IT1DP( I1, ISIZE )
IIVEC1 = MNH_ALLOCATE_IT1DP( IVEC1, ISIZE )
IIVEC2 = MNH_ALLOCATE_IT1DP( IVEC2, ISIZE )
IDXGRIM = MNH_ALLOCATE_FLAT( grim, ISIZE )
IDXGACC = MNH_ALLOCATE_FLAT( gacc, ISIZE )
IZRIM = MNH_ALLOCATE_FLAT( zrim, ISIZE )
IZACC = MNH_ALLOCATE_FLAT( zacc, ISIZE )
IZMASK = MNH_ALLOCATE_FLAT( zmask, ISIZE )
IZVEC1 = MNH_ALLOCATE_FLAT( zvec1, ISIZE )
IZVEC2 = MNH_ALLOCATE_FLAT( zvec2, ISIZE )
IZVEC3 = MNH_ALLOCATE_FLAT( zvec3, ISIZE )
IZZW = MNH_ALLOCATE_FLAT( zzw, ISIZE )
IZZW2 = MNH_ALLOCATE_FLAT( zzw2, ISIZE )
IZZW6 = MNH_ALLOCATE_FLAT( zzw6, ISIZE )
IZFREEZ_RATE = MNH_ALLOCATE_FLAT( zfreez_rate, ISIZE )
#endif
!
!$acc data create( I1, IVEC1, IVEC2, GRIM, GACC, ZRIM, ZACC, ZMASK, ZVEC1, ZVEC2, ZVEC3, ZZW, ZZW2, ZZW6, ZFREEZ_RATE )
!$acc data present( I1, IVEC1, IVEC2, GRIM, GACC, ZRIM, ZACC, ZMASK, ZVEC1, ZVEC2, ZVEC3, ZZW, ZZW2, ZZW6, ZFREEZ_RATE ) &
!$acc& copyin ( XRTMIN )
!
!* 5.0 maximum freezing rate
......@@ -693,6 +724,26 @@ END IF
!$acc end data
#ifdef MNH_OPENACC
CALL MNH_RELEASE_FLAT( IZFREEZ_RATE )
CALL MNH_RELEASE_FLAT( IZZW6 )
CALL MNH_RELEASE_FLAT( IZZW2 )
CALL MNH_RELEASE_FLAT( IZZW )
CALL MNH_RELEASE_FLAT( IZVEC3 )
CALL MNH_RELEASE_FLAT( IZVEC2 )
CALL MNH_RELEASE_FLAT( IZVEC1 )
CALL MNH_RELEASE_FLAT( IZMASK )
CALL MNH_RELEASE_FLAT( IZACC )
CALL MNH_RELEASE_FLAT( IZRIM )
CALL MNH_REL_GT1DFLAT( IDXGACC )
CALL MNH_REL_GT1DFLAT( IDXGRIM )
CALL MNH_REL_IT1D( IIVEC2 )
CALL MNH_REL_IT1D( IIVEC1 )
CALL MNH_REL_IT1D( II1 )
#endif
!$acc end data
END SUBROUTINE ICE4_FAST_RS
......@@ -401,7 +401,16 @@ SUBROUTINE INTERNAL_SEDIM_SPLI(KIB,KIE,KIT,KJB,KJE,KJT,KKB,KKTB,KKTE,KKT,KKL,KRR
USE MODD_CST, ONLY: XCPD,XP00,XRD
USE MODD_RAIN_ICE_DESCR, ONLY: XCC,XCEXVT,XDC,XLBEXC,XRTMIN
USE MODD_RAIN_ICE_PARAM, ONLY: XEXCSEDI,XEXSEDG,XEXSEDH,XEXSEDR,XEXSEDS,XFSEDG,XFSEDH,XFSEDI,XFSEDR,XFSEDS
!
#ifdef MNH_OPENACC
USE MODE_MNH_ZWORK, ONLY: MNH_ALLOCATE_FLAT, MNH_ALLOCATE_IT1D, MNH_ALLOCATE_ZT1D, &
MNH_ALLOCATE_ZT2D, MNH_ALLOCATE_ZT3DP, &
MNH_RELEASE_FLAT, MNH_REL_IT1D, MNH_REL_ZT1D, MNH_REL_ZT3D
#endif
use mode_mppdb
use mode_msg
#ifdef MNH_BITREP
USE MODI_BITREP
#endif
......@@ -428,19 +437,23 @@ REAL, DIMENSION(:,:,:,:), INTENT(INOUT), OPTIONAL :: PFPR ! upper-air pre
!
!* 0.2 declaration of local variables
!
character(len=10) :: yspe ! String for error message
INTEGER :: IDX, ISEDIM
INTEGER :: JI, JJ, JK, JL
INTEGER, DIMENSION(:), allocatable :: I1,I2,I3 ! Used to replace the COUNT
LOGICAL :: GPRESENT_PFPR
REAL :: ZINVTSTEP
REAL :: ZZWLBDC, ZRAY, ZZT, ZZWLBDA, ZZCC
REAL :: ZFSED, ZEXSED
REAL, DIMENSION(:,:), allocatable :: ZMRCHANGE
REAL, DIMENSION(:,:), allocatable :: ZMAX_TSTEP ! Maximum CFL in column
REAL, DIMENSION(:), allocatable :: ZRSMIN
REAL, DIMENSION(:,:), allocatable :: ZREMAINT ! Remaining time until the timestep end
REAL, DIMENSION(:,:,:), allocatable :: ZWSED ! Sedimentation fluxes
character(len=10) :: yspe ! String for error message
INTEGER :: IDX, ISEDIM
INTEGER :: JI, JJ, JK, JL
#ifdef MNH_OPENACC
INTEGER :: II1, II2, II3
INTEGER :: IZMRCHANGE, IZMAX_TSTEP, IZRSMIN, IZREMAINT, IZWSED
#endif
INTEGER, DIMENSION(:), POINTER, CONTIGUOUS :: I1, I2, I3 ! Used to replace the COUNT
LOGICAL :: GPRESENT_PFPR
REAL :: ZINVTSTEP
REAL :: ZZWLBDC, ZRAY, ZZT, ZZWLBDA, ZZCC
REAL :: ZFSED, ZEXSED
REAL, DIMENSION(:,:), POINTER, CONTIGUOUS :: ZMRCHANGE
REAL, DIMENSION(:,:), POINTER, CONTIGUOUS :: ZMAX_TSTEP ! Maximum CFL in column
REAL, DIMENSION(:), POINTER, CONTIGUOUS :: ZRSMIN
REAL, DIMENSION(:,:), POINTER, CONTIGUOUS :: ZREMAINT ! Remaining time until the timestep end
REAL, DIMENSION(:,:,:), POINTER, CONTIGUOUS :: ZWSED ! Sedimentation fluxes
!$acc data present(PRHODREF,POORHODZ,PDZZ,PPABST,PTHT,PRXT,PRXS,PINPRX,PPRXS, &
!$acc& PRAY,PLBC,PFSEDC,PCONC3D,PFPR)
......@@ -463,6 +476,7 @@ IF (MPPDB_INITIALIZED) THEN
IF (PRESENT(PFPR)) CALL MPPDB_CHECK(PFPR,"INTERNAL_SEDIM_SPLI beg:PFPR")
END IF
#ifndef MNH_OPENACC
allocate( i1(kit * kjt * kkt ) )
allocate( i2(kit * kjt * kkt ) )
allocate( i3(kit * kjt * kkt ) )
......@@ -475,8 +489,22 @@ allocate( zrsmin(size( xrtmin ) ) )
allocate( zremaint(size( prhodref, 1 ), size( prhodref, 2 ) ) )
allocate( zwsed(size( prhodref, 1 ), size( prhodref, 2 ), 0 : size( prhodref, 3 ) + 1 ) )
#else
II1 = MNH_ALLOCATE_IT1D( i1, kit * kjt * kkt )
II2 = MNH_ALLOCATE_IT1D( i2, kit * kjt * kkt )
II3 = MNH_ALLOCATE_IT1D( i3, kit * kjt * kkt )
!$acc data create( i1, i2, i3, zmrchange, zmax_tstep, zrsmin, zremaint, zwsed )
IZMRCHANGE = MNH_ALLOCATE_ZT2D( zmrchange, kit, kjt )
IZMAX_TSTEP = MNH_ALLOCATE_ZT2D( zmax_tstep, kit, kjt )
IZRSMIN = MNH_ALLOCATE_FLAT( zrsmin, Size( xrtmin ) )
IZREMAINT = MNH_ALLOCATE_ZT2D( zremaint, Size( prhodref, 1 ), Size( prhodref, 2 ) )
IZWSED = MNH_ALLOCATE_FLAT( zwsed, 1, Size( prhodref, 1 ), 1, Size( prhodref, 2 ), 0, Size( prhodref, 3 ) + 1 )
#endif
!$acc data present( i1, i2, i3, zmrchange, zmax_tstep, zrsmin, zremaint, zwsed )
!
!-------------------------------------------------------------------------------
......@@ -685,6 +713,13 @@ END IF
!$acc end data
#ifdef MNH_OPENACC
CALL MNH_REL_IT1D( ii1, ii2, ii3 )
CALL MNH_RELEASE_FLAT( IZWSED )
CALL MNH_RELEASE_FLAT( IZRSMIN )
CALL MNH_REL_ZT3D( IZMRCHANGE, IZMAX_TSTEP, IZREMAINT )
#endif
!$acc end data
END SUBROUTINE INTERNAL_SEDIM_SPLI
......
......@@ -184,7 +184,11 @@ USE MODD_PARAMETERS, ONLY: XUNDEF
USE MODD_PARAM_ICE, ONLY: CSNOWRIMING
USE MODD_RAIN_ICE_DESCR, ONLY: XLBDAS_MAX,XLBEXG,XLBEXH,XLBEXR,XLBEXS,XLBG,XLBH,XLBR,XLBS,XRTMIN
USE MODD_RAIN_ICE_PARAM, ONLY: XSCFAC
!
#ifdef MNH_OPENACC
USE MODE_MNH_ZWORK, ONLY: MNH_ALLOCATE_FLAT, MNH_ALLOCATE_ZT3D, MNH_RELEASE_FLAT, MNH_REL_ZT3D
#endif
USE MODI_ICE4_COMPUTE_PDF
USE MODI_ICE4_FAST_RG
USE MODI_ICE4_FAST_RH
......@@ -319,16 +323,27 @@ 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, &
LOGICAL, DIMENSION(:), POINTER, CONTIGUOUS :: GLDCOMPUTE
REAL, DIMENSION(:), POINTER, CONTIGUOUS :: ZWETG ! 1. if graupel growths in wet mode, 0. otherwise
REAL, DIMENSION(:), POINTER, CONTIGUOUS :: ZRVT, ZRCT, ZRRT, ZRIT, ZRST, ZRGT, &
& ZT, ZTHT, ZRHT, &
& ZZW, &
& ZKA, ZDV, ZAI, ZCJ, &
& ZRF, &
& ZLBDAR, ZLBDAS, ZLBDAG, ZLBDAH, ZLBDAR_RF, &
& ZRGSI, ZRGSI_MR
REAL, DIMENSION(:,:,:), allocatable :: ZRRT3D, ZRST3D, ZRGT3D, ZRHT3D
REAL, DIMENSION(:,:,:), POINTER, CONTIGUOUS :: ZRRT3D, ZRST3D, ZRGT3D, ZRHT3D
#ifdef MNH_OPENACC
INTEGER :: IZWETG
INTEGER :: IZRVT, IZRCT, IZRRT, IZRIT, IZRST, IZRGT, &
IZT, IZTHT, IZRHT, &
IZZW, &
IZKA, IZDV, IZAI, IZCJ, &
IZRF, &
IZLBDAR, IZLBDAS, IZLBDAG, IZLBDAH, IZLBDAR_RF, &
IZRGSI, IZRGSI_MR
INTEGER :: IZRRT3D, IZRST3D, IZRGT3D, IZRHT3D
#endif
!
!$acc data present(PCOMPUTE,PEXN,PRHODREF,PLVFACT,PLSFACT,K1,K2,K3,PPRES,PCF,PCIT,PT,PTHT, &
!$acc& PRVT,PRCT,PRRT,PRIT,PRST,PRGT,PRHT,PSIGMA_RC,PRVHENI_MR,PRRHONG_MR,PRIMLTC_MR, &
......@@ -387,6 +402,7 @@ END IF
isize = size( pcompute )
#ifndef MNH_OPENACC
allocate( gldcompute(isize ) )
allocate( zwetg (isize ) )
allocate( zrvt (isize ) )
......@@ -416,9 +432,42 @@ allocate( zrrt3d(kit, kjt, kkt ) )
allocate( zrst3d(kit, kjt, kkt ) )
allocate( zrgt3d(kit, kjt, kkt ) )
allocate( zrht3d(kit, kjt, kkt ) )
#else
allocate( gldcompute(isize ) )
IZWETG = MNH_ALLOCATE_FLAT( zwetg, isize )
IZRVT = MNH_ALLOCATE_FLAT( zrvt, isize )
IZRCT = MNH_ALLOCATE_FLAT( zrct, isize )
IZRRT = MNH_ALLOCATE_FLAT( zrrt, isize )
IZRIT = MNH_ALLOCATE_FLAT( zrit, isize )
IZRST = MNH_ALLOCATE_FLAT( zrst, isize )
IZRGT = MNH_ALLOCATE_FLAT( zrgt, isize )
IZT = MNH_ALLOCATE_FLAT( zt, isize )
IZTHT = MNH_ALLOCATE_FLAT( ztht, isize )
IZRHT = MNH_ALLOCATE_FLAT( zrht, isize )
IZZW = MNH_ALLOCATE_FLAT( zzw, isize )
IZKA = MNH_ALLOCATE_FLAT( zka, isize )
IZDV = MNH_ALLOCATE_FLAT( zdv, isize )
IZAI = MNH_ALLOCATE_FLAT( zai, isize )
IZCJ = MNH_ALLOCATE_FLAT( zcj, isize )
IZRF = MNH_ALLOCATE_FLAT( zrf, isize )
IZLBDAR = MNH_ALLOCATE_FLAT( zlbdar, isize )
IZLBDAS = MNH_ALLOCATE_FLAT( zlbdas, isize )
IZLBDAG = MNH_ALLOCATE_FLAT( zlbdag, isize )
IZLBDAH = MNH_ALLOCATE_FLAT( zlbdah, isize )
IZLBDAR_RF = MNH_ALLOCATE_FLAT( zlbdar_rf, isize )
IZRGSI = MNH_ALLOCATE_FLAT( zrgsi, isize )
IZRGSI_MR = MNH_ALLOCATE_FLAT( zrgsi_mr, isize )
IZRRT3D = MNH_ALLOCATE_ZT3D( zrrt3d, kit, kjt, kkt )
IZRST3D = MNH_ALLOCATE_ZT3D( zrst3d, kit, kjt, kkt )
IZRGT3D = MNH_ALLOCATE_ZT3D( zrgt3d, kit, kjt, kkt )
IZRHT3D = MNH_ALLOCATE_ZT3D( zrht3d, kit, kjt, kkt )
#endif
!$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 data create( GLDCOMPUTE ) &
!$acc& present( ZWETG,ZRVT,ZRCT,ZRRT,ZRIT,ZRST,ZRGT,ZT,ZTHT,ZRHT,ZZW,ZKA,ZDV,ZAI,ZCJ, &
!$acc& ZRF,ZLBDAR,ZLBDAS,ZLBDAG,ZLBDAH,ZLBDAR_RF,ZRGSI,ZRGSI_MR, &
!$acc& ZRRT3D,ZRST3D,ZRGT3D,ZRHT3D )
!$acc kernels
PA_TH(:)=0.
......@@ -890,6 +939,33 @@ END IF
!$acc end data
#ifdef MNH_OPENACC
CALL MNH_REL_ZT3D( IZRRT3D, IZRST3D, IZRGT3D, IZRHT3D )
CALL MNH_RELEASE_FLAT( IZRGSI_MR )
CALL MNH_RELEASE_FLAT( IZRGSI )
CALL MNH_RELEASE_FLAT( IZLBDAR_RF )
CALL MNH_RELEASE_FLAT( IZLBDAH )
CALL MNH_RELEASE_FLAT( IZLBDAG )
CALL MNH_RELEASE_FLAT( IZLBDAS )
CALL MNH_RELEASE_FLAT( IZLBDAR )
CALL MNH_RELEASE_FLAT( IZRF )
CALL MNH_RELEASE_FLAT( IZCJ )
CALL MNH_RELEASE_FLAT( IZAI )
CALL MNH_RELEASE_FLAT( IZDV )
CALL MNH_RELEASE_FLAT( IZKA )
CALL MNH_RELEASE_FLAT( IZZW )
CALL MNH_RELEASE_FLAT( IZRHT )
CALL MNH_RELEASE_FLAT( IZTHT )
CALL MNH_RELEASE_FLAT( IZT )
CALL MNH_RELEASE_FLAT( IZRGT )
CALL MNH_RELEASE_FLAT( IZRST )
CALL MNH_RELEASE_FLAT( IZRIT )
CALL MNH_RELEASE_FLAT( IZRRT )
CALL MNH_RELEASE_FLAT( IZRCT )
CALL MNH_RELEASE_FLAT( IZRVT )
CALL MNH_RELEASE_FLAT( IZWETG )
#endif
!$acc end data
END SUBROUTINE ICE4_TENDENCIES
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment