def setUp(self): dx = dy = 0.25 T0 = 693596.5 # '1900-01-01 12:00' self.grid_time = numpy.arange(10) + T0 self.grid_height = numpy.arange(0) self.grid_lat = numpy.arange(-90., 90., dy) + dy / 2. self.grid_lon = numpy.arange(0., 360., dx) + dx / 2. self.grid_N = numpy.arange(self.grid_time.size) self.grid_K = numpy.arange(self.grid_height.size) self.grid_J = numpy.arange(self.grid_lat.size) self.grid_I = numpy.arange(self.grid_lon.size) # x, y = self.grid_lon, self.grid_lat xx, yy = numpy.meshgrid(x, y) t = 0 k = 2 * numpy.pi / 180 l = 2 * numpy.pi / 720 w = 2 * numpy.pi / 365.25 self.grid_SST = numpy.cos(k * xx * l * yy - w * t) self.grid_dSSTdx = -k * l * yy * numpy.sin(k * xx * l * yy - w * t) self.grid_d2SSTdx2 = -(k * l * yy)**2 * numpy.cos(k * xx * l * yy - w * t) self.grid_dSSTdy = -k * l * xx * numpy.sin(k * xx * l * yy - w * t) self.grid_d2SSTdy2 = -(k * l * xx)**2 * numpy.cos(k * xx * l * yy - w * t) self.grid_grad = self.grid_dSSTdx + 1j * self.grid_dSSTdy # l = 2 * numpy.pi / 45 self.grid_UV = (numpy.sin(k * xx) + numpy.cos(l * yy) + 1j * (numpy.cos(k * xx) + numpy.sin(l * yy))) self.grid_curl = -k * numpy.sin(k * xx) - (-l * numpy.sin(l * yy)) self.grid_div = k * numpy.cos(k * xx) + l * numpy.cos(l * yy) # self.grid = data.Grid() self.grid.name = 'Test dataset' self.grid.dimensions = dict(n=self.grid_time.size, k=self.grid_height.size, j=self.grid_lat.size, i=self.grid_lon.size) var_list = [ 'time', 'height', 'latitude', 'longitude', 'sea_surface_temperature' ] for var in var_list: self.grid.variables[var] = data.get_standard_variable(var) self.grid.variables['time'].data = self.grid_time self.grid.variables['time'].canonical_units = ('days since 0001-01-01' ' UTC') self.grid.variables['height'].data = self.grid_height self.grid.variables['latitude'].data = self.grid_lat self.grid.variables['longitude'].data = self.grid_lon self.grid.variables['sea_surface_temperature'] = self.grid_SST
def setUp(self): self.connection = dado.Connection(user='******', password='******', db='dado') self.sequence = dado.Sequence(self.connection) self.variable = data.get_standard_variable('sea_water_temperature') self.level_raw = dado.Level(id=0, name='raw', temporal='NULL', horizontal_x='NULL', horizontal_y='NULL', vertical='NULL', description='Raw (level 0) data.') self.project_dummy = dado.Project(id=0, parent=None, name='dummy', description='A dummy project for testing purposes.') self.station_dummy = dado.Station(project=self.project_dummy, id=0, name='free', description='A free station for the dummy project.')
def setUp(self): dx = dy = 0.25 T0 = 693596.5 # '1900-01-01 12:00' self.grid_time = numpy.arange(10) + T0 self.grid_height = numpy.arange(0) self.grid_lat = numpy.arange(-90., 90., dy) + dy / 2. self.grid_lon = numpy.arange(0., 360., dx) + dx / 2. self.grid_N = numpy.arange(self.grid_time.size) self.grid_K = numpy.arange(self.grid_height.size) self.grid_J = numpy.arange(self.grid_lat.size) self.grid_I = numpy.arange(self.grid_lon.size) # x, y = self.grid_lon, self.grid_lat xx, yy = numpy.meshgrid(x, y) t = 0 k = 2 * numpy.pi / 180 l = 2 * numpy.pi / 720 w = 2 * numpy.pi / 365.25 self.grid_SST = numpy.cos(k * xx * l * yy - w * t) self.grid_dSSTdx = - k * l * yy * numpy.sin(k * xx * l * yy - w * t) self.grid_d2SSTdx2 = -(k*l*yy)**2 * numpy.cos(k * xx * l * yy - w * t) self.grid_dSSTdy = - k * l * xx * numpy.sin(k * xx * l * yy - w * t) self.grid_d2SSTdy2 = -(k*l*xx)**2 * numpy.cos(k * xx * l * yy - w * t) self.grid_grad = self.grid_dSSTdx + 1j * self.grid_dSSTdy # l = 2 * numpy.pi / 45 self.grid_UV = (numpy.sin(k * xx) + numpy.cos(l * yy) + 1j * (numpy.cos(k * xx) + numpy.sin(l * yy))) self.grid_curl = -k * numpy.sin(k * xx) - (- l * numpy.sin(l * yy)) self.grid_div = k * numpy.cos(k * xx) + l * numpy.cos(l * yy) # self.grid = data.Grid() self.grid.name = 'Test dataset' self.grid.dimensions = dict( n = self.grid_time.size, k = self.grid_height.size, j = self.grid_lat.size, i = self.grid_lon.size ) var_list = ['time', 'height', 'latitude', 'longitude', 'sea_surface_temperature'] for var in var_list: self.grid.variables[var] = data.get_standard_variable(var) self.grid.variables['time'].data = self.grid_time self.grid.variables['time'].canonical_units = ('days since 0001-01-01' ' UTC') self.grid.variables['height'].data = self.grid_height self.grid.variables['latitude'].data = self.grid_lat self.grid.variables['longitude'].data = self.grid_lon self.grid.variables['sea_surface_temperature'] = self.grid_SST
def test_get_standard_variable(self): var = data.get_standard_variable('sea_surface_temperature') self.assertEqual('sea_surface_temperature', var.standard_name) self.assertEqual('K', var.canonical_units)
def test_connection_datavars_insert(self): var_list = ['sea_water_temperature', 'sea_water_salinity', 'depth'] for var in var_list: self.connection.datavars_insert(data.get_standard_variable(var))
def update(self, dat, append=False, smooth=False, report=True, **kwargs): """ Updates bulk fluxes. Parameters ---------- dat : odv.Sequence() ODV data object. append : boolean, optional Sets whether calculated parameters are appended to data sequence. Default is `False`. smooth : boolean, optional If 'True' (default), smoothes data using a boxcar moving average. report : boolean, optional Returns ------- Nothing """ # Checks data fields and uses the following wind components in order # of preference: # . ['alongchannel_wind', 'crosschannel_wind']; # . ['eastward_wind', 'northward_wind'] fields = dat.fields.keys() if ('alongchannel_wind' in fields) & ('crosschannel_wind' in fields): _wind = ('alongchannel_wind', 'crosschannel_wind') elif ('eastward_wind' in fields) & ('northward_wind' in fields): wind = ('eastward_wind', 'northward_wind') else: raise ValueError('Noooo!!!!!') # Assings data to some variables. U_O = dat[_wind[0]].data + 1j * dat[_wind[1]].data T_O = dat['air_temperature'].data SLP = dat['air_pressure_at_sea_level'].data SST = dat['sea_water_temperature'].data SSU = 0 try: q_O = dat['specific_humidity'].data except: q_O = self.relative2specific_humidity( dat['relative_humidity'].data, SST, SLP) # Makes some units conversion if dat['air_pressure_at_sea_level'].units != 'hPa': raise ValuError('Invalid unit for pressure.') # units = dict( U_O=dat[_wind[0]].units, T_O=dat['air_temperature'].units, q_O='kg kg-1', SLP='hPa', SST=dat['sea_water_temperature'].units, SSU=dat[_wind[0]].units ) # Smoothes data using moving average. if smooth: window = ones(29.) #hanning(29.) window /= window.sum() U_O = convolve(U_O.real, window, mode='same') + \ 1j * convolve(U_O.imag, window, mode='same') T_O = convolve(T_O, window, mode='same') q_O = convolve(q_O, window, mode='same') SLP = convolve(SLP, window, mode='same') SST = convolve(SST, window, mode='same') #SSU = convolve(SSU, window, mode='same') print 'Smooooooth' # Calculates bulk_fluxes Tau, QH, QE, dU10, dtheta10, dq10, L, zeta = \ self.bulk_fluxes(U_O, T_O, q_O, SLP, SST, SSU, units=units, result='all', **kwargs) # Apppends data to class items. self.__setitem__('Tau_x', data.get_standard_variable( 'surface_downward_northward_stress', data=Tau.imag, string_format='{:.4f}')) self.__setitem__('Tau_y', data.get_standard_variable( 'surface_downward_eastward_stress', data=Tau.real, string_format='{:.4f}')) self.__setitem__('QH', data.get_standard_variable( 'surface_downward_sensible_heat_flux', data=QH)) self.__setitem__('QE', data.get_standard_variable( 'surface_downward_latent_heat_flux', data=QE)) # CD = self.C_D(dU10) self.__setitem__('CD', data.get_standard_variable( 'surface_drag_coefficient_for_momentum_in_air', data=CD)) CH = self.C_H(dU10, zeta=zeta) self.__setitem__('CH', data.get_standard_variable( 'surface_drag_coefficient_for_heat_in_air', data=CH)) CE = self.C_E(dU10) self.__setitem__('CE', data.Variable( standard_name='surface_drag_coefficient_for_evaporation_in_air', data=CE, units='1')) # if append: dat['surface_downward_northward_stress'] = self.__getitem__('Tau_x') dat['surface_downward_eastward_stress'] = self.__getitem__('Tau_y') dat['surface_downward_sensible_heat_flux'] = self.__getitem__('QH') dat['surface_downward_latent_heat_flux'] = self.__getitem__('QE') # dat['surface_drag_coefficient_for_momentum_in_air'] = \ self.__getitem__('CD') dat['surface_drag_coefficient_for_heat_in_air'] = \ self.__getitem__('CH') dat['surface_drag_coefficient_for_evaporation_in_air'] =\ self.__getitem__('CE') # if report: print r'\Delta \theta', nanmin(dtheta10), nanmean(dtheta10), nanmax(dtheta10) # return -1