Skip to content
Snippets Groups Projects
Commit d0c237b8 authored by ESCOBAR MUNOZ Juan's avatar ESCOBAR MUNOZ Juan
Browse files

Juan 15/06/2021: rain_ice_sedimentation_split.f90, acc opti , manage...

Juan 15/06/2021: rain_ice_sedimentation_split.f90, acc opti , manage logical+real with MNH_ALLOCATEZ/G..., & replace array logical -> do concurrent
parent c7f1d01c
No related branches found
No related tags found
No related merge requests found
......@@ -49,7 +49,7 @@ USE MODI_BITREP
use MODI_BUDGET
#ifdef MNH_OPENACC
USE MODE_MNH_ZWORK , ONLY : MNH_ALLOCATE_ZT3D , MNH_REL_ZT3D, MNH_ALLOCATE_ZT1DP , MNH_REL_ZT1D , &
USE MODE_MNH_ZWORK , ONLY : MNH_ALLOCATE_ZT3D , MNH_ALLOCATE_ZT2D, MNH_REL_ZT3D, MNH_ALLOCATE_ZT1DP , MNH_REL_ZT1D , &
MNH_ALLOCATE_GT3D , MNH_ALLOCATE_GT2D, MNH_REL_GT3D, &
MNH_ALLOCATE_IT1D , MNH_REL_IT1D
#endif
......@@ -138,10 +138,12 @@ REAL, DIMENSION(:,:), POINTER, CONTIGUOUS :: ZOMPSEA,ZTMP1_2D,ZTMP2_2D,ZTMP
REAL, DIMENSION(:,:,:), POINTER, CONTIGUOUS :: ZRAY, & ! Cloud Mean radius
ZLBC, & ! XLBC weighted by sea fraction
ZFSEDC
INTEGER :: IZCONC_TMP,IZCONC3D,IZOMPSEA,IZTMP1_2D,IZTMP2_2D,IZTMP3_2D,IZTMP4_2D,IZRAY,IZLBC,IZFSEDC
REAL, DIMENSION(:,:,:), POINTER, CONTIGUOUS :: ZPRCS,ZPRRS,ZPRSS,ZPRGS,ZPRHS ! Mixing ratios created during the time step
REAL, DIMENSION(:,:,:), POINTER, CONTIGUOUS :: ZW ! Work array
REAL, DIMENSION(:,:,:), POINTER, CONTIGUOUS :: ZWSED ! sedimentation fluxes
INTEGER :: IZCONC_TMP,IZCONC3D,IZOMPSEA,IZTMP1_2D,IZTMP2_2D,IZTMP3_2D,IZTMP4_2D,IZRAY,IZLBC,IZFSEDC
INTEGER :: IZPRCS,IZPRRS,IZPRSS,IZPRGS,IZPRHS,IZW,IZWSED
INTEGER :: IIU,IJU,IKU, IIJKU
!
......@@ -221,6 +223,7 @@ IIH1 = MNH_ALLOCATE_IT1D(IH1,IIJKU)
IIH2 = MNH_ALLOCATE_IT1D(IH2,IIJKU)
IIH3 = MNH_ALLOCATE_IT1D(IH3,IIJKU)
#endif
#ifndef MNH_OPENACC
ALLOCATE( GDEP(IIU,IJU) )
ALLOCATE( GSEDIMR(IIU,IJU,IKU) )
ALLOCATE( GSEDIMC(IIU,IJU,IKU) )
......@@ -228,7 +231,17 @@ ALLOCATE( GSEDIMI(IIU,IJU,IKU) )
ALLOCATE( GSEDIMS(IIU,IJU,IKU) )
ALLOCATE( GSEDIMG(IIU,IJU,IKU) )
ALLOCATE( GSEDIMH(IIU,IJU,IKU) )
#else
IGDEP = MNH_ALLOCATE_GT2D( GDEP,IIU,IJU )
IGSEDIMR = MNH_ALLOCATE_GT3D( GSEDIMR,IIU,IJU,IKU )
IGSEDIMC = MNH_ALLOCATE_GT3D( GSEDIMC,IIU,IJU,IKU )
IGSEDIMI = MNH_ALLOCATE_GT3D( GSEDIMI,IIU,IJU,IKU )
IGSEDIMS = MNH_ALLOCATE_GT3D( GSEDIMS,IIU,IJU,IKU )
IGSEDIMG = MNH_ALLOCATE_GT3D( GSEDIMG,IIU,IJU,IKU )
IGSEDIMH = MNH_ALLOCATE_GT3D( GSEDIMH,IIU,IJU,IKU )
#endif
ALLOCATE( ZRTMIN(SIZE(XRTMIN)) )
#ifndef MNH_OPENACC
ALLOCATE( ZCONC_TMP(IIU,IJU) )
ALLOCATE( ZOMPSEA (IIU,IJU) )
ALLOCATE( ZTMP1_2D (IIU,IJU) )
......@@ -246,13 +259,33 @@ ALLOCATE( ZPRGS (IIU,IJU,IKU) )
ALLOCATE( ZPRHS (IIU,IJU,IKU) )
ALLOCATE( ZW (IIU,IJU,IKU) )
ALLOCATE( ZWSED (IIU,IJU,0:IKU+1) )
#else
IZCONC_TMP = MNH_ALLOCATE_ZT2D( ZCONC_TMP,IIU,IJU )
IZOMPSEA = MNH_ALLOCATE_ZT2D( ZOMPSEA ,IIU,IJU )
IZTMP1_2D = MNH_ALLOCATE_ZT2D( ZTMP1_2D ,IIU,IJU )
IZTMP2_2D = MNH_ALLOCATE_ZT2D( ZTMP2_2D ,IIU,IJU )
IZTMP3_2D = MNH_ALLOCATE_ZT2D( ZTMP3_2D ,IIU,IJU )
IZTMP4_2D = MNH_ALLOCATE_ZT2D( ZTMP4_2D ,IIU,IJU )
IZCONC3D = MNH_ALLOCATE_ZT3D( ZCONC3D,IIU,IJU,IKU )
IZRAY = MNH_ALLOCATE_ZT3D( ZRAY ,IIU,IJU,IKU )
IZLBC = MNH_ALLOCATE_ZT3D( ZLBC ,IIU,IJU,IKU )
IZFSEDC = MNH_ALLOCATE_ZT3D( ZFSEDC ,IIU,IJU,IKU )
IZPRCS = MNH_ALLOCATE_ZT3D( ZPRCS ,IIU,IJU,IKU )
IZPRRS = MNH_ALLOCATE_ZT3D( ZPRRS ,IIU,IJU,IKU )
IZPRSS = MNH_ALLOCATE_ZT3D( ZPRSS ,IIU,IJU,IKU )
IZPRGS = MNH_ALLOCATE_ZT3D( ZPRGS ,IIU,IJU,IKU )
IZPRHS = MNH_ALLOCATE_ZT3D( ZPRHS ,IIU,IJU,IKU )
IZW = MNH_ALLOCATE_ZT3D( ZW ,IIU,IJU,IKU )
ALLOCATE( ZWSED (IIU,IJU,0:IKU+1) )
#endif
!$acc data present( IC1, IC2, IC3, IR1, IR2, IR3, IS1, IS2, IS3, II1, II2, II3, IG1, IG2, IG3, IH1, IH2, IH3) &
!$acc & create( GDEP, GSEDIMR, GSEDIMC, GSEDIMI, GSEDIMS, GSEDIMG, GSEDIMH, &
!$acc & ZRTMIN, ZCONC_TMP, &
!$acc data present( IC1, IC2, IC3, IR1, IR2, IR3, IS1, IS2, IS3, II1, II2, II3, IG1, IG2, IG3, IH1, IH2, IH3,&
!$acc & GDEP, GSEDIMR, GSEDIMC, GSEDIMI, GSEDIMS, GSEDIMG, GSEDIMH ) &
!$acc & create( ZRTMIN , ZWSED ) &
!$acc & present(ZCONC_TMP, &
!$acc & ZOMPSEA, ZTMP1_2D, ZTMP2_2D, ZTMP3_2D, ZTMP4_2D, ZCONC3D, &
!$acc & ZRAY, ZLBC, ZFSEDC, &
!$acc & ZPRCS, ZPRRS, ZPRSS, ZPRGS, ZPRHS, ZW, ZWSED )
!$acc & ZPRCS, ZPRRS, ZPRSS, ZPRGS, ZPRHS, ZW )
IF ( PRESENT( PFPR ) ) THEN
GPRESENT_PFPR = .TRUE.
......@@ -400,18 +433,21 @@ DO JN = 1 , KSPLITR
IF ( KRR == 7 ) PRHS(:,:,:) = PRHS(:,:,:) + ZPRHS(:,:,:) * ZTSPLITR
END IF
!
IF ( OSEDIC ) GSEDIMC(KIB:KIE,KJB:KJE,KKTB:KKTE) = &
PRCS(KIB:KIE,KJB:KJE,KKTB:KKTE) > ZRTMIN(2)
GSEDIMR(KIB:KIE,KJB:KJE,KKTB:KKTE) = &
PRRS(KIB:KIE,KJB:KJE,KKTB:KKTE) > ZRTMIN(3)
GSEDIMI(KIB:KIE,KJB:KJE,KKTB:KKTE) = &
PRIS(KIB:KIE,KJB:KJE,KKTB:KKTE) > ZRTMIN(4)
GSEDIMS(KIB:KIE,KJB:KJE,KKTB:KKTE) = &
PRSS(KIB:KIE,KJB:KJE,KKTB:KKTE) > ZRTMIN(5)
GSEDIMG(KIB:KIE,KJB:KJE,KKTB:KKTE) = &
PRGS(KIB:KIE,KJB:KJE,KKTB:KKTE) > ZRTMIN(6)
IF ( KRR == 7 ) GSEDIMH(KIB:KIE,KJB:KJE,KKTB:KKTE) = &
PRHS(KIB:KIE,KJB:KJE,KKTB:KKTE) > ZRTMIN(7)
!$acc loop independent collapse(3)
DO CONCURRENT ( JI=KIB:KIE,JJ=KJB:KJE,JK=KKTB:KKTE )
IF ( OSEDIC ) GSEDIMC(JI,JJ,JK) = &
PRCS(JI,JJ,JK) > ZRTMIN(2)
GSEDIMR(JI,JJ,JK) = &
PRRS(JI,JJ,JK) > ZRTMIN(3)
GSEDIMI(JI,JJ,JK) = &
PRIS(JI,JJ,JK) > ZRTMIN(4)
GSEDIMS(JI,JJ,JK) = &
PRSS(JI,JJ,JK) > ZRTMIN(5)
GSEDIMG(JI,JJ,JK) = &
PRGS(JI,JJ,JK) > ZRTMIN(6)
IF ( KRR == 7 ) GSEDIMH(JI,JJ,JK) = &
PRHS(JI,JJ,JK) > ZRTMIN(7)
END DO ! CONCURRENT
!$acc end kernels
!
#ifndef MNH_OPENACC
......@@ -733,11 +769,19 @@ DEALLOCATE(IC1, IC2, IC3, IR1, IR2, IR3, IS1, IS2, IS3, II1, II2, II3, IG1, IG2,
CALL MNH_REL_IT1D(IIC1, IIC2, IIC3, IIR1, IIR2, IIR3, IIS1, IIS2, IIS3,&
III1, III2, III3, IIG1, IIG2, IIG3, IIH1, IIH2, IIH3)
#endif
#ifndef MNH_OPENACC
DEALLOCATE(GDEP, GSEDIMR, GSEDIMC, GSEDIMI, GSEDIMS, GSEDIMG, GSEDIMH)
#else
CALL MNH_REL_GT3D(IGDEP, IGSEDIMR, IGSEDIMC, IGSEDIMI, IGSEDIMS, IGSEDIMG, IGSEDIMH)
#endif
DEALLOCATE(ZRTMIN)
#ifndef MNH_OPENACC
DEALLOCATE(ZCONC_TMP,ZOMPSEA, ZTMP1_2D, ZTMP2_2D, ZTMP3_2D, ZTMP4_2D, ZCONC3D)
DEALLOCATE(ZRAY, ZLBC, ZFSEDC,ZPRCS, ZPRRS, ZPRSS, ZPRGS, ZPRHS, ZW)
#else
CALL MNH_REL_ZT3D(IZRAY, IZLBC, IZFSEDC,IZPRCS, IZPRRS, IZPRSS, IZPRGS, IZPRHS, IZW)
CALL MNH_REL_ZT3D(IZCONC_TMP,IZOMPSEA, IZTMP1_2D, IZTMP2_2D, IZTMP3_2D, IZTMP4_2D, IZCONC3D)
#endif
DEALLOCATE(ZWSED)
!$acc end data
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment