def plot_swe_bfes(runconfig_rea, runconfig_gcm, vname_model="I5", season_to_months=None, bmp_info=None, axes_list=None): seasonal_clim_fields_rea = analysis.get_seasonal_climatology_for_runconfig(run_config=runconfig_rea, varname=vname_model, level=0, season_to_months=season_to_months) seasonal_clim_fields_gcm = analysis.get_seasonal_climatology_for_runconfig(run_config=runconfig_gcm, varname=vname_model, level=0, season_to_months=season_to_months) lons = bmp_info.lons.copy() lons[lons > 180] -= 360 assert len(seasonal_clim_fields_rea) > 0 season_to_err = OrderedDict() for season, field in seasonal_clim_fields_rea.items(): rea = field gcm = seasonal_clim_fields_gcm[season] # Mask oceans and lakes season_to_err[season] = maskoceans(lons, bmp_info.lats, gcm - rea) assert hasattr(season_to_err[season], "mask") plot_performance_err_with_cru.plot_seasonal_mean_biases(season_to_error_field=season_to_err, varname=vname_model, basemap_info=bmp_info, axes_list=axes_list)
def compare_vars(vname_model="TT", vname_obs="tmp", r_config=None, season_to_months=None, obs_path=None, nx_agg=5, ny_agg=5, bmp_info_agg=None, axes_list=None): seasonal_clim_fields_model = analysis.get_seasonal_climatology_for_runconfig( run_config=r_config, varname=vname_model, level=0, season_to_months=season_to_months) season_to_clim_fields_model_agg = OrderedDict() for season, field in seasonal_clim_fields_model.items(): print(field.shape) season_to_clim_fields_model_agg[season] = aggregate_array( field, nagg_x=nx_agg, nagg_y=ny_agg) if vname_model == "PR": season_to_clim_fields_model_agg[season] *= 1.0e3 * 24 * 3600 if obs_path is None: cru = CRUDataManager(var_name=vname_obs) else: cru = CRUDataManager(var_name=vname_obs, path=obs_path) seasonal_clim_fields_obs = cru.get_seasonal_means( season_name_to_months=season_to_months, start_year=r_config.start_year, end_year=r_config.end_year) seasonal_clim_fields_obs_interp = OrderedDict() for season, cru_field in seasonal_clim_fields_obs.items(): seasonal_clim_fields_obs_interp[season] = cru.interpolate_data_to( cru_field, lons2d=bmp_info_agg.lons, lats2d=bmp_info_agg.lats, nneighbours=1) assert hasattr(seasonal_clim_fields_obs_interp[season], "mask") season_to_err = OrderedDict() for season in seasonal_clim_fields_obs_interp: if vname_model == "PR": # * 10, because in the UDEL dataset, precipitation is in cm season_to_err[season] = season_to_clim_fields_model_agg[season] - \ seasonal_clim_fields_obs_interp[season] * MM_PER_CM else: season_to_err[season] = season_to_clim_fields_model_agg[ season] - seasonal_clim_fields_obs_interp[season] plot_performance_err_with_cru.plot_seasonal_mean_biases( season_to_error_field=season_to_err, varname=vname_model, basemap_info=bmp_info_agg, axes_list=axes_list)
def compare_vars(vname_model, vname_to_obs, r_config, season_to_months, bmp_info_agg, axes_list): season_to_clim_fields_model = analysis.get_seasonal_climatology_for_runconfig( run_config=r_config, varname=vname_model, level=0, season_to_months=season_to_months) for season, field in season_to_clim_fields_model.items(): print(field.shape) if vname_model == "PR": field *= 1.0e3 * 24 * 3600 seasonal_clim_fields_obs = vname_to_obs[vname_model] lons = bmp_info_agg.lons.copy() lons[lons > 180] -= 360 season_to_err = OrderedDict() for season in seasonal_clim_fields_obs: season_to_err[season] = season_to_clim_fields_model[ season] - seasonal_clim_fields_obs[season] season_to_err[season] = maskoceans(lons, bmp_info_agg.lats, season_to_err[season], inlands=False) cs = plot_seasonal_mean_biases(season_to_error_field=season_to_err, varname=vname_model, basemap_info=bmp_info_agg, axes_list=axes_list) return cs
def compare_vars(vname_model, vname_to_obs, r_config, season_to_months, bmp_info_agg, axes_list): season_to_clim_fields_model = analysis.get_seasonal_climatology_for_runconfig(run_config=r_config, varname=vname_model, level=0, season_to_months=season_to_months) for season, field in season_to_clim_fields_model.items(): print(field.shape) if vname_model == "PR": field *= 1.0e3 * 24 * 3600 seasonal_clim_fields_obs = vname_to_obs[vname_model] lons = bmp_info_agg.lons.copy() lons[lons > 180] -= 360 season_to_err = OrderedDict() for season in seasonal_clim_fields_obs: season_to_err[season] = season_to_clim_fields_model[season] - seasonal_clim_fields_obs[season] season_to_err[season] = maskoceans(lons, bmp_info_agg.lats, season_to_err[season], inlands=False) cs = plot_seasonal_mean_biases(season_to_error_field=season_to_err, varname=vname_model, basemap_info=bmp_info_agg, axes_list=axes_list) return cs
def compare_vars(vname_model, vname_to_obs, r_config, season_to_months, bmp_info_agg, axes_list): season_to_clim_fields_model = analysis.get_seasonal_climatology_for_runconfig( run_config=r_config, varname=vname_model, level=0, season_to_months=season_to_months) for season, field in season_to_clim_fields_model.items(): print(field.shape) if vname_model == "PR": field *= 1.0e3 * 24 * 3600 seasonal_clim_fields_obs = vname_to_obs[vname_model] lons = bmp_info_agg.lons.copy() lons[lons > 180] -= 360 season_to_err = OrderedDict() print( "-------------var: {} (PE with anusplin)---------------------".format( vname_model)) for season in seasonal_clim_fields_obs: seasonal_clim_fields_obs[season] = np.ma.masked_where( np.isnan(seasonal_clim_fields_obs[season]), seasonal_clim_fields_obs[season]) season_to_err[season] = season_to_clim_fields_model[ season] - seasonal_clim_fields_obs[season] season_to_err[season] = maskoceans(lons, bmp_info_agg.lats, season_to_err[season], inlands=False) season_to_err[season] = np.ma.masked_where( np.isnan(season_to_err[season]), season_to_err[season]) good_vals = season_to_err[season] good_vals = good_vals[~good_vals.mask] print("{}: min={}; max={}; avg={}".format(season, good_vals.min(), good_vals.max(), good_vals.mean())) print("---------percetages --- anuplin ---") print("{}: {} %".format( season, good_vals.mean() / seasonal_clim_fields_obs[season] [~season_to_err[season].mask].mean() * 100)) cs = plot_seasonal_mean_biases(season_to_error_field=season_to_err, varname=vname_model, basemap_info=bmp_info_agg, axes_list=axes_list) return cs
def compare_vars(vname_model="TT", vname_obs="tmp", r_config=None, season_to_months=None, obs_path=None, nx_agg=5, ny_agg=5, bmp_info_agg=None, axes_list=None): seasonal_clim_fields_model = analysis.get_seasonal_climatology_for_runconfig(run_config=r_config, varname=vname_model, level=0, season_to_months=season_to_months) season_to_clim_fields_model_agg = OrderedDict() for season, field in seasonal_clim_fields_model.items(): print(field.shape) season_to_clim_fields_model_agg[season] = aggregate_array(field, nagg_x=nx_agg, nagg_y=ny_agg) if vname_model == "PR": season_to_clim_fields_model_agg[season] *= 1.0e3 * 24 * 3600 if obs_path is None: cru = CRUDataManager(var_name=vname_obs) else: cru = CRUDataManager(var_name=vname_obs, path=obs_path) seasonal_clim_fields_obs = cru.get_seasonal_means(season_name_to_months=season_to_months, start_year=r_config.start_year, end_year=r_config.end_year) seasonal_clim_fields_obs_interp = OrderedDict() for season, cru_field in seasonal_clim_fields_obs.items(): seasonal_clim_fields_obs_interp[season] = cru.interpolate_data_to(cru_field, lons2d=bmp_info_agg.lons, lats2d=bmp_info_agg.lats, nneighbours=1) assert hasattr(seasonal_clim_fields_obs_interp[season], "mask") season_to_err = OrderedDict() for season in seasonal_clim_fields_obs_interp: if vname_model == "PR": # * 10, because in the UDEL dataset, precipitation is in cm season_to_err[season] = season_to_clim_fields_model_agg[season] - \ seasonal_clim_fields_obs_interp[season] * MM_PER_CM else: season_to_err[season] = season_to_clim_fields_model_agg[season] - seasonal_clim_fields_obs_interp[season] plot_performance_err_with_cru.plot_seasonal_mean_biases(season_to_error_field=season_to_err, varname=vname_model, basemap_info=bmp_info_agg, axes_list=axes_list)
def compare_vars(vname_model, vname_to_obs, r_config, season_to_months, bmp_info_agg, axes_list): season_to_clim_fields_model = analysis.get_seasonal_climatology_for_runconfig(run_config=r_config, varname=vname_model, level=0, season_to_months=season_to_months) for season, field in season_to_clim_fields_model.items(): print(field.shape) if vname_model == "PR": field *= 1.0e3 * 24 * 3600 seasonal_clim_fields_obs = vname_to_obs[vname_model] lons = bmp_info_agg.lons.copy() lons[lons > 180] -= 360 season_to_err = OrderedDict() print("-------------var: {} (PE with anusplin)---------------------".format(vname_model)) for season in seasonal_clim_fields_obs: seasonal_clim_fields_obs[season] = np.ma.masked_where(np.isnan(seasonal_clim_fields_obs[season]), seasonal_clim_fields_obs[season]) season_to_err[season] = season_to_clim_fields_model[season] - seasonal_clim_fields_obs[season] season_to_err[season] = maskoceans(lons, bmp_info_agg.lats, season_to_err[season], inlands=False) season_to_err[season] = np.ma.masked_where(np.isnan(season_to_err[season]), season_to_err[season]) good_vals = season_to_err[season] good_vals = good_vals[~good_vals.mask] print("{}: min={}; max={}; avg={}".format(season, good_vals.min(), good_vals.max(), good_vals.mean())) print("---------percetages --- anuplin ---") print("{}: {} %".format(season, good_vals.mean() / seasonal_clim_fields_obs[season][~season_to_err[season].mask].mean() * 100)) cs = plot_seasonal_mean_biases(season_to_error_field=season_to_err, varname=vname_model, basemap_info=bmp_info_agg, axes_list=axes_list) return cs