...
Example of a netCDF file with volumes defined the faces of the grid (e.g. Delft3D, D-FLOW Flexible Mesh, ROMS, Untrim):
Code Block |
---|
dimensions: nMesh2_nodenNodes = 412 ; // nNodes nMesh2_edgenEdges = 521 ; // nEdges nMesh2_facenFaces = 210 ; // nFaces nMesh2_face_linksmaxNumNodesPerFace = 15 ; // nFacePairs TwonSegments = 25 ; ThreenExchanges = 312 ; variables: // Mesh topology nBoundaries = integer Mesh24 ; maxLenBndName = 5 ; // as in 2DmaxNumExchangesPerBnd triangular= mesh2 example; integer Mesh2_face_nodes(nMesh2_face, Three) ; timeVol = 100 ; //nTimeSteps for volumes timeFlx = 99 ; //nTimeSteps asfor inexchanges 2D triangular mesh example Two = 2 integer Mesh2_edge_nodes(nMesh2_edge, Two) ;; variables: // Mesh topology integer Mesh ; // as in 2D triangular mesh example // Optional mesh topology variables Mesh:cf_role = "mesh_topology" ; integer Mesh2_face_edges(nMesh2_face, Three) ; Mesh:long_name = "Topology data of 2D unstructured mesh" ; // as in 2D triangular mesh example Mesh:dimension integer Mesh2_face_links(nMesh2_face_links, Two)= 2 ; // as in 2D triangular mesh example // Mesh node coordinates Mesh:node_coordinates = "Mesh_node_x Mesh_node_y" ; double Mesh2Mesh:face_node_x(nMesh2_node)_connectivity = "Mesh_face_nodes" ; // as in 2D triangular mesh example double Mesh2_node_y(nMesh2_node) ;Mesh:edge_node_connectivity = "Mesh_edge_nodes" ; // attribute required if variables will be defined on edges // as in 2D triangular mesh example // Optional mesh face and edge coordinate variables Mesh:edge_coordinates = "Mesh_edge_x Mesh_edge_y" ; // optional attribute (requires edge_node_connectivity) Mesh:face_coordinates double= Mesh2"Mesh_face_x(nMesh2 Mesh_face)_y" ; // optional attribute Mesh2_Mesh:face_x:standardedge_nameconnectivity = "longitudeMesh_face_edges" ; // optional attribute (requires edge_node_connectivity) Mesh2Mesh:face_face_x:long_nameconnectivity = "Mesh_face_links"Characteristics longitude; of// 2Doptional meshattribute triangle (e.g. circumcenter coordinate)." integer Mesh_face_nodes(nFaces, maxNumNodesPerFace) ; Mesh2Mesh_face_xnodes:unitscf_role = "degreesface_node_eastconnectivity" ; Mesh2Mesh_face_xnodes:boundslong_name = "Mesh2_face_xbndsMaps every face to its corner nodes." ; double Mesh2 Mesh_face_y(nMesh2_face)nodes:_FillValue = 999999 ; Mesh2Mesh_face_ynodes:standardstart_nameindex = "latitude"1 ; integer Mesh_edge_nodes(nEdges, Two) ; Mesh2_face_y:long_name = "Characteristics latitude of 2D mesh triangle (e.g. circumcenter coordinate). Mesh_edge_nodes:cf_role = "edge_node_connectivity" ; Mesh2Mesh_faceedge_ynodes:unitslong_name = "degrees_northMaps every edge to the two nodes that it connects." ; Mesh2Mesh_faceedge_ynodes:boundsstart_index = "Mesh2_face_ybnds" ;1 ; // Mesh node coordinates double Mesh2Mesh_facenode_xbnds(nMesh2_face,Threex(nNodes) ; Mesh2Mesh_facenode_xbndsx:standard_name = "longitude" ; Mesh2Mesh_facenode_xbndsx:long_name = "Longitude bounds of 2D mesh triangle (i.e. corner coordinates).nodes." ; Mesh2Mesh_facenode_xbndsx:units = "degrees_east" ; double Mesh2Mesh_facenode_ybnds(nMesh2_face,Threey(nNodes) ; Mesh2Mesh_facenode_ybndsy:standard_name = "latitude" ; Mesh2Mesh_facenode_ybndsy:long_name = "Latitude bounds of 2D mesh triangle (i.e. corner coordinates)nodes." ; Mesh2Mesh_facenode_ybndsy:units = "degrees_north" ; // Optional mesh face and edge coordinate double Mesh2_edge_x(nMesh2_edge) ; variables double Mesh_face_x(nFaces) ; // as in 2D triangular mesh example double Mesh2_edge_y(nMesh2_edge)Mesh_face_x:standard_name = "longitude" ; // as in 2D triangular mesh example // Volume and flux dataMesh_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; // Volume and flux data on original flow grid double Flow_volumes(timeVol, nFaces) ; Flow_volumes:long_name = "volumes" ; Flow_volumes:units = "m3" ; Flow_volumes:mesh = "Mesh" ; Flow_volumes:location = "face" ; Flow_volumes:coordinates = "Mesh_face_x Mesh_face_y" ; double Flow_fluxes(timeFlx, nEdges) ; Flow_fluxes:long_name = "flux across edge" ; Flow_fluxes:units = "m3 s-1" ; Flow_fluxes:mesh = "Mesh" Flow_fluxes:location = "edge" ; Flow_fluxes:coordinates = "Mesh_edge_x Mesh_edge_y" ; 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, double Mesh2_volumes(nMesh2_face) ; 1, -4, 5, Mesh2_volumes:long_name = "volumes" ; 1, 2, 1, 5, Mesh2_volumes:units = "m3" ; 4, 5, 5, -6, Mesh2_volumes:mesh = "Mesh2" ;-2, 2, 2, 3, Mesh2_volumes:location = "face" ; -3, 9, 3, 4, Mesh2_volumes:coordinates = "Mesh2_face_x Mesh2_face_y" ; 4, -7, -5, double Mesh2_fluxes(nMesh2_edge) 4 ; Bnd_name = Mesh2_fluxes:long_name = "flux across edge"west ; ", "north", "east ", Mesh2_fluxes:units = "m3 s-1south" ; Bnd_exch = 1, 7, Mesh2_fluxes:mesh = "Mesh2" 2, 0, 6, 11, Mesh2_fluxes:location = "edge" 9, 12 ; Flow_volumes = ... ; // data skipped Mesh2Flow_fluxes:coordinates = "Mesh2_edge_x Mesh2_edge_y" ; ... ; // data skipped |