diff --git a/src/LIB/SURCOUCHE/src/fmwrit_ll.f90 b/src/LIB/SURCOUCHE/src/fmwrit_ll.f90 index be0a980998777ccf2dadbe6ba25a1f6720f26b46..d9407e80c1b9c2a5edce1a22d70dc0aaf1abc06a 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 97a59426ae90a442d448da078946655741599274..9f237205f5e74ad0471222fa4797c0a472e3358f 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 e3a7cf3e409871d76b372f2113fe72104786b7bf..03d39b4ea712b95d1bc782570ad6bd39017c5995 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 0548761c6f358639de5e313e5133415783f3d1e8..d57b11497ae41c222c3ef821b59d653f22efd1c7 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 0543cfb328aa7d7e3e940ba10234fdfc0cc7b6c9..c54619c640fe85aa45b0e777ecb12e8d02e21f17 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=''