Skip to content

Instantly share code, notes, and snippets.

@julienchastang
Last active August 24, 2016 23:32
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save julienchastang/2129368a26ce0d85cff13cf0bc05cbf4 to your computer and use it in GitHub Desktop.
Save julienchastang/2129368a26ce0d85cff13cf0bc05cbf4 to your computer and use it in GitHub Desktop.
Gridded Data Template
Display the source blob
Display the rendered blob
Raw
{
"cells": [
{
"cell_type": "markdown",
"metadata": {
"ein.tags": [
"worksheet-0"
],
"slideshow": {
"slide_type": "-"
}
},
"source": [
"Grab the usual imports:"
]
},
{
"cell_type": "code",
"execution_count": 13,
"metadata": {
"autoscroll": "json-false",
"collapsed": false,
"ein.tags": [
"worksheet-0"
],
"slideshow": {
"slide_type": "-"
}
},
"outputs": [],
"source": [
" import netCDF4\n",
" import numpy as np"
]
},
{
"cell_type": "markdown",
"metadata": {
"ein.tags": [
"worksheet-0"
],
"slideshow": {
"slide_type": "-"
}
},
"source": [
"Let's first create our netCDF file:"
]
},
{
"cell_type": "code",
"execution_count": 14,
"metadata": {
"autoscroll": "json-false",
"collapsed": false,
"ein.tags": [
"worksheet-0"
],
"slideshow": {
"slide_type": "-"
}
},
"outputs": [],
"source": [
" try:\n",
" ncfile.close() # just to be safe, make sure dataset is not already open.\n",
" except:\n",
" pass\n",
" ncfile = netCDF4.Dataset('grid.nc',\n",
" mode='w',\n",
" format='NETCDF4_CLASSIC')"
]
},
{
"cell_type": "markdown",
"metadata": {
"ein.tags": [
"worksheet-0"
],
"slideshow": {
"slide_type": "-"
}
},
"source": [
"Let's define the size of our data:"
]
},
{
"cell_type": "code",
"execution_count": 15,
"metadata": {
"autoscroll": "json-false",
"collapsed": false,
"ein.tags": [
"worksheet-0"
],
"slideshow": {
"slide_type": "-"
}
},
"outputs": [],
"source": [
" lat_size = 361\n",
" lon_size = 720\n",
" z_size = 1\n",
" time_size = 1"
]
},
{
"cell_type": "markdown",
"metadata": {
"ein.tags": [
"worksheet-0"
],
"slideshow": {
"slide_type": "-"
}
},
"source": [
"Create latitude, longitude, and time netCDF dimensions:"
]
},
{
"cell_type": "code",
"execution_count": 16,
"metadata": {
"autoscroll": "json-false",
"collapsed": false,
"ein.tags": [
"worksheet-0"
],
"slideshow": {
"slide_type": "-"
}
},
"outputs": [],
"source": [
" lat_dim = ncfile.createDimension('lat_dim', lat_size)\n",
" lon_dim = ncfile.createDimension('lon_dim', lon_size)\n",
" z_dim = ncfile.createDimension('z_dim', z_size)\n",
" time_dim = ncfile.createDimension('time_dim', time_size)"
]
},
{
"cell_type": "markdown",
"metadata": {
"ein.tags": [
"worksheet-0"
],
"slideshow": {
"slide_type": "-"
}
},
"source": [
"Create the time dimension. Make sure [to follow UDUNITS guidance described in the CF convention](http://cfconventions.org/cf-conventions/v1.6.0/cf-conventions.html#time-coordinate) for the `time` and all variables. For example:"
]
},
{
"cell_type": "code",
"execution_count": 17,
"metadata": {
"autoscroll": "json-false",
"collapsed": false,
"ein.tags": [
"worksheet-0"
],
"slideshow": {
"slide_type": "-"
}
},
"outputs": [],
"source": [
" time = ncfile.createVariable('time', np.float64, ('time_dim', ))\n",
" time.standard_name = 'time'\n",
" time.units = 'hours since 2016-01-15 00:00:00'\n",
" time.long_name = 'time'\n",
" time[:] = np.array([0])"
]
},
{
"cell_type": "markdown",
"metadata": {
"ein.tags": [
"worksheet-0"
],
"slideshow": {
"slide_type": "-"
}
},
"source": [
"Define the mesh:"
]
},
{
"cell_type": "code",
"execution_count": 18,
"metadata": {
"autoscroll": "json-false",
"collapsed": false,
"ein.tags": [
"worksheet-0"
],
"slideshow": {
"slide_type": "-"
}
},
"outputs": [],
"source": [
" latitudes = np.linspace(-90.0, 90.0, num=lat_size)\n",
" longitudes = np.linspace(-180.0, 180.0, num=lon_size)\n",
" lons, lats = np.meshgrid(longitudes, latitudes)"
]
},
{
"cell_type": "markdown",
"metadata": {
"ein.tags": [
"worksheet-0"
],
"slideshow": {
"slide_type": "-"
}
},
"source": [
"Create `latitude` variable:"
]
},
{
"cell_type": "code",
"execution_count": 19,
"metadata": {
"autoscroll": "json-false",
"collapsed": false,
"ein.tags": [
"worksheet-0"
],
"slideshow": {
"slide_type": "-"
}
},
"outputs": [],
"source": [
" latitude = ncfile.createVariable('latitude', np.float32, ('lat_dim',\n",
" 'lon_dim', ))\n",
" latitude.standard_name = 'latitude'\n",
" latitude.units = 'degrees_north'\n",
" latitude.long_name = 'latitude'\n",
" latitude[:] = lats"
]
},
{
"cell_type": "markdown",
"metadata": {
"ein.tags": [
"worksheet-0"
],
"slideshow": {
"slide_type": "-"
}
},
"source": [
"Create `longitude` variable:"
]
},
{
"cell_type": "code",
"execution_count": 20,
"metadata": {
"autoscroll": "json-false",
"collapsed": false,
"ein.tags": [
"worksheet-0"
],
"slideshow": {
"slide_type": "-"
}
},
"outputs": [],
"source": [
" longitude = ncfile.createVariable('longitude', np.float32, ('lat_dim',\n",
" 'lon_dim', ))\n",
" longitude.standard_name = 'longitude'\n",
" longitude.units = 'degrees_east'\n",
" longitude.long_name = 'longitude'\n",
" longitude[:] = lons"
]
},
{
"cell_type": "markdown",
"metadata": {
"ein.tags": [
"worksheet-0"
],
"slideshow": {
"slide_type": "-"
}
},
"source": [
"Create `z` variable:"
]
},
{
"cell_type": "code",
"execution_count": 21,
"metadata": {
"autoscroll": "json-false",
"collapsed": false,
"ein.tags": [
"worksheet-0"
],
"slideshow": {
"slide_type": "-"
}
},
"outputs": [],
"source": [
" z = ncfile.createVariable('z', np.float32, ('z_dim'))\n",
" z.standard_name = 'air_pressure_at_sea_level'\n",
" z.units = 'hPa'\n",
" z.long_name = 'mean sea level pressure'\n",
" z[:] = np.array([850])"
]
},
{
"cell_type": "markdown",
"metadata": {
"ein.tags": [
"worksheet-0"
],
"slideshow": {
"slide_type": "-"
}
},
"source": [
"Create a variable, say temperature:"
]
},
{
"cell_type": "code",
"execution_count": 22,
"metadata": {
"autoscroll": "json-false",
"collapsed": false,
"ein.tags": [
"worksheet-0"
],
"slideshow": {
"slide_type": "-"
}
},
"outputs": [],
"source": [
" temperature = ncfile.createVariable('temperature', np.float64, (\n",
" 'time_dim', 'z_dim', 'lat_dim', 'lon_dim'))\n",
" temperature.units = 'Celsius'\n",
" temperature.standard_name = 'air_temperature'\n",
" temperature.coordinates = 'time z latitude longitude'\n",
" temperature[:] = np.zeros((time_size, z_size, lat_size, lon_size))\n",
" ncfile.Conventions = \"CF-1.6\""
]
},
{
"cell_type": "markdown",
"metadata": {
"ein.tags": [
"worksheet-0"
],
"slideshow": {
"slide_type": "-"
}
},
"source": [
"Finally close the datasets we've been working with."
]
},
{
"cell_type": "code",
"execution_count": 23,
"metadata": {
"autoscroll": "json-false",
"collapsed": false,
"ein.tags": [
"worksheet-0"
],
"slideshow": {
"slide_type": "-"
}
},
"outputs": [],
"source": [
" ncfile.close();"
]
},
{
"cell_type": "markdown",
"metadata": {
"ein.tags": [
"worksheet-0"
],
"slideshow": {
"slide_type": "-"
}
},
"source": [
"You can load this netCDF file into the IDV."
]
},
{
"cell_type": "code",
"execution_count": 24,
"metadata": {
"autoscroll": "json-false",
"collapsed": false,
"ein.tags": [
"worksheet-0"
],
"slideshow": {
"slide_type": "subslide"
}
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"netcdf grid {\r\n",
"dimensions:\r\n",
"\tlat_dim = 361 ;\r\n",
"\tlon_dim = 720 ;\r\n",
"\tz_dim = 1 ;\r\n",
"\ttime_dim = 1 ;\r\n",
"variables:\r\n",
"\tdouble time(time_dim) ;\r\n",
"\t\ttime:standard_name = \"time\" ;\r\n",
"\t\ttime:units = \"hours since 2016-01-15 00:00:00\" ;\r\n",
"\t\ttime:long_name = \"time\" ;\r\n",
"\tfloat latitude(lat_dim, lon_dim) ;\r\n",
"\t\tlatitude:standard_name = \"latitude\" ;\r\n",
"\t\tlatitude:units = \"degrees_north\" ;\r\n",
"\t\tlatitude:long_name = \"latitude\" ;\r\n",
"\tfloat longitude(lat_dim, lon_dim) ;\r\n",
"\t\tlongitude:standard_name = \"longitude\" ;\r\n",
"\t\tlongitude:units = \"degrees_east\" ;\r\n",
"\t\tlongitude:long_name = \"longitude\" ;\r\n",
"\tfloat z(z_dim) ;\r\n",
"\t\tz:standard_name = \"air_pressure_at_sea_level\" ;\r\n",
"\t\tz:units = \"hPa\" ;\r\n",
"\t\tz:long_name = \"mean sea level pressure\" ;\r\n",
"\tdouble temperature(time_dim, z_dim, lat_dim, lon_dim) ;\r\n",
"\t\ttemperature:units = \"Celsius\" ;\r\n",
"\t\ttemperature:standard_name = \"air_temperature\" ;\r\n",
"\t\ttemperature:coordinates = \"time z latitude longitude\" ;\r\n",
"\r\n",
"// global attributes:\r\n",
"\t\t:Conventions = \"CF-1.6\" ;\r\n",
"}\r\n"
]
}
],
"source": [
" !ncdump -h grid.nc"
]
}
],
"metadata": {
"kernelspec": {
"display_name": "Python 3",
"language": "python",
"name": "python3"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 3
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.5.1"
},
"name": "Grid.ipynb",
"widgets": {
"state": {},
"version": "1.1.1"
}
},
"nbformat": 4,
"nbformat_minor": 0
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment