From 800e0fb64f5599d0f60aafcd36b01d96728929cd Mon Sep 17 00:00:00 2001
From: Philippe WAUTELET <philippe.wautelet@aero.obs-mip.fr>
Date: Tue, 31 Oct 2017 11:34:44 +0100
Subject: [PATCH] Philippe 31/10/2017: IO: pass TPFILE to
 IO_WRITE_FIELD_LFI_xxx calls and use it to retrieve the logical unit +
 correct a bug in the integer kind of the LU

---
 src/LIB/SURCOUCHE/src/fmreadwrit.f90 |  92 ++++++++---------
 src/LIB/SURCOUCHE/src/fmwrit_ll.f90  | 141 +++++++++++++--------------
 src/LIB/SURCOUCHE/src/modd_io.f90    |   2 +-
 3 files changed, 114 insertions(+), 121 deletions(-)

diff --git a/src/LIB/SURCOUCHE/src/fmreadwrit.f90 b/src/LIB/SURCOUCHE/src/fmreadwrit.f90
index 84cd2cce7..415014b32 100644
--- a/src/LIB/SURCOUCHE/src/fmreadwrit.f90
+++ b/src/LIB/SURCOUCHE/src/fmreadwrit.f90
@@ -724,14 +724,14 @@ END IF
 END SUBROUTINE IO_READ_CHECK_FIELD_LFI
 !
 !
-SUBROUTINE IO_WRITE_FIELD_LFI_X0(TPFIELD,KFLU,PFIELD,KRESP)
+SUBROUTINE IO_WRITE_FIELD_LFI_X0(TPFILE,TPFIELD,PFIELD,KRESP)
 !
 IMPLICIT NONE
 !
 !*      0.1   Declarations of arguments
 !
+TYPE(TFILEDATA),       INTENT(IN) :: TPFILE
 TYPE(TFIELDDATA),      INTENT(IN) :: TPFIELD
-INTEGER,               INTENT(IN) :: KFLU   ! Fortran Logical Unit
 REAL,                  INTENT(IN) :: PFIELD ! array containing the data field
 INTEGER,               INTENT(OUT):: KRESP  ! return-code if problems araised
 !
@@ -754,7 +754,7 @@ IF (IRESP==0) THEN
   IF( LEN_TRIM(TPFIELD%CMNHNAME) > LEN(YRECFM) ) &
     CALL PRINT_MSG(NVERB_WARNING,'IO','IO_WRITE_FIELD_LFI_X0','field name was truncated to '&
                    //YRECFM//' for '//TRIM(TPFIELD%CMNHNAME))
-  CALL LFIECR(IRESP,KFLU,TRIM(TPFIELD%CMNHNAME),IWORK,ITOTAL)
+  CALL LFIECR(IRESP,TPFILE%NLFIFLU,TRIM(TPFIELD%CMNHNAME),IWORK,ITOTAL)
 ENDIF
 !
 KRESP=IRESP
@@ -763,14 +763,14 @@ IF (ALLOCATED(IWORK)) DEALLOCATE(IWORK)
 !
 END SUBROUTINE IO_WRITE_FIELD_LFI_X0
 !
-SUBROUTINE IO_WRITE_FIELD_LFI_X1(TPFIELD,KFLU,PFIELD,KRESP)
+SUBROUTINE IO_WRITE_FIELD_LFI_X1(TPFILE,TPFIELD,PFIELD,KRESP)
 !
 IMPLICIT NONE
 !
 !*      0.1   Declarations of arguments
 !
+TYPE(TFILEDATA),       INTENT(IN) :: TPFILE
 TYPE(TFIELDDATA),      INTENT(IN) :: TPFIELD
-INTEGER,               INTENT(IN) :: KFLU   ! Fortran Logical Unit
 REAL,DIMENSION(:),     INTENT(IN) :: PFIELD ! array containing the data field
 INTEGER,               INTENT(OUT):: KRESP  ! return-code if problems araised
 !
@@ -793,7 +793,7 @@ IF (IRESP==0) THEN
   IF( LEN_TRIM(TPFIELD%CMNHNAME) > LEN(YRECFM) ) &
     CALL PRINT_MSG(NVERB_WARNING,'IO','IO_WRITE_FIELD_LFI_X1','field name was truncated to '&
                    //YRECFM//' for '//TRIM(TPFIELD%CMNHNAME))
-  CALL LFIECR(IRESP,KFLU,YRECFM,IWORK,ITOTAL)
+  CALL LFIECR(IRESP,TPFILE%NLFIFLU,YRECFM,IWORK,ITOTAL)
 ENDIF
 !
 KRESP=IRESP
@@ -802,14 +802,14 @@ IF (ALLOCATED(IWORK)) DEALLOCATE(IWORK)
 !
 END SUBROUTINE IO_WRITE_FIELD_LFI_X1
 !
-SUBROUTINE IO_WRITE_FIELD_LFI_X2(TPFIELD,KFLU,PFIELD,KRESP,KVERTLEVEL)
+SUBROUTINE IO_WRITE_FIELD_LFI_X2(TPFILE,TPFIELD,PFIELD,KRESP,KVERTLEVEL)
 !
 IMPLICIT NONE
 !
 !*      0.1   Declarations of arguments
 !
+TYPE(TFILEDATA),       INTENT(IN) :: TPFILE
 TYPE(TFIELDDATA),      INTENT(IN) :: TPFIELD
-INTEGER,               INTENT(IN) :: KFLU   ! Fortran Logical Unit
 REAL,DIMENSION(:,:),   INTENT(IN) :: PFIELD ! array containing the data field
 INTEGER,               INTENT(OUT):: KRESP  ! return-code if problems araised
 INTEGER,OPTIONAL,      INTENT(IN) :: KVERTLEVEL ! Number of the vertical level (needed for Z-level splitted files)
@@ -841,7 +841,7 @@ IF (IRESP==0) THEN
   IF( LEN_TRIM(YVARNAME) > LEN(YRECFM) ) &
     CALL PRINT_MSG(NVERB_WARNING,'IO','IO_WRITE_FIELD_LFI_X2','field name was truncated to '&
                    //YRECFM//' for '//TRIM(YVARNAME))
-  CALL LFIECR(IRESP,KFLU,YRECFM,IWORK,ITOTAL)
+  CALL LFIECR(IRESP,TPFILE%NLFIFLU,YRECFM,IWORK,ITOTAL)
 ENDIF
 !
 KRESP=IRESP
@@ -850,14 +850,14 @@ IF (ALLOCATED(IWORK)) DEALLOCATE(IWORK)
 !
 END SUBROUTINE IO_WRITE_FIELD_LFI_X2
 !
-SUBROUTINE IO_WRITE_FIELD_LFI_X3(TPFIELD,KFLU,PFIELD,KRESP)
+SUBROUTINE IO_WRITE_FIELD_LFI_X3(TPFILE,TPFIELD,PFIELD,KRESP)
 !
 IMPLICIT NONE
 !
 !*      0.1   Declarations of arguments
 !
+TYPE(TFILEDATA),         INTENT(IN) :: TPFILE
 TYPE(TFIELDDATA),        INTENT(IN) :: TPFIELD
-INTEGER,                 INTENT(IN) :: KFLU   ! Fortran Logical Unit
 REAL,DIMENSION(:,:,:),   INTENT(IN) :: PFIELD ! array containing the data field
 INTEGER,                 INTENT(OUT):: KRESP  ! return-code if problems araised
 !
@@ -880,7 +880,7 @@ IF (IRESP==0) THEN
   IF( LEN_TRIM(TPFIELD%CMNHNAME) > LEN(YRECFM) ) &
     CALL PRINT_MSG(NVERB_WARNING,'IO','IO_WRITE_FIELD_LFI_X3','field name was truncated to '&
                    //YRECFM//' for '//TRIM(TPFIELD%CMNHNAME))
-  CALL LFIECR(IRESP,KFLU,YRECFM,IWORK,ITOTAL)
+  CALL LFIECR(IRESP,TPFILE%NLFIFLU,YRECFM,IWORK,ITOTAL)
 ENDIF
 !
 KRESP=IRESP
@@ -889,14 +889,14 @@ IF (ALLOCATED(IWORK)) DEALLOCATE(IWORK)
 !
 END SUBROUTINE IO_WRITE_FIELD_LFI_X3
 !
-SUBROUTINE IO_WRITE_FIELD_LFI_X4(TPFIELD,KFLU,PFIELD,KRESP)
+SUBROUTINE IO_WRITE_FIELD_LFI_X4(TPFILE,TPFIELD,PFIELD,KRESP)
 !
 IMPLICIT NONE
 !
 !*      0.1   Declarations of arguments
 !
+TYPE(TFILEDATA),          INTENT(IN) :: TPFILE
 TYPE(TFIELDDATA),         INTENT(IN) :: TPFIELD
-INTEGER,                  INTENT(IN) :: KFLU   ! Fortran Logical Unit
 REAL,DIMENSION(:,:,:,:),  INTENT(IN) :: PFIELD ! array containing the data field
 INTEGER,                  INTENT(OUT):: KRESP  ! return-code if problems araised
 !
@@ -919,7 +919,7 @@ IF (IRESP==0) THEN
   IF( LEN_TRIM(TPFIELD%CMNHNAME) > LEN(YRECFM) ) &
     CALL PRINT_MSG(NVERB_WARNING,'IO','IO_WRITE_FIELD_LFI_X4','field name was truncated to '&
                    //YRECFM//' for '//TRIM(TPFIELD%CMNHNAME))
-  CALL LFIECR(IRESP,KFLU,YRECFM,IWORK,ITOTAL)
+  CALL LFIECR(IRESP,TPFILE%NLFIFLU,YRECFM,IWORK,ITOTAL)
 ENDIF
 !
 KRESP=IRESP
@@ -928,14 +928,14 @@ IF (ALLOCATED(IWORK)) DEALLOCATE(IWORK)
 !
 END SUBROUTINE IO_WRITE_FIELD_LFI_X4
 !
-SUBROUTINE IO_WRITE_FIELD_LFI_X5(TPFIELD,KFLU,PFIELD,KRESP)
+SUBROUTINE IO_WRITE_FIELD_LFI_X5(TPFILE,TPFIELD,PFIELD,KRESP)
 !
 IMPLICIT NONE
 !
 !*      0.1   Declarations of arguments
 !
+TYPE(TFILEDATA),          INTENT(IN) :: TPFILE
 TYPE(TFIELDDATA),         INTENT(IN) :: TPFIELD
-INTEGER,                  INTENT(IN) :: KFLU   ! Fortran Logical Unit
 REAL,DIMENSION(:,:,:,:,:),INTENT(IN) :: PFIELD ! array containing the data field
 INTEGER,                  INTENT(OUT):: KRESP  ! return-code if problems araised
 !
@@ -958,7 +958,7 @@ IF (IRESP==0) THEN
   IF( LEN_TRIM(TPFIELD%CMNHNAME) > LEN(YRECFM) ) &
     CALL PRINT_MSG(NVERB_WARNING,'IO','IO_WRITE_FIELD_LFI_X5','field name was truncated to '&
                    //YRECFM//' for '//TRIM(TPFIELD%CMNHNAME))
-  CALL LFIECR(IRESP,KFLU,YRECFM,IWORK,ITOTAL)
+  CALL LFIECR(IRESP,TPFILE%NLFIFLU,YRECFM,IWORK,ITOTAL)
 ENDIF
 !
 KRESP=IRESP
@@ -967,14 +967,14 @@ IF (ALLOCATED(IWORK)) DEALLOCATE(IWORK)
 !
 END SUBROUTINE IO_WRITE_FIELD_LFI_X5
 !
-SUBROUTINE IO_WRITE_FIELD_LFI_X6(TPFIELD,KFLU,PFIELD,KRESP)
+SUBROUTINE IO_WRITE_FIELD_LFI_X6(TPFILE,TPFIELD,PFIELD,KRESP)
 !
 IMPLICIT NONE
 !
 !*      0.1   Declarations of arguments
 !
+TYPE(TFILEDATA),            INTENT(IN) :: TPFILE
 TYPE(TFIELDDATA),           INTENT(IN) :: TPFIELD
-INTEGER,                    INTENT(IN) :: KFLU   ! Fortran Logical Unit
 REAL,DIMENSION(:,:,:,:,:,:),INTENT(IN) :: PFIELD ! array containing the data field
 INTEGER,                    INTENT(OUT):: KRESP  ! return-code if problems araised
 !
@@ -997,7 +997,7 @@ IF (IRESP==0) THEN
   IF( LEN_TRIM(TPFIELD%CMNHNAME) > LEN(YRECFM) ) &
     CALL PRINT_MSG(NVERB_WARNING,'IO','IO_WRITE_FIELD_LFI_X6','field name was truncated to '&
                    //YRECFM//' for '//TRIM(TPFIELD%CMNHNAME))
-  CALL LFIECR(IRESP,KFLU,YRECFM,IWORK,ITOTAL)
+  CALL LFIECR(IRESP,TPFILE%NLFIFLU,YRECFM,IWORK,ITOTAL)
 ENDIF
 !
 KRESP=IRESP
@@ -1006,14 +1006,14 @@ IF (ALLOCATED(IWORK)) DEALLOCATE(IWORK)
 !
 END SUBROUTINE IO_WRITE_FIELD_LFI_X6
 !
-SUBROUTINE IO_WRITE_FIELD_LFI_N0(TPFIELD,KFLU,KFIELD,KRESP)
+SUBROUTINE IO_WRITE_FIELD_LFI_N0(TPFILE,TPFIELD,KFIELD,KRESP)
 !
 IMPLICIT NONE
 !
 !*      0.1   Declarations of arguments
 !
+TYPE(TFILEDATA),         INTENT(IN) :: TPFILE
 TYPE(TFIELDDATA),        INTENT(IN) :: TPFIELD
-INTEGER,                 INTENT(IN) :: KFLU   ! Fortran Logical Unit
 INTEGER,                 INTENT(IN) :: KFIELD ! array containing the data field
 INTEGER,                 INTENT(OUT):: KRESP  ! return-code if problems araised
 !
@@ -1036,7 +1036,7 @@ IF (IRESP==0) THEN
   IF( LEN_TRIM(TPFIELD%CMNHNAME) > LEN(YRECFM) ) &
     CALL PRINT_MSG(NVERB_WARNING,'IO','IO_WRITE_FIELD_LFI_N0','field name was truncated to '&
                    //YRECFM//' for '//TRIM(TPFIELD%CMNHNAME))
-  CALL LFIECR(IRESP,KFLU,YRECFM,IWORK,ITOTAL)
+  CALL LFIECR(IRESP,TPFILE%NLFIFLU,YRECFM,IWORK,ITOTAL)
 ENDIF
 !
 KRESP=IRESP
@@ -1045,14 +1045,14 @@ IF (ALLOCATED(IWORK)) DEALLOCATE(IWORK)
 !
 END SUBROUTINE IO_WRITE_FIELD_LFI_N0
 !
-SUBROUTINE IO_WRITE_FIELD_LFI_N1(TPFIELD,KFLU,KFIELD,KRESP)
+SUBROUTINE IO_WRITE_FIELD_LFI_N1(TPFILE,TPFIELD,KFIELD,KRESP)
 !
 IMPLICIT NONE
 !
 !*      0.1   Declarations of arguments
 !
+TYPE(TFILEDATA),         INTENT(IN) :: TPFILE
 TYPE(TFIELDDATA),        INTENT(IN) :: TPFIELD
-INTEGER,                 INTENT(IN) :: KFLU   ! Fortran Logical Unit
 INTEGER,DIMENSION(:),    INTENT(IN) :: KFIELD ! array containing the data field
 INTEGER,                 INTENT(OUT):: KRESP  ! return-code if problems araised
 !
@@ -1075,7 +1075,7 @@ IF (IRESP==0) THEN
   IF( LEN_TRIM(TPFIELD%CMNHNAME) > LEN(YRECFM) ) &
     CALL PRINT_MSG(NVERB_WARNING,'IO','IO_WRITE_FIELD_LFI_N1','field name was truncated to '&
                    //YRECFM//' for '//TRIM(TPFIELD%CMNHNAME))
-  CALL LFIECR(IRESP,KFLU,YRECFM,IWORK,ITOTAL)
+  CALL LFIECR(IRESP,TPFILE%NLFIFLU,YRECFM,IWORK,ITOTAL)
 ENDIF
 !
 KRESP=IRESP
@@ -1084,14 +1084,14 @@ IF (ALLOCATED(IWORK)) DEALLOCATE(IWORK)
 !
 END SUBROUTINE IO_WRITE_FIELD_LFI_N1
 !
-SUBROUTINE IO_WRITE_FIELD_LFI_N2(TPFIELD,KFLU,KFIELD,KRESP)
+SUBROUTINE IO_WRITE_FIELD_LFI_N2(TPFILE,TPFIELD,KFIELD,KRESP)
 !
 IMPLICIT NONE
 !
 !*      0.1   Declarations of arguments
 !
+TYPE(TFILEDATA),       INTENT(IN) :: TPFILE
 TYPE(TFIELDDATA),      INTENT(IN) :: TPFIELD
-INTEGER,               INTENT(IN) :: KFLU   ! Fortran Logical Unit
 INTEGER,DIMENSION(:,:),INTENT(IN) :: KFIELD ! array containing the data field
 INTEGER,               INTENT(OUT):: KRESP  ! return-code if problems araised
 !
@@ -1114,7 +1114,7 @@ IF (IRESP==0) THEN
   IF( LEN_TRIM(TPFIELD%CMNHNAME) > LEN(YRECFM) ) &
     CALL PRINT_MSG(NVERB_WARNING,'IO','IO_WRITE_FIELD_LFI_N2','field name was truncated to '&
                    //YRECFM//' for '//TRIM(TPFIELD%CMNHNAME))
-  CALL LFIECR(IRESP,KFLU,YRECFM,IWORK,ITOTAL)
+  CALL LFIECR(IRESP,TPFILE%NLFIFLU,YRECFM,IWORK,ITOTAL)
 ENDIF
 !
 KRESP=IRESP
@@ -1123,14 +1123,14 @@ IF (ALLOCATED(IWORK)) DEALLOCATE(IWORK)
 !
 END SUBROUTINE IO_WRITE_FIELD_LFI_N2
 !
-SUBROUTINE IO_WRITE_FIELD_LFI_N3(TPFIELD,KFLU,KFIELD,KRESP)
+SUBROUTINE IO_WRITE_FIELD_LFI_N3(TPFILE,TPFIELD,KFIELD,KRESP)
 !
 IMPLICIT NONE
 !
 !*      0.1   Declarations of arguments
 !
+TYPE(TFILEDATA),         INTENT(IN) :: TPFILE
 TYPE(TFIELDDATA),        INTENT(IN) :: TPFIELD
-INTEGER,                 INTENT(IN) :: KFLU   ! Fortran Logical Unit
 INTEGER,DIMENSION(:,:,:),INTENT(IN) :: KFIELD ! array containing the data field
 INTEGER,                 INTENT(OUT):: KRESP  ! return-code if problems araised
 !
@@ -1153,7 +1153,7 @@ IF (IRESP==0) THEN
   IF( LEN_TRIM(TPFIELD%CMNHNAME) > LEN(YRECFM) ) &
     CALL PRINT_MSG(NVERB_WARNING,'IO','IO_WRITE_FIELD_LFI_N3','field name was truncated to '&
                    //YRECFM//' for '//TRIM(TPFIELD%CMNHNAME))
-  CALL LFIECR(IRESP,KFLU,YRECFM,IWORK,ITOTAL)
+  CALL LFIECR(IRESP,TPFILE%NLFIFLU,YRECFM,IWORK,ITOTAL)
 ENDIF
 !
 KRESP=IRESP
@@ -1162,14 +1162,14 @@ IF (ALLOCATED(IWORK)) DEALLOCATE(IWORK)
 !
 END SUBROUTINE IO_WRITE_FIELD_LFI_N3
 !
-SUBROUTINE IO_WRITE_FIELD_LFI_L0(TPFIELD,KFLU,OFIELD,KRESP)
+SUBROUTINE IO_WRITE_FIELD_LFI_L0(TPFILE,TPFIELD,OFIELD,KRESP)
 !
 IMPLICIT NONE
 !
 !*      0.1   Declarations of arguments
 !
+TYPE(TFILEDATA),         INTENT(IN) :: TPFILE
 TYPE(TFIELDDATA),        INTENT(IN) :: TPFIELD
-INTEGER,                 INTENT(IN) :: KFLU   ! Fortran Logical Unit
 LOGICAL,                 INTENT(IN) :: OFIELD ! array containing the data field
 INTEGER,                 INTENT(OUT):: KRESP  ! return-code if problems araised
 !
@@ -1200,7 +1200,7 @@ IF (IRESP==0) THEN
   IF( LEN_TRIM(TPFIELD%CMNHNAME) > LEN(YRECFM) ) &
     CALL PRINT_MSG(NVERB_WARNING,'IO','IO_WRITE_FIELD_LFI_L0','field name was truncated to '&
                    //YRECFM//' for '//TRIM(TPFIELD%CMNHNAME))
-  CALL LFIECR(IRESP,KFLU,YRECFM,IWORK,ITOTAL)
+  CALL LFIECR(IRESP,TPFILE%NLFIFLU,YRECFM,IWORK,ITOTAL)
 ENDIF
 !
 KRESP=IRESP
@@ -1209,14 +1209,14 @@ IF (ALLOCATED(IWORK)) DEALLOCATE(IWORK)
 !
 END SUBROUTINE IO_WRITE_FIELD_LFI_L0
 !
-SUBROUTINE IO_WRITE_FIELD_LFI_L1(TPFIELD,KFLU,OFIELD,KRESP)
+SUBROUTINE IO_WRITE_FIELD_LFI_L1(TPFILE,TPFIELD,OFIELD,KRESP)
 !
 IMPLICIT NONE
 !
 !*      0.1   Declarations of arguments
 !
+TYPE(TFILEDATA),         INTENT(IN) :: TPFILE
 TYPE(TFIELDDATA),        INTENT(IN) :: TPFIELD
-INTEGER,                 INTENT(IN) :: KFLU   ! Fortran Logical Unit
 LOGICAL,DIMENSION(:),    INTENT(IN) :: OFIELD ! array containing the data field
 INTEGER,                 INTENT(OUT):: KRESP  ! return-code if problems araised
 !
@@ -1247,7 +1247,7 @@ IF (IRESP==0) THEN
   IF( LEN_TRIM(TPFIELD%CMNHNAME) > LEN(YRECFM) ) &
     CALL PRINT_MSG(NVERB_WARNING,'IO','IO_WRITE_FIELD_LFI_L1','field name was truncated to '&
                    //YRECFM//' for '//TRIM(TPFIELD%CMNHNAME))
-  CALL LFIECR(IRESP,KFLU,YRECFM,IWORK,ITOTAL)
+  CALL LFIECR(IRESP,TPFILE%NLFIFLU,YRECFM,IWORK,ITOTAL)
 ENDIF
 !
 KRESP=IRESP
@@ -1256,14 +1256,14 @@ IF (ALLOCATED(IWORK)) DEALLOCATE(IWORK)
 !
 END SUBROUTINE IO_WRITE_FIELD_LFI_L1
 !
-SUBROUTINE IO_WRITE_FIELD_LFI_C0(TPFIELD,KFLU,HFIELD,KRESP)
+SUBROUTINE IO_WRITE_FIELD_LFI_C0(TPFILE,TPFIELD,HFIELD,KRESP)
 !
 IMPLICIT NONE
 !
 !*      0.1   Declarations of arguments
 !
+TYPE(TFILEDATA),         INTENT(IN) :: TPFILE
 TYPE(TFIELDDATA),        INTENT(IN) :: TPFIELD
-INTEGER,                 INTENT(IN) :: KFLU   ! Fortran Logical Unit
 CHARACTER(LEN=*),        INTENT(IN) :: HFIELD ! array containing the data field
 INTEGER,                 INTENT(OUT):: KRESP  ! return-code if problems araised
 !
@@ -1293,7 +1293,7 @@ IF (IRESP==0) THEN
   IF( LEN_TRIM(TPFIELD%CMNHNAME) > LEN(YRECFM) ) &
     CALL PRINT_MSG(NVERB_WARNING,'IO','IO_WRITE_FIELD_LFI_C0','field name was truncated to '&
                    //YRECFM//' for '//TRIM(TPFIELD%CMNHNAME))
-  CALL LFIECR(IRESP,KFLU,YRECFM,IWORK,ITOTAL)
+  CALL LFIECR(IRESP,TPFILE%NLFIFLU,YRECFM,IWORK,ITOTAL)
 ENDIF
 !
 KRESP=IRESP
@@ -1302,7 +1302,7 @@ IF (ALLOCATED(IWORK)) DEALLOCATE(IWORK)
 !
 END SUBROUTINE IO_WRITE_FIELD_LFI_C0
 !
-SUBROUTINE IO_WRITE_FIELD_LFI_T0(TPFIELD,KFLU,TPDATA,KRESP)
+SUBROUTINE IO_WRITE_FIELD_LFI_T0(TPFILE,TPFIELD,TPDATA,KRESP)
 !
 USE MODD_TYPE_DATE
 !
@@ -1310,8 +1310,8 @@ IMPLICIT NONE
 !
 !*      0.1   Declarations of arguments
 !
+TYPE(TFILEDATA),         INTENT(IN) :: TPFILE
 TYPE(TFIELDDATA),        INTENT(IN) :: TPFIELD
-INTEGER,                 INTENT(IN) :: KFLU   ! Fortran Logical Unit
 TYPE (DATE_TIME),        INTENT(IN) :: TPDATA ! array containing the data field
 INTEGER,                 INTENT(OUT):: KRESP  ! return-code if problems araised
 !
@@ -1345,7 +1345,7 @@ IF (IRESP==0) THEN
   IF( LEN_TRIM(TZFIELD%CMNHNAME) > LEN(YRECFM) ) &
     CALL PRINT_MSG(NVERB_WARNING,'IO','IO_WRITE_FIELD_LFI_T0','field name was truncated to '&
                    //YRECFM//' for '//TRIM(TZFIELD%CMNHNAME))
-  CALL LFIECR(IRESP,KFLU,YRECFM,IWORK,ITOTAL)
+  CALL LFIECR(IRESP,TPFILE%NLFIFLU,YRECFM,IWORK,ITOTAL)
 ENDIF
 !
 IF (ALLOCATED(IWORK)) DEALLOCATE(IWORK)
@@ -1369,7 +1369,7 @@ IF (IRESP==0) THEN
   IF( LEN_TRIM(TZFIELD%CMNHNAME) > LEN(YRECFM) ) &
     CALL PRINT_MSG(NVERB_WARNING,'IO','IO_WRITE_FIELD_LFI_T0','field name was truncated to '&
                    //YRECFM//' for '//TRIM(TZFIELD%CMNHNAME))
-  CALL LFIECR(IRESP,KFLU,YRECFM,IWORK,ITOTAL)
+  CALL LFIECR(IRESP,TPFILE%NLFIFLU,YRECFM,IWORK,ITOTAL)
 ENDIF
 !
 KRESP=IRESP
diff --git a/src/LIB/SURCOUCHE/src/fmwrit_ll.f90 b/src/LIB/SURCOUCHE/src/fmwrit_ll.f90
index d9407e80c..8325e93ec 100644
--- a/src/LIB/SURCOUCHE/src/fmwrit_ll.f90
+++ b/src/LIB/SURCOUCHE/src/fmwrit_ll.f90
@@ -377,11 +377,11 @@ CONTAINS
     TZFD=>GETFD(YFNLFI)
     IF (ASSOCIATED(TZFD)) THEN
        IF (GSMONOPROC) THEN ! sequential execution
-          IF (LLFIOUT) CALL IO_WRITE_FIELD_LFI(TPFIELD,TZFD%FLU,PFIELD,IRESP)
+          IF (LLFIOUT) CALL IO_WRITE_FIELD_LFI(TPFILE,TPFIELD,PFIELD,IRESP)
           IF (LIOCDF4) CALL IO_WRITE_FIELD_NC4(TPFILE,TPFIELD,TZFD%CDF,PFIELD,IRESP)
        ELSE ! multiprocessor execution
           IF (ISP == TZFD%OWNER)  THEN
-             IF (LLFIOUT) CALL IO_WRITE_FIELD_LFI(TPFIELD,TZFD%FLU,PFIELD,IRESP)
+             IF (LLFIOUT) CALL IO_WRITE_FIELD_LFI(TPFILE,TPFIELD,PFIELD,IRESP)
              IF (LIOCDF4) CALL IO_WRITE_FIELD_NC4(TPFILE,TPFIELD,TZFD%CDF,PFIELD,IRESP)
           END IF
           !
@@ -395,15 +395,13 @@ CONTAINS
              TZFD_IOZ => GETFD(YFILE_IOZ)   
              IK_RANK = TZFD_IOZ%OWNER
              IF ( ISP == IK_RANK )  THEN
-                IF (LLFIOUT) CALL IO_WRITE_FIELD_LFI(TPFIELD,TZFD_IOZ%FLU,PFIELD,IRESP)
-                IF (LIOCDF4) THEN
-                  CALL IO_FILE_FIND_BYNAME(TRIM(TPFILE%CNAME)//YK_FILE,TZFILE,IRESP)
-                  IF (IRESP/=0) THEN
-                    CALL PRINT_MSG(NVERB_FATAL,'IO','IO_WRITE_FIELD_BYFIELD_X0','file '//TRIM(TRIM(TPFILE%CNAME)//YK_FILE)//&
-                                   ' not found in list')
-                  END IF
-                  CALL IO_WRITE_FIELD_NC4(TZFILE,TPFIELD,TZFD_IOZ%CDF,PFIELD,IRESP)
+                CALL IO_FILE_FIND_BYNAME(TRIM(TPFILE%CNAME)//YK_FILE,TZFILE,IRESP)
+                IF (IRESP/=0) THEN
+                  CALL PRINT_MSG(NVERB_FATAL,'IO','IO_WRITE_FIELD_BYFIELD_X0','file '//TRIM(TRIM(TPFILE%CNAME)//YK_FILE)//&
+                                 ' not found in list')
                 END IF
+                IF (LLFIOUT) CALL IO_WRITE_FIELD_LFI(TZFILE,TPFIELD,PFIELD,IRESP)
+                IF (LIOCDF4) CALL IO_WRITE_FIELD_NC4(TZFILE,TPFIELD,TZFD_IOZ%CDF,PFIELD,IRESP)
              END IF
           END DO
        ENDIF
@@ -481,7 +479,6 @@ CONTAINS
     CHARACTER(len=5)                         :: YK_FILE  
     CHARACTER(len=128)                       :: YFILE_IOZ  
     TYPE(FD_ll), POINTER                     :: TZFD_IOZ 
-    TYPE(TFILEDATA),POINTER                  :: TZFILE
     CHARACTER(LEN=:),ALLOCATABLE             :: YMSG
     CHARACTER(LEN=6)                         :: YRESP
     !
@@ -503,7 +500,7 @@ CONTAINS
     TZFD=>GETFD(YFNLFI)
     IF (ASSOCIATED(TZFD)) THEN
        IF (GSMONOPROC) THEN ! sequential execution
-          IF (LLFIOUT) CALL IO_WRITE_FIELD_LFI(TPFIELD,TZFD%FLU,PFIELD,IRESP)
+          IF (LLFIOUT) CALL IO_WRITE_FIELD_LFI(TPFILE,TPFIELD,PFIELD,IRESP)
           IF (LIOCDF4) CALL IO_WRITE_FIELD_NC4(TPFILE,TPFIELD,TZFD%CDF,PFIELD,IRESP)
        ELSE ! multiprocessor execution
 #ifndef MNH_INT8
@@ -529,7 +526,7 @@ CONTAINS
           END IF
           !
           IF (ISP == TZFD%OWNER)  THEN
-             IF (LLFIOUT) CALL IO_WRITE_FIELD_LFI(TPFIELD,TZFD%FLU,ZFIELDP,IRESP)
+             IF (LLFIOUT) CALL IO_WRITE_FIELD_LFI(TPFILE,TPFIELD,ZFIELDP,IRESP)
              IF (LIOCDF4) CALL IO_WRITE_FIELD_NC4(TPFILE,TPFIELD,TZFD%CDF,ZFIELDP,IRESP)
           END IF
           !
@@ -648,15 +645,15 @@ CONTAINS
           !    IF (LPACK .AND. L1D .AND. YDIR=='XY') THEN 
           IF (LPACK .AND. L1D .AND. SIZE(PFIELD,1)==IHEXTOT .AND. SIZE(PFIELD,2)==IHEXTOT) THEN 
              ZFIELDP=>PFIELD(JPHEXT+1:JPHEXT+1,JPHEXT+1:JPHEXT+1)
-             IF (LLFIOUT) CALL IO_WRITE_FIELD_LFI(TPFIELD,TZFD%FLU,ZFIELDP,IRESP)
+             IF (LLFIOUT) CALL IO_WRITE_FIELD_LFI(TPFILE,TPFIELD,ZFIELDP,IRESP)
              IF (LIOCDF4) CALL IO_WRITE_FIELD_NC4(TPFILE,TPFIELD,TZFD%CDF,ZFIELDP,IRESP)
              !    ELSE IF (LPACK .AND. L2D .AND. YDIR=='XY') THEN
           ELSEIF (LPACK .AND. L2D .AND. SIZE(PFIELD,2)==IHEXTOT) THEN
              ZFIELDP=>PFIELD(:,JPHEXT+1:JPHEXT+1)
-             IF (LLFIOUT) CALL IO_WRITE_FIELD_LFI(TPFIELD,TZFD%FLU,ZFIELDP,IRESP)
+             IF (LLFIOUT) CALL IO_WRITE_FIELD_LFI(TPFILE,TPFIELD,ZFIELDP,IRESP)
              IF (LIOCDF4) CALL IO_WRITE_FIELD_NC4(TPFILE,TPFIELD,TZFD%CDF,ZFIELDP,IRESP)
           ELSE
-             IF (LLFIOUT) CALL IO_WRITE_FIELD_LFI(TPFIELD,TZFD%FLU,PFIELD,IRESP)
+             IF (LLFIOUT) CALL IO_WRITE_FIELD_LFI(TPFILE,TPFIELD,PFIELD,IRESP)
              IF (LIOCDF4) CALL IO_WRITE_FIELD_NC4(TPFILE,TPFIELD,TZFD%CDF,PFIELD,IRESP)
           END IF
        ELSE ! multiprocessor execution
@@ -730,7 +727,7 @@ CONTAINS
           TIMEZ%T_WRIT2D_GATH=TIMEZ%T_WRIT2D_GATH + T1 - T0
           !
           IF (ISP == TZFD%OWNER)  THEN             
-             IF (LLFIOUT) CALL IO_WRITE_FIELD_LFI(TPFIELD,TZFD%FLU,ZFIELDP,IRESP)
+             IF (LLFIOUT) CALL IO_WRITE_FIELD_LFI(TPFILE,TPFIELD,ZFIELDP,IRESP)
              IF (LIOCDF4) CALL IO_WRITE_FIELD_NC4(TPFILE,TPFIELD,TZFD%CDF,ZFIELDP,IRESP)
           END IF
 #ifdef MNH_GA
@@ -883,15 +880,15 @@ CONTAINS
           !    IF (LPACK .AND. L1D .AND. YDIR=='XY') THEN 
           IF (LPACK .AND. L1D .AND. SIZE(PFIELD,1)==IHEXTOT .AND. SIZE(PFIELD,2)==IHEXTOT) THEN 
              ZFIELDP=>PFIELD(JPHEXT+1:JPHEXT+1,JPHEXT+1:JPHEXT+1,:)
-             IF (LLFIOUT) CALL IO_WRITE_FIELD_LFI(TPFIELD,TZFD%FLU,ZFIELDP,IRESP)
+             IF (LLFIOUT) CALL IO_WRITE_FIELD_LFI(TPFILE,TPFIELD,ZFIELDP,IRESP)
              IF (LIOCDF4) CALL IO_WRITE_FIELD_NC4(TPFILE,TPFIELD,TZFD%CDF,ZFIELDP,IRESP)
              !    ELSE IF (LPACK .AND. L2D .AND. YDIR=='XY') THEN
           ELSEIF (LPACK .AND. L2D .AND. SIZE(PFIELD,2)==IHEXTOT) THEN
              ZFIELDP=>PFIELD(:,JPHEXT+1:JPHEXT+1,:)
-             IF (LLFIOUT) CALL IO_WRITE_FIELD_LFI(TPFIELD,TZFD%FLU,ZFIELDP,IRESP)
+             IF (LLFIOUT) CALL IO_WRITE_FIELD_LFI(TPFILE,TPFIELD,ZFIELDP,IRESP)
              IF (LIOCDF4) CALL IO_WRITE_FIELD_NC4(TPFILE,TPFIELD,TZFD%CDF,ZFIELDP,IRESP)
           ELSE
-             IF (LLFIOUT) CALL IO_WRITE_FIELD_LFI(TPFIELD,TZFD%FLU,PFIELD,IRESP)
+             IF (LLFIOUT) CALL IO_WRITE_FIELD_LFI(TPFILE,TPFIELD,PFIELD,IRESP)
              IF (LIOCDF4) CALL IO_WRITE_FIELD_NC4(TPFILE,TPFIELD,TZFD%CDF,PFIELD,IRESP)
           END IF
        ELSEIF ( (TZFD%nb_procio .eq. 1 ) .OR. ( YDIR == '--' ) ) THEN  ! multiprocessor execution & 1 proc IO
@@ -925,7 +922,7 @@ CONTAINS
           END IF
           !
           IF (ISP == TZFD%OWNER)  THEN
-             IF (LLFIOUT) CALL IO_WRITE_FIELD_LFI(TPFIELD,TZFD%FLU,ZFIELDP,IRESP)
+             IF (LLFIOUT) CALL IO_WRITE_FIELD_LFI(TPFILE,TPFIELD,ZFIELDP,IRESP)
              IF (LIOCDF4) CALL IO_WRITE_FIELD_NC4(TPFILE,TPFIELD,TZFD%CDF,ZFIELDP,IRESP)
           END IF
           !
@@ -997,7 +994,7 @@ CONTAINS
                CALL SECOND_MNH2(T1)
                TIMEZ%T_WRIT3D_RECV=TIMEZ%T_WRIT3D_RECV + T1 - T0
                !
-               IF (LLFIOUT) CALL IO_WRITE_FIELD_LFI(TPFIELD,TZFD_IOZ%FLU,ZSLIDE_ll,IRESP,KVERTLEVEL=JKK)
+               IF (LLFIOUT) CALL IO_WRITE_FIELD_LFI(TPFILE,TPFIELD,ZSLIDE_ll,IRESP,KVERTLEVEL=JKK)
                IF (LIOCDF4) CALL IO_WRITE_FIELD_NC4(TPFILE,TPFIELD,TZFD_IOZ%CDF,ZSLIDE_ll,IRESP,KVERTLEVEL=JKK,KZFILE=IK_FILE+1)
                CALL SECOND_MNH2(T2)
                TIMEZ%T_WRIT3D_WRIT=TIMEZ%T_WRIT3D_WRIT + T2 - T1
@@ -1116,7 +1113,7 @@ CONTAINS
                    CALL SECOND_MNH2(T1)
                    TIMEZ%T_WRIT3D_RECV=TIMEZ%T_WRIT3D_RECV + T1 - T0
                    !JUANIOZ 
-                   IF (LLFIOUT) CALL IO_WRITE_FIELD_LFI(TPFIELD,TZFD_IOZ%FLU,ZSLIDE_ll,IRESP,KVERTLEVEL=JKK)
+                   IF (LLFIOUT) CALL IO_WRITE_FIELD_LFI(TPFILE,TPFIELD,ZSLIDE_ll,IRESP,KVERTLEVEL=JKK)
                    IF (LIOCDF4) CALL IO_WRITE_FIELD_NC4(TPFILE,TPFIELD,TZFD_IOZ%CDF,ZSLIDE_ll,IRESP,KVERTLEVEL=JKK,KZFILE=IK_FILE+1)
                    CALL SECOND_MNH2(T2)
                    TIMEZ%T_WRIT3D_WRIT=TIMEZ%T_WRIT3D_WRIT + T2 - T1
@@ -1250,10 +1247,10 @@ CONTAINS
              !    ELSE IF (LPACK .AND. L2D .AND. YDIR=='XY') THEN
           ELSEIF (LPACK .AND. L2D .AND. SIZE(PFIELD,2)==IHEXTOT) THEN
              ZFIELDP=>PFIELD(:,JPHEXT+1:JPHEXT+1,:,:)
-             IF (LLFIOUT) CALL IO_WRITE_FIELD_LFI(TPFIELD,TZFD%FLU,ZFIELDP,IRESP)
+             IF (LLFIOUT) CALL IO_WRITE_FIELD_LFI(TPFILE,TPFIELD,ZFIELDP,IRESP)
              IF (LIOCDF4) CALL IO_WRITE_FIELD_NC4(TPFILE,TPFIELD,TZFD%CDF,ZFIELDP,IRESP)
           ELSE
-             IF (LLFIOUT) CALL IO_WRITE_FIELD_LFI(TPFIELD,TZFD%FLU,PFIELD,IRESP)
+             IF (LLFIOUT) CALL IO_WRITE_FIELD_LFI(TPFILE,TPFIELD,PFIELD,IRESP)
              IF (LIOCDF4) CALL IO_WRITE_FIELD_NC4(TPFILE,TPFIELD,TZFD%CDF,PFIELD,IRESP)
           END IF
        ELSE
@@ -1286,7 +1283,7 @@ CONTAINS
           END IF
           !
           IF (ISP == TZFD%OWNER)  THEN
-             IF (LLFIOUT) CALL IO_WRITE_FIELD_LFI(TPFIELD,TZFD%FLU,ZFIELDP,IRESP)
+             IF (LLFIOUT) CALL IO_WRITE_FIELD_LFI(TPFILE,TPFIELD,ZFIELDP,IRESP)
              IF (LIOCDF4) CALL IO_WRITE_FIELD_NC4(TPFILE,TPFIELD,TZFD%CDF,ZFIELDP,IRESP)
           END IF
           !
@@ -1394,10 +1391,10 @@ CONTAINS
              !    ELSE IF (LPACK .AND. L2D .AND. YDIR=='XY') THEN
           ELSEIF (LPACK .AND. L2D .AND. SIZE(PFIELD,2)==IHEXTOT) THEN
              ZFIELDP=>PFIELD(:,JPHEXT+1:JPHEXT+1,:,:,:)
-             IF (LLFIOUT) CALL IO_WRITE_FIELD_LFI(TPFIELD,TZFD%FLU,ZFIELDP,IRESP)
+             IF (LLFIOUT) CALL IO_WRITE_FIELD_LFI(TPFILE,TPFIELD,ZFIELDP,IRESP)
              IF (LIOCDF4) CALL IO_WRITE_FIELD_NC4(TPFILE,TPFIELD,TZFD%CDF,ZFIELDP,IRESP)
           ELSE
-             IF (LLFIOUT) CALL IO_WRITE_FIELD_LFI(TPFIELD,TZFD%FLU,PFIELD,IRESP)
+             IF (LLFIOUT) CALL IO_WRITE_FIELD_LFI(TPFILE,TPFIELD,PFIELD,IRESP)
              IF (LIOCDF4) CALL IO_WRITE_FIELD_NC4(TPFILE,TPFIELD,TZFD%CDF,PFIELD,IRESP)
           END IF
        ELSE
@@ -1431,7 +1428,7 @@ CONTAINS
           END IF
           !
           IF (ISP == TZFD%OWNER)  THEN
-             IF (LLFIOUT) CALL IO_WRITE_FIELD_LFI(TPFIELD,TZFD%FLU,ZFIELDP,IRESP)
+             IF (LLFIOUT) CALL IO_WRITE_FIELD_LFI(TPFILE,TPFIELD,ZFIELDP,IRESP)
              IF (LIOCDF4) CALL IO_WRITE_FIELD_NC4(TPFILE,TPFIELD,TZFD%CDF,ZFIELDP,IRESP)
           END IF
           !
@@ -1532,7 +1529,7 @@ CONTAINS
     TZFD=>GETFD(YFNLFI)
     IF (ASSOCIATED(TZFD)) THEN
        IF (GSMONOPROC) THEN ! sequential execution
-          IF (LLFIOUT) CALL IO_WRITE_FIELD_LFI(TPFIELD,TZFD%FLU,PFIELD,IRESP)
+          IF (LLFIOUT) CALL IO_WRITE_FIELD_LFI(TPFILE,TPFIELD,PFIELD,IRESP)
           IF (LIOCDF4) CALL IO_WRITE_FIELD_NC4(TPFILE,TPFIELD,TZFD%CDF,PFIELD,IRESP)
        ELSE
 #ifndef MNH_INT8
@@ -1560,7 +1557,7 @@ CONTAINS
           END IF
           !
           IF (ISP == TZFD%OWNER)  THEN
-             IF (LLFIOUT) CALL IO_WRITE_FIELD_LFI(TPFIELD,TZFD%FLU,ZFIELDP,IRESP)
+             IF (LLFIOUT) CALL IO_WRITE_FIELD_LFI(TPFILE,TPFIELD,ZFIELDP,IRESP)
              IF (LIOCDF4) CALL IO_WRITE_FIELD_NC4(TPFILE,TPFIELD,TZFD%CDF,ZFIELDP,IRESP)
           END IF
           !
@@ -1646,11 +1643,11 @@ CONTAINS
     TZFD=>GETFD(TRIM(ADJUSTL(TPFILE%CNAME))//'.lfi')
     IF (ASSOCIATED(TZFD)) THEN
        IF (GSMONOPROC) THEN ! sequential execution
-          IF (LLFIOUT) CALL IO_WRITE_FIELD_LFI(TPFIELD,TZFD%FLU,KFIELD,IRESP)
+          IF (LLFIOUT) CALL IO_WRITE_FIELD_LFI(TPFILE,TPFIELD,KFIELD,IRESP)
           IF (LIOCDF4) CALL IO_WRITE_FIELD_NC4(TPFILE,TPFIELD,TZFD%CDF,KFIELD,IRESP)
        ELSE 
           IF (ISP == TZFD%OWNER)  THEN
-             IF (LLFIOUT) CALL IO_WRITE_FIELD_LFI(TPFIELD,TZFD%FLU,KFIELD,IRESP)
+             IF (LLFIOUT) CALL IO_WRITE_FIELD_LFI(TPFILE,TPFIELD,KFIELD,IRESP)
              IF (LIOCDF4) CALL IO_WRITE_FIELD_NC4(TPFILE,TPFIELD,TZFD%CDF,KFIELD,IRESP)
           END IF
           !
@@ -1664,15 +1661,13 @@ CONTAINS
              TZFD_IOZ => GETFD(YFILE_IOZ)   
              IK_RANK = TZFD_IOZ%OWNER
              IF ( ISP == IK_RANK )  THEN
-                IF (LLFIOUT) CALL IO_WRITE_FIELD_LFI(TPFIELD,TZFD_IOZ%FLU,KFIELD,IRESP)
-                IF (LIOCDF4) THEN
-                  CALL IO_FILE_FIND_BYNAME(TRIM(TPFILE%CNAME)//YK_FILE,TZFILE,IRESP)
-                  IF (IRESP/=0) THEN
-                    CALL PRINT_MSG(NVERB_FATAL,'IO','IO_WRITE_FIELD_BYFIELD_N0','file '//TRIM(TRIM(TPFILE%CNAME)//YK_FILE)//&
-                                   ' not found in list')
-                  END IF
-                  CALL IO_WRITE_FIELD_NC4(TZFILE,TPFIELD,TZFD_IOZ%CDF,KFIELD,IRESP)
+                CALL IO_FILE_FIND_BYNAME(TRIM(TPFILE%CNAME)//YK_FILE,TZFILE,IRESP)
+                IF (IRESP/=0) THEN
+                  CALL PRINT_MSG(NVERB_FATAL,'IO','IO_WRITE_FIELD_BYFIELD_N0','file '//TRIM(TRIM(TPFILE%CNAME)//YK_FILE)//&
+                                  ' not found in list')
                 END IF
+                IF (LLFIOUT) CALL IO_WRITE_FIELD_LFI(TZFILE,TPFIELD,KFIELD,IRESP)
+                IF (LIOCDF4) CALL IO_WRITE_FIELD_NC4(TZFILE,TPFIELD,TZFD_IOZ%CDF,KFIELD,IRESP)
              END IF
           END DO
        ENDIF
@@ -1765,7 +1760,7 @@ CONTAINS
     TZFD=>GETFD(YFNLFI)
     IF (ASSOCIATED(TZFD)) THEN
        IF (GSMONOPROC) THEN ! sequential execution
-          IF (LLFIOUT) CALL IO_WRITE_FIELD_LFI(TPFIELD,TZFD%FLU,KFIELD,IRESP)
+          IF (LLFIOUT) CALL IO_WRITE_FIELD_LFI(TPFILE,TPFIELD,KFIELD,IRESP)
           IF (LIOCDF4) CALL IO_WRITE_FIELD_NC4(TPFILE,TPFIELD,TZFD%CDF,KFIELD,IRESP)
        ELSE ! multiprocessor execution
 #ifndef MNH_INT8
@@ -1791,7 +1786,7 @@ CONTAINS
           END IF
           !
           IF (ISP == TZFD%OWNER)  THEN
-             IF (LLFIOUT) CALL IO_WRITE_FIELD_LFI(TPFIELD,TZFD%FLU,IFIELDP,IRESP)
+             IF (LLFIOUT) CALL IO_WRITE_FIELD_LFI(TPFILE,TPFIELD,IFIELDP,IRESP)
              IF (LIOCDF4) CALL IO_WRITE_FIELD_NC4(TPFILE,TPFIELD,TZFD%CDF,IFIELDP,IRESP)
           END IF
           !
@@ -1901,15 +1896,15 @@ CONTAINS
        IF (GSMONOPROC) THEN ! sequential execution
           IF (LPACK .AND. L1D .AND. SIZE(KFIELD,1)==IHEXTOT .AND. SIZE(KFIELD,2)==IHEXTOT) THEN 
              IFIELDP=>KFIELD(JPHEXT+1:JPHEXT+1,JPHEXT+1:JPHEXT+1)
-             IF (LLFIOUT) CALL IO_WRITE_FIELD_LFI(TPFIELD,TZFD%FLU,IFIELDP,IRESP)
+             IF (LLFIOUT) CALL IO_WRITE_FIELD_LFI(TPFILE,TPFIELD,IFIELDP,IRESP)
              IF (LIOCDF4) CALL IO_WRITE_FIELD_NC4(TPFILE,TPFIELD,TZFD%CDF,IFIELDP,IRESP)
              !    ELSE IF (LPACK .AND. L2D .AND. YDIR=='XY') THEN
           ELSEIF (LPACK .AND. L2D .AND. SIZE(KFIELD,2)==IHEXTOT) THEN
              IFIELDP=>KFIELD(:,JPHEXT+1:JPHEXT+1)
-             IF (LLFIOUT) CALL IO_WRITE_FIELD_LFI(TPFIELD,TZFD%FLU,IFIELDP,IRESP)
+             IF (LLFIOUT) CALL IO_WRITE_FIELD_LFI(TPFILE,TPFIELD,IFIELDP,IRESP)
              IF (LIOCDF4) CALL IO_WRITE_FIELD_NC4(TPFILE,TPFIELD,TZFD%CDF,IFIELDP,IRESP)
           ELSE
-             IF (LLFIOUT) CALL IO_WRITE_FIELD_LFI(TPFIELD,TZFD%FLU,KFIELD,IRESP)
+             IF (LLFIOUT) CALL IO_WRITE_FIELD_LFI(TPFILE,TPFIELD,KFIELD,IRESP)
              IF (LIOCDF4) CALL IO_WRITE_FIELD_NC4(TPFILE,TPFIELD,TZFD%CDF,KFIELD,IRESP)
           END IF
        ELSE ! multiprocessor execution
@@ -1946,7 +1941,7 @@ CONTAINS
           TIMEZ%T_WRIT2D_GATH=TIMEZ%T_WRIT2D_GATH + T1 - T0
           !
           IF (ISP == TZFD%OWNER)  THEN             
-             IF (LLFIOUT) CALL IO_WRITE_FIELD_LFI(TPFIELD,TZFD%FLU,IFIELDP,IRESP)
+             IF (LLFIOUT) CALL IO_WRITE_FIELD_LFI(TPFILE,TPFIELD,IFIELDP,IRESP)
              IF (LIOCDF4) CALL IO_WRITE_FIELD_NC4(TPFILE,TPFIELD,TZFD%CDF,IFIELDP,IRESP)
           END IF
           CALL SECOND_MNH2(T2)
@@ -2056,15 +2051,15 @@ CONTAINS
        IF (GSMONOPROC) THEN ! sequential execution
           IF (LPACK .AND. L1D .AND. SIZE(KFIELD,1)==IHEXTOT .AND. SIZE(KFIELD,2)==IHEXTOT) THEN 
              IFIELDP=>KFIELD(JPHEXT+1:JPHEXT+1,JPHEXT+1:JPHEXT+1,:)
-             IF (LLFIOUT) CALL IO_WRITE_FIELD_LFI(TPFIELD,TZFD%FLU,IFIELDP,IRESP)
+             IF (LLFIOUT) CALL IO_WRITE_FIELD_LFI(TPFILE,TPFIELD,IFIELDP,IRESP)
              IF (LIOCDF4) CALL IO_WRITE_FIELD_NC4(TPFILE,TPFIELD,TZFD%CDF,IFIELDP,IRESP)
              !    ELSE IF (LPACK .AND. L2D .AND. YDIR=='XY') THEN
           ELSEIF (LPACK .AND. L2D .AND. SIZE(KFIELD,2)==IHEXTOT) THEN
              IFIELDP=>KFIELD(:,JPHEXT+1:JPHEXT+1,:)
-             IF (LLFIOUT) CALL IO_WRITE_FIELD_LFI(TPFIELD,TZFD%FLU,IFIELDP,IRESP)
+             IF (LLFIOUT) CALL IO_WRITE_FIELD_LFI(TPFILE,TPFIELD,IFIELDP,IRESP)
              IF (LIOCDF4) CALL IO_WRITE_FIELD_NC4(TPFILE,TPFIELD,TZFD%CDF,IFIELDP,IRESP)
           ELSE
-             IF (LLFIOUT) CALL IO_WRITE_FIELD_LFI(TPFIELD,TZFD%FLU,KFIELD,IRESP)
+             IF (LLFIOUT) CALL IO_WRITE_FIELD_LFI(TPFILE,TPFIELD,KFIELD,IRESP)
              IF (LIOCDF4) CALL IO_WRITE_FIELD_NC4(TPFILE,TPFIELD,TZFD%CDF,KFIELD,IRESP)
           END IF
        ELSE ! multiprocessor execution
@@ -2098,7 +2093,7 @@ CONTAINS
           END IF
           !
           IF (ISP == TZFD%OWNER)  THEN             
-             IF (LLFIOUT) CALL IO_WRITE_FIELD_LFI(TPFIELD,TZFD%FLU,IFIELDP,IRESP)
+             IF (LLFIOUT) CALL IO_WRITE_FIELD_LFI(TPFILE,TPFIELD,IFIELDP,IRESP)
              IF (LIOCDF4) CALL IO_WRITE_FIELD_NC4(TPFILE,TPFIELD,TZFD%CDF,IFIELDP,IRESP)
           END IF
           !
@@ -2187,11 +2182,11 @@ CONTAINS
     TZFD=>GETFD(TRIM(ADJUSTL(TPFILE%CNAME))//'.lfi')
     IF (ASSOCIATED(TZFD)) THEN
        IF (GSMONOPROC) THEN ! sequential execution
-          IF (LLFIOUT) CALL IO_WRITE_FIELD_LFI(TPFIELD,TZFD%FLU,OFIELD,IRESP)
+          IF (LLFIOUT) CALL IO_WRITE_FIELD_LFI(TPFILE,TPFIELD,OFIELD,IRESP)
           IF (LIOCDF4) CALL IO_WRITE_FIELD_NC4(TPFILE,TPFIELD,TZFD%CDF,OFIELD,IRESP)
        ELSE
           IF (ISP == TZFD%OWNER)  THEN
-             IF (LLFIOUT) CALL IO_WRITE_FIELD_LFI(TPFIELD,TZFD%FLU,OFIELD,IRESP)
+             IF (LLFIOUT) CALL IO_WRITE_FIELD_LFI(TPFILE,TPFIELD,OFIELD,IRESP)
              IF (LIOCDF4) CALL IO_WRITE_FIELD_NC4(TPFILE,TPFIELD,TZFD%CDF,OFIELD,IRESP)
           END IF
           !
@@ -2205,15 +2200,13 @@ CONTAINS
              TZFD_IOZ => GETFD(YFILE_IOZ)
              IK_RANK = TZFD_IOZ%OWNER
              IF ( ISP == IK_RANK )  THEN
-                IF (LLFIOUT) CALL IO_WRITE_FIELD_LFI(TPFIELD,TZFD_IOZ%FLU,OFIELD,IRESP)
-                IF (LIOCDF4) THEN
-                  CALL IO_FILE_FIND_BYNAME(TRIM(TPFILE%CNAME)//YK_FILE,TZFILE,IRESP)
-                  IF (IRESP/=0) THEN
-                    CALL PRINT_MSG(NVERB_FATAL,'IO','IO_WRITE_FIELD_BYFIELD_L0','file '//TRIM(TRIM(TPFILE%CNAME)//YK_FILE)//&
-                                   ' not found in list')
-                  END IF
-                  CALL IO_WRITE_FIELD_NC4(TZFILE,TPFIELD,TZFD_IOZ%CDF,OFIELD,IRESP)
+                CALL IO_FILE_FIND_BYNAME(TRIM(TPFILE%CNAME)//YK_FILE,TZFILE,IRESP)
+                IF (IRESP/=0) THEN
+                  CALL PRINT_MSG(NVERB_FATAL,'IO','IO_WRITE_FIELD_BYFIELD_L0','file '//TRIM(TRIM(TPFILE%CNAME)//YK_FILE)//&
+                                 ' not found in list')
                 END IF
+                IF (LLFIOUT) CALL IO_WRITE_FIELD_LFI(TZFILE,TPFIELD,OFIELD,IRESP)
+                IF (LIOCDF4) CALL IO_WRITE_FIELD_NC4(TZFILE,TPFIELD,TZFD_IOZ%CDF,OFIELD,IRESP)
              END IF
           END DO
        ENDIF
@@ -2306,7 +2299,7 @@ CONTAINS
     TZFD=>GETFD(YFNLFI)
     IF (ASSOCIATED(TZFD)) THEN
        IF (GSMONOPROC) THEN ! sequential execution
-          IF (LLFIOUT) CALL IO_WRITE_FIELD_LFI(TPFIELD,TZFD%FLU,OFIELD,IRESP)
+          IF (LLFIOUT) CALL IO_WRITE_FIELD_LFI(TPFILE,TPFIELD,OFIELD,IRESP)
           IF (LIOCDF4) CALL IO_WRITE_FIELD_NC4(TPFILE,TPFIELD,TZFD%CDF,OFIELD,IRESP)
        ELSE ! multiprocessor execution
 #ifndef MNH_INT8
@@ -2332,7 +2325,7 @@ CONTAINS
           END IF
           !
           IF (ISP == TZFD%OWNER)  THEN
-             IF (LLFIOUT) CALL IO_WRITE_FIELD_LFI(TPFIELD,TZFD%FLU,GFIELDP,IRESP)
+             IF (LLFIOUT) CALL IO_WRITE_FIELD_LFI(TPFILE,TPFIELD,GFIELDP,IRESP)
              IF (LIOCDF4) CALL IO_WRITE_FIELD_NC4(TPFILE,TPFIELD,TZFD%CDF,GFIELDP,IRESP)
           END IF
           !
@@ -2418,11 +2411,11 @@ CONTAINS
     TZFD=>GETFD(TRIM(ADJUSTL(TPFILE%CNAME))//'.lfi')
     IF (ASSOCIATED(TZFD)) THEN
        IF (GSMONOPROC) THEN ! sequential execution
-          IF (LLFIOUT) CALL IO_WRITE_FIELD_LFI(TPFIELD,TZFD%FLU,HFIELD,IRESP)
+          IF (LLFIOUT) CALL IO_WRITE_FIELD_LFI(TPFILE,TPFIELD,HFIELD,IRESP)
           IF (LIOCDF4) CALL IO_WRITE_FIELD_NC4(TPFILE,TPFIELD,TZFD%CDF,HFIELD,IRESP)
        ELSE 
           IF (ISP == TZFD%OWNER)  THEN
-             IF (LLFIOUT) CALL IO_WRITE_FIELD_LFI(TPFIELD,TZFD%FLU,HFIELD,IRESP)
+             IF (LLFIOUT) CALL IO_WRITE_FIELD_LFI(TPFILE,TPFIELD,HFIELD,IRESP)
              IF (LIOCDF4) CALL IO_WRITE_FIELD_NC4(TPFILE,TPFIELD,TZFD%CDF,HFIELD,IRESP)
           END IF
           !
@@ -2525,11 +2518,11 @@ CONTAINS
     TZFD=>GETFD(TRIM(ADJUSTL(TPFILE%CNAME))//'.lfi')
     IF (ASSOCIATED(TZFD)) THEN
        IF (GSMONOPROC) THEN ! sequential execution
-          IF (LLFIOUT) CALL IO_WRITE_FIELD_LFI(TPFIELD,TZFD%FLU,IFIELD,IRESP)
+          IF (LLFIOUT) CALL IO_WRITE_FIELD_LFI(TPFILE,TPFIELD,IFIELD,IRESP)
           IF (LIOCDF4) CALL IO_WRITE_FIELD_NC4(TPFILE,TPFIELD,TZFD%CDF,HFIELD,IRESP)
        ELSE 
           IF (ISP == TZFD%OWNER)  THEN
-             IF (LLFIOUT) CALL IO_WRITE_FIELD_LFI(TPFIELD,TZFD%FLU,IFIELD,IRESP)
+             IF (LLFIOUT) CALL IO_WRITE_FIELD_LFI(TPFILE,TPFIELD,IFIELD,IRESP)
              IF (LIOCDF4) CALL IO_WRITE_FIELD_NC4(TPFILE,TPFIELD,TZFD%CDF,HFIELD,IRESP)
           END IF
           !
@@ -2610,11 +2603,11 @@ CONTAINS
     TZFD=>GETFD(TRIM(ADJUSTL(TPFILE%CNAME))//'.lfi')
     IF (ASSOCIATED(TZFD)) THEN
        IF (GSMONOPROC) THEN ! sequential execution
-          IF (LLFIOUT) CALL IO_WRITE_FIELD_LFI(TPFIELD,TZFD%FLU,TFIELD,IRESP)
+          IF (LLFIOUT) CALL IO_WRITE_FIELD_LFI(TPFILE,TPFIELD,TFIELD,IRESP)
           IF (LIOCDF4) CALL IO_WRITE_FIELD_NC4(TPFILE,TPFIELD,TZFD%CDF,TFIELD,IRESP)
        ELSE 
           IF (ISP == TZFD%OWNER)  THEN
-             IF (LLFIOUT) CALL IO_WRITE_FIELD_LFI(TPFIELD,TZFD%FLU,TFIELD,IRESP)
+             IF (LLFIOUT) CALL IO_WRITE_FIELD_LFI(TPFILE,TPFIELD,TFIELD,IRESP)
              IF (LIOCDF4) CALL IO_WRITE_FIELD_NC4(TPFILE,TPFIELD,TZFD%CDF,TFIELD,IRESP)
           END IF
           !
@@ -2737,10 +2730,10 @@ CONTAINS
        IF (GSMONOPROC) THEN  ! sequential execution
           IF (LPACK .AND. L2D) THEN
              TX3DP=>PLB(:,JPHEXT+1:JPHEXT+1,:)
-             IF (LLFIOUT) CALL IO_WRITE_FIELD_LFI(TPFIELD,TZFD%FLU,TX3DP,IRESP)
+             IF (LLFIOUT) CALL IO_WRITE_FIELD_LFI(TPFILE,TPFIELD,TX3DP,IRESP)
              IF (LIOCDF4) CALL IO_WRITE_FIELD_NC4(TPFILE,TPFIELD,TZFD%CDF,TX3DP,IRESP)
           ELSE
-             IF (LLFIOUT) CALL IO_WRITE_FIELD_LFI(TPFIELD,TZFD%FLU,PLB,IRESP)
+             IF (LLFIOUT) CALL IO_WRITE_FIELD_LFI(TPFILE,TPFIELD,PLB,IRESP)
              IF (LIOCDF4) CALL IO_WRITE_FIELD_NC4(TPFILE,TPFIELD,TZFD%CDF,PLB,IRESP)
           END IF
        ELSE
@@ -2769,7 +2762,7 @@ CONTAINS
              ELSE
                 TX3DP=>Z3D
              END IF
-             IF (LLFIOUT) CALL IO_WRITE_FIELD_LFI(TPFIELD,TZFD%FLU,TX3DP,IRESP)
+             IF (LLFIOUT) CALL IO_WRITE_FIELD_LFI(TPFILE,TPFIELD,TX3DP,IRESP)
              IF (LIOCDF4) CALL IO_WRITE_FIELD_NC4(TPFILE,TPFIELD,TZFD%CDF,TX3DP,IRESP)
           ELSE
              NB_REQ=0
@@ -2861,7 +2854,7 @@ CONTAINS
              ! take the field as a budget
              ZFIELDP=>PFIELD
           END IF
-          IF (LLFIOUT) CALL IO_WRITE_FIELD_LFI(TPFIELD,TZFD%FLU,ZFIELDP,IRESP)
+          IF (LLFIOUT) CALL IO_WRITE_FIELD_LFI(TPFILE,TPFIELD,ZFIELDP,IRESP)
           IF (LIOCDF4) CALL IO_WRITE_FIELD_NC4(TPFILE,TPFIELD,TZFD%CDF,ZFIELDP,IRESP)
        ELSE ! multiprocessor execution
           IF (ISP == TZFD%OWNER)  THEN
@@ -2878,7 +2871,7 @@ CONTAINS
                & KXOBOX,KXEBOX,KYOBOX,KYEBOX,HBUDGET)
           !
           IF (ISP == TZFD%OWNER)  THEN
-             IF (LLFIOUT) CALL IO_WRITE_FIELD_LFI(TPFIELD,TZFD%FLU,ZFIELDP,IRESP)
+             IF (LLFIOUT) CALL IO_WRITE_FIELD_LFI(TPFILE,TPFIELD,ZFIELDP,IRESP)
              IF (LIOCDF4) CALL IO_WRITE_FIELD_NC4(TPFILE,TPFIELD,TZFD%CDF,ZFIELDP,IRESP)
           END IF
           !
diff --git a/src/LIB/SURCOUCHE/src/modd_io.f90 b/src/LIB/SURCOUCHE/src/modd_io.f90
index 68cb59cbd..9c00048da 100644
--- a/src/LIB/SURCOUCHE/src/modd_io.f90
+++ b/src/LIB/SURCOUCHE/src/modd_io.f90
@@ -82,7 +82,7 @@ TYPE TFILEDATA
   INTEGER :: NLFINPRAR = 0  !Number of predicted articles of the LFI file (non crucial)
   INTEGER :: NLFITYPE  = -1 !Type of the file (used to generate list of files to transfers)
   INTEGER :: NLFIVERB  = 1  !LFI verbosity level
-  INTEGER :: NLFIFLU   = -1 !File identifier
+  INTEGER(KIND=LFI_INT) :: NLFIFLU   = -1 !File identifier
   !
   ! Fields for netCDF files
   INTEGER(KIND=IDCDF_KIND) :: NNCID = -1 !File identifier
-- 
GitLab