You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
@doutriaux1@dnadeau4 I have a short script below that can probably be quickly turned into a notebook by a notebook expert
It shows several useful features of cdms2, i.e. how to:
create a regular grid
get 1D weights
compute the 2D weights
create a cdms2 variable with some extra metadata
save a variable to an nc file
#!/usr/bin/env python
# Generate the weights of a regular/uniform grid, and store the
# variable in a netcdf file
# J-Y Peterschmitt - LSCE - 05/2019
import numpy as np, time, os
import cdms2
# Define and generate the grid. The cell bounds are automatically
# generated and will be automatically used for computing the cell weights
# inc = 0.5
# nb_lat = 360
inc = 1
nb_lat = 180
startLat, nlat, deltaLat, startLon, nlon, deltaLon = (-90 + inc/2., nb_lat, inc,
-180 + inc/2., 2*nb_lat, inc)
uniform_grid = cdms2.createUniformGrid(startLat, nlat, deltaLat, startLon, nlon, deltaLon)
# Check the generated grid
print('Grid information:')
print(uniform_grid)
# Get the grid axes
lat_axis = uniform_grid.getLatitude()
lon_axis = uniform_grid.getLongitude()
print('\nLongitude information:')
print(lon_axis)
print('\nLongitude bounds information:')
print(lon_axis.getBounds()[:3, :])
print(lon_axis.getBounds()[-3:, :])
print('\nLatitude information:')
print(lat_axis)
print('\nLatitude bounds information:')
print(lat_axis.getBounds()[:3, :])
print(lat_axis.getBounds()[-3:, :])
# Get the axes' weights and combine them into a 2D variable
lat_weights, lon_weights = uniform_grid.getWeights()
grid_weights = np.outer(lat_weights, lon_weights)
print('\nCheck that the sum of the generated weights is 1.0:')
print(' lat_weights.sum() =', lat_weights.sum())
print(' lon_weights.sum() =', lon_weights.sum())
print(' grid_weights.sum() =', grid_weights.sum())
# Combine the 2D weights var with the axes to create a variable
weight_var = cdms2.createVariable(grid_weights, axes=[lat_axis,
lon_axis] , id='cell_weight')
# Easily add some extra metadata
weight_var.units = '1'
weight_var.history = 'File generated with cdms2 on ' + time.asctime()
# Save the variable in a NetCDF 3 file
cdms2.useNetcdf3()
nc_out = './weight_file.nc'
f_out = cdms2.open(nc_out, 'w')
f_out.write(weight_var)
f_out.close()
print('\nSuccessfully saved the weights to ' + nc_out)
print('\nChecking the header of the generated file\n')
os.system('ncdump -h '+ nc_out)
# The end
The text was updated successfully, but these errors were encountered:
Thanks @dnadeau4@reshel3 ! Il looks pretty good to me, with the following exceptions/improvements:
I assume this notebook will eventually appear in the Jupyter-notebooks Tutorials page, and we can probably make the title more informative than CDMS Helpful Features if we want the users to find/read it. I'm not too sure about that, if you have to also keep the title short (is there a limit on that?). Maybe something like: Using cdms for NetCDF I/O, regular grid creation and cell weight computation (that's quite a mouthful)?
In [2]: We still get the bounds' round up error related warning that was mentioned in (auto)Bounds related warning that can be improved (2.12 and earlier) cdms#189. In this particular example, we absolutely need the automatic generation of the bounds, but is there a way to remove this confusing warning, or at least change the Your bounds bounds string to Your last bounds?
In [5]: I had not realized that the print output would look a bit odd when executed in Python 2. The print commands should probably be written the following way: print(' lat_weights.sum() = ' + lat_weights.sum())
after In [11], we should probably use and demonstrate the super useful .info() function, with a Check the variable metadata title followed by weight_var.info() or print(weight_var.info()) (don't know if you can use a print here) line
In [12]: it seems that unfortunately the output of os.system('ncdump -h '+ nc_out) does not go to the notebook, so the os.system line should probably be commented out (but kept in the notebook), followed by a !ncdump nc_out (don't know if this works), or !ncdump ./weight_file.nc
@doutriaux1 @dnadeau4 I have a short script below that can probably be quickly turned into a notebook by a notebook expert
It shows several useful features of cdms2, i.e. how to:
The text was updated successfully, but these errors were encountered: