Changeset 601 in lmdz_wrf
- Timestamp:
- Jul 16, 2015, 1:19:14 PM (10 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/tools/validation_sim.py
r584 r601 93 93 94 94 return 95 96 def CFtimes_datetime_NOfile(times, units, calendar): 97 """ Provide date/time array from velues of netCDF CF-compilant time variable 98 times= time values 99 units= CF units of the variable time 100 output: 101 array(dimt, 0) = year 102 array(dimt, 1) = month 103 array(dimt, 2) = day 104 array(dimt, 3) = hour 105 array(dimt, 4) = minute 106 array(dimt, 5) = second 107 """ 108 import datetime as dt 109 fname = 'CFtimes_datetime_NOfile' 110 111 txtunits = units.split(' ') 112 tunits = txtunits[0] 113 Srefdate = txtunits[len(txtunits) - 1] 114 # Does reference date contain a time value [YYYY]-[MM]-[DD] [HH]:[MI]:[SS] 115 ## 116 timeval = Srefdate.find(':') 117 118 if not timeval == -1: 119 # print ' refdate with time!' 120 refdate = datetimeStr_datetime(txtunits[len(txtunits) - 2] + '_' + Srefdate) 121 else: 122 refdate = dateStr_date(Srefdate) 123 124 dimt = len(times) 125 realdates = np.zeros((dimt, 6), dtype=int) 126 127 secsDay=3600*24. 128 129 # Checking calendar! 130 ## 131 y360 = False 132 daycal360 = ['earth_360d', '360d', '360days', '360_day'] 133 if searchInlist(daycal360,calendar): 134 print warnmsg 135 print ' ' + fname + ': calendar of 12 months of 30 days !!' 136 y360 = True 137 138 ## Not in timedelta 139 # if tunits == 'years': 140 # for it in range(dimt): 141 # realdate = refdate + dt.timedelta(years=float(times[it])) 142 # realdates[it] = int(realdate.year) 143 # elif tunits == 'months': 144 # for it in range(dimt): 145 # realdate = refdate + dt.timedelta(months=float(times[it])) 146 # realdates[it] = int(realdate.year) 147 if y360: 148 if tunits == 'weeks': 149 for it in range(dimt): 150 deltat = dt.timedelta(weeks=float(times[it])) 151 Tsecs = deltat.days*secsDay + deltat.seconds + deltat.microseconds/1000. 152 realdates[it,:] = date_juliandate(refdate.year,Tsecs) 153 elif tunits == 'days': 154 for it in range(dimt): 155 deltat = dt.timedelta(days=float(times[it])) 156 Tsecs = deltat.days*secsDay + deltat.seconds + deltat.microseconds/1000. 157 realdates[it,:] = date_juliandate(refdate.year,Tsecs) 158 elif tunits == 'hours': 159 for it in range(dimt): 160 realdate = dt.timedelta(hours=float(times[it])) 161 Tsecs = deltat.days*secsDay + deltat.seconds + deltat.microseconds/1000. 162 realdates[it,:] = date_juliandate(refdate.year,Tsecs) 163 elif tunits == 'minutes': 164 for it in range(dimt): 165 realdate = dt.timedelta(minutes=float(times[it])) 166 Tsecs = deltat.days*secsDay + deltat.seconds + deltat.microseconds/1000. 167 realdates[it,:] = date_juliandate(refdate.year,Tsecs) 168 elif tunits == 'seconds': 169 for it in range(dimt): 170 realdate = dt.timedelta(seconds=float(times[it])) 171 Tsecs = deltat.days*secsDay + deltat.seconds + deltat.microseconds/1000. 172 realdates[it,:] = date_juliandate(refdate.year,Tsecs) 173 elif tunits == 'miliseconds': 174 for it in range(dimt): 175 realdate = dt.timedelta(miliseconds=float(times[it])) 176 Tsecs = deltat.days*secsDay + deltat.seconds + deltat.microseconds/1000. 177 realdates[it,:] = date_juliandate(refdate.year,Tsecs) 178 else: 179 print errormsg 180 print ' CFtimes_datetime: time units "' + tunits + '" not ready!!!!' 181 quit(-1) 182 else: 183 if tunits == 'weeks': 184 for it in range(dimt): 185 realdate = refdate + dt.timedelta(weeks=float(times[it])) 186 realdates[it,0] = int(realdate.year) 187 realdates[it,1] = int(realdate.month) 188 realdates[it,2] = int(realdate.day) 189 realdates[it,3] = int(realdate.hour) 190 realdates[it,4] = int(realdate.second) 191 realdates[it,5] = int(realdate.minute) 192 elif tunits == 'days': 193 for it in range(dimt): 194 realdate = refdate + dt.timedelta(days=float(times[it])) 195 realdates[it,0] = int(realdate.year) 196 realdates[it,1] = int(realdate.month) 197 realdates[it,2] = int(realdate.day) 198 realdates[it,3] = int(realdate.hour) 199 realdates[it,4] = int(realdate.second) 200 realdates[it,5] = int(realdate.minute) 201 elif tunits == 'hours': 202 for it in range(dimt): 203 realdate = refdate + dt.timedelta(hours=float(times[it])) 204 realdates[it,0] = int(realdate.year) 205 realdates[it,1] = int(realdate.month) 206 realdates[it,2] = int(realdate.day) 207 realdates[it,3] = int(realdate.hour) 208 realdates[it,4] = int(realdate.second) 209 realdates[it,5] = int(realdate.minute) 210 elif tunits == 'minutes': 211 for it in range(dimt): 212 realdate = refdate + dt.timedelta(minutes=float(times[it])) 213 realdates[it,0] = int(realdate.year) 214 realdates[it,1] = int(realdate.month) 215 realdates[it,2] = int(realdate.day) 216 realdates[it,3] = int(realdate.hour) 217 realdates[it,4] = int(realdate.second) 218 realdates[it,5] = int(realdate.minute) 219 elif tunits == 'seconds': 220 for it in range(dimt): 221 realdate = refdate + dt.timedelta(seconds=float(times[it])) 222 realdates[it,0] = int(realdate.year) 223 realdates[it,1] = int(realdate.month) 224 realdates[it,2] = int(realdate.day) 225 realdates[it,3] = int(realdate.hour) 226 realdates[it,4] = int(realdate.second) 227 realdates[it,5] = int(realdate.minute) 228 elif tunits == 'milliseconds': 229 for it in range(dimt): 230 realdate = refdate + dt.timedelta(milliseconds=float(times[it])) 231 realdates[it,0] = int(realdate.year) 232 realdates[it,1] = int(realdate.month) 233 realdates[it,2] = int(realdate.day) 234 realdates[it,3] = int(realdate.hour) 235 realdates[it,4] = int(realdate.second) 236 realdates[it,5] = int(realdate.minute) 237 else: 238 print errormsg 239 print ' CFtimes_datetime: time units "' + tunits + '" not ready!!!!' 240 quit(-1) 241 242 return realdates 95 243 96 244 def index_3mat(matA,matB,matC,val): … … 1787 1935 simobstimes = coincident_CFtimes(tsim, obstunits, simtunits) 1788 1936 1937 iobst = CFtimes_datetime_NOfile([valdimobs['T'][0]], obstunits, 'standard') 1938 fobst = CFtimes_datetime_NOfile([valdimobs['T'][dimtobs-1]], obstunits, 'standard') 1939 isimt = CFtimes_datetime_NOfile([simobstimes[0]], obstunits, 'standard') 1940 fsimt = CFtimes_datetime_NOfile([simobstimes[dimtsim-1]], obstunits, 'standard') 1941 print 'check of times _______' 1942 print ' * Observations' 1943 print ' - first time:', iobst 1944 print ' - last time:', fobst 1945 print ' * Simulations' 1946 print ' - first time:', isimt 1947 print ' - last time:', fsimt 1948 1789 1949 # 1790 1950 ## Looking for exact/near times … … 1808 1968 print ' ' + main + ': no exact values found!' 1809 1969 Nexactt = 0 1810 quit(-1)1970 # quit(-1) 1811 1971 else: 1812 1972 Nexactt = len(exacttvalues[:,0]) … … 1838 1998 closesttvalues = np.array(closesttvalues0, dtype=np.float) 1839 1999 2000 print 'closesttvales shape:',closesttvalues.shape 1840 2001 Nclosest = len(closesttvalues[:,0]) 1841 2002 print main + ': found',Nclosest,'Simulation time-values closest to observations'
Note: See TracChangeset
for help on using the changeset viewer.