Example #1
0
    def interpolate_u_geo_field(self):
        from utils import interpolate_scalar_field
        from constants import data_dir_path, mdt_interp_method
        from constants import lat_min, lat_max, n_lat, lon_min, lon_max, n_lon

        interp_filename_suffix = 'lat' + str(lat_min) + '-' + str(lat_max) + '_n' + str(n_lat) + '_' \
                               + 'lon' + str(lon_min) + '-' + str(lon_max) + '_n' + str(n_lon) + '.pickle'

        ugeo_interp_filename = 'mdt_cnes_cls2013_global' + '_interp_ugeo_' + interp_filename_suffix
        vgeo_interp_filename = 'mdt_cnes_cls2013_global' + '_interp_vgeo_' + interp_filename_suffix
        ugeo_interp_filepath = path.join(data_dir_path,
                                         'mdt_cnes_cls2013_global',
                                         ugeo_interp_filename)
        vgeo_interp_filepath = path.join(data_dir_path,
                                         'mdt_cnes_cls2013_global',
                                         vgeo_interp_filename)

        # TODO: Properly check for masked/filled values.
        mask_value_cond = lambda x: x < -100

        repeat0tile1 = True
        convert_lon_range = True
        ugeo_interp, latgrid_interp, longrid_interp = interpolate_scalar_field(
            self.u_geo, self.lats, self.lons, ugeo_interp_filepath,
            mask_value_cond, 'latlon', mdt_interp_method, repeat0tile1,
            convert_lon_range)
        vgeo_interp, latgrid_interp, longrid_interp = interpolate_scalar_field(
            self.v_geo, self.lats, self.lons, vgeo_interp_filepath,
            mask_value_cond, 'latlon', mdt_interp_method, repeat0tile1,
            convert_lon_range)

        self.ugeo_interp = ugeo_interp
        self.vgeo_interp = vgeo_interp
        self.latgrid_interp = latgrid_interp
        self.longrid_interp = longrid_interp
Example #2
0
    def interpolate_wind_field(self):
        from utils import interpolate_scalar_field
        from constants import u_wind_interp_method
        from constants import lat_min, lat_max, n_lat, lon_min, lon_max, n_lon

        interp_filename_suffix = 'lat' + str(lat_min) + '-' + str(lat_max) + '_n' + str(n_lat) + '_' \
                                 + 'lon' + str(lon_min) + '-' + str(lon_max) + '_n' + str(n_lon) + '.pickle'

        day_of_year = str(self.date.timetuple().tm_yday)
        u_wind_interp_filename = 'uwnd.10m.gauss.' + str(self.date.year) + 'day' + day_of_year + \
                                 '_interp_uwind_' + interp_filename_suffix
        v_wind_interp_filename = 'vwnd.10m.gauss.' + str(self.date.year) + 'day' + day_of_year + \
                                 '_interp_vwind_' + interp_filename_suffix

        u_wind_interp_filepath = path.join(self.interp_dir,
                                           str(self.date.year),
                                           u_wind_interp_filename)
        v_wind_interp_filepath = path.join(self.interp_dir,
                                           str(self.date.year),
                                           v_wind_interp_filename)

        # TODO: Properly check for masked/filled values.
        mask_value_cond = lambda x: np.full(x.shape, False, dtype=bool)

        logger.info('lats.shape={}, lons.shape={}, u_wind.shape={}'.format(
            self.lats.shape, self.lons.shape, self.u_wind.shape))

        u_wind_interp, latgrid_interp, longrid_interp = interpolate_scalar_field(
            data=self.u_wind,
            x=self.lats,
            y=self.lons,
            pickle_filepath=u_wind_interp_filepath,
            mask_value_cond=mask_value_cond,
            grid_type='latlon',
            interp_method=u_wind_interp_method,
            repeat0tile1=True,
            convert_lon_range=True)
        v_wind_interp, latgrid_interp, longrid_interp = interpolate_scalar_field(
            data=self.v_wind,
            x=self.lats,
            y=self.lons,
            pickle_filepath=v_wind_interp_filepath,
            mask_value_cond=mask_value_cond,
            grid_type='latlon',
            interp_method=u_wind_interp_method,
            repeat0tile1=True,
            convert_lon_range=True)

        # Convert everything to a numpy array otherwise the argmin functions below have to create a new numpy array
        # every time, slowing down lookup considerably.
        self.u_wind_interp = np.array(u_wind_interp)
        self.v_wind_interp = np.array(v_wind_interp)
        self.latgrid_interp = np.array(latgrid_interp)
        self.longrid_interp = np.array(longrid_interp)
    def interpolate_u_geo_field(self):
        from utils import interpolate_scalar_field
        from constants import lat_min, lat_max, n_lat, lon_min, lon_max, n_lon, u_geo_interp_method

        interp_filename_prefix = 'dt_global_allsat_msla_h_20150701_' + str(self.date.year) \
                                 + str(self.date.month).zfill(2) + str(self.date.day).zfill(2) + '_'
        interp_filename_suffix = 'lat' + str(lat_min) + '-' + str(lat_max) + '_n' + str(n_lat) + '_' \
                                 + 'lon' + str(lon_min) + '-' + str(lon_max) + '_n' + str(n_lon) + '.pickle'

        u_geo_interp_filename = interp_filename_prefix + '_interp_u_geo_' + interp_filename_suffix
        v_geo_interp_filename = interp_filename_prefix + '_interp_v_geo_' + interp_filename_suffix
        u_geo_interp_filepath = path.join(self.u_geo_interp_dir,
                                          str(self.date.year),
                                          u_geo_interp_filename)
        v_geo_interp_filepath = path.join(self.u_geo_interp_dir,
                                          str(self.date.year),
                                          v_geo_interp_filename)

        # TODO: Properly check for masked/filled values.
        mask_value_cond = lambda x: x < -100

        u_geo_interp, lats_interp, lons_interp = interpolate_scalar_field(
            data=self.u_geo,
            x=self.lats,
            y=self.lons,
            pickle_filepath=u_geo_interp_filepath,
            mask_value_cond=mask_value_cond,
            grid_type='latlon',
            interp_method=u_geo_interp_method,
            repeat0tile1=True,
            convert_lon_range=True)
        v_geo_interp, lats_interp, lons_interp = interpolate_scalar_field(
            data=self.v_geo,
            x=self.lats,
            y=self.lons,
            pickle_filepath=v_geo_interp_filepath,
            mask_value_cond=mask_value_cond,
            grid_type='latlon',
            interp_method=u_geo_interp_method,
            repeat0tile1=True,
            convert_lon_range=True)

        # Convert everything to a numpy array otherwise the argmin functions below have to create a new numpy array
        # every time, slowing down lookup considerably.
        self.u_geo_interp = np.array(u_geo_interp)
        self.v_geo_interp = np.array(v_geo_interp)
        self.lats_interp = np.array(lats_interp)
        self.lons_interp = np.array(lons_interp)
Example #4
0
    def interpolate_mdt_field(self):
        from utils import interpolate_scalar_field
        from constants import data_dir_path
        from constants import lat_min, lat_max, n_lat, lon_min, lon_max, n_lon

        mdt_interp_filename = 'mdt_cnes_cls2013_global' + '_interp_mdt_' \
                              + 'lat' + str(lat_min) + '-' + str(lat_max) + '_n' + str(n_lat) + '_' \
                              + 'lon' + str(lon_min) + '-' + str(lon_max) + '_n' + str(n_lon) + '.pickle'
        mdt_interp_filepath = path.join(data_dir_path,
                                        'mdt_cnes_cls2013_global',
                                        mdt_interp_filename)

        # TODO: Properly check for masked/filled values.
        mask_value_cond = lambda x: x < -100

        repeat0tile1 = True
        convert_lon_range = False
        mdt_interp, latgrid_interp, longrid_interp = interpolate_scalar_field(
            self.mdt, self.lats, self.lons, mdt_interp_filepath,
            mask_value_cond, 'latlon', 'cubic', repeat0tile1,
            convert_lon_range)

        self.mdt_interp = mdt_interp
        self.latgrid_interp = latgrid_interp
        self.longrid_interp = longrid_interp
    def interpolate_geostrophic_current_field(self):
        from utils import interpolate_scalar_field
        from constants import n_row, n_col, dot_interp_method

        interp_filename_prefix = 'CS2_combined_Southern_Ocean' + '_DOT_' + str(
            self.month_idx)
        interp_filename_suffix = str(n_row) + 'rows_' + str(
            n_col) + 'cols.pickle'
        interp_filename = interp_filename_prefix + interp_filename_suffix
        interp_filepath = path.join(self.interp_dir, interp_filename)

        # Mask NaN values.
        mask_value_cond = lambda x: np.isnan(x)

        dot_interp, row_interp, col_interp = interpolate_scalar_field(
            data=np.rot90(self.dot, k=1, axes=(1, 0)),
            x=np.arange(len(self.y)),
            y=np.arange(len(self.x)),
            pickle_filepath=interp_filepath,
            mask_value_cond=mask_value_cond,
            grid_type='ease_rowcol',
            interp_method=dot_interp_method,
            repeat0tile1=False,
            convert_lon_range=False,
            debug_plots=False)

        # Convert everything to a numpy array otherwise the argmin functions below have to create a new numpy array
        # every time, slowing down lookup considerably.
        self.dot_interp = np.array(dot_interp)
        self.row_interp = np.array(row_interp)
        self.col_interp = np.array(col_interp)
Example #6
0
    def interpolate_alpha_field(self):
        from utils import interpolate_scalar_field
        from constants import n_x, n_y, alpha_interp_method

        interp_filename_prefix = 'seaice_conc_daily_sh_f17_' + str(self.date.year) \
                                 + str(self.date.month).zfill(2) + str(self.date.day).zfill(2) \
                                 + '_v03r00'

        interp_filename_suffix = str(n_x) + 'x_' + str(n_y) + 'y.pickle'

        alpha_interp_filename = interp_filename_prefix + '_interp_alpha_' + interp_filename_suffix
        alpha_interp_filepath = path.join(self.sic_interp_dir,
                                          str(self.date.year),
                                          alpha_interp_filename)

        # TODO: Properly check for masked/filled values.
        mask_value_cond = lambda x: x > 1

        alpha_interp, xgrid_interp, ygrid_interp = interpolate_scalar_field(
            data=self.alpha,
            x=self.xgrid,
            y=self.ygrid,
            pickle_filepath=alpha_interp_filepath,
            mask_value_cond=mask_value_cond,
            grid_type='polar_stereographic_xy',
            interp_method=alpha_interp_method,
            repeat0tile1=False,
            convert_lon_range=False)

        # Convert everything to a numpy array otherwise the argmin functions below have to create a new numpy array
        # every time, slowing down lookup considerably.
        self.alpha_interp = np.array(alpha_interp)
        self.xgrid_interp = np.array(xgrid_interp)
        self.ygrid_interp = np.array(ygrid_interp)
    def interpolate_seaice_motion_field(self):
        from utils import interpolate_scalar_field
        from constants import n_row, n_col, u_ice_interp_method

        if self.monthly:
            interp_filename_prefix = 'icemotion.grid.month.' + str(self.date.year) + '.' \
                                     + str(self.date.month).zfill(2) + '.s.v3'
        else:
            interp_filename_prefix = 'icemotion.grid.daily.' + str(self.date.year) \
                                     + str(self.date.timetuple().tm_yday).zfill(3) + '.s.v3'

        interp_filename_suffix = str(n_row) + 'rows_' + str(n_col) + 'cols.pickle'

        u_ice_interp_filename = interp_filename_prefix + '_interp_u_ice_' + interp_filename_suffix
        v_ice_interp_filename = interp_filename_prefix + '_interp_v_ice_' + interp_filename_suffix
        u_ice_interp_filepath = path.join(self.seaice_motion_interp_dir, str(self.date.year), u_ice_interp_filename)
        v_ice_interp_filepath = path.join(self.seaice_motion_interp_dir, str(self.date.year), v_ice_interp_filename)

        # Throw out NaN values and extreme anomalies (u_ice or v_ice > 0.5 m/s).
        mask_value_cond = lambda x: np.isnan(x) | (np.abs(x) > 0.5)

        u_ice_interp, row_interp, col_interp = interpolate_scalar_field(data=self.u_ice, x=self.x[0], y=self.y[:, 0],
                                                                        pickle_filepath=u_ice_interp_filepath,
                                                                        mask_value_cond=mask_value_cond,
                                                                        grid_type='ease_rowcol',
                                                                        interp_method=u_ice_interp_method,
                                                                        repeat0tile1=True, convert_lon_range=False)
        v_ice_interp, row_interp, col_interp = interpolate_scalar_field(data=self.v_ice, x=self.x[0], y=self.y[:, 0],
                                                                        pickle_filepath=v_ice_interp_filepath,
                                                                        mask_value_cond=mask_value_cond,
                                                                        grid_type='ease_rowcol',
                                                                        interp_method=u_ice_interp_method,
                                                                        repeat0tile1=True, convert_lon_range=False)

        # Convert everything to a numpy array otherwise the argmin functions below have to create a new numpy array
        # every time, slowing down lookup considerably.
        self.u_ice_interp = np.array(u_ice_interp)
        self.v_ice_interp = np.array(v_ice_interp)
        self.row_interp = np.array(row_interp)
        self.col_interp = np.array(col_interp)