Skip to content
Snippets Groups Projects
readuntouch.f90 15.3 KiB
Newer Older
  • Learn to ignore specific revisions
  • !      ######################################
           SUBROUTINE READUNTOUCH(HFMFILE,HLUOUT)
    !      ######################################
    !
    !!      add LTHINSHELL, XXHAT, XYHAT, XZHAT, CMY_NAME, 
    !!          CDAD_NAME and CSTORAGE_TYPE        (V. Masson)           31/01/97
    !!      update FMREAD calls, add MASDEV        (I. Mallet)           19/04/02
    !!---------------------------------------------------------------------------
    !
    !
    !USE MODD_TYPE_DATE
    ! en attendant une surcouche officielle...
    !USE MODE_FMREAD  
    USE MODI_FMREAD
    USE MODE_GRIDPROJ
    !
    !IMPLICIT NONE
    !
    !*       0.1     Declarations of arguments
    !
    CHARACTER(LEN=*),INTENT(IN) :: HFMFILE,HLUOUT
    !
    !*       0.2    Declarations of local variables
    !
    INTEGER :: IGRID,ILENCH,IRESP,NIMAX,NJMAX,NKMAX,IXOR,IYOR
    INTEGER :: ILENG ! en attendant une surcouche officielle...
    INTEGER :: NMASDEV,NBUGFIX,NVERSION_SURFEX,NBUGFIX_SURFEX
    CHARACTER(LEN=100) :: YCOMMENT
    CHARACTER(LEN=16)  :: YRECFM
    CHARACTER(LEN=10)  :: CBIBUSER
    CHARACTER(LEN=6)   :: CPROGRAM
    CHARACTER(LEN=4)   :: CSURF
    CHARACTER(LEN=40)   :: CPHOTO
    CHARACTER(LEN=28)  :: CDAD_NAME, CMY_NAME
    CHARACTER(LEN=2)   :: CSTORAGE_TYPE
    LOGICAL :: LCARTESIAN, LTHINSHELL, L1D, L2D, LPACK, LSLEVE, LECOCLIMAP
    REAL    :: XLON0,XRPK,XLAT0,XBETA,XLATORI,XLONORI,XLEN1,XLEN2
    REAL, DIMENSION(:), ALLOCATABLE :: XXHAT,XYHAT,XZHAT
    INTEGER :: JLOOP
    !
    INTEGER, DIMENSION(3)  :: ITDATE      ! date array
    REAL  :: ZTDATE      ! seconds
    ! evite le USE MODD_TYPE_DATE
    !TYPE (DATE_TIME) :: TDTEXP      ! Time and Date of Experiment beginning
    !TYPE (DATE_TIME) :: TDTSEG      ! Time and Date of the segment beginning
    !TYPE (DATE_TIME) :: TDTMOD      ! Time and Date of the model beginning
    !TYPE (DATE_TIME) :: TDTCUR      ! Current Time and Date in the model
    !
    !---------------------------------------------------------------------------
    !
    !*        1.0   Header
    !
    WRITE(6,*) '################################################################'
    WRITE(6,*) '################        COMMENTS      ##########################'
    WRITE(6,*) '################################################################'
    WRITE(6,*) '################################################################'
    !
    
    YRECFM='MASDEV'
    ! en attendant une surcouche officielle...
    !CALL FMREAD(HFMFILE,YRECFM,HLUOUT,'--',NMASDEV,IGRID,ILENCH,YCOMMENT,IRESP)
    CALL FMREAD(HFMFILE,YRECFM,HLUOUT,ILENG,NMASDEV,IGRID,ILENCH,YCOMMENT,IRESP)
    IF (IRESP.EQ.0) THEN
      WRITE(6,*) '####  MASDEV = ',NMASDEV
      WRITE(6,*) '####'
    END IF
    !
    YRECFM='BUGFIX'
    ! en attendant une surcouche officielle...
    !CALL FMREAD(HFMFILE,YRECFM,HLUOUT,'--',NBUGFIX,IGRID,ILENCH,YCOMMENT,IRESP)
    CALL FMREAD(HFMFILE,YRECFM,HLUOUT,ILENG,NBUGFIX,IGRID,ILENCH,YCOMMENT,IRESP)
    IF (IRESP.EQ.0) THEN
      WRITE(6,*) '####  BUGFIX = ',NBUGFIX
      WRITE(6,*) '####'
    END IF
    !
    YRECFM='BIBUSER'
    ! en attendant une surcouche officielle...
    !CALL FMREAD(HFMFILE,YRECFM,HLUOUT,'--',CBIBUSER,IGRID,ILENCH,YCOMMENT,IRESP)
    CALL FMREAD(HFMFILE,YRECFM,HLUOUT,ILENG,CBIBUSER,IGRID,ILENCH,YCOMMENT,IRESP)
    IF (IRESP.EQ.0) THEN
      WRITE(6,*) '####  BIBUSER = ',CBIBUSER
      WRITE(6,*) '####'
    END IF
    !
    YRECFM='PROGRAM'
    ! en attendant une surcouche officielle...
    !CALL FMREAD(HFMFILE,YRECFM,HLUOUT,'--',CPROGRAM,IGRID,ILENCH,YCOMMENT,IRESP)
    CALL FMREAD(HFMFILE,YRECFM,HLUOUT,ILENG,CPROGRAM,IGRID,ILENCH,YCOMMENT,IRESP)
    IF (IRESP.EQ.0) THEN
      WRITE(6,*) '####  PROGRAM = ',CPROGRAM
      WRITE(6,*) '####'
    END IF
    !
    YRECFM='STORAGE_TYPE'
    ! en attendant une surcouche officielle...
    !CALL FMREAD(HFMFILE,YRECFM,HLUOUT,'--',CSTORAGE_TYPE,IGRID,ILENCH,YCOMMENT,IRESP)
    CALL FMREAD(HFMFILE,YRECFM,HLUOUT,ILENG,CSTORAGE_TYPE,IGRID,ILENCH,YCOMMENT,IRESP)
    IF (IRESP.EQ.0) THEN
      WRITE(6,*) '####  STORAGE_TYPE = ',CSTORAGE_TYPE
      WRITE(6,*) '####'
    END IF
    !
    YRECFM='SURF'
    IF (NMASDEV>=46) THEN
      CALL FMREAD(HFMFILE,YRECFM,HLUOUT,ILENG,CSURF,IGRID,ILENCH,YCOMMENT,IRESP)
      IF (IRESP.EQ.0) THEN
        WRITE(6,*) '####  SURF = ',CSURF
        WRITE(6,*) '####'
      END IF
        CALL FMREAD(HFMFILE,'DIM_FULL',HLUOUT,ILENG,IXOR,IGRID,ILENCH,YCOMMENT,IRESP)
    
    YRECFM='VERSION'
    ! en attendant une surcouche officielle...
    CALL FMREAD(HFMFILE,YRECFM,HLUOUT,ILENG,NVERSION_SURFEX,IGRID,ILENCH,YCOMMENT,IRESP)
    IF (IRESP.EQ.0) THEN
      WRITE(6,*) '#### SURFEX VERSION = ',NVERSION_SURFEX
      WRITE(6,*) '####'
    END IF
    
    
    ! en attendant une surcouche officielle...
    CALL FMREAD(HFMFILE,YRECFM,HLUOUT,ILENG,NBUGFIX_SURFEX,IGRID,ILENCH,YCOMMENT,IRESP)
    IF (IRESP.EQ.0) THEN
      WRITE(6,*) '#### SURFEX BUGFIX = ',NBUGFIX_SURFEX
      WRITE(6,*) '####'
    END IF
    
        IF (IRESP.EQ.0) THEN
          WRITE(6,*) '####  DIM_FULL = ',IXOR
        END IF
        CALL FMREAD(HFMFILE,'DIM_NATURE',HLUOUT,ILENG,IXOR,IGRID,ILENCH,YCOMMENT,IRESP)
        IF (IRESP.EQ.0) THEN
          WRITE(6,*) '####  DIM_NATURE = ',IXOR
        END IF
        CALL FMREAD(HFMFILE,'DIM_SEA',HLUOUT,ILENG,IXOR,IGRID,ILENCH,YCOMMENT,IRESP)
        IF (IRESP.EQ.0) THEN
          WRITE(6,*) '####  DIM_SEA = ',IXOR
        END IF
        CALL FMREAD(HFMFILE,'DIM_TOWN',HLUOUT,ILENG,IXOR,IGRID,ILENCH,YCOMMENT,IRESP)
        IF (IRESP.EQ.0) THEN
          WRITE(6,*) '####  DIM_TOWN = ',IXOR
        END IF
        CALL FMREAD(HFMFILE,'DIM_WATER',HLUOUT,ILENG,IXOR,IGRID,ILENCH,YCOMMENT,IRESP)
        IF (IRESP.EQ.0) THEN
          WRITE(6,*) '####  DIM_WATER = ',IXOR
          WRITE(6,*) '####'
        END IF 
        CALL FMREAD(HFMFILE,'ECOCLIMAP',HLUOUT,ILENG,LECOCLIMAP,IGRID,ILENCH,YCOMMENT,IRESP)
        IF (IRESP.EQ.0) THEN
          WRITE(6,*) '####  ECOCLIMAP = ',LECOCLIMAP
          WRITE(6,*) '####'
        END IF
    END IF
    !
    IF (NMASDEV>=46) THEN
      YRECFM='L1D'
      CALL FMREAD(HFMFILE,YRECFM,HLUOUT,ILENG,L1D,IGRID,ILENCH,YCOMMENT,IRESP)
      !
      YRECFM='L2D'
      CALL FMREAD(HFMFILE,YRECFM,HLUOUT,ILENG,L2D,IGRID,ILENCH,YCOMMENT,IRESP)
      !
      YRECFM='PACK'
      CALL FMREAD(HFMFILE,YRECFM,HLUOUT,ILENG,LPACK,IGRID,ILENCH,YCOMMENT,IRESP)
      IF (IRESP.EQ.0) THEN
        WRITE(6,*) '####  L1D = ',L1D,'     L2D = ',L2D,'     PACK = ',LPACK
        WRITE(6,*) '####'
      END IF
    END IF
    !
    YRECFM='MY_NAME'
    ! en attendant une surcouche officielle...
    !CALL FMREAD(HFMFILE,YRECFM,HLUOUT,'--',CMY_NAME,IGRID,ILENCH,YCOMMENT,IRESP)
    CALL FMREAD(HFMFILE,YRECFM,HLUOUT,ILENG,CMY_NAME,IGRID,ILENCH,YCOMMENT,IRESP)
    IF (IRESP.EQ.0) THEN
      WRITE(6,*) '####  MY_NAME = ',CMY_NAME
      WRITE(6,*) '####'
    END IF
    !
    YRECFM='DAD_NAME'
    ! en attendant une surcouche officielle...
    !CALL FMREAD(HFMFILE,YRECFM,HLUOUT,'--',CDAD_NAME,IGRID,ILENCH,YCOMMENT,IRESP)
    CALL FMREAD(HFMFILE,YRECFM,HLUOUT,ILENG,CDAD_NAME,IGRID,ILENCH,YCOMMENT,IRESP)
    IF (IRESP.EQ.0) THEN
      WRITE(6,*) '####  DAD_NAME= ',CDAD_NAME
      WRITE(6,*) '####'
    END IF
    !
    !*       1.1    Dimensions :
    !
    YRECFM='IMAX'
    ! en attendant une surcouche officielle...
    !CALL FMREAD(HFMFILE,YRECFM,HLUOUT,'--',NIMAX,IGRID,ILENCH,YCOMMENT,IRESP)
    CALL FMREAD(HFMFILE,YRECFM,HLUOUT,ILENG,NIMAX,IGRID,ILENCH,YCOMMENT,IRESP)
    !
    YRECFM='JMAX'
    ! en attendant une surcouche officielle...
    !CALL FMREAD(HFMFILE,YRECFM,HLUOUT,'--',NJMAX,IGRID,ILENCH,YCOMMENT,IRESP)
    CALL FMREAD(HFMFILE,YRECFM,HLUOUT,ILENG,NJMAX,IGRID,ILENCH,YCOMMENT,IRESP)
    !
    YRECFM='KMAX'
    IF (CSTORAGE_TYPE /='PG' .AND. CSTORAGE_TYPE/='SU') &
    ! en attendant une surcouche officielle...
    !CALL FMREAD(HFMFILE,YRECFM,HLUOUT,'--',NKMAX,IGRID,ILENCH,YCOMMENT,IRESP)
    CALL FMREAD(HFMFILE,YRECFM,HLUOUT,ILENG,NKMAX,IGRID,ILENCH,YCOMMENT,IRESP)
    !
    IF (CSTORAGE_TYPE /='PG' .AND. CSTORAGE_TYPE/='SU') THEN
      WRITE(6,*) '####  NIMAX = ',NIMAX,'     NJMAX = ',NJMAX,'     NKMAX = ',NKMAX
      WRITE(6,*) '####'
    ELSE
      WRITE(6,*) '####  NIMAX = ',NIMAX,'     NJMAX = ',NJMAX
      WRITE(6,*) '####'
    END IF
    !
    ! gridnesting case
    IF (LEN_TRIM(CDAD_NAME)>0) THEN
    ! en attendant une surcouche officielle...
    !  CALL FMREAD(HFMFILE,'DXRATIO',HLUOUT,'--',IXOR,IGRID,ILENCH,YCOMMENT,IRESP)
      CALL FMREAD(HFMFILE,'DXRATIO',HLUOUT,ILENG,IXOR,IGRID,ILENCH,YCOMMENT,IRESP)
      WRITE(6,*) '####  DXRATIO= ',IXOR
    ! en attendant une surcouche officielle...
    !  CALL FMREAD(HFMFILE,'DYRATIO',HLUOUT,'--',IYOR,IGRID,ILENCH,YCOMMENT,IRESP)
      CALL FMREAD(HFMFILE,'DYRATIO',HLUOUT,ILENG,IYOR,IGRID,ILENCH,YCOMMENT,IRESP)
      WRITE(6,*) '####  DYRATIO= ',IYOR
      WRITE(6,*) '####'
    ! en attendant une surcouche officielle...
    !  CALL FMREAD(HFMFILE,'XOR',HLUOUT,'--',IXOR,IGRID,ILENCH,YCOMMENT,IRESP)
      CALL FMREAD(HFMFILE,'XOR',HLUOUT,ILENG,IXOR,IGRID,ILENCH,YCOMMENT,IRESP)
      WRITE(6,*) '####  XOR= ',IXOR
    ! en attendant une surcouche officielle...
    !  CALL FMREAD(HFMFILE,'YOR',HLUOUT,'--',IYOR,IGRID,ILENCH,YCOMMENT,IRESP)
      CALL FMREAD(HFMFILE,'YOR',HLUOUT,ILENG,IYOR,IGRID,ILENCH,YCOMMENT,IRESP)
      WRITE(6,*) '####  YOR= ',IYOR
      WRITE(6,*) '####'
    END IF
    !  
    !*       1.2    Configuration  variables :
    !
    YRECFM='CARTESIAN'
    ! en attendant une surcouche officielle...
    !CALL FMREAD(HFMFILE,YRECFM,HLUOUT,'--',LCARTESIAN,IGRID,ILENCH,YCOMMENT,IRESP)
    CALL FMREAD(HFMFILE,YRECFM,HLUOUT,ILENG,LCARTESIAN,IGRID,ILENCH,YCOMMENT,IRESP)
    WRITE(6,*) '####  LCARTESIAN = ',LCARTESIAN
    !
    YRECFM='THINSHELL'
    IF (CSTORAGE_TYPE /='PG' .AND. CSTORAGE_TYPE/='SU') THEN
    ! en attendant une surcouche officielle...
    !  CALL FMREAD(HFMFILE,YRECFM,HLUOUT,'--',LTHINSHELL,IGRID,ILENCH,YCOMMENT,IRESP)
      CALL FMREAD(HFMFILE,YRECFM,HLUOUT,ILENG,LTHINSHELL,IGRID,ILENCH,YCOMMENT,IRESP)
      WRITE(6,*) '####  LTHINSHELL = ',LTHINSHELL
    END IF
    !
    !*       1.3    Grid variables :
    !
    YRECFM='BETA'
    ! en attendant une surcouche officielle...
    !CALL FMREAD(HFMFILE,YRECFM,HLUOUT,'--',XBETA,IGRID,ILENCH,YCOMMENT,IRESP)
    ILENG=1
    CALL FMREAD(HFMFILE,YRECFM,HLUOUT,ILENG,XBETA,IGRID,ILENCH,YCOMMENT,IRESP)
    WRITE(6,*) '####  XBETA = ',XBETA
    !
    YRECFM='LAT0'
    ! en attendant une surcouche officielle...
    !CALL FMREAD(HFMFILE,YRECFM,HLUOUT,'--',XLAT0,IGRID,ILENCH,YCOMMENT,IRESP)
    ILENG=1
    CALL FMREAD(HFMFILE,YRECFM,HLUOUT,ILENG,XLAT0,IGRID,ILENCH,YCOMMENT,IRESP)
    WRITE(6,*) '####  XLAT0 = ',XLAT0
    ! 
    YRECFM='LON0'
    ! en attendant une surcouche officielle...
    !  CALL FMREAD(HFMFILE,YRECFM,HLUOUT,'--',XLON0,IGRID,ILENCH,YCOMMENT,IRESP)
    ILENG=1
    CALL FMREAD(HFMFILE,YRECFM,HLUOUT,ILENG,XLON0,IGRID,ILENCH,YCOMMENT,IRESP)
    WRITE(6,*) '####  XLON0 = ',XLON0
    !
    IF (.NOT.LCARTESIAN) THEN
      YRECFM='RPK'
    ! en attendant une surcouche officielle...
    !  CALL FMREAD(HFMFILE,YRECFM,HLUOUT,'--',XRPK,IGRID,ILENCH,YCOMMENT,IRESP)
      ILENG=1
      CALL FMREAD(HFMFILE,YRECFM,HLUOUT,ILENG,XRPK,IGRID,ILENCH,YCOMMENT,IRESP)
      WRITE(6,*) '####  XRPK = ',XRPK
    ! 
      YRECFM='LONORI'
      XLONORI=999.
    ! en attendant une surcouche officielle...
    !  CALL FMREAD(HFMFILE,YRECFM,HLUOUT,'--',XLONOR,IGRID,ILENCH,YCOMMENT,IRESP)
      ILENG=1
      CALL FMREAD(HFMFILE,YRECFM,HLUOUT,ILENG,XLONORI,IGRID,ILENCH,YCOMMENT,IRESP)
      IF (IRESP==0) WRITE(6,*) '####  XLONORI = ',XLONORI
        
    ! 
      YRECFM='LATORI'
      XLATORI=999.
    ! en attendant une surcouche officielle...
    !  CALL FMREAD(HFMFILE,YRECFM,HLUOUT,'--',XLATOR,IGRID,ILENCH,YCOMMENT,IRESP)
      ILENG=1
      CALL FMREAD(HFMFILE,YRECFM,HLUOUT,ILENG,XLATORI,IGRID,ILENCH,YCOMMENT,IRESP)
      IF (IRESP==0) WRITE(6,*) '####  XLATORI = ',XLATORI
    !
        WRITE(6,*) '####'
    !
    END IF 
    ! 
    YRECFM='XHAT'
    ALLOCATE(XXHAT(NIMAX+2))
    ! en attendant une surcouche officielle...
    !CALL FMREAD(HFMFILE,YRECFM,HLUOUT,'--',XXHAT,IGRID,ILENCH,YCOMMENT,IRESP)
    ILENG=SIZE(XXHAT)
    CALL FMREAD(HFMFILE,YRECFM,HLUOUT,ILENG,XXHAT,IGRID,ILENCH,YCOMMENT,IRESP)
    WRITE(6,*) '####  X mesh = ',XXHAT(2)-XXHAT(1)
    WRITE(6,*) '####  XHAT(1:2) = ',XXHAT(1),XXHAT(2)
    !
    YRECFM='YHAT'
    ALLOCATE(XYHAT(NJMAX+2))
    ! en attendant une surcouche officielle...
    !CALL FMREAD(HFMFILE,YRECFM,HLUOUT,'--',XYHAT,IGRID,ILENCH,YCOMMENT,IRESP)
    ILENG=SIZE(XYHAT)
    CALL FMREAD(HFMFILE,YRECFM,HLUOUT,ILENG,XYHAT,IGRID,ILENCH,YCOMMENT,IRESP)
    WRITE(6,*) '####  Y mesh = ',XYHAT(2)-XYHAT(1)
    WRITE(6,*) '####  YHAT(1:2) = ',XYHAT(1),XYHAT(2)
    !
    IF (.NOT.LCARTESIAN) THEN
      IF (XLONORI == 999. .AND. XRPK/=0.) THEN
       ILENG=1
    !  CALL FMREAD(HFMFILE,'LATOR',HLUOUT,'--',XLATORI,IGRID,ILENCH,YCOMMENT,IRESP)
      CALL FMREAD(HFMFILE,'LATOR',HLUOUT,ILENG,XLATORI,IGRID,ILENCH,YCOMMENT,IRESP)
    !  CALL FMREAD(HFMFILE,'LONOR',HLUOUT,'--',XLONORI,IGRID,ILENCH,YCOMMENT,IRESP)
      CALL FMREAD(HFMFILE,'LONOR',HLUOUT,ILENG,XLONORI,IGRID,ILENCH,YCOMMENT,IRESP)
      ZXHATM = - 0.5 * (XXHAT(1)+XXHAT(2))
      ZYHATM = - 0.5 * (XYHAT(1)+XYHAT(2))
      ZPI= 2.*ASIN(1.) ; ZRADIUS= 6371229.
      CALL SM_LATLON(XLATORI,XLONORI,ZXHATM,ZYHATM,ZLATOR,ZLONOR)
      XLATORI = ZLATOR
      XLONORI = ZLONOR
      END IF
    END IF
    
    
    
    IF (CSTORAGE_TYPE /='PG' .AND. CSTORAGE_TYPE/='SU') THEN
      YRECFM='ZHAT'
      ALLOCATE(XZHAT(NKMAX+2))
    ! en attendant une surcouche officielle...
    !  CALL FMREAD(HFMFILE,YRECFM,HLUOUT,'--',XZHAT,IGRID,ILENCH,YCOMMENT,IRESP)
      ILENG=SIZE(XZHAT)
      CALL FMREAD(HFMFILE,YRECFM,HLUOUT,ILENG,XZHAT,IGRID,ILENCH,YCOMMENT,IRESP)
      DO JLOOP=1,NKMAX+2
        WRITE(6,'(A13,I3,A4,F12.5)') ' ####  XZHAT(',JLOOP,') = ',XZHAT(JLOOP)
      END DO
      WRITE(6,*) '####'
      !
      IF (NMASDEV<=46) THEN
        LSLEVE = .FALSE.
      ELSE
        YRECFM='SLEVE'
        CALL FMREAD(HFMFILE,YRECFM,HLUOUT,ILENG,LSLEVE,IGRID,ILENCH,YCOMMENT,IRESP)
        WRITE(6,*) '####  LSLEVE = ',LSLEVE
      END IF
      !
      IF (LSLEVE) THEN
        YRECFM='LEN1'
        CALL FMREAD(HFMFILE,YRECFM,HLUOUT,ILENG,XLEN1,IGRID,ILENCH,YCOMMENT,IRESP)
        WRITE(6,*) '####  XLEN1 = ',XLEN1
        !
        YRECFM='LEN2'
        CALL FMREAD(HFMFILE,YRECFM,HLUOUT,ILENG,XLEN2,IGRID,ILENCH,YCOMMENT,IRESP)
        WRITE(6,*) '####  XLEN2 = ',XLEN2
        WRITE(6,*) '####'
      END IF
    END IF
    !
        YRECFM='CH_EMIS'
        CALL FMREAD(HFMFILE,YRECFM,HLUOUT,ILENG,LSLEVE,IGRID,ILENCH,YCOMMENT,IRESP)
        WRITE(6,*) '####  LCH_EMIS = ',LSLEVE
    
    IF (CSTORAGE_TYPE /='PG' .AND. CSTORAGE_TYPE/='SU') THEN
    !
      !YRECFM='DTEXP'   
      YRECFM='DTEXP%TDATE'   
    ! en attendant une surcouche officielle...
    !CALL FMREAD(HFMFILE,YRECFM,HLUOUT,'--',TDTEXP,IGRID,ILENCH,YCOMMENT,IRESP)
      CALL FMREAD(HFMFILE,YRECFM,HLUOUT,ILENG,ITDATE,IGRID,ILENCH,YCOMMENT,IRESP)
      YRECFM='DTEXP%TIME'   
      CALL FMREAD(HFMFILE,YRECFM,HLUOUT,ILENG,ZTDATE,IGRID,ILENCH,YCOMMENT,IRESP)
      !WRITE(6,*) '####  DTEXP = ',TDTEXP%TDATE%YEAR,TDTEXP%TDATE%MONTH, &
      !                            TDTEXP%TDATE%DAY, TDTEXP%TIME
      WRITE(6,*) '####  DTEXP = ',ITDATE(1),ITDATE(2),ITDATE(3),ZTDATE
    !
      !YRECFM='DTMOD'
      YRECFM='DTMOD%TDATE'   
    ! en attendant une surcouche officielle...
    !CALL FMREAD(HFMFILE,YRECFM,HLUOUT,'--',TDTMOD,IGRID,ILENCH,YCOMMENT,IRESP)
      CALL FMREAD(HFMFILE,YRECFM,HLUOUT,ILENG,ITDATE,IGRID,ILENCH,YCOMMENT,IRESP)
      YRECFM='DTMOD%TIME'   
      CALL FMREAD(HFMFILE,YRECFM,HLUOUT,ILENG,ZTDATE,IGRID,ILENCH,YCOMMENT,IRESP)
      !WRITE(6,*) '####  DTMOD = ',TDTMOD%TDATE%YEAR,TDTMOD%TDATE%MONTH, &
      !                            TDTMOD%TDATE%DAY, TDTMOD%TIME
      WRITE(6,*) '####  DTMOD = ',ITDATE(1),ITDATE(2),ITDATE(3),ZTDATE
    !
      !YRECFM='DTSEG'
      YRECFM='DTSEG%TDATE'   
    ! en attendant une surcouche officielle...
    !CALL FMREAD(HFMFILE,YRECFM,HLUOUT,'--',TDTSEG,IGRID,ILENCH,YCOMMENT,IRESP)
      CALL FMREAD(HFMFILE,YRECFM,HLUOUT,ILENG,ITDATE,IGRID,ILENCH,YCOMMENT,IRESP)
      YRECFM='DTSEG%TIME'   
      CALL FMREAD(HFMFILE,YRECFM,HLUOUT,ILENG,ZTDATE,IGRID,ILENCH,YCOMMENT,IRESP)
      !WRITE(6,*) '####  DTSEG = ',TDTSEG%TDATE%YEAR,TDTSEG%TDATE%MONTH, &
      !                            TDTSEG%TDATE%DAY, TDTSEG%TIME
      WRITE(6,*) '####  DTSEG = ',ITDATE(1),ITDATE(2),ITDATE(3),ZTDATE
    END IF
    !  
    !
    IF (CSTORAGE_TYPE /='PG') THEN
      !YRECFM='DTCUR'
      YRECFM='DTCUR%TDATE'
    ! en attendant une surcouche officielle...
    !CALL FMREAD(HFMFILE,YRECFM,HLUOUT,'--',TDTCUR,IGRID,ILENCH,YCOMMENT,IRESP)
      CALL FMREAD(HFMFILE,YRECFM,HLUOUT,ILENG,ITDATE,IGRID,ILENCH,YCOMMENT,IRESP)
      YRECFM='DTCUR%TIME'   
      CALL FMREAD(HFMFILE,YRECFM,HLUOUT,ILENG,ZTDATE,IGRID,ILENCH,YCOMMENT,IRESP)
      !WRITE(6,*) '####  DTCUR = ',TDTCUR%TDATE%YEAR,TDTCUR%TDATE%MONTH, &
      !                            TDTCUR%TDATE%DAY, TDTCUR%TIME
      WRITE(6,*) '####  DTCUR = ',ITDATE(1),ITDATE(2),ITDATE(3),ZTDATE
    END IF
    !
    !---------------------------------------------------------------------------
    END SUBROUTINE READUNTOUCH