Personal tools
Home » Members » scw » Sediment dispersal
Document Actions

Sediment dispersal

by Shaun Walbridge last modified 05-09-2006 13:11

A possible candidate for sediment dispersal model. Extremely simplified.

A quick hack to perform multi-ring buffers in GRASS and threshold based on area

Some initial setup: in=/cygdrive/f/dev/ca/pours/a_pour out=pour location=pour_test
g.mapset mapset=PERMANENT location=pour_test in=/cygdrive/f/dev/ca/bb_land2 out=de
r.null map=dem null=-99
r.mapcalc ocean='if(dem<0, 1, null()'
r.null map=dem setnull=-99

g.region -p
projection: 0 (x,y)
zone: 0
north: -2919271.69459491
south: -3227421.19533351
west: -1358927.47531673
east: -913519.64239073
nsres: 908.9955774
ewres: 908.9955774
rows: 339
cols: 490

Next, we want to generate the buffer.  We need to do whatever the maximum distance would be assuming 1 cell dispersal per ring.
For example, if our input sediment was 100 tons, and we had a decay of 5 tons × cell-1, then we'd need 100 / 5 = 20 cells out.

Generate these classes as multiples of the nsres, but precision isn't necessary since the buffer op will around to the nearest cell.

r.buffer in=pour out=pour_buffer distances=910,1820,2730,3640,4550,5460,6340,7280,8200,9100,10010,10920

ring 1

r.mapcalc pour_zones = 'if(pour_buffer && ocean, pour_buffer)'

ring 2

From this, we can calculate the stats on how much area is contained within each distance class (the categories represent distance classes from the pour point).  Then, if we can come up with a general formula for input sediment -> areal dispersion, we can use the multiple ring buffer out to the distance where we would no longer have sediment to distribute.

r.stats -a pour_zones
2 826272.959733
3 826272.959733
5 826272.959733
6 1652545.919466
7 2478818.879198
8 2478818.879198
9 1652545.919466
10 2478818.879198
11 1652545.919466
12 826272.959733
13 1652545.919466

ring 3

Final output with DEM background

Built with Plone