...
Note: The numbering of the edges corresponds to the order of the dimensions in the dimensions attributes. The order of the dimensions listed here does not change since these are specified as a string. The actual order of dimensions in the netCDF API (and hence in the dump generated by different tools) depends on the programming language used. Hence, the order of the dimensions listed here may differ from the order of the dimensions in the data definition.
3d grid
Required topology attributes | Value |
---|---|
cf_role | mesh_topology |
topology_dimension | 3 |
node_dimensions | node_dimension1 node_dimension2 node_dimension3 |
volume_dimensions | face_dimension1:node_dimension1 (padding:type1) face_dimension2:node_dimension2 (padding:type2) face_dimension3:node_dimension3 (padding:type3) |
Optional attributes | Default value |
edge1_dimensions | face_dimension1:node_dimension1 (padding:type1) node_dimension2 node_dimension3 |
edge2_dimensions | node_dimension1 face_dimension2:node_dimension2 (padding:type2) node_dimension3 |
edge3_dimensions | node_dimension1 node_dimension2 face_dimension3:node_dimension3 (padding:type3) |
face1_dimensions | node_dimension1 face_dimension2:node_dimension2 (padding:type2) face_dimension3:node_dimension3 (padding:type3) |
face2_dimensions | face_dimension1:node_dimension1 (padding:type1) node_dimension2 face_dimension3:node_dimension3 (padding:type3) |
face3_dimensions | face_dimension1:node_dimension1 (padding:type1) face_dimension2:node_dimension2 (padding:type2) node_dimension3 |
node_coordinates | |
edge <i> _coordinates | |
face <i> _coordinates | |
volume_coordinates |
Note: The edge1, edge2, and edge3 are in a 3D grid aligned to the dimensions1, 2, and 3 respectively, whereas the edge1 and edge2 are in a 2D grid perpendicular to the dimensions 1 and 2 respectively. The face1, face2, and face3 play that role in the 3D grid.
Examples
Delft3D
Example:
Code Block |
---|
dimensions:
time = UNLIMITED ;
inode = 10 ;
jnode = 20 ;
icell = 9 ;
jcell = 19 ;
variables:
char time(time) ;
time:standard_name = "time" ;
time:long_name = "time" ;
time:units = "seconds since 2015-01-01 00:00:00" ;
float u(time, jcell, inode) ;
u:description = "x-velocity" ;
u:units = "m s-1" ;
u:grid = "MyGrid" ;
u:location = "edge1" ;
float v(time, jnode, icell) ;
u:description = "y-velocity" ;
u:units = "m s-1" ;
u:grid = "MyGrid" ;
u:location = "edge2" ;
float c(time, jcell, icell) ;
c:description = "some concentration" ;
c:grid = "MyGrid" ;
c:location = "face" ;
float node_lat(jnode, inode) ;
node_lat:standard_name = "latitude" ;
node_lat:units = "degree_north" ;
float node_lon(jnode, inode) ;
node_lon:standard_name = "longitude" ;
node_lon:units = "degree_east" ;
int MyGrid ;
grid:cf_role = grid_topology
grid:topology_dimension = 2 ;
grid:node_dimensions = "inode jnode" ;
grid:volume_dimensions = "icell: inode (padding: none) jcell: jnode (padding: none)" ;
grid:node_coordinates = "node_lon node_lat" ; |
3d grid
Required topology attributes | Value |
---|---|
cf_role | mesh_topology |
topology_dimension | 3 |
node_dimensions | node_dimension1 node_dimension2 node_dimension3 |
volume_dimensions | face_dimension1:node_dimension1 (padding:type1) face_dimension2:node_dimension2 (padding:type2) face_dimension3:node_dimension3 (padding:type3) |
Optional attributes | Default value |
edge1_dimensions | face_dimension1:node_dimension1 (padding:type1) node_dimension2 node_dimension3 |
edge2_dimensions | node_dimension1 face_dimension2:node_dimension2 (padding:type2) node_dimension3 |
edge3_dimensions | node_dimension1 node_dimension2 face_dimension3:node_dimension3 (padding:type3) |
face1_dimensions | node_dimension1 face_dimension2:node_dimension2 (padding:type2) face_dimension3:node_dimension3 (padding:type3) |
face2_dimensions | face_dimension1:node_dimension1 (padding:type1) node_dimension2 face_dimension3:node_dimension3 (padding:type3) |
face3_dimensions | face_dimension1:node_dimension1 (padding:type1) face_dimension2:node_dimension2 (padding:type2) node_dimension3 |
node_coordinates | |
edge <i> _coordinates | |
face <i> _coordinates | |
volume_coordinates |
Note: The edge1, edge2, and edge3 are in a 3D grid aligned to the dimensions1, 2, and 3 respectively, whereas the edge1 and edge2 are in a 2D grid perpendicular to the dimensions 1 and 2 respectively. The face1, face2, and face3 play that role in the 3D grid.
Example:
Code Block |
---|
dimensions:
time = UNLIMITED ;
inode = 10 ;
jnode = 20 ;
knode = 30 ;
iface = 9 ;
jface = 19 ;
kface = 29 ;
variables:
char time(time) ;
time:standard_name = "time" ;
time:long_name = "time" ;
time:units = "seconds since 2015-01-01 00:00:00" ;
float u(time, kface, jface, inode) ;
u:description = "x-velocity" ;
u:units = "m s-1" ;
u:grid = "MyGrid3" ;
u:location = "face1" ;
float v(time, kface, jnode, iface) ;
u:description = "y-velocity" ;
u:units = "m s-1" ;
u:grid = "MyGrid3" ;
u:location = "face2" ;
float w(time, knode, jface, iface) ;
u:description = "z-velocity" ;
u:units = "m s-1" ;
u:grid = "MyGrid3" ;
u:location = "face3" ;
float c(time, kface, jface, iface) ;
c:description = "some concentration" ;
c:grid = "MyGrid3" ;
c:location = "volume" ;
float node_lat(knode, jnode, inode) ;
node_lat:standard_name = "latitude" ;
node_lat:units = "degree_north" ;
float node_lon(knode, jnode, inode) ;
node_lon:standard_name = "longitude" ;
node_lon:units = "degree_east" ;
float node_elevation(knode, jnode, inode) ;
node_elevation:description = "elevation" ;
node_elevation:units = "m" ;
int MyGrid3 ;
grid:cf_role = grid_topology
grid:topology_dimension = 3 ;
grid:node_dimensions = "inode jnode knode" ;
grid:volume_dimensions = "iface: inode (padding: none) jface: jnode (padding: none) kface: knode (padding: none)" ;
grid:node_coordinates = "node_lon node_lat node_elevation" ; |
Data variables
The use of the attributes to associate a data variable with a specific grid and stagger location is copied from the UGRID conventions: To map the variable onto the topology of the underlying grid, two new attributes have been introduced. First, the attribute grid
points to the grid_topology variable containing the meta-data attributes of the grid on which the variable has been defined. Second, the attribute location
points to the (stagger) location within the grid at which the variable is defined.
Example:
Code Block |
---|
double waterlevel(time,j,i) ;
waterlevel:standard_name = "sea_surface_height_above_geoid" ;
waterlevel:units = "m" ;
waterlevel:grid = "MyGrid"
waterlevel:location = "face" ;
waterlevel:coordinates = "lat_face_MyGrid lon_face_MyGrid" ; |
Examples
Delft3D
Delft3D uses an Arikawa C-grid with the water level (pressure) computed in the cell centres, and the normal velocities at the cell edges. This example shows the use of asymmetric padding (at the low end of the horizontal coordinate indices there is an extra line of face/mid-point values). In the vertical there is no padding, so the number of layer interfaces is one more than the number of layers. The integer coodinate variables KMAX and KMAX1 are used to indicate that layer interfaces are numbered 0 to KMAX whereas all other indices use the default numbering from 1 to the maximum value.
...