alimaye / sun-fan-delta-model

GNU General Public License v3.0
0 stars 0 forks source link

Enable scenarios with no standing water basin: no avulsions where there is no sediment #49

Closed amoodie closed 3 years ago

amoodie commented 3 years ago

summary

This PR implements flow routing/avulsion pathfinding mechanisms necessary to make the no-water scenarios possible.

The most significant change is that we now prevent avulsions when sediment flux into a cell is below a threshold. The threshold is very small Qs_inlet *1e-9 by default, so that it essentially only applies to places that are far into the domain and away from the shoreline. This was necessary to address the issues in #48.

Examples

water level no water
flat ** 1 2
slope break 3 ++4

** 2m water depth, errored after 3.9 yr ++ errored after 3.3 yr due to #32

Alternative approaches

I tried a few different approaches to implementing a flow/avulsion routing that would work in both water and no-water scenarios, as well as flat and sloped scenarios. With the model mostly working for a flat-water domain, the question was: how do we make channel routing stop when there is no water at the downstream end?

The first thought was to make routing based on shear stress. The idea was that as the channel reached lower gradients at the edge of the fan, the stress would be lowered and we could stop routing based on a threshold. This makes sense in the real world, but does not fit with the model formulation that shear stress is assumed ==1.8 everywhere in the domain, and channel dimensions are solved for from this assumption.

The next thought was to use a threshold flow depth, which does work. I implemented this and did some test runs, which led me to open #48. The issue with this implementation is that although channel routing is stopped by the critical flow depth, the avulsion criteria is repeatedly met at the most downstream cell of any channel pathway, because the domain was literally sloped by design. This leads to successive avulsions at this downstream cell, which each take one step into a new ocean cell, and then the cycle repeats. See, for example, the red channel pathway that runs through the "ocean" down to the model boundary in #48.

The next thought was to add a restriction on which cells can avulse, e.g., no avulsion for cells with oceanFlag==true. This, however, does not work because avulsions at the mouth are supposed to happen; indeed this is how the channel network builds out into the domain. This restriction would break the model completely.

So I tried to come up with a way to prevent channels from running through the ocean basin, and realized that sediment would never reach more than a few cells beyond the "shoreline" even though the channel would route through the ocean basin. So, I implemented a criteria for avulsion based on sediment flux: where sediment into a cell is not above a threshold avulsions cannot happen. This allows the channel to prograde a few cells beyond the shoreline (good) but prevents the channel from going farther.

alimaye commented 3 years ago

I like this solution, using a sediment flux threshold. For posterity, can you summarize the other types of thresholds you considered (flow depth, discharge fraction, shear stress) and why the sediment flux threshold is relatively advantageous?

amoodie commented 3 years ago

@alimaye I think this is ready for you to check out / approve / merge if you want to move forward with it.

There's still some bugs and boundary conditions to sort out, but it's forward progress...