From b453e2a0a8b8a34d690304389d39679c541def78 Mon Sep 17 00:00:00 2001 From: Philippe WAUTELET <philippe.wautelet@aero.obs-mip.fr> Date: Tue, 26 Sep 2017 17:26:56 +0200 Subject: [PATCH] Philippe 26/09/2017: IO: added MNHVERSION field + check it at file opening --- src/LIB/SURCOUCHE/src/fmwrit_ll.f90 | 1 + src/LIB/SURCOUCHE/src/mode_field.f90 | 12 +++++ src/LIB/SURCOUCHE/src/mode_fm.f90 | 68 +++++++++++++++++++++++++++- src/MNH/modd_conf.f90 | 1 + src/MNH/version.f90 | 5 +- 5 files changed, 85 insertions(+), 2 deletions(-) diff --git a/src/LIB/SURCOUCHE/src/fmwrit_ll.f90 b/src/LIB/SURCOUCHE/src/fmwrit_ll.f90 index be0a98099..d9407e80c 100644 --- a/src/LIB/SURCOUCHE/src/fmwrit_ll.f90 +++ b/src/LIB/SURCOUCHE/src/fmwrit_ll.f90 @@ -282,6 +282,7 @@ CONTAINS ! CALL IO_WRITE_HEADER_NC4(TPFILE) ! + CALL IO_WRITE_FIELD(TPFILE,'MNHVERSION', NMNHVERSION) CALL IO_WRITE_FIELD(TPFILE,'MASDEV', NMASDEV) CALL IO_WRITE_FIELD(TPFILE,'BUGFIX', NBUGFIX) CALL IO_WRITE_FIELD(TPFILE,'BIBUSER', CBIBUSER) diff --git a/src/LIB/SURCOUCHE/src/mode_field.f90 b/src/LIB/SURCOUCHE/src/mode_field.f90 index 97a59426a..9f237205f 100644 --- a/src/LIB/SURCOUCHE/src/mode_field.f90 +++ b/src/LIB/SURCOUCHE/src/mode_field.f90 @@ -132,6 +132,18 @@ CALL PRINT_MSG(NVERB_DEBUG,'GEN','INI_FIELD_LIST',YMSG) IDX = 1 ! IF(IDX>MAXFIELDS) CALL ERR_INI_FIELD_LIST() +TFIELDLIST(IDX)%CMNHNAME = 'MNHVERSION' +TFIELDLIST(IDX)%CSTDNAME = '' +TFIELDLIST(IDX)%CLONGNAME = 'MesoNH version' +TFIELDLIST(IDX)%CUNITS = '' +TFIELDLIST(IDX)%CDIR = '--' +TFIELDLIST(IDX)%CCOMMENT = '' +TFIELDLIST(IDX)%NGRID = 0 +TFIELDLIST(IDX)%NTYPE = TYPEINT +TFIELDLIST(IDX)%NDIMS = 1 +IDX = IDX+1 +! +IF(IDX>MAXFIELDS) CALL ERR_INI_FIELD_LIST() TFIELDLIST(IDX)%CMNHNAME = 'MASDEV' TFIELDLIST(IDX)%CSTDNAME = '' TFIELDLIST(IDX)%CLONGNAME = 'MesoNH version (without bugfix)' diff --git a/src/LIB/SURCOUCHE/src/mode_fm.f90 b/src/LIB/SURCOUCHE/src/mode_fm.f90 index e3a7cf3e4..03d39b4ea 100644 --- a/src/LIB/SURCOUCHE/src/mode_fm.f90 +++ b/src/LIB/SURCOUCHE/src/mode_fm.f90 @@ -134,8 +134,11 @@ END SUBROUTINE FMLOOK_ll SUBROUTINE IO_FILE_OPEN_ll(TPFILE,HFIPRI,KRESP,OPARALLELIO) ! +USE MODD_CONF, ONLY: NMNHVERSION USE MODD_IO_ll, ONLY: ISP,LIOCDF4,LLFIOUT,LLFIREAD,TFILEDATA USE MODE_FD_ll, ONLY: FD_ll,GETFD +USE MODE_FIELD, ONLY: TFIELDDATA,TYPEINT +USE MODE_FMREAD USE MODE_IO_MANAGE_STRUCT, ONLY: IO_FILE_FIND_BYNAME ! TYPE(TFILEDATA),POINTER,INTENT(INOUT) :: TPFILE ! File structure @@ -145,7 +148,11 @@ LOGICAL, INTENT(IN), OPTIONAL :: OPARALLELIO ! INTEGER :: ININAR ! Number of articles present in LFI file (unused here) INTEGER :: IRESP -TYPE(FD_ll), POINTER :: TZFDLFI +INTEGER :: IMASDEV,IBUGFIX +INTEGER,DIMENSION(3) :: IMNHVERSION +CHARACTER(LEN=12) :: YMNHVERSION_FILE,YMNHVERSION_CURR +TYPE(FD_ll), POINTER :: TZFDLFI +TYPE(TFIELDDATA) :: TZFIELD TYPE(TFILEDATA),POINTER :: TZFILE_DUMMY ! CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_FILE_OPEN_ll','opening '//TRIM(TPFILE%CNAME)//' for '//TRIM(TPFILE%CMODE)) @@ -192,6 +199,65 @@ ELSE IF (TRIM(TPFILE%CMODE) /= 'READ' .AND. TRIM(TPFILE%CMODE) /= 'WRITE') THEN CALL PRINT_MSG(NVERB_FATAL,'IO','IO_FILE_OPEN_ll','unknown opening mode ('//TRIM(TPFILE%CMODE)//') for '//TRIM(TPFILE%CNAME)) END IF ! +!Compare MNHVERSION of file with current version +IF (TRIM(TPFILE%CMODE) == 'READ' .AND. ISP == TZFDLFI%OWNER) THEN + IMNHVERSION(:) = 0 + !Use TZFIELD because TFIELDLIST could be not initialised + TZFIELD%CMNHNAME = 'MNHVERSION' + TZFIELD%CSTDNAME = '' + TZFIELD%CLONGNAME = 'MesoNH version' + TZFIELD%CUNITS = '' + TZFIELD%CDIR = '--' + TZFIELD%CCOMMENT = '' + TZFIELD%NGRID = 0 + TZFIELD%NTYPE = TYPEINT + TZFIELD%NDIMS = 1 + CALL IO_READ_FIELD(TPFILE,TZFIELD,IMNHVERSION,IRESP) + IF (IRESP/=0) THEN + TZFIELD%CMNHNAME = 'MASDEV' + TZFIELD%CLONGNAME = 'MesoNH version (without bugfix)' + CALL IO_READ_FIELD(TPFILE,TZFIELD,IMASDEV,IRESP) + IF (IRESP/=0) THEN + CALL PRINT_MSG(NVERB_WARNING,'IO','IO_FILE_OPEN_ll','unknown MASDEV version for '//TRIM(TPFILE%CNAME)) + ELSE + IMNHVERSION(1)=IMASDEV/10 + IMNHVERSION(2)=MOD(IMASDEV,10) + END IF + ! + TZFIELD%CMNHNAME = 'BUGFIX' + TZFIELD%CLONGNAME = 'MesoNH bugfix number' + CALL IO_READ_FIELD(TPFILE,TZFIELD,IBUGFIX,IRESP) + IF (IRESP/=0) THEN + CALL PRINT_MSG(NVERB_WARNING,'IO','IO_FILE_OPEN_ll','unknown BUGFIX version for '//TRIM(TPFILE%CNAME)) + ELSE + IMNHVERSION(3)=IBUGFIX + END IF + END IF + ! + WRITE(YMNHVERSION_FILE,"( I0,'.',I0,'.',I0 )" ) IMNHVERSION(1),IMNHVERSION(2),IMNHVERSION(3) + WRITE(YMNHVERSION_CURR,"( I0,'.',I0,'.',I0 )" ) NMNHVERSION(1),NMNHVERSION(2),NMNHVERSION(3) + ! + IF ( IMNHVERSION(1)==0 .AND. IMNHVERSION(2)==0 .AND. IMNHVERSION(3)==0 ) THEN + CALL PRINT_MSG(NVERB_WARNING,'IO','IO_FILE_OPEN_ll','file '//TRIM(TPFILE%CNAME)//& + ' was written with an unknown version of MesoNH') + ELSE IF ( IMNHVERSION(1)< NMNHVERSION(1) .OR. & + (IMNHVERSION(1)==NMNHVERSION(1) .AND. IMNHVERSION(2)< NMNHVERSION(2)) .OR. & + (IMNHVERSION(1)==NMNHVERSION(1) .AND. IMNHVERSION(2)==NMNHVERSION(2) .AND. IMNHVERSION(3)<NMNHVERSION(3)) ) THEN + CALL PRINT_MSG(NVERB_WARNING,'IO','IO_FILE_OPEN_ll','file '//TRIM(TPFILE%CNAME)//& + ' was written with an older version of MesoNH ('//TRIM(YMNHVERSION_FILE)//& + ' instead of '//TRIM(YMNHVERSION_CURR)//')') + ELSE IF ( IMNHVERSION(1)> NMNHVERSION(1) .OR. & + (IMNHVERSION(1)==NMNHVERSION(1) .AND. IMNHVERSION(2)> NMNHVERSION(2)) .OR. & + (IMNHVERSION(1)==NMNHVERSION(1) .AND. IMNHVERSION(2)==NMNHVERSION(2) .AND. IMNHVERSION(3)>NMNHVERSION(3)) ) THEN + CALL PRINT_MSG(NVERB_WARNING,'IO','IO_FILE_OPEN_ll','file '//TRIM(TPFILE%CNAME)//& + ' was written with a more recent version of MesoNH ('//TRIM(YMNHVERSION_FILE)//& + ' instead of '//TRIM(YMNHVERSION_CURR)//')') + ELSE + CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_FILE_OPEN_ll','file '//TRIM(TPFILE%CNAME)//& + ' was written with the same version of MesoNH ('//TRIM(YMNHVERSION_CURR)//')') + END IF +END IF +! END SUBROUTINE IO_FILE_OPEN_ll SUBROUTINE FMOPEN_ll(HFILEM,HACTION,HFIPRI,KNPRAR,KFTYPE,KVERB,KNINAR& diff --git a/src/MNH/modd_conf.f90 b/src/MNH/modd_conf.f90 index 0548761c6..d57b11497 100644 --- a/src/MNH/modd_conf.f90 +++ b/src/MNH/modd_conf.f90 @@ -99,6 +99,7 @@ CHARACTER (LEN=3),SAVE :: CEQNSYS! EQuatioN SYStem resolved by the MESONH model LOGICAL,SAVE :: LPACK ! Logical to compress 1D or 2D FM files ! ! +INTEGER,DIMENSION(3),SAVE :: NMNHVERSION ! Version of MesoNH INTEGER,SAVE :: NMASDEV ! NMASDEV=XY corresponds to the masdevX_Y INTEGER,SAVE :: NBUGFIX ! NBUGFIX=n corresponds to the BUGn of masdevX_Y CHARACTER(LEN=10),SAVE :: CBIBUSER! CBIBUSER is the name of the user binary library diff --git a/src/MNH/version.f90 b/src/MNH/version.f90 index 0543cfb32..c54619c64 100644 --- a/src/MNH/version.f90 +++ b/src/MNH/version.f90 @@ -38,10 +38,13 @@ ! !* 0. DECLARATIONS ! ------------ -USE MODD_CONF, ONLY : NMASDEV,NBUGFIX,CBIBUSER +USE MODD_CONF, ONLY : NMNHVERSION,NMASDEV,NBUGFIX,CBIBUSER ! IMPLICIT NONE ! +NMNHVERSION(1)=5 +NMNHVERSION(2)=3 +NMNHVERSION(3)=0 NMASDEV=53 NBUGFIX=0 CBIBUSER='' -- GitLab