Skip to content

Volume statistics #21

@fmaussion

Description

@fmaussion

Hi! Thanks for the dataset - we are looking into making this the new reference for GlacierMIP4 since this is the only available dataset for RGI7.

I have a few questions regarding total volume statistics

Glacier per glacier

I'm looking at

iceboost/iceboost_deploy.py

Lines 918 to 920 in 118ec4f

# Calculate volume from produced data points
dataID = data.loc[data["polygon"] == glacierID]
f = 0.001 * areaID / len(dataID)

And trying to make sense of how the total glacier volume is computed on the file attributes. In Farinotti et al., 2019, the computational domains are the single glacier entities and the total volume of a glacier would be:

thickness.sum() * dx**2  # with dx the spatial resolution

This is done that way because this is how the individual models worked out the volume (in OGGM we would compute the flowline volume first and then distribute it on the grid ensuring that mass is conserved despite of the area mismatch.

It's correct that the total glaciated area in the gridded product might be different from the actual (vector) area of the glacier. I suppose that this is what the division in your code above is trying to achieve? But if I try to reproduce this myself I get slightly different results.

Take RGI60-06.00002 for example (I just picked one at random).

The total (naive) volume would be:

ds = rioxr.open_rasterio('../ice_thickness/iceboost_v2/RGI62/rgi6/RGI60-06.00002.tif')
# Take the thickness, multiply by the grid point area (here 100^2), then sum it and convert to km3
vol_naive = (ds.isel(band=0).astype(np.float64) * ds.attrs['resX']**2).sum()* 1e-9  
vol_naive

Which yields 0.07769982 km3.

If I try to apply a linear correction factor for area mismatch (which, btw, is quite an assumption since the correction also applies to the thickest areas of the glacier while the errors are more likely to be spread at the borders, but this is not too important here):

area_rgi = ds.attrs['area'] # Area RGI (km2) - here 1.8970186320105116, in the RGI file 1.897, so close enough
area_grid = (~ds.isel(band=0).isnull()).sum()*ds.attrs['resX']**2*1e-6 # Area grid (km2) - here 2.37
vol_corr = vol_naive * area_rgi/area_grid
vol_corr

Which yields 0.06219325 km3.

However, the attributes of the file say:

ds.attrs['volume']

Which yields 0.06530186680162677 km3, so slightly different from the above still. What am I doing wrong? What is f = 0.001 * areaID / len(dataID) doing in the code above?

Finally, I wonder if the 0.001 is not forgetting that some glaciers have finer grid resolutions?

Regional / glacier complex volumes

I think it would be really really beneficial to have glacier complex products for RGI7 as well if you can. As of now, models will have to stitch the files together, which would be a pain to do an likely to create errors for some.

Still, this leads me to the other question: the individual glacier volumes computed above are a simple "by product", while the actual volume should always be the one computed on the original grid (the glacier complex one). Did you check that the sum of the parts is the total volume, or is this what the code above is doing?

Thanks!

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions