Versions Compared

Key

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

...

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