diff --git a/src/LIB/SURCOUCHE/src/mode_mnh_world.f90 b/src/LIB/SURCOUCHE/src/mode_mnh_world.f90
index 30124a276c7604ef0c476633eb18d13e38e4bc10..2296fb4b9095b80060e8678e7cadf6c28f68d4e4 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 349c00327c31fb5c287ecca69aeb139c6900d7de..27bd93e2cc2c8f80ad698f4ae9733821ecd29f9d 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()