From 5bf0d22916484160e0a315f0e890d3dc263ec332 Mon Sep 17 00:00:00 2001
From: Philippe WAUTELET <philippe.wautelet@aero.obs-mip.fr>
Date: Fri, 7 Jul 2017 15:56:58 +0200
Subject: [PATCH] Philippe 07/07/2017: IO: corrected problems when writing
 Z-splitted files * OPEN_ll: added optional argument TPFILE (used for the
 moment for IO_ZSPLIT case) * INI_MODEL_n: add TDIAFILE in file list

---
 src/LIB/SURCOUCHE/src/mode_fm.f90 |  5 +++--
 src/LIB/SURCOUCHE/src/mode_io.f90 | 21 ++++++++++++++++++++-
 src/MNH/ini_modeln.f90            |  8 +++++++-
 3 files changed, 30 insertions(+), 4 deletions(-)

diff --git a/src/LIB/SURCOUCHE/src/mode_fm.f90 b/src/LIB/SURCOUCHE/src/mode_fm.f90
index 13ea018af..9f478552d 100644
--- a/src/LIB/SURCOUCHE/src/mode_fm.f90
+++ b/src/LIB/SURCOUCHE/src/mode_fm.f90
@@ -291,7 +291,7 @@ ENDIF
 IF(YTYPE/='OUTPUT') THEN
   YFNDES=ADJUSTL(TRIM(HFILEM)//'.des')
   CALL OPEN_ll(UNIT=INUMBR,FILE=YFNDES,FORM='FORMATTED',ACTION=HACTION,DELIM&
-       & ='QUOTE',IOSTAT=IRESP,RECL=1024*8,OPARALLELIO=GPARALLELIO)
+       & ='QUOTE',IOSTAT=IRESP,RECL=1024*8,OPARALLELIO=GPARALLELIO,TPFILE=TPFILE)
 ENDIF
 
 IF (IRESP /= 0) GOTO 1000
@@ -311,7 +311,8 @@ TZPARA%FITYP = KFTYPE
     INB_PROCIO = NB_PROCIO_W
  END SELECT
 CALL OPEN_ll(UNIT=INUMBR,FILE=HFILEM,STATUS="UNKNOWN",MODE&
-     & ='IO_ZSPLIT', LFIPAR=TZPARA, ACTION=HACTION, IOSTAT=IRESP,KNB_PROCIO=INB_PROCIO,KMELEV=IMELEV,OPARALLELIO=GPARALLELIO)
+     & ='IO_ZSPLIT', LFIPAR=TZPARA, ACTION=HACTION, IOSTAT=IRESP,KNB_PROCIO=INB_PROCIO,KMELEV=IMELEV,OPARALLELIO=GPARALLELIO,&
+     TPFILE=TPFILE)
 
 IF (IRESP /= 0) GOTO 1000
 
diff --git a/src/LIB/SURCOUCHE/src/mode_io.f90 b/src/LIB/SURCOUCHE/src/mode_io.f90
index f5b365a1e..25fe5b610 100644
--- a/src/LIB/SURCOUCHE/src/mode_io.f90
+++ b/src/LIB/SURCOUCHE/src/mode_io.f90
@@ -225,7 +225,8 @@ CONTAINS
        PAD,      &
        KNB_PROCIO,& 
        KMELEV,&
-       OPARALLELIO)
+       OPARALLELIO,&
+       TPFILE)
 #if defined(MNH_IOCDF4)
   USE MODD_NETCDF, ONLY:IDCDF_KIND
   USE MODE_NETCDF
@@ -251,6 +252,7 @@ CONTAINS
     INTEGER(KIND=LFI_INT), INTENT(IN),  OPTIONAL :: KMELEV    
     LOGICAL,         INTENT(IN),  OPTIONAL :: OPARALLELIO
     !JUANZ
+    TYPE(TFILEDATA), INTENT(IN),  OPTIONAL :: TPFILE
     !
     ! local var
     !
@@ -653,6 +655,7 @@ CONTAINS
           TZFD%FLU = -1
        END IF
        IF (TZFD%NB_PROCIO .GT. 1 ) THEN
+          IF (.NOT.PRESENT(TPFILE)) CALL PRINT_MSG(NVERB_FATAL,'IO','INI_MODEL_n','TPFILE not provided for IO_ZSPLIT case')
           DO ifile=0,TZFD%NB_PROCIO-1
              irank_procio = 1 + io_rank(ifile,ISNPROC,TZFD%NB_PROCIO)
              write(cfile ,'(".Z",i3.3)') ifile+1
@@ -666,6 +669,22 @@ CONTAINS
              TZFD_IOZ%FLU       = -1
              TZFD_IOZ%PARAM     =>LFIPAR
 
+             ALLOCATE(TFILE_LAST%TFILE_NEXT)
+             TFILE_LAST%TFILE_NEXT%TFILE_PREV => TFILE_LAST
+             TFILE_LAST => TFILE_LAST%TFILE_NEXT
+             ! Copy values from 'main' (non-splitted) file
+             TFILE_LAST%CNAME    = TRIM(TPFILE%CNAME)//TRIM(CFILE)
+             TFILE_LAST%CTYPE    = TPFILE%CTYPE
+             TFILE_LAST%CFORMAT  = TPFILE%CFORMAT
+             TFILE_LAST%CMODE    = TPFILE%CMODE
+             !
+             TFILE_LAST%NLFITYPE = TPFILE%NLFITYPE
+             TFILE_LAST%NLFIVERB = TPFILE%NLFIVERB
+             !
+             TFILE_LAST%LNCREDUCE_FLOAT_PRECISION = TPFILE%LNCREDUCE_FLOAT_PRECISION
+             TFILE_LAST%LNCCOMPRESS               = TPFILE%LNCCOMPRESS
+             TFILE_LAST%NNCCOMPRESS_LEVEL         = TPFILE%NNCCOMPRESS_LEVEL
+
              IF ( irank_procio .EQ. ISP ) THEN
 #if defined(MNH_IOCDF4)                   
                 IF (LIOCDF4) THEN
diff --git a/src/MNH/ini_modeln.f90 b/src/MNH/ini_modeln.f90
index e5a52597c..0027d610f 100644
--- a/src/MNH/ini_modeln.f90
+++ b/src/MNH/ini_modeln.f90
@@ -419,7 +419,7 @@ USE MODD_ADVFRC_n
 USE MODD_RELFRC_n
 USE MODD_2D_FRC
 USE MODD_IO_SURF_MNH, ONLY : IO_SURF_MNH_MODEL
-USE MODD_IO_ll,       ONLY : LIOCDF4,LLFIOUT,TFILEDATA
+USE MODD_IO_ll,       ONLY : LIOCDF4,LLFIOUT,TFILEDATA,TFILE_FIRST,TFILE_LAST
 !
 USE MODD_CH_PRODLOSSTOT_n
 USE MODI_CH_INIT_PRODLOSSTOT_n
@@ -1554,6 +1554,12 @@ IF (KMI == 1) THEN
     LUNIT_MODEL(IMI)%TDIAFILE%NLFITYPE   = 1
     LUNIT_MODEL(IMI)%TDIAFILE%NLFIVERB   = NVERB
     LUNIT_MODEL(IMI)%TDIAFILE%TDADFILE => LUNIT_MODEL(NDAD(IMI))%TDIAFILE
+    IF (.NOT.ASSOCIATED(TFILE_FIRST)) THEN
+      TFILE_FIRST => LUNIT_MODEL(IMI)%TDIAFILE
+    ELSE
+      LUNIT_MODEL(IMI)%TDIAFILE%TFILE_PREV => TFILE_LAST
+    END IF
+    TFILE_LAST => LUNIT_MODEL(IMI)%TDIAFILE
   END DO
   !
   IF (CPROGRAM=='MESONH') THEN
-- 
GitLab