...
For the generation of the boundary conditions we'll need one additional bit of information from the flow model, namely the names of all open boundaries as well as their location and (negative) boundary segment numbers associated them.
Example Below you will find a first example of a netCDF file with all information that delwaq graphical user interface needs for a simple case with volumes defined on the faces of the grid (e.g. Delft3D, D-FLOW Flexible Mesh, ROMS, Untrim):ROMS, Untrim).
New items in this listing are the aggregation tables for volumes and exchanges, the from-to pointer table, and the boundary names and indices. These items are to be identified by means of the new attribute delwaq_role
. This attribute has been introduced in agreement with the cf_role
attribute for quantities that probably can't be standardized beyond the scope of delwaq.
delwaq_role | description |
---|---|
segment_aggregation_table | For every flow volume the segment number of the corresponding delwaq schematisation. Note that this array may have length nNodes (for node centred flow codes like CG finite element codes like Telemac) or nFaces (for face centred flow codes like D-Flow Flexible Mesh and Untrim). This table indicates which grid cells are included in the delwaq computation and which grid cells have been merged. It does not indicate numbers of open boundary segments. |
exchange_aggregation_table | For every flow volume interface the exchange number of the corresponding delwaq schematisation; generally it will have length nEdges. This table indicates where the various exchanges are located on the grid for both internal and open boundary exchanges. Although it may be used to derive the associated from and to segment numbers, it does not indicate the (from/to) order or does it indicate the numbers of the open boundary segments. This table may be derived using the topological information of the flow grid, the segment_aggregation_table and the from_to_segment_table. |
from_to_segment_table | This table is size nExchanges x 2: for every delwaq exchange it indicates the from (1st value) and to (2nd value) segment numbers. This table may be expanded to include "from-1" and "to+1" segment indices as well. Note that this table implicitly defines positive flow direction for all exchanges as well as the open boundary segment numbers. |
boundary_name | For every open boundary its name. Note that a boundary is defined as one or more exchanges. |
boundary_exchange_index | For every open boundary the numbers (and order) of the exchanges that are associated with that boundary. |
Code Block |
---|
dimensions: nNodes = 12 ; nEdges = 21 ; nFaces = 10 ; maxNumNodesPerFace = 5 ; nSegments = 5 ; nExchanges = 12 ; nBoundaries = 4 ; = 4 ; maxLenBndName = 5 ; maxNumExchangesPerBnd = 2 ; Two = 2 ; variables: // Mesh topology maxLenBndNameinteger =Mesh 5 ; maxNumExchangesPerBnd = 2 ; timeVolMesh:cf_role = 100"mesh_topology" ; //nTimeSteps for volumes timeFlx = 99 ; //nTimeSteps for exchanges Two = 2 ; variables: // Mesh topology Mesh:long_name = "Topology data of 2D unstructured mesh" ; integer Mesh:dimension = 2 ; Mesh:cfnode_rolecoordinates = "mesh_topologyMesh_node_x Mesh_node_y" ; Mesh:longface_node_nameconnectivity = "Topology data of 2D unstructured mesh" ; Mesh_face_nodes" ; Mesh:edge_node_connectivity = "Mesh_edge_nodes" ; // attribute required if variables will Mesh:dimensionbe =defined 2on ;edges Mesh:nodeedge_coordinates = "Mesh_nodeedge_x Mesh_nodeedge_y" ; // optional attribute (requires edge_node_connectivity) Mesh:face_node_connectivitycoordinates = "Mesh_face_x Mesh_face_nodesy" ; // optional attribute Mesh:face_edge_node_connectivity = "Mesh_edgeface_nodesedges" ; // attribute required if variables will be defined on edgesoptional attribute (requires edge_node_connectivity) Mesh:edgeface_face_coordinatesconnectivity = "Mesh_edge_x Mesh_edge_yface_links" ; // optional attribute (requires edge_node_connectivity) integer Mesh_face_nodes(nFaces, maxNumNodesPerFace) ; Mesh_face_nodes:facecf_coordinatesrole = "Mesh_face_x Mesh_face_y" ; // optional attributenode_connectivity" ; Mesh:_face_edgenodes:long_connectivityname = "Mesh_face_edges" ; // optional attribute (requires edge_node_connectivity)Maps every face to its corner nodes." ; Mesh:_face_facenodes:_connectivityFillValue = " 999999 ; Mesh_face_links" ; // optional attributenodes:start_index = 1 ; integer Mesh_faceedge_nodes(nFacesnEdges, maxNumNodesPerFaceTwo) ; Mesh_faceedge_nodes:cf_role = "faceedge_node_connectivity" ; Mesh_faceedge_nodes:long_name = "Maps every faceedge to itsthe cornertwo nodes that it connects." ; Mesh_faceedge_nodes:start_FillValueindex = 9999991 ; Mesh_face_nodes:start_index = 1 ; // Mesh node coordinates integerdouble Mesh_edgenode_nodes(nEdges, Twox(nNodes) ; Mesh_edgenode_nodesx:cfstandard_rolename = "edge_node_connectivitylongitude" ; Mesh_edgenode_nodesx:long_name = "MapsLongitude everyof edge2D tomesh the two nodes that it connects." ; Mesh_edgenode_nodesx:start_indexunits = 1"degrees_east" ; // Mesh node coordinates double Mesh_node_xy(nNodes) ; Mesh_node_xy:standard_name = "longitudelatitude" ; Mesh_node_xy:long_name = "LongitudeLatitude of 2D mesh nodes." ; Mesh_node_xy:units = "degrees_eastnorth" ; // Optional mesh face and edge coordinate variables double Mesh_nodeface_yx(nNodesnFaces) ; Mesh_nodeface_yx:standard_name = "latitudelongitude" ; Mesh_nodeface_yx:long_name = "LatitudeCharacteristics longitude of 2D mesh nodes. face." ; Mesh_face_x:units = "degrees_east" ; Mesh_nodeface_yx:unitsbounds = "degreesMesh_face_northxbnds" ; // Optional mesh face and edge coordinate variables double Mesh_face_xy(nFaces) ; Mesh_face_xy:standard_name = "longitudelatitude" ; Mesh_face_xy:long_name = "Characteristics longitudelatitude of 2D mesh face." ; Mesh_face_xy:units = "degrees_eastnorth" ; Mesh_face_xy:bounds = "Mesh_face_xbndsybnds" ; double Mesh_face_yxbnds(nFaces,maxNumNodesPerFace) ; Mesh_face_yxbnds:standard_name = "latitudelongitude" ; Mesh_face_yxbnds:long_name = "CharacteristicsLongitude latitudebounds of 2D mesh facemesh face (i.e. corner coordinates)." ; Mesh_face_yxbnds:units = "degrees_northeast" ; Mesh_face_yxbnds:bounds_FillValue = "Mesh_face_ybnds" 9.9692099683868690E36; double Mesh_face_xbndsybnds(nFaces,maxNumNodesPerFace) ; Mesh_face_xbndsybnds:standard_name = "longitudelatitude" ; Mesh_face_xbndsybnds:long_name = "LongitudeLatitude bounds of 2D mesh face (i.e. corner coordinates)." ; Mesh_face_xbndsybnds:units = "degrees_eastnorth" ; Mesh_face_xbndsybnds:_FillValue = 9.9692099683868690E36; double Mesh_edge_x(nEdges) ; Mesh_face_ybnds(nFaces,maxNumNodesPerFace)edge_x:standard_name = "longitude" ; Mesh_faceedge_ybndsx:standardlong_name = "latitudeCharacteristic longitude of 2D mesh edge (e.g. midpoint of the edge)." ; Mesh_faceedge_ybndsx:long_nameunits = "Latitude bounds of 2D mesh face (i.e. corner coordinates)."degrees_east" ; double Mesh_edge_y(nEdges) ; Mesh_faceedge_ybndsy:unitsstandard_name = "degrees_northlatitude" ; Mesh_faceedge_ybndsy:long_FillValuename = 9.9692099683868690E36; "Characteristic latitude of 2D mesh edge (e.g. midpoint of the edge)." ; double Mesh_edge_x(nEdges)y:units = "degrees_north" ; // bounds variables for edges skipped // Mesh_edge_x:standard_name = "longitude" ;Aggregation tables integer Dlwq_volaggr(nFaces) ; Mesh_edge_x:long_name = "Characteristic longitude of 2D mesh edge (e.g. midpoint of the edge). Dlwq_volaggr:delwaq_role = "segment_aggregation_table" ; MeshDlwq_edge_x:unitsvolaggr:long_name = "degrees_east" ; double Mesh_edge_y(nEdges)delwaq segment number for each face (flow volume)" ; MeshDlwq_edge_y:standard_namevolaggr:mesh = "latitudeMesh" ; Mesh_edge_y:long_name = "Characteristic latitude of 2D mesh edge (e.g. midpoint of the edge). Dlwq_volaggr:location = "face" ; MeshDlwq_edge_yvolaggr:unitscoordinates = "degrees_northMesh_face_x Mesh_face_y" ; // bounds variables for edges skipped // Aggregation tables Dlwq_volaggr:_FillValue = 0; integer Dlwq_volaggrflxaggr(nFacesnEdges) ; Dlwq_volaggrflxaggr:delwaq_role = "segmentexchange_aggregation_table" ; Dlwq_volaggrflxaggr:long_name = "delwaq segmentexchange number for each faceedge (flow volume) boundary)" ; Dlwq_flxaggr:mesh = "Mesh" ; Dlwq_flxaggr:location = "edge" ; Dlwq_volaggrflxaggr:meshcoordinates = "Mesh_edge_x Mesh_edge_y" ; Dlwq_volaggrflxaggr:location_FillValue = "face"0; integer Dlwq_fromto(nExchanges,Two) ; Dlwq_volaggrfromto:coordinatesdelwaq_role = "Meshfrom_faceto_x Mesh_face_ysegment_table" ; Dlwq_volaggrfromto:long_FillValuename = 0 "delwaq from/to table" ; integer Dlwq_flxaggr(nEdges) ; // Boundary information char Dlwq_flxaggr:delwaq_role = "exchange_aggregation_table" Bnd_name(nBoundaries, maxLenBndName) ; DlwqBnd_flxaggrname:longdelwaq_namerole = "delwaq exchange number for each edge (flow boundary)boundary_name" ; DlwqBnd_flxaggrname:meshlong_name = "Mesh "boundary ; name for the delwaq user interface" ; char Dlwq_flxaggr:location = "edge" Bnd_exch(nBoundaries, maxNumExchangesPerBnd) ; DlwqBnd_flxaggrexch:coordinatesdelwaq_role = "Meshboundary_edge_x Mesh_edge_yexchange_index" ; DlwqBnd_flxaggrexch:long_FillValuename = 0; = "indices of exchanges associated with integer Dlwq_fromto(nExchanges,Two)the boundary" ; DlwqBnd_fromtoexch:delwaq_roleFillValue = "from_to_segment_table" 0; data: Mesh = 0 Dlwq_fromto:long_name = "delwaq from/to table" ; ; // dummy Mesh_face_nodes = 1, 2, 5, 999999, 999999, // Boundary information 1, 5, char Bnd_name(nBoundaries8, maxLenBndName) ;999999, 999999, 5, 9, 8, 999999, Bnd_name:delwaq_role = "boundary_name" ; 999999, 5, 6, 9, 999999, 999999, Bnd_name:long_name = "boundary name for2, the12, delwaq user interface" ;5, 999999, 999999, char Bnd_exch(nBoundaries3, maxNumExchangesPerBnd) ; 4, 7, 6, 12, 6, Bnd_exch:delwaq_role = "boundary_exchange_index" ;10, 9, 999999, 999999, 6, 7, 11, Bnd_exch:long_name 10, 999999, = "indices of exchanges associated with the boundary" ; 5, 12, 6, 999999, 999999, 2, Bnd_exch:_FillValue = 0; 3, 12, 999999, 999999 ; Mesh_edge_nodes = // Volume and flux data on original1, flow grid2, double Flow_volumes(timeVol, nFaces) ; 2, 3, 3, 4, Flow_volumes:long_name = "volumes" ; 1, 5, 2, 5, Flow_volumes:units = "m3" ; 5, 6, 6, 12, Flow_volumes:mesh = "Mesh" ; 6, 8, 4, 7, Flow_volumes:location = "face" ; 1, 8, 5, 8, Flow_volumes:coordinates = "Mesh_face_x Mesh_face_y" ; 5, 9, double Flow_fluxes(timeFlx6, nEdges) ;9, 6, 10, Flow_fluxes:long_name = "flux across edge" ; 7, 11, 8, 9, Flow_fluxes:units = "m3 s-1" ; 9, 10, 10, 11, Flow_fluxes:mesh = "Mesh" 2, 12, 5, 12, Flow_fluxes:location = "edge" 3, 12 ; Mesh_node_x = ... ; // data skipped Flow_fluxes:coordinates = "Mesh_edge_x Mesh_edgenode_y" = ... ; data: // data skipped Mesh_face_x = 0... ; // dummy data skipped Mesh_face_nodesy = ... ; // data 1, 2, 5, 999999, 999999, 1, 5, 8, 999999, 999999, 5, 9, 8, 999999, 999999, 5, 6, 9, 999999, 999999,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, 122, 53, 9999991, 9999995, 3, 4, 71, 6, 12,1 ; 6, 10, 9, 999999, 999999,Dlwq_flxaggr = 1, 60, 2, 73, 110, 100, 9999994, 5, 6, 7, 0, 8, 0, 10, 511, 0, 9, 12, 0, 60, 999999, 999999,4 ; Dlwq_fromto = 2, 3-1, 12 1, 999999, 999999 ; Mesh_edge_nodes = -4, 5, 1, 2, 21, 35, 34, 45, 15, 5-6, -2, 52, 52, 63, -3, 69, 12, 63, 84, 4, -7, -5, 4 ; 1, Bnd_name 8,= "west ", 5, 8"north", "east 5", 9, "south" ; 6, Bnd_exch 9,= 1, 67, 10, 2, 70, 11, 86, 911, 9, 9, 10,12 ; |
This data file may or may not contain the volume and flux data needed for the delwaq computational core
Code Block |
---|
dimensions: 10, 11, timeVol = 100 ; //nTimeSteps for volumes 2, 12, timeFlx = 99 ; //nTimeSteps 5,for 12, 3, 12 ; Mesh_node_x = ... ; // data skippedexchanges variables: // Volume and flux data on original flow grid Mesh_node_y = ... ; // data skippeddouble Flow_volumes(timeVol, nFaces) ; Mesh_face_x = ... ; // data skipped MeshFlow_facevolumes:long_yname = ..."volumes" ; // data skipped Mesh_face_xbnds = ... ; // data skipped Mesh_face_ybndsFlow_volumes:units = ..."m3" ; // data skipped Mesh_edge_x = ... ; // data skipped Mesh_edge_y = ... ; // data skipped Flow_volumes:mesh = "Mesh" ; Dlwq_volaggr = Flow_volumes:location = "face" ; 1, 2, 2, 3, 1, 5, 3, 4, 1, 1 ; DlwqFlow_flxaggrvolumes:coordinates = "Mesh_face_x Mesh_face_y" ; 1, 0, 2, 3, 0, 0, 4, 5, 6, 7, 0, 8, 0, 10, 11, 0, 9, 12, 0, 0, 4 ; Dlwq_fromto =double Flow_fluxes(timeFlx, nEdges) ; Flow_fluxes:long_name = "flux across edge" ; -1, 1, -4, 5,Flow_fluxes:units = "m3 s-1" ; 1, 2, Flow_fluxes:mesh 1, 5,= "Mesh" 4, 5, Flow_fluxes:location = 5, -6,"edge" ; -2, 2, 2, 3, -3, 9, Flow_fluxes:coordinates = "Mesh_edge_x Mesh_edge_y" ; // or aggrgated data on delwaq topology double 3Dlwq_volumes(timeVol, nSegments) 4,; 4, -7, -5, 4Dlwq_volumes:long_name = "volumes of segments" ; Bnd_name = "west ", Dlwq_volumes:units = "north", m3" ; "east ", double Dlwq_fluxes(timeFlx, nExchanges) "south" ; Bnd_exch = 1, 7, Dlwq_fluxes:long_name = "exchanges between segments" ; 2, 0, 6, 11, Dlwq_fluxes:units = 9, 12"m3 s-1" ; data: Flow_volumes = ... ; // data skipped Flow_fluxes = ... ; // data skipped |