From 63f1a1cdbb265cff0b4c74327278b729d9f332fd Mon Sep 17 00:00:00 2001
From: JUan ESCOBAR <juan.escobar@aero.obs-mip.fr>
Date: Thu, 19 Nov 2020 17:57:55 +0100
Subject: [PATCH] Juan 19/11/2020: mesonh.f90,mode_mnh_world.f90 : move init of
 good GPU to INIT_NMNH_COMM_WORLD

---
 src/LIB/SURCOUCHE/src/mode_mnh_world.f90 | 21 +++++++++++++++++++++
 src/MNH/mesonh.f90                       |  3 ---
 2 files changed, 21 insertions(+), 3 deletions(-)

diff --git a/src/LIB/SURCOUCHE/src/mode_mnh_world.f90 b/src/LIB/SURCOUCHE/src/mode_mnh_world.f90
index 30124a276..2296fb4b9 100644
--- a/src/LIB/SURCOUCHE/src/mode_mnh_world.f90
+++ b/src/LIB/SURCOUCHE/src/mode_mnh_world.f90
@@ -56,6 +56,11 @@ CONTAINS
     !JUANZ
     INTEGER :: ILU
 
+#ifdef MNH_OPENACC
+  CHARACTER(LEN=28)  :: CID_GPU
+  INTEGER            :: ID_GPU,N_GPU
+#endif
+  
 #if 0
     !Try to initialise device memory by creating a big array
     REAL,dimension(:,:,:),allocatable :: big
@@ -76,6 +81,22 @@ CONTAINS
     KINFO_ll = 0
     CALL MPI_INITIALIZED(GISINIT, KINFO_ll)
     IF (.NOT. GISINIT) THEN
+       
+#ifdef MNH_OPENACC
+       !
+       ! I nvidia gpu set the good one <-> ACC_DEVICE_NUM
+       ! to avoid duplication of memory be allocating each mpi task all GPU
+       !
+       N_GPU = acc_get_num_devices(acc_device_nvidia)
+       IF ( N_GPU > 0 ) THEN
+          CALL GET_ENVIRONMENT_VARIABLE("ACC_DEVICE_NUM",CID_GPU)
+          read(CID_GPU,'(I5)') ID_GPU    
+          print*,"CID_GPU=",CID_GPU," ID_GPU=",ID_GPU
+          CALL acc_set_device_num(ID_GPU,acc_device_nvidia)
+       END IF
+!!$  ! acc init
+#endif
+  
 #ifdef MNH_GA
        CALL MPI_INIT_thread(REQUIRED,PROVIDED,KINFO_ll)
 #else
diff --git a/src/MNH/mesonh.f90 b/src/MNH/mesonh.f90
index 349c00327..27bd93e2c 100644
--- a/src/MNH/mesonh.f90
+++ b/src/MNH/mesonh.f90
@@ -132,9 +132,6 @@ INTEGER       :: IINFO_ll                     ! return code of // routines
 !
 !*       1.    INITIALIZATION
 !              --------------
-#ifdef MNH_OPENACC
-  !$acc init
-#endif
 ! Switch to model 1 variables
 #ifndef CPLOASIS
 CALL MPPDB_INIT()
-- 
GitLab