diff --git a/SURCOUCHE/mode_device.f90 b/SURCOUCHE/mode_device.f90
new file mode 100644
index 0000000000000000000000000000000000000000..3c5cce64ba22857460397341c5fcbda679efc60d
--- /dev/null
+++ b/SURCOUCHE/mode_device.f90
@@ -0,0 +1,54 @@
+MODULE MODE_DEVICE
+
+CONTAINS
+
+  SUBROUTINE GET_FROM_DEVICE(PTAB,ZTAB,O_PTAB_ON_DEVICE)
+
+    USE&
+         OPENACC 
+
+    IMPLICIT NONE
+
+    REAL, DIMENSION(:,:,:)  :: PTAB
+    REAL, DIMENSION(:,:,:)  :: ZTAB
+    LOGICAL                 :: O_PTAB_ON_DEVICE
+
+    O_PTAB_ON_DEVICE =  acc_is_present(PTAB)
+    if ( O_PTAB_ON_DEVICE ) then
+    !$acc data create(ZTAB)
+    !$acc kernels 
+    ZTAB=PTAB
+    !$acc end kernels
+    !$acc update host(ZTAB)
+    !$acc end data
+    else
+    ZTAB=PTAB
+    endif
+
+  END SUBROUTINE GET_FROM_DEVICE
+
+  SUBROUTINE PRINT_ON_DEVICE(PTAB,MES)
+
+    USE&
+         OPENACC 
+
+    IMPLICIT NONE
+
+    REAL, DIMENSION(:,:,:)  :: PTAB
+    CHARACTER(len=*)        :: MES
+    LOGICAL                 :: G_PTAB_ON_DEVICE,G_EXEC_ON_DEVICE
+
+    G_PTAB_ON_DEVICE =  acc_is_present(PTAB)
+    G_EXEC_ON_DEVICE =  ( acc_get_device_type() <> acc_device_host )
+    if (G_EXEC_ON_DEVICE) then
+       if (G_PTAB_ON_DEVICE) then
+          print*,"PRESENT::",MES
+       else
+          print*,"ABSENT ::",MES
+       end if
+    end if
+
+
+  END SUBROUTINE PRINT_ON_DEVICE
+
+END MODULE MODE_DEVICE