Skip to content

Muskingum routing #85

@tyralla

Description

@tyralla

So far, HydPy implements only a very simple Muskingum-like routing approach: hstream_v1. It follows HBV96 and comes with two parameters, Lag and Damp, which describe the translation and diffusion of flood waves, respectively. We want to add a more advanced alternative and decided on a variant of the Muskingum-Cunge method modified by Todini (MCT).

We want to introduce a new model family for it, probably named HydPy-Musk, for now only including hstream_v1 and the new MCT model. We can add other routing approaches similar to the Muskingum method later.

We decided against a general "routing model family" due to the different nature of approaches already implemented. arma_v1 is an (extended) Unit-Hydrograph method and lstream_v001 is a set of ordinary differential equations that need to be solved numerically. Even when putting them all in a single model family, there are few functionalities and concepts they could share. A short description for HydPy-Musk could be "routing methods that rely on non-adaptive finite difference approximations".

When moving hstream_v1, we need to rename it. In current terminology, the new name would be musk_v001. However, we tend to make HydPy-Musk the first model family with more self-explaining model names. Therefore, we need to clarify its scope more carefully.

hstream_v1 applies the standard Muskingum formula with fixed coefficients on several channel segments. The calculation of these three coefficients happens during model initialisation based on the current values of Lag and Damp. The standard Muskingum method does not divide a channel into segments and uses the parameters x (related to the diffusion) and k (related to the translation time) for calculating the coefficients.

I suggest the following: we reformulate hstream_v1 with two new parameters. The first one is NmbSegments, which roughly corresponds to the old parameter Lag. The second parameter is a flexible "meta-parameter" that allows defining the coefficients of the working equation both in the standard Muskingum and the HBV96 way.

A first draft on how to configure the adjusted model according to the standard Muskingum method:

nmbseqments(1)
metaparameter(x=0.2, k=1000.0)

A first draft on how to configure the adjusted model according to the HBV96:

nmbseqments(2)
metaparameter(damp=0.5)

MetaParameter is not an overly helpful name. Maybe someone else can think of something more concrete?

In contrast to Muskingum-Cunge, the "classic" Muskingum method is time-invariant. Maybe we could include this information in the new model name. My first ideas:

  • musk_time_invariant
  • musk_invariant
  • musk_fixed_coeffs

Or, maybe a less academic name:

  • musk_classic
  • musk_simple
  • musk_base

Again, better ideas are welcome.

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions