Skip to content
Snippets Groups Projects
Commit 0f734e52 authored by WAUTELET Philippe's avatar WAUTELET Philippe
Browse files

Philippe 20/02/2023: IO: add suffix to logicals written from SURFEX (to...

Philippe 20/02/2023: IO: add suffix to logicals written from SURFEX (to prevent name collisions with MesoNH variables)
parent e96000a9
No related branches found
No related tags found
No related merge requests found
!MNH_LIC Copyright 2003-2022 CNRS, Meteo-France and Universite Paul Sabatier !MNH_LIC Copyright 2003-2023 CNRS, Meteo-France and Universite Paul Sabatier
!MNH_LIC This is part of the Meso-NH software governed by the CeCILL-C licence !MNH_LIC This is part of the Meso-NH software governed by the CeCILL-C licence
!MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt !MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt
!MNH_LIC for details. version 1. !MNH_LIC for details. version 1.
...@@ -18,10 +18,12 @@ CONTAINS ...@@ -18,10 +18,12 @@ CONTAINS
SUBROUTINE PREPARE_METADATA_READ_SURF(HREC,HDIR,KGRID,KTYPE,KDIMS,HSUBR,TPFIELD) SUBROUTINE PREPARE_METADATA_READ_SURF(HREC,HDIR,KGRID,KTYPE,KDIMS,HSUBR,TPFIELD)
! !
use modd_field, only: tfieldmetadata, tfieldlist use modd_field, only: tfieldmetadata, tfieldlist
use mode_field, only: Find_field_id_from_mnhname use modd_parameters, only: NMNHNAMELGTMAX
use mode_field, only: Find_field_id_from_mnhname
! !
CHARACTER(LEN=LEN_HREC),INTENT(IN) :: HREC ! name of the article to write CHARACTER(LEN=*), INTENT(IN) :: HREC ! name of the article to write
CHARACTER(LEN=2), INTENT(IN) :: HDIR ! Expected type of the data field (XX,XY,--...) CHARACTER(LEN=2), INTENT(IN) :: HDIR ! Expected type of the data field (XX,XY,--...)
INTEGER, INTENT(IN) :: KGRID ! Localization on the model grid INTEGER, INTENT(IN) :: KGRID ! Localization on the model grid
INTEGER, INTENT(IN) :: KTYPE ! Datatype INTEGER, INTENT(IN) :: KTYPE ! Datatype
...@@ -32,6 +34,9 @@ TYPE(TFIELDMETADATA), INTENT(OUT) :: TPFIELD ! metadata of field ...@@ -32,6 +34,9 @@ TYPE(TFIELDMETADATA), INTENT(OUT) :: TPFIELD ! metadata of field
CHARACTER(LEN=32) :: YTXT CHARACTER(LEN=32) :: YTXT
INTEGER :: IID, IRESP INTEGER :: IID, IRESP
! !
IF ( LEN_TRIM( HREC ) > NMNHNAMELGTMAX ) &
CALL PRINT_MSG( NVERB_WARNING, 'IO', TRIM(HSUBR), 'HREC is too long (' // TRIM(HREC) // ')' )
CALL FIND_FIELD_ID_FROM_MNHNAME(TRIM(HREC),IID,IRESP,ONOWARNING=.TRUE.) CALL FIND_FIELD_ID_FROM_MNHNAME(TRIM(HREC),IID,IRESP,ONOWARNING=.TRUE.)
IF (IRESP==0) THEN IF (IRESP==0) THEN
TPFIELD = TFIELDMETADATA( TFIELDLIST(IID) ) TPFIELD = TFIELDMETADATA( TFIELDLIST(IID) )
...@@ -1591,6 +1596,8 @@ CHARACTER(LEN=*), INTENT(OUT) :: HCOMMENT ! comment ...@@ -1591,6 +1596,8 @@ CHARACTER(LEN=*), INTENT(OUT) :: HCOMMENT ! comment
! !
!* 0.2 Declarations of local variables !* 0.2 Declarations of local variables
! !
CHARACTER(LEN=4), PARAMETER :: YSUFFIX = '_SFX'
INTEGER :: ILUOUT INTEGER :: ILUOUT
TYPE(TFIELDMETADATA) :: TZFIELD TYPE(TFIELDMETADATA) :: TZFIELD
!------------------------------------------------------------------------------- !-------------------------------------------------------------------------------
...@@ -1614,8 +1621,23 @@ IF (HREC=='ECOCLIMAP') THEN ...@@ -1614,8 +1621,23 @@ IF (HREC=='ECOCLIMAP') THEN
END IF END IF
END IF END IF
! !
CALL PREPARE_METADATA_READ_SURF(HREC,'--',0,TYPELOG,0,'READ_SURFL0_MNH',TZFIELD) IF ( TPINFILE%NMNHVERSION(1) < 5 .OR. ( TPINFILE%NMNHVERSION(1) == 5 .AND. TPINFILE%NMNHVERSION(2) < 6 ) ) THEN
CALL IO_Field_read(TPINFILE,TZFIELD,OFIELD,KRESP) CALL PREPARE_METADATA_READ_SURF(HREC,'--',0,TYPELOG,0,'READ_SURFL0_MNH',TZFIELD)
CALL IO_Field_read(TPINFILE,TZFIELD,OFIELD,KRESP)
ELSE
! Add a suffix to logical variables coming from SURFEX
! This is done because some variables can have the same name than MesoNH variables
! This suffix has been added in MesoNH 5.6.0
CALL PREPARE_METADATA_READ_SURF(TRIM(HREC)//YSUFFIX,'--',0,TYPELOG,0,'READ_SURFL0_MNH',TZFIELD)
CALL IO_Field_read(TPINFILE,TZFIELD,OFIELD,KRESP)
IF ( KRESP /= 0 ) THEN
! Retries without the suffix
! Potentially useful if tpinfile was not written with MesoNH
CALL PREPARE_METADATA_READ_SURF(HREC,'--',0,TYPELOG,0,'READ_SURFL0_MNH',TZFIELD)
CALL IO_Field_read(TPINFILE,TZFIELD,OFIELD,KRESP)
END IF
END IF
HCOMMENT = TZFIELD%CCOMMENT HCOMMENT = TZFIELD%CCOMMENT
! !
IF (KRESP /=0) THEN IF (KRESP /=0) THEN
......
...@@ -11,12 +11,13 @@ CONTAINS ...@@ -11,12 +11,13 @@ CONTAINS
SUBROUTINE PREPARE_METADATA_WRITE_SURF(HREC,HDIR,HCOMMENT,KGRID,KTYPE,KDIMS,HSUBR,TPFIELD) SUBROUTINE PREPARE_METADATA_WRITE_SURF(HREC,HDIR,HCOMMENT,KGRID,KTYPE,KDIMS,HSUBR,TPFIELD)
! !
use modd_field, only: tfieldmetadata, tfieldlist, NMNHDIM_UNUSED use modd_field, only: tfieldmetadata, tfieldlist, NMNHDIM_UNUSED
use modd_parameters, only: NMNHNAMELGTMAX
use mode_field, only: Find_field_id_from_mnhname use mode_field, only: Find_field_id_from_mnhname
USE MODE_MSG USE MODE_MSG
! !
CHARACTER(LEN=LEN_HREC),INTENT(IN) :: HREC ! name of the article to write CHARACTER(LEN=*), INTENT(IN) :: HREC ! name of the article to write
CHARACTER(LEN=2), INTENT(IN) :: HDIR ! Expected type of the data field (XX,XY,--...) CHARACTER(LEN=2), INTENT(IN) :: HDIR ! Expected type of the data field (XX,XY,--...)
CHARACTER(LEN=100), INTENT(IN) :: HCOMMENT ! Comment string CHARACTER(LEN=100), INTENT(IN) :: HCOMMENT ! Comment string
INTEGER, INTENT(IN) :: KGRID ! Localization on the model grid INTEGER, INTENT(IN) :: KGRID ! Localization on the model grid
...@@ -29,6 +30,9 @@ CHARACTER(LEN=32) :: YTXT ...@@ -29,6 +30,9 @@ CHARACTER(LEN=32) :: YTXT
INTEGER :: IDX,IID, IRESP INTEGER :: IDX,IID, IRESP
LOGICAL :: GWARN LOGICAL :: GWARN
! !
IF ( LEN_TRIM( HREC ) > NMNHNAMELGTMAX ) &
CALL PRINT_MSG( NVERB_WARNING, 'IO', TRIM(HSUBR), 'HREC is too long (' // TRIM(HREC) // ')' )
CALL FIND_FIELD_ID_FROM_MNHNAME(TRIM(HREC),IID,IRESP,ONOWARNING=.TRUE.) CALL FIND_FIELD_ID_FROM_MNHNAME(TRIM(HREC),IID,IRESP,ONOWARNING=.TRUE.)
IF (IRESP==0) THEN IF (IRESP==0) THEN
TPFIELD = TFIELDMETADATA( TFIELDLIST(IID) ) TPFIELD = TFIELDMETADATA( TFIELDLIST(IID) )
...@@ -1356,6 +1360,8 @@ CHARACTER(LEN=100), INTENT(IN) :: HCOMMENT ! Comment string ...@@ -1356,6 +1360,8 @@ CHARACTER(LEN=100), INTENT(IN) :: HCOMMENT ! Comment string
! !
!* 0.2 Declarations of local variables !* 0.2 Declarations of local variables
! !
CHARACTER(LEN=4), PARAMETER :: YSUFFIX = '_SFX'
CHARACTER(LEN=5) :: YMSG CHARACTER(LEN=5) :: YMSG
TYPE(TFIELDMETADATA) :: TZFIELD TYPE(TFIELDMETADATA) :: TZFIELD
! !
...@@ -1366,7 +1372,10 @@ IF( (CMASK /= 'FULL ').AND. (HREC=='COVER') ) THEN ...@@ -1366,7 +1372,10 @@ IF( (CMASK /= 'FULL ').AND. (HREC=='COVER') ) THEN
TRIM(CMASK)//' not written in file by externalized surface') TRIM(CMASK)//' not written in file by externalized surface')
RETURN RETURN
ELSE ELSE
CALL PREPARE_METADATA_WRITE_SURF(HREC,'--',HCOMMENT,0,TYPELOG,0,'WRITE_SURFL0_MNH',TZFIELD) ! Add a suffix to logical variables coming from SURFEX
! This is done because some variables can have the same name than MesoNH variables
! This suffix has been added in MesoNH 5.6.0
CALL PREPARE_METADATA_WRITE_SURF(TRIM(HREC)//YSUFFIX,'--',HCOMMENT,0,TYPELOG,0,'WRITE_SURFL0_MNH',TZFIELD)
CALL IO_Field_write(TFILE_SURFEX,TZFIELD,OFIELD,KRESP) CALL IO_Field_write(TFILE_SURFEX,TZFIELD,OFIELD,KRESP)
END IF END IF
! !
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment