Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

...

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 ;

...