pygem_prms.hyps_filepath, pygem_prms.hyps_filedict, pygem_prms.hyps_colsdrop) elev_bins = main_glac_hyps.columns.values.astype(int) # Ice thickness [m], average main_glac_icethickness = modelsetup.import_Husstable( main_glac_rgi, pygem_prms.thickness_filepath, pygem_prms.thickness_filedict, pygem_prms.thickness_colsdrop) main_glac_hyps[main_glac_icethickness == 0] = 0 # Width [km], average main_glac_width = modelsetup.import_Husstable(main_glac_rgi, pygem_prms.width_filepath, pygem_prms.width_filedict, pygem_prms.width_colsdrop) # Add volume [km**3] and mean elevation [m a.s.l.] to the main glaciers table main_glac_rgi['Volume'], main_glac_rgi['Zmean'] = modelsetup.hypsometrystats( main_glac_hyps, main_glac_icethickness) # Model time frame dates_table = modelsetup.datesmodelrun(startyear, endyear, spinupyears) # Quality control - if ice thickness = 0, glacier area = 0 (problem identified by glacier RGIV6-15.00016 03/06/2018) main_glac_hyps[main_glac_icethickness == 0] = 0 #%% ===== LOAD CLIMATE DATA ===== gcm = class_climate.GCM(name=gcm_name) if option_gcm_downscale == 1: # Air Temperature [degC] and GCM dates gcm_temp, gcm_dates = gcm.importGCMvarnearestneighbor_xarray( gcm.temp_fn, gcm.temp_vn, main_glac_rgi, dates_table) # Precipitation [m] and GCM dates gcm_prec, gcm_dates = gcm.importGCMvarnearestneighbor_xarray( gcm.prec_fn, gcm.prec_vn, main_glac_rgi, dates_table) # Elevation [m a.s.l] associated with air temperature and precipitation data
def load_masschange_monthly(regions, ds_ending, netcdf_fp=sim_netcdf_fp, option_add_caldata=0): """ Load monthly mass change data """ count = 0 for region in regions: count += 1 # Load datasets ds_fn = 'R' + str(region) + ds_ending ds = xr.open_dataset(netcdf_fp + ds_fn) main_glac_rgi_region_ds = pd.DataFrame(ds.glacier_table.values, columns=ds.glac_attrs) glac_wide_massbaltotal_region = ds.massbaltotal_glac_monthly.values[:, :, 0] glac_wide_area_annual_region = ds.area_glac_annual.values[:, :, 0] time_values = pd.Series( ds.massbaltotal_glac_monthly.coords['time'].values) # ===== GLACIER DATA ===== main_glac_rgi_region = modelsetup.selectglaciersrgitable( rgi_regionsO1=[region], rgi_regionsO2='all', rgi_glac_number='all') if (main_glac_rgi_region['glacno'] - main_glac_rgi_region_ds['glacno']).sum() == 0: print('Region', str(region), ': number of glaciers match') # Glacier hypsometry main_glac_hyps_region = modelsetup.import_Husstable( main_glac_rgi_region, pygem_prms.hyps_filepath, pygem_prms.hyps_filedict, pygem_prms.hyps_colsdrop) # Ice thickness [m], average main_glac_icethickness_region = modelsetup.import_Husstable( main_glac_rgi_region, input.thickness_filepath, input.thickness_filedict, input.thickness_colsdrop) main_glac_hyps_region[main_glac_icethickness_region == 0] = 0 # ===== CALIBRATION DATA ===== if option_add_caldata == 1: dates_table_nospinup = modelsetup.datesmodelrun( startyear=input.startyear, endyear=input.endyear, spinupyears=0) cal_data_region = pd.DataFrame() for dataset in cal_datasets: cal_subset = class_mbdata.MBData(name=dataset) cal_subset_data = cal_subset.retrieve_mb( main_glac_rgi_region, main_glac_hyps_region, dates_table_nospinup) cal_data_region = cal_data_region.append(cal_subset_data, ignore_index=True) cal_data_region = cal_data_region.sort_values(['glacno', 't1_idx']) cal_data_region.reset_index(drop=True, inplace=True) # ===== APPEND DATASETS ===== if count == 1: main_glac_rgi = main_glac_rgi_region main_glac_hyps = main_glac_hyps_region main_glac_icethickness = main_glac_icethickness_region glac_wide_massbaltotal = glac_wide_massbaltotal_region glac_wide_area_annual = glac_wide_area_annual_region if option_add_caldata == 1: cal_data = cal_data_region else: main_glac_rgi = main_glac_rgi.append(main_glac_rgi_region) glac_wide_massbaltotal = np.concatenate( [glac_wide_massbaltotal, glac_wide_massbaltotal_region]) glac_wide_area_annual = np.concatenate( [glac_wide_area_annual, glac_wide_area_annual_region]) if option_add_caldata == 1: cal_data = cal_data.append(cal_data_region) # If more columns in region, then need to expand existing dataset if main_glac_hyps_region.shape[1] > main_glac_hyps.shape[1]: all_col = list(main_glac_hyps.columns.values) reg_col = list(main_glac_hyps_region.columns.values) new_cols = [item for item in reg_col if item not in all_col] for new_col in new_cols: main_glac_hyps[new_col] = 0 main_glac_icethickness[new_col] = 0 elif main_glac_hyps_region.shape[1] < main_glac_hyps.shape[1]: all_col = list(main_glac_hyps.columns.values) reg_col = list(main_glac_hyps_region.columns.values) new_cols = [item for item in all_col if item not in reg_col] for new_col in new_cols: main_glac_hyps_region[new_col] = 0 main_glac_icethickness_region[new_col] = 0 main_glac_hyps = main_glac_hyps.append(main_glac_hyps_region) main_glac_icethickness = main_glac_icethickness.append( main_glac_icethickness_region) # reset index main_glac_rgi.reset_index(inplace=True, drop=True) main_glac_hyps.reset_index(inplace=True, drop=True) main_glac_icethickness.reset_index(inplace=True, drop=True) if option_add_caldata == 1: cal_data.reset_index(inplace=True, drop=True) # Volume [km**3] and mean elevation [m a.s.l.] main_glac_rgi['Volume'], main_glac_rgi[ 'Zmean'] = modelsetup.hypsometrystats(main_glac_hyps, main_glac_icethickness) # ===== MASS CHANGE CALCULATIONS ===== # Compute glacier volume change for every time step and use this to compute mass balance glac_wide_area = np.repeat(glac_wide_area_annual[:, :-1], 12, axis=1) # Mass change [km3 mwe] # mb [mwea] * (1 km / 1000 m) * area [km2] glac_wide_masschange = glac_wide_massbaltotal / 1000 * glac_wide_area if option_add_caldata == 1: return main_glac_rgi, glac_wide_masschange, glac_wide_area, time_values, cal_data else: return main_glac_rgi, glac_wide_masschange, glac_wide_area, time_values