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

Juan 08/03/2022:ZSOLVER/mass_leak.f90,nvhpc22.2 bug/optimisation , non...

Juan 08/03/2022:ZSOLVER/mass_leak.f90,nvhpc22.2 bug/optimisation , non reproductible -> add "!$acc seq" on K loop
parent fabb89bb
Branches
Tags
1 merge request!4Jean Wurtz 30/04/2025 : Bugfixes mainly for TEB and for simple precision
...@@ -107,6 +107,9 @@ USE MODE_MPPDB ...@@ -107,6 +107,9 @@ USE MODE_MPPDB
!JUAN !JUAN
USE MODE_REPRO_SUM USE MODE_REPRO_SUM
!JUAN !JUAN
#ifdef MNH_OPENACC
USE MODE_MNH_ZWORK, ONLY: MNH_MEM_GET, MNH_MEM_POSITION_PIN, MNH_MEM_RELEASE
#endif
! !
IMPLICIT NONE IMPLICIT NONE
! !
...@@ -128,7 +131,7 @@ REAL, DIMENSION(:,:,:), INTENT(INOUT) :: PRVS ! momentum tendencies ...@@ -128,7 +131,7 @@ REAL, DIMENSION(:,:,:), INTENT(INOUT) :: PRVS ! momentum tendencies
! !
!JUAN16 !JUAN16
REAL :: ZLEAK ! total leak of mass REAL :: ZLEAK ! total leak of mass
REAL, SAVE , ALLOCATABLE, DIMENSION (:,:) :: ZLEAK_W_2D , ZLEAK_E_2D , ZLEAK_S_2D , ZLEAK_N_2D REAL, POINTER, CONTIGUOUS, DIMENSION (:,:) :: ZLEAK_W_2D , ZLEAK_E_2D , ZLEAK_S_2D , ZLEAK_N_2D
!JUAN16 !JUAN16
REAL :: ZUSTOP ! wind correction! REAL :: ZUSTOP ! wind correction!
...@@ -146,9 +149,6 @@ INTEGER :: IINFO_ll ! return code of parallel routine ...@@ -146,9 +149,6 @@ INTEGER :: IINFO_ll ! return code of parallel routine
! !
LOGICAL :: GWEST,GEAST,GSOUTH,GNORTH LOGICAL :: GWEST,GEAST,GSOUTH,GNORTH
REAL :: ZLEAK_W,ZLEAK_E,ZLEAK_S,ZLEAK_N REAL :: ZLEAK_W,ZLEAK_E,ZLEAK_S,ZLEAK_N
!
LOGICAL , SAVE :: GFIRST_CALL_MASS_LEAK = .TRUE.
!$acc data present( PDXX, PDYY, PRHODJ, PRUS, PRVS ) !$acc data present( PDXX, PDYY, PRHODJ, PRUS, PRVS )
...@@ -187,22 +187,33 @@ ZLEAK_W=0. ...@@ -187,22 +187,33 @@ ZLEAK_W=0.
ZLEAK_S=0. ZLEAK_S=0.
ZLEAK_N=0. ZLEAK_N=0.
! !
IF (GFIRST_CALL_MASS_LEAK) THEN #ifndef MNH_OPENACC
GFIRST_CALL_MASS_LEAK = .FALSE. IF( HLBCX(1) /= 'CYCL' ) THEN
IF( HLBCX(1) /= 'CYCL' ) THEN ALLOCATE( ZLEAK_W_2D(IIB:IIB,IJB:IJE))
ALLOCATE( ZLEAK_W_2D(IIB:IIB,IJB:IJE)) ALLOCATE( ZLEAK_E_2D(IIE+1:IIE+1,IJB:IJE))
ALLOCATE( ZLEAK_E_2D(IIE+1:IIE+1,IJB:IJE)) END IF
END IF IF( HLBCY(1) /= 'CYCL' ) THEN
IF( HLBCY(1) /= 'CYCL' ) THEN ALLOCATE( ZLEAK_S_2D(IIB:IIE,IJB:IJB))
ALLOCATE( ZLEAK_S_2D(IIB:IIE,IJB:IJB)) ALLOCATE( ZLEAK_N_2D(IIB:IIE,IJE+1:IJE+1))
ALLOCATE( ZLEAK_N_2D(IIB:IIE,IJE+1:IJE+1)) END IF
END IF #else
!Pin positions in the pools of MNH memory
CALL MNH_MEM_POSITION_PIN()
IF( HLBCX(1) /= 'CYCL' ) THEN
CALL MNH_MEM_GET(ZLEAK_W_2D , IIB ,IIB , IJB,IJE )
CALL MNH_MEM_GET(ZLEAK_E_2D , IIE+1,IIE+1 , IJB,IJE )
END IF
IF( HLBCY(1) /= 'CYCL' ) THEN
CALL MNH_MEM_GET(ZLEAK_S_2D , IIB,IIE , IJB ,IJB )
CALL MNH_MEM_GET(ZLEAK_N_2D , IIB,IIE , IJE+1,IJE+1 )
END IF END IF
#endif
! !
IF( HLBCX(1) /= 'CYCL' ) THEN IF( HLBCX(1) /= 'CYCL' ) THEN
!$acc kernels async !$acc kernels present(ZLEAK_W_2D) async
ZLEAK_W_2D = 0.0 ZLEAK_W_2D(:,:) = 0.0
IF( GWEST ) THEN IF( GWEST ) THEN
!$acc loop seq
DO JK=IKB,IKE DO JK=IKB,IKE
DO JJ=IJB,IJE DO JJ=IJB,IJE
ZLEAK_W_2D(IIB,JJ) = ZLEAK_W_2D(IIB,JJ) - 1./PDXX(IIB,JJ,JK) *PRUS(IIB,JJ,JK) ZLEAK_W_2D(IIB,JJ) = ZLEAK_W_2D(IIB,JJ) - 1./PDXX(IIB,JJ,JK) *PRUS(IIB,JJ,JK)
...@@ -211,9 +222,10 @@ IF( HLBCX(1) /= 'CYCL' ) THEN ...@@ -211,9 +222,10 @@ IF( HLBCX(1) /= 'CYCL' ) THEN
END IF END IF
!$acc end kernels !$acc end kernels
! !
!$acc kernels async !$acc kernels present(ZLEAK_E_2D) async
ZLEAK_E_2D = 0.0 ZLEAK_E_2D(:,:) = 0.0
IF( GEAST ) THEN IF( GEAST ) THEN
!$acc loop seq
DO JK=IKB,IKE DO JK=IKB,IKE
DO JJ=IJB,IJE DO JJ=IJB,IJE
ZLEAK_E_2D(IIE+1,JJ) = ZLEAK_E_2D(IIE+1,JJ) + 1./PDXX(IIE+1,JJ,JK)*PRUS(IIE+1,JJ,JK) ZLEAK_E_2D(IIE+1,JJ) = ZLEAK_E_2D(IIE+1,JJ) + 1./PDXX(IIE+1,JJ,JK)*PRUS(IIE+1,JJ,JK)
...@@ -224,28 +236,31 @@ IF( HLBCX(1) /= 'CYCL' ) THEN ...@@ -224,28 +236,31 @@ IF( HLBCX(1) /= 'CYCL' ) THEN
! !
!$acc wait !$acc wait
! !
!$acc update host(ZLEAK_W_2D,ZLEAK_E_2D)
ZLEAK_W = SUM_DD_R2_ll(ZLEAK_W_2D) ZLEAK_W = SUM_DD_R2_ll(ZLEAK_W_2D)
ZLEAK_E = SUM_DD_R2_ll(ZLEAK_E_2D) ZLEAK_E = SUM_DD_R2_ll(ZLEAK_E_2D)
END IF END IF
! !
IF( HLBCY(1) /= 'CYCL' ) THEN IF( HLBCY(1) /= 'CYCL' ) THEN
! !
!$acc kernels async !$acc kernels present(ZLEAK_S_2D) async
ZLEAK_S_2D = 0.0 ZLEAK_S_2D(:,:) = 0.0
IF( GSOUTH ) THEN IF( GSOUTH ) THEN
DO JI=IIB,IIE !$acc loop seq
DO JK=IKB,IKE DO JK=IKB,IKE
DO JI=IIB,IIE
ZLEAK_S_2D(JI,IJB) = ZLEAK_S_2D(JI,IJB) - 1./PDYY(JI,IJB,JK) *PRVS(JI,IJB,JK) ZLEAK_S_2D(JI,IJB) = ZLEAK_S_2D(JI,IJB) - 1./PDYY(JI,IJB,JK) *PRVS(JI,IJB,JK)
END DO END DO
END DO END DO
END IF END IF
!$acc end kernels !$acc end kernels
! !
!$acc kernels async !$acc kernels present(ZLEAK_N_2D) async
ZLEAK_N_2D = 0.0 ZLEAK_N_2D(:,:) = 0.0
IF ( GNORTH ) THEN IF ( GNORTH ) THEN
DO JI=IIB,IIE !$acc loop seq
DO JK=IKB,IKE DO JK=IKB,IKE
DO JI=IIB,IIE
ZLEAK_N_2D(JI,IJE+1) = ZLEAK_N_2D(JI,IJE+1) + 1./PDYY(JI,IJE+1,JK)*PRVS(JI,IJE+1,JK) ZLEAK_N_2D(JI,IJE+1) = ZLEAK_N_2D(JI,IJE+1) + 1./PDYY(JI,IJE+1,JK)*PRVS(JI,IJE+1,JK)
END DO END DO
END DO END DO
...@@ -254,6 +269,7 @@ IF( HLBCY(1) /= 'CYCL' ) THEN ...@@ -254,6 +269,7 @@ IF( HLBCY(1) /= 'CYCL' ) THEN
! !
!$acc wait !$acc wait
! !
!$acc update host(ZLEAK_S_2D,ZLEAK_N_2D)
ZLEAK_S = SUM_DD_R2_ll(ZLEAK_S_2D) ZLEAK_S = SUM_DD_R2_ll(ZLEAK_S_2D)
ZLEAK_N = SUM_DD_R2_ll(ZLEAK_N_2D) ZLEAK_N = SUM_DD_R2_ll(ZLEAK_N_2D)
! !
...@@ -304,6 +320,18 @@ IF (MPPDB_INITIALIZED) THEN ...@@ -304,6 +320,18 @@ IF (MPPDB_INITIALIZED) THEN
CALL MPPDB_CHECK(PRVS,"MASS_LEAK end:PRVS") CALL MPPDB_CHECK(PRVS,"MASS_LEAK end:PRVS")
END IF END IF
#ifndef MNH_OPENACC
IF( HLBCX(1) /= 'CYCL' ) THEN
DEALLOCATE(ZLEAK_W_2D,ZLEAK_E_2D)
END IF
IF( HLBCY(1) /= 'CYCL' ) THEN
DEALLOCATE( ZLEAK_S_2D,ZLEAK_N_2D)
END IF
#else
!Release all memory allocated with MNH_MEM_GET calls since last call to MNH_MEM_POSITION_PIN
CALL MNH_MEM_RELEASE()
#endif
!$acc end data !$acc end data
!------------------------------------------------------------------------------- !-------------------------------------------------------------------------------
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment