SURFEX v7.3
General documentation of Surfex
 All Classes Files Functions Variables Typedefs
/home/dasprezs/EXPORT_v7_3/src/SURFEX/read_watflux_date.F90
Go to the documentation of this file.
00001 !     #########
00002       SUBROUTINE READ_WATFLUX_DATE(HPROGRAM,HINIT,KLUOUT,HATMFILE,HATMFILETYPE,&
00003                                      KYEAR,KMONTH,KDAY,PTIME,TPTIME              )  
00004 !     #######################################################
00005 !
00006 !!****  *READ_WATFLUX_DATE* - initializes the date TTIME of MODD_WATFLUX
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 : XUNDEF, NUNDEF
00040 !
00041 USE MODI_READ_PRE_WATF_DAT_CONF
00042 USE MODI_READ_PRE_SURFA_DAT_CONF
00043 USE MODI_READ_PREP_WATFLUX_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 !*       0.2   Declarations of local variables
00068 !              -------------------------------
00069 !
00070  CHARACTER(LEN=28)              :: YFILE       ! file name
00071  CHARACTER(LEN=6)               :: YFILETYPE   ! file type
00072  CHARACTER(LEN=28)              :: YFILEPGD       ! file name
00073  CHARACTER(LEN=6)               :: YFILEPGDTYPE   ! file type
00074  CHARACTER(LEN=28)              :: YFILEPGDIN       ! file name
00075  CHARACTER(LEN=6)               :: YFILEPGDINTYPE   ! file type
00076 !
00077 LOGICAL                        :: GUNIF       ! flag for prescribed uniform field
00078 REAL(KIND=JPRB) :: ZHOOK_HANDLE
00079 !
00080 !-------------------------------------------------------------------------------
00081 !
00082 IF (LHOOK) CALL DR_HOOK('READ_WATFLUX_DATE',0,ZHOOK_HANDLE)
00083 YFILE     = '                         '
00084 YFILETYPE = '      '
00085 !
00086 YFILEPGDIN     = '                         '
00087 YFILEPGDINTYPE = '      '
00088 !
00089 !-------------------------------------------------------------------------------
00090 !
00091 !* look for a date in the namelist NAM_PREP_WATFLUX or NAM_PREP_SURF_ATM
00092 !-----------------------------------------------------------------------
00093 !
00094  CALL READ_PRE_WATF_DAT_CONF(HPROGRAM,KLUOUT,TPTIME)
00095 !
00096 IF (TPTIME%TDATE%YEAR==NUNDEF.OR.TPTIME%TDATE%MONTH==NUNDEF &
00097       .OR.TPTIME%TDATE%DAY==NUNDEF.OR.TPTIME%TIME==XUNDEF) THEN  
00098   CALL READ_PRE_SURFA_DAT_CONF(HPROGRAM,KLUOUT,TPTIME)
00099 END IF
00100 !
00101 !* If no date in the namelist, look for a file
00102 !  ---------------
00103 !
00104 IF (TPTIME%TDATE%YEAR==NUNDEF.OR.TPTIME%TDATE%MONTH==NUNDEF &
00105       .OR.TPTIME%TDATE%DAY==NUNDEF.OR.TPTIME%TIME==XUNDEF) THEN  
00106   !
00107   CALL READ_PREP_WATFLUX_CONF(HPROGRAM,'DATE   ',YFILE,YFILETYPE,YFILEPGD,YFILEPGDTYPE,&
00108                               HATMFILE,HATMFILETYPE,YFILEPGDIN,YFILEPGDINTYPE,KLUOUT,GUNIF)
00109   !
00110   IF (LEN_TRIM(YFILETYPE)/=0) &
00111     CALL READ_PREP_FILE_DATE(HPROGRAM,YFILE,YFILETYPE,TPTIME,KLUOUT)  
00112   !
00113 END IF
00114 !
00115 !* If no file and no date in the namelist, test if atmospheric date
00116 !------------------------------------------------------------------
00117 !
00118 IF (LEN_TRIM(YFILE)==0 .AND. (TPTIME%TDATE%YEAR==NUNDEF.OR.TPTIME%TDATE%MONTH==NUNDEF &
00119                                .OR.TPTIME%TDATE%DAY==NUNDEF.OR.TPTIME%TIME==XUNDEF)) THEN  
00120 !
00121   IF (KYEAR /= NUNDEF .AND. KMONTH /= NUNDEF .AND. KDAY /= NUNDEF .AND. PTIME /= XUNDEF) THEN
00122     TPTIME%TDATE%YEAR = KYEAR
00123     TPTIME%TDATE%MONTH= KMONTH
00124     TPTIME%TDATE%DAY  = KDAY
00125     TPTIME%TIME = PTIME
00126   ELSE
00127 !
00128 !* If no file, no date in the namelist and no atmospheric date : stop
00129 !-----------------------------------------------------------------------
00130 !
00131     CALL ABOR1_SFX('READ_WATFLUX_DATE: DATE NOT SET')
00132   END IF
00133 ENDIF
00134 !
00135 !* Test of date coherence?
00136 !------------------------ 
00137 !
00138 IF (KYEAR /= NUNDEF .AND. KMONTH /= NUNDEF .AND. KDAY /= NUNDEF .AND. PTIME /= XUNDEF) THEN
00139   IF (KYEAR /= TPTIME%TDATE%YEAR .OR. KMONTH /= TPTIME%TDATE%MONTH .OR. KDAY /= TPTIME%TDATE%DAY .AND. PTIME /= TPTIME%TIME) THEN
00140      WRITE(UNIT=KLUOUT, FMT=*)'WARNING in READ_WATFLUX_DATE'
00141      WRITE(UNIT=KLUOUT, FMT=*)'ATMOSPHERIC AND SURFACE DATES ARE NOT THE SAME'
00142 
00143      WRITE(UNIT=KLUOUT, FMT=*)'ATMOSPHERIC DATE:'
00144      WRITE(UNIT=KLUOUT, FMT='(" YEAR=",I4)') KYEAR
00145      WRITE(UNIT=KLUOUT, FMT='(" MONTH=",I4)') KMONTH
00146      WRITE(UNIT=KLUOUT, FMT='(" DAY=",I4)') KDAY
00147      WRITE(UNIT=KLUOUT, FMT='(" TIME=",E13.6)') PTIME
00148      WRITE(UNIT=KLUOUT, FMT=*)'SURFACE DATE:'
00149      WRITE(UNIT=KLUOUT, FMT='(" YEAR=",I4)') TPTIME%TDATE%YEAR
00150      WRITE(UNIT=KLUOUT, FMT='(" MONTH=",I4)') TPTIME%TDATE%MONTH
00151      WRITE(UNIT=KLUOUT, FMT='(" DAY=",I4)') TPTIME%TDATE%DAY
00152      WRITE(UNIT=KLUOUT, FMT='(" TIME=",E13.6)') TPTIME%TIME
00153   ELSE
00154      WRITE(UNIT=KLUOUT, FMT=*)'SAME ATMOSPHERIC AND SURFACE DATES'
00155      WRITE(UNIT=KLUOUT, FMT=*)'DATE in READ_WATFLUX_DATE'
00156       WRITE(UNIT=KLUOUT, FMT='(" YEAR=",I4," MONTH=",I4," DAY=",I4)') &
00157                                         KYEAR,KMONTH,KDAY  
00158      WRITE(UNIT=KLUOUT, FMT='(" TIME=",E13.6)') PTIME
00159   ENDIF
00160 ENDIF
00161 IF (LHOOK) CALL DR_HOOK('READ_WATFLUX_DATE',1,ZHOOK_HANDLE)
00162 !------------------------------------------------------------------------------
00163 !
00164 END SUBROUTINE READ_WATFLUX_DATE