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