From b8145b1bb1fc97abbb9dd55e36cb45d5d4386165 Mon Sep 17 00:00:00 2001
From: Philippe WAUTELET <philippe.wautelet@aero.obs-mip.fr>
Date: Tue, 15 May 2018 10:45:12 +0200
Subject: [PATCH] Philippe 15/05/2018: IO: bug and problems corrections: *
 IO_READ_CHECK_FIELD_LFI: reduce error level to warning if unexpected grid for
 scalar variable * IO_FILE_OPEN_ll: missing NDIMS for MASDEV * INI_MODEL_n:
 associate TINIFILEPGD to TFILE_DUMMY if necessary * WRITE_BUDGET: set NGRID=1
 for 6D MASK variables * WRITE_DIACHRO: reverted name of field to old behavior
 (kept improved comment) (patch was lost in previous merge) *
 PREPARE_METADATA_WRITE_SURF: keep TPFIELD fieldvalues when in conflict with
 passed values

---
 src/LIB/SURCOUCHE/src/fmreadwrit.f90 |  9 +++++++--
 src/LIB/SURCOUCHE/src/mode_fm.f90    |  1 +
 src/MNH/ini_modeln.f90               |  4 +++-
 src/MNH/write_budget.f90             |  2 +-
 src/MNH/write_diachro.f90            | 12 ++++++------
 src/MNH/write_surf_mnh.f90           | 24 +++++++-----------------
 6 files changed, 25 insertions(+), 27 deletions(-)

diff --git a/src/LIB/SURCOUCHE/src/fmreadwrit.f90 b/src/LIB/SURCOUCHE/src/fmreadwrit.f90
index 7e5f20dc5..ebd3572b1 100644
--- a/src/LIB/SURCOUCHE/src/fmreadwrit.f90
+++ b/src/LIB/SURCOUCHE/src/fmreadwrit.f90
@@ -613,7 +613,7 @@ INTEGER(KIND=LFI_INT),                   INTENT(OUT)   :: KTOTAL
 INTEGER(KIND=LFI_INT),                   INTENT(OUT)   :: KRESP
 LOGICAL,                                 INTENT(OUT)   :: OGOOD
 !
-INTEGER                      :: IROW,J
+INTEGER                      :: IERRLEVEL,IROW,J
 INTEGER,DIMENSION(JPXKRK)    :: ICOMMENT
 INTEGER(KIND=LFI_INT)        :: ICOMLEN,INUMBR,IPOSEX
 CHARACTER(LEN=:),ALLOCATABLE :: YMSG
@@ -687,7 +687,12 @@ ENDIF
 IF (KWORK(1)/=TPFIELD%NGRID) THEN
   WRITE(YVAL_FILE,'(I12)') KWORK(1)
   WRITE(YVAL_MEM, '(I12)') TPFIELD%NGRID
-  CALL PRINT_MSG(NVERB_ERROR,'IO','IO_READ_CHECK_FIELD_LFI','expected GRID value ('//TRIM(ADJUSTL(YVAL_MEM))// &
+  IF (TPFIELD%NDIMS==0) THEN
+    IERRLEVEL = NVERB_WARNING
+  ELSE
+    IERRLEVEL = NVERB_ERROR
+  END IF
+  CALL PRINT_MSG(IERRLEVEL,'IO','IO_READ_CHECK_FIELD_LFI','expected GRID value ('//TRIM(ADJUSTL(YVAL_MEM))// &
                  ') is different than found in file ('//TRIM(ADJUSTL(YVAL_FILE))//') for variable '//TRIM(TPFIELD%CMNHNAME))
   TPFIELD%NGRID = KWORK(1)
   KRESP = -111 !Used later to broadcast modified metadata
diff --git a/src/LIB/SURCOUCHE/src/mode_fm.f90 b/src/LIB/SURCOUCHE/src/mode_fm.f90
index 434009ccf..6a47642fa 100644
--- a/src/LIB/SURCOUCHE/src/mode_fm.f90
+++ b/src/LIB/SURCOUCHE/src/mode_fm.f90
@@ -173,6 +173,7 @@ SELECT CASE(TPFILE%CTYPE)
       IF (IRESP2/=0) THEN
         TZFIELD%CMNHNAME   = 'MASDEV'
         TZFIELD%CLONGNAME  = 'MesoNH version (without bugfix)'
+        TZFIELD%NDIMS      = 0
         CALL IO_READ_FIELD(TPFILE,TZFIELD,IMASDEV,IRESP2)
         IF (IRESP2/=0) THEN
           CALL PRINT_MSG(NVERB_WARNING,'IO','IO_FILE_OPEN_ll','unknown MASDEV version for '//TRIM(TPFILE%CNAME))
diff --git a/src/MNH/ini_modeln.f90 b/src/MNH/ini_modeln.f90
index b2c466e82..4f21d4ef4 100644
--- a/src/MNH/ini_modeln.f90
+++ b/src/MNH/ini_modeln.f90
@@ -424,7 +424,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 : CIO_DIR,TFILEDATA,TFILE_FIRST,TFILE_LAST
+USE MODD_IO_ll,       ONLY : CIO_DIR,TFILEDATA,TFILE_DUMMY,TFILE_FIRST,TFILE_LAST
 !
 USE MODD_CH_PRODLOSSTOT_n
 USE MODI_CH_INIT_PRODLOSSTOT_n
@@ -2084,6 +2084,8 @@ IF (CSURF=='EXTE' .AND. (CPROGRAM=='SPAWN ')) THEN
     CALL PRINT_MSG(NVERB_FATAL,'GEN','INI_MODEL_n','')
   ENDIF
 ENDIF
+!
+IF (.NOT.ASSOCIATED(TINIFILEPGD)) TINIFILEPGD => TFILE_DUMMY
 !
   !* special case after spawning in prep_real_case
 IF (CSURF=='EXRM' .AND. CPROGRAM=='REAL  ') CSURF = 'EXTE'
diff --git a/src/MNH/write_budget.f90 b/src/MNH/write_budget.f90
index 54ea6b7a3..15eb87a89 100644
--- a/src/MNH/write_budget.f90
+++ b/src/MNH/write_budget.f90
@@ -1027,7 +1027,7 @@ SELECT CASE (CBUTYPE)
         TZFIELD%CUNITS     = ''
         TZFIELD%CDIR       = 'XY'
         WRITE(TZFIELD%CCOMMENT,FMT="('X_Y_MASK',I4.4)") NBUTSHIFT
-        TZFIELD%NGRID      = 0
+        TZFIELD%NGRID      = 1
         TZFIELD%NTYPE      = TYPEREAL
         TZFIELD%NDIMS      = 6
         TZFIELD%LTIMEDEP   = .FALSE.
diff --git a/src/MNH/write_diachro.f90 b/src/MNH/write_diachro.f90
index b14011321..544eda16f 100644
--- a/src/MNH/write_diachro.f90
+++ b/src/MNH/write_diachro.f90
@@ -373,12 +373,12 @@ DO J = 1,IP
 ! BUG ...ca passe que si PRESENT(OICP) sinon OICP non defini 
 IF (PRESENT(OICP) .AND. PRESENT(OJCP)) THEN
   IF(HTYPE == 'CART' .AND. .NOT. OICP .AND. .NOT. OJCP) THEN
-    TZFIELD%CMNHNAME   = TRIM(HGROUP)//'.'//TRIM(HTITRE(J))
+    TZFIELD%CMNHNAME   = TRIM(HGROUP)//'.PROC'//YJ
     TZFIELD%CSTDNAME   = ''
     TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
     TZFIELD%CUNITS     = TRIM(HUNITE(J))
     TZFIELD%CDIR       = 'XY'
-    TZFIELD%CCOMMENT   = TRIM(HCOMMENT(J))
+    TZFIELD%CCOMMENT   = TRIM(HTITRE(J))//' - '//TRIM(HCOMMENT(J))//' ('//TRIM(HUNITE(J))//')'
     TZFIELD%NGRID      = KGRID(J)
     TZFIELD%NTYPE      = TYPEREAL
     TZFIELD%NDIMS      = 5
@@ -386,12 +386,12 @@ IF (PRESENT(OICP) .AND. PRESENT(OJCP)) THEN
     CALL IO_WRITE_FIELD_BOX(TPDIAFILE,TZFIELD,'BUDGET',PVAR(:,:,:,:,:,J), &
                             KIL+JPHEXT,KIH+JPHEXT,KJL+JPHEXT,KJH+JPHEXT)
   ELSE
-    TZFIELD%CMNHNAME   = TRIM(HGROUP)//'.'//TRIM(HTITRE(J))
+    TZFIELD%CMNHNAME   = TRIM(HGROUP)//'.PROC'//YJ
     TZFIELD%CSTDNAME   = ''
     TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
     TZFIELD%CUNITS     = TRIM(HUNITE(J))
     TZFIELD%CDIR       = '--'
-    TZFIELD%CCOMMENT   = TRIM(HCOMMENT(J))
+    TZFIELD%CCOMMENT   = TRIM(HTITRE(J))//' - '//TRIM(HCOMMENT(J))//' ('//TRIM(HUNITE(J))//')'
     TZFIELD%NGRID      = KGRID(J)
     TZFIELD%NTYPE      = TYPEREAL
     TZFIELD%NDIMS      = 5
@@ -399,12 +399,12 @@ IF (PRESENT(OICP) .AND. PRESENT(OJCP)) THEN
     CALL IO_WRITE_FIELD(TPDIAFILE,TZFIELD,PVAR(:,:,:,:,:,J))
   ENDIF
 ELSE
-  TZFIELD%CMNHNAME   = TRIM(HGROUP)//'.'//TRIM(HTITRE(J))
+    TZFIELD%CMNHNAME   = TRIM(HGROUP)//'.PROC'//YJ
   TZFIELD%CSTDNAME   = ''
   TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
   TZFIELD%CUNITS     = TRIM(HUNITE(J))
   TZFIELD%CDIR       = '--'
-  TZFIELD%CCOMMENT   = TRIM(HCOMMENT(J))
+  TZFIELD%CCOMMENT   = TRIM(HTITRE(J))//' - '//TRIM(HCOMMENT(J))//' ('//TRIM(HUNITE(J))//')'
   TZFIELD%NGRID      = KGRID(J)
   TZFIELD%NTYPE      = TYPEREAL
   TZFIELD%NDIMS      = 5
diff --git a/src/MNH/write_surf_mnh.f90 b/src/MNH/write_surf_mnh.f90
index f454f46b1..926cb739c 100644
--- a/src/MNH/write_surf_mnh.f90
+++ b/src/MNH/write_surf_mnh.f90
@@ -34,13 +34,13 @@ IF (IRESP==0) THEN
   IF (TRIM(TPFIELD%CLONGNAME)/=TRIM(HREC)) THEN
     CALL PRINT_MSG(NVERB_WARNING,'IO',TRIM(HSUBR),'CLONGNAME different ('//TRIM(TPFIELD%CLONGNAME) &
                    //'/'//TRIM(HREC)//') than expected for article '//TRIM(HREC))
-    TPFIELD%CLONGNAME = TRIM(HREC)
+!     TPFIELD%CLONGNAME = TRIM(HREC)
   END IF
   !Modify and check CDIR
   IF (TPFIELD%CDIR/=HDIR) THEN
     CALL PRINT_MSG(NVERB_WARNING,'IO',TRIM(HSUBR),'CDIR different ('//TRIM(TPFIELD%CDIR) &
                    //'/'//TRIM(HDIR)//') than expected for article '//TRIM(HREC))
-    TPFIELD%CDIR = HDIR
+!     TPFIELD%CDIR = HDIR
   END IF
   !Modify and check CCOMMENT
   IF (LEN_TRIM(HCOMMENT)/=0) THEN
@@ -60,7 +60,7 @@ IF (IRESP==0) THEN
       IF (GWARN) THEN
         CALL PRINT_MSG(NVERB_INFO,'IO',TRIM(HSUBR),'CCOMMENT different ('//TRIM(TPFIELD%CCOMMENT) &
                        //'/'//TRIM(HCOMMENT)//') than expected for article '//TRIM(HREC))
-        TPFIELD%CCOMMENT = TRIM(HCOMMENT)
+!         TPFIELD%CCOMMENT = TRIM(HCOMMENT)
       END IF
     END IF
   ELSE
@@ -72,21 +72,21 @@ IF (IRESP==0) THEN
     WRITE(YTXT,'( I0,"/",I0 )') TPFIELD%NGRID,KGRID
     CALL PRINT_MSG(NVERB_WARNING,'IO',TRIM(HSUBR),'NGRID different ('//TRIM(YTXT) &
                     //') than expected for article '//TRIM(HREC))
-    TPFIELD%NGRID = KGRID
+!     TPFIELD%NGRID = KGRID
   END IF
   !Modify and check NTYPE
   IF (TPFIELD%NTYPE/=KTYPE) THEN
     WRITE(YTXT,'( I0,"/",I0 )') TPFIELD%NTYPE,KTYPE
     CALL PRINT_MSG(NVERB_WARNING,'IO',TRIM(HSUBR),'NTYPE different ('//TRIM(YTXT) &
                     //') than expected for article '//TRIM(HREC))
-    TPFIELD%NTYPE = KTYPE
+!     TPFIELD%NTYPE = KTYPE
   END IF
   !Modify and check NDIMS
   IF (TPFIELD%NDIMS/=KDIMS) THEN
     WRITE(YTXT,'( I0,"/",I0 )') TPFIELD%NDIMS,KDIMS
     CALL PRINT_MSG(NVERB_WARNING,'IO',TRIM(HSUBR),'NDIMS different ('//TRIM(YTXT) &
                     //') than expected for article '//TRIM(HREC))
-    TPFIELD%NDIMS = KDIMS
+!     TPFIELD%NDIMS = KDIMS
   END IF
 ELSE
   CALL PRINT_MSG(NVERB_DEBUG,'IO',TRIM(HSUBR),TRIM(HREC)//' not found in FIELDLIST. Generating default metadata')
@@ -1122,17 +1122,7 @@ IF ( (CSTORAGE_TYPE=='PG' .OR. CSTORAGE_TYPE=='SU')  &
     GCARTESIAN = .TRUE.
   END IF
   !
-  TZFIELD%CMNHNAME   = 'CARTESIAN'
-  TZFIELD%CSTDNAME   = ''
-  TZFIELD%CLONGNAME  = 'CARTESIAN'
-  TZFIELD%CUNITS     = ''
-  TZFIELD%CDIR       = '--'
-  TZFIELD%CCOMMENT   = ''
-  TZFIELD%NGRID      = 0
-  TZFIELD%NTYPE      = TYPELOG
-  TZFIELD%NDIMS      = 0
-  TZFIELD%LTIMEDEP   = .FALSE.
-  CALL IO_WRITE_FIELD(TFILE_SURFEX,TZFIELD,GCARTESIAN,KRESP)
+  CALL IO_WRITE_FIELD(TFILE_SURFEX,'CARTESIAN',GCARTESIAN,KRESP)
   !
   IF (KRESP /=0) THEN
     WRITE ( YMSG, '( I5 )' ) KRESP
-- 
GitLab