@@ -441,18 +441,35 @@ def __init__(self, netcdffile, logging, vars=[]):
441441 a = pcr2numpy (cover (0.0 ), 0.0 ).flatten ()
442442 # Determine steps to load in mem based on estimated memory usage
443443 floatspermb = 1048576 / 4
444- maxmb = 4000
445- self .maxsteps = maxmb * len (a ) / floatspermb + 1
444+ maxmb = 40
445+
446+ maxlentime = len (self .dataset .variables ['time' ])
447+ self .maxsteps = minimum (maxmb * len (a ) / floatspermb + 1 ,maxlentime - 1 )
446448 self .fstep = 0
447449 self .lstep = self .fstep + self .maxsteps
448450
451+
452+ # Now check Y values to see if we must flip the data
453+ try :
454+ self .y = self .dataset .variables ['lat' ][:]
455+ except :
456+ self .y = self .dataset .variables ['y' ][:]
457+
458+ if self .y [0 ] > self .y [- 1 ]:
459+ self .flip = False
460+ else :
461+ self .flip = True
462+
463+
449464 for var in vars :
450465 try :
451466 self .alldat [var ] = self .dataset .variables [var ][self .fstep :self .maxsteps ]
452467 except :
453468 self .alldat .pop (var , None )
454469 logging .warn ("Variable " + var + " not found in netcdf file: " + netcdffile )
455470
471+
472+
456473 def gettimestep (self , timestep , logging , var = 'P' , shifttime = False ):
457474 """
458475 Gets a map for a single timestep. reads data in blocks assuming sequential access
@@ -476,8 +493,12 @@ def gettimestep(self, timestep, logging, var='P', shifttime=False):
476493 self .fstep = ncindex
477494 self .lstep = ncindex + self .maxsteps
478495 np_step = self .alldat [var ][ncindex - self .fstep , :, :]
496+
479497 miss = float (self .dataset .variables [var ]._FillValue )
480- return numpy2pcr (Scalar , np_step , miss ), True
498+ if self .flip :
499+ return numpy2pcr (Scalar , flipud (np_step ).copy (), miss ), True
500+ else :
501+ return numpy2pcr (Scalar , np_step , miss ), True
481502 else :
482503 #logging.debug("Var (" + var + ") not found returning 0")
483504 return cover (scalar (0.0 )), False
@@ -505,7 +526,7 @@ def __init__(self, netcdffile, logging, vars=[]):
505526 a = pcr2numpy (cover (0.0 ), 0.0 ).flatten ()
506527 # Determine steps to load in mem based on estimated memory usage
507528 floatspermb = 1048576 / 4
508- maxmb = 4000
529+ maxmb = 40
509530 self .maxsteps = maxmb * len (a ) / floatspermb + 1
510531 self .fstep = 0
511532 self .lstep = self .fstep + self .maxsteps
0 commit comments