Index: wflow-py/wflow/wf_netcdfio.py =================================================================== diff -u -r036ea699f3b9e9fe82ce54ea08b6fc94990408f2 -rbadbe2001f39533e20aa0d5803688e6cb6a82ea9 --- wflow-py/wflow/wf_netcdfio.py (.../wf_netcdfio.py) (revision 036ea699f3b9e9fe82ce54ea08b6fc94990408f2) +++ wflow-py/wflow/wf_netcdfio.py (.../wf_netcdfio.py) (revision badbe2001f39533e20aa0d5803688e6cb6a82ea9) @@ -62,7 +62,7 @@ def prepare_nc(trgFile, timeList, x, y, metadata, logger, EPSG="EPSG:4326", units=None, - calendar='gregorian', Format="NETCDF4", complevel=9, zlib=True, least_significant_digit=None): + calendar='gregorian', Format="NETCDF4", complevel=9, zlib=True, least_significant_digit=None,FillValue=1E31): """ This function prepares a NetCDF file with given metadata, for a certain year, daily basis data The function assumes a gregorian calendar and a time unit 'Days since 1900-01-01 00:00:00' @@ -91,7 +91,7 @@ else: nc_trg.createDimension('time', 0) # NrOfDays*8 - DateHour = nc_trg.createVariable('time', 'f8', ('time',), fill_value=-9999., zlib=zlib, complevel=complevel) + DateHour = nc_trg.createVariable('time', 'f8', ('time',), fill_value=FillValue, zlib=zlib, complevel=complevel) DateHour.units = units DateHour.calendar = calendar DateHour.standard_name = 'time' @@ -113,12 +113,12 @@ if srs.IsProjected() == 0: # ONly lat lon needed nc_trg.createDimension('lat', len(y)) nc_trg.createDimension('lon', len(x)) - y_var = nc_trg.createVariable('lat', 'f4', ('lat',), fill_value=-9999., zlib=zlib, complevel=complevel) + y_var = nc_trg.createVariable('lat', 'f4', ('lat',), fill_value=FillValue, zlib=zlib, complevel=complevel) y_var.standard_name = 'latitude' y_var.long_name = 'latitude' y_var.units = 'degrees_north' y_var.axis = 'Y' - x_var = nc_trg.createVariable('lon', 'f4', ('lon',), fill_value=-9999., zlib=zlib, complevel=complevel) + x_var = nc_trg.createVariable('lon', 'f4', ('lon',), fill_value=FillValue, zlib=zlib, complevel=complevel) x_var.standard_name = 'longitude' x_var.long_name = 'longitude' x_var.units = 'degrees_east' @@ -132,12 +132,12 @@ else: # Assume regular grid in m nc_trg.createDimension('y', len(y)) nc_trg.createDimension('x', len(x)) - y_var = nc_trg.createVariable('y', 'f4', ('y',), fill_value=-9999., zlib=zlib, complevel=complevel) + y_var = nc_trg.createVariable('y', 'f4', ('y',), fill_value=FillValue, zlib=zlib, complevel=complevel) y_var.standard_name = 'projection_y_coordinate' y_var.long_name = 'y-coordinate in Cartesian system' y_var.units = 'm' y_var.axis = 'Y' - x_var = nc_trg.createVariable('x', 'f4', ('x',), fill_value=-9999., zlib=zlib, complevel=complevel) + x_var = nc_trg.createVariable('x', 'f4', ('x',), fill_value=FillValue, zlib=zlib, complevel=complevel) x_var.standard_name = 'projection_x_coordinate' x_var.long_name = 'x-coordinate in Cartesian system' x_var.units = 'm' @@ -449,6 +449,16 @@ self.fstep = 0 self.lstep = self.fstep + self.maxsteps + self.datetime = self.dataset.variables['time'][:] + if hasattr(self.dataset.variables['time'],'units'): + self.timeunits=self.dataset.variables['time'].units + else: + self.timeunits ='Seconds since 1970-01-01 00:00:00' + if hasattr(self.dataset.variables['time'], 'calendar'): + self.calendar= self.dataset.variables['time'].calendar + else: + self.calendar ='gregorian' + self.datetimelist=netCDF4.num2date(self.datetime,self.timeunits, calendar=self.calendar) try: self.x = self.dataset.variables['x'][:] @@ -502,14 +512,15 @@ - def gettimestep(self, timestep, logging, var='P', shifttime=False): + def gettimestep(self, timestep, logging, tsdatetime=None, var='P', shifttime=False): """ Gets a map for a single timestep. reads data in blocks assuming sequential access :var timestep: framework timestep (1-based) :var logging: python logging object :var var: variable to get from the file :var shifttime: is True start at 1 in the NC file (instead of 0) + :var tsdatetime: Assumed date/time of this timestep window = data[dpos,latidx.min():latidx.max()+1,lonidx.min():lonidx.max()+1] @@ -519,6 +530,10 @@ else: ncindex = timestep - 1 + if tsdatetime != None: + if tsdatetime != self.datetimelist[ncindex]: + logging.warn("Date/time does not match. Wanted " + str(tsdatetime) + " got " + str(self.datetimelist[ncindex])) + if self.alldat.has_key(var): if ncindex == self.lstep: # Read new block of data in mem logging.debug("reading new netcdf data block starting at: " + str(ncindex))