Пример #1
0
                                             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
Пример #2
0
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