NetCDF aggregation for unstructured grids: Difference between revisions
From BAWiki
imported>Lang Guenther (text added, uncorrected version) |
(The LinkTitles extension automatically added links to existing pages (<a target="_blank" rel="nofollow noreferrer noopener" class="external free" href="https://github.com/bovender/LinkTitles">https://github.com/bovender/LinkTitles</a>).) |
||
(8 intermediate revisions by one other user not shown) | |||
Line 15: | Line 15: | ||
==Computational grid== | ==Computational grid== | ||
The description is almost fully identical with ''[[NetCDF unstructured grid]]'' for an unstructured grid without subgrid | The description is almost fully identical with ''[[NetCDF unstructured grid]]'' for an unstructured grid without subgrid. | ||
Only those variables are presented which deviate to some extent from their known definition. | Only those variables are subsequently presented which deviate to some extent from their known definition. | ||
==Aggregational grid== | ==Aggregational grid== | ||
All variables required for the | All variables required for the aggregational grid are subsequently listed. | ||
==Combined mesh (''Parent Mesh'')== | ==Combined mesh (''Parent Mesh'')== | ||
Computational mesh and aggregational mesh are combined to form the ''parent mesh''. In this context additional | Computational mesh and aggregational mesh are combined to form the ''parent mesh''. In this context additional | ||
contact variables are required. They describe the relationship or | contact variables are required. They describe the relationship or ccnnectivity between the two grids. This concept (''parent mesh'', | ||
''contact variables'') is esentially based on ideas worked out by '''Bert Jagers''' (Deltares) (see | ''contact variables'') is esentially based on ideas worked out by '''Bert Jagers''' (Deltares) (see | ||
[https://publicwiki.deltares.nl/display/NETCDF/netCDF ''Deltares Conventions'']). | [https://publicwiki.deltares.nl/display/NETCDF/netCDF ''Deltares Conventions'']). | ||
Line 37: | Line 37: | ||
# '''nMesh2_node''' : number of ''nodes'' | # '''nMesh2_node''' : number of ''nodes'' | ||
# '''nMesh2_edge''' : number of ''edges'' | # '''nMesh2_edge''' : number of ''edges'' | ||
# '''nMesh2_face''' : number of ''faces'' ( | # '''nMesh2_face''' : number of ''faces'' (polygons) | ||
# '''nMaxMesh2_face_nodes''' : maximum number of ''nodes''/''edges'' in a ''face'' (polygon) | # '''nMaxMesh2_face_nodes''' : maximum number of ''nodes''/''edges'' in a ''face'' (polygon) | ||
Line 59: | Line 59: | ||
computational grid without subgrid details. See [[NetCDF unstructured grid#Local coordinates|NetCDF unstructured grid "local coordinates"]]. | computational grid without subgrid details. See [[NetCDF unstructured grid#Local coordinates|NetCDF unstructured grid "local coordinates"]]. | ||
==Local | ==Local coordinates of the aggregational grid== | ||
===Nodes=== | ===Nodes=== | ||
Line 67: | Line 67: | ||
: CVMesh2_node_x:units = "m" ; | : CVMesh2_node_x:units = "m" ; | ||
: CVMesh2_node_x:name_id = 1650 ; | : CVMesh2_node_x:name_id = 1650 ; | ||
: CVMesh2_node_x:standard_name = " | : CVMesh2_node_x:standard_name = "[[projection]]_x_coordinate" ; | ||
double CVMesh2_node_y(nCVMesh2_node) ; | double CVMesh2_node_y(nCVMesh2_node) ; | ||
Line 73: | Line 73: | ||
: CVMesh2_node_y:units = "m" ; | : CVMesh2_node_y:units = "m" ; | ||
: CVMesh2_node_y:name_id = 1651 ; | : CVMesh2_node_y:name_id = 1651 ; | ||
: CVMesh2_node_y:standard_name = " | : CVMesh2_node_y:standard_name = "[[projection]]_y_coordinate" ; | ||
Comment: | Comment: | ||
Line 85: | Line 85: | ||
: CVMesh2_edge_x:name_id = 1650 ; | : CVMesh2_edge_x:name_id = 1650 ; | ||
: CVMesh2_edge_x:bounds = "CVMesh2_edge_x_bnd" ; | : CVMesh2_edge_x:bounds = "CVMesh2_edge_x_bnd" ; | ||
: CVMesh2_edge_x:standard_name = " | : CVMesh2_edge_x:standard_name = "[[projection]]_x_coordinate" ; | ||
double CVMesh2_edge_y(nCVMesh2_edge) ; | double CVMesh2_edge_y(nCVMesh2_edge) ; | ||
Line 92: | Line 92: | ||
: CVMesh2_edge_y:name_id = 1651 ; | : CVMesh2_edge_y:name_id = 1651 ; | ||
: CVMesh2_edge_y:bounds = "CVMesh2_edge_y_bnd" ; | : CVMesh2_edge_y:bounds = "CVMesh2_edge_y_bnd" ; | ||
: CVMesh2_edge_y:standard_name = " | : CVMesh2_edge_y:standard_name = "[[projection]]_y_coordinate" ; | ||
Comment: | Comment: | ||
Line 100: | Line 100: | ||
double CVMesh2_face_x(nCVMesh2_face) ; | double CVMesh2_face_x(nCVMesh2_face) ; | ||
: CVMesh2_face_x:long_name = "x-coordinate of 2D aggregational grid faces" ; | : CVMesh2_face_x:long_name = "x-coordinate of 2D aggregational grid faces (control volumes)" ; | ||
: CVMesh2_face_x:units = "m" ; | : CVMesh2_face_x:units = "m" ; | ||
: CVMesh2_face_x:name_id = 1650 ; | : CVMesh2_face_x:name_id = 1650 ; | ||
: CVMesh2_face_x:bounds = "CVMesh2_face_x_bnd" ; | : CVMesh2_face_x:bounds = "CVMesh2_face_x_bnd" ; | ||
: CVMesh2_face_x:standard_name = " | : CVMesh2_face_x:standard_name = "[[projection]]_x_coordinate" ; | ||
double CVMesh2_face_y(nCVMesh2_face) ; | double CVMesh2_face_y(nCVMesh2_face) ; | ||
: CVMesh2_face_y:long_name = "y-coordinate of 2D aggregational grid faces" ; | : CVMesh2_face_y:long_name = "y-coordinate of 2D aggregational grid faces (control volumes)" ; | ||
: CVMesh2_face_y:units = "m" ; | : CVMesh2_face_y:units = "m" ; | ||
: CVMesh2_face_y:name_id = 1651 ; | : CVMesh2_face_y:name_id = 1651 ; | ||
: CVMesh2_face_y:bounds = "CVMesh2_face_y_bnd" ; | : CVMesh2_face_y:bounds = "CVMesh2_face_y_bnd" ; | ||
: CVMesh2_face_y:standard_name = " | : CVMesh2_face_y:standard_name = "[[projection]]_y_coordinate" ; | ||
Comment: | Comment: | ||
Line 123: | Line 123: | ||
: CVMesh2_exch_x:units = "m" ; | : CVMesh2_exch_x:units = "m" ; | ||
: CVMesh2_exch_x:name_id = 1650 ; | : CVMesh2_exch_x:name_id = 1650 ; | ||
: CVMesh2_exch_x:standard_name = " | : CVMesh2_exch_x:standard_name = "[[projection]]_x_coordinate" ; | ||
double CVMesh2_exch_y(nCVMesh2_exch) ; | double CVMesh2_exch_y(nCVMesh2_exch) ; | ||
Line 129: | Line 129: | ||
: CVMesh2_exch_y:units = "m" ; | : CVMesh2_exch_y:units = "m" ; | ||
: CVMesh2_exch_y:name_id = 1651 ; | : CVMesh2_exch_y:name_id = 1651 ; | ||
: CVMesh2_exch_y:standard_name = " | : CVMesh2_exch_y:standard_name = "[[projection]]_y_coordinate" ; | ||
Comment: | Comment: | ||
Line 158: | Line 158: | ||
computational grid without subgrid details. See [[NetCDF unstructured grid#Geographic coordinates|NetCDF unstructured grid "geographic coordinates"]]. | computational grid without subgrid details. See [[NetCDF unstructured grid#Geographic coordinates|NetCDF unstructured grid "geographic coordinates"]]. | ||
==Geographic coordinates of the | ==Geographic coordinates of the aggregational grid== | ||
===Nodes=== | ===Nodes=== | ||
Line 267: | Line 267: | ||
: CVMesh2_face_nodes:cf_role = "face_node_connectivity" ; | : CVMesh2_face_nodes:cf_role = "face_node_connectivity" ; | ||
: CVMesh2_face_nodes:_FillValue = -999 ; | : CVMesh2_face_nodes:_FillValue = -999 ; | ||
: CVMesh2_face_nodes: | : CVMesh2_face_nodes:start_[[index]] = 0 ; | ||
Comment: | Comment: | ||
Line 281: | Line 281: | ||
: CVMesh2_face_edges:cf_role = "face_edge_connectivity" ; | : CVMesh2_face_edges:cf_role = "face_edge_connectivity" ; | ||
: CVMesh2_face_edges:_FillValue = -999 ; | : CVMesh2_face_edges:_FillValue = -999 ; | ||
: CVMesh2_face_edges: | : CVMesh2_face_edges:start_[[index]] = 0 ; | ||
Comment: | Comment: | ||
Line 295: | Line 295: | ||
: CVMesh2_face_exchs:cf_role = "<font color=darkorange>face_exch_connectivity</font>" ; | : CVMesh2_face_exchs:cf_role = "<font color=darkorange>face_exch_connectivity</font>" ; | ||
: CVMesh2_face_exchs:_FillValue = -999 ; | : CVMesh2_face_exchs:_FillValue = -999 ; | ||
: CVMesh2_face_exchs: | : CVMesh2_face_exchs:start_[[index]] = 0 ; | ||
Comment: | Comment: | ||
Line 308: | Line 308: | ||
: CVMesh2_edge_nodes:long_name = "list of nodes for each edge" ; | : CVMesh2_edge_nodes:long_name = "list of nodes for each edge" ; | ||
: CVMesh2_edge_nodes:cf_role = "edge_node_connectivity" ; | : CVMesh2_edge_nodes:cf_role = "edge_node_connectivity" ; | ||
: CVMesh2_edge_nodes: | : CVMesh2_edge_nodes:start_[[index]] = 0 ; | ||
Comment: | Comment: | ||
# Node numbers (of the aggregational grid) for all edges (of the aggregational grid). | # Node numbers (of the aggregational grid) for all edges (of the aggregational grid). | ||
# | # First and second node represent start and end point of an edge. | ||
====Exchange-edge connectivity==== | ====Exchange-edge connectivity==== | ||
Line 320: | Line 320: | ||
: CVMesh2_exch_edges:cf_role = "<font color=darkorange>exch_edge_connectivity</font>" ; | : CVMesh2_exch_edges:cf_role = "<font color=darkorange>exch_edge_connectivity</font>" ; | ||
: CVMesh2_exch_edges:_FillValue = -999 ; | : CVMesh2_exch_edges:_FillValue = -999 ; | ||
: CVMesh2_exch_edges: | : CVMesh2_exch_edges:start_[[index]] = 0 ; | ||
Comment: | Comment: | ||
# Edge numbers (of the aggregational grid | # Edge numbers (of the aggregational grid) for all exchanges. | ||
# Edges are unsorted for each exchange. | # Edges are unsorted for each exchange. Exchanges may have gaps. | ||
# Missing edges should be indicated using _FillValue. | # Missing edges should be indicated using _FillValue. | ||
# Missing edges must be the last entries for each exchange. | # Missing edges must be the last entries for each exchange. | ||
Line 334: | Line 334: | ||
: CVMesh2_edge_faces:cf_role = "<font color=darkorange>edge_face_connectivity</font>" ; | : CVMesh2_edge_faces:cf_role = "<font color=darkorange>edge_face_connectivity</font>" ; | ||
: CVMesh2_edge_faces:_FillValue = -999 ; | : CVMesh2_edge_faces:_FillValue = -999 ; | ||
: CVMesh2_edge_faces: | : CVMesh2_edge_faces:start_[[index]] = 0 ; | ||
Comment: | Comment: | ||
Line 346: | Line 346: | ||
: CVMesh2_exch_faces:cf_role = "<font color=darkorange>exch_face_connectivity</font>" ; | : CVMesh2_exch_faces:cf_role = "<font color=darkorange>exch_face_connectivity</font>" ; | ||
: CVMesh2_exch_faces:_FillValue = -999 ; | : CVMesh2_exch_faces:_FillValue = -999 ; | ||
: CVMesh2_exch_faces: | : CVMesh2_exch_faces:start_[[index]] = 0 ; | ||
Comment: | Comment: | ||
Line 421: | Line 421: | ||
: CVMesh2_node_contact:<font color=darkorange>contact_meshes</font> = "Mesh2 CVMesh2" ; | : CVMesh2_node_contact:<font color=darkorange>contact_meshes</font> = "Mesh2 CVMesh2" ; | ||
: CVMesh2_node_contact:<font color=darkorange>contact_type</font> = "node node" ; | : CVMesh2_node_contact:<font color=darkorange>contact_type</font> = "node node" ; | ||
: CVMesh2_node_contact: | : CVMesh2_node_contact:start_[[index]] = 0 ; | ||
Comment: | Comment: | ||
Line 439: | Line 439: | ||
: CVMesh2_edge_contact:<font color=darkorange>contact_meshes</font> = "Mesh2 CVMesh2" ; | : CVMesh2_edge_contact:<font color=darkorange>contact_meshes</font> = "Mesh2 CVMesh2" ; | ||
: CVMesh2_edge_contact:<font color=darkorange>contact_type</font> = "edge edge" ; | : CVMesh2_edge_contact:<font color=darkorange>contact_type</font> = "edge edge" ; | ||
: CVMesh2_edge_contact: | : CVMesh2_edge_contact:start_[[index]] = 0 ; | ||
Comment: | Comment: | ||
Line 457: | Line 457: | ||
: CVMesh2_face_contact:<font color=darkorange>contact_meshes</font> = "Mesh2 CVMesh2" ; | : CVMesh2_face_contact:<font color=darkorange>contact_meshes</font> = "Mesh2 CVMesh2" ; | ||
: CVMesh2_face_contact:<font color=darkorange>contact_type</font> = "face face" ; | : CVMesh2_face_contact:<font color=darkorange>contact_type</font> = "face face" ; | ||
: CVMesh2_face_contact: | : CVMesh2_face_contact:start_[[index]] = 0 ; | ||
Comment: | Comment: | ||
Line 466: | Line 466: | ||
# In the opposite direction each control volume may reference several computational faces. | # In the opposite direction each control volume may reference several computational faces. | ||
=== Contact list | === Contact list edge <--> exchange=== | ||
int CVMesh2_edge_exch_contact(nMesh2_edge, two) ; | int CVMesh2_edge_exch_contact(nMesh2_edge, two) ; | ||
Line 476: | Line 476: | ||
: CVMesh2_edge_exch_contact:<font color=darkorange>contact_meshes</font> = "Mesh2 CVMesh2" ; | : CVMesh2_edge_exch_contact:<font color=darkorange>contact_meshes</font> = "Mesh2 CVMesh2" ; | ||
: CVMesh2_edge_exch_contact:<font color=darkorange>contact_type</font> = "edge <font color=darkorange>exch</font>" ; | : CVMesh2_edge_exch_contact:<font color=darkorange>contact_type</font> = "edge <font color=darkorange>exch</font>" ; | ||
: CVMesh2_edge_exch_contact: | : CVMesh2_edge_exch_contact:start_[[index]] = 0 ; | ||
Comment: | Comment: |
Latest revision as of 09:48, 21 October 2022
Introduction
A grid consisting of arbitray faces (polygons, triangles and quadrilaterals) is described. In addition an aggregated grid is available. Typical components of an aggregated grid are:
- Control volume: several connected faces (polygons) mold a control volume.
- Exchange: area between two adjacent control volumes or at open boundaries (contact with the environment). Exchanges are buildt out of several edges of the computational grid, which are not necessarily all connected. Several edges (with more than two nodes) can form an exchange.
All deviations from UGRID Conventions are subsequently displayed in darkorange color.
The description of an aggregated grid shows many similarities with NetCDF unstructured grid with subgrid.
Program NCAGGREGATE can be used to aggregate data defined on a computational grid.
Computational grid
The description is almost fully identical with NetCDF unstructured grid for an unstructured grid without subgrid. Only those variables are subsequently presented which deviate to some extent from their known definition.
Aggregational grid
All variables required for the aggregational grid are subsequently listed.
Combined mesh (Parent Mesh)
Computational mesh and aggregational mesh are combined to form the parent mesh. In this context additional contact variables are required. They describe the relationship or ccnnectivity between the two grids. This concept (parent mesh, contact variables) is esentially based on ideas worked out by Bert Jagers (Deltares) (see Deltares Conventions).
File Contents
Dimensions
Computational grid
- nMesh2_node : number of nodes
- nMesh2_edge : number of edges
- nMesh2_face : number of faces (polygons)
- nMaxMesh2_face_nodes : maximum number of nodes/edges in a face (polygon)
Aggregational grid
- nCVMesh2_node : number of nodes for the aggregational grid
- nCVMesh2_edge : number of edges for the aggregational grid
- nCVMesh2_face : number of faces (control volumes) for the aggregational grid
- nCVMaxMesh2_face_nodes : maximum number of nodes (or egdes) for a single face (control volume)
- nCVMesh2_exch : number of exchanges
- nCVMaxMesh2_face_exchs : maximum number of exchanges for a single face (control volume)
- nCVMaxMesh2_exch_edges : maximum number of exchanges for a single edge (exchange)
Constants
- two : constant ( = 2 ).
Local coordinates
The definition for the local coordinates of the computational grid is identical to the description given for an unstructured computational grid without subgrid details. See NetCDF unstructured grid "local coordinates".
Local coordinates of the aggregational grid
Nodes
double CVMesh2_node_x(nCVMesh2_node) ;
- CVMesh2_node_x:long_name = "x-coordinate of 2D aggregational grid nodes" ;
- CVMesh2_node_x:units = "m" ;
- CVMesh2_node_x:name_id = 1650 ;
- CVMesh2_node_x:standard_name = "projection_x_coordinate" ;
double CVMesh2_node_y(nCVMesh2_node) ;
- CVMesh2_node_y:long_name = "y-coordinate of 2D aggregational grid nodes" ;
- CVMesh2_node_y:units = "m" ;
- CVMesh2_node_y:name_id = 1651 ;
- CVMesh2_node_y:standard_name = "projection_y_coordinate" ;
Comment:
- "name_id" corresponds to the so-called PHYDEF-Code of variables which is used internally at BAW.
Edges
double CVMesh2_edge_x(nCVMesh2_edge) ;
- CVMesh2_edge_x:long_name = "x-coordinate of 2D aggregational grid edges" ;
- CVMesh2_edge_x:units = "m" ;
- CVMesh2_edge_x:name_id = 1650 ;
- CVMesh2_edge_x:bounds = "CVMesh2_edge_x_bnd" ;
- CVMesh2_edge_x:standard_name = "projection_x_coordinate" ;
double CVMesh2_edge_y(nCVMesh2_edge) ;
- CVMesh2_edge_y:long_name = "y-coordinate of 2D aggregational grid edges" ;
- CVMesh2_edge_y:units = "m" ;
- CVMesh2_edge_y:name_id = 1651 ;
- CVMesh2_edge_y:bounds = "CVMesh2_edge_y_bnd" ;
- CVMesh2_edge_y:standard_name = "projection_y_coordinate" ;
Comment:
- "name_id" corresponds to the so-called PHYDEF-Code of variables which is used internally at BAW.
Faces (control volumes)
double CVMesh2_face_x(nCVMesh2_face) ;
- CVMesh2_face_x:long_name = "x-coordinate of 2D aggregational grid faces (control volumes)" ;
- CVMesh2_face_x:units = "m" ;
- CVMesh2_face_x:name_id = 1650 ;
- CVMesh2_face_x:bounds = "CVMesh2_face_x_bnd" ;
- CVMesh2_face_x:standard_name = "projection_x_coordinate" ;
double CVMesh2_face_y(nCVMesh2_face) ;
- CVMesh2_face_y:long_name = "y-coordinate of 2D aggregational grid faces (control volumes)" ;
- CVMesh2_face_y:units = "m" ;
- CVMesh2_face_y:name_id = 1651 ;
- CVMesh2_face_y:bounds = "CVMesh2_face_y_bnd" ;
- CVMesh2_face_y:standard_name = "projection_y_coordinate" ;
Comment:
- "name_id" corresponds to the so-called PHYDEF-Code of variables which is used internally at BAW.
- This coordinate defines an arbitrary point within each control volume.
Exchanges
double CVMesh2_exch_x(nCVMesh2_exch) ;
- CVMesh2_exch_x:long_name = "x-coordinate of 2D aggregational grid exchanges" ;
- CVMesh2_exch_x:units = "m" ;
- CVMesh2_exch_x:name_id = 1650 ;
- CVMesh2_exch_x:standard_name = "projection_x_coordinate" ;
double CVMesh2_exch_y(nCVMesh2_exch) ;
- CVMesh2_exch_y:long_name = "y-coordinate of 2D aggregational grid exchanges" ;
- CVMesh2_exch_y:units = "m" ;
- CVMesh2_exch_y:name_id = 1651 ;
- CVMesh2_exch_y:standard_name = "projection_y_coordinate" ;
Comment:
- "name_id" corresponds to the so-called PHYDEF-Code of variables which is used internally at BAW.
- This coordinate defines an arbitray point along each exchange. E. g. the center of an edge belonging to the exchange.
Bounds for edges
double CVMesh2_edge_x_bnd(nCVMesh2_edge, two) ; \\ no metadata required
double CVMesh2_edge_y_bnd(nCVMesh2_edge, two) ; \\ no metadata required
Bounds for faces (control volume)
double CVMesh2_face_x_bnd(nCVMesh2_face, nCVMaxMesh2_face_nodes) ; \\ _FillValue required, not all nCVMaxMesh2_face_nodes must be present in one face (control volume)
- CVMesh2_face_x_bnd:_FillValue = 1.e+31 ;
double CVMesh2_face_y_bnd(nCVMesh2_face, nCVMaxMesh2_face_nodes) ; \\ _FillValue required, not all nCVMaxMesh2_face_nodes must be present in one face (control volume)
- CVMesh2_face_y_bnd:_FillValue = 1.e+31 ;
Comment:
- Coordinates of faces (control volumes) must be prescribed in counter-clockwise orientation..
- Invalid coordinates are allowed to be present in the last position(s) in case there are less than nCVMaxMesh2_face_nodes nodes in a face (control volume).
Geographic coordinates
The definition for the geographic coordinates of the computational grid is identical to the description given for an unstructured computational grid without subgrid details. See NetCDF unstructured grid "geographic coordinates".
Geographic coordinates of the aggregational grid
Nodes
double CVMesh2_node_lon(nCVMesh2_node) ;
- CVMesh2_node_lon:long_name = "longitude of 2D aggregational grid nodes" ;
- CVMesh2_node_lon:units = "degrees_E" ;
- CVMesh2_node_lon:name_id = 1653 ;
- CVMesh2_node_lon:standard_name = "longitude" ;
double CVMesh2_node_lat(nCVMesh2_node) ;
- CVMesh2_node_lat:long_name = "lotitude of 2D aggregational grid nodes" ;
- CVMesh2_node_lat:units = "degrees_N" ;
- CVMesh2_node_lat:name_id = 1652 ;
- CVMesh2_node_lat:standard_name = "latitude" ;
Comment:
- "name_id" corresponds to the so-called PHYDEF-Code of variables which is used internally at BAW.
Edges
double CVMesh2_edge_lon(nCVMesh2_edge) ;
- CVMesh2_edge_lon:long_name = "longitude of 2D aggregational grid edges" ;
- CVMesh2_edge_lon:units = "degrees_E" ;
- CVMesh2_edge_lon:name_id = 1653 ;
- CVMesh2_edge_lon:bounds = "CVMesh2_edge_lon_bnd" ;
- CVMesh2_edge_lon:standard_name = "longitude" ;
double CVMesh2_edge_lat(nCVMesh2_edge) ;
- CVMesh2_edge_lat:long_name = "latitude of 2D aggregational grid edges" ;
- CVMesh2_edge_lat:units = "degrees_N" ;
- CVMesh2_edge_lat:name_id = 1652 ;
- CVMesh2_edge_lat:bounds = "CVMesh2_edge_lat_bnd" ;
- CVMesh2_edge_lat:standard_name = "latitude" ;
Comment:
- "name_id" corresponds to the so-called PHYDEF-Code of variables which is used internally at BAW.
Faces (control volumes)
double CVMesh2_face_lon(nCVMesh2_face) ;
- CVMesh2_face_lon:long_name = "longitude of 2D aggregational grid faces" ;
- CVMesh2_face_lon:units = "degrees_E" ;
- CVMesh2_face_lon:name_id = 1653 ;
- CVMesh2_face_lon:bounds = "CVMesh2_face_lon_bnd" ;
- CVMesh2_face_lon:standard_name = "longitude" ;
double CVMesh2_face_lat(nCVMesh2_face) ;
- CVMesh2_face_lat:long_name = "latitude of 2D aggregational grid faces" ;
- CVMesh2_face_lat:units = "degrees_N" ;
- CVMesh2_face_lat:name_id = 1652 ;
- CVMesh2_face_lat:bounds = "CVMesh2_face_lat_bnd" ;
- CVMesh2_face_lat:standard_name = "latitude" ;
Comment:
- "name_id" corresponds to the so-called PHYDEF-Code of variables which is used internally at BAW.
- This coordinate defines an arbitrary point within each control volume.
Exchanges
double CVMesh2_exch_lon(nCVMesh2_exch) ;
- CVMesh2_exch_lon:long_name = "longitude of 2D aggregational grid exchanges" ;
- CVMesh2_exch_lon:units = "degrees_E" ;
- CVMesh2_exch_lon:name_id = 1653 ;
- CVMesh2_exch_lon:standard_name = "longitude" ;
double CVMesh2_exch_lat(nCVMesh2_exch) ;
- CVMesh2_exch_lat:long_name = "latitude of 2D aggregational grid exchanges" ;
- CVMesh2_exch_lat:units = "degrees_N" ;
- CVMesh2_exch_lat:name_id = 1652 ;
- CVMesh2_exch_lat:standard_name = "latitude" ;
Comment:
- "name_id" corresponds to the so-called PHYDEF-Code of variables which is used internally at BAW.
- This coordinate defines an arbitray point along each exchange. E. g. the center of an edge belonging to the exchange.
Bounds for edges
double CVMesh2_edge_lon_bnd(nCVMesh2_edge, two) ; \\ no metadata required
double CVMesh2_edge_lat_bnd(nCVMesh2_edge, two) ; \\ no metadata required
Bounds for faces (control volumes)
double CVMesh2_face_lon_bnd(nCVMesh2_face, nCVMaxMesh2_face_nodes) ; \\ _FillValue required, not all nCVMaxMesh2_face_nodes must be present in one face (control volume)
- CVMesh2_face_lon_bnd:_FillValue = 1.e+31 ;
double CVMesh2_face_lat_bnd(nCVMesh2_face, nCVMaxMesh2_face_nodes) ; \\ _FillValue required, not all nCVMaxMesh2_face_nodes must be present in one face (control volume)
- CVMesh2_face_lat_bnd:_FillValue = 1.e+31 ;
Comment:
- Coordinates of faces (control volumes) must be prescribed in counter-clockwise orientation.
- Invalid coordinates are allowed to be present in the last position(s) in case there are less than nCVMaxMesh2_face_nodes nodes in a face (control volume).
Connectivities
Computational grid
Connectivity tables for the computational grid are identical to those used for an unstructured grid without subgrid. See NetCDF unstructured grid "Connectivities".
Aggregational grid
Control-volume-node connectivity
int CVMesh2_face_nodes(nCVMesh2_face, nCVMaxMesh2_face_nodes) ;
- CVMesh2_face_nodes:long_name = "list of nodes for all control volumes" ;
- CVMesh2_face_nodes:cf_role = "face_node_connectivity" ;
- CVMesh2_face_nodes:_FillValue = -999 ;
- CVMesh2_face_nodes:start_index = 0 ;
Comment:
- Node numbers (of the aggregational grid) for each control volume.
- Nodes must be prescribed in counter-clockwise orientation.
- Missing nodes should be indicated using _FillValue.
- Missing nodes must be the last entries for each control volume.
Control-volume-edge connectivity
int CVMesh2_face_edges(nCVMesh2_face, nCVMaxMesh2_face_nodes) ;
- CVMesh2_face_edges:long_name = "list of edges for all control volumes" ;
- CVMesh2_face_edges:cf_role = "face_edge_connectivity" ;
- CVMesh2_face_edges:_FillValue = -999 ;
- CVMesh2_face_edges:start_index = 0 ;
Comment:
- Edge numbers (of the aggregational grid) for each control volume.
- Edges must be prescribed in counter-clockwise orientation.
- Missing edges should be indicated using _FillValue.
- Missing edges must be the last entries for each control volume.
Control-volume-exchange connectivity
int CVMesh2_face_exchs(nCVMesh2_face, nCVMaxMesh2_face_exchs) ;
- CVMesh2_face_exchs:long_name = "list of exchanges for all control volumes" ;
- CVMesh2_face_exchs:cf_role = "face_exch_connectivity" ;
- CVMesh2_face_exchs:_FillValue = -999 ;
- CVMesh2_face_exchs:start_index = 0 ;
Comment:
- Exchange numbers for each control volume.
- Exchanges must be prescribed in counter-clockwise orientation.
- Missing exchanges should be indicated using _FillValue.
- Missing exchanges must be the last entries for each control volume.
Edge-node connectivity
int CVMesh2_edge_nodes(nCVMesh2_edge, two) ;
- CVMesh2_edge_nodes:long_name = "list of nodes for each edge" ;
- CVMesh2_edge_nodes:cf_role = "edge_node_connectivity" ;
- CVMesh2_edge_nodes:start_index = 0 ;
Comment:
- Node numbers (of the aggregational grid) for all edges (of the aggregational grid).
- First and second node represent start and end point of an edge.
Exchange-edge connectivity
int CVMesh2_exch_edges(nCVMesh2_exch, nCVMaxMesh2_exch_edges) ;
- CVMesh2_exch_edges:long_name = "list of edges (unsorted) for all exchanges" ;
- CVMesh2_exch_edges:cf_role = "exch_edge_connectivity" ;
- CVMesh2_exch_edges:_FillValue = -999 ;
- CVMesh2_exch_edges:start_index = 0 ;
Comment:
- Edge numbers (of the aggregational grid) for all exchanges.
- Edges are unsorted for each exchange. Exchanges may have gaps.
- Missing edges should be indicated using _FillValue.
- Missing edges must be the last entries for each exchange.
Edge-control-volume connectivity
int CVMesh2_edge_faces(nCVMesh2_edge, two) ;
- CVMesh2_edge_faces:long_name = "list of (neighbor) control volumes for each edge" ;
- CVMesh2_edge_faces:cf_role = "edge_face_connectivity" ;
- CVMesh2_edge_faces:_FillValue = -999 ;
- CVMesh2_edge_faces:start_index = 0 ;
Comment:
- Control volume numbers for all edges (of the aggregational grid).
- Along edges (of the aggregational grid) missing neigbor control volumes are allowed; _FillValue is used to indicate missing neighbor.
Exchange-control-volume connectivity
int CVMesh2_exch_faces(nCVMesh2_exch, two) ;
- CVMesh2_exch_faces:long_name = "list of (neighbor) control volumes for each exchange" ;
- CVMesh2_exch_faces:cf_role = "exch_face_connectivity" ;
- CVMesh2_exch_faces:_FillValue = -999 ;
- CVMesh2_exch_faces:start_index = 0 ;
Comment:
- Control volume numbers for all exchanges (of the aggregational grid).
- For exchanges missing neigbor control volumes are allowed; _FillValue is used to indicate missing neighbor.
Topology
Computational grid
int Mesh2 ;
- Mesh2:long_name = "computational grid" ;
- Mesh2:cf_role = "mesh_topology" ; \\ UGRID required
- Mesh2:topology_dimension = 2 ; \\ UGRID required
- Mesh2:node_coordinates = "Mesh2_node_x Mesh2_node_y Mesh2_node_lon Mesh2_node_lat" ; \\ UGRID required
- Mesh2:edge_coordinates = "Mesh2_edge_x Mesh2_edge_y Mesh2_edge_lon Mesh2_edge_lat" ; \\ UGRID optionally required for data at edges
- Mesh2:face_coordinates = "Mesh2_face_x Mesh2_face_y Mesh2_face_lon Mesh2_face_lat" ; \\ UGRID optionally required for data at faces
- Mesh2:face_node_connectivity = "Mesh2_face_nodes" ; \\ UGRID required
- Mesh2:face_edge_connectivity = "Mesh2_face_edges" ; \\ UGRID optional
- Mesh2:edge_node_connectivity = "Mesh2_edge_nodes" ; \\ UGRID optional
- Mesh2:edge_face_connectivity = "Mesh2_edge_faces" ;
- Mesh2:parent_mesh = "Combined_Mesh2_and_CVMesh" ;
Comment:
- Not all connectivities must be available because some of them contain redundant information. But be friendly to the end-user and provide as much information as possible.
- Attributes face_dimension and edge_dimension from 2D flexible mesh (mixed triangles, quadrilaterals, etc.) topology are not supported by BAW. These are required only in case the dimension ordering is nonstandard in any of the connectivity variables for faces and edges, respectively.
- Attribute "parent_mesh" refers to the combined mesh (parent mesh). The computational grid is the first component of the combined grid.
Aggregational grid
int CVMesh2 ;
- CVMesh2:long_name = "aggregational grid" ;
- CVMesh2:cf_role = "mesh_topology" ;
- CVMesh2:topology_dimension = 2 ;
- CVMesh2:node_coordinates = "CVMesh2_node_x CVMesh2_node_y CVMesh2_node_lon CVMesh2_node_lat" ;
- CVMesh2:edge_coordinates = "CVMesh2_edge_x CVMesh2_edge_y CVMesh2_edge_lon CVMesh2_edge_lat" ;
- CVMesh2:face_coordinates = "CVMesh2_face_x CVMesh2_face_y CVMesh2_face_lon CVMesh2_face_lat" ;
- CVMesh2:exch_coordinates = "CVMesh2_exch_x CVMesh2_exch_y CVMesh2_exch_lon CVMesh2_exch_lat" ;
- CVMesh2:face_node_connectivity = "CVMesh2_face_nodes" ;
- CVMesh2:face_edge_connectivity = "CVMesh2_face_edges" ;
- CVMesh2:edge_node_connectivity = "CVMesh2_edge_nodes" ;
- CVMesh2:edge_face_connectivity = "CVMesh2_edge_faces" ;
- CVMesh2:face_exch_connectivity = "CVMesh2_face_exchs" ;
- CVMesh2:exch_edge_connectivity = "CVMesh2_exch_edges" ;
- CVMesh2:exch_face_connectivity = "CVMesh2_exch_faces" ;
- CVMesh2:parent_mesh = "Combined_Mesh_and_CVMesh" ;
Comment:
- Attribute "parent_mesh" refers to the combined mesh (parent mesh). The aggregational grid is the second component of the combined grid.
Combined grid
int Combined_Mesh_and_CVMesh ;
- Combined_Mesh_and_CVMesh:long_name = "Berechnungs- und Aggregations-Gitter" ;
- Combined_Mesh_and_CVMesh:cf_role = "mesh_topology" ;
- Combined_Mesh_and_CVMesh:sub_meshes = "Mesh2 CVMesh2" ;
- Combined_Mesh_and_CVMesh:mesh_contacts = "CVMesh2_node_contact CVMesh2_edge_contact CVMesh2_face_contact CVMesh2_edge_exch_contact" ;
Comment:
- The Parent Mesh concept is so far not supported by the UGRID Conventions.
- Attribute "sub_meshes" refers to the two meshes (computational grid, aggregational grid) which constitute the Parent Mesh.
- Attribute "mesh_contacts" refers to variables (contact lists) which describe the inter-relation between the child meshes..
Contact lists
Contact list nodes <-> aggregational-grid-nodes
int CVMesh2_node_contact(nMesh2_node, two) ;
- CVMesh2_node_contact:long_name = "contact list between computational grid nodes and aggregational grid nodes" ;
- CVMesh2_node_contact:cf_role = "mesh_topology_contact" ;
- CVMesh2_node_contact:_FillValue = -999 ;
- CVMesh2_node_contact:coordinates = "Mesh2_node_x Mesh2_node_y Mesh2_node_lon Mesh2_node_lat" ;
- CVMesh2_node_contact:grid_mapping = "Mesh2_crs" ;
- CVMesh2_node_contact:contact_meshes = "Mesh2 CVMesh2" ;
- CVMesh2_node_contact:contact_type = "node node" ;
- CVMesh2_node_contact:start_index = 0 ;
Comment:
- The mesh topology contact concept is so far not supported by the UGRID Conventions.
- Indices start with zero..
- Each node of the computational grid refers to a node of the aggregational grid.
- Nodes of the computational grid with missing partner in the aggregational grid use _FillValue.
Contact list edges <-> aggregational-grid-edges
int CVMesh2_edge_contact(nMesh2_edge, two) ;
- CVMesh2_edge_contact:long_name = "contact list between computational grid edges and aggregational grid edges" ;
- CVMesh2_edge_contact:cf_role = "mesh_topology_contact" ;
- CVMesh2_edge_contact:_FillValue = -999 ;
- CVMesh2_edge_contact:coordinates = "Mesh2_edge_x Mesh2_edge_y Mesh2_edge_lon Mesh2_edge_lat" ;
- CVMesh2_edge_contact:grid_mapping = "Mesh2_crs" ;
- CVMesh2_edge_contact:contact_meshes = "Mesh2 CVMesh2" ;
- CVMesh2_edge_contact:contact_type = "edge edge" ;
- CVMesh2_edge_contact:start_index = 0 ;
Comment:
- The mesh topology contact concept is so far not supported by the UGRID Conventions.
- Indices start with zero..
- Each edge of the computational grid refers to an edge of the aggregational grid.
- Edges of the computational grid with missing partner in the aggregational grid use _FillValue.
Contact list face <--> control volume
int CVMesh2_face_contact(nMesh2_face, two) ;
- CVMesh2_face_contact:long_name = "contact list between computational grid faces and aggregational control volumes" ;
- CVMesh2_face_contact:cf_role = "mesh_topology_contact" ;
- CVMesh2_face_contact:_FillValue = -999 ;
- CVMesh2_face_contact:coordinates = "Mesh2_face_x Mesh2_face_y Mesh2_face_lon Mesh2_face_lat" ;
- CVMesh2_face_contact:grid_mapping = "Mesh2_crs" ;
- CVMesh2_face_contact:contact_meshes = "Mesh2 CVMesh2" ;
- CVMesh2_face_contact:contact_type = "face face" ;
- CVMesh2_face_contact:start_index = 0 ;
Comment:
- The mesh topology contact concept is so far not supported by the UGRID Conventions.
- Indices start with zero..
- Each face of the computational grid refers to a face (control volume) of the aggregational grid.
- Faces of the computational grid with missing partner in the aggregational grid use _FillValue.
- In the opposite direction each control volume may reference several computational faces.
Contact list edge <--> exchange
int CVMesh2_edge_exch_contact(nMesh2_edge, two) ;
- CVMesh2_edge_exch_contact:long_name = "contact list between computational grid edges and aggregational exchanges" ;
- CVMesh2_edge_exch_contact:cf_role = "mesh_topology_contact" ;
- CVMesh2_edge_exch_contact:_FillValue = -999 ;
- CVMesh2_edge_exch_contact:coordinates = "Mesh2_edge_x Mesh2_edge_y Mesh2_edge_lon Mesh2_edge_lat" ;
- CVMesh2_edge_exch_contact:grid_mapping = "Mesh2_crs" ;
- CVMesh2_edge_exch_contact:contact_meshes = "Mesh2 CVMesh2" ;
- CVMesh2_edge_exch_contact:contact_type = "edge exch" ;
- CVMesh2_edge_exch_contact:start_index = 0 ;
Comment:
- The mesh topology contact concept is so far not supported by the UGRID Conventions.
- Indices start with zero..
- Each edge of the computational grid refers to an exchange of the aggregational grid.
- Edges of the computational grid with missing partner in the aggregational grid use _FillValue.
- In the opposite direction each exchange may reference several computational edges.
back to NetCDF