SURFEX v7.3
General documentation of Surfex
 All Classes Files Functions Variables Typedefs
/home/dasprezs/EXPORT_v7_3/src/SURFEX/read_teb_date.F90
Go to the documentation of this file.
00001 !     #########
00002       SUBROUTINE READ_TEB_DATE(HPROGRAM,HINIT,KLUOUT,HATMFILE,HATMFILETYPE,&
00003                                  KYEAR,KMONTH,KDAY,PTIME,TPTIME)  
00004 !     #######################################################
00005 !
00006 !!****  *READ_TEB_DATE* - routine to initialise de date TTIME of MODD_TEB
00007 !!
00008 !!    PURPOSE
00009 !!    -------
00010 !!
00011 !!**  METHOD
00012 !!    ------
00013 !!
00014 !!    EXTERNAL
00015 !!    --------
00016 !!
00017 !!
00018 !!    IMPLICIT ARGUMENTS
00019 !!    ------------------
00020 !!
00021 !!    REFERENCE
00022 !!    ---------
00023 !!
00024 !!
00025 !!    AUTHOR
00026 !!    ------
00027 !!      S.Malardel   *Meteo France*     
00028 !!
00029 !!    MODIFICATIONS
00030 !!    -------------
00031 !!      Original    01/2004 
00032 !!      P. Le Moigne 10/2005, Phasage Arome
00033 !-------------------------------------------------------------------------------
00034 !
00035 !*       0.    DECLARATIONS
00036 !              ------------
00037 !
00038 USE MODD_TYPE_DATE_SURF
00039 USE MODD_SURF_PAR,       ONLY : NUNDEF, XUNDEF
00040 !
00041 USE MODI_READ_PREP_TEB_DATE_CONF
00042 USE MODI_READ_PRE_SURFA_DAT_CONF
00043 USE MODI_READ_PREP_TEB_CONF
00044 USE MODI_READ_PREP_FILE_DATE
00045 !
00046 USE YOMHOOK   ,ONLY : LHOOK,   DR_HOOK
00047 USE PARKIND1  ,ONLY : JPRB
00048 !
00049 USE MODI_ABOR1_SFX
00050 !
00051 IMPLICIT NONE
00052 !
00053 !*       0.1   Declarations of arguments
00054 !              -------------------------
00055 !
00056  CHARACTER(LEN=6),  INTENT(IN)  :: HPROGRAM    ! program calling
00057  CHARACTER(LEN=3),  INTENT(IN)  :: HINIT     ! fields to initialize 'ALL', 'PRE', 'PGD'
00058  CHARACTER(LEN=28), INTENT(IN)  :: HATMFILE    ! atmospheric file name
00059  CHARACTER(LEN=6),  INTENT(IN)  :: HATMFILETYPE! atmospheric file type
00060 INTEGER,           INTENT(IN)  :: KYEAR     ! current year (UTC)
00061 INTEGER,           INTENT(IN)  :: KMONTH    ! current month (UTC)
00062 INTEGER,           INTENT(IN)  :: KDAY      ! current day (UTC)
00063 REAL,              INTENT(IN)  :: PTIME     ! current time since midnight (UTC, s)
00064 TYPE (DATE_TIME),  INTENT(OUT) ::TPTIME    ! time and date
00065 INTEGER,           INTENT(IN)  :: KLUOUT      ! logical unit of output listing
00066 !
00067 !
00068 !*       0.2   Declarations of local variables
00069 !              -------------------------------
00070 !
00071  CHARACTER(LEN=28)              :: YFILE       ! file name
00072  CHARACTER(LEN=6)               :: YFILETYPE   ! file type
00073  CHARACTER(LEN=28)              :: YFILEPGD       ! file name
00074  CHARACTER(LEN=6)               :: YFILEPGDTYPE   ! file type
00075  CHARACTER(LEN=28)              :: YFILEPGDIN       ! file name
00076  CHARACTER(LEN=6)               :: YFILEPGDINTYPE   ! file type
00077 !
00078 LOGICAL                        :: GUNIF       ! flag for prescribed uniform field
00079 REAL(KIND=JPRB) :: ZHOOK_HANDLE
00080 !
00081 !-------------------------------------------------------------------------------
00082 !
00083 IF (LHOOK) CALL DR_HOOK('READ_TEB_DATE',0,ZHOOK_HANDLE)
00084 YFILE     = '                         '
00085 YFILETYPE = '      '
00086 !
00087 YFILEPGDIN     = '                         '
00088 YFILEPGDINTYPE = '      '
00089 !
00090 !-------------------------------------------------------------------------------
00091 !
00092 !* look for a date in the namelist NAM_PREP_TEB or NAM_PREP_SURF_ATM
00093 !-------------------------------------------------------------------
00094 !
00095  CALL READ_PREP_TEB_DATE_CONF(HPROGRAM,KLUOUT,TPTIME)
00096 !
00097 IF (TPTIME%TDATE%YEAR==NUNDEF.OR.TPTIME%TDATE%MONTH==NUNDEF &
00098       .OR.TPTIME%TDATE%DAY==NUNDEF.OR.TPTIME%TIME==XUNDEF) THEN  
00099   CALL READ_PRE_SURFA_DAT_CONF(HPROGRAM,KLUOUT,TPTIME)
00100 END IF
00101 !
00102 !* If no date in the namelist, look for a file
00103 !  ---------------
00104 !
00105 IF (TPTIME%TDATE%YEAR==NUNDEF.OR.TPTIME%TDATE%MONTH==NUNDEF &
00106       .OR.TPTIME%TDATE%DAY==NUNDEF.OR.TPTIME%TIME==XUNDEF) THEN  
00107   !
00108   CALL READ_PREP_TEB_CONF(HPROGRAM,'DATE   ',YFILE,YFILETYPE,YFILEPGD,YFILEPGDTYPE,&
00109                           HATMFILE,HATMFILETYPE,YFILEPGDIN,YFILEPGDINTYPE,KLUOUT,GUNIF)
00110   !
00111   IF (LEN_TRIM(YFILETYPE)/=0) THEN
00112     CALL READ_PREP_FILE_DATE(HPROGRAM,YFILE,YFILETYPE,TPTIME,KLUOUT)
00113   END IF
00114   !
00115 END IF
00116 !
00117 !* If no file and no date in the namelist, test if atmospheric date
00118 !------------------------------------------------------------------
00119 !
00120 IF (LEN_TRIM(YFILE)==0 .AND. (TPTIME%TDATE%YEAR==NUNDEF.OR.TPTIME%TDATE%MONTH==NUNDEF &
00121                                .OR.TPTIME%TDATE%DAY==NUNDEF.OR.TPTIME%TIME==XUNDEF)) THEN  
00122 !
00123   IF (KYEAR /= NUNDEF .AND. KMONTH /= NUNDEF .AND. KDAY /= NUNDEF .AND. PTIME /= XUNDEF) THEN
00124     TPTIME%TDATE%YEAR = KYEAR
00125     TPTIME%TDATE%MONTH= KMONTH
00126     TPTIME%TDATE%DAY  = KDAY
00127     TPTIME%TIME = PTIME
00128   ELSE
00129 !
00130 !* If no file, no date in the namelist and no atmospheric date : stop
00131 !-----------------------------------------------------------------------
00132 !
00133    CALL ABOR1_SFX('READ_TEB_DATE: DATE NOT SET')
00134   END IF
00135 ENDIF
00136 !
00137 !* Test of date coherence?
00138 !------------------------ 
00139 !
00140 IF (KYEAR /= NUNDEF .AND. KMONTH /= NUNDEF .AND. KDAY /= NUNDEF .AND. PTIME /= XUNDEF) THEN
00141   IF (KYEAR /= TPTIME%TDATE%YEAR .OR. KMONTH /= TPTIME%TDATE%MONTH .OR. KDAY /= TPTIME%TDATE%DAY .AND. PTIME /= TPTIME%TIME) THEN
00142     WRITE(UNIT=KLUOUT, FMT=*)'WARNING in READ_TEB_DATE'
00143     WRITE(UNIT=KLUOUT, FMT=*)'ATMOSPHERIC AND SURFACE DATES ARE NOT THE SAME'
00144     WRITE(UNIT=KLUOUT, FMT=*)'ATMOSPHERIC DATE:'
00145     WRITE(UNIT=KLUOUT, FMT='(" YEAR=",I4)') KYEAR
00146     WRITE(UNIT=KLUOUT, FMT='(" MONTH=",I4)') KMONTH
00147     WRITE(UNIT=KLUOUT, FMT='(" DAY=",I4)') KDAY
00148     WRITE(UNIT=KLUOUT, FMT='(" TIME=",E13.6)') PTIME
00149     WRITE(UNIT=KLUOUT, FMT=*)'SURFACE DATE:'
00150     WRITE(UNIT=KLUOUT, FMT='(" YEAR=",I4)') TPTIME%TDATE%YEAR
00151     WRITE(UNIT=KLUOUT, FMT='(" MONTH=",I4)') TPTIME%TDATE%MONTH
00152     WRITE(UNIT=KLUOUT, FMT='(" DAY=",I4)') TPTIME%TDATE%DAY
00153     WRITE(UNIT=KLUOUT, FMT='(" TIME=",E13.6)') TPTIME%TIME
00154   ELSE
00155     WRITE(UNIT=KLUOUT, FMT=*)'SAME ATMOSPHERIC AND SURFACE DATES'
00156     WRITE(UNIT=KLUOUT, FMT=*)'DATE in READ_TEB_DATE'
00157     WRITE(UNIT=KLUOUT, FMT='(" YEAR=",I4," MONTH=",I4," DAY=",I4)') &
00158                                         KYEAR,KMONTH,KDAY  
00159     WRITE(UNIT=KLUOUT, FMT='(" TIME=",E13.6)') PTIME
00160   ENDIF
00161 ENDIF
00162 IF (LHOOK) CALL DR_HOOK('READ_TEB_DATE',1,ZHOOK_HANDLE)
00163 !------------------------------------------------------------------------------
00164 !
00165 END SUBROUTINE READ_TEB_DATE