Пример #1
0
 def __variables(self, k):
     if k in ['TFLAG', 'ETFLAG', 'NSTKS']:
         return self.variables[k]
     elif k in ['XSTK', 'YSTK', 'HSTK', 'DSTK', 'TSTK', 'VSTK']:
         v = PseudoNetCDFVariable(
             self, k, 'f', ('NSTK',), values=self.__stk_props[k].ravel())
         v.units = {'XSTK': 'm', 'YSTK': 'm', 'HSTK': 'm',
                    'DSTK': 'm', 'TSTK': 'K', 'VSTK': 'm/h'}[k]
         v.long_name = k.ljust(16)
         v.var_desc = k.ljust(16)
         return v
     elif k in ['IONE', 'ITWO', 'KCELL', 'FLOW', 'PLMHT']:
         data_type = {'IONE': 'i', 'ITWO': 'i',
                      'KCELL': 'i', 'FLOW': 'f', 'PLMHT': 'f'}[k]
         v = self.createVariable(k, data_type, ('TSTEP', 'NSTK'))
         v.units = {'IONE': '#', 'ITWO': '#', 'KCELL': '#',
                    'FLOW': 'm**3/hr', 'PLMHT': 'm'}[k]
         v.long_name = k.ljust(16)
         v.var_desc = k.ljust(16)
         vals = self.__hourly_stk_props[:, :, [
             'IONE', 'ITWO', 'KCELL', 'FLOW', 'PLMHT'].index(k)]
         v[:] = vals.view('>' + data_type)
         return v
     elif k in self.__spc_names:
         vals = self.__emiss_data[:, self.__getspcidx(k), :]
         v = PseudoNetCDFVariable(self, k, 'f', ('TSTEP', 'NSTK'),
                                  values=vals)
         v.units = 'mole/hr'.ljust(16)
         v.long_name = k.ljust(16)
         v.var_desc = k.ljust(16)
         return v
     else:
         raise KeyError("Unknown key %s" % k)
Пример #2
0
 def __variables(self,k):
     if k in ['TFLAG','ETFLAG','NSTKS']:
         return self.variables[k]
     elif k in ['XSTK','YSTK','HSTK','DSTK','TSTK','VSTK']:
         v=PseudoNetCDFVariable(self,k,'f',('NSTK',),values=self.__stk_props[k].ravel())
         v.units={'XSTK':'m','YSTK':'m','HSTK':'m','DSTK':'m','TSTK':'K','VSTK':'m/h'}[k]
         v.long_name=k.ljust(16)
         v.var_desc=k.ljust(16)
         return v
     elif k in ['IONE', 'ITWO', 'KCELL','FLOW','PLMHT']:
         data_type={'IONE':'i', 'ITWO':'i', 'KCELL':'i','FLOW':'f','PLMHT':'f'}[k]
         v=self.createVariable(k,data_type,('TSTEP','NSTK'))
         v.units={'IONE':'#', 'ITWO':'#', 'KCELL':'#', 'FLOW':'m**3/hr', 'PLMHT':'m'}[k]
         v.long_name=k.ljust(16)
         v.var_desc=k.ljust(16)            
         vals = self.__hourly_stk_props[:,:,['IONE','ITWO','KCELL','FLOW','PLMHT'].index(k)]
         v[:] = vals.view('>' + data_type)
         return v
     elif k in self.__spc_names:
         v=PseudoNetCDFVariable(self,k,'f',('TSTEP','NSTK'),values=self.__emiss_data[:,self.__getspcidx(k),:])
         v.units='mole/hr'.ljust(16)
         v.long_name=k.ljust(16)
         v.var_desc=k.ljust(16)
         return v
     else:
         raise KeyError("Unknown key %s" % k)
Пример #3
0
    def __var_get(self, key):
        lays = len(self.dimensions['LAY'])
        times = len(self.dimensions['TSTEP'])
        rows = len(self.dimensions['ROW'])
        cols = len(self.dimensions['COL'])
        surf = 1
        air = 2
        time = 3
        date = 4
        out_idx = zeros(self.__memmap.shape,
                        dtype='b').reshape(times, lays + 1, rows * cols + 4)
        out_idx[:, 0, 3:-1] = surf
        out_idx[:, 1:, 3:-1] = air
        out_idx[:, :, 1] = time
        out_idx[:, :, 2] = date
        out_idx = out_idx.ravel()
        buf = self.__memmap[out_idx == 0].reshape((lays + 1) * times, 2)
        if not (buf[:, 0] == buf[:, 1]).all():
            raise ValueError("Buffer")
        tmpvals = self.__memmap[out_idx == 1].reshape(times, rows, cols)
        v = PseudoNetCDFVariable(self,
                                 'SURFTEMP',
                                 'f', ('TSTEP', 'ROW', 'COL'),
                                 values=tmpvals)
        self.variables['SURFTEMP'] = v
        v.units = 'K'
        v.long_name = 'SURFTEMP'
        v.var_desc = 'SURFTEMP'
        tmpvals = self.__memmap[out_idx == 2].reshape(times, lays, rows, cols)
        v = PseudoNetCDFVariable(self,
                                 'AIRTEMP',
                                 'f', ('TSTEP', 'LAY', 'ROW', 'COL'),
                                 values=tmpvals)
        self.variables['AIRTEMP'] = v
        v.units = 'K'
        v.long_name = 'AIRTEMP'
        v.var_desc = 'AIRTEMP'

        date = self.__memmap[out_idx == date].view('>i')[0:None:lays + 1]
        time = self.__memmap[out_idx == time].view('>f')[0:None:lays + 1]
        tmpvals = ConvertCAMxTime(date, time, 2)
        v = PseudoNetCDFVariable(self,
                                 'TFLAG',
                                 'f', ('TSTEP', 'VAR', 'DATE-TIME'),
                                 values=tmpvals)
        self.variables['TFLAG'] = v

        return self.variables[key]
Пример #4
0
    def __add_variables(self):
        v = self.createVariable(
            'TFLAG', 'i', ('TSTEP', 'VAR', 'DATE-TIME'), keep=True)
        v[:] = self.__windfile.variables['TFLAG'][self.__timeslice]
        v.long_name = 'Time flag'
        v.units = 'DATE-TIME'
        if self.__force_stagger and self.__windfile.LSTAGGER == 0:
            warn('Cell centered values are being averaged as though ' +
                 'staggered. Could just be pre v4.3 file that was actually ' +
                 'staggered')

        for k in ['U', 'V']:
            if self.__force_stagger or self.__windfile.LSTAGGER != 0:
                if k == 'U':
                    preproc = CenterCAMxU
                elif k == 'V':
                    preproc = CenterCAMxV
            else:
                preproc = CenterTime

            var = self.__windfile.variables[k]
            v = PseudoNetCDFVariable(
                self, k, 'f', ('TSTEP', 'LAY', 'ROW', 'COL'),
                values=preproc(var))
            v.units = var.units
            v.long_name = k.ljust(16)
            v.var_desc = (k + ' at center').ljust(16)
            self.variables[k] = PseudoNetCDFVariableConvertUnit(
                v, self.__outunit)
Пример #5
0
 def __DEPTH__(self):
     val=CAMxHeightToDepth(self.variables['HGHT'])
     var=PseudoNetCDFVariable(self,'DEPTH','f',('TSTEP','LAY','ROW','COL'),values=val)
     var.units='m'
     var.long_name='RATE'.ljust(16)
     var.var_desc='RATE'.ljust(16)
     return var
Пример #6
0
def ConvertCAMxTime(date, time, nvars):
    class temp:
        pass

    f = temp()
    f.dimensions = {'TSTEP': date.shape[0], 'VAR': nvars, 'DATE-TIME': 2}

    a = array([date, time], dtype='i').swapaxes(0, 1)
    if len(a.shape) == 2:
        a = a[:, newaxis, :]
    date = a[:, :, 0]
    if (date < 70000).any():
        date += 2000000
    else:
        date += 1900000
    time = a[:, :, 1]
    while not (time == 0).all() and time.max() < 10000:
        time *= 100
    a = PseudoNetCDFVariable(f,
                             'TFLAG',
                             'i', ('TSTEP', 'VAR', 'DATE-TIME'),
                             values=a[:, [0], :].repeat(nvars, 1))
    a.units = 'DATE-TIME'.ljust(16)
    a.long_name = 'TFLAG'.ljust(16)
    a.var_desc = a.long_name
    return a
Пример #7
0
 def __FCLOUD__(self):
     val = self.variables["CLOUD"] >= 5
     var = PseudoNetCDFVariable(self, "FCLOUD", "i", ("TSTEP", "LAY", "ROW", "COL"), values=array(val, dtype="i"))
     var.units = "None"
     var.long_name = "FCLOUD".ljust(16)
     var.var_desc = "FCLOUD".ljust(16)
     return var
Пример #8
0
 def __FCLOUD__(self):
     val = self.variables['CLOUD'] >= 5
     var = PseudoNetCDFVariable(self,
                                'FCLOUD',
                                'i', ('TSTEP', 'LAY', 'ROW', 'COL'),
                                values=array(val, dtype='i'))
     var.units = 'None'
     var.long_name = 'FCLOUD'.ljust(16)
     var.var_desc = 'FCLOUD'.ljust(16)
     return var
Пример #9
0
 def __set_var(self, key, vals_idx):
     times = len(self.dimensions['TSTEP'])
     lays = len(self.dimensions['LAY'])
     rows = len(self.dimensions['ROW'])
     cols = len(self.dimensions['COL'])
     v = PseudoNetCDFVariable(self, key, 'f', ('TSTEP', 'LAY', 'ROW', 'COL'), values = self.__memmap[vals_idx].reshape(times, lays, rows, cols))
     v.units = {'COD':'None'}.get(key, 'g/m**3')
     v.long_name = key
     v.var_desc = key
     self.variables[key] = v
Пример #10
0
 def __PRECIP_RATE__(self):
     if "PRECIP" in self.variables.keys():
         val = self.variables["PRECIP"]
     else:
         val = self.variables["RAIN"] + self.variables["SNOW"] + self.variables["GRAUPEL"]
     var = PseudoNetCDFVariable(self, "PRECIP_RATE", "f", ("TSTEP", "LAY", "ROW", "COL"), values=(val * 10) ** 1.27)
     var.units = "mm/h"
     var.long_name = "PRECIP_RATE".ljust(16)
     var.var_desc = "PRECIP_RATE".ljust(16)
     return var
Пример #11
0
 def __PRECIP_RATE__(self):
     if 'PRECIP' in self.variables.keys():
         val = self.variables['PRECIP']
     else:
         val = self.variables['RAIN'] + \
             self.variables['SNOW'] + self.variables['GRAUPEL']
     var = PseudoNetCDFVariable(self,
                                'PRECIP_RATE',
                                'f', ('TSTEP', 'LAY', 'ROW', 'COL'),
                                values=(val * 10)**1.27)
     var.units = 'mm/h'
     var.long_name = 'PRECIP_RATE'.ljust(16)
     var.var_desc = 'PRECIP_RATE'.ljust(16)
     return var
Пример #12
0
 def __set_var(self, key, vals_idx):
     times = len(self.dimensions['TSTEP'])
     lays = len(self.dimensions['LAY'])
     rows = len(self.dimensions['ROW'])
     cols = len(self.dimensions['COL'])
     v = PseudoNetCDFVariable(self,
                              key,
                              'f', ('TSTEP', 'LAY', 'ROW', 'COL'),
                              values=self.__memmap[vals_idx].reshape(
                                  times, lays, rows, cols))
     v.units = {'COD': 'None'}.get(key, 'g/m**3')
     v.long_name = key
     v.var_desc = key
     self.variables[key] = v
Пример #13
0
 def childvariables(self, k):
     for f in self.__files:
         if k in f.variables.keys():
             v = f.variables[k]
             if k=='TFLAG':
                 v = PseudoNetCDFVariable(self, 'TFLAG', 'i', v.dimensions, values = v[:][:, [0], :].repeat(len(self.dimensions['VAR']), 1))
                 v.long_name = 'TFLAG'.ljust(16)
                 v.var_desc = 'TFLAG'.ljust(16)
                 v.units = 'DATE-TIME'
                 
             if k=='LAY' and k in self.dimensions.keys() and len(k.shape) > 1:
                 if v.shape[1]==1:
                     dims = list(v.dimensions)
                     dims[1] = 'SURFLAY'
                     v.dimensions = tuple(dims)
             return v
Пример #14
0
def ConvertCAMxTime(date,time,nvars):
    class temp:
        pass
        
        
    f = temp()
    f.dimensions = {'TSTEP': date.shape[0], 'VAR': nvars, 'DATE-TIME': 2}
    
    a=array([date,time],dtype='i').swapaxes(0,1)
    if len(a.shape)==2:
        a=a[:,newaxis,:]
    date=a[:,:,0]
    if (date<70000).any():
        date+=2000000
    else:
        date+=1900000
    time=a[:,:,1]
    while not (time==0).all() and time.max()<10000:
        time*=100
    a=PseudoNetCDFVariable(f,'TFLAG','i',('TSTEP','VAR','DATE-TIME'),values=a[:,[0],:].repeat(nvars,1))
    a.units='DATE-TIME'.ljust(16)
    a.long_name='TFLAG'.ljust(16)
    a.var_desc=a.long_name
    return a
Пример #15
0
    def __add_variables(self):
        v=self.createVariable('TFLAG','i',('TSTEP','VAR','DATE-TIME'),keep=True)
        v[:] = self.__windfile.variables['TFLAG'][self.__timeslice]
        v.long_name='Time flag'
        v.units='DATE-TIME'
        if self.__force_stagger and self.__windfile.LSTAGGER==0:
            warn('Cell centered values are being averaged as though staggered'+ \
                 'Could just be pre v4.3 file that was actually staggered')

        for k in ['U','V']:
            if self.__force_stagger or self.__windfile.LSTAGGER!=0:
                if k=='U':
                    preproc=CenterCAMxU
                elif k=='V':
                    preproc=CenterCAMxV
            else:
                preproc=CenterTime
                
            var=self.__windfile.variables[k]
            v=PseudoNetCDFVariable(self,k,'f',('TSTEP','LAY','ROW','COL'),values=preproc(var))
            v.units=var.units
            v.long_name=k.ljust(16)
            v.var_desc=(k+' at center').ljust(16)
            self.variables[k]=PseudoNetCDFVariableConvertUnit(v,self.__outunit)