def test_multiple_inversion(): # test directory testdir = os.path.join(get_test_dir(), 'tmp_mdir') if not os.path.exists(testdir): os.makedirs(testdir) # Init cfg.initialize() cfg.set_intersects_db(get_demo_file('rgi_intersect_oetztal.shp')) cfg.PATHS['dem_file'] = get_demo_file('hef_srtm.tif') cfg.PATHS['climate_file'] = get_demo_file('histalp_merged_hef.nc') cfg.PARAMS['border'] = 40 cfg.PARAMS['run_mb_calibration'] = True cfg.PARAMS['baseline_climate'] = 'CUSTOM' cfg.PATHS['working_dir'] = testdir # Get the RGI ID hef_rgi = gpd.read_file(get_demo_file('divides_hef.shp')) hef_rgi.loc[0, 'RGIId'] = 'RGI50-11.00897' gdirs = workflow.init_glacier_regions(hef_rgi) workflow.gis_prepro_tasks(gdirs) workflow.climate_tasks(gdirs) workflow.inversion_tasks(gdirs) fig, ax = plt.subplots() graphics.plot_inversion(gdirs, ax=ax) fig.tight_layout() shutil.rmtree(testdir) return fig
def prepare_for_initializing(gdirs): list_tasks = [ tasks.compute_centerlines, tasks.initialize_flowlines, tasks.catchment_area, tasks.catchment_width_geom, tasks.catchment_width_correction, tasks.compute_downstream_line, tasks.compute_downstream_bedshape ] for task in list_tasks: workflow.execute_entity_task(task, gdirs) workflow.climate_tasks(gdirs) workflow.execute_entity_task(tasks.prepare_for_inversion, gdirs) glen_a = cfg.A for gdir in gdirs: mass_conservation_inversion(gdir, glen_a=glen_a) workflow.execute_entity_task(tasks.optimize_inversion_params,gdirs) workflow.execute_entity_task(tasks.volume_inversion, gdirs) workflow.execute_entity_task(tasks.filter_inversion_output, gdirs) workflow.execute_entity_task(tasks.init_present_time_glacier,gdirs)
def up_to_inversion(reset=False): """Run the tasks you want.""" gdirs = up_to_climate(reset=reset) with open(CLI_LOGF, 'rb') as f: clilog = pickle.load(f) if clilog != 'histalp': reset = True else: try: tasks.prepare_for_inversion(gdirs[0]) except Exception: reset = True if reset: # Use histalp for the actual inversion test cfg.PARAMS['temp_use_local_gradient'] = True cfg.PARAMS['baseline_climate'] = 'HISTALP' workflow.climate_tasks(gdirs) with open(CLI_LOGF, 'wb') as f: pickle.dump('histalp', f) # Inversion workflow.inversion_tasks(gdirs) return gdirs
def prepare_for_initializing(gdirs): ''' oggm workflow for preparing initializing :param gdirs: list of oggm.GlacierDirectories :return None, but creates required files ''' list_tasks = [ tasks.compute_centerlines, tasks.initialize_flowlines, tasks.catchment_area, tasks.catchment_width_geom, tasks.catchment_width_correction, tasks.compute_downstream_line, tasks.compute_downstream_bedshape ] for task in list_tasks: workflow.execute_entity_task(task, gdirs) workflow.climate_tasks(gdirs) workflow.execute_entity_task(tasks.prepare_for_inversion, gdirs) glen_a = cfg.A for gdir in gdirs: mass_conservation_inversion(gdir, glen_a=glen_a) workflow.execute_entity_task(tasks.volume_inversion, gdirs) workflow.execute_entity_task(tasks.filter_inversion_output, gdirs) workflow.execute_entity_task(tasks.init_present_time_glacier,gdirs)
def up_to_inversion(reset=False): """Run the tasks you want.""" gdirs = up_to_climate(reset=reset) with open(CLI_LOGF, 'rb') as f: clilog = pickle.load(f) if clilog != 'histalp': reset = True else: try: tasks.prepare_for_inversion(gdirs[0]) except Exception: reset = True if reset: # Use histalp for the actual inversion test cfg.PARAMS['temp_use_local_gradient'] = True cfg.PARAMS['baseline_climate'] = 'HISTALP' cru_dir = get_demo_file('HISTALP_precipitation_all_abs_1801-2014.nc') cfg.PATHS['cru_dir'] = os.path.dirname(cru_dir) workflow.climate_tasks(gdirs) with open(CLI_LOGF, 'wb') as f: pickle.dump('histalp', f) # Inversion workflow.inversion_tasks(gdirs) return gdirs
def preprocessing(gdirs): """ oggm workflow for preparing initializing :param gdirs: list of oggm.GlacierDirectories from preprocessed level 2 onwards :return None, but creates required files """ workflow.climate_tasks(gdirs) workflow.inversion_tasks(gdirs) workflow.execute_entity_task(tasks.init_present_time_glacier, gdirs)
def plot_issue(gdir, plot_dir): #plt.style.use('ggplot') workflow.gis_prepro_tasks([gdir]) workflow.climate_tasks([gdir]) workflow.inversion_tasks([gdir]) tasks.init_present_time_glacier(gdir) # Observed length changes df = gdir.get_ref_length_data() df = df.loc[1855:2003]['dL'] df = df - df.iloc[-1] tasks.run_from_climate_data(gdir, ys=1855, ye=2003, output_filesuffix='hist_from_current') ds = xr.open_dataset( gdir.get_filepath('model_diagnostics', filesuffix='hist_from_current')) (ds.length_m.to_series().rolling(36, center=True).mean() - ds.length_m.to_series().iloc[0]).plot(c='C0', label='OGGM') #s = s - s.iloc[-1] #print(s) ax = df.plot(c='k', label='Observations') #s.plot(c='C0', label='OGGM'); plt.legend() ax.set_ylabel('Glacier Length Change [m]') plt.title('Hintereisferner length changes Experiment 2') plt.tight_layout() plt.show() ''' fls = gdir.read_pickle('model_flowlines') x = np.arange(fls[-1].nx) *fls[-1].dx * fls[-1].map_dx plt.figure(figsize=(13,10)) rc('axes', linewidth=3) plt.plot(x,fls[-1].surface_h,linewidth=3, label='Surface Elevation') plt.plot(x,fls[-1].bed_h,'k',linewidth=3,label='Bed Topography') plt.ylabel('Altitude (m)',size=30) plt.xlabel('Distance along the Flowline (m)',size=30) plt.legend(loc='best',fontsize=30) #plt.annotate('?', xy=(5000, 2700), fontsize=40) plt.tick_params(axis='both', which='major', labelsize=30) plt.title(gdir.rgi_id+ ': '+gdir.name,size=35) plt.savefig(os.path.join(plot_dir, 'issue_today.png'),dpi=200) ''' #plt.savefig(os.path.join(plot_dir, 'issue_1850.pdf'),dpi=200) plt.show() return
def test_multiple_models(): # test directory testdir = os.path.join(get_test_dir(), 'tmp_mdir') utils.mkdir(testdir, reset=True) # Init cfg.initialize() cfg.set_intersects_db(get_demo_file('rgi_intersect_oetztal.shp')) cfg.PATHS['dem_file'] = get_demo_file('hef_srtm.tif') cfg.PATHS['climate_file'] = get_demo_file('histalp_merged_hef.nc') cfg.PATHS['working_dir'] = testdir cfg.PARAMS['baseline_climate'] = 'CUSTOM' cfg.PARAMS['trapezoid_lambdas'] = 1 cfg.PARAMS['border'] = 40 apply_test_ref_tstars() # Get the RGI ID hef_rgi = gpd.read_file(get_demo_file('divides_hef.shp')) hef_rgi.loc[0, 'RGIId'] = 'RGI50-11.00897' gdirs = workflow.init_glacier_directories(hef_rgi) workflow.gis_prepro_tasks(gdirs) workflow.climate_tasks(gdirs) workflow.inversion_tasks(gdirs) models = [] for gdir in gdirs: flowline.init_present_time_glacier(gdir) fls = gdir.read_pickle('model_flowlines') models.append(flowline.FlowlineModel(fls)) fig, ax = plt.subplots() graphics.plot_modeloutput_map(gdirs, ax=ax, model=models) fig.tight_layout() shutil.rmtree(testdir) return fig
def test_multiple_models(): # test directory testdir = os.path.join(get_test_dir(), 'tmp_mdir') utils.mkdir(testdir, reset=True) # Init cfg.initialize() cfg.PATHS['dem_file'] = get_demo_file('hef_srtm.tif') cfg.PARAMS['optimize_inversion_params'] = True cfg.PATHS['climate_file'] = get_demo_file('histalp_merged_hef.nc') cfg.PATHS['working_dir'] = testdir cfg.PARAMS['run_mb_calibration'] = True cfg.PARAMS['border'] = 40 # Get the RGI ID hef_rgi = gpd.read_file(get_demo_file('divides_hef.shp')) hef_rgi.loc[0, 'RGIId'] = 'RGI50-11.00897' gdirs = workflow.init_glacier_regions(hef_rgi) workflow.gis_prepro_tasks(gdirs) workflow.climate_tasks(gdirs) workflow.inversion_tasks(gdirs) models = [] for gdir in gdirs: flowline.init_present_time_glacier(gdir) fls = gdir.read_pickle('model_flowlines') models.append(flowline.FlowlineModel(fls)) fig, ax = plt.subplots() graphics.plot_modeloutput_map(gdirs, ax=ax, model=models) fig.tight_layout() shutil.rmtree(testdir) return fig
# remove gdirs that raised error #for gdir in gdirs: # if gdir.rgi_id in rm_list: # gdirs.remove(gdir) # plot catchment areas #graphics.plot_catchment_areas(gdirs, figsize=(8, 7)) ### Climate tasks ### # get tstars t* list and associated model parameters params_url = 'https://cluster.klima.uni-bremen.de/~oggm/ref_mb_params/oggm_v1.4/RGIV62/CRU/centerlines/qc3/pcp2.5' workflow.download_ref_tstars(base_url=params_url) # run climate related entity tasks workflow.climate_tasks(gdirs) # Downloads some files on the first time! # list gdirs that raised error (manual task) #rm_list = ['RGI60-05.01974', 'RGI60-05.02006', 'RGI60-05.02018', 'RGI60-05.02019', 'RGI60-05.02034', 'RGI60-05.02048', 'RGI60-05.02113' 'RGI60-05.02125', 'RGI60-05.02205', 'RGI60-05.02228', 'RGI60-05.02229', 'RGI60-05.02240', 'RGI60-05.02241', 'RGI60-05.02262', 'RGI60-05.02274', 'RGI60-05.02304', 'RGI60-05.02320', 'RGI60-05.02273_2', 'RGI60-05.02328_2', 'RGI60-05.01987_2'] # remove gdirs that raised error #for gdir in gdirs: # if gdir.rgi_id in rm_list: # gdirs.remove(gdir) # define year range years = np.arange(1903, 2020) # create dataframe to store results mb_result = pd.DataFrame() # Flowline Mass Balance
def up_to_inversion(reset=False): """Run the tasks you want.""" # test directory if not os.path.exists(TEST_DIR): os.makedirs(TEST_DIR) if reset: clean_dir(TEST_DIR) # Init cfg.initialize() # Use multiprocessing cfg.PARAMS['use_multiprocessing'] = not ON_TRAVIS # Working dir cfg.PATHS['working_dir'] = TEST_DIR cfg.PATHS['dem_file'] = get_demo_file('srtm_oetztal.tif') # Set up the paths and other stuffs cfg.set_divides_db(get_demo_file('divides_workflow.shp')) cfg.PATHS['wgms_rgi_links'] = get_demo_file('RGI_WGMS_oetztal.csv') cfg.PATHS['glathida_rgi_links'] = get_demo_file('RGI_GLATHIDA_oetztal.csv') # Read in the RGI file rgi_file = get_demo_file('rgi_oetztal.shp') rgidf = gpd.GeoDataFrame.from_file(rgi_file) # Be sure data is downloaded because lock doesn't work cl = utils.get_cru_cl_file() # Params cfg.PARAMS['border'] = 70 cfg.PARAMS['use_optimized_inversion_params'] = True # Go gdirs = workflow.init_glacier_regions(rgidf) try: flowline.init_present_time_glacier(gdirs[0]) except Exception: reset = True if reset: # First preprocessing tasks workflow.gis_prepro_tasks(gdirs) # Climate related tasks # See if CRU is running cfg.PARAMS['temp_use_local_gradient'] = False cfg.PATHS['climate_file'] = '~' cru_dir = get_demo_file('cru_ts3.23.1901.2014.tmp.dat.nc') cfg.PATHS['cru_dir'] = os.path.dirname(cru_dir) with warnings.catch_warnings(): # There is a warning from salem warnings.simplefilter("ignore") workflow.execute_entity_task(tasks.distribute_cru_style, gdirs) tasks.compute_ref_t_stars(gdirs) tasks.distribute_t_stars(gdirs) # Use histalp for the actual test cfg.PARAMS['temp_use_local_gradient'] = True cfg.PATHS['climate_file'] = get_demo_file('HISTALP_oetztal.nc') cfg.PATHS['cru_dir'] = '~' workflow.climate_tasks(gdirs) # Inversion workflow.inversion_tasks(gdirs) return gdirs
basin.geometry.contains(shpg.Point(x, y))[0] for (x, y) in zip(rgidf.CenLon, rgidf.CenLat) ] rgidf = rgidf.loc[in_bas] # Store them for later rgidf.to_file(os.path.join(WORKING_DIR, 'rgi_rofental.shp')) # Sort for more efficient parallel computing rgidf = rgidf.sort_values('Area', ascending=False) print('Starting OGGM run') print('Number of glaciers: {}'.format(len(rgidf))) # Go - initialize glacier directories gdirs = workflow.init_glacier_regions(rgidf) # Tasks shortcuts - see the next examples for more details workflow.gis_prepro_tasks(gdirs) workflow.climate_tasks(gdirs) workflow.inversion_tasks(gdirs) # Compile output print('Compiling output') utils.compile_glacier_statistics(gdirs) utils.write_centerlines_to_shape(gdirs) # Log m, s = divmod(time.time() - start, 60) h, m = divmod(m, 60) print('OGGM is done! Time needed: %d:%02d:%02d' % (h, m, s))
def up_to_inversion(reset=False): """Run the tasks you want.""" # test directory if not os.path.exists(TEST_DIR): os.makedirs(TEST_DIR) if reset: clean_dir(TEST_DIR) # Init cfg.initialize() # Use multiprocessing cfg.PARAMS['use_multiprocessing'] = not ON_TRAVIS # Working dir cfg.PATHS['working_dir'] = TEST_DIR cfg.set_divides_db(get_demo_file('HEF_divided.shp')) cfg.PATHS['dem_file'] = get_demo_file('srtm_oeztal.tif') # Set up the paths and other stuffs cfg.set_divides_db(get_demo_file('HEF_divided.shp')) cfg.PATHS['wgms_rgi_links'] = get_demo_file('RGI_WGMS_oeztal.csv') cfg.PATHS['glathida_rgi_links'] = get_demo_file('RGI_GLATHIDA_oeztal.csv') # Read in the RGI file rgi_file = get_demo_file('rgi_oeztal.shp') rgidf = gpd.GeoDataFrame.from_file(rgi_file) # Params cfg.PARAMS['border'] = 70 cfg.PARAMS['use_inversion_params'] = True # Go gdirs = workflow.init_glacier_regions(rgidf) try: flowline.init_present_time_glacier(gdirs[0]) except Exception: reset = True if reset: # First preprocessing tasks workflow.gis_prepro_tasks(gdirs) # Climate related tasks # See if CRU is running cfg.PARAMS['temp_use_local_gradient'] = False cfg.PATHS['climate_file'] = '~' cru_dir = get_demo_file('cru_ts3.23.1901.2014.tmp.dat.nc') cfg.PATHS['cru_dir'] = os.path.dirname(cru_dir) workflow.climate_tasks(gdirs) # Use histalp for the actual test cfg.PARAMS['temp_use_local_gradient'] = True cfg.PATHS['climate_file'] = get_demo_file('HISTALP_oeztal.nc') cfg.PATHS['cru_dir'] = '~' workflow.climate_tasks(gdirs) # Inversion workflow.inversion_tasks(gdirs) return gdirs
def up_to_inversion(): """Run the tasks you want.""" # test directory testdir = os.path.join(current_dir, 'tmp') if not os.path.exists(testdir): os.makedirs(testdir) clean_dir(testdir) # Init cfg.initialize() # Prevent multiprocessing cfg.use_mp = False # Working dir cfg.paths['working_dir'] = testdir cfg.set_divides_db(get_demo_file('HEF_divided.shp')) cfg.paths['srtm_file'] = get_demo_file('srtm_oeztal.tif') # Set up the paths and other stuffs cfg.set_divides_db(get_demo_file('HEF_divided.shp')) cfg.paths['histalp_file'] = get_demo_file('HISTALP_oeztal.nc') # Get test glaciers (all glaciers with MB or Thickness data) cfg.paths['wgms_rgi_links'] = get_demo_file('RGI_WGMS_oeztal.csv') cfg.paths['glathida_rgi_links'] = get_demo_file('RGI_GLATHIDA_oeztal.csv') # Read in the RGI file rgi_file = get_demo_file('rgi_oeztal.shp') rgidf = gpd.GeoDataFrame.from_file(rgi_file) # Go gdirs = workflow.init_glacier_regions(rgidf) # First preprocessing tasks workflow.gis_prepro_tasks(gdirs) # Climate related tasks workflow.climate_tasks(gdirs) # Merge climate and catchments workflow.execute_task(inversion.prepare_for_inversion, gdirs) fs, fd = inversion.optimize_inversion_params(gdirs) # Tests dfids = cfg.paths['glathida_rgi_links'] gtd_df = pd.read_csv(dfids).sort_values(by=['RGI_ID']) dfids = gtd_df['RGI_ID'].values ref_gdirs = [gdir for gdir in gdirs if gdir.rgi_id in dfids] # Account for area differences between glathida and rgi ref_area_km2 = gtd_df.RGI_AREA.values ref_cs = gtd_df.VOLUME.values / (gtd_df.GTD_AREA.values**1.375) ref_volume_km3 = ref_cs * ref_area_km2**1.375 vol = [] area = [] rgi = [] for gdir in ref_gdirs: v, a = inversion.inversion_parabolic_point_slope(gdir, fs=fs, fd=fd, write=True) vol.append(v) area.append(a) rgi.append(gdir.rgi_id) df = pd.DataFrame() df['rgi'] = rgi df['area'] = area df['ref_vol'] = ref_volume_km3 df['oggm_vol'] = np.array(vol) * 1e-9 df['vas_vol'] = 0.034*(ref_area_km2**1.375) df = df.set_index('rgi') shutil.rmtree(testdir) return df