NCSU GIS/MEA582:
Geospatial Modeling and Analysis

Surface water flow and erosion simulation

Here we compute surface runoff, and sediment transport using existing path sampling model.

Resources:

For animating in GRASS GIS 7, see the video instructions or instructions for the Spatio-temporal data handling and visualization in GRASS GIS workshop

Start GRASS GIS

Start GRASS - click on GRASS icon or type
grass74

In startup pannel set GIS Data Directory to path to datasets, for example on MS Windows, C:\Users\myname\grassdata.
For Project location select nc_spm_08_grass7 (North Carolina, State Plane, meters) and for Accessible mapset create a new mapset (called e.g. HW_interpolation_2).
Click Start GRASS.

Overland flow depth and discharge

g.region rural_1m res=2 -p

Calculate partial derivatives to define the gradient of elevation surface:

v.surf.rst -d input=elev_lid792_bepts elevation=elev_lid792_2m slope=dx_2m aspect=dy_2m tension=15 smooth=1.5 npmin=150
Note that partial derivatives can be also computed using r.slope.aspect.

Compute spatial pattern of overland flow depth and discharge by running the SIMWE model implemented in the r.sim.water module. We will use uniform rainfall excess, infiltration and land cover.

r.sim.water -t elevation=elev_lid792_2m dx=dx_2m dy=dy_2m rain_value=50 infil_value=0 man_value=0.05 depth=wdp_2m discharge=disch_2m nwalkers=100000 niterations=120 output_step=20
Display the results, add legend for individual raster and whatever you think is appropriate.
d.rast wdp_2m.120
d.rast disch_2m.120

Optionally, animate the time series: File > Animation tool

Peak runoff with predefined flow direction

Compute peak runoff with predefined flow direction along the stream inluding culvert under the road.

First, compute direction (aspect) of the given streams:

v.to.rast streams output=streams_dir_2m use=dir

Compute stream dx and dy using direction and slope equal to 2 degrees:

r.mapcalc "dxstr_2m = tan(2.)*cos(streams_dir_2m)"
r.mapcalc "dystr_2m = tan(2.)*sin(streams_dir_2m)"

Compute combined DEM and stream dx and dy:

r.mapcalc "dxdemstr_2m = if(isnull(dxstr_2m), dx_2m, dxstr_2m)"
r.mapcalc "dydemstr_2m = if(isnull(dystr_2m), dy_2m, dystr_2m)"

Run the model:

r.sim.water -t elevation=elev_lid792_2m dx=dxdemstr_2m dy=dydemstr_2m rain_value=50 infil_value=0 man_value=0.05 depth=wdpstr_2m discharge=dischstr_2m nwalkers=100000 niterations=120 output_step=20
d.rast dischstr_2m.120

Use Animation tool to animate the discharge.

Runoff for spatially variable landcover and rainfall excess

Compute runoff for spatially variable landcover represented by spatially variable Mannings and rainfall excess.

We will use variable Mannings coefficient defined by reclassifying land cover class. Here is the content of a file called land_to_mannings.txt with reclassification rules for the r.recode module.

1:1:0.9:0.9
2:2:0.5:0.5
3:3:0.01:0.01
4:4:0.03:0.03
5:5:0.01:0.01
6:6:0.05:0.05
7:7:0.1:0.1
8:8:0.1:0.1
9:9:0.9:0.9
10:10:0.03:0.03
11:11:0.5:0.5
r.recode input=landcover_1m output=mancover_2m rules=land_to_mannings.txt
Similarly, we will create raster with spatially variable rainfall excess rates based on the land cover classes. We use file named land_to_rain.txt to specify the rates for individual classes.
1:1:50:50
2:2:5:5
3:3:40:40
4:4:35:35
5:5:50:50
6:6:40:40
7:7:25:25
8:8:15:15
9:9:50.:50.
10:10:40:40
11:11:10:10
Again, we use the file as rules for the r.recode module.
r.recode input=landcover_1m output=raincover_2m rules=land_to_rain.txt

Run the model:

r.sim.water -t elevation=elev_lid792_2m dx=dxdemstr_2m dy=dydemstr_2m rain=raincover_2m infil_value=0 man=mancover_2m depth=wdpstrcov_2m discharge=distrcov_2m nwalkers=100000 niterations=120 output_step=20
Display the static results.
d.rast wdpstrcov_2m.120
d.legend wdpstrcov_2m.120
d.rast distrcov_2m.120
d.legend distrcov_2m.120

Animate the time series using the Animation tool.

Sediment flow rate, erosion and deposition

Compute sediment flow rate and net erosion/deposition using sediment transport part of the SIMWE model implemented in the the r.sim.sediment module. To make the computations faster, set region just to the upper part of the watershed:
g.region s=s+290

Compute input transport capacity and detachment coefficient maps:

r.mapcalc "tranin = 0.001"
r.mapcalc "detin = 0.001"

Compute input critical shear stress:

r.mapcalc "tauin = 0.01"

Run the model using the last depth from previous run:

g.copy rast=wdp_2m.120,wdp_2m
r.sim.sediment elevation=elev_lid792_2m dx=dx_2m dy=dy_2m water_depth=wdp_2m detachment_coeff=detin transport_coeff=tranin shear_stress=tauin man_value=0.05 nwalkers=1000000 niterations=120 transport_capacity=tcapacity tlimit_erosion_deposition=erdepmax sediment_flux=sedflow erosion_deposition=erdepsimwe

Display these results after few seconds:

d.rast tcapacity
d.rast erdepmax

Display the final results:

d.rast sedflow
d.legend sedflow
d.rast erdepsimwe
d.legend erdepsimwe