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
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)
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)
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)