Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Breaking SUMMA with too large routingGammaScale during calibration #457

Open
lou-a opened this issue May 12, 2021 · 3 comments
Open

Breaking SUMMA with too large routingGammaScale during calibration #457

lou-a opened this issue May 12, 2021 · 3 comments

Comments

@lou-a
Copy link

lou-a commented May 12, 2021

**

SUMMA_break_test_case.zip

**

To calibrate SUMMA, the Ostrich software toolkit running on Cheyenne estimates new sets of parameters using multipliers. It calculates the multiplier ranges (param_min to param_max) using the following formulas:

param_min.append(float(var_min)/float(var_ini_min))
param_max.append(float(var_max)/float(var_ini_max))

Where var_min and var_max are the parameter min and max values respectively found in the look up tables localParamInfo.txt or the basinParamInfo.txt.
And var_ini_min and var_ini_max are the min and max values found in a netcdf of initial parameter values (often called trialParams.nc). In our case, the trial parameters netcdf is filled with the default parameter values found in the look up tables for all HRUs/GRUs.

Here are the parameters which we calibrate using Ostrich:

  • k_macropore
  • k_soil
  • theta_sat
  • aquiferBaseflowExp
  • aquiferBaseflowRate
  • qSurfScale
  • summerLAI
  • frozenPrecipMultip
  • heightCanopyBottom
  • thickness (the distance between heightCanopyBottom and heightCanopyTop)
  • routingGammaScale
  • routingGammaShape

routingGammaScale is the one we will be focusing on here as it is caused SUMMA to break in our test case. The multipliers for this parameter were calculated to range from 5e-05 to 250.0, as the look up table values for this parameter are:

parameter name | default parameter value | lower parameter limit | upper parameter limit
routingGammaScale | 20000.0000 | 1.0000 | 5000000.0000

However, when Ostrich sets routingGammaScale=2740192.0, this breaks SUMMA with the following error message:

fraction of basin runoff histogram being accounted for by time delay vector is 0.97787860214872724
this is less than allowed by tolerFrac = 1.0000000000000000E-002

FATAL ERROR: summa_paramSetup/fracFuture/not enough bins for the time delay histogram -- fix hard-coded parameter in globalData.f90

Ostrich successfully tested values up to routingGammaScale=1483098.0 which did not break SUMMA.

Why issue occurs in SUMMA

This issue can be traced to variable nTimeDelay in globalData.f90 which specifies a maximum time delay histogram length for within-basin routing of 2000 hours (time steps?). This does not capture a sufficiently large fraction of total runoff for very slow within-basin routing parameters.

Possible solution

Compute nTimeDelay (used as nTDH in the code) from the chosen gammaRoutingShape and gammaRoutingScale values to ensure that the histogram is long enough to capture 99% of runoff (current tolerance in var_derive.f90).

Reproducibility

All files are attached necessary to reproduce this error in SUMMA. Where trialParams_break.nc are the default parameter values from the look up tables, except for routingGammaScale set to 2740192.0, which breaks SUMMA. And trialParams_nobreak.nc are the default parameter values, except for routingGammaScale set to 1483098.0, the highest tested value during the calibration for this parameter which we know does not break SUMMA.

@andywood
Copy link
Collaborator

andywood commented May 12, 2021 via email

@arbennett
Copy link
Member

Is there any reason not to just expand nTimeDelay to something like 5000 or 10000? We could even do this dynamically if it causes slowdowns or other undesirable side effects.

@andywood
Copy link
Collaborator

andywood commented May 12, 2021 via email

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

3 participants