Пример #1
0
    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
Пример #2
0
    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]
Пример #3
0
    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
Пример #4
0
    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]