...
Sketch of the flow (left) and delwaq (right) topologies used in the example below:
Code Block |
---|
dimensions: nNodes = 12 ; nEdges = 21 ; nFaces = 10 ; maxNumNodesPerFace = 5 ; nSegments = 5 ; nExchanges = 12 ; nBoundaries = 4 ; maxLenBndName = 5 ; maxNumExchangesPerBnd = 2 ; Two = 2 ; variables: // Mesh topology integer Mesh ; Mesh:cf_role = "mesh_topology" ; Mesh:long_name = "Topology data of 2D unstructured mesh" ; Mesh:dimension = 2 ; Mesh:node_coordinates = "Mesh_node_x Mesh_node_y" ; Mesh:face_node_connectivity = "Mesh_face_nodes" ; Mesh:edge_node_connectivity = "Mesh_edge_nodes" ; // attribute required if variables will be defined on edges Mesh:edge_coordinates = "Mesh_edge_x Mesh_edge_y" ; // optional attribute (requires edge_node_connectivity) Mesh:face_coordinates = "Mesh_face_x Mesh_face_y" ; // optional attribute Mesh:face_edge_connectivity = "Mesh_face_edges" ; // optional attribute (requires edge_node_connectivity) Mesh:face_face_connectivity = "Mesh_face_links" ; // optional attribute integer Mesh_face_nodes(nFaces, maxNumNodesPerFace) ; Mesh_face_nodes:cf_role = "face_node_connectivity" ; Mesh_face_nodes:long_name = "Maps every face to its corner nodes." ; Mesh_face_nodes:_FillValue = 999999 ; Mesh_face_nodes:start_index = 1 ; integer Mesh_edge_nodes(nEdges, Two) ; Mesh_edge_nodes:cf_role = "edge_node_connectivity" ; Mesh_edge_nodes:long_name = "Maps every edge to the two nodes that it connects." ; Mesh_edge_nodes:start_index = 1 ; // Mesh node coordinates double Mesh_node_x(nNodes) ; Mesh_node_x:standard_name = "longitude" ; Mesh_node_x:long_name = "Longitude of 2D mesh nodes." ; Mesh_node_x:units = "degrees_east" ; double Mesh_node_y(nNodes) ; Mesh_node_y:standard_name = "latitude" ; Mesh_node_y:long_name = "Latitude of 2D mesh nodes." ; Mesh_node_y:units = "degrees_north" ; // Optional mesh face and edge coordinate variables double Mesh_face_x(nFaces) ; Mesh_face_x:standard_name = "longitude" ; Mesh_face_x:long_name = "Characteristics longitude of 2D mesh face." ; Mesh_face_x:units = "degrees_east" ; Mesh_face_x:bounds = "Mesh_face_xbnds" ; double Mesh_face_y(nFaces) ; Mesh_face_y:standard_name = "latitude" ; Mesh_face_y:long_name = "Characteristics latitude of 2D mesh face." ; Mesh_face_y:units = "degrees_north" ; Mesh_face_y:bounds = "Mesh_face_ybnds" ; double Mesh_face_xbnds(nFaces,maxNumNodesPerFace) ; Mesh_face_xbnds:standard_name = "longitude" ; Mesh_face_xbnds:long_name = "Longitude bounds of 2D mesh face (i.e. corner coordinates)." ; Mesh_face_xbnds:units = "degrees_east" ; Mesh_face_xbnds:_FillValue = 9.9692099683868690E36; double Mesh_face_ybnds(nFaces,maxNumNodesPerFace) ; Mesh_face_ybnds:standard_name = "latitude" ; Mesh_face_ybnds:long_name = "Latitude bounds of 2D mesh face (i.e. corner coordinates)." ; Mesh_face_ybnds:units = "degrees_north" ; Mesh_face_ybnds:_FillValue = 9.9692099683868690E36; double Mesh_edge_x(nEdges) ; Mesh_edge_x:standard_name = "longitude" ; Mesh_edge_x:long_name = "Characteristic longitude of 2D mesh edge (e.g. midpoint of the edge)." ; Mesh_edge_x:units = "degrees_east" ; double Mesh_edge_y(nEdges) ; Mesh_edge_y:standard_name = "latitude" ; Mesh_edge_y:long_name = "Characteristic latitude of 2D mesh edge (e.g. midpoint of the edge)." ; Mesh_edge_y:units = "degrees_north" ; // bounds variables for edges skipped // Aggregation tables integer Dlwq_volaggr(nFaces) ; Dlwq_volaggr:delwaq_role = "segment_aggregation_table" ; Dlwq_volaggr:long_name = "delwaq segment number for each face (flow volume)" ; Dlwq_volaggr:mesh = "Mesh" ; Dlwq_volaggr:location = "face" ; Dlwq_volaggr:coordinates = "Mesh_face_x Mesh_face_y" ; Dlwq_volaggr:_FillValue = 0; integer Dlwq_flxaggr(nEdges) ; Dlwq_flxaggr:delwaq_role = "exchange_aggregation_table" ; Dlwq_flxaggr:long_name = "delwaq exchange number for each edge (flow boundary)" ; Dlwq_flxaggr:mesh = "Mesh" ; Dlwq_flxaggr:location = "edge" ; Dlwq_flxaggr:coordinates = "Mesh_edge_x Mesh_edge_y" ; Dlwq_flxaggr:_FillValue = 0; integer Dlwq_fromto(nExchanges,Two) ; Dlwq_fromto:delwaq_role = "from_to_segment_table" ; Dlwq_fromto:long_name = "delwaq from/to table" ; // Boundary information char Bnd_name(nBoundaries, maxLenBndName) ; Bnd_name:delwaq_role = "boundary_name" ; Bnd_name:long_name = "boundary name for the delwaq user interface" ; char Bnd_exch(nBoundaries, maxNumExchangesPerBnd) ; Bnd_exch:delwaq_role = "boundary_exchange_index" ; Bnd_exch:long_name = "indices of exchanges associated with the boundary" ; Bnd_exch:_FillValue = 0; data: Mesh = 0 ; // dummy Mesh_face_nodes = 1, 2, 5, 999999, 999999, 1, 5, 8, 999999, 999999, 5, 9, 8, 999999, 999999, 5, 6, 9, 999999, 999999, 2, 12, 5, 999999, 999999, 3, 4, 7, 6, 12, 6, 10, 9, 999999, 999999, 6, 7, 11, 10, 999999, 5, 12, 6, 999999, 999999, 2, 3, 12, 999999, 999999 ; Mesh_edge_nodes = 1, 2, 2, 3, 3, 4, 1, 5, 2, 5, 5, 6, 6, 12, 6, 8, 4, 7, 1, 8, 5, 8, 5, 9, 6, 9, 6, 10, 7, 11, 8, 9, 9, 10, 10, 11, 2, 12, 5, 12, 3, 12 ; Mesh_node_x = ... ; // data skipped Mesh_node_y = ... ; // data skipped Mesh_face_x = ... ; // data skipped Mesh_face_y = ... ; // data skipped Mesh_face_xbnds = ... ; // data skipped Mesh_face_ybnds = ... ; // data skipped Mesh_edge_x = ... ; // data skipped Mesh_edge_y = ... ; // data skipped Dlwq_volaggr = 1, 2, 2, 3, 1, 5, 3, 4, 1, 1 ; Dlwq_flxaggr = 1, 0, 2, 3, 0, 0, 4, 5, 6, 7, 0, 8, 0, 10, 11, 0, 9, 12, 0, 0, 4 ; Dlwq_fromto = -1, 1, -4, 5, 1, 2, 1, 5, 4, 5, 5, -6, -2, 2, 2, 3, -3, 9, 3, 4, 4, -7, -5, 4 ; Bnd_name = "west ", "north", "east ", "south" ; Bnd_exch = 1, 7, 2, 0, 6, 11, 9, 12 ; |
...