diff --git a/src/MNH/read_surf_mnh.f90 b/src/MNH/read_surf_mnh.f90 index 0fbd744a41e3b7cb8fc195996b6c00dc5a6e2228..47becd55e7da29efe1616eb9547b5f2682a66b6e 100644 --- a/src/MNH/read_surf_mnh.f90 +++ b/src/MNH/read_surf_mnh.f90 @@ -2,6 +2,80 @@ !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 for details. version 1. +MODULE MODE_READ_SURF_MNH_TOOLS + +CONTAINS + +SUBROUTINE PREPARE_METADATA_READ_SURF(HREC,HDIR,KGRID,KTYPE,KDIMS,HSUBR,TPFIELD) +! +USE MODE_FIELD, ONLY: FIND_FIELD_ID_FROM_MNHNAME, TFIELDDATA, TFIELDLIST +USE MODE_MSG +! +CHARACTER(LEN=LEN_HREC),INTENT(IN) :: HREC ! name of the article to write +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) :: KTYPE ! Datatype +INTEGER, INTENT(IN) :: KDIMS ! Number of dimensions +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 +! +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 + 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) + END IF + !Modify and check CDIR + IF (TPFIELD%CDIR/=HDIR) THEN + CALL PRINT_MSG(NVERB_WARNING,'IO',TRIM(HSUBR),'CDIR different ('//TRIM(TPFIELD%CDIR) & + //'/'//TRIM(HDIR)//') than expected for article '//TRIM(HREC)) + TPFIELD%CDIR = HDIR + END IF + !Modify and check NGRID + IF (TPFIELD%NGRID/=KGRID) THEN + WRITE(YTXT,'( I0,"/",I0 )') TPFIELD%NGRID,KGRID + CALL PRINT_MSG(NVERB_WARNING,'IO',TRIM(HSUBR),'NGRID different ('//TRIM(YTXT) & + //') than expected for article '//TRIM(HREC)) + TPFIELD%NGRID = KGRID + END IF + !Modify and check NTYPE + IF (TPFIELD%NTYPE/=KTYPE) THEN + WRITE(YTXT,'( I0,"/",I0 )') TPFIELD%NTYPE,KTYPE + CALL PRINT_MSG(NVERB_WARNING,'IO',TRIM(HSUBR),'NTYPE different ('//TRIM(YTXT) & + //') than expected for article '//TRIM(HREC)) + TPFIELD%NTYPE = KTYPE + END IF + !Modify and check NDIMS + IF (TPFIELD%NDIMS/=KDIMS) THEN + WRITE(YTXT,'( I0,"/",I0 )') TPFIELD%NDIMS,KDIMS + CALL PRINT_MSG(NVERB_WARNING,'IO',TRIM(HSUBR),'NDIMS different ('//TRIM(YTXT) & + //') than expected for article '//TRIM(HREC)) + TPFIELD%NDIMS = KDIMS + END IF +ELSE + CALL PRINT_MSG(NVERB_DEBUG,'IO',TRIM(HSUBR),TRIM(HREC)//' not found in FIELDLIST. Generating default metadata') + TPFIELD%CMNHNAME = TRIM(HREC) + TPFIELD%CSTDNAME = '' + TPFIELD%CLONGNAME = TRIM(HREC) + TPFIELD%CUNITS = '' + TPFIELD%CDIR = HDIR + TPFIELD%CCOMMENT = '' !Expected comment is not known + TPFIELD%NGRID = KGRID + TPFIELD%NTYPE = KTYPE + TPFIELD%NDIMS = KDIMS +END IF +! +END SUBROUTINE PREPARE_METADATA_READ_SURF + +END MODULE MODE_READ_SURF_MNH_TOOLS + + ! ############################################################# SUBROUTINE READ_SURFX0_MNH(HREC,PFIELD,KRESP,HCOMMENT) ! ############################################################# @@ -44,17 +118,17 @@ !* 0. DECLARATIONS ! ------------ ! -USE MODD_CONF, ONLY : CPROGRAM -USE MODD_GRID, ONLY: XRPK,XBETA,XLAT0,XLON0 -USE MODD_PARAMETERS, ONLY: JPHEXT, XUNDEF +USE MODD_CONF, ONLY: CPROGRAM +USE MODD_GRID, ONLY: XRPK,XBETA,XLAT0,XLON0 +USE MODD_IO_SURF_MNH, ONLY: TOUT, TPINFILE +USE MODD_PARAMETERS, ONLY: JPHEXT, XUNDEF ! -USE MODE_FIELD, ONLY : TFIELDDATA,TFIELDLIST,FIND_FIELD_ID_FROM_MNHNAME,TYPEREAL +USE MODE_FIELD, ONLY: TFIELDDATA,TFIELDLIST,FIND_FIELD_ID_FROM_MNHNAME,TYPEREAL USE MODE_FM USE MODE_FMREAD USE MODE_GRIDPROJ USE MODE_MSG -! -USE MODD_IO_SURF_MNH, ONLY : TOUT, TPINFILE +USE MODE_READ_SURF_MNH_TOOLS ! USE MODI_GET_SURF_UNDEF ! @@ -78,7 +152,6 @@ INTEGER :: IIMAX,IJMAX REAL,DIMENSION(:), ALLOCATABLE :: ZXHAT,ZYHAT REAL :: ZLATOR,ZLONOR,ZXHATM,ZYHATM,ZLATORI,ZLONORI REAL :: ZRPK, ZBETA, ZLAT0, ZLON0 -CHARACTER(LEN=100):: YCOMMENT ! comment TYPE(TFIELDDATA) :: TZFIELD !------------------------------------------------------------------------------- ! @@ -140,15 +213,7 @@ IF ( HREC=='LAT0' .OR. HREC=='LON0' .OR. HREC=='RPK' .OR. HREC=='BETA' & .OR. HREC=='LATORI'.OR. HREC=='LONORI' ) THEN CALL IO_READ_FIELD(TPINFILE,HREC,PFIELD,KRESP) ELSE - TZFIELD%CMNHNAME = TRIM(HREC) - TZFIELD%CSTDNAME = '' - TZFIELD%CLONGNAME = TRIM(HREC) - TZFIELD%CUNITS = '' - TZFIELD%CDIR = '--' - TZFIELD%CCOMMENT = '' !Expected comment is not known - TZFIELD%NGRID = 0 - TZFIELD%NTYPE = TYPEREAL - TZFIELD%NDIMS = 0 + CALL PREPARE_METADATA_READ_SURF(HREC,'--',0,TYPEREAL,0,'READ_SURFX0_MNH',TZFIELD) CALL IO_READ_FIELD(TPINFILE,TZFIELD,PFIELD,KRESP) END IF @@ -203,12 +268,13 @@ END SUBROUTINE READ_SURFX0_MNH !* 0. DECLARATIONS ! ------------ ! -USE MODE_FIELD, ONLY : TFIELDDATA,TYPEREAL +USE MODE_FIELD, ONLY: FIND_FIELD_ID_FROM_MNHNAME,TFIELDDATA,TFIELDLIST,TYPEREAL USE MODE_FM USE MODE_FMREAD USE MODE_ll USE MODE_IO_ll USE MODE_MSG +USE MODE_READ_SURF_MNH_TOOLS ! USE MODD_CST, ONLY : XPI ! @@ -253,6 +319,7 @@ INTEGER :: IMASDEV CHARACTER(LEN=LEN_HREC) :: YREC CHARACTER(LEN=2) :: YSTORAGE_TYPE ! +INTEGER :: IID, IRESP INTEGER :: IIU, IJU, IIB, IJB, IIE, IJE ! dimensions of horizontal fields INTEGER, DIMENSION(:), ALLOCATABLE :: IMASK ! mask for packing REAL :: ZUNDEF ! undefined value in SURFEX @@ -306,14 +373,8 @@ ELSE IF (HREC=='XX') THEN ALLOCATE(ZWORK1D(IIU)) ALLOCATE(ZWORK (IIU,IJU)) ZWORK(:,:) = 0. - TZFIELD%CMNHNAME = 'XHAT' - TZFIELD%CSTDNAME = '' - TZFIELD%CLONGNAME = 'XHAT' - TZFIELD%CUNITS = '' - TZFIELD%CCOMMENT = '' !Expected comment is not known - TZFIELD%NGRID = 2 - TZFIELD%NTYPE = TYPEREAL - TZFIELD%NDIMS = 1 + CALL FIND_FIELD_ID_FROM_MNHNAME('XHAT',IID,IRESP) + TZFIELD = TFIELDLIST(IID) IF (HDIR/='A') THEN TZFIELD%CDIR = 'XX' ELSE @@ -331,14 +392,8 @@ ELSE IF (HREC=='DX') THEN ALLOCATE(ZWORK1D(IIU)) ALLOCATE(ZWORK (IIU,IJU)) ZWORK(:,:) = 0. - TZFIELD%CMNHNAME = 'XHAT' - TZFIELD%CSTDNAME = '' - TZFIELD%CLONGNAME = 'XHAT' - TZFIELD%CUNITS = '' - TZFIELD%CCOMMENT = '' !Expected comment is not known - TZFIELD%NGRID = 2 - TZFIELD%NTYPE = TYPEREAL - TZFIELD%NDIMS = 1 + CALL FIND_FIELD_ID_FROM_MNHNAME('XHAT',IID,IRESP) + TZFIELD = TFIELDLIST(IID) IF (HDIR/='A') THEN TZFIELD%CDIR = 'XX' ELSE @@ -356,14 +411,8 @@ ELSE IF (HREC=='YY') THEN ALLOCATE(ZWORK1D(IJU)) ALLOCATE(ZWORK (IIU,IJU)) ZWORK(:,:) = 0. - TZFIELD%CMNHNAME = 'YHAT' - TZFIELD%CSTDNAME = '' - TZFIELD%CLONGNAME = 'YHAT' - TZFIELD%CUNITS = '' - TZFIELD%CCOMMENT = '' !Expected comment is not known - TZFIELD%NGRID = 3 - TZFIELD%NTYPE = TYPEREAL - TZFIELD%NDIMS = 1 + CALL FIND_FIELD_ID_FROM_MNHNAME('YHAT',IID,IRESP) + TZFIELD = TFIELDLIST(IID) IF (HDIR/='A') THEN TZFIELD%CDIR = 'YY' ELSE @@ -381,14 +430,8 @@ ELSE IF (HREC=='DY') THEN ALLOCATE(ZWORK1D(IJU)) ALLOCATE(ZWORK (IIU,IJU)) ZWORK(:,:) = 0. - TZFIELD%CMNHNAME = 'YHAT' - TZFIELD%CSTDNAME = '' - TZFIELD%CLONGNAME = 'YHAT' - TZFIELD%CUNITS = '' - TZFIELD%CCOMMENT = '' !Expected comment is not known - TZFIELD%NGRID = 3 - TZFIELD%NTYPE = TYPEREAL - TZFIELD%NDIMS = 1 + CALL FIND_FIELD_ID_FROM_MNHNAME('YHAT',IID,IRESP) + TZFIELD = TFIELDLIST(IID) IF (HDIR/='A') THEN TZFIELD%CDIR = 'YY' ELSE @@ -435,25 +478,14 @@ ELSE ! ALLOCATE(ZWORK(IIU,IJU)) ! - - TZFIELD%CMNHNAME = TRIM(YREC) - TZFIELD%CSTDNAME = '' - TZFIELD%CLONGNAME = TRIM(YREC) - TZFIELD%CUNITS = '' - TZFIELD%CCOMMENT = '' !Expected comment is not known - TZFIELD%NGRID = 4 - TZFIELD%NTYPE = TYPEREAL IF (HDIR=='H') THEN - TZFIELD%CDIR = 'XY' - TZFIELD%NDIMS = 2 + CALL PREPARE_METADATA_READ_SURF(YREC,'XY',4,TYPEREAL,2,'READ_SURFX1_MNH',TZFIELD) CALL IO_READ_FIELD(TPINFILE,TZFIELD,ZWORK,KRESP) ELSEIF (HDIR=='A') THEN - TZFIELD%CDIR = '--' - TZFIELD%NDIMS = 2 + CALL PREPARE_METADATA_READ_SURF(YREC,'--',4,TYPEREAL,2,'READ_SURFX1_MNH',TZFIELD) CALL IO_READ_FIELD(TPINFILE,TZFIELD,ZWORK,KRESP) ELSE - TZFIELD%CDIR = '--' - TZFIELD%NDIMS = 1 + CALL PREPARE_METADATA_READ_SURF(YREC,'--',4,TYPEREAL,1,'READ_SURFX1_MNH',TZFIELD) CALL IO_READ_FIELD(TPINFILE,TZFIELD,PFIELD,KRESP) END IF ! @@ -533,6 +565,7 @@ USE MODE_FM USE MODE_FMREAD USE MODE_IO_ll USE MODE_MSG +USE MODE_READ_SURF_MNH_TOOLS ! USE MODD_IO_SURF_MNH, ONLY : TOUT, TPINFILE, NMASK, NIU, NJU, NIB, NJB, NIE, NJE, & NIU_ALL, NJU_ALL, NIB_ALL, NJB_ALL, NIE_ALL, NJE_ALL, NMASK_ALL @@ -581,26 +614,16 @@ ILUOUT = TOUT%NLU ! ! ! -TZFIELD%CMNHNAME = TRIM(HREC) -TZFIELD%CSTDNAME = '' -TZFIELD%CLONGNAME = TRIM(HREC) -TZFIELD%CUNITS = '' -TZFIELD%CCOMMENT = '' !Expected comment is not known -TZFIELD%NGRID = 4 -TZFIELD%NTYPE = TYPEREAL IF (HDIR=='H') THEN ALLOCATE(ZWORK(NIU,NJU,SIZE(PFIELD,2))) - TZFIELD%CDIR = 'XY' - TZFIELD%NDIMS = 3 + CALL PREPARE_METADATA_READ_SURF(HREC,'XY',4,TYPEREAL,3,'READ_SURFX2_MNH',TZFIELD) CALL IO_READ_FIELD(TPINFILE,TZFIELD,ZWORK,KRESP) ELSEIF (HDIR=='A') THEN ALLOCATE(ZWORK(NIU_ALL,NJU_ALL,SIZE(PFIELD,2))) - TZFIELD%CDIR = '--' - TZFIELD%NDIMS = 3 + CALL PREPARE_METADATA_READ_SURF(HREC,'--',4,TYPEREAL,3,'READ_SURFX2_MNH',TZFIELD) CALL IO_READ_FIELD(TPINFILE,TZFIELD,ZWORK,KRESP) ELSE - TZFIELD%CDIR = '--' - TZFIELD%NDIMS = 2 + CALL PREPARE_METADATA_READ_SURF(HREC,'--',4,TYPEREAL,2,'READ_SURFX2_MNH',TZFIELD) CALL IO_READ_FIELD(TPINFILE,TZFIELD,PFIELD,KRESP) END IF ! @@ -677,6 +700,7 @@ USE MODE_FM USE MODE_FMREAD USE MODE_IO_ll USE MODE_MSG +USE MODE_READ_SURF_MNH_TOOLS ! USE MODD_DATA_COVER_PAR, ONLY : JPCOVER USE MODD_CST, ONLY : XPI @@ -800,15 +824,7 @@ IF (.NOT. GCOVER_PACKED) THEN IF (IRESP/=0) KRESP=IRESP END DO ELSE - TZFIELD%CMNHNAME = TRIM(HREC) - TZFIELD%CSTDNAME = '' - TZFIELD%CLONGNAME = TRIM(HREC) - TZFIELD%CUNITS = '' - TZFIELD%CDIR = YDIR - TZFIELD%CCOMMENT = '' !Expected comment is not known - TZFIELD%NGRID = 4 - TZFIELD%NTYPE = TYPEREAL - TZFIELD%NDIMS = 3 + CALL PREPARE_METADATA_READ_SURF(HREC,YDIR,4,TYPEREAL,3,'READ_SURFX2COV_MNH',TZFIELD) CALL IO_READ_FIELD(TPINFILE,TZFIELD,ZWORK3D(:,:,:),KRESP) END IF ! @@ -1063,6 +1079,7 @@ USE MODE_FIELD, ONLY: TFIELDDATA,TYPEINT USE MODE_FM USE MODE_FMREAD USE MODE_MSG +USE MODE_READ_SURF_MNH_TOOLS ! USE MODD_IO_SURF_MNH, ONLY : TOUT, TPINFILE, NMASK, & NIU, NJU, NIB, NJB, NIE, NJE @@ -1098,15 +1115,7 @@ IF (HREC=='DIM_FULL' .AND. ( CPROGRAM=='IDEAL ' .OR. & CALL IO_READ_FIELD(TPINFILE,'JMAX',IJMAX) KFIELD = IIMAX * IJMAX ELSE - TZFIELD%CMNHNAME = TRIM(HREC) - TZFIELD%CSTDNAME = '' - TZFIELD%CLONGNAME = TRIM(HREC) - TZFIELD%CUNITS = '' - TZFIELD%CDIR = '--' - TZFIELD%CCOMMENT = '' !Expected comment is not known - TZFIELD%NGRID = 0 - TZFIELD%NTYPE = TYPEINT - TZFIELD%NDIMS = 0 + CALL PREPARE_METADATA_READ_SURF(HREC,'--',0,TYPEINT,0,'READ_SURFN0_MNH',TZFIELD) CALL IO_READ_FIELD(TPINFILE,TZFIELD,KFIELD,KRESP) IF (KRESP /=0) THEN @@ -1166,6 +1175,7 @@ USE MODE_FIELD, ONLY: TFIELDDATA,TYPEINT USE MODE_FM USE MODE_FMREAD USE MODE_MSG +USE MODE_READ_SURF_MNH_TOOLS ! USE MODD_IO_SURF_MNH, ONLY : TOUT, TPINFILE, NMASK, & NIU, NJU, NIB, NJB, NIE, NJE @@ -1202,29 +1212,13 @@ ILUOUT = TOUT%NLU ! IF (HDIR=='-') THEN ! - TZFIELD%CMNHNAME = TRIM(HREC) - TZFIELD%CSTDNAME = '' - TZFIELD%CLONGNAME = TRIM(HREC) - TZFIELD%CUNITS = '' - TZFIELD%CDIR = '--' - TZFIELD%CCOMMENT = TRIM(HCOMMENT) - TZFIELD%NGRID = 0 - TZFIELD%NTYPE = TYPEINT - TZFIELD%NDIMS = 1 + CALL PREPARE_METADATA_READ_SURF(HREC,'--',0,TYPEINT,1,'READ_SURFN1_MNH',TZFIELD) CALL IO_READ_FIELD(TPINFILE,TZFIELD,KFIELD,KRESP) ! ELSE IF (HDIR=='H') THEN ALLOCATE(IWORK(NIU,NJU)) ! - TZFIELD%CMNHNAME = TRIM(HREC) - TZFIELD%CSTDNAME = '' - TZFIELD%CLONGNAME = TRIM(HREC) - TZFIELD%CUNITS = '' - TZFIELD%CDIR = 'XY' - TZFIELD%CCOMMENT = '' !Expected comment is not known - TZFIELD%NGRID = 4 - TZFIELD%NTYPE = TYPEINT - TZFIELD%NDIMS = 2 + CALL PREPARE_METADATA_READ_SURF(HREC,'XY',4,TYPEINT,2,'READ_SURFN1_MNH',TZFIELD) CALL IO_READ_FIELD(TPINFILE,TZFIELD,IWORK,KRESP) ! IF (KRESP /=0) THEN @@ -1289,6 +1283,7 @@ USE MODE_FIELD, ONLY : TFIELDDATA,TYPECHAR USE MODE_FMREAD USE MODE_MSG USE MODE_POS +USE MODE_READ_SURF_MNH_TOOLS ! USE MODD_IO_SURF_MNH, ONLY : TOUT, TPINFILE USE MODD_CONF, ONLY : LCARTESIAN, CPROGRAM @@ -1378,15 +1373,7 @@ CALL ABORT END IF ELSE - TZFIELD%CMNHNAME = TRIM(HREC) - TZFIELD%CSTDNAME = '' - TZFIELD%CLONGNAME = TRIM(HREC) - TZFIELD%CUNITS = '' - TZFIELD%CDIR = '--' - TZFIELD%CCOMMENT = '' !Expected comment is not known - TZFIELD%NGRID = 0 - TZFIELD%NTYPE = TYPECHAR - TZFIELD%NDIMS = 0 + CALL PREPARE_METADATA_READ_SURF(HREC,'--',0,TYPECHAR,0,'READ_SURFC0_MNH',TZFIELD) CALL IO_READ_FIELD(TPINFILE,TZFIELD,HFIELD,KRESP) ! IF (KRESP /=0) THEN @@ -1453,6 +1440,7 @@ USE MODE_FIELD, ONLY : TFIELDDATA,TYPEINT,TYPELOG USE MODE_FM USE MODE_FMREAD USE MODE_MSG +USE MODE_READ_SURF_MNH_TOOLS ! USE MODI_PACK_2D_1D ! @@ -1486,15 +1474,7 @@ CALL PRINT_MSG(NVERB_DEBUG,'IO','READ_SURFL1_MNH',TRIM(TPINFILE%CNAME)//': readi ILUOUT = TOUT%NLU ! IF (HDIR=='-') THEN - TZFIELD%CMNHNAME = TRIM(HREC) - TZFIELD%CSTDNAME = '' - TZFIELD%CLONGNAME = TRIM(HREC) - TZFIELD%CUNITS = '' - TZFIELD%CDIR = '--' - TZFIELD%CCOMMENT = '' !Expected comment is not known - TZFIELD%NGRID = 0 - TZFIELD%NTYPE = TYPELOG - TZFIELD%NDIMS = 1 + CALL PREPARE_METADATA_READ_SURF(HREC,'--',0,TYPELOG,1,'READ_SURFL1_MNH',TZFIELD) CALL IO_READ_FIELD(TPINFILE,TZFIELD,OFIELD,KRESP) IF (KRESP /=0) THEN @@ -1509,15 +1489,7 @@ ELSE IF (HDIR=='H') THEN GWORK = .FALSE. ! ALLOCATE(IWORK(NIU,NJU)) - TZFIELD%CMNHNAME = TRIM(HREC) - TZFIELD%CSTDNAME = '' - TZFIELD%CLONGNAME = TRIM(HREC) - TZFIELD%CUNITS = '' - TZFIELD%CDIR = 'XY' - TZFIELD%CCOMMENT = '' !Expected comment is not known - TZFIELD%NGRID = 4 - TZFIELD%NTYPE = TYPEINT - TZFIELD%NDIMS = 2 + CALL PREPARE_METADATA_READ_SURF(HREC,'XY',4,TYPEINT,2,'READ_SURFL1_MNH',TZFIELD) CALL IO_READ_FIELD(TPINFILE,TZFIELD,IWORK,KRESP) WHERE (IWORK==1) GWORK = .TRUE. DEALLOCATE(IWORK) @@ -1581,6 +1553,7 @@ USE MODE_FIELD, ONLY : TFIELDDATA,TYPELOG USE MODE_FM USE MODE_FMREAD USE MODE_MSG +USE MODE_READ_SURF_MNH_TOOLS ! USE MODD_IO_SURF_MNH, ONLY : TOUT, TPINFILE ! @@ -1622,15 +1595,7 @@ IF (HREC=='ECOCLIMAP') THEN END IF END IF ! -TZFIELD%CMNHNAME = TRIM(HREC) -TZFIELD%CSTDNAME = '' -TZFIELD%CLONGNAME = TRIM(HREC) -TZFIELD%CUNITS = '' -TZFIELD%CDIR = '--' -TZFIELD%CCOMMENT = '' !Expected comment is not known -TZFIELD%NGRID = 0 -TZFIELD%NTYPE = TYPELOG -TZFIELD%NDIMS = 0 +CALL PREPARE_METADATA_READ_SURF(HREC,'--',0,TYPELOG,0,'READ_SURFL0_MNH',TZFIELD) CALL IO_READ_FIELD(TPINFILE,TZFIELD,OFIELD,KRESP) HCOMMENT = TZFIELD%CCOMMENT ! diff --git a/src/MNH/write_surf_mnh.f90 b/src/MNH/write_surf_mnh.f90 index f06b38cc034427a7919d3be9142300a781781460..32d061917439cf76f7ec0d1156ae076ea57d807c 100644 --- a/src/MNH/write_surf_mnh.f90 +++ b/src/MNH/write_surf_mnh.f90 @@ -7,6 +7,92 @@ !----------------------------------------------------------------- ! $Source$ $Revision$ !----------------------------------------------------------------- +MODULE MODE_WRITE_SURF_MNH_TOOLS + +CONTAINS + +SUBROUTINE PREPARE_METADATA_WRITE_SURF(HREC,HDIR,HCOMMENT,KGRID,KTYPE,KDIMS,HSUBR,TPFIELD) +! +USE MODE_FIELD, ONLY: FIND_FIELD_ID_FROM_MNHNAME, TFIELDDATA, TFIELDLIST +USE MODE_MSG +! +CHARACTER(LEN=LEN_HREC),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=100), INTENT(IN) :: HCOMMENT ! Comment string +INTEGER, INTENT(IN) :: KGRID ! Localization on the model grid +INTEGER, INTENT(IN) :: KTYPE ! Datatype +INTEGER, INTENT(IN) :: KDIMS ! Number of dimensions +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 +! +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 + 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) + END IF + !Modify and check CDIR + IF (TPFIELD%CDIR/=HDIR) THEN + CALL PRINT_MSG(NVERB_WARNING,'IO',TRIM(HSUBR),'CDIR different ('//TRIM(TPFIELD%CDIR) & + //'/'//TRIM(HDIR)//') than expected for article '//TRIM(HREC)) + TPFIELD%CDIR = HDIR + END IF + !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) + END IF + ELSE + CALL PRINT_MSG(NVERB_DEBUG,'IO',TRIM(HSUBR),'CCOMMENT was empty -> replaced by TPFIELD%CCOMMENT for article ' & + //TRIM(HREC)) + END IF + !Modify and check NGRID + IF (TPFIELD%NGRID/=KGRID) THEN + WRITE(YTXT,'( I0,"/",I0 )') TPFIELD%NGRID,KGRID + CALL PRINT_MSG(NVERB_WARNING,'IO',TRIM(HSUBR),'NGRID different ('//TRIM(YTXT) & + //') than expected for article '//TRIM(HREC)) + TPFIELD%NGRID = KGRID + END IF + !Modify and check NTYPE + IF (TPFIELD%NTYPE/=KTYPE) THEN + WRITE(YTXT,'( I0,"/",I0 )') TPFIELD%NTYPE,KTYPE + CALL PRINT_MSG(NVERB_WARNING,'IO',TRIM(HSUBR),'NTYPE different ('//TRIM(YTXT) & + //') than expected for article '//TRIM(HREC)) + TPFIELD%NTYPE = KTYPE + END IF + !Modify and check NDIMS + IF (TPFIELD%NDIMS/=KDIMS) THEN + WRITE(YTXT,'( I0,"/",I0 )') TPFIELD%NDIMS,KDIMS + CALL PRINT_MSG(NVERB_WARNING,'IO',TRIM(HSUBR),'NDIMS different ('//TRIM(YTXT) & + //') than expected for article '//TRIM(HREC)) + TPFIELD%NDIMS = KDIMS + END IF +ELSE + CALL PRINT_MSG(NVERB_DEBUG,'IO',TRIM(HSUBR),TRIM(HREC)//' not found in FIELDLIST. Generating default metadata') + TPFIELD%CMNHNAME = TRIM(HREC) + TPFIELD%CSTDNAME = '' + TPFIELD%CLONGNAME = TRIM(HREC) + TPFIELD%CUNITS = '' + TPFIELD%CDIR = HDIR + TPFIELD%CCOMMENT = TRIM(HCOMMENT) + TPFIELD%NGRID = KGRID + TPFIELD%NTYPE = KTYPE + TPFIELD%NDIMS = KDIMS +END IF +! +END SUBROUTINE PREPARE_METADATA_WRITE_SURF + +END MODULE MODE_WRITE_SURF_MNH_TOOLS + + ! ############################################################# SUBROUTINE WRITE_SURFX0_MNH(HREC,PFIELD,KRESP,HCOMMENT) ! ############################################################# @@ -58,6 +144,7 @@ USE MODE_IO_WRITE_FIELD USE MODE_FIELD, ONLY: TFIELDDATA,TYPEREAL USE MODE_MSG +USE MODE_WRITE_SURF_MNH_TOOLS ! USE MODD_CONF_n, ONLY: CSTORAGE_TYPE USE MODD_IO_ll, ONLY: TFILE_SURFEX @@ -74,6 +161,7 @@ CHARACTER(LEN=100), INTENT(IN) :: HCOMMENT ! Comment string !* 0.2 Declarations of local variables ! CHARACTER(LEN=5) :: YMSG +INTEGER :: IID, IRESP TYPE(TFIELDDATA) :: TZFIELD ! !------------------------------------------------------------------------------- @@ -87,18 +175,10 @@ IF( ( HREC=='LAT0' .OR. HREC=='LON0' .OR. HREC=='RPK' .OR. HREC=='BETA' & RETURN ! ELSE -! - TZFIELD%CMNHNAME = TRIM(HREC) - TZFIELD%CSTDNAME = '' - TZFIELD%CUNITS = '' - TZFIELD%CDIR = '--' - TZFIELD%CCOMMENT = TRIM(HCOMMENT) - TZFIELD%NGRID = 0 - TZFIELD%NTYPE = TYPEREAL - TZFIELD%NDIMS = 0 - TZFIELD%CLONGNAME = TRIM(HREC) + ! + CALL PREPARE_METADATA_WRITE_SURF(HREC,'--',HCOMMENT,0,TYPEREAL,0,'WRITE_SURFX0_MNH',TZFIELD) CALL IO_WRITE_FIELD(TFILE_SURFEX,TZFIELD,PFIELD,KRESP) -! + ! IF (KRESP /=0) THEN WRITE ( YMSG, '( I5 )' ) KRESP CALL PRINT_MSG(NVERB_ERROR,'IO','WRITE_SURFX0_MNH','error when writing article '//TRIM(HREC)//' KRESP='//YMSG) @@ -149,9 +229,10 @@ END SUBROUTINE WRITE_SURFX0_MNH ! ------------ ! USE MODE_IO_WRITE_FIELD -USE MODE_FIELD, ONLY: TFIELDDATA,TYPEREAL +USE MODE_FIELD, ONLY: FIND_FIELD_ID_FROM_MNHNAME,TFIELDDATA,TFIELDLIST,TYPEREAL USE MODE_MSG USE MODE_TOOLS_ll +USE MODE_WRITE_SURF_MNH_TOOLS ! USE MODD_CONF_n, ONLY: CSTORAGE_TYPE USE MODD_IO_ll, ONLY: TFILE_SURFEX @@ -190,6 +271,7 @@ INTEGER :: JILOOP,JJLOOP ! loop indexes REAL, DIMENSION(:,:), ALLOCATABLE :: ZWORK ! work array written in the file REAL, DIMENSION(:), ALLOCATABLE :: ZW1D ! 1D work array ! +INTEGER :: IID, IRESP INTEGER :: IIU, IJU, IIB, IJB, IIE, IJE ! dimensions of horizontal fields INTEGER, DIMENSION(:), ALLOCATABLE :: IMASK ! mask for unpacking REAL :: ZUNDEF ! undefined value in SURFEX @@ -296,28 +378,14 @@ IF ( (CSTORAGE_TYPE=='PG' .OR. CSTORAGE_TYPE=='SU') & END IF ! IF (HDIR=='A') THEN - TZFIELD%CMNHNAME = 'XHAT' - TZFIELD%CSTDNAME = '' - TZFIELD%CLONGNAME = 'XHAT' - TZFIELD%CUNITS = '' - TZFIELD%CDIR = '--' - TZFIELD%CCOMMENT = TRIM(HCOMMENT) - TZFIELD%NGRID = 2 - TZFIELD%NTYPE = TYPEREAL - TZFIELD%NDIMS = 1 + CALL FIND_FIELD_ID_FROM_MNHNAME('XHAT',IID,IRESP) + TZFIELD = TFIELDLIST(IID) + TZFIELD%CDIR = '--' CALL IO_WRITE_FIELD(TFILE_SURFEX,TZFIELD,ZW1D(:),KRESP) END IF IF (HDIR=='H') THEN - TZFIELD%CMNHNAME = 'XHAT' - TZFIELD%CSTDNAME = '' - TZFIELD%CLONGNAME = 'XHAT' - TZFIELD%CUNITS = '' - TZFIELD%CDIR = 'XX' - TZFIELD%CCOMMENT = TRIM(HCOMMENT) - TZFIELD%NGRID = 2 - TZFIELD%NTYPE = TYPEREAL - TZFIELD%NDIMS = 1 - CALL IO_WRITE_FIELD(TFILE_SURFEX,TZFIELD,ZW1D(1+NHALO:IIU-NHALO),KRESP) + CALL FIND_FIELD_ID_FROM_MNHNAME('XHAT',IID,IRESP) + CALL IO_WRITE_FIELD(TFILE_SURFEX,TFIELDLIST(IID),ZW1D(1+NHALO:IIU-NHALO),KRESP) END IF DEALLOCATE(ZW1D) ELSE IF ( (CSTORAGE_TYPE=='PG' .OR. CSTORAGE_TYPE=='SU') & @@ -336,62 +404,24 @@ ELSE IF ( (CSTORAGE_TYPE=='PG' .OR. CSTORAGE_TYPE=='SU') & ZW1D(IJB+1) = 1.5 * ZWORK(1+JPHEXT,IJB) END IF IF (HDIR=='A') THEN - TZFIELD%CMNHNAME = 'YHAT' - TZFIELD%CSTDNAME = '' - TZFIELD%CLONGNAME = 'YHAT' - TZFIELD%CUNITS = '' - TZFIELD%CDIR = '--' - TZFIELD%CCOMMENT = TRIM(HCOMMENT) - TZFIELD%NGRID = 3 - TZFIELD%NTYPE = TYPEREAL - TZFIELD%NDIMS = 1 + CALL FIND_FIELD_ID_FROM_MNHNAME('YHAT',IID,IRESP) + TZFIELD = TFIELDLIST(IID) + TZFIELD%CDIR = '--' CALL IO_WRITE_FIELD(TFILE_SURFEX,TZFIELD,ZW1D(:),KRESP) END IF IF (HDIR=='H') THEN - TZFIELD%CMNHNAME = 'YHAT' - TZFIELD%CSTDNAME = '' - TZFIELD%CLONGNAME = 'YHAT' - TZFIELD%CUNITS = '' - TZFIELD%CDIR = 'YY' - TZFIELD%CCOMMENT = TRIM(HCOMMENT) - TZFIELD%NGRID = 3 - TZFIELD%NTYPE = TYPEREAL - TZFIELD%NDIMS = 1 - CALL IO_WRITE_FIELD(TFILE_SURFEX,TZFIELD,ZW1D(1+NHALO:IJU-NHALO),KRESP) + CALL FIND_FIELD_ID_FROM_MNHNAME('YHAT',IID,IRESP) + CALL IO_WRITE_FIELD(TFILE_SURFEX,TFIELDLIST(IID),ZW1D(1+NHALO:IJU-NHALO),KRESP) END IF DEALLOCATE(ZW1D) ELSE IF (HDIR=='H') THEN - TZFIELD%CMNHNAME = TRIM(HREC) - TZFIELD%CSTDNAME = '' - TZFIELD%CUNITS = '' - TZFIELD%CDIR = 'XY' - TZFIELD%CCOMMENT = TRIM(HCOMMENT) - TZFIELD%NGRID = 4 - TZFIELD%NTYPE = TYPEREAL - TZFIELD%NDIMS = 2 - TZFIELD%CLONGNAME = TRIM(HREC) + CALL PREPARE_METADATA_WRITE_SURF(HREC,'XY',HCOMMENT,4,TYPEREAL,2,'WRITE_SURFX1_MNH',TZFIELD) CALL IO_WRITE_FIELD(TFILE_SURFEX,TZFIELD,ZWORK(1+NHALO:IIU-NHALO,1+NHALO:IJU-NHALO),KRESP) ELSE IF (HDIR=='A') THEN - TZFIELD%CMNHNAME = TRIM(HREC) - TZFIELD%CSTDNAME = '' - TZFIELD%CUNITS = '' - TZFIELD%CDIR = '--' - TZFIELD%CCOMMENT = TRIM(HCOMMENT) - TZFIELD%NGRID = 4 - TZFIELD%NTYPE = TYPEREAL - TZFIELD%NDIMS = 2 - TZFIELD%CLONGNAME = TRIM(HREC) + CALL PREPARE_METADATA_WRITE_SURF(HREC,'--',HCOMMENT,4,TYPEREAL,2,'WRITE_SURFX1_MNH',TZFIELD) CALL IO_WRITE_FIELD(TFILE_SURFEX,TZFIELD,ZWORK(:,:),KRESP) ELSE - TZFIELD%CMNHNAME = TRIM(HREC) - TZFIELD%CSTDNAME = '' - TZFIELD%CLONGNAME = TRIM(HREC) - TZFIELD%CUNITS = '' - TZFIELD%CDIR = '--' - TZFIELD%CCOMMENT = TRIM(HCOMMENT) - TZFIELD%NGRID = 4 - TZFIELD%NTYPE = TYPEREAL - TZFIELD%NDIMS = 1 + CALL PREPARE_METADATA_WRITE_SURF(HREC,'--',HCOMMENT,4,TYPEREAL,1,'WRITE_SURFX1_MNH',TZFIELD) CALL IO_WRITE_FIELD(TFILE_SURFEX,TZFIELD,PFIELD(:),KRESP) END IF ! @@ -452,6 +482,7 @@ USE MODE_IO_WRITE_FIELD USE MODE_FIELD, ONLY: TFIELDDATA,TYPELOG,TYPEREAL USE MODE_MSG USE MODE_TOOLS_ll +USE MODE_WRITE_SURF_MNH_TOOLS ! USE MODD_CONF_n, ONLY: CSTORAGE_TYPE USE MODD_DATA_COVER_PAR,ONLY : JPCOVER @@ -586,15 +617,7 @@ IF (.NOT. GCOVER_PACKED) THEN END IF END DO ELSE - TZFIELD%CMNHNAME = TRIM(HREC) - TZFIELD%CSTDNAME = '' - TZFIELD%CLONGNAME = TRIM(HREC) - TZFIELD%CUNITS = '' - TZFIELD%CDIR = YDIR - TZFIELD%CCOMMENT = TRIM(HCOMMENT) - TZFIELD%NGRID = 4 - TZFIELD%NTYPE = TYPEREAL - TZFIELD%NDIMS = 3 + CALL PREPARE_METADATA_WRITE_SURF(HREC,YDIR,HCOMMENT,4,TYPEREAL,3,'WRITE_SURFX2COV_MNH',TZFIELD) CALL IO_WRITE_FIELD(TFILE_SURFEX,TZFIELD,ZWORK3D(1+NHALO:IIU-NHALO,1+NHALO:IJU-NHALO,:),KRESP) END IF ! @@ -657,6 +680,7 @@ USE MODE_IO_WRITE_FIELD USE MODE_FIELD, ONLY: TFIELDDATA,TYPEREAL USE MODE_MSG USE MODE_TOOLS_ll +USE MODE_WRITE_SURF_MNH_TOOLS ! USE MODD_CONF_n, ONLY: CSTORAGE_TYPE USE MODD_DATA_COVER_PAR,ONLY : JPCOVER @@ -732,27 +756,11 @@ IF (HDIR=='H' .OR. HDIR=='A') THEN WHERE (ZWORK==ZUNDEF) ZWORK=XUNDEF ! IF (HDIR=='H') THEN - TZFIELD%CMNHNAME = TRIM(HREC) - TZFIELD%CSTDNAME = '' - TZFIELD%CLONGNAME = TRIM(HREC) - TZFIELD%CUNITS = '' - TZFIELD%CDIR = 'XY' - TZFIELD%CCOMMENT = TRIM(HCOMMENT) - TZFIELD%NGRID = 4 - TZFIELD%NTYPE = TYPEREAL - TZFIELD%NDIMS = 3 + CALL PREPARE_METADATA_WRITE_SURF(HREC,'XY',HCOMMENT,4,TYPEREAL,3,'WRITE_SURFX2_MNH',TZFIELD) CALL IO_WRITE_FIELD(TFILE_SURFEX,TZFIELD,ZWORK(1+NHALO:IIU-NHALO,1+NHALO:IJU-NHALO,:),KRESP) END IF IF (HDIR=='A') THEN - TZFIELD%CMNHNAME = TRIM(HREC) - TZFIELD%CSTDNAME = '' - TZFIELD%CLONGNAME = TRIM(HREC) - TZFIELD%CUNITS = '' - TZFIELD%CDIR = '--' - TZFIELD%CCOMMENT = TRIM(HCOMMENT) - TZFIELD%NGRID = 4 - TZFIELD%NTYPE = TYPEREAL - TZFIELD%NDIMS = 3 + CALL PREPARE_METADATA_WRITE_SURF(HREC,'--',HCOMMENT,4,TYPEREAL,3,'WRITE_SURFX2_MNH',TZFIELD) CALL IO_WRITE_FIELD(TFILE_SURFEX,TZFIELD,ZWORK(:,:,:),KRESP) END IF ! @@ -763,15 +771,7 @@ ELSE IF (HDIR=='-') THEN ZFIELD=PFIELD WHERE (ZFIELD==ZUNDEF) ZFIELD=XUNDEF ! - TZFIELD%CMNHNAME = TRIM(HREC) - TZFIELD%CSTDNAME = '' - TZFIELD%CLONGNAME = TRIM(HREC) - TZFIELD%CUNITS = '' - TZFIELD%CDIR = '--' - TZFIELD%CCOMMENT = TRIM(HCOMMENT) - TZFIELD%NGRID = 4 - TZFIELD%NTYPE = TYPEREAL - TZFIELD%NDIMS = 2 + CALL PREPARE_METADATA_WRITE_SURF(HREC,'--',HCOMMENT,4,TYPEREAL,2,'WRITE_SURFX2_MNH',TZFIELD) CALL IO_WRITE_FIELD(TFILE_SURFEX,TZFIELD,ZFIELD(:,:),KRESP) ! DEALLOCATE(ZFIELD) @@ -829,6 +829,7 @@ END SUBROUTINE WRITE_SURFX2_MNH USE MODE_IO_WRITE_FIELD USE MODE_FIELD, ONLY: TFIELDDATA,TYPEINT USE MODE_MSG +USE MODE_WRITE_SURF_MNH_TOOLS ! USE MODD_CONF_n, ONLY: CSTORAGE_TYPE USE MODD_IO_ll, ONLY: TFILE_SURFEX @@ -866,15 +867,7 @@ ELSE IF (HREC=='IMAX') IFIELD = NIU_ALL-2*JPHEXT IF (HREC=='JMAX') IFIELD = NJU_ALL-2*JPHEXT ! - TZFIELD%CMNHNAME = TRIM(HREC) - TZFIELD%CSTDNAME = '' - TZFIELD%CLONGNAME = TRIM(HREC) - TZFIELD%CUNITS = '' - TZFIELD%CDIR = '--' - TZFIELD%CCOMMENT = TRIM(HCOMMENT) - TZFIELD%NGRID = 0 - TZFIELD%NTYPE = TYPEINT - TZFIELD%NDIMS = 0 + CALL PREPARE_METADATA_WRITE_SURF(HREC,'--',HCOMMENT,0,TYPEINT,0,'WRITE_SURFN0_MNH',TZFIELD) CALL IO_WRITE_FIELD(TFILE_SURFEX,TZFIELD,IFIELD,KRESP) END IF ! @@ -930,6 +923,7 @@ END SUBROUTINE WRITE_SURFN0_MNH USE MODE_IO_WRITE_FIELD USE MODE_FIELD, ONLY: TFIELDDATA,TYPEINT USE MODE_MSG +USE MODE_WRITE_SURF_MNH_TOOLS ! USE MODD_IO_ll, ONLY: TFILE_SURFEX USE MODD_IO_SURF_MNH, ONLY: NMASK, CMASK, & @@ -964,15 +958,7 @@ CALL PRINT_MSG(NVERB_DEBUG,'IO','WRITE_SURFN1_MNH',TRIM(TFILE_SURFEX%CNAME)//': ! IF (HDIR=='-') THEN ! - TZFIELD%CMNHNAME = TRIM(HREC) - TZFIELD%CSTDNAME = '' - TZFIELD%CLONGNAME = TRIM(HREC) - TZFIELD%CUNITS = '' - TZFIELD%CDIR = '--' - TZFIELD%CCOMMENT = TRIM(HCOMMENT) - TZFIELD%NGRID = 0 - TZFIELD%NTYPE = TYPEINT - TZFIELD%NDIMS = 1 + CALL PREPARE_METADATA_WRITE_SURF(HREC,'--',HCOMMENT,0,TYPEINT,1,'WRITE_SURFN1_MNH',TZFIELD) CALL IO_WRITE_FIELD(TFILE_SURFEX,TZFIELD,KFIELD,KRESP) ! ELSE IF (HDIR=='H') THEN @@ -982,15 +968,7 @@ ELSE IF (HDIR=='H') THEN ! CALL UNPACK_1D_2D(NMASK,KFIELD,IWORK(NIB:NIE,NJB:NJE)) ! - TZFIELD%CMNHNAME = TRIM(HREC) - TZFIELD%CSTDNAME = '' - TZFIELD%CLONGNAME = TRIM(HREC) - TZFIELD%CUNITS = '' - TZFIELD%CDIR = 'XY' - TZFIELD%CCOMMENT = TRIM(HCOMMENT) - TZFIELD%NGRID = 4 - TZFIELD%NTYPE = TYPEINT - TZFIELD%NDIMS = 2 + CALL PREPARE_METADATA_WRITE_SURF(HREC,'XY',HCOMMENT,4,TYPEINT,2,'WRITE_SURFN1_MNH',TZFIELD) CALL IO_WRITE_FIELD(TFILE_SURFEX,TZFIELD,IWORK(:,:),KRESP) ! DEALLOCATE(IWORK) @@ -1047,6 +1025,7 @@ END SUBROUTINE WRITE_SURFN1_MNH USE MODE_IO_WRITE_FIELD USE MODE_FIELD, ONLY: TFIELDDATA,TYPECHAR,TYPELOG USE MODE_MSG +USE MODE_WRITE_SURF_MNH_TOOLS ! USE MODD_CONF_n, ONLY: CSTORAGE_TYPE USE MODD_IO_ll, ONLY: TFILE_SURFEX @@ -1096,15 +1075,7 @@ IF ( (CSTORAGE_TYPE=='PG' .OR. CSTORAGE_TYPE=='SU') & ! END IF ! -TZFIELD%CMNHNAME = TRIM(HREC) -TZFIELD%CSTDNAME = '' -TZFIELD%CLONGNAME = TRIM(HREC) -TZFIELD%CUNITS = '' -TZFIELD%CDIR = '--' -TZFIELD%CCOMMENT = TRIM(HCOMMENT) -TZFIELD%NGRID = 0 -TZFIELD%NTYPE = TYPECHAR -TZFIELD%NDIMS = 0 +CALL PREPARE_METADATA_WRITE_SURF(HREC,'--',HCOMMENT,0,TYPECHAR,0,'WRITE_SURFC0_MNH',TZFIELD) CALL IO_WRITE_FIELD(TFILE_SURFEX,TZFIELD,HFIELD,KRESP) ! IF (KRESP /=0) THEN @@ -1158,6 +1129,7 @@ END SUBROUTINE WRITE_SURFC0_MNH USE MODE_IO_WRITE_FIELD USE MODE_FIELD, ONLY: TFIELDDATA,TYPEINT,TYPELOG USE MODE_MSG +USE MODE_WRITE_SURF_MNH_TOOLS ! USE MODD_CONF_n, ONLY: CSTORAGE_TYPE USE MODD_IO_ll, ONLY: TFILE_SURFEX @@ -1197,15 +1169,7 @@ IF (HDIR=='-') THEN TRIM(CMASK)//' not written in file by externalized surface') RETURN ELSE - TZFIELD%CMNHNAME = TRIM(HREC) - TZFIELD%CSTDNAME = '' - TZFIELD%CLONGNAME = TRIM(HREC) - TZFIELD%CUNITS = '' - TZFIELD%CDIR = '--' - TZFIELD%CCOMMENT = TRIM(HCOMMENT) - TZFIELD%NGRID = 0 - TZFIELD%NTYPE = TYPELOG - TZFIELD%NDIMS = 1 + CALL PREPARE_METADATA_WRITE_SURF(HREC,'--',HCOMMENT,0,TYPELOG,1,'WRITE_SURFL1_MNH',TZFIELD) CALL IO_WRITE_FIELD(TFILE_SURFEX,TZFIELD,OFIELD(:),KRESP) END IF ! @@ -1220,15 +1184,7 @@ ELSE IF (HDIR=='H') THEN IWORK = 0 WHERE(GWORK) IWORK = 1 ! - TZFIELD%CMNHNAME = TRIM(HREC) - TZFIELD%CSTDNAME = '' - TZFIELD%CLONGNAME = TRIM(HREC) - TZFIELD%CUNITS = '' - TZFIELD%CDIR = 'XY' - TZFIELD%CCOMMENT = TRIM(HCOMMENT) - TZFIELD%NGRID = 4 - TZFIELD%NTYPE = TYPEINT - TZFIELD%NDIMS = 2 + CALL PREPARE_METADATA_WRITE_SURF(HREC,'XY',HCOMMENT,4,TYPEINT,2,'WRITE_SURFL1_MNH',TZFIELD) CALL IO_WRITE_FIELD(TFILE_SURFEX,TZFIELD,IWORK(:,:),KRESP) ! DEALLOCATE(IWORK) @@ -1287,6 +1243,7 @@ END SUBROUTINE WRITE_SURFL1_MNH USE MODE_IO_WRITE_FIELD USE MODE_FIELD, ONLY: TFIELDDATA,TYPELOG USE MODE_MSG +USE MODE_WRITE_SURF_MNH_TOOLS ! USE MODD_CONF_n, ONLY: CSTORAGE_TYPE USE MODD_IO_ll, ONLY: TFILE_SURFEX @@ -1313,15 +1270,7 @@ IF( (CMASK /= 'FULL ').AND. (HREC=='COVER') ) THEN TRIM(CMASK)//' not written in file by externalized surface') RETURN ELSE - TZFIELD%CMNHNAME = TRIM(HREC) - TZFIELD%CSTDNAME = '' - TZFIELD%CLONGNAME = TRIM(HREC) - TZFIELD%CUNITS = '' - TZFIELD%CDIR = '--' - TZFIELD%CCOMMENT = TRIM(HCOMMENT) - TZFIELD%NGRID = 0 - TZFIELD%NTYPE = TYPELOG - TZFIELD%NDIMS = 0 + CALL PREPARE_METADATA_WRITE_SURF(HREC,'--',HCOMMENT,0,TYPELOG,0,'WRITE_SURFL0_MNH',TZFIELD) CALL IO_WRITE_FIELD(TFILE_SURFEX,TZFIELD,OFIELD,KRESP) END IF ! @@ -1377,6 +1326,7 @@ USE MODE_FIELD, ONLY: TFIELDDATA, TYPEDATE USE MODE_FM USE MODE_FMWRIT USE MODE_MSG +USE MODE_WRITE_SURF_MNH_TOOLS ! USE MODD_CONF_n, ONLY : CSTORAGE_TYPE USE MODD_IO_ll, ONLY: TFILE_SURFEX @@ -1414,16 +1364,7 @@ ELSE TZDATA%TDATE = DATE(KYEAR,KMONTH,KDAY) TZDATA%TIME = PTIME ! - TZFIELD%CMNHNAME = TRIM(HREC) - TZFIELD%CSTDNAME = '' - TZFIELD%CLONGNAME = TRIM(HREC) - TZFIELD%CUNITS = '' - TZFIELD%CDIR = '--' - TZFIELD%CCOMMENT = TRIM(HCOMMENT) - TZFIELD%NGRID = 0 - TZFIELD%NTYPE = TYPEDATE - TZFIELD%NDIMS = 0 - ! + CALL PREPARE_METADATA_WRITE_SURF(HREC,'--',HCOMMENT,0,TYPEDATE,0,'WRITE_SURFT0_MNH',TZFIELD) CALL IO_WRITE_FIELD(TFILE_SURFEX,TZFIELD,TZDATA,KRESP) END IF !