From 088343ef8de8388354655c1c29f709d3ed7b8d75 Mon Sep 17 00:00:00 2001 From: "brandon s. tober" Date: Wed, 3 Dec 2025 15:23:22 -0500 Subject: [PATCH 1/3] Ensure flow parameters are floating-point --- pygem/bin/run/run_inversion.py | 8 ++++---- pygem/bin/run/run_simulation.py | 3 +++ 2 files changed, 7 insertions(+), 4 deletions(-) diff --git a/pygem/bin/run/run_inversion.py b/pygem/bin/run/run_inversion.py index 24ffaa2b..258fcde5 100644 --- a/pygem/bin/run/run_inversion.py +++ b/pygem/bin/run/run_inversion.py @@ -352,10 +352,10 @@ def run( { 'O1Region': reg, 'count': len(glac_no), - 'inversion_glen_a': gdirs[0].get_diagnostics()['inversion_glen_a'], - 'inversion_fs': gdirs[0].get_diagnostics()['inversion_fs'], - 'vol_itmix_m3': itmix_vol, - 'vol_model_m3': model_vol, + 'inversion_glen_a': float(gdirs[0].get_diagnostics()['inversion_glen_a']), + 'inversion_fs': float(gdirs[0].get_diagnostics()['inversion_fs']), + 'vol_itmix_m3': float(itmix_vol), + 'vol_model_m3': float(model_vol), } ) diff --git a/pygem/bin/run/run_simulation.py b/pygem/bin/run/run_simulation.py index 1a14ac9f..5b34a611 100755 --- a/pygem/bin/run/run_simulation.py +++ b/pygem/bin/run/run_simulation.py @@ -801,6 +801,9 @@ def run(list_packed_vars): else: fs = pygem_prms['sim']['oggm_dynamics']['fs'] glen_a = cfg.PARAMS['glen_a'] * pygem_prms['sim']['oggm_dynamics']['glen_a_multiplier'] + # ensure float + fs = float(fs) + glen_a = float(glen_a) # spinup if args.spinup: From accc0597777ae35407349b3c2e12ed112be8d1d0 Mon Sep 17 00:00:00 2001 From: btobers Date: Thu, 4 Dec 2025 10:45:49 -0500 Subject: [PATCH 2/3] Load pre-calibrated glen_a parameter --- pygem/bin/run/run_inversion.py | 17 +++++++++++++---- pygem/bin/run/run_simulation.py | 24 ++++++++++++------------ 2 files changed, 25 insertions(+), 16 deletions(-) diff --git a/pygem/bin/run/run_inversion.py b/pygem/bin/run/run_inversion.py index 258fcde5..edc01a67 100644 --- a/pygem/bin/run/run_inversion.py +++ b/pygem/bin/run/run_inversion.py @@ -266,12 +266,21 @@ def run( '{0:0.5f}'.format(gd.glacier_rgi_table['RGIId_float']) + ' O1 region not in glen_a_df' ) glen_a_idx = np.where(glen_a_O1regions == gdir.glacier_rgi_table.O1Region)[0][0] - glen_a_multiplier = glen_a_df.loc[glen_a_idx, 'glens_a_multiplier'] - fs = glen_a_df.loc[glen_a_idx, 'fs'] + # Check which columns exist + # Rounce et al. (2023) regional glen a calibration file has 'glens_a_multiplier' and 'fs' + # output of run_inversion has 'inversion_glen_a' and 'inversion_fs' + if {'glens_a_multiplier', 'fs'}.issubset(glen_a_df.columns): + glen_a = cfg.PARAMS['glen_a'] * glen_a_df.loc[glen_a_idx, 'glens_a_multiplier'] + fs = glen_a_df.loc[glen_a_idx, 'fs'] + elif {'inversion_glen_a', 'inversion_fs'}.issubset(glen_a_df.columns): + glen_a = glen_a_df.loc[glen_a_idx, 'inversion_glen_a'] + fs = glen_a_df.loc[glen_a_idx, 'inversion_fs'] else: - glen_a_multiplier = pygem_prms['sim']['oggm_dynamics']['glen_a_multiplier'] + glen_a = cfg.PARAMS['glen_a'] * pygem_prms['sim']['oggm_dynamics']['glen_a_multiplier'] fs = pygem_prms['sim']['oggm_dynamics']['fs'] - glen_a = cfg.PARAMS['glen_a'] * glen_a_multiplier + # ensure float + glen_a = float(glen_a) + fs = float(fs) # non-tidewater if gdir.glacier_rgi_table['TermType'] not in [1, 5] or not pygem_prms['setup']['include_frontalablation']: diff --git a/pygem/bin/run/run_simulation.py b/pygem/bin/run/run_simulation.py index 5b34a611..cd8c476d 100755 --- a/pygem/bin/run/run_simulation.py +++ b/pygem/bin/run/run_simulation.py @@ -783,27 +783,27 @@ def run(list_packed_vars): print('cfl number:', cfg.PARAMS['cfl_number']) if args.use_regional_glen_a: - glena_df = pd.read_csv( + glen_a_df = pd.read_csv( f'{pygem_prms["root"]}/{pygem_prms["sim"]["oggm_dynamics"]["glen_a_regional_relpath"]}' ) - glena_O1regions = [int(x) for x in glena_df.O1Region.values] - assert glacier_rgi_table.O1Region in glena_O1regions, glacier_str + ' O1 region not in glena_df' - glena_idx = np.where(glena_O1regions == glacier_rgi_table.O1Region)[0][0] + glen_a_O1regions = [int(x) for x in glen_a_df.O1Region.values] + assert glacier_rgi_table.O1Region in glen_a_O1regions, glacier_str + ' O1 region not in glen_a_df' + glen_a_idx = np.where(glen_a_O1regions == glacier_rgi_table.O1Region)[0][0] # Check which columns exist # Rounce et al. (2023) regional glen a calibration file has 'glens_a_multiplier' and 'fs' # output of run_inversion has 'inversion_glen)a' and 'inversion_fs' - if {'glens_a_multiplier', 'fs'}.issubset(glena_df.columns): - glen_a = cfg.PARAMS['glen_a'] * glena_df.loc[glena_idx, 'glens_a_multiplier'] - fs = glena_df.loc[glena_idx, 'fs'] - elif {'inversion_glen_a', 'inversion_fs'}.issubset(glena_df.columns): - glen_a = glena_df.loc[glena_idx, 'inversion_glen_a'] - fs = glena_df.loc[glena_idx, 'inversion_fs'] + if {'glens_a_multiplier', 'fs'}.issubset(glen_a_df.columns): + glen_a = cfg.PARAMS['glen_a'] * glen_a_df.loc[glen_a_idx, 'glens_a_multiplier'] + fs = glen_a_df.loc[glen_a_idx, 'fs'] + elif {'inversion_glen_a', 'inversion_fs'}.issubset(glen_a_df.columns): + glen_a = glen_a_df.loc[glen_a_idx, 'inversion_glen_a'] + fs = glen_a_df.loc[glen_a_idx, 'inversion_fs'] else: - fs = pygem_prms['sim']['oggm_dynamics']['fs'] glen_a = cfg.PARAMS['glen_a'] * pygem_prms['sim']['oggm_dynamics']['glen_a_multiplier'] + fs = pygem_prms['sim']['oggm_dynamics']['fs'] # ensure float - fs = float(fs) glen_a = float(glen_a) + fs = float(fs) # spinup if args.spinup: From 310fe8f1f7f7167fe9b4b5d4feaa26ce8c38c55c Mon Sep 17 00:00:00 2001 From: "brandon s. tober" Date: Thu, 4 Dec 2025 11:09:05 -0500 Subject: [PATCH 3/3] Ruffed --- pygem/bin/run/run_simulation.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/pygem/bin/run/run_simulation.py b/pygem/bin/run/run_simulation.py index cd8c476d..87a8e074 100755 --- a/pygem/bin/run/run_simulation.py +++ b/pygem/bin/run/run_simulation.py @@ -787,7 +787,9 @@ def run(list_packed_vars): f'{pygem_prms["root"]}/{pygem_prms["sim"]["oggm_dynamics"]["glen_a_regional_relpath"]}' ) glen_a_O1regions = [int(x) for x in glen_a_df.O1Region.values] - assert glacier_rgi_table.O1Region in glen_a_O1regions, glacier_str + ' O1 region not in glen_a_df' + assert glacier_rgi_table.O1Region in glen_a_O1regions, ( + glacier_str + ' O1 region not in glen_a_df' + ) glen_a_idx = np.where(glen_a_O1regions == glacier_rgi_table.O1Region)[0][0] # Check which columns exist # Rounce et al. (2023) regional glen a calibration file has 'glens_a_multiplier' and 'fs'