I have a DEM of my area. I did watershed analysis with Arc Hydro.

I want to calculate "Volume of water in a basin with reference to incremental height of DAM"

Is there any method, tool to give output with info of at h1-v1, h2-v2,......hn-vn(at h-height , v-volume) in tabular or any other form, if we give input values of "min height" at which dam footing with "incremental height" and do calculations up to "max height".

Please let me know if any software/tool is doing above calculation?

  • Why not just base the calculations on a hypsometric curve for the watershed? If your raster has an attribute table, you already have a version of this curve--which leads to very fast calculations--and if not, it's quick and easy to create such a table. – whuber Oct 19 '11 at 16:41
  • Firstly, I would like to thank all of you for your suggestions and valuable inputs. yes, i am using 3D analyst. Followed the link "webhelp.esri.com/arcgisdesktop/9.3/…". I am taking each reading at incremental heights manually. And also, I have a question in the above link, I am going with "below" surface to calculate volume. If you see fig, 3 and4 in the link, It is covering white colour area which is out of dem( I mean, red dots are exists in white portion along with grey dem area). Practically, water will not be av – prasad Oct 20 '11 at 1:50
  • 1
    Could you clarify the distinction you are making by the term "H elevation"? How does that differ from "elevation"? Also, what is the connection between your two questions? There is only a superficial relationship between them (they are based on values of a DEM), but they ask for completely different things. – whuber Nov 8 '11 at 14:51
  • I am thankfull to all for response and support. I will try all your above valuable inputs. Let me clarify you on "H Elevation". I want to identify a combination of two basins/areas which are having having elevation difference to their lowest points(outlets) of 50m,100m,150m..etc...( this H elevation is difference of elevation of DEM elevations at outlet positions of the basin/area). And my second question, I want to know the area of water covered/catchment in each basin/area where DAM is constructed at outlet position. For each level of height of dam ( ie. at dam height 2m,4m,...50m,..100m...e – prasad Nov 9 '11 at 1:59

If you have the 3D Analyst extension, use the Surface Volume tool.

It's possible to automate this calculation in Python to get volumes at different heights (from an incremental height change). (Note: this example is with version 9.3, but it isn't too difficult to convert it to arcpy version 10).

# ArcGIS version 9.3
import arcgisscripting
import re

# Edit this section
step_size = 10 # metres; reduce this if you want finer resolution
num_steps = 20 # increase this, if you need more steps
workspace = r'C:\Some\path\to\folder'
raster_file = 'mytopo.tif'

gp = arcgisscripting.create()
gp.CheckOutExtension ('3D')
gp.workspace = workspace

# Start from the minimum elevation
min_rast = gp.GetRasterProperties(raster_file, 'MINIMUM')

# Start CSV output of elevation/volume relationship
print('step, height, elev, volume')
for step in range(num_steps):
    height = float(step*step_size)
    elev = min_rast + height
    gp.SurfaceVolume_3d(raster_file, '', 'BELOW', elev)
    result = gp.GetMessages()
    volume = float(re.findall(r'Volume= *([\d\.]+)', result)[0])
    print(', '.join([repr(x) for x in [step + 1, height, elev, volume]]))

produces this CSV output:

step, height, elev, volume
1, 0.0, 195.72373962402344, 0.0
2, 10.0, 205.72373962402344, 89383.136320076999
3, 20.0, 215.72373962402344, 537710.29799682996
4, 30.0, 225.72373962402344, 1616009.8535998999
5, 40.0, 235.72373962402344, 4022313.9784607999
6, 50.0, 245.72373962402344, 10139496.423829
7, 60.0, 255.72373962402344, 22423139.656699002
8, 70.0, 265.72373962402344, 125592027.17357001
9, 80.0, 275.72373962402344, 601472924.93704998
10, 90.0, 285.72373962402344, 1454118895.066
11, 100.0, 295.72373962402344, 2659321774.0138998
12, 110.0, 305.72373962402344, 4271651250.0858998
13, 120.0, 315.72373962402344, 6145982306.6198997
14, 130.0, 325.72373962402344, 8248103003.7566004
15, 140.0, 335.72373962402344, 10540914755.195
16, 150.0, 345.72373962402344, 13094286080.875
17, 160.0, 355.72373962402344, 15855580342.691999
18, 170.0, 365.72373962402344, 18894132090.799
19, 180.0, 375.72373962402344, 22168466487.139
20, 190.0, 385.72373962402344, 25702467387.048
  • 1
    Note that in order to produce correct results, the raster must be restricted to the dam's watershed. Otherwise it can include volumes from other watersheds that are not impounded by the dam. – whuber Oct 19 '11 at 16:38

Hes just wants to place a plane across a digital terrain model, similar to volumetric measurement. I think you can do this in arcscene.

Manually, You could just count the number of cells that are below 10m, 20m.... and times that by the cell size to get an area. Then you could re-color those cells and it would give you what you want. For the dam extent. Also clip the raster where the dam is located in order to bound the area.

Depending on the DTM you are using there are maybe some lidar softwares that could help you out.

  • 1
    I don't think it's that simple. For an account of what needs to be done, see quantdec.com/SYSEN597/studies/flood/index.htm . – whuber Nov 8 '11 at 18:24
  • I'm not an expert, but it seems that all depends on accuracy of the measurment. If its just rough calculation of rough water boundary, than Thad is perfectly right. However, if calculation has to be done for real conditions on the flowing river and also give precise results then I think that this is not even possible with GIS software. In this case we are talking 1D or even more accurate for the task 2D modelling. – Tomek Nov 8 '11 at 19:48
  • Sorry but it is that simple. Your link is based on predicted values for washedshed flooding, which is different than a lake created from a dam. – Thad Nov 22 '11 at 16:53

If I understand your question correctly the you would like to calculate a volume of water in a basin at various intervals below an incrementing reference plane.

If you have access to 3D analyst, you could use the Surface Volume tool to do this but it will be a bit tedious as you will need to change the reference plane elevation parameter for each change of elevation. In my case, I needed to change the elevation plane at variable increments sometimes 0.5m or less and the depth was as much as 100m.

You can automate this process programatically and change the elevation plane parameter each time you iterate a loop. Personally, I use a VB .Net Add-in to output the plane elevation, volume, 3D Area to a text file. You might be able to automate this in a model builder as well.


I'm not perfectly clear on what you want in the end, but my approach to this would be to use contours. Set the base contour to the elevation of the dam, then the increment to the water levels you want. You'd need to delete the extra contours that you don't need, convert to polygons (they should be closed loops) and that's your area of submersion.

This is a fairly simplistic approach, and I'd agree with the comments by whuber and tomek, particularly if you need to account for flowing water. But for standing water levels this should be as accurate as your DEM.


Try this tool, it loops the surface volume function in ArcGIS... ftp://lnnr.lummi-nsn.gov/GIS_Scripts/MultiVolumes10/

  • Please see my comment to @Thad's answer. – whuber Nov 8 '11 at 18:24

I used Flood Modeller Pro to calculate the area elevation volume relationship curve. It has a tool named "Run Reservoir Generator" which calculates the area and volume for specific elevation. It is an user friendly tool which requires a polygon and an .asc file in the background for the elevation data. You can also specify the contour interval according to your use and .txt file is generated which gives the volume and area for respective elevation.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.