Skip to content

Commit 0d88e1f

Browse files
netcdf bug
1 parent f3194e5 commit 0d88e1f

File tree

1 file changed

+25
-4
lines changed

1 file changed

+25
-4
lines changed

wflow-py/wflow/wf_netcdfio.py

Lines changed: 25 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)