From 42c9d61070abcaf8a56f06c9808d3a01f5ad3581 Mon Sep 17 00:00:00 2001
From: Philippe Wautelet <philippe.wautelet@aero.obs-mip.fr>
Date: Fri, 25 Mar 2016 14:04:41 +0000
Subject: [PATCH] Philippe 25/03/2016: add kind=IDCDF_KIND for NetCDF integers
 (necessary to use NetCDF with 32-bit integers even when MNH_INT=8) +
 adaptation of the make rules

---
 src/LIB/SURCOUCHE/src/modd_netcdf.f90 |  14 +-
 src/LIB/SURCOUCHE/src/mode_fm.f90     |   6 +-
 src/LIB/SURCOUCHE/src/mode_io.f90     |  14 +-
 src/LIB/SURCOUCHE/src/mode_netcdf.f90 | 435 +++++++++++++++-----------
 src/Makefile                          |   8 +-
 src/Makefile.MESONH.mk                |   4 +
 src/Rules.AIX64.mk                    |   8 +-
 src/Rules.BG.mk                       |   8 +-
 src/Rules.BGQ.mk                      |   6 +
 src/Rules.LXcray.mk                   |   6 +
 src/Rules.LXg95.mk                    |   8 +-
 src/Rules.LXgfortran.mk               |   7 +
 src/Rules.LXifort.mk                  |   8 +-
 src/Rules.LXpgi.mk                    |   8 +-
 src/Rules.SX8.mk                      |   8 +-
 15 files changed, 342 insertions(+), 206 deletions(-)

diff --git a/src/LIB/SURCOUCHE/src/modd_netcdf.f90 b/src/LIB/SURCOUCHE/src/modd_netcdf.f90
index 64658b353..b38bb0c6a 100644
--- a/src/LIB/SURCOUCHE/src/modd_netcdf.f90
+++ b/src/LIB/SURCOUCHE/src/modd_netcdf.f90
@@ -1,8 +1,12 @@
 MODULE MODD_NETCDF
 IMPLICIT NONE 
 
+INCLUDE 'netcdf.inc'
+
+INTEGER,PARAMETER :: IDCDF_KIND = SELECTED_INT_KIND(8)
+
 TYPE IOCDF
-   INTEGER :: NCID
+   INTEGER(KIND=IDCDF_KIND) :: NCID
    TYPE(DIMCDF), POINTER :: DIMX
    TYPE(DIMCDF), POINTER :: DIMY
    TYPE(DIMCDF), POINTER :: DIMZ
@@ -11,10 +15,10 @@ TYPE IOCDF
 END TYPE IOCDF
 
 TYPE DIMCDF
-   CHARACTER(LEN=8)      :: NAME
-   INTEGER               :: LEN
-   INTEGER               :: ID
-   TYPE(DIMCDF), POINTER :: NEXT
+   CHARACTER(LEN=8)         :: NAME
+   INTEGER(KIND=IDCDF_KIND) :: LEN
+   INTEGER(KIND=IDCDF_KIND) :: ID
+   TYPE(DIMCDF), POINTER    :: NEXT
 END TYPE DIMCDF
 
 END MODULE MODD_NETCDF
diff --git a/src/LIB/SURCOUCHE/src/mode_fm.f90 b/src/LIB/SURCOUCHE/src/mode_fm.f90
index 787588e10..6e9898686 100644
--- a/src/LIB/SURCOUCHE/src/mode_fm.f90
+++ b/src/LIB/SURCOUCHE/src/mode_fm.f90
@@ -135,6 +135,7 @@ USE MODE_IO_ll, ONLY : OPEN_ll,GCONFIO
 USE MODD_CONFZ,ONLY  : NB_PROCIO_R,NB_PROCIO_W
 !JUANZ
 #if defined(MNH_IOCDF4)
+USE MODD_NETCDF
 USE MODE_NETCDF
 #endif
 CHARACTER(LEN=*),INTENT(IN) ::HFILEM  ! name of the file.
@@ -154,7 +155,7 @@ LOGICAL,         INTENT(IN),  OPTIONAL :: OPARALLELIO
 !
 !   Local variable
 !
-INTEGER                 :: INCERR,IROWF,IRESP,INUMBR,IFMFNL
+INTEGER                 :: IROWF,IRESP,INUMBR,IFMFNL
 CHARACTER(LEN=JPFINL)   :: YFNDES,YFNLFI
 LOGICAL                 :: GSTATS
 LOGICAL, SAVE           :: GSFIRST=.TRUE.
@@ -169,6 +170,9 @@ LOGICAL               :: GNAMFI8,GFATER8,GSTATS8
 INTEGER               :: INB_PROCIO
 !JUAN
 LOGICAL               :: GPARALLELIO
+#if defined(MNH_IOCDF4)
+INTEGER(KIND=IDCDF_KIND) :: INCERR
+#endif
 
 IF ( PRESENT(OPARALLELIO) ) THEN
   GPARALLELIO = OPARALLELIO
diff --git a/src/LIB/SURCOUCHE/src/mode_io.f90 b/src/LIB/SURCOUCHE/src/mode_io.f90
index 66614cb49..6708457e0 100644
--- a/src/LIB/SURCOUCHE/src/mode_io.f90
+++ b/src/LIB/SURCOUCHE/src/mode_io.f90
@@ -222,6 +222,7 @@ CONTAINS
        KMELEV,&
        OPARALLELIO)
 #if defined(MNH_IOCDF4)
+  USE MODD_NETCDF
   USE MODE_NETCDF
 #endif
   USE MODD_IO_ll
@@ -273,6 +274,7 @@ CONTAINS
     CHARACTER(len=20)    :: YACTION
     CHARACTER(len=20)    :: YMODE
     INTEGER              :: IOS,IERR
+    INTEGER(KIND=IDCDF_KIND) :: IOSCDF
     INTEGER              :: ICOMM
     INTEGER              :: ICMPRES
     TYPE(FD_ll), POINTER :: TZFD, TZFDTEMP
@@ -659,9 +661,9 @@ CONTAINS
                    IF (YACTION == 'READ' .AND. .NOT. LLFIREAD) THEN
                       ! Open NetCDF File for reading
                       TZFD_IOZ%CDF => NEWIOCDF()
-                      IOS = NF_OPEN(TRIM(FILE)//cfile//".nc4", NF_NOWRITE, TZFD_IOZ%CDF%NCID)
-                      IF (IOS /= NF_NOERR) THEN
-                         PRINT *, 'NF_OPEN error : ', NF_STRERROR(IOS)
+                      IOSCDF = NF_OPEN(TRIM(FILE)//cfile//".nc4", NF_NOWRITE, TZFD_IOZ%CDF%NCID)
+                      IF (IOSCDF /= NF_NOERR) THEN
+                         PRINT *, 'NF_OPEN error : ', NF_STRERROR(IOSCDF)
                          STOP
                       ELSE
                          IOS = 0
@@ -673,10 +675,10 @@ CONTAINS
                       ! YACTION == 'WRITE'
                       ! Create NetCDF File for writing
                       TZFD_IOZ%CDF => NEWIOCDF()
-                      IOS = NF_CREATE(TRIM(FILE)//cfile//".nc4", &
+                      IOSCDF = NF_CREATE(TRIM(FILE)//cfile//".nc4", &
                            &IOR(NF_CLOBBER,NF_NETCDF4), TZFD_IOZ%CDF%NCID)
-                      IF (IOS /= NF_NOERR) THEN
-                         PRINT *, 'NF_CREATE error : ', NF_STRERROR(IOS)
+                      IF (IOSCDF /= NF_NOERR) THEN
+                         PRINT *, 'NF_CREATE error : ', NF_STRERROR(IOSCDF)
                          STOP
                       ELSE
                          IOS = 0
diff --git a/src/LIB/SURCOUCHE/src/mode_netcdf.f90 b/src/LIB/SURCOUCHE/src/mode_netcdf.f90
index d76c32cf6..475825da3 100644
--- a/src/LIB/SURCOUCHE/src/mode_netcdf.f90
+++ b/src/LIB/SURCOUCHE/src/mode_netcdf.f90
@@ -20,8 +20,6 @@ INTERFACE NCREAD
         & NCREADC0
 END INTERFACE NCREAD
 
-INCLUDE 'netcdf.inc'
-
 ! Public from netcdf.inc :
 PUBLIC NF_OPEN,NF_CREATE,NF_NOWRITE,NF_CLOBBER,NF_NETCDF4,NF_NOERR,NF_STRERROR
 ! Public from this module :
@@ -54,7 +52,7 @@ END FUNCTION NEWIOCDF
 SUBROUTINE CLEANIOCDF(PIOCDF)
 TYPE(IOCDF),  POINTER :: PIOCDF
 
-INTEGER :: IRESP
+INTEGER(KIND=IDCDF_KIND) :: IRESP
 
 ! Close Netcdf File
 IRESP = NF_CLOSE(PIOCDF%NCID)
@@ -87,7 +85,8 @@ END SUBROUTINE CLEANLIST
 END SUBROUTINE CLEANIOCDF
 
 SUBROUTINE HANDLE_ERR(status,line,text,kresp)
-INTEGER, INTENT(IN) :: status,line
+INTEGER(KIND=IDCDF_KIND),INTENT(IN) :: status
+INTEGER, INTENT(IN) :: line
 CHARACTER(LEN=*), INTENT(IN) :: text
 INTEGER, OPTIONAL, INTENT(OUT) :: kresp
 
@@ -126,27 +125,28 @@ END FUNCTION str_replace
 
 SUBROUTINE WRITATTR(KNCID, KVARID, TPFMH)
 USE MODD_FM, ONLY : FMHEADER
-INTEGER,        INTENT(IN) :: KNCID
-INTEGER,        INTENT(IN) :: KVARID
+INTEGER(KIND=IDCDF_KIND),INTENT(IN) :: KNCID
+INTEGER(KIND=IDCDF_KIND),INTENT(IN) :: KVARID
 TYPE(FMHEADER), INTENT(IN) :: TPFMH
 
-INTEGER :: STATUS
+INTEGER(KIND=IDCDF_KIND) :: STATUS
+INTEGER(KIND=IDCDF_KIND),PARAMETER :: IONE = 1
 
 ! GRID attribute definition
 STATUS = NF_PUT_ATT_INT(KNCID, KVARID, 'GRID', &
-     &NF_INT, 1, TPFMH%GRID)
+     &NF_INT, IONE, INT(TPFMH%GRID,KIND=IDCDF_KIND))
 IF (STATUS /= NF_NOERR) CALL HANDLE_ERR(status,__LINE__,'WRITATTR [NF_PUT_ATT_INT]')
 
 ! COMMENT attribute definition
 STATUS = NF_PUT_ATT_TEXT(KNCID, KVARID,'COMMENT', &
-     &LEN_TRIM(TPFMH%COMMENT), TPFMH%COMMENT)
+     &INT(LEN_TRIM(TPFMH%COMMENT),KIND=IDCDF_KIND), TPFMH%COMMENT)
 IF (STATUS /= NF_NOERR) CALL HANDLE_ERR(status,__LINE__,'WRITATTR [NF_PUT_ATT_TEXT]')
 
 END SUBROUTINE WRITATTR
 
 FUNCTION GETDIMCDF(PIOCDF, KLEN, HDIMNAME)
 TYPE(IOCDF), POINTER       :: PIOCDF
-INTEGER,     INTENT(IN)    :: KLEN
+INTEGER(KIND=IDCDF_KIND),INTENT(IN) :: KLEN
 CHARACTER(LEN=*), OPTIONAL :: HDIMNAME ! When provided don't search but
                                        ! simply create with name HDIMNAME
 TYPE(DIMCDF), POINTER   :: GETDIMCDF
@@ -155,7 +155,7 @@ TYPE(DIMCDF), POINTER :: TMP
 INTEGER               :: COUNT
 CHARACTER(LEN=7)      :: YSUFFIX
 CHARACTER(LEN=8)      :: YDIMNAME
-INTEGER               :: STATUS
+INTEGER(KIND=IDCDF_KIND) :: STATUS
 
 IF (KLEN < 1) THEN
    PRINT *, 'GETDIMCDF Error, KLEN=', KLEN
@@ -196,13 +196,13 @@ END FUNCTION GETDIMCDF
 
 FUNCTION GETSTRDIMID(PIOCDF, KLEN)
 TYPE(IOCDF), POINTER    :: PIOCDF
-INTEGER,     INTENT(IN) :: KLEN
-INTEGER                 :: GETSTRDIMID
+INTEGER(KIND=IDCDF_KIND),INTENT(IN) :: KLEN
+INTEGER(KIND=IDCDF_KIND)            :: GETSTRDIMID
 
 TYPE(DIMCDF), POINTER :: TMP
 CHARACTER(LEN=7)      :: YSUFFIX
 CHARACTER(LEN=8)      :: YDIMNAME
-INTEGER               :: STATUS
+INTEGER(KIND=IDCDF_KIND) :: STATUS
 
 IF (KLEN < 1) THEN
    PRINT *, 'GETSTRDIMID Error, KLEN=', KLEN
@@ -236,9 +236,9 @@ END FUNCTION GETSTRDIMID
 
 SUBROUTINE FILLVDIMS(PIOCDF, KSHAPE, HDIR, KVDIMS)
 TYPE(IOCDF),           POINTER        :: PIOCDF 
-INTEGER, DIMENSION(:), INTENT(IN)     :: KSHAPE
+INTEGER(KIND=IDCDF_KIND), DIMENSION(:), INTENT(IN) :: KSHAPE
 CHARACTER(LEN=*),      INTENT(IN)     :: HDIR
-INTEGER, DIMENSION(:), INTENT(OUT)    :: KVDIMS
+INTEGER(KIND=IDCDF_KIND),DIMENSION(:), INTENT(OUT) :: KVDIMS
 
 INTEGER :: II
 TYPE(DIMCDF), POINTER :: PTDIM
@@ -311,10 +311,11 @@ REAL,                 INTENT(IN) :: PFIELD
 TYPE(FMHEADER),       INTENT(IN) :: TPFMH
 INTEGER,              INTENT(OUT):: KRESP
 
-INTEGER           :: STATUS
-INTEGER           :: INCID
+INTEGER(KIND=IDCDF_KIND) :: STATUS
+INTEGER(KIND=IDCDF_KIND) :: INCID
 CHARACTER(LEN=30) :: YVARNAME
-INTEGER           :: IVARID
+INTEGER(KIND=IDCDF_KIND) :: IVARID
+INTEGER(KIND=IDCDF_KIND),PARAMETER :: IZERO = 0
 INTEGER           :: IRESP
 
 IRESP = 0
@@ -329,7 +330,7 @@ YVARNAME = str_replace(YVARNAME, '.', '--')
 STATUS = NF_INQ_VARID(INCID, YVARNAME, IVARID)
 IF (STATUS /= NF_NOERR) THEN
    ! Define the scalar variable 
-   STATUS = NF_DEF_VAR(INCID, YVARNAME, NF_DOUBLE, 0, 0, IVARID)
+   STATUS = NF_DEF_VAR(INCID, YVARNAME, NF_DOUBLE, IZERO, IZERO, IVARID)
    IF (status /= NF_NOERR) CALL HANDLE_ERR(status,__LINE__,'NCWRITX0[NF_DEF_VAR]')
    CALL WRITATTR(INCID, IVARID, TPFMH)
 ELSE
@@ -352,11 +353,11 @@ REAL, DIMENSION(:),   INTENT(IN) :: PFIELD
 TYPE(FMHEADER),       INTENT(IN) :: TPFMH
 INTEGER,              INTENT(OUT):: KRESP
 
-INTEGER               :: STATUS
-INTEGER               :: INCID
+INTEGER(KIND=IDCDF_KIND) :: STATUS
+INTEGER(KIND=IDCDF_KIND) :: INCID
 CHARACTER(LEN=30)     :: YVARNAME
-INTEGER               :: IVARID
-INTEGER, DIMENSION(SIZE(SHAPE(PFIELD))) :: IVDIMS
+INTEGER(KIND=IDCDF_KIND) :: IVARID
+INTEGER(KIND=IDCDF_KIND), DIMENSION(SIZE(SHAPE(PFIELD))) :: IVDIMS
 INTEGER               :: IRESP
 
 IRESP = 0
@@ -371,10 +372,10 @@ YVARNAME = str_replace(YVARNAME, '.', '--')
 STATUS = NF_INQ_VARID(INCID, YVARNAME, IVARID)
 IF (STATUS /= NF_NOERR) THEN
    ! Get the netcdf dimensions
-   CALL FILLVDIMS(PZCDF, SHAPE(PFIELD), HDIR, IVDIMS)
+   CALL FILLVDIMS(PZCDF, INT(SHAPE(PFIELD),KIND=IDCDF_KIND), HDIR, IVDIMS)
 
    ! Define the variable 
-   STATUS = NF_DEF_VAR(INCID, YVARNAME, NF_DOUBLE, SIZE(IVDIMS), IVDIMS, IVARID)
+   STATUS = NF_DEF_VAR(INCID, YVARNAME, NF_DOUBLE, INT(SIZE(IVDIMS),KIND=IDCDF_KIND), IVDIMS, IVARID)
    IF (status /= NF_NOERR) CALL HANDLE_ERR(status,__LINE__,'NCWRITX1[NF_DEF_VAR]')
    CALL WRITATTR(INCID, IVARID, TPFMH)
 ELSE
@@ -398,11 +399,15 @@ REAL, DIMENSION(:,:), INTENT(IN) :: PFIELD
 TYPE(FMHEADER),       INTENT(IN) :: TPFMH
 INTEGER,              INTENT(OUT):: KRESP
 
-INTEGER               :: STATUS
-INTEGER               :: INCID
+INTEGER(KIND=IDCDF_KIND),PARAMETER :: SHUFFLE = 0
+INTEGER(KIND=IDCDF_KIND),PARAMETER :: DEFLATE = 1
+INTEGER(KIND=IDCDF_KIND),PARAMETER :: DEFLATE_LEVEL = 2
+
+INTEGER(KIND=IDCDF_KIND) :: STATUS
+INTEGER(KIND=IDCDF_KIND) :: INCID
 CHARACTER(LEN=30)     :: YVARNAME
-INTEGER               :: IVARID
-INTEGER, DIMENSION(SIZE(SHAPE(PFIELD))) :: IVDIMS
+INTEGER(KIND=IDCDF_KIND) :: IVARID
+INTEGER(KIND=IDCDF_KIND), DIMENSION(SIZE(SHAPE(PFIELD))) :: IVDIMS
 INTEGER               :: IRESP
 
 IRESP = 0
@@ -417,14 +422,14 @@ YVARNAME = str_replace(YVARNAME, '.', '--')
 STATUS = NF_INQ_VARID(INCID, YVARNAME, IVARID)
 IF (STATUS /= NF_NOERR) THEN
    ! Get the netcdf dimensions
-   CALL FILLVDIMS(PZCDF, SHAPE(PFIELD), HDIR, IVDIMS)
+   CALL FILLVDIMS(PZCDF, INT(SHAPE(PFIELD),KIND=IDCDF_KIND), HDIR, IVDIMS)
    
    ! Define the variable 
-   STATUS = NF_DEF_VAR(INCID, YVARNAME, NF_DOUBLE, SIZE(IVDIMS), IVDIMS, IVARID)
+   STATUS = NF_DEF_VAR(INCID, YVARNAME, NF_DOUBLE, INT(SIZE(IVDIMS),KIND=IDCDF_KIND), IVDIMS, IVARID)
    IF (status /= NF_NOERR) CALL HANDLE_ERR(status,__LINE__,'NCWRITX2[NF_DEF_VAR]')
    IF (LDEFLATEX2) THEN
       ! Compress the variable with deflate level 2
-      STATUS = NF_DEF_VAR_DEFLATE(INCID, IVARID, 0, 1, 2)
+      STATUS = NF_DEF_VAR_DEFLATE(INCID, IVARID, SHUFFLE, DEFLATE, DEFLATE_LEVEL)
       IF (status /= NF_NOERR) CALL HANDLE_ERR(status,__LINE__,'NCWRITX2[NF_DEF_VAR_DEFLATE]')
    END IF
    CALL WRITATTR(INCID, IVARID, TPFMH)
@@ -448,11 +453,11 @@ REAL, DIMENSION(:,:,:),INTENT(IN) :: PFIELD
 TYPE(FMHEADER),        INTENT(IN) :: TPFMH
 INTEGER,               INTENT(OUT):: KRESP
 
-INTEGER               :: STATUS
-INTEGER               :: INCID
+INTEGER(KIND=IDCDF_KIND) :: STATUS
+INTEGER(KIND=IDCDF_KIND) :: INCID
 CHARACTER(LEN=30)     :: YVARNAME
-INTEGER               :: IVARID
-INTEGER, DIMENSION(SIZE(SHAPE(PFIELD))) :: IVDIMS
+INTEGER(KIND=IDCDF_KIND) :: IVARID
+INTEGER(KIND=IDCDF_KIND), DIMENSION(SIZE(SHAPE(PFIELD))) :: IVDIMS
 INTEGER               :: IRESP
 
 IRESP = 0
@@ -467,10 +472,10 @@ YVARNAME = str_replace(YVARNAME, '.', '--')
 STATUS = NF_INQ_VARID(INCID, YVARNAME, IVARID)
 IF (STATUS /= NF_NOERR) THEN
    ! Get the netcdf dimensions
-   CALL FILLVDIMS(PZCDF, SHAPE(PFIELD), HDIR, IVDIMS)
+   CALL FILLVDIMS(PZCDF, INT(SHAPE(PFIELD),KIND=IDCDF_KIND), HDIR, IVDIMS)
 
    ! Define the variable 
-   STATUS = NF_DEF_VAR(INCID, YVARNAME, NF_DOUBLE, SIZE(IVDIMS), IVDIMS, IVARID)
+   STATUS = NF_DEF_VAR(INCID, YVARNAME, NF_DOUBLE, INT(SIZE(IVDIMS),KIND=IDCDF_KIND), IVDIMS, IVARID)
    IF (status /= NF_NOERR) CALL HANDLE_ERR(status,__LINE__,'NCWRITX3[NF_DEF_VAR]')
    CALL WRITATTR(INCID, IVARID, TPFMH)
 ELSE
@@ -493,11 +498,11 @@ REAL, DIMENSION(:,:,:,:), INTENT(IN) :: PFIELD
 TYPE(FMHEADER),           INTENT(IN) :: TPFMH
 INTEGER,                  INTENT(OUT):: KRESP
 
-INTEGER               :: STATUS
-INTEGER               :: INCID
+INTEGER(KIND=IDCDF_KIND) :: STATUS
+INTEGER(KIND=IDCDF_KIND) :: INCID
 CHARACTER(LEN=30)     :: YVARNAME
-INTEGER               :: IVARID
-INTEGER, DIMENSION(SIZE(SHAPE(PFIELD))) :: IVDIMS
+INTEGER(KIND=IDCDF_KIND) :: IVARID
+INTEGER(KIND=IDCDF_KIND), DIMENSION(SIZE(SHAPE(PFIELD))) :: IVDIMS
 INTEGER               :: IRESP
 
 IRESP = 0
@@ -512,10 +517,10 @@ YVARNAME = str_replace(YVARNAME, '.', '--')
 STATUS = NF_INQ_VARID(INCID, YVARNAME, IVARID)
 IF (STATUS /= NF_NOERR) THEN
    ! Get the netcdf dimensions
-   CALL FILLVDIMS(PZCDF, SHAPE(PFIELD), HDIR, IVDIMS)
+   CALL FILLVDIMS(PZCDF, INT(SHAPE(PFIELD),KIND=IDCDF_KIND), HDIR, IVDIMS)
 
    ! Define the variable 
-   STATUS = NF_DEF_VAR(INCID, YVARNAME, NF_DOUBLE, SIZE(IVDIMS), IVDIMS, IVARID)
+   STATUS = NF_DEF_VAR(INCID, YVARNAME, NF_DOUBLE, INT(SIZE(IVDIMS),KIND=IDCDF_KIND), IVDIMS, IVARID)
    IF (status /= NF_NOERR) CALL HANDLE_ERR(status,__LINE__,'NCWRITX4[NF_DEF_VAR]')
    CALL WRITATTR(INCID, IVARID, TPFMH)
 ELSE
@@ -538,11 +543,11 @@ REAL, DIMENSION(:,:,:,:,:), INTENT(IN) :: PFIELD
 TYPE(FMHEADER),             INTENT(IN) :: TPFMH
 INTEGER,                    INTENT(OUT):: KRESP
 
-INTEGER               :: STATUS
-INTEGER               :: INCID
+INTEGER(KIND=IDCDF_KIND) :: STATUS
+INTEGER(KIND=IDCDF_KIND) :: INCID
 CHARACTER(LEN=30)     :: YVARNAME
-INTEGER               :: IVARID
-INTEGER, DIMENSION(SIZE(SHAPE(PFIELD))) :: IVDIMS
+INTEGER(KIND=IDCDF_KIND) :: IVARID
+INTEGER(KIND=IDCDF_KIND), DIMENSION(SIZE(SHAPE(PFIELD))) :: IVDIMS
 INTEGER               :: IRESP
 
 IRESP = 0
@@ -557,10 +562,10 @@ YVARNAME = str_replace(YVARNAME, '.', '--')
 STATUS = NF_INQ_VARID(INCID, YVARNAME, IVARID)
 IF (STATUS /= NF_NOERR) THEN
    ! Get the netcdf dimensions
-   CALL FILLVDIMS(PZCDF, SHAPE(PFIELD), HDIR, IVDIMS)
+   CALL FILLVDIMS(PZCDF, INT(SHAPE(PFIELD),KIND=IDCDF_KIND), HDIR, IVDIMS)
 
    ! Define the variable 
-   STATUS = NF_DEF_VAR(INCID, YVARNAME, NF_DOUBLE, SIZE(IVDIMS), IVDIMS, IVARID)
+   STATUS = NF_DEF_VAR(INCID, YVARNAME, NF_DOUBLE, INT(SIZE(IVDIMS),KIND=IDCDF_KIND), IVDIMS, IVARID)
    IF (status /= NF_NOERR) CALL HANDLE_ERR(status,__LINE__,'NCWRITX5[NF_DEF_VAR]')
    CALL WRITATTR(INCID, IVARID, TPFMH)
 ELSE
@@ -583,11 +588,11 @@ REAL, DIMENSION(:,:,:,:,:,:), INTENT(IN) :: PFIELD
 TYPE(FMHEADER),               INTENT(IN) :: TPFMH
 INTEGER,                      INTENT(OUT):: KRESP
 
-INTEGER               :: STATUS
-INTEGER               :: INCID
+INTEGER(KIND=IDCDF_KIND) :: STATUS
+INTEGER(KIND=IDCDF_KIND) :: INCID
 CHARACTER(LEN=30)     :: YVARNAME
-INTEGER               :: IVARID
-INTEGER, DIMENSION(SIZE(SHAPE(PFIELD))) :: IVDIMS
+INTEGER(KIND=IDCDF_KIND) :: IVARID
+INTEGER(KIND=IDCDF_KIND), DIMENSION(SIZE(SHAPE(PFIELD))) :: IVDIMS
 INTEGER               :: IRESP
 
 IRESP = 0
@@ -602,10 +607,10 @@ YVARNAME = str_replace(YVARNAME, '.', '--')
 STATUS = NF_INQ_VARID(INCID, YVARNAME, IVARID)
 IF (STATUS /= NF_NOERR) THEN
    ! Get the netcdf dimensions
-   CALL FILLVDIMS(PZCDF, SHAPE(PFIELD), HDIR, IVDIMS)
+   CALL FILLVDIMS(PZCDF, INT(SHAPE(PFIELD),KIND=IDCDF_KIND), HDIR, IVDIMS)
    
    ! Define the variable 
-   STATUS = NF_DEF_VAR(INCID, YVARNAME, NF_DOUBLE, SIZE(IVDIMS), IVDIMS, IVARID)
+   STATUS = NF_DEF_VAR(INCID, YVARNAME, NF_DOUBLE, INT(SIZE(IVDIMS),KIND=IDCDF_KIND), IVDIMS, IVARID)
    IF (status /= NF_NOERR) CALL HANDLE_ERR(status,__LINE__,'NCWRITX6[NF_DEF_VAR]')
    CALL WRITATTR(INCID, IVARID, TPFMH)
 ELSE
@@ -630,10 +635,11 @@ INTEGER,              INTENT(IN) :: KFIELD
 TYPE(FMHEADER),       INTENT(IN) :: TPFMH
 INTEGER,              INTENT(OUT):: KRESP
 
-INTEGER           :: STATUS
-INTEGER           :: INCID
+INTEGER(KIND=IDCDF_KIND) :: STATUS
+INTEGER(KIND=IDCDF_KIND) :: INCID
 CHARACTER(LEN=30) :: YVARNAME
-INTEGER           :: IVARID
+INTEGER(KIND=IDCDF_KIND) :: IVARID
+INTEGER(KIND=IDCDF_KIND),PARAMETER :: IZERO = 0
 INTEGER           :: IRESP
 
 IRESP = 0
@@ -648,7 +654,11 @@ YVARNAME = str_replace(YVARNAME, '.', '--')
 STATUS = NF_INQ_VARID(INCID, YVARNAME, IVARID)
 IF (STATUS /= NF_NOERR) THEN
    ! Define the scalar variable 
-   STATUS = NF_DEF_VAR(INCID, YVARNAME, NF_INT, 0, 0, IVARID)
+#ifndef MNH_INT8
+   STATUS = NF_DEF_VAR(INCID, YVARNAME, NF_INT, IZERO, IZERO, IVARID)
+#else
+   STATUS = NF_DEF_VAR(INCID, YVARNAME, NF_INT64, IZERO, IZERO, IVARID)
+#endif
    IF (status /= NF_NOERR) CALL HANDLE_ERR(status,__LINE__,'NCWRITN0[NF_DEF_VAR]')
    CALL WRITATTR(INCID, IVARID, TPFMH)
 ELSE
@@ -656,8 +666,13 @@ ELSE
 END IF
 
 ! Write the data
-STATUS = NF_PUT_VAR_INT(INCID, IVARID, KFIELD)
+#ifndef MNH_INT8
+STATUS = NF_PUT_VAR_INT(INCID, IVARID, INT(KFIELD,KIND=IDCDF_KIND))
 IF (status /= NF_NOERR) CALL HANDLE_ERR(status,__LINE__,'NCWRITN0[NF_PUT_VAR_INT]',IRESP)
+#else
+STATUS = NF_PUT_VAR_INT64(INCID, IVARID, KFIELD)
+IF (status /= NF_NOERR) CALL HANDLE_ERR(status,__LINE__,'NCWRITN0[NF_PUT_VAR_INT64]',IRESP)
+#endif
 !
 ! Use IMAX, JMAX, KMAX to define DIMX, DIMY, DIMZ
 ! /!\ Can only work if IMAX, JMAX or KMAX are written before any array
@@ -672,7 +687,7 @@ IF (YVARNAME == 'JMAX' .AND. .NOT. ASSOCIATED(PZCDF%DIMY)) THEN
    END IF
 END IF
 #endif
-IF (YVARNAME == 'KMAX' .AND. .NOT. ASSOCIATED(PZCDF%DIMZ)) PZCDF%DIMZ=>GETDIMCDF(PZCDF,KFIELD+2*JPVEXT,'Z')
+IF (YVARNAME == 'KMAX' .AND. .NOT. ASSOCIATED(PZCDF%DIMZ)) PZCDF%DIMZ=>GETDIMCDF(PZCDF,INT(KFIELD+2*JPVEXT,KIND=IDCDF_KIND),'Z')
  
 KRESP = IRESP
 END SUBROUTINE NCWRITN0
@@ -686,11 +701,11 @@ INTEGER, DIMENSION(:), INTENT(IN) :: KFIELD
 TYPE(FMHEADER),        INTENT(IN) :: TPFMH
 INTEGER,               INTENT(OUT):: KRESP
 
-INTEGER               :: STATUS
-INTEGER               :: INCID
+INTEGER(KIND=IDCDF_KIND) :: STATUS
+INTEGER(KIND=IDCDF_KIND) :: INCID
 CHARACTER(LEN=30)     :: YVARNAME
-INTEGER               :: IVARID
-INTEGER, DIMENSION(SIZE(SHAPE(KFIELD))) :: IVDIMS
+INTEGER(KIND=IDCDF_KIND) :: IVARID
+INTEGER(KIND=IDCDF_KIND), DIMENSION(SIZE(SHAPE(KFIELD))) :: IVDIMS
 INTEGER               :: IRESP
 
 IRESP = 0
@@ -705,19 +720,27 @@ YVARNAME = str_replace(YVARNAME, '.', '--')
 STATUS = NF_INQ_VARID(INCID, YVARNAME, IVARID)
 IF (STATUS /= NF_NOERR) THEN
    ! Get the netcdf dimensions
-   CALL FILLVDIMS(PZCDF, SHAPE(KFIELD), HDIR, IVDIMS)
-   ! Define the variable 
-   STATUS = NF_DEF_VAR(INCID, YVARNAME, NF_INT, SIZE(IVDIMS), IVDIMS, IVARID)
+   CALL FILLVDIMS(PZCDF, INT(SHAPE(KFIELD),KIND=IDCDF_KIND), HDIR, IVDIMS)
+! Define the variable 
+#ifndef MNH_INT8
+   STATUS = NF_DEF_VAR(INCID, YVARNAME, NF_INT, INT(SIZE(IVDIMS),KIND=IDCDF_KIND), IVDIMS, IVARID)
+#else
+   STATUS = NF_DEF_VAR(INCID, YVARNAME, NF_INT64, INT(SIZE(IVDIMS),KIND=IDCDF_KIND), IVDIMS, IVARID)
+#endif
    IF (status /= NF_NOERR) CALL HANDLE_ERR(status,__LINE__,'NCWRITN1[NF_DEF_VAR] '//TRIM(YVARNAME))
    CALL WRITATTR(INCID, IVARID, TPFMH)
 ELSE
    PRINT *,'NCWRITN1 : ', TRIM(YVARNAME), ' already defined !'
 END IF
 
-
 ! Write the data
-STATUS = NF_PUT_VAR_INT(INCID, IVARID, KFIELD)
+#ifndef MNH_INT8
+STATUS = NF_PUT_VAR_INT(INCID, IVARID, INT(KFIELD,KIND=IDCDF_KIND))
 IF (status /= NF_NOERR) CALL HANDLE_ERR(status,__LINE__,'NCWRITN1[NF_PUT_VAR_INT]',IRESP)
+#else
+STATUS = NF_PUT_VAR_INT64(INCID, IVARID, KFIELD)
+IF (status /= NF_NOERR) CALL HANDLE_ERR(status,__LINE__,'NCWRITN1[NF_PUT_VAR_INT64]',IRESP)
+#endif
 
 KRESP = IRESP 
 END SUBROUTINE NCWRITN1
@@ -731,11 +754,11 @@ INTEGER, DIMENSION(:,:),INTENT(IN) :: KFIELD
 TYPE(FMHEADER),         INTENT(IN) :: TPFMH
 INTEGER,                INTENT(OUT):: KRESP
 
-INTEGER               :: STATUS
-INTEGER               :: INCID
+INTEGER(KIND=IDCDF_KIND) :: STATUS
+INTEGER(KIND=IDCDF_KIND) :: INCID
 CHARACTER(LEN=30)     :: YVARNAME
-INTEGER               :: IVARID
-INTEGER, DIMENSION(SIZE(SHAPE(KFIELD))) :: IVDIMS
+INTEGER(KIND=IDCDF_KIND) :: IVARID
+INTEGER(KIND=IDCDF_KIND), DIMENSION(SIZE(SHAPE(KFIELD))) :: IVDIMS
 INTEGER               :: IRESP
 
 IRESP = 0
@@ -750,10 +773,14 @@ YVARNAME = str_replace(YVARNAME, '.', '--')
 STATUS = NF_INQ_VARID(INCID, YVARNAME, IVARID)
 IF (STATUS /= NF_NOERR) THEN
    ! Get the netcdf dimensions
-   CALL FILLVDIMS(PZCDF, SHAPE(KFIELD), HDIR, IVDIMS)
+   CALL FILLVDIMS(PZCDF, INT(SHAPE(KFIELD),KIND=IDCDF_KIND), HDIR, IVDIMS)
 
    ! Define the variable 
-   STATUS = NF_DEF_VAR(INCID, YVARNAME, NF_INT, SIZE(IVDIMS), IVDIMS, IVARID)
+#ifndef MNH_INT8
+   STATUS = NF_DEF_VAR(INCID, YVARNAME, NF_INT, INT(SIZE(IVDIMS),KIND=IDCDF_KIND), IVDIMS, IVARID)
+#else
+   STATUS = NF_DEF_VAR(INCID, YVARNAME, NF_INT64, INT(SIZE(IVDIMS),KIND=IDCDF_KIND), IVDIMS, IVARID)
+#endif
    IF (status /= NF_NOERR) CALL HANDLE_ERR(status,__LINE__,'NCWRITN2[NF_DEF_VAR]')
    CALL WRITATTR(INCID, IVARID, TPFMH)
 ELSE
@@ -761,8 +788,13 @@ ELSE
 END IF
 
 ! Write the data
-STATUS = NF_PUT_VAR_INT(INCID, IVARID, KFIELD)
+#ifndef MNH_INT8
+STATUS = NF_PUT_VAR_INT(INCID, IVARID, INT(KFIELD,KIND=IDCDF_KIND))
 IF (status /= NF_NOERR) CALL HANDLE_ERR(status,__LINE__,'NCWRITN2[NF_PUT_VAR_INT]',IRESP)
+#else
+STATUS = NF_PUT_VAR_INT64(INCID, IVARID, KFIELD)
+IF (status /= NF_NOERR) CALL HANDLE_ERR(status,__LINE__,'NCWRITN2[NF_PUT_VAR_INT64]',IRESP)
+#endif
 
 KRESP = IRESP
 END SUBROUTINE NCWRITN2
@@ -776,11 +808,11 @@ CHARACTER(LEN=*),      INTENT(IN) :: HFIELD
 TYPE(FMHEADER),        INTENT(IN) :: TPFMH
 INTEGER,               INTENT(OUT):: KRESP
 
-INTEGER               :: STATUS
-INTEGER               :: INCID
+INTEGER(KIND=IDCDF_KIND) :: STATUS
+INTEGER(KIND=IDCDF_KIND) :: INCID
 CHARACTER(LEN=30)     :: YVARNAME
-INTEGER               :: IVARID
-INTEGER, DIMENSION(1) :: IVDIMS
+INTEGER(KIND=IDCDF_KIND) :: IVARID
+INTEGER(KIND=IDCDF_KIND), DIMENSION(1) :: IVDIMS
 CHARACTER(LEN=32)     :: YSTR
 !CHARACTER(LEN=LEN(HFIELD)) :: YSTR
 INTEGER               :: IRESP
@@ -802,9 +834,9 @@ YVARNAME = str_replace(YVARNAME, '.', '--')
 STATUS = NF_INQ_VARID(INCID, YVARNAME, IVARID)
 IF (STATUS /= NF_NOERR) THEN
    ! Get the netcdf string dimensions id 
-   IVDIMS(1) = GETSTRDIMID(PZCDF, LEN(YSTR))
+   IVDIMS(1) = GETSTRDIMID(PZCDF, INT(LEN(YSTR),KIND=IDCDF_KIND))
    ! Define the variable 
-   STATUS = NF_DEF_VAR(INCID, YVARNAME, NF_CHAR, SIZE(IVDIMS), IVDIMS, IVARID)
+   STATUS = NF_DEF_VAR(INCID, YVARNAME, NF_CHAR, INT(SIZE(IVDIMS),KIND=IDCDF_KIND), IVDIMS, IVARID)
    IF (status /= NF_NOERR) CALL HANDLE_ERR(status,__LINE__,'NCWRITC0[NF_DEF_VAR]')
    CALL WRITATTR(INCID, IVARID, TPFMH)
 ELSE
@@ -827,15 +859,16 @@ CHARACTER(LEN=*),DIMENSION(:),INTENT(IN) :: HFIELD
 TYPE(FMHEADER),               INTENT(IN) :: TPFMH
 INTEGER,                      INTENT(OUT):: KRESP
 
-INTEGER               :: STATUS
-INTEGER               :: INCID
+INTEGER(KIND=IDCDF_KIND) :: STATUS
+INTEGER(KIND=IDCDF_KIND) :: INCID
 CHARACTER(LEN=30)     :: YVARNAME
-INTEGER               :: IVARID
-INTEGER, DIMENSION(2) :: IVDIMS
-INTEGER, DIMENSION(1) :: ITMP
+INTEGER(KIND=IDCDF_KIND) :: IVARID
+INTEGER(KIND=IDCDF_KIND), DIMENSION(2) :: IVDIMS
+INTEGER(KIND=IDCDF_KIND), DIMENSION(1) :: ITMP
 INTEGER               :: IRESP
-INTEGER               :: ILEN
-INTEGER               :: ISIZE
+INTEGER(KIND=IDCDF_KIND) :: ILEN
+INTEGER(KIND=IDCDF_KIND) :: ISIZE
+INTEGER(KIND=IDCDF_KIND),PARAMETER :: IONE=1
 
 IRESP = 0
 ILEN  = LEN(HFIELD)
@@ -856,7 +889,7 @@ IF (STATUS /= NF_NOERR) THEN
    CALL FILLVDIMS(PZCDF, (/ISIZE/), HDIR, ITMP)
    IVDIMS(2) = ITMP(1)
    ! Define the variable 
-   STATUS = NF_DEF_VAR(INCID, YVARNAME, NF_CHAR, SIZE(IVDIMS), IVDIMS, IVARID)
+   STATUS = NF_DEF_VAR(INCID, YVARNAME, NF_CHAR, INT(SIZE(IVDIMS),KIND=IDCDF_KIND), IVDIMS, IVARID)
    IF (status /= NF_NOERR) CALL HANDLE_ERR(status,__LINE__,'NCWRITC1[NF_DEF_VAR]')
    CALL WRITATTR(INCID, IVARID, TPFMH)
 ELSE
@@ -864,7 +897,7 @@ ELSE
 END IF
 
 ! Write the data
-STATUS = NF_PUT_VARA_TEXT(INCID, IVARID, (/1,1/),(/ILEN,ISIZE/), HFIELD)
+STATUS = NF_PUT_VARA_TEXT(INCID, IVARID, (/IONE,IONE/),(/ILEN,ISIZE/), HFIELD)
 IF (status /= NF_NOERR) CALL HANDLE_ERR(status,__LINE__,'NCWRITC1[NF_PUT_VARA_TEXT]',IRESP)
  
 KRESP = IRESP
@@ -877,13 +910,13 @@ END SUBROUTINE NCWRITC1
 !
 SUBROUTINE READATTR(KNCID, KVARID, HVAR, TPFMH)
 USE MODD_FM, ONLY : FMHEADER, JPXKRK
-INTEGER,         INTENT(IN) :: KNCID
-INTEGER,         INTENT(IN) :: KVARID
+INTEGER(KIND=IDCDF_KIND),INTENT(IN) :: KNCID
+INTEGER(KIND=IDCDF_KIND),INTENT(IN) :: KVARID
 CHARACTER(LEN=*),INTENT(IN) :: HVAR
 TYPE(FMHEADER),  INTENT(OUT):: TPFMH
 
-INTEGER :: STATUS
-INTEGER :: ICOMLEN
+INTEGER(KIND=IDCDF_KIND) :: STATUS
+INTEGER(KIND=IDCDF_KIND) :: ICOMLEN
       
 ! Read variables attributes (GRID and COMMENT)
 STATUS = NF_GET_ATT_INT(KNCID, KVARID, 'GRID', TPFMH%GRID)
@@ -902,18 +935,18 @@ END SUBROUTINE READATTR
 
 SUBROUTINE NCREADX0(KNCID, HVARNAME, PFIELD, TPFMH, KRESP)
 USE MODD_FM, ONLY : FMHEADER, JPXKRK
-INTEGER,          INTENT(IN) :: KNCID
+INTEGER(KIND=IDCDF_KIND),INTENT(IN) :: KNCID
 CHARACTER(LEN=*), INTENT(IN) :: HVARNAME
 REAL,             INTENT(OUT):: PFIELD
 TYPE(FMHEADER),   INTENT(OUT):: TPFMH
 INTEGER,          INTENT(OUT):: KRESP  ! return-code
 
-INTEGER           :: STATUS
+INTEGER(KIND=IDCDF_KIND) :: STATUS
 CHARACTER(LEN=30) :: YVARNAME
-INTEGER           :: IVARID
-INTEGER           :: ITYPE   ! variable type
-INTEGER           :: IDIMS   ! number of dimensions
-INTEGER           :: ICOMLEN ! comment length
+INTEGER(KIND=IDCDF_KIND) :: IVARID
+INTEGER(KIND=IDCDF_KIND) :: ITYPE   ! variable type
+INTEGER(KIND=IDCDF_KIND) :: IDIMS   ! number of dimensions
+INTEGER(KIND=IDCDF_KIND) :: ICOMLEN ! comment length
 INTEGER           :: IRESP
 
 IRESP = 0
@@ -954,20 +987,21 @@ END SUBROUTINE NCREADX0
 
 SUBROUTINE NCREADX1(KNCID, HVARNAME, PFIELD, TPFMH, KRESP)
 USE MODD_FM, ONLY : FMHEADER, JPXKRK
-INTEGER,            INTENT(IN) :: KNCID
+INTEGER(KIND=IDCDF_KIND),INTENT(IN) :: KNCID
 CHARACTER(LEN=*),   INTENT(IN) :: HVARNAME
 REAL, DIMENSION(:), INTENT(OUT):: PFIELD
 TYPE(FMHEADER),     INTENT(OUT):: TPFMH
 INTEGER,            INTENT(OUT):: KRESP  ! return-code
 
-INTEGER               :: STATUS
+INTEGER(KIND=IDCDF_KIND) :: STATUS
 CHARACTER(LEN=30)     :: YVARNAME
-INTEGER               :: IVARID
-INTEGER               :: ITYPE   ! variable type
-INTEGER               :: IDIMS   ! number of dimensions
-INTEGER, DIMENSION(SIZE(SHAPE(PFIELD))) :: IVDIMS
-INTEGER               :: ICOMLEN ! comment length
-INTEGER               :: IVARSIZE, IDIMLEN
+INTEGER(KIND=IDCDF_KIND) :: IVARID
+INTEGER(KIND=IDCDF_KIND) :: ITYPE   ! variable type
+INTEGER(KIND=IDCDF_KIND) :: IDIMS   ! number of dimensions
+INTEGER(KIND=IDCDF_KIND), DIMENSION(SIZE(SHAPE(PFIELD))) :: IVDIMS
+INTEGER(KIND=IDCDF_KIND) :: ICOMLEN ! comment length
+INTEGER               :: IVARSIZE
+INTEGER(KIND=IDCDF_KIND) :: IDIMLEN
 INTEGER               :: II
 INTEGER               :: IRESP
 
@@ -1024,20 +1058,21 @@ END SUBROUTINE NCREADX1
 
 SUBROUTINE NCREADX2(KNCID, HVARNAME, PFIELD, TPFMH, KRESP)
 USE MODD_FM, ONLY : FMHEADER, JPXKRK
-INTEGER,              INTENT(IN) :: KNCID
+INTEGER(KIND=IDCDF_KIND),INTENT(IN) :: KNCID
 CHARACTER(LEN=*),     INTENT(IN) :: HVARNAME
 REAL, DIMENSION(:,:), INTENT(OUT):: PFIELD
 TYPE(FMHEADER),       INTENT(OUT):: TPFMH
 INTEGER,              INTENT(OUT):: KRESP  ! return-code
 
-INTEGER               :: STATUS
+INTEGER(KIND=IDCDF_KIND) :: STATUS
 CHARACTER(LEN=30)     :: YVARNAME
-INTEGER               :: IVARID
-INTEGER               :: ITYPE   ! variable type
-INTEGER               :: IDIMS   ! number of dimensions
-INTEGER, DIMENSION(SIZE(SHAPE(PFIELD))) :: IVDIMS
-INTEGER               :: ICOMLEN ! comment length
-INTEGER               :: IVARSIZE, IDIMLEN
+INTEGER(KIND=IDCDF_KIND) :: IVARID
+INTEGER(KIND=IDCDF_KIND) :: ITYPE   ! variable type
+INTEGER(KIND=IDCDF_KIND) :: IDIMS   ! number of dimensions
+INTEGER(KIND=IDCDF_KIND), DIMENSION(SIZE(SHAPE(PFIELD))) :: IVDIMS
+INTEGER(KIND=IDCDF_KIND) :: ICOMLEN ! comment length
+INTEGER               :: IVARSIZE
+INTEGER(KIND=IDCDF_KIND) :: IDIMLEN
 INTEGER               :: II
 INTEGER               :: IRESP
 
@@ -1094,20 +1129,21 @@ END SUBROUTINE NCREADX2
 
 SUBROUTINE NCREADX3(KNCID, HVARNAME, PFIELD, TPFMH, KRESP)
 USE MODD_FM, ONLY : FMHEADER, JPXKRK
-INTEGER,                INTENT(IN) :: KNCID
+INTEGER(KIND=IDCDF_KIND),INTENT(IN) :: KNCID
 CHARACTER(LEN=*),       INTENT(IN) :: HVARNAME
 REAL, DIMENSION(:,:,:), INTENT(OUT):: PFIELD
 TYPE(FMHEADER),         INTENT(OUT):: TPFMH
 INTEGER,                INTENT(OUT):: KRESP  ! return-code
 
-INTEGER               :: STATUS
+INTEGER(KIND=IDCDF_KIND) :: STATUS
 CHARACTER(LEN=30)     :: YVARNAME
-INTEGER               :: IVARID
-INTEGER               :: ITYPE   ! variable type
-INTEGER               :: IDIMS   ! number of dimensions
-INTEGER, DIMENSION(SIZE(SHAPE(PFIELD))) :: IVDIMS
-INTEGER               :: ICOMLEN ! comment length
-INTEGER               :: IVARSIZE, IDIMLEN
+INTEGER(KIND=IDCDF_KIND) :: IVARID
+INTEGER(KIND=IDCDF_KIND) :: ITYPE   ! variable type
+INTEGER(KIND=IDCDF_KIND) :: IDIMS   ! number of dimensions
+INTEGER(KIND=IDCDF_KIND), DIMENSION(SIZE(SHAPE(PFIELD))) :: IVDIMS
+INTEGER(KIND=IDCDF_KIND) :: ICOMLEN ! comment length
+INTEGER               :: IVARSIZE
+INTEGER(KIND=IDCDF_KIND) :: IDIMLEN
 INTEGER               :: II
 INTEGER               :: IRESP
 
@@ -1164,20 +1200,21 @@ END SUBROUTINE NCREADX3
 
 SUBROUTINE NCREADX4(KNCID, HVARNAME, PFIELD, TPFMH, KRESP)
 USE MODD_FM, ONLY : FMHEADER, JPXKRK
-INTEGER,                  INTENT(IN) :: KNCID
+INTEGER(KIND=IDCDF_KIND), INTENT(IN) :: KNCID
 CHARACTER(LEN=*),         INTENT(IN) :: HVARNAME
 REAL, DIMENSION(:,:,:,:), INTENT(OUT):: PFIELD
 TYPE(FMHEADER),           INTENT(OUT):: TPFMH
 INTEGER,                  INTENT(OUT):: KRESP  ! return-code
 
-INTEGER               :: STATUS
+INTEGER(KIND=IDCDF_KIND) :: STATUS
 CHARACTER(LEN=30)     :: YVARNAME
-INTEGER               :: IVARID
-INTEGER               :: ITYPE   ! variable type
-INTEGER               :: IDIMS   ! number of dimensions
-INTEGER, DIMENSION(SIZE(SHAPE(PFIELD))) :: IVDIMS
-INTEGER               :: ICOMLEN ! comment length
-INTEGER               :: IVARSIZE, IDIMLEN
+INTEGER(KIND=IDCDF_KIND) :: IVARID
+INTEGER(KIND=IDCDF_KIND) :: ITYPE   ! variable type
+INTEGER(KIND=IDCDF_KIND) :: IDIMS   ! number of dimensions
+INTEGER(KIND=IDCDF_KIND), DIMENSION(SIZE(SHAPE(PFIELD))) :: IVDIMS
+INTEGER(KIND=IDCDF_KIND) :: ICOMLEN ! comment length
+INTEGER               :: IVARSIZE
+INTEGER(KIND=IDCDF_KIND) :: IDIMLEN
 INTEGER               :: II
 INTEGER               :: IRESP
 
@@ -1234,20 +1271,21 @@ END SUBROUTINE NCREADX4
 
 SUBROUTINE NCREADX5(KNCID, HVARNAME, PFIELD, TPFMH, KRESP)
 USE MODD_FM, ONLY : FMHEADER, JPXKRK
-INTEGER,                    INTENT(IN) :: KNCID
+INTEGER(KIND=IDCDF_KIND),   INTENT(IN) :: KNCID
 CHARACTER(LEN=*),           INTENT(IN) :: HVARNAME
 REAL, DIMENSION(:,:,:,:,:), INTENT(OUT):: PFIELD
 TYPE(FMHEADER),             INTENT(OUT):: TPFMH
 INTEGER,                    INTENT(OUT):: KRESP  ! return-code
 
-INTEGER               :: STATUS
+INTEGER(KIND=IDCDF_KIND) :: STATUS
 CHARACTER(LEN=30)     :: YVARNAME
-INTEGER               :: IVARID
-INTEGER               :: ITYPE   ! variable type
-INTEGER               :: IDIMS   ! number of dimensions
-INTEGER, DIMENSION(SIZE(SHAPE(PFIELD))) :: IVDIMS
-INTEGER               :: ICOMLEN ! comment length
-INTEGER               :: IVARSIZE, IDIMLEN
+INTEGER(KIND=IDCDF_KIND) :: IVARID
+INTEGER(KIND=IDCDF_KIND) :: ITYPE   ! variable type
+INTEGER(KIND=IDCDF_KIND) :: IDIMS   ! number of dimensions
+INTEGER(KIND=IDCDF_KIND), DIMENSION(SIZE(SHAPE(PFIELD))) :: IVDIMS
+INTEGER(KIND=IDCDF_KIND) :: ICOMLEN ! comment length
+INTEGER               :: IVARSIZE
+INTEGER(KIND=IDCDF_KIND) :: IDIMLEN
 INTEGER               :: II
 INTEGER               :: IRESP
 
@@ -1304,20 +1342,21 @@ END SUBROUTINE NCREADX5
 
 SUBROUTINE NCREADX6(KNCID, HVARNAME, PFIELD, TPFMH, KRESP)
 USE MODD_FM, ONLY : FMHEADER, JPXKRK
-INTEGER,                      INTENT(IN) :: KNCID
+INTEGER(KIND=IDCDF_KIND),     INTENT(IN) :: KNCID
 CHARACTER(LEN=*),             INTENT(IN) :: HVARNAME
 REAL, DIMENSION(:,:,:,:,:,:), INTENT(OUT):: PFIELD
 TYPE(FMHEADER),               INTENT(OUT):: TPFMH
 INTEGER,                      INTENT(OUT):: KRESP  ! return-code
 
-INTEGER               :: STATUS
+INTEGER(KIND=IDCDF_KIND) :: STATUS
 CHARACTER(LEN=30)     :: YVARNAME
-INTEGER               :: IVARID
-INTEGER               :: ITYPE   ! variable type
-INTEGER               :: IDIMS   ! number of dimensions
-INTEGER, DIMENSION(SIZE(SHAPE(PFIELD))) :: IVDIMS
-INTEGER               :: ICOMLEN ! comment length
-INTEGER               :: IVARSIZE, IDIMLEN
+INTEGER(KIND=IDCDF_KIND) :: IVARID
+INTEGER(KIND=IDCDF_KIND) :: ITYPE   ! variable type
+INTEGER(KIND=IDCDF_KIND) :: IDIMS   ! number of dimensions
+INTEGER(KIND=IDCDF_KIND), DIMENSION(SIZE(SHAPE(PFIELD))) :: IVDIMS
+INTEGER(KIND=IDCDF_KIND) :: ICOMLEN ! comment length
+INTEGER               :: IVARSIZE
+INTEGER(KIND=IDCDF_KIND) :: IDIMLEN
 INTEGER               :: II
 INTEGER               :: IRESP
 
@@ -1374,18 +1413,18 @@ END SUBROUTINE NCREADX6
 
 SUBROUTINE NCREADN0(KNCID, HVARNAME, KFIELD, TPFMH, KRESP)
 USE MODD_FM, ONLY : FMHEADER, JPXKRK
-INTEGER,          INTENT(IN) :: KNCID
+INTEGER(KIND=IDCDF_KIND),INTENT(IN) :: KNCID
 CHARACTER(LEN=*), INTENT(IN) :: HVARNAME
 INTEGER,          INTENT(OUT):: KFIELD
 TYPE(FMHEADER),   INTENT(OUT):: TPFMH
 INTEGER,          INTENT(OUT):: KRESP  ! return-code
 
-INTEGER           :: STATUS
+INTEGER(KIND=IDCDF_KIND) :: STATUS
 CHARACTER(LEN=30) :: YVARNAME
-INTEGER           :: IVARID
-INTEGER           :: ITYPE   ! variable type
-INTEGER           :: IDIMS   ! number of dimensions
-INTEGER           :: ICOMLEN ! comment length
+INTEGER(KIND=IDCDF_KIND) :: IVARID
+INTEGER(KIND=IDCDF_KIND) :: ITYPE   ! variable type
+INTEGER(KIND=IDCDF_KIND) :: IDIMS   ! number of dimensions
+INTEGER(KIND=IDCDF_KIND) :: ICOMLEN ! comment length
 INTEGER           :: IRESP
 
 IRESP = 0
@@ -1405,11 +1444,19 @@ IF (STATUS /= NF_NOERR) CALL HANDLE_ERR(STATUS,__LINE__,'NCREADN0[NF_INQ_VARNDIM
 STATUS = NF_INQ_VARTYPE(KNCID, IVARID, ITYPE)
 IF (STATUS /= NF_NOERR) CALL HANDLE_ERR(STATUS,__LINE__,'NCREADN0[NF_INQ_VARTYPE] '//TRIM(YVARNAME))
 
+#ifndef MNH_INT8
 IF (IDIMS == 0 .AND. ITYPE == NF_INT) THEN
-   ! Read variable
+#else
+IF (IDIMS == 0 .AND. ITYPE == NF_INT64) THEN
+#endif
+! Read variable
+#ifndef MNH_INT8
    STATUS = NF_GET_VAR_INT(KNCID, IVARID, KFIELD)
+#else
+   STATUS = NF_GET_VAR_INT64(KNCID, IVARID, KFIELD)
+#endif
    IF (STATUS /= NF_NOERR) THEN
-      CALL HANDLE_ERR(status,__LINE__,'NCREADN0[NF_GET_VAR_DOUBLE] '//TRIM(YVARNAME),IRESP)
+      CALL HANDLE_ERR(status,__LINE__,'NCREADN0[NF_GET_VAR_INT] '//TRIM(YVARNAME),IRESP)
       GOTO 1000
    END IF
    ! Read variables attributes (GRID and COMMENT)
@@ -1426,20 +1473,21 @@ END SUBROUTINE NCREADN0
 
 SUBROUTINE NCREADN1(KNCID, HVARNAME, KFIELD, TPFMH, KRESP)
 USE MODD_FM, ONLY : FMHEADER, JPXKRK
-INTEGER,               INTENT(IN) :: KNCID
+INTEGER(KIND=IDCDF_KIND),INTENT(IN) :: KNCID
 CHARACTER(LEN=*),      INTENT(IN) :: HVARNAME
 INTEGER, DIMENSION(:), INTENT(OUT):: KFIELD
 TYPE(FMHEADER),        INTENT(OUT):: TPFMH
 INTEGER,               INTENT(OUT):: KRESP  ! return-code
 
-INTEGER               :: STATUS
+INTEGER(KIND=IDCDF_KIND) :: STATUS
 CHARACTER(LEN=30)     :: YVARNAME
-INTEGER               :: IVARID
-INTEGER               :: ITYPE   ! variable type
-INTEGER               :: IDIMS   ! number of dimensions
-INTEGER, DIMENSION(SIZE(SHAPE(KFIELD))) :: IVDIMS
-INTEGER               :: ICOMLEN ! comment length
-INTEGER               :: IVARSIZE, IDIMLEN
+INTEGER(KIND=IDCDF_KIND) :: IVARID
+INTEGER(KIND=IDCDF_KIND) :: ITYPE   ! variable type
+INTEGER(KIND=IDCDF_KIND) :: IDIMS   ! number of dimensions
+INTEGER(KIND=IDCDF_KIND),DIMENSION(SIZE(SHAPE(KFIELD))) :: IVDIMS
+INTEGER(KIND=IDCDF_KIND) :: ICOMLEN ! comment length
+INTEGER               :: IVARSIZE
+INTEGER(KIND=IDCDF_KIND) :: IDIMLEN
 INTEGER               :: II
 INTEGER               :: IRESP
 
@@ -1460,7 +1508,11 @@ IF (STATUS /= NF_NOERR) CALL HANDLE_ERR(STATUS,__LINE__,'NCREADN1[NF_INQ_VARNDIM
 STATUS = NF_INQ_VARTYPE(KNCID, IVARID, ITYPE)
 IF (STATUS /= NF_NOERR) CALL HANDLE_ERR(STATUS,__LINE__,'NCREADN1[NF_INQ_VARTYPE] '//TRIM(YVARNAME))
 
+#ifndef MNH_INT8
 IF (IDIMS == SIZE(SHAPE(KFIELD)) .AND. ITYPE == NF_INT) THEN
+#else
+IF (IDIMS == SIZE(SHAPE(KFIELD)) .AND. ITYPE == NF_INT64) THEN
+#endif
    ! Check size of variable before reading
    STATUS = NF_INQ_VARDIMID(KNCID, IVARID, IVDIMS)
    IF (status /= NF_NOERR) CALL HANDLE_ERR(status,__LINE__,'NCREADN1[NF_INQ_VARDIMID] '//TRIM(YVARNAME))
@@ -1473,7 +1525,11 @@ IF (IDIMS == SIZE(SHAPE(KFIELD)) .AND. ITYPE == NF_INT) THEN
    
    IF (IVARSIZE == SIZE(KFIELD)) THEN
       ! Read variable
+#ifndef MNH_INT8
       STATUS = NF_GET_VAR_INT(KNCID, IVARID, KFIELD)
+#else
+      STATUS = NF_GET_VAR_INT64(KNCID, IVARID, KFIELD)
+#endif
       IF (STATUS /= NF_NOERR) THEN
          CALL HANDLE_ERR(status,__LINE__,'NCREADN1[NF_GET_VAR_INT] '//TRIM(YVARNAME),IRESP)
          GOTO 1000
@@ -1496,20 +1552,21 @@ END SUBROUTINE NCREADN1
 
 SUBROUTINE NCREADN2(KNCID, HVARNAME, KFIELD, TPFMH, KRESP)
 USE MODD_FM, ONLY : FMHEADER, JPXKRK
-INTEGER,                 INTENT(IN) :: KNCID
+INTEGER(KIND=IDCDF_KIND),INTENT(IN) :: KNCID
 CHARACTER(LEN=*),        INTENT(IN) :: HVARNAME
 INTEGER, DIMENSION(:,:), INTENT(OUT):: KFIELD
 TYPE(FMHEADER),          INTENT(OUT):: TPFMH
 INTEGER,                 INTENT(OUT):: KRESP  ! return-code
 
-INTEGER               :: STATUS
+INTEGER(KIND=IDCDF_KIND)  :: STATUS
 CHARACTER(LEN=30)     :: YVARNAME
-INTEGER               :: IVARID
-INTEGER               :: ITYPE   ! variable type
-INTEGER               :: IDIMS   ! number of dimensions
-INTEGER, DIMENSION(SIZE(SHAPE(KFIELD))) :: IVDIMS
-INTEGER               :: ICOMLEN ! comment length
-INTEGER               :: IVARSIZE, IDIMLEN
+INTEGER(KIND=IDCDF_KIND) :: IVARID
+INTEGER(KIND=IDCDF_KIND) :: ITYPE   ! variable type
+INTEGER(KIND=IDCDF_KIND) :: IDIMS   ! number of dimensions
+INTEGER(KIND=IDCDF_KIND),DIMENSION(SIZE(SHAPE(KFIELD))) :: IVDIMS
+INTEGER(KIND=IDCDF_KIND) :: ICOMLEN ! comment length
+INTEGER               :: IVARSIZE
+INTEGER(KIND=IDCDF_KIND) :: IDIMLEN
 INTEGER               :: II
 INTEGER               :: IRESP
 
@@ -1530,8 +1587,12 @@ IF (STATUS /= NF_NOERR) CALL HANDLE_ERR(STATUS,__LINE__,'NCREADN2[NF_INQ_VARNDIM
 STATUS = NF_INQ_VARTYPE(KNCID, IVARID, ITYPE)
 IF (STATUS /= NF_NOERR) CALL HANDLE_ERR(STATUS,__LINE__,'NCREADN2[NF_INQ_VARTYPE] '//TRIM(YVARNAME))
 
+#ifndef MNH_INT8
 IF (IDIMS == SIZE(SHAPE(KFIELD)) .AND. ITYPE == NF_INT) THEN
-   ! Check size of variable before reading
+#else
+IF (IDIMS == SIZE(SHAPE(KFIELD)) .AND. ITYPE == NF_INT64) THEN
+#endif
+! Check size of variable before reading
    STATUS = NF_INQ_VARDIMID(KNCID, IVARID, IVDIMS)
    IF (status /= NF_NOERR) CALL HANDLE_ERR(status,__LINE__,'NCREADN2[NF_INQ_VARDIMID] '//TRIM(YVARNAME))
    IVARSIZE = 1
@@ -1543,7 +1604,11 @@ IF (IDIMS == SIZE(SHAPE(KFIELD)) .AND. ITYPE == NF_INT) THEN
    
    IF (IVARSIZE == SIZE(KFIELD)) THEN
       ! Read variable
+#ifndef MNH_INT8
       STATUS = NF_GET_VAR_INT(KNCID, IVARID, KFIELD)
+#else
+      STATUS = NF_GET_VAR_INT64(KNCID, IVARID, KFIELD)
+#endif
       IF (STATUS /= NF_NOERR) THEN
          CALL HANDLE_ERR(status,__LINE__,'NCREADN2[NF_GET_VAR_INT] '//TRIM(YVARNAME),IRESP)
          GOTO 1000
@@ -1566,22 +1631,22 @@ END SUBROUTINE NCREADN2
 
 SUBROUTINE NCREADC0(KNCID, HVARNAME, HFIELD, TPFMH, KRESP)
 USE MODD_FM, ONLY : FMHEADER, JPXKRK
-INTEGER,               INTENT(IN) :: KNCID
+INTEGER(KIND=IDCDF_KIND),INTENT(IN) :: KNCID
 CHARACTER(LEN=*),      INTENT(IN) :: HVARNAME
 CHARACTER(LEN=*),      INTENT(OUT):: HFIELD
 TYPE(FMHEADER),        INTENT(OUT):: TPFMH
 INTEGER,               INTENT(OUT):: KRESP  ! return-code
 
-INTEGER               :: STATUS
+INTEGER(KIND=IDCDF_KIND) :: STATUS
 CHARACTER(LEN=30)     :: YVARNAME
-INTEGER               :: IVARID
-INTEGER               :: ITYPE   ! variable type
-INTEGER               :: IDIMS   ! number of dimensions
-INTEGER, DIMENSION(1) :: IVDIMS
+INTEGER(KIND=IDCDF_KIND) :: IVARID
+INTEGER(KIND=IDCDF_KIND) :: ITYPE   ! variable type
+INTEGER(KIND=IDCDF_KIND) :: IDIMS   ! number of dimensions
+INTEGER(KIND=IDCDF_KIND),DIMENSION(1) :: IVDIMS
 CHARACTER(LEN=32)     :: YSTR
 !CHARACTER(LEN=LEN(HFIELD))     :: YSTR
-INTEGER               :: ICOMLEN ! comment length
-INTEGER               :: IDIMLEN
+INTEGER(KIND=IDCDF_KIND) :: ICOMLEN ! comment length
+INTEGER(KIND=IDCDF_KIND) :: IDIMLEN
 INTEGER               :: II
 INTEGER               :: IRESP
 
diff --git a/src/Makefile b/src/Makefile
index 01f69823a..baeec252b 100644
--- a/src/Makefile
+++ b/src/Makefile
@@ -329,12 +329,15 @@ gribapi_clean :
 ##########################################################
 ifeq "$(VER_CDF)" "CDFAUTO"
 #
+HDF_OPT    = ${OPT_BASE_I4:-$OPT_BASE}
+NETCDF_OPT = ${OPT_BASE_I4:-$OPT_BASE}
+#
 cdf : $(CDF_INC)
 $(CDF_INC) : 
 	cd ${DIR_HDF} && ./configure --disable-shared --prefix=${CDF_PATH} --libdir=${CDF_PATH}/lib64 --with-zlib=no \
-	FC="$(FC)" FCFLAGS="$(OPT_BASE)" CPPFLAGS="-DpgiFortran" ${HDF_CONF} && make && make install && $(MAKE) -j 1 clean
+	FC="$(FC)" FCFLAGS="$(HDF_OPT)" CPPFLAGS="-DpgiFortran" ${HDF_CONF} && make && make install && $(MAKE) -j 1 clean
 	cd ${DIR_CDF} && ./configure --disable-shared --prefix=${CDF_PATH} --libdir=${CDF_PATH}/lib64 --disable-cxx --disable-f90 --disable-dap \
-	FC="$(FC)" FCFLAGS="$(OPT_BASE)" CPPFLAGS="-DpgiFortran ${INC_NETCDF}" ${CDF_CONF} LDFLAGS=" -L${CDF_PATH}/lib64" && make && make install && $(MAKE) -j 1 clean
+	FC="$(FC)" FCFLAGS="$(NETCDF_OPT)" CPPFLAGS="-DpgiFortran ${INC_NETCDF}" ${CDF_CONF} LDFLAGS=" -L${CDF_PATH}/lib64" && make && make install && $(MAKE) -j 1 clean
 
 cleanmaster : cleancdf
 cleancdf :
@@ -507,4 +510,3 @@ ifeq "$(DO_COMP_USER)" "YES"
 include  filedepalluser
 endif 
 
-
diff --git a/src/Makefile.MESONH.mk b/src/Makefile.MESONH.mk
index 5e3775c06..8ba6fff00 100644
--- a/src/Makefile.MESONH.mk
+++ b/src/Makefile.MESONH.mk
@@ -43,6 +43,10 @@ DIR_MASTER += $(DIR_MNH)
 CPPFLAGS   += $(CPPFLAGS_MNH)
 INC        += $(INC_MNH)
 
+ifeq "$(MNH_INT)" "8"
+CPPFLAGS   += -DMNH_INT8
+endif
+
 OBJS_NOCB +=  spll_dxf.o spll_dxm.o spll_dyf.o spll_dym.o \
         spll_dzf.o spll_dzm.o spll_mxf.o \
         spll_mxm.o spll_myf.o spll_mym.o spll_mzf.o \
diff --git a/src/Rules.AIX64.mk b/src/Rules.AIX64.mk
index b4e3685d6..3b3f35dd9 100644
--- a/src/Rules.AIX64.mk
+++ b/src/Rules.AIX64.mk
@@ -27,8 +27,9 @@ OPT_I8    = -qintsize=8
 MNH_INT   ?=4
 LFI_RECL  ?=512
 #
+OPT_BASE_I4       := $(OPT_BASE)
 ifeq "$(MNH_INT)" "8"
-OPT_BASE         += $(OPT_I8)
+OPT_BASE          += $(OPT_I8)
 LFI_INT           ?=8
 MNH_MPI_RANK_KIND ?=8
 else
@@ -125,3 +126,8 @@ OBJS_I8=spll_NEWLFI_ALL.o
 $(OBJS_I8) : OPT = $(OPT_BASE) $(OPT_PERF2) $(OPT_I8)
 endif
 
+ifeq "$(MNH_INT)" "8"
+OBJS_I4=spll_modd_netcdf.o
+$(OBJS_I4) : OPT = $(OPT_BASE_I4)
+endif
+
diff --git a/src/Rules.BG.mk b/src/Rules.BG.mk
index 06b762085..a89108248 100644
--- a/src/Rules.BG.mk
+++ b/src/Rules.BG.mk
@@ -32,8 +32,9 @@ OPT_I4      = -qintsize=4
 MNH_INT   ?=4
 LFI_RECL  ?=512
 #
+OPT_BASE_I4       := $(OPT_BASE)
 ifeq "$(MNH_INT)" "8"
-OPT_BASE         += $(OPT_I8)
+OPT_BASE          += $(OPT_I8)
 LFI_INT           ?=8
 MNH_MPI_RANK_KIND ?=8
 else
@@ -138,3 +139,8 @@ OBJS_I8=spll_NEWLFI_ALL.o
 $(OBJS_I8) : OPT = $(OPT_BASE) $(OPT_PERF2) $(OPT_I8)
 endif
 
+ifeq "$(MNH_INT)" "8"
+OBJS_I4=spll_modd_netcdf.o
+$(OBJS_I4) : OPT = $(OPT_BASE_I4)
+endif
+
diff --git a/src/Rules.BGQ.mk b/src/Rules.BGQ.mk
index 2357a873f..27073eda6 100644
--- a/src/Rules.BGQ.mk
+++ b/src/Rules.BGQ.mk
@@ -35,6 +35,7 @@ OPT_I4      = -qintsize=4 -qxlf77=intarg
 MNH_INT   ?=4
 LFI_RECL  ?=512
 #
+OPT_BASE_I4       := $(OPT_BASE) $(OPT_I4)
 ifeq "$(MNH_INT)" "8"
 OPT_BASE         += $(OPT_I8)
 LFI_INT           ?=8
@@ -197,3 +198,8 @@ OBJS_I8=spll_NEWLFI_ALL.o
 $(OBJS_I8) : OPT = $(OPT_BASE) $(OPT_PERF2) $(OPT_I8)
 endif
 
+ifeq "$(MNH_INT)" "8"
+OBJS_I4=spll_modd_netcdf.o
+$(OBJS_I4) : OPT = $(OPT_BASE_I4)
+endif
+
diff --git a/src/Rules.LXcray.mk b/src/Rules.LXcray.mk
index 5c3efb0b4..cb25144a8 100644
--- a/src/Rules.LXcray.mk
+++ b/src/Rules.LXcray.mk
@@ -24,6 +24,7 @@ OPT_I8     =  -sdefault64
 MNH_INT   ?=4
 LFI_RECL  ?=512
 #
+OPT_BASE_I4       := $(OPT_BASE)
 ifeq "$(MNH_INT)" "8"
 #OPT_BASE         += $(OPT_I8)
 OPT_BASE           = -sdefault64 -hpic -em -ef
@@ -130,6 +131,11 @@ OBJS_I8=spll_NEWLFI_ALL.o
 $(OBJS_I8) : OPT = $(OPT_BASE) $(OPT_PERF2) $(OPT_I8)
 endif
 
+ifeq "$(MNH_INT)" "8"
+OBJS_I4=spll_modd_netcdf.o
+$(OBJS_I4) : OPT = $(OPT_BASE_I4)
+endif
+
 #mpi.mod : 
 #	ln -sf /opt/cray/mpt/5.6.3/gni/mpich2-cray/74/include/MPI.mod $(OBJDIR_MASTER)/mpi.mod
 
diff --git a/src/Rules.LXg95.mk b/src/Rules.LXg95.mk
index 73c604cd1..fc00eceed 100644
--- a/src/Rules.LXg95.mk
+++ b/src/Rules.LXg95.mk
@@ -20,8 +20,9 @@ OPT_I8     =  -i8
 MNH_INT   ?=4
 LFI_RECL  ?=512
 #
+OPT_BASE_I4       := $(OPT_BASE)
 ifeq "$(MNH_INT)" "8"
-OPT_BASE         += $(OPT_I8)
+OPT_BASE          += $(OPT_I8)
 LFI_INT           ?=8
 MNH_MPI_RANK_KIND ?=8
 else
@@ -100,3 +101,8 @@ OBJS_I8=spll_NEWLFI_ALL.o
 $(OBJS_I8) : OPT = $(OPT_BASE) $(OPT_PERF2) $(OPT_I8)
 endif
 
+ifeq "$(MNH_INT)" "8"
+OBJS_I4=spll_modd_netcdf.o
+$(OBJS_I4) : OPT = $(OPT_BASE_I4)
+endif
+
diff --git a/src/Rules.LXgfortran.mk b/src/Rules.LXgfortran.mk
index 7a01c286b..7cb87b2ba 100644
--- a/src/Rules.LXgfortran.mk
+++ b/src/Rules.LXgfortran.mk
@@ -30,6 +30,7 @@ OPT_BASE           += $(OPT_R8)
 CPPFLAGS_SURCOUCHE += -DMNH_MPI_DOUBLE_PRECISION
 endif
 #
+OPT_BASE_I4       := $(OPT_BASE)
 ifeq "$(MNH_INT)" "8"
 OPT_BASE          += $(OPT_I8)
 LFI_INT           ?=8
@@ -111,3 +112,9 @@ ifneq "$(findstring 8,$(LFI_INT))" ""
 OBJS_I8=spll_NEWLFI_ALL.o
 $(OBJS_I8) : OPT = $(OPT_BASE) $(OPT_PERF2) $(OPT_I8)
 endif
+
+ifeq "$(MNH_INT)" "8"
+OBJS_I4=spll_modd_netcdf.o
+$(OBJS_I4) : OPT = $(OPT_BASE_I4)
+endif
+
diff --git a/src/Rules.LXifort.mk b/src/Rules.LXifort.mk
index e02af5381..20156c3de 100644
--- a/src/Rules.LXifort.mk
+++ b/src/Rules.LXifort.mk
@@ -28,8 +28,9 @@ OPT_BASE           += $(OPT_R8)
 CPPFLAGS_SURCOUCHE += -DMNH_MPI_DOUBLE_PRECISION
 endif
 #
+OPT_BASE_I4       := $(OPT_BASE)
 ifeq "$(MNH_INT)" "8"
-OPT_BASE         += $(OPT_I8)
+OPT_BASE          += $(OPT_I8)
 LFI_INT           ?=8
 MNH_MPI_RANK_KIND ?=8
 else
@@ -157,3 +158,8 @@ OBJS_I8=spll_NEWLFI_ALL.o
 $(OBJS_I8) : OPT = $(OPT_BASE) $(OPT_PERF2) $(OPT_I8)
 endif
 
+ifeq "$(MNH_INT)" "8"
+OBJS_I4=spll_modd_netcdf.o
+$(OBJS_I4) : OPT = $(OPT_BASE_I4)
+endif
+
diff --git a/src/Rules.LXpgi.mk b/src/Rules.LXpgi.mk
index b7958f15f..e1ab3e7e7 100644
--- a/src/Rules.LXpgi.mk
+++ b/src/Rules.LXpgi.mk
@@ -37,8 +37,9 @@ OPT_BASE           += $(OPT_R8)
 CPPFLAGS_SURCOUCHE += -DMNH_MPI_DOUBLE_PRECISION
 endif
 #
+OPT_BASE_I4       := $(OPT_BASE)
 ifeq "$(MNH_INT)" "8"
-OPT_BASE         += $(OPT_I8)
+OPT_BASE          += $(OPT_I8)
 LFI_INT           ?=8
 MNH_MPI_RANK_KIND ?=8
 else
@@ -146,3 +147,8 @@ OBJS_I8=spll_NEWLFI_ALL.o
 $(OBJS_I8) : OPT = $(OPT_BASE) $(OPT_PERF2) $(OPT_I8)
 endif
 
+ifeq "$(MNH_INT)" "8"
+OBJS_I4=spll_modd_netcdf.o
+$(OBJS_I4) : OPT = $(OPT_BASE_I4)
+endif
+
diff --git a/src/Rules.SX8.mk b/src/Rules.SX8.mk
index 2931d8cf3..48fd2ab69 100644
--- a/src/Rules.SX8.mk
+++ b/src/Rules.SX8.mk
@@ -26,8 +26,9 @@ OPT_I8    = -ew
 MNH_INT   ?=4
 LFI_RECL  ?=512
 #
+OPT_BASE_I4       := $(OPT_BASE)
 ifeq "$(MNH_INT)" "8"
-OPT_BASE         += $(OPT_I8)
+OPT_BASE          += $(OPT_I8)
 LFI_INT           ?=8
 MNH_MPI_RANK_KIND ?=8
 else
@@ -123,3 +124,8 @@ OBJS_I8=spll_NEWLFI_ALL.o
 $(OBJS_I8) : OPT = $(OPT_BASE) $(OPT_PERF2) $(OPT_I8)
 endif
 
+ifeq "$(MNH_INT)" "8"
+OBJS_I4=spll_modd_netcdf.o
+$(OBJS_I4) : OPT = $(OPT_BASE_I4)
+endif
+
-- 
GitLab