From 8077673d354eeb9fb4736f94211f4e8f53111f46 Mon Sep 17 00:00:00 2001
From: Philippe WAUTELET <philippe.wautelet@aero.obs-mip.fr>
Date: Wed, 6 Feb 2019 13:56:23 +0100
Subject: [PATCH] Philippe 06/02/2019: IO: simplify OPEN_ll and do somme
 assignments at a more logical place

---
 src/LIB/SURCOUCHE/src/modd_io.f90             |   2 +-
 src/LIB/SURCOUCHE/src/mode_fm.f90             |  40 +++---
 src/LIB/SURCOUCHE/src/mode_io.f90             | 132 +++++-------------
 .../SURCOUCHE/src/mode_io_manage_struct.f90   |  28 +++-
 4 files changed, 77 insertions(+), 125 deletions(-)

diff --git a/src/LIB/SURCOUCHE/src/modd_io.f90 b/src/LIB/SURCOUCHE/src/modd_io.f90
index 62a02bf94..48a8f51fb 100644
--- a/src/LIB/SURCOUCHE/src/modd_io.f90
+++ b/src/LIB/SURCOUCHE/src/modd_io.f90
@@ -112,7 +112,7 @@ TYPE TFILEDATA
   INTEGER :: NLU = -1                      !Logical unit number
   INTEGER :: NRECL = -1                    !Fortran RECL (record length)
   CHARACTER(LEN=11) :: CFORM   = "UNKNOWN" !Fortran FORM (FORMATTED/UNFORMATTED)
-  CHARACTER(LEN=10) :: CACCESS = "UNKNOWN" !Fortran ACCESS (DIRECT/SEQUENTIAL)
+  CHARACTER(LEN=10) :: CACCESS = "UNKNOWN" !Fortran ACCESS (DIRECT/SEQUENTIAL/STREAM)
   !
   TYPE(TFILEDATA),POINTER :: TDADFILE   => NULL() !Corresponding dad file
   TYPE(TFILEDATA),POINTER :: TDESFILE   => NULL() !Corresponding .des file
diff --git a/src/LIB/SURCOUCHE/src/mode_fm.f90 b/src/LIB/SURCOUCHE/src/mode_fm.f90
index aad356646..f8d071b9f 100644
--- a/src/LIB/SURCOUCHE/src/mode_fm.f90
+++ b/src/LIB/SURCOUCHE/src/mode_fm.f90
@@ -13,6 +13,8 @@
 !                                 of NNCID and NLFIFLU to the nc4 and lfi subroutines
 !  Philippe Wautelet: 21/01/2019: add LIO_ALLOW_NO_BACKUP and LIO_NO_WRITE to modd_io_ll
 !                                 to allow to disable writes (for bench purposes)
+!  P. Wautelet 06/02/2019: simplify OPEN_ll and do somme assignments at a more logical place
+!  P. Wautelet 07/02/2019: force TYPE to a known value for IO_FILE_ADD2LIST
 !-----------------------------------------------------------------
 
 MODULE MODE_FM
@@ -95,22 +97,22 @@ IF (IRESP/=0) CALL PRINT_MSG(NVERB_ERROR,'IO','IO_FILE_OPEN_ll','file '//TRIM(TP
 SELECT CASE(TPFILE%CTYPE)
   !Chemistry input files
   CASE('CHEMINPUT')
-    CALL OPEN_ll(TPFILE,IOSTAT=IRESP,FORM='FORMATTED',POSITION='REWIND',STATUS='OLD',MODE='GLOBAL')
+    CALL OPEN_ll(TPFILE,IOSTAT=IRESP,POSITION='REWIND',STATUS='OLD',MODE='GLOBAL')
 
 
   !Chemistry tabulation files
   CASE('CHEMTAB')
-    CALL OPEN_ll(TPFILE,IOSTAT=IRESP,FORM='FORMATTED',MODE='GLOBAL')
+    CALL OPEN_ll(TPFILE,IOSTAT=IRESP,MODE='GLOBAL')
 
 
   !GPS files
   CASE('GPS')
-    CALL OPEN_ll(TPFILE,IOSTAT=IRESP,FORM='FORMATTED',MODE='SPECIFIC')
+    CALL OPEN_ll(TPFILE,IOSTAT=IRESP,MODE='SPECIFIC')
 
 
   !Meteo files
   CASE('METEO')
-   CALL OPEN_ll(TPFILE,IOSTAT=IRESP,FORM='UNFORMATTED',MODE='GLOBAL',RECL=100000000)
+   CALL OPEN_ll(TPFILE,IOSTAT=IRESP,MODE='GLOBAL')
 
 
   !Namelist files
@@ -120,27 +122,17 @@ SELECT CASE(TPFILE%CTYPE)
 
   !OUTPUTLISTING files
   CASE('OUTPUTLISTING')
-    CALL OPEN_ll(TPFILE,IOSTAT=IRESP,FORM='FORMATTED',MODE='GLOBAL')
+    CALL OPEN_ll(TPFILE,IOSTAT=IRESP,MODE='GLOBAL')
 
 
   !SURFACE_DATA files
   CASE('SURFACE_DATA')
-    IF (TPFILE%CFORM=='FORMATTED') THEN
-      CALL OPEN_ll(TPFILE,IOSTAT=IRESP,FORM=TPFILE%CFORM,MODE='GLOBAL')
-    ELSE IF (TPFILE%CACCESS=='DIRECT') THEN
-      CALL OPEN_ll(TPFILE,IOSTAT=IRESP,FORM=TPFILE%CFORM,ACCESS=TPFILE%CACCESS,RECL=TPFILE%NRECL,MODE='GLOBAL')
-    ELSE
-      CALL OPEN_ll(TPFILE,IOSTAT=IRESP,FORM=TPFILE%CFORM,MODE='GLOBAL')
-    END IF
+    CALL OPEN_ll(TPFILE,IOSTAT=IRESP,MODE='GLOBAL')
 
 
   !Text files
   CASE('TXT')
-    IF(TPFILE%NRECL>0) THEN
-      CALL OPEN_ll(TPFILE,IOSTAT=IRESP,FORM='FORMATTED',POSITION=HPOSITION,STATUS=HSTATUS,RECL=TPFILE%NRECL,MODE='GLOBAL')
-    ELSE
-      CALL OPEN_ll(TPFILE,IOSTAT=IRESP,FORM='FORMATTED',POSITION=HPOSITION,STATUS=HSTATUS,MODE='GLOBAL')
-    END IF
+    CALL OPEN_ll(TPFILE,IOSTAT=IRESP,POSITION=HPOSITION,STATUS=HSTATUS,MODE='GLOBAL')
 
 
   CASE DEFAULT
@@ -148,7 +140,7 @@ SELECT CASE(TPFILE%CTYPE)
     IF(TPFILE%CTYPE/='OUTPUT' .AND. CPROGRAM/='LFICDF') THEN
       CALL IO_FILE_ADD2LIST(TZFILE_DES,TRIM(TPFILE%CNAME)//'.des','DES',TPFILE%CMODE,TPDATAFILE=TPFILE,OOLD=.TRUE.) !OOLD=T because the file may already be in the list
       CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_FILE_OPEN_ll','OPEN_ll for '//TRIM(TPFILE%CNAME)//'.des')
-      CALL OPEN_ll(TZFILE_DES,FORM='FORMATTED',DELIM='QUOTE',IOSTAT=IRESP,RECL=1024*8,OPARALLELIO=OPARALLELIO)
+      CALL OPEN_ll(TZFILE_DES,IOSTAT=IRESP,DELIM='QUOTE',OPARALLELIO=OPARALLELIO)
       TZFILE_DES%LOPENED       = .TRUE.
       TZFILE_DES%NOPEN_CURRENT = TZFILE_DES%NOPEN_CURRENT + 1
       TZFILE_DES%NOPEN         = TZFILE_DES%NOPEN + 1
@@ -221,7 +213,8 @@ ENDIF
  CASE('WRITE')
     INB_PROCIO = NB_PROCIO_W
  END SELECT
-CALL OPEN_ll(TPFILE,STATUS="UNKNOWN",MODE='IO_ZSPLIT',IOSTAT=IRESP,     &
+
+CALL OPEN_ll(TPFILE,IOSTAT=IRESP,MODE='IO_ZSPLIT',     &
              KNB_PROCIO=INB_PROCIO,OPARALLELIO=GPARALLELIO,HPROGRAM_ORIG=HPROGRAM_ORIG)
 
 IF (IRESP /= 0) GOTO 1000
@@ -459,7 +452,7 @@ USE MODI_SYSTEM_MNH
   use mode_io_write_nc4, only: io_write_coordvar_nc4
 #endif
 TYPE(TFILEDATA),      INTENT(INOUT)         :: TPFILE ! File structure
-INTEGER,              INTENT(OUT), OPTIONAL :: KRESP   ! return-code if problems araised
+INTEGER,              INTENT(OUT)           :: KRESP   ! return-code if problems araised
 LOGICAL,              INTENT(IN),  OPTIONAL :: OPARALLELIO
 CHARACTER(LEN=*),     INTENT(IN),  OPTIONAL :: HPROGRAM_ORIG !To emulate a file coming from this program
 
@@ -523,16 +516,15 @@ IF (TPFILE%LMASTER) THEN
     CASE(1)
       YCPIO='MESONH'
     CASE(2)
-      PRINT *,'FILE ',YFILEM,' NOT TRANSFERED'
+      CALL PRINT_MSG(NVERB_INFO,'IO','FMCLOS_ll','file '//TRIM(YFILEM)//' not transferred')
       GOTO 500
     CASE(3:)
       IRESP=-66
       GOTO 500
     END SELECT
-!   WRITE (YCOMMAND,*) YTRANS,' ',YCPIO,' ',YFILEM
     ICPT=ICPT+1
     WRITE (YCOMMAND,'(A," ",A," ",A," >> OUTPUT_TRANSFER",I3.3,"  2>&1 &")') TRIM(YTRANS),TRIM(YCPIO),TRIM(YFILEM),ICPT
-    PRINT *,'YCOMMAND =',YCOMMAND
+    CALL PRINT_MSG(NVERB_INFO,'IO','FMCLOS_ll','YCOMMAND='//TRIM(YCOMMAND))
     CALL SYSTEM_MNH(YCOMMAND)
   END IF
 END IF
@@ -549,7 +541,7 @@ IF (IRESP.NE.0)  THEN
   CALL PRINT_MSG(NVERB_ERROR,'IO','FMCLOS_ll',TRIM(YFILEM)//': exit with IRESP='//TRIM(YRESP))
 END IF
 
-IF (PRESENT(KRESP)) KRESP=IRESP
+KRESP=IRESP
 
 END SUBROUTINE FMCLOS_ll
 
diff --git a/src/LIB/SURCOUCHE/src/mode_io.f90 b/src/LIB/SURCOUCHE/src/mode_io.f90
index 8c6f81e38..56fa4322e 100644
--- a/src/LIB/SURCOUCHE/src/mode_io.f90
+++ b/src/LIB/SURCOUCHE/src/mode_io.f90
@@ -25,6 +25,7 @@
 !     Philippe Wautelet: 10/01/2019: bug: modify some metadata before open calls
 !     Philippe Wautelet: 21/01/2019: add LIO_ALLOW_NO_BACKUP and LIO_NO_WRITE to modd_io_ll to allow
 !                                    to disable writes (for bench purposes)
+!  P. Wautelet 06/02/2019: simplify OPEN_ll and do somme assignments at a more logical place
 !
 MODULE MODE_IO_ll
 
@@ -142,17 +143,11 @@ CONTAINS
 
   SUBROUTINE OPEN_ll(&
        TPFILE,  &
+       IOSTAT,  &
        MODE,    &
-       COMM,    &
        STATUS,  &
-       ACCESS,  &
-       IOSTAT,  &
-       FORM,    &
-       RECL,    &
-       BLANK,   &
        POSITION,&
        DELIM,    &
-       PAD,      &
        KNB_PROCIO,& 
        OPARALLELIO, &
        HPROGRAM_ORIG)
@@ -167,17 +162,11 @@ CONTAINS
   use mode_io_tools,            only: io_rank
 
     TYPE(TFILEDATA), INTENT(INOUT)         :: TPFILE
+    INTEGER,         INTENT(OUT)           :: IOSTAT
     CHARACTER(len=*),INTENT(IN),  OPTIONAL :: MODE
     CHARACTER(len=*),INTENT(IN),  OPTIONAL :: STATUS
-    CHARACTER(len=*),INTENT(IN),  OPTIONAL :: ACCESS
-    INTEGER,         INTENT(OUT)           :: IOSTAT
-    CHARACTER(len=*),INTENT(IN),  OPTIONAL :: FORM
-    INTEGER,         INTENT(IN),  OPTIONAL :: RECL
-    CHARACTER(len=*),INTENT(IN),  OPTIONAL :: BLANK
     CHARACTER(len=*),INTENT(IN),  OPTIONAL :: POSITION
     CHARACTER(len=*),INTENT(IN),  OPTIONAL :: DELIM
-    CHARACTER(len=*),INTENT(IN),  OPTIONAL :: PAD
-    INTEGER,         INTENT(IN),  OPTIONAL :: COMM
     INTEGER,         INTENT(IN),  OPTIONAL :: KNB_PROCIO
     LOGICAL,         INTENT(IN),  OPTIONAL :: OPARALLELIO
     CHARACTER(LEN=*),INTENT(IN),  OPTIONAL :: HPROGRAM_ORIG !To emulate a file coming from this program
@@ -187,19 +176,14 @@ CONTAINS
     CHARACTER(len=5)                      :: CFILE
     INTEGER                               :: IFILE, IRANK_PROCIO
     CHARACTER(len=20)    :: YSTATUS
-    CHARACTER(len=20)    :: YACCESS
-    CHARACTER(len=20)    :: YFORM
     INTEGER              :: YRECL
     INTEGER ,PARAMETER   :: RECL_DEF = 10000
-    CHARACTER(len=20)    :: YBLANK
     CHARACTER(len=20)    :: YPOSITION
     CHARACTER(len=20)    :: YDELIM
-    CHARACTER(len=20)    :: YPAD
     CHARACTER(len=20)    :: YACTION
     CHARACTER(len=20)    :: YMODE
     CHARACTER(LEN=256)   :: YIOERRMSG
     INTEGER              :: IOS,IRESP
-    INTEGER              :: ICOMM
     LOGICAL               :: GPARALLELIO
     TYPE(TFILEDATA),POINTER :: TZSPLITFILE
     CHARACTER(LEN=:),ALLOCATABLE :: YPREFILENAME !To store the directory + filename
@@ -214,11 +198,6 @@ CONTAINS
     ENDIF
 
     IOS = 0
-    IF (PRESENT(COMM)) THEN 
-       ICOMM = COMM
-    ELSE
-       ICOMM = NMNH_COMM_WORLD ! Default communicator
-    END IF
 
     IF (PRESENT(MODE)) THEN 
        YMODE = MODE
@@ -236,7 +215,7 @@ CONTAINS
        RETURN
     END IF
 
-    IF (.NOT. ANY(YMODE == (/'GLOBAL     ','SPECIFIC   ','DISTRIBUTED' , 'IO_ZSPLIT  '/))) THEN
+    IF (.NOT. ANY(YMODE == (/'GLOBAL     ','SPECIFIC   ', 'IO_ZSPLIT  '/))) THEN
        IOSTAT = 99
        TPFILE%NLU = -1
        CALL PRINT_MSG(NVERB_ERROR,'IO','OPEN_ll','ymode='//TRIM(YMODE)//' not supported')
@@ -248,26 +227,13 @@ CONTAINS
     ELSE
        YSTATUS='UNKNOWN'
     ENDIF
-    IF (PRESENT(ACCESS)) THEN
-       YACCESS=ACCESS
-    ELSE
-       YACCESS='SEQUENTIAL'
-    ENDIF
-    IF (PRESENT(FORM)) THEN
-       YFORM=FORM
-    ELSE
-       YFORM='FORMATTED'
-    ENDIF
-    IF (PRESENT(RECL)) THEN
-       YRECL=RECL
-    ELSE
-       YRECL=RECL_DEF
-    ENDIF
-    IF (PRESENT(BLANK)) THEN
-       YBLANK=BLANK
+
+    IF (TPFILE%NRECL == -1) THEN
+      YRECL = RECL_DEF
     ELSE
-       YBLANK='NULL'
-    ENDIF
+      YRECL = TPFILE%NRECL
+    END IF
+
     IF (PRESENT(POSITION)) THEN
        YPOSITION=POSITION
     ELSE
@@ -278,11 +244,6 @@ CONTAINS
     ELSE
        YDELIM='NONE'
     ENDIF
-    IF (PRESENT(PAD)) THEN
-       YPAD=PAD
-    ELSE
-       YPAD='YES'
-    ENDIF
 
     IF (ALLOCATED(TPFILE%CDIRNAME)) THEN
       IF(LEN_TRIM(TPFILE%CDIRNAME)>0) THEN
@@ -323,64 +284,60 @@ CONTAINS
        IF (TPFILE%LMASTER) THEN
           !! I/O processor case
           !JUAN : 31/03/2000 modif pour acces direct
-          IF (YACCESS=='STREAM') THEN
+          IF (TPFILE%CACCESS=='STREAM') THEN
              OPEN(NEWUNIT=TPFILE%NLU,     &
                   FILE=TRIM(YPREFILENAME),&
                   STATUS=YSTATUS,         &
-                  ACCESS=YACCESS,         &
+                  ACCESS=TPFILE%CACCESS,  &
                   IOSTAT=IOS,             &
                   IOMSG=YIOERRMSG,        &
-                  FORM=YFORM,             &
+                  FORM=TPFILE%CFORM,      &
                   ACTION=YACTION)
-          ELSEIF (YACCESS=='DIRECT') THEN
+          ELSEIF (TPFILE%CACCESS=='DIRECT') THEN
              OPEN(NEWUNIT=TPFILE%NLU,     &
                   FILE=TRIM(YPREFILENAME),&
                   STATUS=YSTATUS,         &
-                  ACCESS=YACCESS,         &
+                  ACCESS=TPFILE%CACCESS,  &
                   IOSTAT=IOS,             &
                   IOMSG=YIOERRMSG,        &
-                  FORM=YFORM,             &
+                  FORM=TPFILE%CFORM,      &
                   RECL=YRECL,             &
                   ACTION=YACTION)
           ELSE
-             IF (YFORM=="FORMATTED") THEN
+             IF (TPFILE%CFORM=="FORMATTED") THEN
                IF (YACTION=='READ') THEN
                 OPEN(NEWUNIT=TPFILE%NLU,     &
                      FILE=TRIM(YPREFILENAME),&
                      STATUS=YSTATUS,         &
-                     ACCESS=YACCESS,         &
+                     ACCESS=TPFILE%CACCESS,  &
                      IOSTAT=IOS,             &
                      IOMSG=YIOERRMSG,        &
-                     FORM=YFORM,             &
+                     FORM=TPFILE%CFORM,      &
                      RECL=YRECL,             &
-                     BLANK=YBLANK,           &
                      POSITION=YPOSITION,     &
-                     ACTION=YACTION,         &
+                     ACTION=YACTION)
                      !DELIM=YDELIM,          & !Philippe: commented because bug with GCC 5.X
-                     PAD=YPAD)
                ELSE
                 OPEN(NEWUNIT=TPFILE%NLU,     &
                      FILE=TRIM(YPREFILENAME),&
                      STATUS=YSTATUS,         &
-                     ACCESS=YACCESS,         &
+                     ACCESS=TPFILE%CACCESS,  &
                      IOSTAT=IOS,             &
                      IOMSG=YIOERRMSG,        &
-                     FORM=YFORM,             &
+                     FORM=TPFILE%CFORM,      &
                      RECL=YRECL,             &
-                     BLANK=YBLANK,           &
                      POSITION=YPOSITION,     &
                      ACTION=YACTION,         &
-                     DELIM=YDELIM,           &
-                     PAD=YPAD)
+                     DELIM=YDELIM)
                ENDIF
              ELSE
                 OPEN(NEWUNIT=TPFILE%NLU,     &
                      FILE=TRIM(YPREFILENAME),&
                      STATUS=YSTATUS,         &
-                     ACCESS=YACCESS,         &
+                     ACCESS=TPFILE%CACCESS,  &
                      IOSTAT=IOS,             &
                      IOMSG=YIOERRMSG,        &
-                     FORM=YFORM,             &
+                     FORM=TPFILE%CFORM,      &
                      RECL=YRECL,             &
                      POSITION=YPOSITION,     &
                      ACTION=YACTION)
@@ -401,14 +358,14 @@ CONTAINS
        TPFILE%LMULTIMASTERS = .TRUE.
        TPFILE%NSUBFILES_IOZ = 0
 
-       IF (ACCESS=='DIRECT') THEN
+       IF (TPFILE%CACCESS=='DIRECT') THEN
           OPEN(NEWUNIT=TPFILE%NLU,                    &
                FILE=TRIM(YPREFILENAME)//SUFFIX(".P"), &
                STATUS=YSTATUS,                        &
-               ACCESS=YACCESS,                        &
+               ACCESS=TPFILE%CACCESS,                 &
                IOSTAT=IOS,                            &
                IOMSG=YIOERRMSG,                       &
-               FORM=YFORM,                            &
+               FORM=TPFILE%CFORM,                     &
                RECL=YRECL,                            &
                ACTION=YACTION)
        ELSE
@@ -416,30 +373,26 @@ CONTAINS
           OPEN(NEWUNIT=TPFILE%NLU,                     &
                FILE=TRIM(YPREFILENAME)//SUFFIX(".P"),  &
                STATUS=YSTATUS,                         &
-               ACCESS=YACCESS,                         &
+               ACCESS=TPFILE%CACCESS,                  &
                IOSTAT=IOS,                             &
                IOMSG=YIOERRMSG,                        &
-               FORM=YFORM,                             &
+               FORM=TPFILE%CFORM,                      &
                RECL=YRECL,                             &
-               BLANK=YBLANK,                           &
                POSITION=YPOSITION,                     &
-               ACTION=YACTION,                         &
+               ACTION=YACTION)
                !DELIM=YDELIM,         & !Philippe: commented because bug with GCC 5.X
-               PAD=YPAD)
          ELSE
           OPEN(NEWUNIT=TPFILE%NLU,                     &
                FILE=TRIM(YPREFILENAME)//SUFFIX(".P"),  &
                STATUS=YSTATUS,                         &
-               ACCESS=YACCESS,                         &
+               ACCESS=TPFILE%CACCESS,                  &
                IOSTAT=IOS,                             &
                IOMSG=YIOERRMSG,                        &
-               FORM=YFORM,                             &
+               FORM=TPFILE%CFORM,                      &
                RECL=YRECL,                             &
-               BLANK=YBLANK,                           &
                POSITION=YPOSITION,                     &
                ACTION=YACTION,                         &
-               DELIM=YDELIM,                           &
-               PAD=YPAD)
+               DELIM=YDELIM)
          ENDIF
        ENDIF
 
@@ -447,19 +400,6 @@ CONTAINS
 
 
 
-    CASE('DISTRIBUTED')
-       TPFILE%NMASTER_RANK  = ISIOP
-       TPFILE%LMASTER       = (ISP == ISIOP)
-       TPFILE%LMULTIMASTERS = .FALSE.
-       TPFILE%NSUBFILES_IOZ = 0
-
-       IF (.NOT.TPFILE%LMASTER) THEN
-          !! NON I/O processors case
-          IOS = 0
-       END IF
-
-
-
     CASE('IO_ZSPLIT')
        TPFILE%NMASTER_RANK  = ISIOP
        TPFILE%LMASTER       = (ISP == ISIOP)
@@ -518,7 +458,7 @@ CONTAINS
 
              TPFILE%TFILES_IOZ(IFILE)%TFILE => TZSPLITFILE
              !Done outside of the previous IF to prevent problems with .OUT files
-             TZSPLITFILE%NMPICOMM      = ICOMM
+             TZSPLITFILE%NMPICOMM      = NMNH_COMM_WORLD
              TZSPLITFILE%NMASTER_RANK  = IRANK_PROCIO
              TZSPLITFILE%LMASTER       = (ISP == IRANK_PROCIO)
              TZSPLITFILE%LMULTIMASTERS = .FALSE.
@@ -559,7 +499,7 @@ CONTAINS
 
     END SELECT
 
-    TPFILE%NMPICOMM = ICOMM
+    TPFILE%NMPICOMM = NMNH_COMM_WORLD
 
     IOSTAT = IOS
 
diff --git a/src/LIB/SURCOUCHE/src/mode_io_manage_struct.f90 b/src/LIB/SURCOUCHE/src/mode_io_manage_struct.f90
index 8745773f0..fcaa58292 100644
--- a/src/LIB/SURCOUCHE/src/mode_io_manage_struct.f90
+++ b/src/LIB/SURCOUCHE/src/mode_io_manage_struct.f90
@@ -11,6 +11,8 @@
 !  Philippe Wautelet: 05/2016-04/2018: new data structures and calls for I/O
 !  Philippe Wautelet: 21/01/2019: add LIO_ALLOW_NO_BACKUP and LIO_NO_WRITE to modd_io_ll
 !                                 to allow to disable writes (for bench purposes)
+!  P. Wautelet 06/02/2019: simplify OPEN_ll and do somme assignments at a more logical place
+!  P. Wautelet 07/02/2019: force TYPE to a known value for IO_FILE_ADD2LIST
 !-----------------------------------------------------------------
 MODULE MODE_IO_MANAGE_STRUCT
 !
@@ -642,7 +644,7 @@ CHARACTER(LEN=*),                INTENT(IN)    :: HNAME     !Filename
 CHARACTER(LEN=*),                INTENT(IN)    :: HTYPE     !Filetype (backup, output, prepidealcase...)
 CHARACTER(LEN=*),                INTENT(IN)    :: HMODE     !Opening mode (read, write...)
 CHARACTER(LEN=*),       OPTIONAL,INTENT(IN)    :: HFORM     !Formatted/unformatted
-CHARACTER(LEN=*),       OPTIONAL,INTENT(IN)    :: HACCESS   !Direct/sequential
+CHARACTER(LEN=*),       OPTIONAL,INTENT(IN)    :: HACCESS   !Direct/sequential/stream
 CHARACTER(LEN=*),       OPTIONAL,INTENT(IN)    :: HFORMAT   !Fileformat (NETCDF4, LFI, LFICDF4...)
 CHARACTER(LEN=*),       OPTIONAL,INTENT(IN)    :: HDIRNAME  !File directory
 INTEGER(KIND=LFI_INT),  OPTIONAL,INTENT(IN)    :: KLFINPRAR !Number of predicted articles of the LFI file (non crucial)
@@ -713,8 +715,8 @@ IF(     PRESENT(HACCESS) .AND. TRIM(HTYPE)/='SURFACE_DATA') &
 IF(.NOT.PRESENT(HACCESS) .AND. TRIM(HTYPE)=='SURFACE_DATA') &
     CALL PRINT_MSG(NVERB_ERROR,'IO','IO_FILE_ADD2LIST','optional argument HACCESS is necessary for '//TRIM(HTYPE)//' files')
 IF(PRESENT(HACCESS)) THEN
-  IF(HACCESS/='DIRECT' .AND. HACCESS/='SEQUENTIAL') &
-    CALL PRINT_MSG(NVERB_ERROR,'IO','IO_FILE_ADD2LIST','HACCESS should be DIRECT or SEQUENTIAL and not '//TRIM(HACCESS))
+  IF(HACCESS/='DIRECT' .AND. HACCESS/='SEQUENTIAL' .AND. HACCESS/='STREAM') &
+    CALL PRINT_MSG(NVERB_ERROR,'IO','IO_FILE_ADD2LIST','HACCESS should be DIRECT, SEQUENTIAL or STREAM and not '//TRIM(HACCESS))
 END IF
 !
 IF (PRESENT(HFORMAT)) THEN
@@ -785,6 +787,8 @@ SELECT CASE(TPFILE%CTYPE)
   CASE('CHEMINPUT')
     IF (TRIM(HMODE)/='READ') & !Invalid because not (yet) necessary
       CALL PRINT_MSG(NVERB_ERROR,'IO','IO_FILE_ADD2LIST','invalid mode '//TRIM(HMODE)//' for file '//TRIM(HNAME))
+    TPFILE%CACCESS = 'SEQUENTIAL'
+    TPFILE%CFORM   = 'FORMATTED'
     TPFILE%CFORMAT = 'TEXT'
 
 
@@ -792,12 +796,17 @@ SELECT CASE(TPFILE%CTYPE)
   CASE('CHEMTAB')
     IF (TRIM(HMODE)/='READ') & !Invalid because not (yet) necessary
       CALL PRINT_MSG(NVERB_ERROR,'IO','IO_FILE_ADD2LIST','invalid mode '//TRIM(HMODE)//' for file '//TRIM(HNAME))
+    TPFILE%CACCESS = 'SEQUENTIAL'
+    TPFILE%CFORM   = 'FORMATTED'
     TPFILE%CFORMAT = 'TEXT'
 
 
   !DES files
   CASE('DES')
+    TPFILE%CACCESS = 'SEQUENTIAL'
+    TPFILE%CFORM   = 'FORMATTED'
     TPFILE%CFORMAT = 'TEXT'
+    TPFILE%NRECL   = 8*1024
     IF (.NOT.PRESENT(TPDATAFILE)) THEN
       CALL PRINT_MSG(NVERB_ERROR,'IO','IO_FILE_ADD2LIST','missing TPDATAFILE argument for DES file '//TRIM(HNAME))
     ELSE
@@ -815,6 +824,8 @@ SELECT CASE(TPFILE%CTYPE)
   CASE('GPS')
     IF (TRIM(HMODE)/='WRITE') & !Invalid because not (yet) necessary
       CALL PRINT_MSG(NVERB_ERROR,'IO','IO_FILE_ADD2LIST','invalid mode '//TRIM(HMODE)//' for file '//TRIM(HNAME))
+    TPFILE%CACCESS = 'SEQUENTIAL'
+    TPFILE%CFORM   = 'FORMATTED'
     TPFILE%CFORMAT = 'TEXT'
 
 
@@ -822,13 +833,18 @@ SELECT CASE(TPFILE%CTYPE)
   CASE('METEO')
     IF (TRIM(HMODE)/='WRITE') & !Invalid because not (yet) necessary
       CALL PRINT_MSG(NVERB_ERROR,'IO','IO_FILE_ADD2LIST','invalid mode '//TRIM(HMODE)//' for file '//TRIM(HNAME))
+    TPFILE%CACCESS = 'SEQUENTIAL'
+    TPFILE%CFORM   = 'UNFORMATTED'
     TPFILE%CFORMAT = 'BINARY'
+    TPFILE%NRECL   = 100000000
 
 
   !Namelist files
   CASE('NML')
     IF (TRIM(HMODE)/='READ') & !Invalid because not (yet) necessary
       CALL PRINT_MSG(NVERB_ERROR,'IO','IO_FILE_ADD2LIST','invalid mode '//TRIM(HMODE)//' for file '//TRIM(HNAME))
+    TPFILE%CACCESS = 'SEQUENTIAL'
+    TPFILE%CFORM   = 'FORMATTED'
     TPFILE%CFORMAT = 'TEXT'
 
 
@@ -836,6 +852,8 @@ SELECT CASE(TPFILE%CTYPE)
   CASE('OUTPUTLISTING')
     IF (TRIM(HMODE)/='WRITE') & !Invalid because not (yet) necessary
       CALL PRINT_MSG(NVERB_ERROR,'IO','IO_FILE_ADD2LIST','invalid mode '//TRIM(HMODE)//' for file '//TRIM(HNAME))
+    TPFILE%CACCESS = 'SEQUENTIAL'
+    TPFILE%CFORM   = 'FORMATTED'
     TPFILE%CFORMAT = 'TEXT'
 
 
@@ -846,11 +864,13 @@ SELECT CASE(TPFILE%CTYPE)
     TPFILE%CFORMAT = 'SURFACE_DATA'
     TPFILE%CFORM   = HFORM
     TPFILE%CACCESS = HACCESS
-    IF(TRIM(HACCESS)=='DIRECT') TPFILE%NRECL   = KRECL
+    IF(TRIM(HACCESS)=='DIRECT') TPFILE%NRECL = KRECL
 
 
   !Text files
   CASE('TXT')
+    TPFILE%CACCESS = 'SEQUENTIAL'
+    TPFILE%CFORM   = 'FORMATTED'
     TPFILE%CFORMAT = 'TEXT'
     IF(PRESENT(KRECL)) TPFILE%NRECL = KRECL
 
-- 
GitLab