def load(self, par, surf=False, mldint=False, fullint=False, noneg=False): self.params.append(par) key = self.pa[par][0] self.par = par vd = self.vd t1 = self.t1 t2 = self.t2 i1 = self.i1 i2 = self.i2 j1 = self.j1 j2 = self.j2 k1 = self.k1 k2 = self.k2 pref = self.datadir + "BEC.gx3.22.pi.cv2.Ar.daily." def readfield(par): for y in [2003, 2004, 2005, 2006]: for m in np.arange(1, 13): n = pycdf.CDF(pref + "%04i-%02i.nc" % (y, m)) tmpfld = cnv(n.var(self.pa[par][0])[:], self.gr)[..., i1:i2, j1:j2] try: fld = np.concatenate((fld, tmpfld), axis=0) except UnboundLocalError: fld = tmpfld return fld * self.pa[par][1] def condload(parlist): for par in (parlist): if not hasattr(self, par): self.load(par) if mldint: na = np.newaxis exists = False if hasattr(self, par): exists = True condload(('mldk', par)) if self.mldk.ndim == 1: self.mldk = self.mldk[:, na, na] self.__dict__[par] = self.__dict__[par][:, :, na, na] elif self.mldk.ndim == 2: self.mldk = self.mldk[:, na] self.__dict__[par] = self.__dict__[par][:, :, na] fld = self.mldk * 0 for m in np.unique(self.mldk): t, i, j = np.nonzero(self.mldk == m) fld[t, i, j] = np.sum(self.__dict__[par][t, :m, i, j] * self.dzt[:m], axis=1) self.__dict__[par[:-1] + 'm'] = fld if not exists: del self.__dict__[par] return if par == 'o2ar': condload(('o2ct', 'o2st', 'arst', 'arct')) self.o2ar = ((self.o2ct / self.o2st) / (self.arct / self.arst)) * 100 - 100 return elif par == 'o2st': condload(('temp', 'salt', 'o2ss')) self.o2st = sw.satO2(self.salt, self.temp) self.o2st[:, 0] = self.o2ss[:] return elif par == 'arst': condload(('temp', 'salt', 'arss')) self.arst = sw.satAr(self.salt, self.temp) self.arst[:, 0] = self.arss[:] return elif par == 'ssht': self.__dict__['ssht'] = self.dxu * 0 return elif par == 'icef': pref = (self.datadir + "/BEC.gx3.22.pi.cv2.Ar.daily.IFRAC.1999-2006.nc") n = pycdf.CDF(pref) self.icef = cnv(n.var('IFRAC')[t1:t2, ...], self.gr)[:, i1:, j1:j2] self.icef[self.icef > 1] = np.nan return elif par == 'dens': condload(('temp', 'salt')) self.dens = sw.dens0(self.salt, self.temp) return elif par == 'nwnd': self.load('nwndsqr') self.nwnd = np.sqrt(self.nwndsqr) del self.nwndsqr return elif par == 'mldk': condload(('mldp', )) self.mldk = np.ceil(np.interp(self.mldp, self.zlev, np.arange(25))) return elif par == 'nn10': if not hasattr(self, 'ncpm'): self.load('ncpo', mldint=True) self.nn10 = self.ncpm.copy() * np.nan for t in np.arange(10, self.nn10.shape[0]): self.nn10[t, ...] = np.mean(self.ncpm[t - 10:t, ...], axis=0) return elif par == 'wwfl': condload(('o2ar', 'dens', 'mldp', 'nwnd', 'icef')) self.wwfl = pv2fl(self.o2ar, self.temp, self.mldp, self.nwnd, wtlen=60, o2st=self.o2st, dens=self.dens) ii2 = min(i2, 26) if i1 < 26: self.wwfl[:, i1:ii2, :] = ((1 - self.icef[:, i1:ii2, :]) * self.wwfl[:, i1:ii2, :]) """ nulmat = np.zeros( (self.t1-self.tw,self.k2-self.k1, self.i2-self.i1,self.j2-self.j1) ) self.t1 = self.tw self.load('nwnd') #self.wwfl = self.o2ar.copy()*0 self.wwfl = pv2fl(np.concatenate((nulmat,self.o2ar),axis=0), np.concatenate((nulmat,self.temp),axis=0), np.concatenate((nulmat[:,0,:,:], self.mldp),axis=0), self.nwnd, wtlen=60, o2st=np.concatenate((nulmat, self.o2st),axis=0), dens=np.concatenate((nulmat, self.dens),axis=0)) #self.wwfl=self.wwfl[t1:t2,...] self.t1 = t1 """ return elif par == 'crwwfl': condload(('wwfl', )) return elif par == 'nrm10': condload(('wwfl', 'nn10')) self.nrm10 = nodimb(self.wwfl, self.nn10) return elif par == 'wpv': condload(('wwfl', )) self.wpv = pv2wpv(self.temp, self.mldp, self.nwnd, dens=self.dens) return elif par == 'chlo': condload(('spChl', 'diatChl', 'diazChl')) self.chlo = self.spChl + self.diatChl + self.diazChl del self.spChl, self.diatChl, self.diazChl return elif par == 'poco': condload(('spC', 'diatC', 'diazC')) self.poco = self.spC + self.diatC + self.diazC del self.spC, self.diatC, self.diazC return elif 'z_t' in self.vd[key][1]: fld = readfield(par)[t1:t2, k1:k2, ...] else: fld = readfield(par)[t1:t2, ...] if 'z_t' in vd[key][1] and surf: exists = False if hasattr(self, par): exists = True condload(('mldk', par)) self.__dict__[par[:-1] + 'm'] = self.__dict__[par][:, 0, ...] if not exists: del self.__dict__[par] return elif 'z_t' in vd[key][1] and fullint: """ Integrate over each column """ na = np.newaxis exists = False if not hasattr(self, par): exists = True condload((par, 'mldp', 'ssht')) fld = self.__dict__[par] * self.dz[na, :, na, na] if noneg: fld[fld < 0] = 0 fld[:, 0, :, :] = fld[:, 0, :, :] * (self.ssht + self.dz[0]) / self.dz[0] fld = np.nansum(fld, axis=1) if exists: del self.__dict__[par] par = par[:-1] + 'f' print par + ": ", fld.shape fld[fld < -1e9] = np.nan fld[fld > 1e9] = np.nan self.__dict__[par] = fld
def load(self, par, surf=False, mldint=False, fullint=False, noneg=False): self.fields.append(par) def scale(fld): return (fld * self.slope[par]).astype(np.float32) if par == 'dens': self.load('temp', surf, mldint, fullint) self.load('salt', surf, mldint, fullint) self.dens = sw.dens0(self.salt, self.temp) return elif par == 'o2ar': self.condload(('o2ct', 'o2st', 'arct', 'arst')) self.o2ar = ((self.o2ct / self.o2st) / (self.arct / self.arst) - 1) * 100 return elif par == 'd003': self.condload(('mldp', 'dens')) mld = self.mldp.copy() * 0 for k in np.arange(len(self.zlev)): mld[(self.dens[:, k, ...] - self.dens[:, 2, ...]) < 0.03] = k for k in np.arange(len(self.zlev), 0, -1) - 1: mld[mld == k] = self.zlev[k] - self.dz[k] / 2.0 self.d003 = mld return elif par == 'depth': return elif par == 'mldk': self.condload(('mldp', )) self.mldk = np.ceil(np.interp(self.mldp, self.zlev, np.arange(50))) return elif par == 'wwfl': self.condload(('o2ar', 'dens', 'nwnd', 'mldp')) del self.o2ct, self.arct, self.arst self.wwfl = pv2fl(self.o2ar, self.temp, self.mldp, self.nwnd, wtlen=60, o2st=self.o2st, dens=self.dens) return elif par == 'crwwfl': self.fields[-1] = 'wwfl' tm = len(self.tvec) tvec = self.tvec self.tvec = np.arange(self.tvec.min() - 60, self.tvec.min()) self.load('crwnd') self.tvec = tvec self.condload(('nwnd', 'o2ar', 'dens', 'mldp')) self.nwnd = np.concatenate((self.crwnd, self.nwnd), axis=0) print self.nwnd.shape fillmat = np.zeros((self.crwnd.shape[0], ) + self.o2ar.shape[1:]) for v in ['o2ar', 'temp', 'o2st', 'dens', 'mldp']: self.__dict__[v] = np.concatenate( (self.__dict__[v][tm - 60:, ...], self.__dict__[v]), axis=0) try: del self.o2ct, self.arct, self.arst, self.crwnd except AttributeError: pass print self.nwnd.shape, self.o2ar.shape self.wwfl = pv2fl(self.o2ar, self.temp, self.mldp, self.nwnd, wtlen=60, o2st=self.o2st, dens=self.dens) for v in ['o2ar', 'temp', 'mldp', 'o2st', 'dens', 'wwfl', 'nwnd']: self.__dict__[v] = self.__dict__[v][60:, ...] return elif par == 'nn10': if not hasattr(self, 'ncpm'): self.load('ncpo', mldint=True) self.nn10 = self.ncpm.copy() * np.nan for t in np.arange(10, self.nn10.shape[0]): self.nn10[t, ...] = np.mean(self.ncpm[t - 10:t, ...], axis=0) return elif par == 'nnlg': if not hasattr(self, 'ncpm'): self.load('ncpo', mldint=True) self.condload(('mldp', 'wpv', 'temp')) self.nnlg = self.ncpm.copy() self.nnlg[self.nnlg > 1e6] = 0 self.nnlg[self.nnlg < -1e6] = 0 self.cnt = self.ncpm[:] * 0 wlg = np.floor((self.mldp / self.wpv) / np.log(2)) wlg[wlg > 60] = 60 for t in np.arange(60, self.ncpm.shape[0]): for b in np.arange(60): msk = wlg[t, :, :] > b self.nnlg[t, msk] = self.nnlg[t, msk] + self.ncpm[t - b, msk] self.cnt[t, msk] = self.cnt[t, msk] + 1 self.nnlg = self.nnlg / self.cnt return elif par == 'nrm10': self.condload(('crwwfl', 'nn10')) self.nrm10 = nodimb(self.wwfl, self.nn10) return elif par == 'wpv': self.condload(('wwfl', )) self.wpv = pv2wpv(self.temp, self.mldp, self.nwnd, dens=self.dens) return elif par == 'crwpv': tm = len(self.tvec) tvec = self.tvec self.tvec = np.arange(self.tvec.min() - 61, self.tvec.min()) self.load('crwnd') self.tvec = tvec self.condload(('nwnd', 'o2ar', 'dens', 'mldp')) self.nwnd = np.concatenate((self.crwnd, self.nwnd), axis=0) fillmat = np.zeros((self.crwnd.shape[0], ) + self.o2ar.shape[1:]) for v in ['temp', 'dens', 'mldp']: print v, " before: ", self.__dict__[v].shape self.__dict__[v] = np.concatenate( (self.__dict__[v][tm - 60:, ...], self.__dict__[v]), axis=0) print v, " after: ", self.__dict__[v].shape self.wpv = pv2wpv(self.temp, self.mldp, self.nwnd, dens=self.dens) for v in ['temp', 'mldp', 'dens', 'wpv', 'nwnd']: self.__dict__[v] = self.__dict__[v][60:, ...] return elif par == 'crwnd': self.fields[-1] = 'nwnd' cr = winds.CORE2() cr.load(self.tvec.min(), self.tvec.max()) self.crwnd = np.zeros(self.tvec.shape + self.llon.shape) for tpos in np.arange(len(self.tvec)): try: self.crwnd[tpos, :, :] = self.reproject( cr, cr.nwnd[tpos, :, :]) except IndexError: self.crwnd[tpos, :, :] = self.reproject( cr, cr.nwnd[-1, :, :]) return key = self.keypref + self.pa[par] self.par = par vd = self.vd t1 = self.t1 t2 = self.t2 i1 = self.i1 i2 = self.i2 j1 = self.j1 j2 = self.j2 k1 = self.k1 k2 = self.k2 if not t1: t1 = 0 if not t2: t2 = self.tvec.shape[0] n = netcdf_file(vd[key][2]) if par == 'nwnd': wnfld = self.scl(scale(n.variables[vd[key][0]][:])) print wnfld.shape fld = self.gmt.field(wnfld[t1:t2, ...])[:, j1:j2, i1:i2] fld[fld < -1e9] = np.nan fld[fld > 1e9] = np.nan self.__dict__[par] = fld.astype(np.float32) return if 'zt_ocean' in vd[key][1].dimensions and mldint: """ Integrate down to MLD """ na = np.newaxis exists = False if not hasattr(self, par): exists = True self.condload(( par, 'mldp', )) fld = grid.mldint(self.__dict__[par], self.mldp, self.dz) if exists: del self.__dict__[par] par = par[:-1] + 'm' self.fields[-1] = par elif 'zt_ocean' in vd[key][1].dimensions and fullint: """ Integrate over each column """ na = np.newaxis exists = False if not hasattr(self, par): exists = True self.condload((par, 'mldp', 'ssht')) fld = self.__dict__[par] * self.dz[na, :, na, na] if noneg: fld[fld < 0] = 0 fld[:, 0, :, :] = fld[:, 0, :, :] * (self.ssht + self.dz[0]) / self.dz[0] fld = np.nansum(fld, axis=1) if exists: del self.__dict__[par] par = par[:-1] + 'f' self.fields[-1] = par elif 'zt_ocean' in vd[key][1].dimensions and surf: fld = self.gmt.field( scale(n.variables[vd[key][0]][t1:t2, 0, j1:j2, :])) elif 'zt_ocean' in vd[key][1].dimensions: fld = self.gmt.field( scale(n.variables[vd[key][0]][t1:t2, k1:k2, j1:j2, :])) else: fld = self.gmt.field( scale(n.variables[vd[key][0]][t1:t2, j1:j2, :])) print par + ": ", fld.shape fld[fld < -1e9] = np.nan fld[fld > 1e9] = np.nan self.__dict__[par] = fld[..., self.i1:self.i2]
def load(self, par, surf=False,mldint=False,fullint=False,noneg=False): self.params.append(par) key = self.pa[par][0] self.par=par; vd=self.vd; t1 = self.t1; t2 = self.t2 i1 = self.i1; i2 = self.i2 j1 = self.j1; j2 = self.j2 k1 = self.k1; k2 = self.k2 pref = self.datadir + "BEC.gx3.22.pi.cv2.Ar.daily." def readfield(par): for y in [2003,2004,2005,2006]: for m in np.arange(1,13): n = pycdf.CDF(pref + "%04i-%02i.nc" % (y,m) ) tmpfld = cnv(n.var(self.pa[par][0])[:], self.gr)[...,i1:i2,j1:j2] try: fld = np.concatenate((fld,tmpfld),axis=0) except UnboundLocalError: fld = tmpfld return fld * self.pa[par][1] def condload(parlist): for par in (parlist): if not hasattr(self,par): self.load(par) if mldint: na = np.newaxis exists = False if hasattr(self,par): exists = True condload( ('mldk',par) ) if self.mldk.ndim == 1: self.mldk = self.mldk[:,na,na] self.__dict__[par] = self.__dict__[par][:,:,na,na] elif self.mldk.ndim == 2: self.mldk = self.mldk[:,na] self.__dict__[par] = self.__dict__[par][:,:,na] fld = self.mldk * 0 for m in np.unique(self.mldk): t,i,j = np.nonzero(self.mldk == m) fld[t,i,j] = np.sum(self.__dict__[par][t,:m,i,j] * self.dzt[:m], axis=1) self.__dict__[par[:-1] + 'm'] = fld if not exists: del self.__dict__[par] return if par == 'o2ar': condload( ('o2ct','o2st','arst','arct') ) self.o2ar = ( (self.o2ct/self.o2st)/ (self.arct/self.arst) ) * 100 - 100 return elif par == 'o2st': condload( ('temp','salt','o2ss') ) self.o2st = sw.satO2(self.salt,self.temp) self.o2st[:,0] = self.o2ss[:] return elif par == 'arst': condload( ('temp','salt','arss') ) self.arst = sw.satAr(self.salt,self.temp) self.arst[:,0] = self.arss[:] return elif par == 'ssht': self.__dict__['ssht'] = self.dxu * 0 return elif par == 'icef': pref = (self.datadir + "/BEC.gx3.22.pi.cv2.Ar.daily.IFRAC.1999-2006.nc") n = pycdf.CDF(pref) self.icef = cnv(n.var('IFRAC')[t1:t2,...], self.gr)[:,i1:,j1:j2] self.icef[self.icef>1] = np.nan return elif par == 'dens': condload( ('temp','salt') ) self.dens = sw.dens0(self.salt,self.temp) return elif par == 'nwnd': self.load('nwndsqr') self.nwnd = np.sqrt(self.nwndsqr) del self.nwndsqr return elif par == 'mldk': condload( ('mldp',) ) self.mldk = np.ceil(np.interp(self.mldp, self.zlev, np.arange(25)) ) return elif par == 'nn10': if not hasattr(self,'ncpm'): self.load('ncpo',mldint=True) self.nn10 =self.ncpm.copy() * np.nan for t in np.arange(10,self.nn10.shape[0]): self.nn10[t,...]=np.mean(self.ncpm[t-10:t,...],axis=0) return elif par == 'wwfl': condload( ('o2ar','dens','mldp','nwnd','icef') ) self.wwfl = pv2fl(self.o2ar, self.temp, self.mldp, self.nwnd, wtlen=60, o2st=self.o2st, dens=self.dens) ii2= min(i2,26) if i1<26: self.wwfl[:,i1:ii2,:] = ( (1- self.icef[:,i1:ii2,:]) * self.wwfl[:,i1:ii2,:] ) """ nulmat = np.zeros( (self.t1-self.tw,self.k2-self.k1, self.i2-self.i1,self.j2-self.j1) ) self.t1 = self.tw self.load('nwnd') #self.wwfl = self.o2ar.copy()*0 self.wwfl = pv2fl(np.concatenate((nulmat,self.o2ar),axis=0), np.concatenate((nulmat,self.temp),axis=0), np.concatenate((nulmat[:,0,:,:], self.mldp),axis=0), self.nwnd, wtlen=60, o2st=np.concatenate((nulmat, self.o2st),axis=0), dens=np.concatenate((nulmat, self.dens),axis=0)) #self.wwfl=self.wwfl[t1:t2,...] self.t1 = t1 """ return elif par == 'crwwfl': condload( ('wwfl',) ) return elif par == 'nrm10': condload( ('wwfl','nn10') ) self.nrm10 = nodimb(self.wwfl,self.nn10) return elif par == 'wpv': condload( ('wwfl',) ) self.wpv = pv2wpv(self.temp,self.mldp,self.nwnd,dens=self.dens) return elif par == 'chlo': condload( ('spChl','diatChl','diazChl') ) self.chlo = self.spChl + self.diatChl + self.diazChl del self.spChl, self.diatChl, self.diazChl return elif par == 'poco': condload( ('spC','diatC','diazC') ) self.poco = self.spC + self.diatC + self.diazC del self.spC, self.diatC, self.diazC return elif 'z_t' in self.vd[key][1]: fld = readfield(par)[t1:t2,k1:k2,...] else: fld = readfield(par)[t1:t2,...] if 'z_t' in vd[key][1] and surf: exists = False if hasattr(self,par): exists = True condload( ('mldk',par) ) self.__dict__[par[:-1] + 'm'] = self.__dict__[par][:,0,...] if not exists: del self.__dict__[par] return elif 'z_t' in vd[key][1] and fullint: """ Integrate over each column """ na = np.newaxis exists = False if not hasattr(self,par): exists = True condload( (par,'mldp','ssht') ) fld = self.__dict__[par] * self.dz[na,:,na,na] if noneg: fld[fld<0] = 0 fld[:,0,:,:] = fld[:,0,:,:] * (self.ssht+self.dz[0]) / self.dz[0] fld = np.nansum(fld,axis=1) if exists: del self.__dict__[par] par = par[:-1] + 'f' print par + ": ",fld.shape fld[fld <-1e9] = np.nan fld[fld > 1e9] = np.nan self.__dict__[par] = fld
def load(self, par, surf=False,mldint=False,fullint=False,noneg=False): self.fields.append(par) def scale(fld): return (fld*self.slope[par]).astype(np.float32) if par == 'dens': self.load('temp',surf,mldint,fullint) self.load('salt',surf,mldint,fullint) self.dens = sw.dens0(self.salt, self.temp) return elif par == 'o2ar': self.condload( ('o2ct','o2st','arct','arst') ) self.o2ar = ( (self.o2ct/self.o2st) / (self.arct/self.arst) - 1 ) * 100 return elif par == 'd003': self.condload( ('mldp','dens') ) mld = self.mldp.copy() * 0 for k in np.arange(len(self.zlev)): mld[(self.dens[:,k,...]-self.dens[:,2,...])<0.03] = k for k in np.arange(len(self.zlev),0,-1)-1: mld[mld==k] = self.zlev[k]-self.dz[k]/2.0 self.d003 = mld return elif par == 'depth': return elif par == 'mldk': self.condload( ('mldp',) ) self.mldk = np.ceil(np.interp(self.mldp, self.zlev, np.arange(50)) ) return elif par == 'wwfl': self.condload( ('o2ar','dens','nwnd','mldp') ) del self.o2ct, self.arct, self.arst self.wwfl = pv2fl(self.o2ar, self.temp, self.mldp, self.nwnd, wtlen=60,o2st=self.o2st, dens=self.dens) return elif par == 'crwwfl': self.fields[-1] = 'wwfl' tm = len(self.tvec) tvec = self.tvec self.tvec = np.arange(self.tvec.min()-60,self.tvec.min()) self.load('crwnd') self.tvec = tvec self.condload( ('nwnd','o2ar','dens','mldp') ) self.nwnd = np.concatenate((self.crwnd,self.nwnd),axis=0) print self.nwnd.shape fillmat = np.zeros( (self.crwnd.shape[0],) + self.o2ar.shape[1:] ) for v in ['o2ar','temp','o2st','dens','mldp']: self.__dict__[v] = np.concatenate( (self.__dict__[v][tm-60:,...],self.__dict__[v]), axis=0) try: del self.o2ct, self.arct, self.arst,self.crwnd except AttributeError: pass print self.nwnd.shape,self.o2ar.shape self.wwfl = pv2fl(self.o2ar, self.temp, self.mldp, self.nwnd, wtlen=60,o2st=self.o2st, dens=self.dens) for v in ['o2ar','temp','mldp','o2st','dens','wwfl','nwnd']: self.__dict__[v] = self.__dict__[v][60:,...] return elif par == 'nn10': if not hasattr(self,'ncpm'): self.load('ncpo',mldint=True) self.nn10 =self.ncpm.copy() * np.nan for t in np.arange(10,self.nn10.shape[0]): self.nn10[t,...]=np.mean(self.ncpm[t-10:t,...],axis=0) return elif par == 'nnlg': if not hasattr(self,'ncpm'): self.load('ncpo',mldint=True) self.condload( ('mldp','wpv','temp') ) self.nnlg = self.ncpm.copy() self.nnlg[self.nnlg>1e6] = 0 self.nnlg[self.nnlg<-1e6] = 0 self.cnt = self.ncpm[:] * 0 wlg = np.floor((self.mldp/self.wpv)/np.log(2)) wlg[wlg>60] = 60 for t in np.arange(60,self.ncpm.shape[0]): for b in np.arange(60): msk = wlg[t,:,:]>b self.nnlg[t,msk] = self.nnlg[t,msk] + self.ncpm[t-b,msk] self.cnt[t,msk] = self.cnt[t,msk] + 1 self.nnlg = self.nnlg/self.cnt return elif par == 'nrm10': self.condload( ('crwwfl','nn10') ) self.nrm10 = nodimb(self.wwfl,self.nn10) return elif par == 'wpv': self.condload( ('wwfl',) ) self.wpv = pv2wpv(self.temp,self.mldp,self.nwnd,dens=self.dens) return elif par == 'crwpv': tm = len(self.tvec) tvec = self.tvec self.tvec = np.arange(self.tvec.min()-61,self.tvec.min()) self.load('crwnd') self.tvec = tvec self.condload( ('nwnd','o2ar','dens','mldp') ) self.nwnd = np.concatenate((self.crwnd,self.nwnd),axis=0) fillmat = np.zeros( (self.crwnd.shape[0],) + self.o2ar.shape[1:] ) for v in ['temp','dens','mldp']: print v, " before: ",self.__dict__[v].shape self.__dict__[v] = np.concatenate( (self.__dict__[v][tm-60:,...],self.__dict__[v]), axis=0) print v, " after: ",self.__dict__[v].shape self.wpv = pv2wpv(self.temp,self.mldp,self.nwnd,dens=self.dens) for v in ['temp','mldp','dens','wpv','nwnd']: self.__dict__[v] = self.__dict__[v][60:,...] return elif par == 'crwnd': self.fields[-1] = 'nwnd' cr = winds.CORE2() cr.load(self.tvec.min(), self.tvec.max()) self.crwnd = np.zeros(self.tvec.shape + self.llon.shape) for tpos in np.arange(len(self.tvec)): try: self.crwnd[tpos,:,:] = self.reproject(cr, cr.nwnd[tpos,:,:]) except IndexError: self.crwnd[tpos,:,:] = self.reproject(cr, cr.nwnd[-1,:,:]) return key = self.keypref + self.pa[par] self.par=par; vd=self.vd; t1 = self.t1; t2 = self.t2 i1 = self.i1; i2 = self.i2 j1 = self.j1; j2 = self.j2 k1 = self.k1; k2 = self.k2 if not t1: t1 = 0 if not t2: t2 = self.tvec.shape[0] n = netcdf_file(vd[key][2]) if par == 'nwnd': wnfld = self.scl(scale(n.variables[vd[key][0]][:])) print wnfld.shape fld = self.gmt.field(wnfld[t1:t2,...])[:,j1:j2,i1:i2] fld[fld <-1e9] = np.nan fld[fld > 1e9] = np.nan self.__dict__[par] = fld.astype(np.float32) return if 'zt_ocean' in vd[key][1].dimensions and mldint: """ Integrate down to MLD """ na = np.newaxis exists = False if not hasattr(self,par): exists = True self.condload( (par,'mldp',) ) fld = grid.mldint(self.__dict__[par],self.mldp,self.dz) if exists: del self.__dict__[par] par = par[:-1] + 'm' self.fields[-1] = par elif 'zt_ocean' in vd[key][1].dimensions and fullint: """ Integrate over each column """ na = np.newaxis exists = False if not hasattr(self,par): exists = True self.condload( (par,'mldp','ssht') ) fld = self.__dict__[par] * self.dz[na,:,na,na] if noneg: fld[fld<0] = 0 fld[:,0,:,:] = fld[:,0,:,:] * (self.ssht+self.dz[0]) / self.dz[0] fld = np.nansum(fld,axis=1) if exists: del self.__dict__[par] par = par[:-1] + 'f' self.fields[-1] = par elif 'zt_ocean' in vd[key][1].dimensions and surf: fld = self.gmt.field(scale(n.variables[vd[key][0]][t1:t2,0, j1:j2,:])) elif 'zt_ocean' in vd[key][1].dimensions: fld = self.gmt.field(scale(n.variables[vd[key][0]][t1:t2,k1:k2,j1:j2,:])) else: fld = self.gmt.field(scale(n.variables[vd[key][0]][t1:t2, j1:j2,:])) print par + ": ", fld.shape fld[fld <-1e9] = np.nan fld[fld > 1e9] = np.nan self.__dict__[par] = fld[...,self.i1:self.i2]