Skip to content
Snippets Groups Projects
read_surf_mnh.f90 55.4 KiB
Newer Older
CALL IO_READ_FIELD(TPINFILE,'VERSION',IVERSION)
CALL IO_READ_FIELD(TPINFILE,'BUG',    IBUGFIX)

IF (IVERSION<7 .OR. (IVERSION==7 .AND. IBUGFIX==0)) THEN
  GCOVER_PACKED = .FALSE.
ELSE
  TZFIELD%CMNHNAME   = 'COVER_PACKED'
  TZFIELD%CSTDNAME   = ''
  TZFIELD%CUNITS     = ''
  TZFIELD%CDIR       = '--'
  TZFIELD%CCOMMENT   = ''
  TZFIELD%NGRID      = 0
  TZFIELD%NTYPE      = TYPELOG
  TZFIELD%NDIMS      = 0
  CALL IO_READ_FIELD(TPINFILE,TZFIELD,GCOVER_PACKED,KRESP)
END IF
!
IF (.NOT. GCOVER_PACKED) THEN
  WRITE(YREC,'(A5,I3.3)') 'COVER',KCOVER
  TZFIELD%CMNHNAME   = TRIM(YREC)
  TZFIELD%CSTDNAME   = ''
  TZFIELD%CCOMMENT   = 'X_Y_'//TRIM(YREC)
  TZFIELD%NGRID      = 4
  TZFIELD%NTYPE      = TYPEREAL
  TZFIELD%NDIMS      = 2
  CALL IO_READ_FIELD(TPINFILE,TZFIELD,ZWORK2D,KRESP)
  WRITE(ILUOUT,*) 'WARNING'
  WRITE(ILUOUT,*) '-------'
  WRITE(ILUOUT,*) 'error : GCOVER_PACKED = ', GCOVER_PACKED, ' and we try to read the covers one by one '
  WRITE(ILUOUT,*) ' '
  WRITE(ILUOUT,*) 'WARNING'
  WRITE(ILUOUT,*) '-------'
  WRITE(ILUOUT,*) 'error when reading article ', HREC,'KRESP=',KRESP
  WRITE(ILUOUT,*) ' '
Gaelle DELAUTIER's avatar
Gaelle DELAUTIER committed
ELSE IF (YDIR1=='H' .OR. YDIR1=='A' .OR. YDIR1=='E') THEN
   CALL PACK_2D_1D(IMASK,ZWORK2D(IIB:IIE,IJB:IJE),PFIELD(:))
END IF
!
DEALLOCATE(ZWORK2D)


DEALLOCATE(IMASK)
!-------------------------------------------------------------------------------
END SUBROUTINE READ_SURFX2COV_1COV_MNH
!
!     #############################################################
      SUBROUTINE READ_SURFN0_MNH(HREC,KFIELD,KRESP,HCOMMENT)
!     #############################################################
!
!!****  *READN0* - routine to read an integer
!!
!!    PURPOSE
!!    -------
!
!       The purpose of READN0 is
!
!!**  METHOD
!!    ------
!!
!!    EXTERNAL
!!    --------
!!
!!
!!
!!    IMPLICIT ARGUMENTS
!!    ------------------
!!
!!
!!    REFERENCE
!!    ---------
!!
!!
!!    AUTHOR
!!    ------
!!
!!      S.Malardel      *METEO-FRANCE*
!!
!!    MODIFICATIONS
!!    -------------
!!
!!      original                                                     01/08/03
!----------------------------------------------------------------------------
!
!*      0.    DECLARATIONS
!             ------------
!
USE MODE_ll
USE MODE_FM
USE MODE_FMREAD
USE MODD_IO_SURF_MNH, ONLY : TOUT, TPINFILE, NMASK, &
                             NIU, NJU, NIB, NJB, NIE, NJE
USE MODD_CONF,        ONLY : CPROGRAM
!
!
!
IMPLICIT NONE
!
!*      0.1   Declarations of arguments
!
CHARACTER(LEN=LEN_HREC),INTENT(IN)  :: HREC     ! name of the article to be read
INTEGER,                INTENT(OUT) :: KFIELD   ! the integer to be read
INTEGER,                INTENT(OUT) :: KRESP    ! KRESP  : return-code if a problem appears
CHARACTER(LEN=100),     INTENT(OUT) :: HCOMMENT ! comment
!
!*      0.2   Declarations of local variables
!
!
!-------------------------------------------------------------------------------
!
CALL PRINT_MSG(NVERB_DEBUG,'IO','READ_SURFN0_MNH',TRIM(TPINFILE%CNAME)//': reading '//TRIM(HREC))
!
IF (HREC=='DIM_FULL' .AND. ( CPROGRAM=='IDEAL ' .OR.  &
                                  CPROGRAM=='SPAWN ' .OR. CPROGRAM=='ZOOMPG' ))THEN
   CALL IO_READ_FIELD(TPINFILE,'IMAX',IIMAX)
   CALL IO_READ_FIELD(TPINFILE,'JMAX',IJMAX)
   KFIELD = IIMAX * IJMAX
ELSE
   CALL PREPARE_METADATA_READ_SURF(HREC,'--',0,TYPEINT,0,'READ_SURFN0_MNH',TZFIELD)
   CALL IO_READ_FIELD(TPINFILE,TZFIELD,KFIELD,KRESP)
      WRITE(ILUOUT,*) 'WARNING'
      WRITE(ILUOUT,*) '-------'
      WRITE(ILUOUT,*) 'error when reading article ', HREC,'KRESP=',KRESP
      WRITE(ILUOUT,*) 'default value may be used, who knows???'
      WRITE(ILUOUT,*) ' '
   ENDIF

ENDIF
!-------------------------------------------------------------------------------
END SUBROUTINE READ_SURFN0_MNH
!
!     #############################################################
      SUBROUTINE READ_SURFN1_MNH(HREC,KL,KFIELD,KRESP,HCOMMENT,HDIR)
!     #############################################################
!
!!****  *READN0* - routine to read an integer
!!
!!    PURPOSE
!!    -------
!
!       The purpose of READN0 is
!
!!**  METHOD
!!    ------
!!
!!    EXTERNAL
!!    --------
!!
!!
!!
!!    IMPLICIT ARGUMENTS
!!    ------------------
!!
!!
!!    REFERENCE
!!    ---------
!!
!!
!!    AUTHOR
!!    ------
!!
!!      S.Malardel      *METEO-FRANCE*
!!
!!    MODIFICATIONS
!!    -------------
!!
!!      original                                                     01/08/03
!----------------------------------------------------------------------------
!
!*      0.    DECLARATIONS
!             ------------
!
USE MODE_FM
USE MODE_FMREAD
USE MODD_IO_SURF_MNH, ONLY : TOUT, TPINFILE, NMASK, &
                             NIU, NJU, NIB, NJB, NIE, NJE
!
USE MODI_PACK_2D_1D
!
IMPLICIT NONE
!
!*      0.1   Declarations of arguments
!
CHARACTER(LEN=LEN_HREC),INTENT(IN)  :: HREC     ! name of the article to be read
INTEGER,                INTENT(IN)  :: KL       ! number of points
INTEGER, DIMENSION(KL), INTENT(OUT) :: KFIELD   ! the integer to be read
INTEGER,                INTENT(OUT) :: KRESP    ! KRESP  : return-code if a problem appears
CHARACTER(LEN=100),     INTENT(OUT) :: HCOMMENT ! comment
CHARACTER(LEN=1),       INTENT(IN)  :: HDIR     ! type of field :
!                                               ! 'H' : field with
!                                               !       horizontal spatial dim.
!                                               ! '-' : no horizontal dim.
!
!*      0.2   Declarations of local variables
!
INTEGER           :: IGRID          ! IGRID : grid indicator
INTEGER           :: ILENCH         ! ILENCH : length of comment string
!
INTEGER, DIMENSION(:,:), ALLOCATABLE :: IWORK  ! work array read in the file
!---------------------------------------------------------------------
!
CALL PRINT_MSG(NVERB_DEBUG,'IO','READ_SURFN1_MNH',TRIM(TPINFILE%CNAME)//': reading '//TRIM(HREC))
!
IF (HDIR=='-') THEN
!
  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
  CALL PREPARE_METADATA_READ_SURF(HREC,'XY',4,TYPEINT,2,'READ_SURFN1_MNH',TZFIELD)
  CALL IO_READ_FIELD(TPINFILE,TZFIELD,IWORK,KRESP)
    WRITE(ILUOUT,*) 'WARNING'
    WRITE(ILUOUT,*) '-------'
    WRITE(ILUOUT,*) 'error when reading article ', HREC,'KRESP=',KRESP
    WRITE(ILUOUT,*) 'default value may be used, who knows???'
    WRITE(ILUOUT,*) ' '
 ELSE
    CALL PACK_2D_1D(NMASK,IWORK(NIB:NIE,NJB:NJE),KFIELD)
 END IF
!
DEALLOCATE(IWORK)

ENDIF
!-------------------------------------------------------------------------------
END SUBROUTINE READ_SURFN1_MNH
!
!     #############################################################
      SUBROUTINE READ_SURFC0_MNH(HREC,HFIELD,KRESP,HCOMMENT)
!     #############################################################
!
!!****  *READC0* - routine to read an integer
!!
!!    PURPOSE
!!    -------
!
!       The purpose of READC0 is
!
!!**  METHOD
!!    ------
!!
!!    EXTERNAL
!!    --------
!!
!!
!!
!!    IMPLICIT ARGUMENTS
!!    ------------------
!!
!!
!!    REFERENCE
!!    ---------
!!
!!
!!    AUTHOR
!!    ------
!!
!!      S.Malardel      *METEO-FRANCE*
!!
!!    MODIFICATIONS
!!    -------------
!!
!!      original                                                     01/08/03
!----------------------------------------------------------------------------
!
!*      0.    DECLARATIONS
!             ------------
!
USE MODE_ll
USE MODE_FMREAD
USE MODE_POS
USE MODD_IO_SURF_MNH, ONLY : TOUT, TPINFILE
USE MODD_CONF,        ONLY : LCARTESIAN, CPROGRAM
USE MODD_LUNIT,       ONLY : TPGDFILE
!
!
IMPLICIT NONE
!
!*      0.1   Declarations of arguments
!
CHARACTER(LEN=LEN_HREC),INTENT(IN)  :: HREC      ! name of the article to be read
CHARACTER(LEN=40),      INTENT(OUT) :: HFIELD    ! the integer to be read
INTEGER,                INTENT(OUT) :: KRESP     ! KRESP  : return-code if a problem appears
CHARACTER(LEN=100),     INTENT(OUT) :: HCOMMENT  ! comment
!
!*      0.2   Declarations of local variables
!
INTEGER           :: IRESP          ! return code
INTEGER           :: IGRID          ! IGRID : grid indicator
INTEGER           :: ILENCH         ! ILENCH : length of comment string
!
INTEGER           :: IMASDEV      ! mesonh version of the input file
INTEGER           :: ILUDES       ! .des file logical unit
!
LOGICAL           :: GFOUND
CHARACTER(LEN=4)  :: CTURB,CRAD,CGROUND,CCLOUD,CDCONV,CELEC
CHARACTER(LEN=6)  :: CSEA_FLUX
NAMELIST/NAM_PARAMn/CTURB,CRAD,CGROUND,CCLOUD,CDCONV,CSEA_FLUX, CELEC
!----------------------------------------------------------------------------
CALL PRINT_MSG(NVERB_DEBUG,'IO','READ_SURFC0_MNH',TRIM(TPINFILE%CNAME)//': reading '//TRIM(HREC))
!
! On lit la version de Mesonh usilisée pour fabriquer le fichier
!
CALL IO_READ_FIELD(TPINFILE,'MASDEV',IMASDEV)

IF (HREC=='SNOW_VEG_TYPE'.AND.IMASDEV<46) THEN
  HFIELD='D95'
ELSE IF (HREC=='SNOW_ROAD_TYPE'.AND.IMASDEV<46) THEN
  HFIELD='1-L'
ELSE IF (HREC=='SNOW_ROOF_TYPE'.AND.IMASDEV<46) THEN
  HFIELD='1-L'
ELSE IF (HREC=='PHOTO'.AND.IMASDEV<46) THEN
  HFIELD='NON'
ELSE IF ( HREC=='GRID_TYPE'.AND. (IMASDEV<46 .OR. &
                           (CPROGRAM=='IDEAL ' .AND. .NOT.ASSOCIATED(TPGDFILE,TOUT)) .OR. &
                           (CPROGRAM=='SPAWN ' .AND. .NOT.ASSOCIATED(TPGDFILE,TOUT)) .OR. &
                           CPROGRAM=='ZOOMPG'                         )) THEN
  IF (LCARTESIAN) THEN
    HFIELD="CARTESIAN "
  ELSE
    HFIELD='CONF PROJ '
  END IF
ELSE IF ( HREC=='ISBA  ' .AND.IMASDEV<46) THEN
  HFIELD = '3-L'
ELSE IF ( (HREC=='NATURE'.OR.HREC=='SEA   '.OR.HREC=='WATER ' &
            .OR.HREC=='TOWN  ') .AND.IMASDEV<46) THEN
     IF (CPROGRAM=='REAL  ' .OR. CPROGRAM=='IDEAL ') THEN
       CGROUND='ISBA'
     ELSE
       CGROUND='NONE'
       IF (GFOUND) READ(UNIT=ILUDES,NML=NAM_PARAMn)
     END IF
     IF (CGROUND=='NONE') THEN
       HFIELD ='NONE  '
     ELSE IF (CGROUND=='FLUX') THEN
       HFIELD ='FLUX  '
     ELSE IF (CGROUND=='ISBA') THEN
       IF(HREC=='SEA   ') HFIELD ='SEAFLX'
       IF(HREC=='WATER ') HFIELD ='WATFLX'
       IF(HREC=='NATURE') HFIELD ='ISBA  '
       IF(HREC=='TOWN  ') HFIELD ='TEB   '
     ELSE
       WRITE(ILUOUT,*) ' '
       WRITE(ILUOUT,*) 'error when reading article', HREC,'KRESP=',KRESP
       WRITE(ILUOUT,*) 'avec CGROUND = "',CGROUND,'"'
 !callabortstop
CALL ABORT
       STOP
     END IF

ELSE
   CALL PREPARE_METADATA_READ_SURF(HREC,'--',0,TYPECHAR,0,'READ_SURFC0_MNH',TZFIELD)
   CALL IO_READ_FIELD(TPINFILE,TZFIELD,HFIELD,KRESP)
      WRITE(ILUOUT,*) 'WARNING'
      WRITE(ILUOUT,*) '-------'
      WRITE(ILUOUT,*) 'error when reading article ', HREC,'KRESP=',KRESP
      WRITE(ILUOUT,*) 'default value may be used, who knows???'
      WRITE(ILUOUT,*) ' '
 !callabortstop
CALL ABORT
      STOP
   ENDIF

ENDIF
!
!-------------------------------------------------------------------------------
END SUBROUTINE READ_SURFC0_MNH
!
!     #############################################################
      SUBROUTINE READ_SURFL1_MNH(HREC,KL,OFIELD,KRESP,HCOMMENT,HDIR)
!     #############################################################
!
!!****  *READL1* - routine to read a logical array
!!
!!    PURPOSE
!!    -------
!
!       The purpose of READL1 is
!
!!**  METHOD
!!    ------
!!
!!    EXTERNAL
!!    --------
!!
!!
!!
!!    IMPLICIT ARGUMENTS
!!    ------------------
!!
!!
!!    REFERENCE
!!    ---------
!!
!!
!!    AUTHOR
!!    ------
!!
!!      S.Malardel      *METEO-FRANCE*
!!
!!    MODIFICATIONS
!!    -------------
!!
!!      original                                                     01/08/03
!----------------------------------------------------------------------------
!
!*      0.    DECLARATIONS
!             ------------
!
USE MODD_IO_SURF_MNH, ONLY : TOUT, TPINFILE, NMASK, &
                             NIU, NJU, NIB, NJB, NIE, NJE
USE MODE_FM
USE MODE_FMREAD
USE MODI_PACK_2D_1D
!
!
!
IMPLICIT NONE
!
!*      0.1   Declarations of arguments
!
CHARACTER(LEN=LEN_HREC),INTENT(IN)  :: HREC     ! name of the article to be read
INTEGER,                INTENT(IN)  :: KL       ! number of points
LOGICAL, DIMENSION(KL), INTENT(OUT) :: OFIELD   ! array containing the data field
INTEGER,                INTENT(OUT) :: KRESP    ! KRESP  : return-code if a problem appears
CHARACTER(LEN=100),     INTENT(OUT) :: HCOMMENT ! comment
CHARACTER(LEN=1),       INTENT(IN)  :: HDIR     ! type of field :
!                                               ! 'H' : field with
!                                               !       horizontal spatial dim.
!                                               ! '-' : no horizontal dim.
!
!*      0.2   Declarations of local variables
!
INTEGER           :: IGRID          ! IGRID : grid indicator
INTEGER           :: ILENCH         ! ILENCH : length of comment string
LOGICAL, DIMENSION(:,:), ALLOCATABLE :: GWORK  ! work array read in the file
INTEGER, DIMENSION(:,:), ALLOCATABLE :: IWORK  ! work array read in the file
!-------------------------------------------------------------------------------
CALL PRINT_MSG(NVERB_DEBUG,'IO','READ_SURFL1_MNH',TRIM(TPINFILE%CNAME)//': reading '//TRIM(HREC))
!
IF (HDIR=='-') THEN
  CALL PREPARE_METADATA_READ_SURF(HREC,'--',0,TYPELOG,1,'READ_SURFL1_MNH',TZFIELD)
  CALL IO_READ_FIELD(TPINFILE,TZFIELD,OFIELD,KRESP)
    WRITE(ILUOUT,*) 'WARNING'
    WRITE(ILUOUT,*) '-------'
    WRITE(ILUOUT,*) 'error when reading article ', HREC,'KRESP=',KRESP
    WRITE(ILUOUT,*) 'default value may be used, who knows???'
    WRITE(ILUOUT,*) ' '
ELSE IF (HDIR=='H') THEN
  ALLOCATE(GWORK(NIU,NJU))
  GWORK = .FALSE.
!
  ALLOCATE(IWORK(NIU,NJU))
  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)
!
    WRITE(ILUOUT,*) 'WARNING'
    WRITE(ILUOUT,*) '-------'
    WRITE(ILUOUT,*) 'error when reading article ', HREC,'KRESP=',KRESP
    WRITE(ILUOUT,*) 'default value may be used, who knows???'
    WRITE(ILUOUT,*) ' '
    CALL PACK_2D_1D(NMASK,GWORK(NIB:NIE,NJB:NJE),OFIELD)
END IF
!-------------------------------------------------------------------------------
END SUBROUTINE READ_SURFL1_MNH
!
!     #############################################################
      SUBROUTINE READ_SURFL0_MNH(HREC,OFIELD,KRESP,HCOMMENT)
!     #############################################################
!
!!****  *READL0* - routine to read a logical
!!
!!    PURPOSE
!!    -------
!
!
!!**  METHOD
!!    ------
!!
!!    EXTERNAL
!!    --------
!!
!!
!!
!!    IMPLICIT ARGUMENTS
!!    ------------------
!!
!!
!!    REFERENCE
!!    ---------
!!
!!
!!    AUTHOR
!!    ------
!!
!!      S.Malardel      *METEO-FRANCE*
!!
!!    MODIFICATIONS
!!    -------------
!!
!!      original                                                     01/08/03
!----------------------------------------------------------------------------
!
!*      0.    DECLARATIONS
!             ------------
!
USE MODE_FM
USE MODE_FMREAD
!
!
IMPLICIT NONE
!
!*      0.1   Declarations of arguments
!
CHARACTER(LEN=LEN_HREC),INTENT(IN)  :: HREC     ! name of the article to be read
LOGICAL,                INTENT(OUT) :: OFIELD   ! array containing the data field
INTEGER,                INTENT(OUT) :: KRESP    ! KRESP  : return-code if a problem appears
CHARACTER(LEN=100),     INTENT(OUT) :: HCOMMENT ! comment
!
!*      0.2   Declarations of local variables
!
INTEGER           :: IMASDEV        ! MESONH version
!-------------------------------------------------------------------------------
CALL PRINT_MSG(NVERB_DEBUG,'IO','READ_SURFL0_MNH',TRIM(TPINFILE%CNAME)//': reading '//TRIM(HREC))
!
IF (HREC(1:4)=='BUDC') THEN
  CALL IO_READ_FIELD(TPINFILE,'MASDEV',IMASDEV)
  IF (IMASDEV<=45) THEN
    OFIELD = .FALSE.
    KRESP = 0
    RETURN
  END IF
END IF
!
IF (HREC=='ECOCLIMAP') THEN
  CALL IO_READ_FIELD(TPINFILE,'MASDEV',IMASDEV)
  IF (IMASDEV<=46) THEN
    OFIELD = .TRUE.
    KRESP = 0
    RETURN
  END IF
END IF
!
CALL PREPARE_METADATA_READ_SURF(HREC,'--',0,TYPELOG,0,'READ_SURFL0_MNH',TZFIELD)
CALL IO_READ_FIELD(TPINFILE,TZFIELD,OFIELD,KRESP)
HCOMMENT = TZFIELD%CCOMMENT
!
  WRITE(ILUOUT,*) 'WARNING'
  WRITE(ILUOUT,*) '-------'
  WRITE(ILUOUT,*) 'error when reading article ', HREC,'KRESP=',KRESP
  WRITE(ILUOUT,*) 'default value may be used, who knows???'
  WRITE(ILUOUT,*) ' '
ENDIF
!-------------------------------------------------------------------------------
END SUBROUTINE READ_SURFL0_MNH
!
!     #############################################################
      SUBROUTINE READ_SURFT0_MNH(HREC,KYEAR,KMONTH,KDAY,PTIME,KRESP,HCOMMENT)
!     #############################################################
!
!!****  *READT0* - routine to read a MESO-NH date_time scalar
!!
!!    PURPOSE
!!    -------
!
!       The purpose of READT0 is
!
!!**  METHOD
!!    ------
!!
!!    EXTERNAL
!!    --------
!!
!!
!!
!!    IMPLICIT ARGUMENTS
!!    ------------------
!!
!!
!!    REFERENCE
!!    ---------
!!
!!
!!    AUTHOR
!!    ------
!!
!!      V. MASSON      *METEO-FRANCE*
!!
!!    MODIFICATIONS
!!    -------------
!!
!!      original                                                     18/08/97
!----------------------------------------------------------------------------
!
!*      0.    DECLARATIONS
!             ------------
!
USE MODE_FM
USE MODE_FMREAD
!
!
IMPLICIT NONE
!
!*      0.1   Declarations of arguments
!
CHARACTER(LEN=LEN_HREC),INTENT(IN)    :: HREC     ! name of the article to be read
INTEGER,                INTENT(OUT)   :: KYEAR    ! year
INTEGER,                INTENT(OUT)   :: KMONTH   ! month
INTEGER,                INTENT(OUT)   :: KDAY     ! day
REAL,                   INTENT(OUT)   :: PTIME    ! time
INTEGER,                INTENT(OUT)   :: KRESP    ! KRESP  : return-code if a problem appears
CHARACTER(LEN=100),     INTENT(OUT)   :: HCOMMENT ! comment

!*      0.2   Declarations of local variables
!
INTEGER           :: IGRID          ! IGRID : grid indicator
INTEGER           :: ILENCH         ! ILENCH : length of comment string
CHARACTER(LEN=LEN_HREC)        :: YRECFM     ! Name of the article to be written
CHARACTER(LEN=40)              :: YFILETYPE40! MESONH file type
CHARACTER(LEN=2)               :: YFILETYPE2 ! MESONH file type
INTEGER, DIMENSION(3)  :: ITDATE
INTEGER                :: IMASDEV           ! MESONH version
TYPE(TFIELDDATA)       :: TZFIELD
TYPE(DATE_TIME)        :: TZDATETIME
!-------------------------------------------------------------------------------
!
CALL PRINT_MSG(NVERB_DEBUG,'IO','READ_SURFT0_MNH',TRIM(TPINFILE%CNAME)//': reading '//TRIM(HREC))
CALL IO_READ_FIELD(TPINFILE,'MASDEV',IMASDEV)
IF (IMASDEV<46) THEN
  CALL IO_READ_FIELD(TPINFILE,'STORAGE_TYPE',YFILETYPE2)
  TZFIELD%CMNHNAME   = 'STORAGETYPE'
  TZFIELD%CSTDNAME   = ''
  TZFIELD%NGRID      = 0
  TZFIELD%NTYPE      = TYPECHAR
  TZFIELD%NDIMS      = 0
  CALL IO_READ_FIELD(TPINFILE,TZFIELD,YFILETYPE40)
  YFILETYPE2 = YFILETYPE40(1:2)
END IF
IF (YFILETYPE2(1:2)=='PG') THEN
  WRITE(ILUOUT,*) 'WARNING'
  WRITE(ILUOUT,*) '-------'
  WRITE(ILUOUT,*) 'Date is not read in a PGD file'
  WRITE(ILUOUT,*) 'Atmospheric model value is kept'
  WRITE(ILUOUT,*) ' '
CALL IO_READ_FIELD(TPINFILE,HREC,TZDATETIME,KRESP)
!
  WRITE(ILUOUT,*) 'WARNING'
  WRITE(ILUOUT,*) '-------'
  WRITE(ILUOUT,*) 'error when reading article ',YRECFM,'KRESP=',KRESP
  WRITE(ILUOUT,*) 'default value may be used, who knows???'
  WRITE(ILUOUT,*) ' '
ENDIF
!
KYEAR  = TZDATETIME%TDATE%YEAR
KMONTH = TZDATETIME%TDATE%MONTH
KDAY   = TZDATETIME%TDATE%DAY
PTIME  = TZDATETIME%TIME
!
!-------------------------------------------------------------------------------
END SUBROUTINE READ_SURFT0_MNH

!     #############################################################
      SUBROUTINE READ_SURFT1_MNH(HREC,KL1,KYEAR,KMONTH,KDAY,PTIME,KRESP,HCOMMENT)
!     #############################################################
!
!!****  *READT0* - routine to read a MESO-NH date_time vector
!!
!!    PURPOSE
!!    -------
!
!       The purpose of READT1 is
!
!!**  METHOD
!!    ------
!!
!!    EXTERNAL
!!    --------
!!
!!
!!
!!    IMPLICIT ARGUMENTS
!!    ------------------
!!
!!
!!    REFERENCE
!!    ---------
!!
!!
!!    AUTHOR
!!    ------
!!
!!      G. TANGUY      *METEO-FRANCE*
!!
!!    MODIFICATIONS
!!    -------------
!!
!!      original                                                     03/2009
!----------------------------------------------------------------------------
!
!*      0.    DECLARATIONS
!             ------------
!
USE MODE_FIELD,       ONLY : TFIELDDATA,TYPECHAR,TYPEINT,TYPEREAL
USE MODE_FM
USE MODE_FMREAD
!
!
IMPLICIT NONE
!
!*      0.1   Declarations of arguments
!
CHARACTER(LEN=LEN_HREC), INTENT(IN)    :: HREC     ! name of the article to be read
INTEGER,                 INTENT(IN)    :: KL1      ! number of points

INTEGER, DIMENSION(KL1), INTENT(OUT)   :: KYEAR    ! year
INTEGER, DIMENSION(KL1), INTENT(OUT)   :: KMONTH   ! month
INTEGER, DIMENSION(KL1), INTENT(OUT)   :: KDAY     ! day
REAL,    DIMENSION(KL1), INTENT(OUT)   :: PTIME    ! time
INTEGER,                 INTENT(OUT)   :: KRESP    ! KRESP  : return-code if a problem appears
CHARACTER(LEN=100),      INTENT(OUT)   :: HCOMMENT ! comment

!*      0.2   Declarations of local variables
!
INTEGER           :: IGRID          ! IGRID : grid indicator
INTEGER           :: ILENCH         ! ILENCH : length of comment string
CHARACTER(LEN=LEN_HREC)        :: YRECFM     ! Name of the article to be written
CHARACTER(LEN=40)              :: YFILETYPE40! MESONH file type
CHARACTER(LEN=2)               :: YFILETYPE2 ! MESONH file type
INTEGER, DIMENSION(3,KL1)  :: ITDATE
INTEGER                :: IMASDEV           ! MESONH version
!-------------------------------------------------------------------------------
!
CALL PRINT_MSG(NVERB_DEBUG,'IO','READ_SURFT1_MNH',TRIM(TPINFILE%CNAME)//': reading '//TRIM(HREC))
CALL IO_READ_FIELD(TPINFILE,'MASDEV',IMASDEV)
IF (IMASDEV<46) THEN
  CALL IO_READ_FIELD(TPINFILE,'STORAGE_TYPE',YFILETYPE2)
  TZFIELD%CMNHNAME   = 'STORAGETYPE'
  TZFIELD%CSTDNAME   = ''
  TZFIELD%NGRID      = 0
  TZFIELD%NTYPE      = TYPECHAR
  TZFIELD%NDIMS      = 0
  CALL IO_READ_FIELD(TPINFILE,TZFIELD,YFILETYPE40)
  YFILETYPE2 = YFILETYPE40(1:2)
END IF
!IF (YFILETYPE2(1:2)=='PG') THEN
!  WRITE(ILUOUT,*) 'WARNING'
!  WRITE(ILUOUT,*) '-------'
!  WRITE(ILUOUT,*) 'Date is not read in a PGD file'
!  WRITE(ILUOUT,*) 'Atmospheric model value is kept'
!  WRITE(ILUOUT,*) ' '
!  KRESP = -2
!  RETURN
!END IF
!
TZFIELD%CMNHNAME   = TRIM(HREC)//'%TDATE'
TZFIELD%CSTDNAME   = ''
TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
TZFIELD%CUNITS     = ''
TZFIELD%CDIR       = '--'
TZFIELD%CCOMMENT   = TRIM(HCOMMENT)
TZFIELD%NGRID      = 0
TZFIELD%NTYPE      = TYPEINT
TZFIELD%NDIMS      = 2
!
CALL IO_READ_FIELD(TPINFILE,TZFIELD,ITDATE(:,:),KRESP)
!
KYEAR(:)  = ITDATE(1,:)
KMONTH(:) = ITDATE(2,:)
KDAY(:)   = ITDATE(3,:)
  WRITE(ILUOUT,*) 'WARNING'
  WRITE(ILUOUT,*) '-------'
  WRITE(ILUOUT,*) 'error when reading article ',YRECFM,'KRESP=',KRESP
  WRITE(ILUOUT,*) 'default value may be used, who knows???'
  WRITE(ILUOUT,*) ' '
TZFIELD%CMNHNAME   = TRIM(HREC)//'%TIME'
TZFIELD%CSTDNAME   = ''
TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
TZFIELD%CUNITS     = ''
TZFIELD%CDIR       = '--'
TZFIELD%CCOMMENT   = TRIM(HCOMMENT)
TZFIELD%NGRID      = 0
TZFIELD%NTYPE      = TYPEREAL
TZFIELD%NDIMS      = 1
!
CALL IO_READ_FIELD(TPINFILE,TZFIELD,PTIME(:),KRESP)
!
  WRITE(ILUOUT,*) 'WARNING'
  WRITE(ILUOUT,*) '-------'
  WRITE(ILUOUT,*) 'error when reading article ',YRECFM,'KRESP=',KRESP
  WRITE(ILUOUT,*) 'default value may be used, who knows???'
  WRITE(ILUOUT,*) ' '
!-------------------------------------------------------------------------------
END SUBROUTINE READ_SURFT1_MNH