Skip to content
Snippets Groups Projects
readuntouch.f90 15.35 KiB
!      ######################################
       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

YRECFM='BUG'
! 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