Catchments with central outlet

127 views
Skip to first unread message

Josh Wolstenholme

unread,
Oct 16, 2023, 4:46:01 AM10/16/23
to caesar-lisflood
Hello,

Has anyone worked on implementing the ability to simulate a catchment with an outlet that does not flow off the edge of the model? I am aware that currently the DEM needs to reach the model boundary, or some have used the bedrock layer to build a bridge to convey flow, but it anyone has tried to implement this I would be interested in hearing about discoveries and pitfalls.

Thanks in advance,
Josh

tom.co...@gmail.com

unread,
Oct 17, 2023, 9:17:43 AM10/17/23
to caesar-...@googlegroups.com

Hi Josh,

Its quite possible to alter the code to count water at an exit in the middleif for example it drains into nodata cells. This would require some hardcoding of the relevant parts to account for where these cells are. The issue with doing this in the past is where people want to know how much is flowing past a point – and then have that flow carrying on – eg a gauge mid way through a basin – this is harder.

 

At the end of erodedepo() is this bit of code that tots up the water going to the edge cells.

 

               // work out water coming out..

                // and zero water depths in edges..

                //

                // this doesnt actually zero water - sets it to the min water depth

                // If this is not done, then zero'd water depth prevents material being moved to the edge cells and thus eroded fromthe catchment

                // leading to buildups of sediment at the edge.

 

                double temptot = 0;

                for (y = 1; y <= ymax; y++)

                {

                    if (water_depth[xmax, y] > water_depth_erosion_threshold)

                    {

                        temptot += (water_depth[xmax, y] - water_depth_erosion_threshold) * DX * DX / local_time_factor;

                        // and zero water depths at RH end

                        water_depth[xmax, y] = water_depth_erosion_threshold;

                    }

                    if (water_depth[1, y] > water_depth_erosion_threshold)

                    {

                        temptot += (water_depth[1, y] - water_depth_erosion_threshold) * DX * DX / local_time_factor;

                        // and zero water depths at RH end

                        water_depth[1, y] = water_depth_erosion_threshold;

                    }

                }

                for (int x = 1; x <= xmax; x++)

                {

                    if (water_depth[x, 1] > water_depth_erosion_threshold)

                    {

                        temptot += (water_depth[x, 1] - water_depth_erosion_threshold) * DX * DX / local_time_factor;

                        // and zero water depths at RH end

                        water_depth[x, 1] = water_depth_erosion_threshold;

                    }

                    if (water_depth[x, ymax] > water_depth_erosion_threshold)

                    {

                        temptot += (water_depth[x, ymax] - water_depth_erosion_threshold) * DX * DX / local_time_factor;

                        // and zero water depths at RH end

                        water_depth[x, ymax] = water_depth_erosion_threshold;

                    }

                }

                waterOut = temptot;

 

If – for example, your drainage points are a cell (with an eleveation value – not nodata) are at 99,99 you could replace all of this with

 

double temptot = 0;

if (water_depth[99, 99] > water_depth_erosion_threshold)

                    {

                        temptot += (water_depth[99, 99] - water_depth_erosion_threshold) * DX * DX / local_time_factor;

                        // and zero water depths at RH end

                        water_depth[99, 99] = water_depth_erosion_threshold;

                    }

waterOut = temptot;

 

If you have more than one cell where water drains into you’d have to replicate this with similar statements for those cells

 

 

double temptot = 0;

if (water_depth[99, 99] > water_depth_erosion_threshold)

                    {

                        temptot += (water_depth[99, 99] - water_depth_erosion_threshold) * DX * DX / local_time_factor;

                        // and zero water depths at RH end

                        water_depth[99, 99] = water_depth_erosion_threshold;

                    }

if (water_depth[100, 99] > water_depth_erosion_threshold)

                    {

                        temptot += (water_depth[100, 99] - water_depth_erosion_threshold) * DX * DX / local_time_factor;

                        // and zero water depths at RH end

                        water_depth[100, 99] = water_depth_erosion_threshold;

                    }

waterOut = temptot;

--
You received this message because you are subscribed to the Google Groups "caesar-lisflood" group.
To unsubscribe from this group and stop receiving emails from it, send an email to caesar-lisflo...@googlegroups.com.
To view this discussion on the web visit https://groups.google.com/d/msgid/caesar-lisflood/53ad0e72-6caf-4555-9f13-53fa5dade07bn%40googlegroups.com.

Reply all
Reply to author
Forward
0 new messages