SURFEX v7.3
General documentation of Surfex
|
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