|
SURFEX v7.3
General documentation of Surfex
|
00001 ! ######### 00002 SUBROUTINE READ_SEAFLUX_DATE(HPROGRAM,HINIT,KLUOUT,HATMFILE,HATMFILETYPE,& 00003 KYEAR,KMONTH,KDAY,PTIME,TPTIME) 00004 ! ####################################################### 00005 ! 00006 !!**** *READ_SEAFLUX_DATE* - initializes the date TTIME of MODD_SEAFLUX 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_PRE_SEAF_DAT_CONF 00042 USE MODI_READ_PRE_SURFA_DAT_CONF 00043 USE MODI_READ_PREP_SEAFLUX_CONF 00044 USE MODI_READ_PREP_FILE_DATE 00045 ! 00046 ! 00047 USE YOMHOOK ,ONLY : LHOOK, DR_HOOK 00048 USE PARKIND1 ,ONLY : JPRB 00049 ! 00050 USE MODI_ABOR1_SFX 00051 ! 00052 IMPLICIT NONE 00053 ! 00054 !* 0.1 Declarations of arguments 00055 ! ------------------------- 00056 ! 00057 CHARACTER(LEN=6), INTENT(IN) :: HPROGRAM ! program calling 00058 CHARACTER(LEN=3), INTENT(IN) :: HINIT ! fields to initialize 'ALL', 'PRE', 'PGD' 00059 CHARACTER(LEN=28), INTENT(IN) :: HATMFILE ! atmospheric file name 00060 CHARACTER(LEN=6), INTENT(IN) :: HATMFILETYPE! atmospheric file type 00061 INTEGER, INTENT(IN) :: KYEAR ! current year (UTC) 00062 INTEGER, INTENT(IN) :: KMONTH ! current month (UTC) 00063 INTEGER, INTENT(IN) :: KDAY ! current day (UTC) 00064 REAL, INTENT(IN) :: PTIME ! current time since midnight (UTC, s) 00065 TYPE (DATE_TIME), INTENT(OUT) ::TPTIME ! time and date 00066 INTEGER, INTENT(IN) :: KLUOUT ! logical unit of output listing 00067 ! 00068 ! 00069 !* 0.2 Declarations of local variables 00070 ! ------------------------------- 00071 ! 00072 CHARACTER(LEN=28) :: YFILE ! file name 00073 CHARACTER(LEN=6) :: YFILETYPE ! file type 00074 CHARACTER(LEN=28) :: YFILEPGD ! file name 00075 CHARACTER(LEN=6) :: YFILEPGDTYPE ! file type 00076 CHARACTER(LEN=28) :: YFILEPGDIN ! file name 00077 CHARACTER(LEN=6) :: YFILEPGDINTYPE ! file type 00078 ! 00079 LOGICAL :: GUNIF ! flag for prescribed uniform field 00080 REAL(KIND=JPRB) :: ZHOOK_HANDLE 00081 ! 00082 !------------------------------------------------------------------------------- 00083 ! 00084 IF (LHOOK) CALL DR_HOOK('READ_SEAFLUX_DATE',0,ZHOOK_HANDLE) 00085 YFILE = ' ' 00086 YFILETYPE = ' ' 00087 ! 00088 YFILEPGDIN = ' ' 00089 YFILEPGDINTYPE = ' ' 00090 ! 00091 !------------------------------------------------------------------------------- 00092 ! 00093 !* look for a date in the namelist NAM_PREP_SEAFLUX or NAM_PREP_SURF_ATM 00094 !----------------------------------------------------------------------- 00095 ! 00096 CALL READ_PRE_SEAF_DAT_CONF(HPROGRAM,KLUOUT,TPTIME) 00097 ! 00098 IF (TPTIME%TDATE%YEAR==NUNDEF.OR.TPTIME%TDATE%MONTH==NUNDEF & 00099 .OR.TPTIME%TDATE%DAY==NUNDEF.OR.TPTIME%TIME==XUNDEF) THEN 00100 CALL READ_PRE_SURFA_DAT_CONF(HPROGRAM,KLUOUT,TPTIME) 00101 END IF 00102 ! 00103 !* If no date in the namelist, look for a file 00104 ! --------------- 00105 ! 00106 IF (TPTIME%TDATE%YEAR==NUNDEF.OR.TPTIME%TDATE%MONTH==NUNDEF & 00107 .OR.TPTIME%TDATE%DAY==NUNDEF.OR.TPTIME%TIME==XUNDEF) THEN 00108 ! 00109 CALL READ_PREP_SEAFLUX_CONF(HPROGRAM,'DATE ',YFILE,YFILETYPE,YFILEPGD,YFILEPGDTYPE,& 00110 HATMFILE,HATMFILETYPE,YFILEPGDIN,YFILEPGDINTYPE,KLUOUT,GUNIF) 00111 ! 00112 IF (LEN_TRIM(YFILETYPE)/=0) & 00113 CALL READ_PREP_FILE_DATE(HPROGRAM,YFILE,YFILETYPE,TPTIME,KLUOUT) 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_SEAFLUX_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_SEAFLUX_DATE' 00143 WRITE(UNIT=KLUOUT, FMT=*) 'ATMOSPHERIC AND SURFACE DATES ARE NOT THE SAME' 00144 WRITE(UNIT=KLUOUT, FMT=*)'ATMOSPHERIC DATE in READ_SEAFLUX_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 in READ_SEAFLUX_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_SEAFLUX_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_SEAFLUX_DATE',1,ZHOOK_HANDLE) 00163 !------------------------------------------------------------------------------ 00164 ! 00165 END SUBROUTINE READ_SEAFLUX_DATE
1.8.0