From 6b4ed726b735f575aaaf30d0bf145b027e1de035 Mon Sep 17 00:00:00 2001
From: Philippe WAUTELET <philippe.wautelet@aero.obs-mip.fr>
Date: Mon, 29 Oct 2018 17:06:02 +0100
Subject: [PATCH] Philippe 29/10/2018: reduce error level when checking
 metadata of old files

---
 src/LIB/SURCOUCHE/src/fmreadwrit.f90  | 11 ++++++++---
 src/LIB/SURCOUCHE/src/mode_netcdf.f90 | 20 ++++++++++++++++----
 2 files changed, 24 insertions(+), 7 deletions(-)

diff --git a/src/LIB/SURCOUCHE/src/fmreadwrit.f90 b/src/LIB/SURCOUCHE/src/fmreadwrit.f90
index 8093e10a1..b0d3cc7e4 100644
--- a/src/LIB/SURCOUCHE/src/fmreadwrit.f90
+++ b/src/LIB/SURCOUCHE/src/fmreadwrit.f90
@@ -637,9 +637,12 @@ CHARACTER(LEN=12)            :: YVAL_FILE, YVAL_MEM
 CHARACTER(LEN=JPXKRK)        :: YCOMMENT
 CHARACTER(LEN=12)            :: YRESP
 CHARACTER(LEN=LEN_HREC)      :: YRECFM
+LOGICAL                      :: GOLDMNH !if old version of MesoNH (<5.4, old files without complete and correct metadata)
 !
 OGOOD = .TRUE.
 !
+GOLDMNH = TPFILE%NMNHVERSION(1)<5 .OR. (TPFILE%NMNHVERSION(1)==5 .AND. TPFILE%NMNHVERSION(2)<4)
+!
 YRECFM=TRIM(TPFIELD%CMNHNAME)
 IF( LEN_TRIM(TPFIELD%CMNHNAME) > LEN(YRECFM) ) &
   CALL PRINT_MSG(NVERB_WARNING,'IO','IO_READ_CHECK_FIELD_LFI','field name was truncated to '&
@@ -704,15 +707,17 @@ IF(TPFIELD%NGRID==NGRIDUNKNOWN) TPFIELD%NGRID=KWORK(1)
 IF (KWORK(1)/=TPFIELD%NGRID) THEN
   WRITE(YVAL_FILE,'(I12)') KWORK(1)
   WRITE(YVAL_MEM, '(I12)') TPFIELD%NGRID
-  IF (TPFIELD%NDIMS==0) THEN
+  IF (TPFIELD%NDIMS==0 .OR. GOLDMNH) 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
+  IF(.NOT.GOLDMNH) THEN !Do not modify probably incorrect grid number (to prevent problems later with other correct files)
+    TPFIELD%NGRID = KWORK(1)
+    KRESP = -111 !Used later to broadcast modified metadata
+  END IF
 ELSE
   CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_READ_CHECK_FIELD_LFI','expected GRID    found in file for field ' &
                                                             //TRIM(TPFIELD%CMNHNAME))
diff --git a/src/LIB/SURCOUCHE/src/mode_netcdf.f90 b/src/LIB/SURCOUCHE/src/mode_netcdf.f90
index 0c7480e63..bde8bc8cf 100644
--- a/src/LIB/SURCOUCHE/src/mode_netcdf.f90
+++ b/src/LIB/SURCOUCHE/src/mode_netcdf.f90
@@ -2532,18 +2532,28 @@ INTEGER(KIND=IDCDF_KIND), INTENT(IN)    :: KVARID
 INTEGER,                  INTENT(OUT)   :: KRESP  ! return-code
 CHARACTER(LEN=*),OPTIONAL,INTENT(IN)    :: HCALENDAR
 !
+INTEGER                      :: IERRLEVEL
 INTEGER                      :: ILEN
 INTEGER                      :: IGRID
 INTEGER(KIND=IDCDF_KIND)     :: INCID
 INTEGER(KIND=IDCDF_KIND)     :: STATUS
 CHARACTER(LEN=12)            :: YVAL_FILE, YVAL_MEM
 CHARACTER(LEN=:),ALLOCATABLE :: YVALUE
+LOGICAL                      :: GOLDMNH !if old version of MesoNH (<5.4, old files without complete and correct metadata)
 !
 CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_READ_CHECK_FIELD_ATTR_NC4',TRIM(TPFILE%CNAME)//': called for field '//TRIM(TPFIELD%CMNHNAME))
 !
 KRESP = 0
 INCID = TPFILE%NNCID
 !
+GOLDMNH = TPFILE%NMNHVERSION(1)<5 .OR. (TPFILE%NMNHVERSION(1)==5 .AND. TPFILE%NMNHVERSION(2)<4)
+!
+IF (GOLDMNH) THEN !Set a lower level of error if file comes from an old MesoNH version
+  IERRLEVEL = NVERB_WARNING
+ELSE
+  IERRLEVEL = NVERB_ERROR
+END IF
+!
 ! GRID
 !
 STATUS = NF90_GET_ATT(INCID,KVARID,'grid',IGRID)
@@ -2552,11 +2562,13 @@ IF (STATUS == NF90_NOERR) THEN
   IF (IGRID/=TPFIELD%NGRID) THEN
     WRITE(YVAL_FILE,'(I12)') IGRID
     WRITE(YVAL_MEM, '(I12)') TPFIELD%NGRID
-    CALL PRINT_MSG(NVERB_ERROR,'IO','IO_READ_CHECK_FIELD_ATTR_NC4',TRIM(TPFILE%CNAME)// &
+    CALL PRINT_MSG(IERRLEVEL,'IO','IO_READ_CHECK_FIELD_ATTR_NC4',TRIM(TPFILE%CNAME)// &
                    ': expected GRID     value ('//TRIM(ADJUSTL(YVAL_MEM))//             &
                    ') is different than found in file ('//TRIM(ADJUSTL(YVAL_FILE))//') for variable '//TRIM(TPFIELD%CMNHNAME))
-    TPFIELD%NGRID = IGRID
-    KRESP = -111 !Used later to broadcast modified metadata
+    IF (.NOT.GOLDMNH) THEN !Do not modify probably incorrect grid number (to prevent problems later with other correct files)
+      TPFIELD%NGRID = IGRID
+      KRESP = -111 !Used later to broadcast modified metadata
+    END IF
   ELSE
     CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_READ_CHECK_FIELD_ATTR_NC4',TRIM(TPFILE%CNAME)// &
                    ': expected GRID found in file for field '//TRIM(TPFIELD%CMNHNAME))
@@ -2566,7 +2578,7 @@ ELSE !no GRID
     CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_READ_CHECK_FIELD_ATTR_NC4',TRIM(TPFILE%CNAME)// &
                    ': no GRID (as expected) in file for field '//TRIM(TPFIELD%CMNHNAME))
   ELSE
-    CALL PRINT_MSG(NVERB_ERROR,'IO','IO_READ_CHECK_FIELD_ATTR_NC4',TRIM(TPFILE%CNAME)// &
+    CALL PRINT_MSG(IERRLEVEL,'IO','IO_READ_CHECK_FIELD_ATTR_NC4',TRIM(TPFILE%CNAME)// &
                    ': expected GRID but not found in file for field '//TRIM(TPFIELD%CMNHNAME))
   END IF
 ENDIF
-- 
GitLab