diff --git a/src/LIB/SURCOUCHE/src/fmwrit_ll.f90 b/src/LIB/SURCOUCHE/src/fmwrit_ll.f90 index 476113284d41cb37e187641014c16ce30d3ca88d..a83f493351c6e3cf6a49426323526efec5adc619 100644 --- a/src/LIB/SURCOUCHE/src/fmwrit_ll.f90 +++ b/src/LIB/SURCOUCHE/src/fmwrit_ll.f90 @@ -326,7 +326,8 @@ CONTAINS ELSE IF (PRESENT(HDAD_NAME)) THEN YDAD_NAME = HDAD_NAME ELSE - CALL PRINT_MSG(NVERB_WARNING,'IO','IO_WRITE_HEADER','TPFILE%TDADFILE not associated and HDAD_NAME not provided') + CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_WRITE_HEADER',TRIM(TPFILE%CNAME)// & + ': TPFILE%TDADFILE not associated and HDAD_NAME not provided') YDAD_NAME = ' ' ENDIF CALL IO_WRITE_FIELD(TPFILE,'DAD_NAME',YDAD_NAME) diff --git a/src/LIB/SURCOUCHE/src/mode_io_manage_struct.f90 b/src/LIB/SURCOUCHE/src/mode_io_manage_struct.f90 index 676d7795b8431a8cce87fadc276786e08bc27245..7707fe94d801ab640abbf1d3b7624d2fee1ee597 100644 --- a/src/LIB/SURCOUCHE/src/mode_io_manage_struct.f90 +++ b/src/LIB/SURCOUCHE/src/mode_io_manage_struct.f90 @@ -803,7 +803,8 @@ SELECT CASE(TPFILE%CTYPE) END IF ! IF(PRESENT(TPDADFILE)) THEN - IF (.NOT.ASSOCIATED(TPDADFILE)) CALL PRINT_MSG(NVERB_WARNING,'IO','IO_FILE_ADD2LIST','TPDADFILE provided but not associated') + IF (.NOT.ASSOCIATED(TPDADFILE)) CALL PRINT_MSG(NVERB_WARNING,'IO','IO_FILE_ADD2LIST', & + 'TPDADFILE provided but not associated for file '//TRIM(HNAME)) TPFILE%TDADFILE => TPDADFILE ELSE TPFILE%TDADFILE => NULL() diff --git a/src/LIB/SURCOUCHE/src/mode_netcdf.f90 b/src/LIB/SURCOUCHE/src/mode_netcdf.f90 index a274f072cd50304d505a89d752bfa14432d4180b..9e1e598bf1009a9a6fb4cde5eeba0c8640d744af 100644 --- a/src/LIB/SURCOUCHE/src/mode_netcdf.f90 +++ b/src/LIB/SURCOUCHE/src/mode_netcdf.f90 @@ -2090,7 +2090,12 @@ STATUS = NF90_INQUIRE_ATTRIBUTE(INCID, KVARID, 'comment', LEN=ILEN) IF (STATUS == NF90_NOERR) THEN ALLOCATE(CHARACTER(LEN=ILEN) :: YVALUE) STATUS = NF90_GET_ATT(INCID, KVARID, 'comment', YVALUE) - IF (TRIM(YVALUE)/=TRIM(TPFIELD%CCOMMENT)) THEN + IF (LEN_TRIM(TPFIELD%CCOMMENT)==0 .AND. LEN_TRIM(YVALUE)>0) THEN + !Expected comment is empty, read comment is not + CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_READ_CHECK_FIELD_ATTR_NC4',TRIM(TPFILE%CNAME)// & + ': COMMENT found (unexpected) in file for field '//TRIM(TPFIELD%CMNHNAME)) + TPFIELD%CCOMMENT=TRIM(YVALUE) + ELSE IF (TRIM(YVALUE)/=TRIM(TPFIELD%CCOMMENT)) THEN CALL PRINT_MSG(NVERB_INFO,'IO','IO_READ_CHECK_FIELD_ATTR_NC4',TRIM(TPFILE%CNAME)// & ': expected COMMENT ('//TRIM(TPFIELD%CCOMMENT)// & ') is different than found ('//TRIM(YVALUE)//') in file for field '//TRIM(TPFIELD%CMNHNAME)) @@ -2145,7 +2150,7 @@ IF (STATUS == NF90_NOERR) THEN ALLOCATE(CHARACTER(LEN=ILEN) :: YVALUE) STATUS = NF90_GET_ATT(INCID, KVARID, 'long_name', YVALUE) IF (TRIM(YVALUE)/=TRIM(TPFIELD%CLONGNAME)) THEN - CALL PRINT_MSG(NVERB_INFO,'IO','IO_READ_CHECK_FIELD_ATTR_NC4',TRIM(TPFILE%CNAME)// & + CALL PRINT_MSG(NVERB_WARNING,'IO','IO_READ_CHECK_FIELD_ATTR_NC4',TRIM(TPFILE%CNAME)// & ': expected LONGNAME ('//TRIM(TPFIELD%CLONGNAME)// & ') is different than found ('//TRIM(YVALUE)//') in file for field '//TRIM(TPFIELD%CMNHNAME)) TPFIELD%CLONGNAME=TRIM(YVALUE) diff --git a/src/MNH/goto_model_wrapper.f90 b/src/MNH/goto_model_wrapper.f90 index 6082372e64375fb518ca5d431f1bfe1680dbf549..80cc349cb0f0e114a3295ebb9f376a2ed2aa2014 100644 --- a/src/MNH/goto_model_wrapper.f90 +++ b/src/MNH/goto_model_wrapper.f90 @@ -21,14 +21,15 @@ MODULE MODI_GOTO_MODEL_WRAPPER INTERFACE -SUBROUTINE GOTO_MODEL_WRAPPER(KFROM, KTO) -INTEGER,INTENT(IN) :: KFROM, KTO +SUBROUTINE GOTO_MODEL_WRAPPER(KFROM, KTO, ONOFIELDLIST) +INTEGER, INTENT(IN) :: KFROM, KTO +LOGICAL, OPTIONAL, INTENT(IN) :: ONOFIELDLIST END SUBROUTINE GOTO_MODEL_WRAPPER END INTERFACE END MODULE MODI_GOTO_MODEL_WRAPPER -SUBROUTINE GOTO_MODEL_WRAPPER(KFROM, KTO) +SUBROUTINE GOTO_MODEL_WRAPPER(KFROM, KTO, ONOFIELDLIST) ! all USE modd*_n modules USE MODD_ADV_n USE MODD_BIKHARDT_n @@ -118,13 +119,22 @@ USE MODD_CH_BUDGET_n USE MODE_FIELD ! IMPLICIT NONE -INTEGER,INTENT(IN) :: KFROM, KTO +! +INTEGER, INTENT(IN) :: KFROM, KTO +LOGICAL, OPTIONAL, INTENT(IN) :: ONOFIELDLIST ! CHARACTER(LEN=64) :: YMSG +LOGICAL :: GNOFIELDLIST ! WRITE(YMSG,'( I4,"->",I4 )') KFROM,KTO CALL PRINT_MSG(NVERB_DEBUG,'GEN','GOTO_MODEL_WRAPPER',TRIM(YMSG)) ! +IF (PRESENT(ONOFIELDLIST)) THEN + GNOFIELDLIST = ONOFIELDLIST +ELSE + GNOFIELDLIST = .FALSE. +END IF +! ! All calls to specific modd_*n goto_model routines ! CALL ADV_GOTO_MODEL(KFROM, KTO) @@ -211,6 +221,6 @@ CALL RELFRC_GOTO_MODEL(KFROM, KTO) CALL CH_PRODLOSSTOT_GOTO_MODEL(KFROM,KTO) CALL CH_BUDGET_GOTO_MODEL(KFROM,KTO) ! -CALL FIELDLIST_GOTO_MODEL(KFROM, KTO) +IF (.NOT.GNOFIELDLIST) CALL FIELDLIST_GOTO_MODEL(KFROM, KTO) ! END SUBROUTINE GOTO_MODEL_WRAPPER diff --git a/src/MNH/mesonh.f90 b/src/MNH/mesonh.f90 index cbbf300875ea7a58292cc20516c23b25ba39c94c..a2cbb4fd6bb1cd86d3863b5c96fc6ea551538975 100644 --- a/src/MNH/mesonh.f90 +++ b/src/MNH/mesonh.f90 @@ -118,7 +118,7 @@ INTEGER :: IINFO_ll ! return code of // routines ! -------------- ! Switch to model 1 variables CALL MPPDB_INIT() -CALL GOTO_MODEL(1) +CALL GOTO_MODEL(1,ONOFIELDLIST=.TRUE.) ! CALL INITIO_ll() ! diff --git a/src/MNH/mode_modeln_handler.f90 b/src/MNH/mode_modeln_handler.f90 index f97cfe1ea8d12319c8fbb3a7bd9bc68896301d62..2b3bec236d2cedb6680310a89b7c6fb02800b8bb 100644 --- a/src/MNH/mode_modeln_handler.f90 +++ b/src/MNH/mode_modeln_handler.f90 @@ -22,20 +22,21 @@ GET_CURRENT_MODEL_INDEX = ICURRENT_MODEL !! END FUNCTION GET_CURRENT_MODEL_INDEX -SUBROUTINE GOTO_MODEL(KMI) +SUBROUTINE GOTO_MODEL(KMI, ONOFIELDLIST) !JUAN USE MODI_GOTO_MODEL_WRAPPER !JUAN -INTEGER, INTENT(IN) :: KMI +INTEGER, INTENT(IN) :: KMI +LOGICAL, OPTIONAL, INTENT(IN) :: ONOFIELDLIST !! IF (ICURRENT_MODEL == -1) THEN ICURRENT_MODEL = 1 ! Default model index - CALL GOTO_MODEL_WRAPPER(ICURRENT_MODEL, KMI) + CALL GOTO_MODEL_WRAPPER(ICURRENT_MODEL, KMI, ONOFIELDLIST) ICURRENT_MODEL = KMI ELSE IF (ICURRENT_MODEL /= KMI) THEN ! Switch to model KMI, only if necessary - CALL GOTO_MODEL_WRAPPER(ICURRENT_MODEL, KMI) + CALL GOTO_MODEL_WRAPPER(ICURRENT_MODEL, KMI, ONOFIELDLIST) ICURRENT_MODEL = KMI END IF END IF diff --git a/src/MNH/open_nestpgd_files.f90 b/src/MNH/open_nestpgd_files.f90 index cde53086b1dfb3e731142e87167a76c901806d02..2ec5d200f222fff01afc8b006cdec11888498216 100644 --- a/src/MNH/open_nestpgd_files.f90 +++ b/src/MNH/open_nestpgd_files.f90 @@ -309,11 +309,13 @@ DO JPGD=1,NMODEL ! IF (NDAD(JPGD)>=1) THEN TZDADFILE => TPFILENESTPGD(NDAD(JPGD))%TZFILE + CALL IO_FILE_ADD2LIST(TPFILENESTPGD(JPGD)%TZFILE,TRIM(YPGD(JPGD))//'.nest'//ADJUSTL(YNEST),'PREPNESTPGD', & + 'WRITE',KLFITYPE=1,KLFIVERB=NVERB,TPDADFILE=TZDADFILE) ELSE NULLIFY(TZDADFILE) + CALL IO_FILE_ADD2LIST(TPFILENESTPGD(JPGD)%TZFILE,TRIM(YPGD(JPGD))//'.nest'//ADJUSTL(YNEST),'PREPNESTPGD', & + 'WRITE',KLFITYPE=1,KLFIVERB=NVERB) END IF - CALL IO_FILE_ADD2LIST(TPFILENESTPGD(JPGD)%TZFILE,TRIM(YPGD(JPGD))//'.nest'//ADJUSTL(YNEST),'PREPNESTPGD', & - 'WRITE',KLFITYPE=1,KLFIVERB=NVERB,TPDADFILE=TZDADFILE) END DO ! CALL IO_FILE_CLOSE_ll(TZPRE_NEST_PGD) diff --git a/src/MNH/prep_real_case.f90 b/src/MNH/prep_real_case.f90 index 0d15c94ea3228d751f96ce65e2c2e2b75ba3db0a..0cc39c4408b4c967b3da5a274a8dd6a6eb0fffce 100644 --- a/src/MNH/prep_real_case.f90 +++ b/src/MNH/prep_real_case.f90 @@ -544,7 +544,7 @@ TYPE(LIST_ll), POINTER :: TZFIELDS_ll=>NULL() ! list of fields to exchange ! CALL MPPDB_INIT() ! -CALL GOTO_MODEL(1) +CALL GOTO_MODEL(1,ONOFIELDLIST=.TRUE.) ! ZDIAG = 0. CALL SECOND_MNH (ZSTART) diff --git a/src/MNH/read_surf_mnh.f90 b/src/MNH/read_surf_mnh.f90 index 47becd55e7da29efe1616eb9547b5f2682a66b6e..1f41d499012acee3c3f56a29175b7f44a3dbf272 100644 --- a/src/MNH/read_surf_mnh.f90 +++ b/src/MNH/read_surf_mnh.f90 @@ -26,7 +26,8 @@ CALL FIND_FIELD_ID_FROM_MNHNAME(TRIM(HREC),IID,IRESP,ONOWARNING=.TRUE.) IF (IRESP==0) THEN TPFIELD = TFIELDLIST(IID) !Modify and check CLONGNAME - IF (TRIM(TPFIELD%CLONGNAME)/=TRIM(HREC)) THEN + IF (TRIM(TPFIELD%CLONGNAME)/=TRIM(HREC) & + .AND. TRIM(HREC)/='VERSION' .AND. TRIM(HREC)/='BUG') 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) diff --git a/src/MNH/spawning.f90 b/src/MNH/spawning.f90 index a0e5d65c6916d6680c638be7230db5469eba2d86..faedc7418e12a6e7fc041acf2335b7772440a0be 100644 --- a/src/MNH/spawning.f90 +++ b/src/MNH/spawning.f90 @@ -159,7 +159,7 @@ NAMELIST/NAM_CONF_SPAWN/JPHEXT, NHALO CALL MPPDB_INIT() ! ! First Switch to model 1 variables -CALL GOTO_MODEL(1) +CALL GOTO_MODEL(1,ONOFIELDLIST=.TRUE.) ! CALL VERSION CPROGRAM='SPAWN ' diff --git a/src/MNH/write_surf_mnh.f90 b/src/MNH/write_surf_mnh.f90 index 32d061917439cf76f7ec0d1156ae076ea57d807c..74ef2feb05c1ace64b1e0dc79400e276330fc4da 100644 --- a/src/MNH/write_surf_mnh.f90 +++ b/src/MNH/write_surf_mnh.f90 @@ -26,7 +26,8 @@ CHARACTER(LEN=*), INTENT(IN) :: HSUBR ! name of the subroutine calling TYPE(TFIELDDATA), INTENT(OUT) :: TPFIELD ! metadata of field ! CHARACTER(LEN=32) :: YTXT -INTEGER :: IID, IRESP +INTEGER :: IDX,IID, IRESP +LOGICAL :: GWARN ! CALL FIND_FIELD_ID_FROM_MNHNAME(TRIM(HREC),IID,IRESP,ONOWARNING=.TRUE.) IF (IRESP==0) THEN @@ -46,9 +47,23 @@ IF (IRESP==0) THEN !Modify and check CCOMMENT IF (LEN_TRIM(HCOMMENT)/=0) THEN IF (TRIM(TPFIELD%CCOMMENT)/=TRIM(HCOMMENT)) THEN - CALL PRINT_MSG(NVERB_WARNING,'IO',TRIM(HSUBR),'CCOMMENT different ('//TRIM(TPFIELD%CCOMMENT) & - //'/'//TRIM(HCOMMENT)//') than expected for article '//TRIM(HREC)) - TPFIELD%CCOMMENT = TRIM(HCOMMENT) + !Usually in SURFEX fields, units are given at the end of the comment and between parenthesis + !Neglect that part of the comment for comparison + IDX = INDEX(HCOMMENT,'(',BACK=.TRUE.) + IF (IDX/=0) THEN + IF (TRIM(TPFIELD%CCOMMENT)/=TRIM(HCOMMENT(1:IDX-1))) THEN + GWARN = .TRUE. + ELSE + GWARN = .FALSE. + END IF + ELSE + GWARN = .TRUE. + END IF + 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) + END IF END IF ELSE CALL PRINT_MSG(NVERB_DEBUG,'IO',TRIM(HSUBR),'CCOMMENT was empty -> replaced by TPFIELD%CCOMMENT for article ' &