From b5408916644d5e85973eabfe79f879220c14b5df Mon Sep 17 00:00:00 2001
From: Philippe WAUTELET <philippe.wautelet@aero.obs-mip.fr>
Date: Tue, 3 Oct 2023 15:55:53 +0200
Subject: [PATCH] Philippe 03/10/2023: OpenACC: several corrections and
 improvements

---
 src/MNH/advection_uvw.f90     | 1 -
 src/MNH/advection_uvw_cen.f90 | 8 +++++++-
 src/MNH/modeln.f90            | 3 ++-
 src/MNH/qlap.f90              | 2 ++
 src/MNH/tridz.f90             | 5 ++++-
 src/MNH/turb_hor_dyn_corr.f90 | 2 ++
 6 files changed, 17 insertions(+), 4 deletions(-)

diff --git a/src/MNH/advection_uvw.f90 b/src/MNH/advection_uvw.f90
index fb31df5b4..43e126220 100644
--- a/src/MNH/advection_uvw.f90
+++ b/src/MNH/advection_uvw.f90
@@ -328,7 +328,6 @@ CALL CONTRAV (HLBCX,HLBCY,ZRUT,ZRVT,ZRWT,PDXX,PDYY,PDZZ,PDZX,PDZY,ZRUCT,ZRVCT,ZR
 #else
 CALL CONTRAV_DEVICE (HLBCX,HLBCY,ZRUT,ZRVT,ZRWT,PDXX,PDYY,PDZZ,PDZX,PDZY,ZRUCT,ZRVCT,ZRWCT,4,&
                ODATA_ON_DEVICE=.TRUE.)
-!Not necessary: already done in contrav_device !$acc update self(ZRUCT,ZRVCT,ZRWCT)
 #endif
 !
 #ifndef MNH_OPENACC
diff --git a/src/MNH/advection_uvw_cen.f90 b/src/MNH/advection_uvw_cen.f90
index 7db6ad59e..36f4bba0a 100644
--- a/src/MNH/advection_uvw_cen.f90
+++ b/src/MNH/advection_uvw_cen.f90
@@ -128,6 +128,7 @@ USE MODI_CONTRAV
 #ifndef MNH_OPENACC
 USE MODI_SHUMAN
 #else
+USE MODI_GET_HALO,      ONLY: GET_HALO_D
 USE MODI_SHUMAN_DEVICE
 #endif
 !-------------------------------------------------------------------------------
@@ -354,9 +355,9 @@ ELSEIF (HUVW_ADV_SCHEME=='CEN4TH') THEN
   CALL CONTRAV_DEVICE (HLBCX,HLBCY,ZRUT,ZRVT,ZRWT,PDXX,PDYY,PDZZ,PDZX,PDZY,ZRUCT,ZRVCT,ZRWCT,4, &
                  ODATA_ON_DEVICE=.TRUE.)
 END IF
-!Not necessary: already done in contrav_device !$acc update self(ZRUCT,ZRVCT,ZRWCT)
 #endif
 !
+#ifndef MNH_OPENACC
 NULLIFY(TZFIELDS_ll)
 !!$IF(NHALO == 1) THEN
   CALL ADD3DFIELD_ll( TZFIELDS_ll, ZRWCT, 'ADVECTION_UVW_CEN::ZRWCT' )
@@ -366,6 +367,11 @@ NULLIFY(TZFIELDS_ll)
   CALL CLEANLIST_ll(TZFIELDS_ll)
   !$acc update device(ZRUCT, ZRVCT, ZRWCT)
 !!$END IF
+#else
+  CALL GET_HALO_D(ZRWCT,HNAME='ADVECTION_UVW_CEN::ZRWCT')
+  CALL GET_HALO_D(ZRUCT,HNAME='ADVECTION_UVW_CEN::ZRUCT')
+  CALL GET_HALO_D(ZRVCT,HNAME='ADVECTION_UVW_CEN::ZRVCT')
+#endif
 !
 !-------------------------------------------------------------------------------
 !
diff --git a/src/MNH/modeln.f90 b/src/MNH/modeln.f90
index 9c8499e3c..6f7863388 100644
--- a/src/MNH/modeln.f90
+++ b/src/MNH/modeln.f90
@@ -2058,7 +2058,7 @@ IF (CCLOUD /= 'NONE' .AND. CELEC == 'NONE') THEN
   IF ( NSV /= 0 ) XRSVS_CLD(:, :, :, : ) = XRSVS(:, :, :, : ) - XRSVS_CLD(:, :, :, : )
 !$acc end kernels
 !
-!$acc update host( XRTHS, XRRS, XRSVS, XRTHS_CLD, XRRS_CLD, XRSVS_CLD )
+!$acc update host( XRTHS_CLD, XRRS_CLD, XRSVS_CLD )
 !
   IF (CCLOUD /= 'REVE' ) THEN
     XACPRR = XACPRR + XINPRR * XTSTEP
@@ -2090,6 +2090,7 @@ IF (CCLOUD /= 'NONE' .AND. CELEC == 'NONE') THEN
 ! It is necessary that SV_C2R2 and SV_C1R3 are contiguous in the preceeding CALL
 !
 END IF
+!$acc update host( XRTHS, XRRS, XRSVS )
 !
 CALL SECOND_MNH2(ZTIME2)
 !
diff --git a/src/MNH/qlap.f90 b/src/MNH/qlap.f90
index 1dad26367..43abc5e9e 100644
--- a/src/MNH/qlap.f90
+++ b/src/MNH/qlap.f90
@@ -313,7 +313,9 @@ IF(.NOT. L2D) THEN
 !  CALL MPPDB_CHECK3D(ZV,'QLAP::ZV/N',PRECISION)
 !
 ELSE
+  !$acc kernels
   ZV(:,:,:) = 0.
+  !$acc end kernels
 ENDIF
 !
 IF ( CEQNSYS == 'DUR' .OR. CEQNSYS == 'MAE' ) THEN
diff --git a/src/MNH/tridz.f90 b/src/MNH/tridz.f90
index badb66af9..9c7baab1d 100644
--- a/src/MNH/tridz.f90
+++ b/src/MNH/tridz.f90
@@ -846,7 +846,7 @@ IF (.NOT. L2D) THEN
       & '         AS A PRODUCT OF POWERS OF 2, 3 AND 5.')")
  !callabortstop
       CALL PRINT_MSG(NVERB_FATAL,'GEN','TRIDZ','')
- END IF 
+  END IF
  !
  !
  !     other cases 
@@ -864,6 +864,9 @@ IF (.NOT. L2D) THEN
  !
  ENDIF
  !
+ELSE
+  PTRIGSY(:) = XUNDEF
+  KIFAXY(:)  = NUNDEF
 ENDIF
 
 END IF NOT_ZSOLV
diff --git a/src/MNH/turb_hor_dyn_corr.f90 b/src/MNH/turb_hor_dyn_corr.f90
index 7ab54da8e..a0d714a5c 100644
--- a/src/MNH/turb_hor_dyn_corr.f90
+++ b/src/MNH/turb_hor_dyn_corr.f90
@@ -692,6 +692,7 @@ CALL GET_HALO_D(ZFLX,HNAME='TURB_HOR_DYN_CORR::ZFLX')
 #endif
 !
 IF ( tpfile%lopened .AND. OTURB_FLX ) THEN
+  !$acc update self( ZFLX )
   ! stores <U U>  
   TZFIELD%CMNHNAME   = 'U_VAR'
   TZFIELD%CSTDNAME   = ''
@@ -903,6 +904,7 @@ CALL GET_HALO_D(ZFLX,HNAME='TURB_HOR_DYN_CORR::ZFLX')
 #endif
 !
 IF ( tpfile%lopened .AND. OTURB_FLX ) THEN
+  !$acc update self( ZFLX )
   ! stores <V V>  
   TZFIELD%CMNHNAME   = 'V_VAR'
   TZFIELD%CSTDNAME   = ''
-- 
GitLab