예제 #1
0
 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
예제 #2
0
 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.')
예제 #3
0
 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
예제 #4
0
 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)
예제 #5
0
 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))
예제 #6
0
파일: airsea.py 프로젝트: regeirk/atlantis
    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
예제 #7
0
 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)