Changeset 2163 in lmdz_wrf for trunk/tools/generic_tools.py
- Timestamp:
- Oct 4, 2018, 7:16:27 PM (6 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/tools/generic_tools.py
r2162 r2163 14121 14121 14122 14122 mattimes = CFtimesvar_datetime(tv, tu, cal) 14123 print 'mat times _______'14124 print mattimes14125 14123 14126 14124 if type(tv) == type(np.arange(2)): … … 14133 14131 print ' available ones:', type(np.arange(1)), type(range(2)) 14134 14132 quit(-1) 14135 14136 slices = [] 14133 print 'mat times _______' 14134 for it in range(dimt): 14135 print ' ',it, mattimes[it,:] 14136 14137 # Beginning and Ending of time data 14138 it = 0 14139 idate = dt.datetime(mattimes[it,0], mattimes[it,1], mattimes[it,2], \ 14140 mattimes[it,3], mattimes[it,4], mattimes[it,5]) 14141 it = dimt-1 14142 edate = dt.datetime(mattimes[it,0], mattimes[it,1], mattimes[it,2], \ 14143 mattimes[it,3], mattimes[it,4], mattimes[it,5]) 14144 14145 istats = mattimes[0,:] 14146 estats = mattimes[dimt-1,:] 14147 print 'idate:', idate, 'edate:', edate 14148 14149 # Getting the dates 14137 14150 if per == 'year': 14138 imat = 0 14139 # Getting unique values, since there is no cycle year periods 14140 timatvals = list(mattimes[:,imat]) 14141 setvar = set(timatvals) 14142 cyctimes = list(setvar) 14143 cyctimes.sort() 14144 Ncyctimes = len(cyctimes) 14145 cyctimes.append(cyctimes[Ncyctimes-1]+1) 14146 Ncyctimes = Ncyctimes + 1 14147 14148 iit = 0 14149 itt = 0 14150 ip = cyctimes[itt] 14151 ep = cyctimes[itt+amount] 14152 for it in range(dimt): 14153 # timeslice: [ini_slice, end_slice, freq_slice] 14154 timeslice = [iit,iit,1] 14155 ttv = mattimes[it,imat] 14156 timeslice[1] = it 14157 if not (ttv >= ip and ttv < ep): 14158 slices.append(timeslice) 14159 iit = it + 0 14160 itt = itt + amount 14161 ip = cyctimes[itt] 14162 ep = cyctimes[np.min([Ncyctimes-1,itt+amount])] 14151 # Arranging accordingly beginning/ending statistics periods 14152 istats[1] = 1 14153 istats[2] = 1 14154 istats[3:5] = 0 14155 estats[0] = estats[0] + 1 14156 estats[1] = 1 14157 estats[2] = 1 14158 estats[3:5] = 0 14159 14160 istdate = dt.datetime(istats[0], istats[1], istats[2], istats[3], istats[4], \ 14161 istats[5]) 14162 estdate = dt.datetime(estats[0], estats[1], estats[2], estats[3], estats[4], \ 14163 estats[5]) 14164 14165 # Getting statistics periods 14166 stmatdates = [istats] 14167 idate = istdate 14168 imdate = istats.copy() 14169 while idate < estdate: 14170 imdate = imdate.copy() 14171 imdate[0] = imdate[0] + amount 14172 idate= dt.datetime(imdate[0], imdate[1], imdate[2], imdate[3], imdate[4],\ 14173 imdate[5]) 14174 if idate < estdate: stmatdates.append(imdate) 14175 else: break 14176 stmatdates.append(imdate) 14163 14177 14164 14178 elif per == 'month': 14165 imat = 1 14166 14167 # cycle for months 14168 Ncyctimes = 12 14169 cyctimes = np.arange(Ncyctimes)+1 14170 14171 print 'cyctimes:', cyctimes 14172 14173 # First cycle time from first time 14174 iit = 0 14175 itt = index_vec(cyctimes,mattimes[0,imat]) 14176 ip = cyctimes[itt] 14177 ep = cyclevar(cyctimes, itt+amount) 14178 for it in range(dimt): 14179 # timeslice: [ini_slice, end_slice, freq_slice] 14180 timeslice = [iit,iit,1] 14181 ttv = mattimes[it,imat] 14182 timeslice[1] = it 14183 if not (cyclevar_within(cyctimes, ip, ep, ttv)): 14184 slices.append(timeslice) 14185 iit = it + 0 14186 itt = itt + amount 14187 ip = cyclevar(cyctimes,itt) 14188 ep = cyclevar(cyctimes,itt+amount) 14189 14190 elif per == 'day': 14191 imat = 2 14192 14193 for it in range(dimt): 14194 14195 # cycle for days as function of the month 14196 Ncyctimes = days_month(mattimes[it,0],mattimes[it,1]) 14197 cyctimes = np.arange(Ncyctimes)+1 14198 14199 print 'cyctimes:', cyctimes 14200 14201 # First cycle time from first time 14202 iit = 0 14203 itt = index_vec(cyctimes,mattimes[0,imat]) 14204 ip = cyctimes[itt] 14205 ep = cyclevar(cyctimes, itt+amount) 14206 14207 # timeslice: [ini_slice, end_slice, freq_slice] 14208 timeslice = [iit,iit,1] 14209 ttv = mattimes[it,imat] 14210 timeslice[1] = it 14211 if not (cyclevar_within(cyctimes, ip, ep, ttv)): 14212 slices.append(timeslice) 14213 iit = it + 0 14214 itt = itt + amount 14215 ip = cyclevar(cyctimes,itt) 14216 ep = cyclevar(cyctimes,itt+amount) 14179 # Arranging accordingly beginning/ending statistics periods 14180 istats[2] = 1 14181 istats[3:5] = 0 14182 estats[1] = estats[1]+1 14183 if estats[1] > 12: 14184 estats[0] = estats[0] + 1 14185 estats[1] = 1 14186 estats[2] = 1 14187 estats[3:5] = 0 14188 14189 istdate = dt.datetime(istats[0], istats[1], istats[2], istats[3], istats[4], \ 14190 istats[5]) 14191 estdate = dt.datetime(estats[0], estats[1], estats[2], estats[3], estats[4], \ 14192 estats[5]) 14193 14194 # Getting statistics periods 14195 stmatdates = [istats] 14196 idate = istdate 14197 imdate = istats.copy() 14198 while idate < estdate: 14199 imdate = imdate.copy() 14200 imdate[1] = imdate[1] + amount 14201 if imdate[1] > 12: 14202 imdate[0] = imdate[0] + 1 14203 imdate[1] = 1 14204 idate= dt.datetime(imdate[0], imdate[1], imdate[2], imdate[3], imdate[4],\ 14205 imdate[5]) 14206 if idate < estdate: stmatdates.append(imdate) 14207 else: break 14208 stmatdates.append(imdate) 14209 14217 14210 else: 14218 14211 print errormsg … … 14221 14214 quit(-1) 14222 14215 14216 # Getting the slices 14217 ## 14218 slices = [] 14219 14220 # Passing to CF-times 14221 Srefdate0 = tu.split(' ')[2] 14222 Sreftime0 = tu.split(' ')[3] 14223 tunits = tu.split(' ')[0] 14224 14225 if Srefdate0.find('/') != -1: Srdate = Srefdate0.replace('/', '') 14226 elif Srefdate0.find('-') != -1: Srdate = Srefdate0.replace('-','') 14227 else: 14228 print errormsg 14229 print ' ' + fname + ": I do not know how to create a [YYYY][MM][DD] " + \ 14230 "date with '" + Srefdate0 + "' !!" 14231 print " expecting '/' or '-' splitting characters" 14232 quit(-1) 14233 14234 if Sreftime0.find(':') != -1: Srtime = Sreftime0.replace(':', '') 14235 else: 14236 print errormsg 14237 print ' ' + fname + ": I do not know how to create a [HH][MI][SS] " + \ 14238 "date with '" + Sreftime0 + "' !!" 14239 print " expecting ':' splitting character" 14240 quit(-1) 14241 14242 Srefdate = Srdate + Srtime 14243 Nslices = len(stmatdates) 14244 stmdates = np.zeros((Nslices,6), dtype=np.int) 14245 print ' dates slices ________' 14246 for islc in range(Nslices): 14247 print islc, ' ', stmatdates[islc] 14248 stmdates[islc,:] = stmatdates[islc] 14249 14250 cfstdates = realdatetime_CFcompilant(stmdates, Srefdate, tunits) 14251 14252 Nslices = len(cfstdates) 14253 itt = 0 14254 icfst = 0 14255 for it in range(dimt): 14256 timeslice = [itt,itt,1] 14257 timeslice[1] = it 14258 icfstup = np.min([icfst+1, Nslices-1]) 14259 print cfstdates[icfst], '<=', tv[it], '<', cfstdates[icfstup] 14260 if not(tv[it] >= cfstdates[icfst] and tv[it] < cfstdates[icfstup]): 14261 slices.append(timeslice) 14262 itt = it 14263 icfst = icfst + 1 14264 slices.append(timeslice) 14265 14223 14266 Nslices = len(slices) 14224 for isl in range(Nslices ):14225 print isl, cyctimes[isl], cyctimes[isl+amount+1], ':', slices[isl]14267 for isl in range(Nslices-1): 14268 print isl, stmatdates[isl], stmatdates[isl+1], ':', slices[isl] 14226 14269 14227 14270 return slices, Nslices … … 14229 14272 tv = [] 14230 14273 values = [] 14231 totT = 24.*60.14232 dT = 7. *60.14274 totT = 31. 14275 dT = 7. 14233 14276 for it in range(0,10): 14234 14277 for itt in range(3): 14235 14278 tv.append(it*totT+dT*itt) 14236 14279 values.append(it*1.) … … 14238 14281 vals = np.array(values) 14239 14282 itdim = 0 14240 tu = ' minutes since 1949-12-01 00:00:00'14241 per = ' day'14283 tu = 'days since 1949-12-01 00:00:00' 14284 per = 'month' 14242 14285 calend = 'standard' 14243 14286 amount = 1
Note: See TracChangeset
for help on using the changeset viewer.