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

Philippe 21/11/2019: OpenACC: misc modifications

parent 6f7ff5a9
Branches
Tags
1 merge request!4Jean Wurtz 30/04/2025 : Bugfixes mainly for TEB and for simple precision
...@@ -220,9 +220,9 @@ INTEGER :: IGRID ! localisation on the model grid ...@@ -220,9 +220,9 @@ INTEGER :: IGRID ! localisation on the model grid
#ifndef MNH_OPENACC #ifndef MNH_OPENACC
REAL, DIMENSION(SIZE(PUT,1),SIZE(PUT,2),SIZE(PUT,3)) :: ZMEANX, ZMEANY ! fluxes REAL, DIMENSION(SIZE(PUT,1),SIZE(PUT,2),SIZE(PUT,3)) :: ZMEANX, ZMEANY ! fluxes
#else #else
REAL, DIMENSION(IIU,IJU,IKU) :: ZMEANX, ZMEANY ! fluxes REAL, DIMENSION(:,:,:) :: ZMEANX, ZMEANY ! fluxes
! !
REAL, DIMENSION(IIU,IJU,IKU) :: ZTEMP1,ZTEMP2,ZTEMP3,ZTEMP4 REAL, DIMENSION(:,:,:) :: ZTEMP1,ZTEMP2,ZTEMP3,ZTEMP4
INTEGER :: II INTEGER :: II
#endif #endif
......
...@@ -2536,25 +2536,29 @@ INTEGER:: IIE,IJE ! End useful area in x,y,z directions ...@@ -2536,25 +2536,29 @@ INTEGER:: IIE,IJE ! End useful area in x,y,z directions
INTEGER :: IJS,IJN INTEGER :: IJS,IJN
! !
LOGICAL :: GWEST, GEAST LOGICAL :: GWEST, GEAST
#endif
! advection fluxes ! advection fluxes
REAL, DIMENSION(SIZE(PCR,1),SIZE(PCR,2),SIZE(PCR,3)) :: ZFPOS, ZFNEG REAL, DIMENSION(SIZE(PCR,1),SIZE(PCR,2),SIZE(PCR,3)) :: ZFPOS, ZFNEG
! !
! variable at cell edges ! variable at cell edges
REAL, DIMENSION(SIZE(PCR,1),SIZE(PCR,2),SIZE(PCR,3)) :: ZPHAT REAL, DIMENSION(SIZE(PCR,1),SIZE(PCR,2),SIZE(PCR,3)) :: ZPHAT
! !
!BEG JUAN PPM_LL REAL, DIMENSION(SIZE(PCR,2),SIZE(PCR,3)) :: ZPSRC_HALO2_WEST
TYPE(HALO2LIST_ll), POINTER :: TZ_PSRC_HALO2_ll ! halo2 for PSRC #else
!END JUAN PPM_LL ! advection fluxes
REAL, DIMENSION(:,:,:) :: ZFPOS, ZFNEG
! !
#ifdef _OPENACC ! variable at cell edges
!JUAN ACC REAL, DIMENSION(:,:,:) :: ZPHAT
REAL, DIMENSION(SIZE(PCR,1),SIZE(PCR,2),SIZE(PCR,3)) :: ZRHO_MXM, ZCR_MXM , ZCR_DXF
INTEGER :: I,J,K
! !
!JUAN ACC REAL, DIMENSION(:,:,:) :: ZRHO_MXM, ZCR_MXM , ZCR_DXF
INTEGER :: I,J,K
!
REAL, DIMENSION(:,:) :: ZPSRC_HALO2_WEST
#endif #endif
REAL, DIMENSION(SIZE(PCR,2),SIZE(PCR,3)) :: ZPSRC_HALO2_WEST
TYPE(HALO2LIST_ll), POINTER :: TZ_PSRC_HALO2_ll ! halo2 for PSRC
!------------------------------------------------------------------------------- !-------------------------------------------------------------------------------
!$acc data present( PSRC, PCR, PRHO, PR , & !$acc data present( PSRC, PCR, PRHO, PR , &
...@@ -2968,7 +2972,6 @@ INTEGER :: IJS,IJN ...@@ -2968,7 +2972,6 @@ INTEGER :: IJS,IJN
INTEGER :: IIW,IIA INTEGER :: IIW,IIA
! !
LOGICAL :: GNORTH, GSOUTH LOGICAL :: GNORTH, GSOUTH
#endif
! !
! advection fluxes ! advection fluxes
REAL, DIMENSION(SIZE(PCR,1),SIZE(PCR,2),SIZE(PCR,3)) :: ZFPOS, ZFNEG REAL, DIMENSION(SIZE(PCR,1),SIZE(PCR,2),SIZE(PCR,3)) :: ZFPOS, ZFNEG
...@@ -2976,18 +2979,27 @@ REAL, DIMENSION(SIZE(PCR,1),SIZE(PCR,2),SIZE(PCR,3)) :: ZFPOS, ZFNEG ...@@ -2976,18 +2979,27 @@ REAL, DIMENSION(SIZE(PCR,1),SIZE(PCR,2),SIZE(PCR,3)) :: ZFPOS, ZFNEG
! variable at cell edges ! variable at cell edges
REAL, DIMENSION(SIZE(PCR,1),SIZE(PCR,2),SIZE(PCR,3)) :: ZPHAT REAL, DIMENSION(SIZE(PCR,1),SIZE(PCR,2),SIZE(PCR,3)) :: ZPHAT
! !
!BEG JUAN PPM_LL
TYPE(HALO2LIST_ll), POINTER :: TZ_PSRC_HALO2_ll ! halo2 for PSRC TYPE(HALO2LIST_ll), POINTER :: TZ_PSRC_HALO2_ll ! halo2 for PSRC
TYPE(HALO2LIST_ll), POINTER :: TZ_PHAT_HALO2_ll ! halo2 for ZPHAT TYPE(HALO2LIST_ll), POINTER :: TZ_PHAT_HALO2_ll ! halo2 for ZPHAT
!END JUAN PPM_LL
#ifdef _OPENACC
! !
REAL, DIMENSION(SIZE(PCR,1),SIZE(PCR,2),SIZE(PCR,3)) :: ZRHO_MYM , ZCR_MYM , ZCR_DYF REAL, DIMENSION(SIZE(PCR,1),SIZE(PCR,3)) :: ZPSRC_HALO2_SOUTH
#else
!
! advection fluxes
REAL, DIMENSION(:,:,:) :: ZFPOS, ZFNEG
!
! variable at cell edges
REAL, DIMENSION(:,:,:) :: ZPHAT
!
TYPE(HALO2LIST_ll), POINTER :: TZ_PSRC_HALO2_ll ! halo2 for PSRC
TYPE(HALO2LIST_ll), POINTER :: TZ_PHAT_HALO2_ll ! halo2 for ZPHAT
!
REAL, DIMENSION(:,:,:) :: ZRHO_MYM , ZCR_MYM , ZCR_DYF
! !
INTEGER :: I,J,K INTEGER :: I,J,K
! !
REAL, DIMENSION(:,:) :: ZPSRC_HALO2_SOUTH
#endif #endif
REAL, DIMENSION(SIZE(PCR,1),SIZE(PCR,3)) :: ZPSRC_HALO2_SOUTH
! !
!------------------------------------------------------------------------------- !-------------------------------------------------------------------------------
......
...@@ -471,10 +471,6 @@ END DO ...@@ -471,10 +471,6 @@ END DO
! !
IF(HTURBDIM=='1DIM') THEN ! 1D case IF(HTURBDIM=='1DIM') THEN ! 1D case
! !
#ifdef MNH_OPENACC
call Print_msg( NVERB_WARNING, 'GEN', 'PRANDTL', 'OpenACC: 1DIM not yet tested' )
#endif
!
!$acc kernels async !$acc kernels async
#ifndef MNH_BITREP #ifndef MNH_BITREP
PRED2TH3(:,:,:) = PREDTH1(:,:,:)**2 PRED2TH3(:,:,:) = PREDTH1(:,:,:)**2
......
...@@ -441,7 +441,7 @@ REAL, DIMENSION(:,:), OPTIONAL, INTENT(IN) :: PSEA ! Land Sea mask ...@@ -441,7 +441,7 @@ REAL, DIMENSION(:,:), OPTIONAL, INTENT(IN) :: PSEA ! Land Sea mask
REAL, DIMENSION(:,:), OPTIONAL, INTENT(IN) :: PTOWN ! Town fraction REAL, DIMENSION(:,:), OPTIONAL, INTENT(IN) :: PTOWN ! Town fraction
! !
! Variables from modules ! Variables from modules
!$acc declare copyin(CSEDIM) ! !$acc declare copyin(CSEDIM)
! !
!* 0.2 Declarations of local variables : !* 0.2 Declarations of local variables :
! !
...@@ -762,14 +762,32 @@ END IF ...@@ -762,14 +762,32 @@ END IF
SELECT CASE ( HCLOUD ) SELECT CASE ( HCLOUD )
CASE('KESS') CASE('KESS')
#ifdef MNH_OPENACC #ifdef MNH_OPENACC
CALL PRINT_MSG(NVERB_FATAL,'GEN','RESOLVED_CLOUD','KESS not yet implemented') CALL PRINT_MSG(NVERB_WARNING,'GEN','RESOLVED_CLOUD','KESS being implemented')
#endif #endif
#ifndef MNH_OPENACC
WHERE (PRS(:,:,:,2) < 0.) WHERE (PRS(:,:,:,2) < 0.)
PRS(:,:,:,1) = PRS(:,:,:,1) + PRS(:,:,:,2) PRS(:,:,:,1) = PRS(:,:,:,1) + PRS(:,:,:,2)
PTHS(:,:,:) = PTHS(:,:,:) - PRS(:,:,:,2) * ZLV(:,:,:) / & PTHS(:,:,:) = PTHS(:,:,:) - PRS(:,:,:,2) * ZLV(:,:,:) / &
ZCPH(:,:,:) / PEXNREF(:,:,:) ZCPH(:,:,:) / PEXNREF(:,:,:)
PRS(:,:,:,2) = 0.0 PRS(:,:,:,2) = 0.0
END WHERE END WHERE
#else
!$acc kernels
!$acc loop independent collapse(3)
DO JK=1,SIZE(PRS,3)
DO JJ=1,SIZE(PRS,2)
DO JI=1,SIZE(PRS,1)
IF (PRS(JI,JJ,JK,2) < 0.) THEN
PRS(JI, JJ, JK , 1) = PRS(JI, JJ, JK , 1) + PRS(JI, JJ, JK , 2)
PTHS(JI, JJ, JK ) = PTHS(JI, JJ, JK ) - PRS(JI, JJ, JK , 2) * ZLV(JI, JJ, JK ) &
/ ZCPH(JI, JJ, JK ) / PEXNREF(JI, JJ, JK )
PRS(JI, JJ, JK , 2) = 0.0
END IF
END DO
END DO
END DO
!$acc end kernels
#endif
! !
! !
! CASE('C2R2','KHKO') ! CASE('C2R2','KHKO')
...@@ -1089,7 +1107,7 @@ CALL PRINT_MSG(NVERB_FATAL,'GEN','RESOLVED_CLOUD','REVE not yet implemented') ...@@ -1089,7 +1107,7 @@ CALL PRINT_MSG(NVERB_FATAL,'GEN','RESOLVED_CLOUD','REVE not yet implemented')
! !
CASE ('KESS') CASE ('KESS')
#ifdef MNH_OPENACC #ifdef MNH_OPENACC
CALL PRINT_MSG(NVERB_FATAL,'GEN','RESOLVED_CLOUD','KESS not yet implemented') CALL PRINT_MSG(NVERB_WARNING,'GEN','RESOLVED_CLOUD','KESS being implemented')
#endif #endif
! !
!* 5. KESSLER MICROPHYSICAL SCHEME !* 5. KESSLER MICROPHYSICAL SCHEME
......
...@@ -762,10 +762,9 @@ SELECT CASE (HTURBLEN) ...@@ -762,10 +762,9 @@ SELECT CASE (HTURBLEN)
! ------------------ ! ------------------
CASE ('BL89') CASE ('BL89')
#ifdef MNH_OPENACC !$acc kernels
call Print_msg( NVERB_FATAL, 'GEN', 'TURB', 'OpenACC: HTURBLEN=BL89 not yet implemented' )
#endif
ZSHEAR(:, :, : ) = 0. ZSHEAR(:, :, : ) = 0.
!$acc end kernels
CALL BL89(KKA,KKU,KKL,PZZ,PDZZ,PTHVREF,ZTHLM,KRR,ZRM,PTKET,ZSHEAR,PLEM) CALL BL89(KKA,KKU,KKL,PZZ,PDZZ,PTHVREF,ZTHLM,KRR,ZRM,PTKET,ZSHEAR,PLEM)
! !
!* 3.2 RM17 mixing length !* 3.2 RM17 mixing length
...@@ -1248,7 +1247,6 @@ IF ((HCLOUD == 'KHKO') .OR. (HCLOUD == 'C2R2')) THEN ...@@ -1248,7 +1247,6 @@ IF ((HCLOUD == 'KHKO') .OR. (HCLOUD == 'C2R2')) THEN
ZEXNE(:,:,:)= (PPABST(:,:,:)/XP00)**(XRD/XCPD) ZEXNE(:,:,:)= (PPABST(:,:,:)/XP00)**(XRD/XCPD)
ZTT(:,:,:)= PTHLT(:,:,:)*ZEXNE(:,:,:) ZTT(:,:,:)= PTHLT(:,:,:)*ZEXNE(:,:,:)
ZLV(:,:,:)=XLVTT +(XCPV-XCL) *(ZTT(:,:,:)-XTT) ZLV(:,:,:)=XLVTT +(XCPV-XCL) *(ZTT(:,:,:)-XTT)
ZLS(:,:,:)=XLSTT +(XCPV-XCI) *(ZTT(:,:,:)-XTT)
ZCPH(:,:,:)=XCPD +XCPV*PRT(:,:,:,1) ZCPH(:,:,:)=XCPD +XCPV*PRT(:,:,:,1)
! CALL GET_HALO(PRRS(:,:,:,2)) ! CALL GET_HALO(PRRS(:,:,:,2))
! CALL GET_HALO(PRSVS(:,:,:,2)) ! CALL GET_HALO(PRSVS(:,:,:,2))
...@@ -1461,6 +1459,7 @@ REAL, DIMENSION(:,:), INTENT(INOUT) :: PUSLOPE,PVSLOPE ...@@ -1461,6 +1459,7 @@ REAL, DIMENSION(:,:), INTENT(INOUT) :: PUSLOPE,PVSLOPE
INTEGER :: IIB,IIE,IJB,IJE ! index values for the physical subdomain INTEGER :: IIB,IIE,IJB,IJE ! index values for the physical subdomain
TYPE(LIST_ll), POINTER :: TZFIELDS_ll ! list of fields to exchange TYPE(LIST_ll), POINTER :: TZFIELDS_ll ! list of fields to exchange
INTEGER :: IINFO_ll ! return code of parallel routine INTEGER :: IINFO_ll ! return code of parallel routine
logical :: gwest, geast, gnorth, gsouth
! !
!* 1 PROLOGUE !* 1 PROLOGUE
! !
...@@ -1489,20 +1488,25 @@ CALL GET_INDICE_ll (IIB,IJB,IIE,IJE) ...@@ -1489,20 +1488,25 @@ CALL GET_INDICE_ll (IIB,IJB,IIE,IJE)
! !
! 3 Boundary conditions for non cyclic case ! 3 Boundary conditions for non cyclic case
! !
gwest = HLBCX(1) /= "CYCL" .AND. LWEST_ll()
geast = HLBCX(2) /= "CYCL" .AND. LEAST_ll()
gsouth = HLBCY(1) /= "CYCL" .AND. LSOUTH_ll()
gnorth = HLBCY(2) /= "CYCL" .AND. LNORTH_ll()
!$acc kernels !$acc kernels
IF ( HLBCX(1) /= "CYCL" .AND. LWEST_ll()) THEN IF ( gwest ) THEN
PUSLOPE(IIB-1,:)=PUSLOPE(IIB,:) PUSLOPE(IIB-1,:)=PUSLOPE(IIB,:)
PVSLOPE(IIB-1,:)=PVSLOPE(IIB,:) PVSLOPE(IIB-1,:)=PVSLOPE(IIB,:)
END IF END IF
IF ( HLBCX(2) /= "CYCL" .AND. LEAST_ll()) THEN IF ( geast ) THEN
PUSLOPE(IIE+1,:)=PUSLOPE(IIE,:) PUSLOPE(IIE+1,:)=PUSLOPE(IIE,:)
PVSLOPE(IIE+1,:)=PVSLOPE(IIE,:) PVSLOPE(IIE+1,:)=PVSLOPE(IIE,:)
END IF END IF
IF ( HLBCY(1) /= "CYCL" .AND. LSOUTH_ll()) THEN IF ( gsouth ) THEN
PUSLOPE(:,IJB-1)=PUSLOPE(:,IJB) PUSLOPE(:,IJB-1)=PUSLOPE(:,IJB)
PVSLOPE(:,IJB-1)=PVSLOPE(:,IJB) PVSLOPE(:,IJB-1)=PVSLOPE(:,IJB)
END IF END IF
IF( HLBCY(2) /= "CYCL" .AND. LNORTH_ll()) THEN IF ( gnorth ) THEN
PUSLOPE(:,IJE+1)=PUSLOPE(:,IJE) PUSLOPE(:,IJE+1)=PUSLOPE(:,IJE)
PVSLOPE(:,IJE+1)=PVSLOPE(:,IJE) PVSLOPE(:,IJE+1)=PVSLOPE(:,IJE)
END IF END IF
...@@ -1742,7 +1746,9 @@ ELSE ...@@ -1742,7 +1746,9 @@ ELSE
!* 3.1 BL89 mixing length !* 3.1 BL89 mixing length
! ------------------ ! ------------------
CASE ('BL89','RM17') CASE ('BL89','RM17')
!$acc kernels
ZSHEAR(:, :, : ) = 0. ZSHEAR(:, :, : ) = 0.
!$acc end kernels
CALL BL89(KKA,KKU,KKL,PZZ,PDZZ,PTHVREF,ZTHLM,KRR,ZRM,PTKET,ZSHEAR,ZLM_CLOUD) CALL BL89(KKA,KKU,KKL,PZZ,PDZZ,PTHVREF,ZTHLM,KRR,ZRM,PTKET,ZSHEAR,ZLM_CLOUD)
! !
!* 3.2 Delta mixing length !* 3.2 Delta mixing length
...@@ -2073,7 +2079,7 @@ REAL, DIMENSION(:,:,:), ALLOCATABLE :: ZTMP1_DEVICE,ZTMP2_DEVICE ...@@ -2073,7 +2079,7 @@ REAL, DIMENSION(:,:,:), ALLOCATABLE :: ZTMP1_DEVICE,ZTMP2_DEVICE
#endif #endif
!---------------------------------------------------------------------------- !----------------------------------------------------------------------------
!$acc data present( PDXX, PDYY, PDZZ, PZZ, PDIRCOSZW, PTHLT, PTHVREF, PTKET, PSRCT, PRT, PLOCPEXNM, PLM ) !$acc data present( PDXX, PDYY, PDZZ, PZZ, PDIRCOSZW, PTHLT, PTHVREF, PTKET, PSRCT, PRT, PLOCPEXNM, PATHETA, PAMOIST, PLM )
if ( mppdb_initialized ) then if ( mppdb_initialized ) then
!Check all in arrays !Check all in arrays
......
...@@ -259,15 +259,12 @@ IMPLICIT NONE ...@@ -259,15 +259,12 @@ IMPLICIT NONE
! !
!* 0.1 Declaration of arguments !* 0.1 Declaration of arguments
! ------------------------ ! ------------------------
REAL, DIMENSION(:,:,:), INTENT(IN) :: PVAR1 ! variable values on the initial REAL, DIMENSION(:,:,:), INTENT(IN) :: PVAR1 ! variable values on the initial grid
! ! grid
INTEGER,DIMENSION(:,:,:), INTENT(IN) :: KKLIN ! lower interpolating level of INTEGER,DIMENSION(:,:,:), INTENT(IN) :: KKLIN ! lower interpolating level of
! ! grid 1 for each level of grid 2 ! ! grid 1 for each level of grid 2
REAL, DIMENSION(:,:,:), INTENT(IN) :: PCOEFLIN ! coefficient for level KKLIN REAL, DIMENSION(:,:,:), INTENT(IN) :: PCOEFLIN ! coefficient for level KKLIN
! !
REAL, DIMENSION(SIZE(KKLIN,1),SIZE(KKLIN,2),SIZE(KKLIN,3)), INTENT(OUT) & REAL, DIMENSION(:,:,:), INTENT(OUT) :: PVAR2 ! variable values on target grid
:: PVAR2 ! variable values on target
! ! grid
! !
!* 0.2 Declaration of local variables !* 0.2 Declaration of local variables
! ------------------------------ ! ------------------------------
...@@ -276,6 +273,7 @@ INTEGER :: JI,JJ,JK2 ...@@ -276,6 +273,7 @@ INTEGER :: JI,JJ,JK2
!------------------------------------------------------------------------------- !-------------------------------------------------------------------------------
! !
call Print_msg( NVERB_WARNING, 'GEN', 'VER_INTERP_LIN3D_DEVICE', 'OpenACC: not yet tested' ) call Print_msg( NVERB_WARNING, 'GEN', 'VER_INTERP_LIN3D_DEVICE', 'OpenACC: not yet tested' )
!$acc data present(PVAR1,KKLIN,PCOEFLIN,PVAR2) !$acc data present(PVAR1,KKLIN,PCOEFLIN,PVAR2)
!$acc kernels !$acc kernels
DO JK2=1,SIZE(KKLIN,3) DO JK2=1,SIZE(KKLIN,3)
...@@ -434,8 +432,7 @@ INTEGER,DIMENSION(:,:), INTENT(IN) :: KKLIN ! lower interpolating level of ...@@ -434,8 +432,7 @@ INTEGER,DIMENSION(:,:), INTENT(IN) :: KKLIN ! lower interpolating level of
! ! grid 1 for each level of grid 2 ! ! grid 1 for each level of grid 2
REAL, DIMENSION(:,:), INTENT(IN) :: PCOEFLIN ! coefficient for level KKLIN REAL, DIMENSION(:,:), INTENT(IN) :: PCOEFLIN ! coefficient for level KKLIN
! !
REAL, DIMENSION(SIZE(KKLIN,1),SIZE(KKLIN,2)), INTENT(OUT) :: PVAR2 ! variable values on REAL, DIMENSION(:,:), INTENT(OUT) :: PVAR2 ! variable values on target grid
! ! target grid
! !
!* 0.2 Declaration of local variables !* 0.2 Declaration of local variables
! ------------------------------ ! ------------------------------
...@@ -616,7 +613,7 @@ INTEGER,DIMENSION(:), INTENT(IN) :: KKLIN ! lower interpolating level of ...@@ -616,7 +613,7 @@ INTEGER,DIMENSION(:), INTENT(IN) :: KKLIN ! lower interpolating level of
! ! grid 1 for each level of grid 2 ! ! grid 1 for each level of grid 2
REAL, DIMENSION(:), INTENT(IN) :: PCOEFLIN ! coefficient for level KKLIN REAL, DIMENSION(:), INTENT(IN) :: PCOEFLIN ! coefficient for level KKLIN
REAL, DIMENSION(SIZE(KKLIN)), INTENT(OUT) :: PVAR2 ! variable values on target REAL, DIMENSION(:), INTENT(OUT) :: PVAR2 ! variable values on target
! ! grid ! ! grid
! !
!* 0.2 Declaration of local variables !* 0.2 Declaration of local variables
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment