Latest update Feb 28, 2013:

  • use meshes attribute rather than sub_meshes to list individual meshes within composite mesh.
  • use contact attribute rather than split contact_meshes and contact_type attributes for defining method of contact.
  • use topology_dimension attribute rather than dimension attribute.

Changes to be consistent with proposal by Jonathan Gregory to align UGRID and GridSpec as described here (or snapshot pdf).
Update May 5, 2012: use cf_role attribute rather than standard_name for topology variables.

Introduction.

This page describes the way in which a mosaic of multiple unstructured meshes can be created.

The case of an integrated 1D-2D-3D mesh.

Combined mesh topology.

In the previous sections, we have extensively looked at single mesh geometries. What about the results file of a model with an integrated 1D, 2D and 3D model. Instead of trying to put the whole geometry into one big complex generic geometry definition, we propose to add an extra attribute parent_mesh to the individual mesh definitions. The parent_mesh attribute points to a variable that contains all the meta-data for the combined mesh. The "CombinedMesh" variable bears is characterised by a CF-role of "parent_mesh_topology" to distinghuish it from a regular mesh which has CF-rol "mesh_topology". It only has one required attribute meshes and a recommended attribute mesh_contacts. The former attribute contains a space delimited list of the mesh_topogy variables for the individual meshes. The latter attribute contains a space delimited list of mesh_topology_contact variables that specify the connectivity across meshes.

A mesh_topology_contact variable has one attribute contact. The contact attribute lists the features of the two meshes that form the connection; this is done by listing the name of one mesh, followed by a colon and the geometrical feature type forming the basis of the connection, followed by a space and the name of the other mesh and its associated geometrical feature type. Common examples of connections are aligned edges, or co-located volumes. The variable itself contains a listing of the pairs of elements that (partially) coindice; each pair consists of an element index in the first mesh topology and an element index in the second mesh topology. Consistent with all other index variables defined above, the indexing convention should again be specified using the start_index attribute and 0-based indexing is the default. The example below has two contact regions: the first contact consists of a coinciding node of the 1D network and face of the 2D mesh, and the second contact consists of two coinciding edges between the 2D and 3D layered meshes.

dimensions:
        // dimensions for mesh 1 (1D network)
        nMesh1_node = 3 ;
        nMesh1_edge = 2 ;

        // dimensions for mesh 2 (2D mesh)
        nMesh2_node = 6 ;
        nMesh2_edge = 7 ;
        nMesh2_face = 2 ;
        nMaxMesh2_face_nodes = 4 ;

        // dimensions for mesh 3 (layered 3D mesh)
        nMesh3_node = 6 ;
        nMesh3_edge = 7 ;
        nMesh3_face = 2 ;
        nMaxMesh3_face_nodes = 4 ;
        Mesh3_layers = 10 ;

        // dimension for mesh contact regions
        nContacts = 1 ;
        nContacts = 2 ;

        // common dimensions
        Two = 2 ;

variables:

// Topology of Mesh1
        integer Mesh1 ;
                Mesh1:cf_role = "mesh_topology" ;
                Mesh1:long_name = "Topology data of Mesh1" ;
                Mesh1:topology_dimension = 1 ;
                Mesh1:node_coordinates = "Mesh1_node_x Mesh1_node_y" ;
                Mesh1:edge_node_connectivity = "Mesh1_edge_nodes" ;
                Mesh1:parent_mesh = "CombinedMesh" ;
        integer Mesh1_edge_nodes(nMesh1_edge, Two) ;
                Mesh1_edge_nodes:cf_role = "edge_node_connectivity" ;
                Mesh1_edge_nodes:long_name = "links between two nodes" ;
                Mesh1_edge_nodes:start_index = 1 ;

// Topology of Mesh2
        integer Mesh2 ;
                Mesh2:cf_role = "mesh_topology" ;
                Mesh2:long_name = "Topology data of Mesh2" ;
                Mesh2:topology_dimension = 2 ;
                Mesh2:node_coordinates = "Mesh2_node_x Mesh2_node_y" ;
                Mesh2:face_node_connectivity = "Mesh2_face_nodes" ;
                Mesh2:parent_mesh = "CombinedMesh" ;
        integer Mesh2_face_nodes(nMesh2_face, nMaxMesh2_face_nodes) ;
                Mesh2_face_nodes:cf_role = "face_node_connectivity" ;
                Mesh2_face_nodes:long_name = "Maps every face to its nodes." ;
                Mesh2_face_nodes:_FillValue = 999999 ;
                Mesh2_face_nodes:start_index = 1 ;

// Topology of Mesh3
        integer Mesh3 ;
                Mesh3:cf_role = "mesh_topology" ;
                Mesh3:long_name = "Topology data of Mesh3" ;
                Mesh3:topology_dimension = 2 ;
                Mesh3:node_coordinates = "Mesh3_node_x Mesh3_node_y" ;
                Mesh3:face_node_connectivity = "Mesh3_face_nodes" ;
                Mesh3:parent_mesh = "CombinedMesh" ;
        integer Mesh3_face_nodes(nMesh2_face, nMaxMesh2_face_nodes) ;
                Mesh3_face_nodes:cf_role = "face_node_connectivity" ;
                Mesh3_face_nodes:long_name = "Maps every face to its nodes." ;
                Mesh3_face_nodes:_FillValue = 999999 ;
                Mesh3_face_nodes:start_index = 1 ;
        double Mesh3_layers(Mesh3_layers) ;
                Mesh3_layers:standard_name = "ocean_sigma_coordinate" ;
                Mesh3_layers:long_name = "sigma at layer midpoints" ;
                Mesh3_layers:positive = "up" ;
                Mesh3_layers:formula_terms = "sigma: Mesh3_layers eta: Mesh3_waterlevel depth: Mesh3_depth" ;

// Topology of combined mesh
        integer CombinedMesh ;
                CombinedMesh:cf_role = "parent_mesh_topology" ;
                CombinedMesh:long_name = "Topology data of CombinedMesh" ;
                CombinedMesh:meshes = "Mesh1 Mesh2 Mesh3" ;
                CombinedMesh:mesh_contacts = "Contact1 Contact2" ;
        integer Contact1(nContact1, Two)
                Contact1:cf_role = "mesh_topology_contact" ;
                Contact1:contact = "Mesh1:node Mesh2:face" ;
                Contact1:start_index = 1 ;
        integer Contact2(nContact2, Two)
                Contact2:cf_role = "mesh_topology_contact" ;
                Contact2:contact = "Mesh2:edge Mesh3:edge" ;
                Contact2:start_index = 1 ;

// Mesh coordinates of Mesh1, Mesh2 and Mesh3 and other variables
        // skipped

Example of a combination of connected 1D network, 2D mesh and 3D mesh.

To conclude we give a full listing of a data file for the whole mesh including some data. Along one of the sides of the 3D layered domain, an open boundary is defined.

netcdf test_map {

dimensions:
        // dimensions for mesh 1
        nMesh1_node = 5 ;
        nMesh1_edge = 4 ;
        nMaxMesh1_contour_pts = 9 ;
        nMesh1_flow_node = 4 ;
        nMesh1_flow_link = 3 ;

        // dimensions for mesh 2
        nMesh2_node = 6 ;
        nMesh2_edge = 7 ;
        nMesh2_face = 2 ;
        nMaxMesh2_face_nodes = 4 ;
        nMaxMesh2_contour_pts = 4 ;

        // dimensions for mesh 3
        nMesh3_node = 6 ;
        nMesh3_edge = 7 ;
        nMesh3_face = 2 ;
        nMaxMesh3_face_nodes = 4 ;
        nMaxMesh3_contour_pts = 4 ;
        Mesh3_layers = 3 ;
        Mesh3_interfaces = 4 ;
        nMesh3_boundary_edges = 2 ;

        // dimension for combined mesh
        nContact1 = 1 ;
        nContact2 = 2 ;

        // common dimensions
        Two = 2 ;
        time = UNLIMITED ; // (1 currently)

variables:
// Topology of the combined mesh
        integer CombinedMesh ;
                CombinedMesh:cf_role = "parent_mesh_topology" ;
                CombinedMesh:long_name = "Topology data of CombinedMesh" ;
                CombinedMesh:meshes = "Mesh1 Mesh2 Mesh3" ;
                CombinedMesh:mesh_contacts = "Contact1 Contact2" ;
        integer Contact1(nContact1, Two)
                Contact1:cf_role = "mesh_topology_contact" ;
                Contact1:contact = "Mesh1:node Mesh2:face" ;
                Contact1:start_index = 1 ;
        integer Contact2(nContact2, Two)
                Contact2:cf_role = "mesh_topology_contact" ;
                Contact2:contact = "Mesh2:edge Mesh3:edge" ;
                Contact2:start_index = 1 ;

// Topology of 1D network
        integer Mesh1 ;
                Mesh1:cf_role = "mesh_topology" ;
                Mesh1:long_name = "Topology data of Mesh1" ;
                Mesh1:topology_dimension = 1 ;
                Mesh1:node_coordinates = "Mesh1_node_x Mesh1_node_y" ;
                Mesh1:edge_coordinates = "Mesh1_edge_x Mesh1_edge_y" ;
                Mesh1:edge_node_connectivity = "Mesh1_edge_nodes" ;
                Mesh1:parent_mesh = "CombinedMesh" ;
        integer Mesh1_edge_nodes(nMesh1_edge, Two) ;
                Mesh1_edge_nodes:cf_role = "edge_node_connectivity" ;
                Mesh1_edge_nodes:long_name = "links between two nodes" ;
                Mesh1_edge_nodes:start_index = 1 ;

// Mesh1 (auxiliary) coordinate variables
        double Mesh1_node_x(nMesh1_node) ;
                Mesh1_node_x:standard_name = "projection_x_coordinate" ;
                Mesh1_node_x:long_name = "netnodal x-coordinate" ;
                Mesh1_node_x:units = "m" ;
        double Mesh1_node_y(nMesh1_node) ;
                Mesh1_node_y:standard_name = "projection_y_coordinate" ;
                Mesh1_node_y:long_name = "netnodal y-coordinate" ;
                Mesh1_node_y:units = "m" ;
        double Mesh1_edge_x(nMesh1_edge) ;
                Mesh1_edge_x:standard_name = "projection_x_coordinate" ;
                Mesh1_edge_x:long_name = "Center coordinate of net link (velocity point)." ;
                Mesh1_edge_x:units = "m" ;
                //bounds option skipped
        double Mesh1_edge_y(nMesh1_edge) ;
                Mesh1_edge_y:standard_name = "projection_y_coordinate" ;
                Mesh1_edge_y:long_name = "Center coordinate of net link (velocity point)." ;
                Mesh1_edge_y:units = "m" ;
                //bounds option skipped

// Topology of 2D mesh
        integer Mesh2 ;
                Mesh2:cf_role = "mesh_topology" ;
                Mesh2:long_name = "Topology data of Mesh2" ;
                Mesh2:topology_dimension = 2 ;
                Mesh2:node_coordinates = "Mesh2_node_x Mesh2_node_y" ;
                Mesh2:face_node_connectivity = "Mesh2_face_nodes" ;
                Mesh2:face_coordinates = "Mesh2_face_x Mesh2_face_y" ;
                Mesh2:edge_node_connectivity = "Mesh2_edge_nodes" ;
                Mesh2:edge_coordinates = "Mesh2_edge_x Mesh2_edge_y" ;
                Mesh2:parent_mesh = "CombinedMesh" ;
        integer Mesh2_face_nodes(nMesh2_face, nMaxMesh2_face_nodes) ;
                Mesh2_face_nodes:cf_role = "face_node_connectivity" ;
                Mesh2_face_nodes:long_name = "Maps every face to its nodes." ;
                Mesh2_face_nodes:_FillValue = 999999 ;
                Mesh2_face_nodes:start_index = 1 ;
        integer Mesh2_edge_nodes(nMesh2_edge, Two) ;
                Mesh2_edge_nodes:cf_roles = "edge_node_connectivity" ;
                Mesh2_edge_nodes:long_name = "link between two nodes" ;
                Mesh2_edge_nodes:start_index = 1 ;

// Mesh2 (auxiliary) coordinate variables
        double Mesh2_node_x(nMesh2_node) ;
                Mesh2_node_x:standard_name = "projection_x_coordinate" ;
                Mesh2_node_x:long_name = "netnodal x-coordinate" ;
                Mesh2_node_x:units = "m" ;
        double Mesh2_node_y(nMesh2_node) ;
                Mesh2_node_y:standard_name = "projection_y_coordinate" ;
                Mesh2_node_y:long_name = "netnodal y-coordinate" ;
                Mesh2_node_y:units = "m" ;
        double Mesh2_face_x(nMesh2_face) ;
                Mesh2_face_x:standard_name = "projection_x_coordinate" ;
                Mesh2_face_x:long_name = "Flow element circumcenter x" ;
                Mesh2_face_x:units = "m" ;
                Mesh2_face_x:bounds = "Mesh2_face_contour_x" ;
        double Mesh2_face_y(nMesh2_face) ;
                Mesh2_face_y:standard_name = "projection_y_coordinate" ;
                Mesh2_face_y:long_name = "Flow element circumcenter y" ;
                Mesh2_face_y:units = "m" ;
                Mesh2_face_y:bounds = "Mesh2_face_contour_y" ;
        double Mesh2_face_contour_x(nMesh2_face, nMaxMesh2_contour_pts) ;
                Mesh2_face_contour_x:standard_name = "projection_x_coordinate" ;
                Mesh2_face_contour_x:long_name = "List of x-points that form outline of flow volume" ;
                Mesh2_face_contour_x:units = "m" ;
        double Mesh2_face_contour_y(nMesh2_face, nMaxMesh2_contour_pts) ;
                Mesh2_face_contour_y:standard_name = "projection_y_coordinate" ;
                Mesh2_face_contour_y:units = "m" ;
                Mesh2_face_contour_y:long_name = "List of y-points that form outline of flow volume" ;
        double Mesh2_edge_x(nMesh2_edge) ;
                Mesh2_edge_x:standard_name = "projection_x_coordinate" ;
                Mesh2_edge_x:long_name = "Center coordinate of net link (velocity point)." ;
                Mesh2_edge_x:units = "m" ;
                //bounds option skipped
        double Mesh2_edge_y(nMesh2_edge) ;
                Mesh2_edge_y:standard_name = "projection_y_coordinate" ;
                Mesh2_edge_y:long_name = "Center coordinate of net link (velocity point)." ;
                Mesh2_edge_y:units = "m" ;
                //bounds option skipped

// Topology of layered 3D mesh
        integer Mesh3 ;
                Mesh3:cf_role = "mesh_topology" ;
                Mesh3:long_name = "Topology data of Mesh3" ;
                Mesh3:topology_dimension = 2 ;
                Mesh3:node_coordinates = "Mesh3_node_x Mesh3_node_y" ;
                Mesh3:face_node_connectivity = "Mesh3_face_nodes" ;
                Mesh3:face_coordinates = "Mesh3_face_x Mesh3_face_y" ;
                Mesh3:edge_node_connectivity = "Mesh3_edge_nodes" ;
                Mesh3:edge_coordinates = "Mesh3_edge_x Mesh3_edge_y" ;
                Mesh3:parent_mesh = "CombinedMesh" ;
        integer Mesh3_face_nodes(nMesh3_face, nMaxMesh3_face_nodes) ;
                Mesh3_face_nodes:cf_role = "face_node_connectivity" ;
                Mesh3_face_nodes:long_name = "Maps every face to its nodes." ;
                Mesh3_face_nodes:_FillValue = 999999 ;
                Mesh3_face_nodes:start_index = 1 ;
        integer Mesh3_edge_nodes(nMesh3_edge, Two) ;
                Mesh3_edge_nodes:cf_role = "edge_node_connectivity" ;
                Mesh3_edge_nodes:long_name = "link between two nodes" ;
                Mesh3_edge_nodes:start_index = 1 ;

// Mesh3 (auxiliary) horizontal coordinate variables
        double Mesh3_node_x(nMesh3_node) ;
                Mesh3_node_x:standard_name = "projection_x_coordinate" ;
                Mesh3_node_x:long_name = "netnodal x-coordinate" ;
                Mesh3_node_x:units = "m" ;
        double Mesh3_node_y(nMesh3_node) ;
                Mesh3_node_y:standard_name = "projection_y_coordinate" ;
                Mesh3_node_y:long_name = "netnodal y-coordinate" ;
                Mesh3_node_y:units = "m" ;
        double Mesh3_face_x(nMesh3_face) ;
                Mesh3_face_x:standard_name = "projection_x_coordinate" ;
                Mesh3_face_x:long_name = "Flow element circumcenter x" ;
                Mesh3_face_x:units = "m" ;
                Mesh3_face_x:bounds = "Mesh3_face_contour_x" ;
        double Mesh3_face_y(nMesh3_face) ;
                Mesh3_face_y:standard_name = "projection_y_coordinate" ;
                Mesh3_face_y:long_name = "Flow element circumcenter y" ;
                Mesh3_face_y:units = "m" ;
                Mesh3_face_y:bounds = "Mesh3_face_contour_y" ;
        double Mesh3_face_contour_x(nMesh3_face, nMaxMesh3_contour_pts) ;
                Mesh3_face_contour_x:standard_name = "projection_x_coordinate" ;
                Mesh3_face_contour_x:long_name = "List of x-points that form outline of flow volume" ;
                Mesh3_face_contour_x:units = "m" ;
        double Mesh3_face_contour_y(nMesh3_face, nMaxMesh3_contour_pts) ;
                Mesh3_face_contour_y:standard_name = "projection_y_coordinate" ;
                Mesh3_face_contour_y:units = "m" ;
                Mesh3_face_contour_y:long_name = "List of y-points that form outline of flow volume" ;
        double Mesh3_edge_x(nMesh3_edge) ;
                Mesh3_edge_x:standard_name = "projection_x_coordinate" ;
                Mesh3_edge_x:long_name = "Center coordinate of edges (velocity point)." ;
                Mesh3_edge_x:units = "m" ;
                //bounds option skipped
        double Mesh3_edge_y(nMesh3_edge) ;
                Mesh3_edge_y:standard_name = "projection_y_coordinate" ;
                Mesh3_edge_y:long_name = "Center coordinate of edges (velocity point)." ;
                Mesh3_edge_y:units = "m" ;
                //bounds option skipped

// Mesh3 vertical coordinate variables
        double Mesh3_layers(Mesh3_layers) ;
                Mesh3_layers:standard_name = "ocean_sigma_coordinate" ;
                Mesh3_layers:long_name = "sigma at layer midpoints" ;
                Mesh3_layers:positive = "up" ;
                Mesh3_layers:formula_terms = "sigma: Mesh3_layers eta: Mesh3_zwl depth: Mesh3_depth" ;
        double Mesh3_interfaces(Mesh3_interfaces) ;
                Mesh3_interfaces:standard_name = "ocean_sigma_coordinate" ;
                Mesh3_interfaces:long_name = "sigma at layer interfaces" ;
                Mesh3_interfaces:positive = "up" ;
                Mesh3_interfaces:formula_terms = "sigma: Mesh3_interfaces eta: Mesh3_zwl depth: Mesh3_depth" ;

// Time coordinate
        double time(time) ;
                time:standard_name = "time" ;
                time:units = "seconds since 1992-08-31 00:00:00" ;

// The 1D network connects to the 2D mesh by having one network node inside one
// of the 2D mesh faces. The values (water level, concentrations, etc.) at this
// common volume are only stored on the 2D mesh. Therefore, we have simulation
// data on only a subset of the 1D network and we thus define two location index
// sets for the 1D network: one for the flow nodes (at the 1D network nodes) and
// one for the flow links (at the 1D network edges).
        integer Mesh1_flow_node(nMesh1_flow_node) ;
                Mesh1_flow_node:cf_role = "location_index_set" ; 
                Mesh1_flow_node:long_name = "Indices of the flow_node among the 1D mesh nodes" ;
                Mesh1_flow_node:mesh = "Mesh1" ;
                Mesh1_flow_node:location = "node" ;
                Mesh1_flow_node:start_index = 1 ;
                Mesh1_flow_node:coordinates = "Mesh1_flow_node_x Mesh1_flow_node_y" ;
        integer Mesh1_flow_link(nMesh1_flow_link) ;
                Mesh1_flow_link:cf_role = "location_index_set" ; 
                Mesh1_flow_link:long_name = "Indices of the flow_link among the 1D mesh edges" ;
                Mesh1_flow_link:mesh = "Mesh1" ;
                Mesh1_flow_link:location = "edge" ;
                Mesh1_flow_link:start_index = 1 ;
                Mesh1_flow_link:coordinates = "Mesh1_flow_link_x Mesh1_flow_link_y" ;

// (auxiliary) coordinate variables associated with location index sets
        double Mesh1_flow_node_x(nMesh1_flow_node) ;
                Mesh1_flow_node_x:standard_name = "projection_x_coordinate" ;
                Mesh1_flow_node_x:long_name = "flow_node x-coordinate" ;
                Mesh1_flow_node_x:units = "m" ;
                Mesh1_flow_node_x:bounds = "Mesh1_flow_node_xbnds" ;
        double Mesh1_flow_node_y(nMesh1_flow_node) ;
                Mesh1_flow_node_y:standard_name = "projection_y_coordinate" ;
                Mesh1_flow_node_y:long_name = "flow_node y-coordinate" ;
                Mesh1_flow_node_y:units = "m" ;
                Mesh1_flow_node_y:bounds = "Mesh1_flow_node_ybnds" ;
        double Mesh1_flow_node_xbnds(nMesh1_node, nMaxMesh1_pbndsts) ;
                Mesh1_flow_node_xbnds:standard_name = "projection_x_coordinate" ;
                Mesh1_flow_node_xbnds:long_name = "List of x-points that form outline of flow cell" ;
                Mesh1_flow_node_xbnds:units = "m" ;
        double Mesh1_flow_node_ybnds(nMesh1_node, nMaxMesh1_pbndsts) ;
                Mesh1_flow_node_ybnds:standard_name = "projection_y_coordinate" ;
                Mesh1_flow_node_ybnds:units = "m" ;
                Mesh1_flow_node_ybnds:long_name = "List of y-points that form outline of flow cell" ;
        double Mesh1_flow_link_x(nMesh1_flow_link) ;
                Mesh1_flow_link_x:standard_name = "projection_x_coordinate" ;
                Mesh1_flow_link_x:long_name = "x-coordinate of flow link midpoint" ;
                Mesh1_flow_link_x:units = "m" ;
                //bounds option skipped
        double Mesh1_flow_link_y(nMesh1_flow_link) ;
                Mesh1_flow_link_y:standard_name = "projection_y_coordinate" ;
                Mesh1_flow_link_y:long_name = "y-coordinate of flow link midpoint" ;
                Mesh1_flow_link_y:units = "m" ;
                //bounds option skipped

// Also the open boundary on Mesh3 is defined by means of a location index set.
        integer Mesh3_boundary(nMesh3_boundary_edges) ;
                Mesh3_boundary:cf_role = "location_index_set" ; 
                Mesh3_boundary:long_name = "Indices of open boundary edges among the edges of mesh3" ;
                Mesh3_boundary:mesh = "Mesh3" ;
                Mesh3_boundary:location = "edge" ;
                Mesh3_boundary:start_index = 1 ;
                Mesh3_boundary:coordinates = "Mesh3_boundary_x Mesh3_boundary_y" ;

// (auxiliary) coordinate variables associated with boundary edges
        double Mesh3_boundary_x(nMesh3_boundary_edges) ;
                Mesh3_boundary_x:standard_name = "projection_x_coordinate" ;
                Mesh3_boundary_x:long_name = "x-coordinate of boundary edge" ;
                Mesh3_boundary_x:units = "m" ;
                //bounds option skipped
        double Mesh3_boundary_y(nMesh3_boundary_edges) ;
                Mesh3_boundary_y:standard_name = "projection_y_coordinate" ;
                Mesh3_boundary_y:long_name = "y-coordinate of boundary edge" ;
                Mesh3_boundary_y:units = "m" ;
                //bounds option skipped

// Data on Mesh1
        double Mesh1_zwl(time, nMesh1_flow_node) ;
                Mesh1_zwl:standard_name = "sea_surface_height_above_geoid" ;
                Mesh1_zwl:units = "m" ;
                Mesh1_zwl:location_index_set = "Mesh1_flow_cell" ;
                Mesh1_zwl:coordinates = "Mesh1_flow_node_x Mesh1_flow_node_y" ;
        double Mesh1_u(time, nMesh1_flow_link) ;
                Mesh1_zwl:standard_name = "sea_water_speed" ;
                Mesh1_u:long_name = "Velocity (along the edge)" ;
                Mesh1_u:units = "m s-1" ;
                Mesh1_u:location_index_set = "Mesh1_flow_link" ;
                Mesh1_u:coordinates = "Mesh1_flow_link_x Mesh1_flow_link_y" ;

// Data on Mesh2
        double Mesh2_depth(nMesh2_node) ;
                Mesh2_depth:standard_name = "sea_floor_depth_below_geoid" ;
                Mesh2_depth:units = "m" ;
                Mesh2_depth:positive = "down" ;
                Mesh2_depth:mesh = "Mesh2"
                Mesh2_depth:location = "node" ;
                Mesh2_depth:coordinates = "Mesh2_node_x Mesh2_node_y" ;
        double Mesh2_zwl(time, nMesh2_face) ;
                Mesh2_zwl:standard_name = "sea_surface_height_above_geoid" ;
                Mesh2_zwl:units = "m" ;
                Mesh2_zwl:mesh = "Mesh2"
                Mesh2_zwl:location = "face" ;
                Mesh2_zwl:coordinates = "Mesh2_face_x Mesh2_face_y" ;
        double Mesh2_ucx(time, nMesh2_face) ;
                Mesh2_ucx:standard_name = "eastward_sea_water_velocity" ;
                Mesh2_ucx:units = "m s-1" ;
                Mesh2_ucx:mesh = "Mesh2"
                Mesh2_ucx:location = "face" ;
                Mesh2_ucx:coordinates = "Mesh2_face_x Mesh2_face_y" ;
        double Mesh2_ucy(time, nMesh2_face) ;
                Mesh2_ucy:standard_name = "northward_sea_water_velocity" ;
                Mesh2_ucy:units = "m s-1" ;
                Mesh2_ucy:mesh = "Mesh2"
                Mesh2_ucy:location = "face" ;
                Mesh2_ucy:coordinates = "Mesh2_face_x Mesh2_face_y" ;
        double Mesh2_unorm(time, nMesh2_edge) ;
                Mesh2_unorm:long_name = "Normal component of velocity at the interface" ;
                Mesh2_unorm:units = "m s-1" ;
                Mesh2_unorm:mesh = "Mesh2"
                Mesh2_unorm:location = "edge" ;
                Mesh2_unorm:coordinates = "Mesh2_edge_x Mesh2_edge_y" ;
        integer Mesh2_edgetype(nMesh2_edge) ;
                Mesh2_edgetype:long_name = "Type of edge" ;
                Mesh2_edgetype:valid_range = 0, 1 ;
                Mesh2_edgetype:valid_values = 0, 1 ;
                Mesh2_edgetype:flag_meanings = "closed_edge open_edge" ;
                Mesh2_edgetype:mesh = "Mesh2"
                Mesh2_edgetype:location = "edge" ;
                Mesh2_edgetype:coordinates = "Mesh2_edge_x Mesh2_edge_y" ;

// Data on Mesh3
        double Mesh3_depth(nMesh3_node) ;
                Mesh3_depth:standard_name = "sea_floor_depth_below_geoid" ;
                Mesh3_depth:units = "m" ;
                Mesh3_depth:positive = "down" ;
                Mesh3_depth:mesh = "Mesh3"
                Mesh3_depth:location = "node" ;
                Mesh3_depth:coordinates = "Mesh3_node_x Mesh3_node_y" ;
        double Mesh3_zwl(time, nMesh3_face) ;
                Mesh3_zwl:standard_name = "sea_surface_height_above_geoid" ;
                Mesh3_zwl:units = "m" ;
                Mesh3_zwl:mesh = "Mesh3"
                Mesh3_zwl:location = "face" ;
                Mesh3_zwl:coordinates = "Mesh3_face_x Mesh3_face_y" ;
        double Mesh3_ucx(time, nMesh3_face, Mesh3_layers) ;
                Mesh3_ucx:standard_name = "eastward_sea_water_velocity" ;
                Mesh3_ucx:units = "m s-1" ;
                Mesh3_ucx:mesh = "Mesh3"
                Mesh3_ucx:location = "face" ;
                Mesh3_ucx:coordinates = "Mesh3_face_x Mesh3_face_y Mesh3_layers" ;
        double Mesh3_ucy(time, nMesh3_face, Mesh3_layers) ;
                Mesh3_ucy:standard_name = "northward_sea_water_velocity" ;
                Mesh3_ucy:units = "m s-1" ;
                Mesh3_ucy:mesh = "Mesh3"
                Mesh3_ucy:location = "face" ;
                Mesh3_ucy:coordinates = "Mesh3_face_x Mesh3_face_y Mesh3_layers" ;
        double Mesh3_unorm(time, nMesh3_edge, Mesh3_layers) ;
                Mesh3_unorm:long_name = "Normal component of velocity at the interface" ;
                Mesh3_unorm:units = "m s-1" ;
                Mesh3_unorm:mesh = "Mesh3"
                Mesh3_unorm:location = "edge" ;
                Mesh3_unorm:coordinates = "Mesh3_edge_x Mesh3_edge_y Mesh3_layers" ;
        integer Mesh3_edgetype(nMesh3_edge) ;
                Mesh3_edgetype:long_name = "Type of edge" ;
                Mesh3_edgetype:valid_range = 0, 1 ;
                Mesh3_edgetype:valid_values = 0, 1 ;
                Mesh3_edgetype:flag_meanings = "closed_edge open_edge" ;
                Mesh3_edgetype:mesh = "Mesh3"
                Mesh3_edgetype:location = "edge" ;
                Mesh3_edgetype:coordinates = "Mesh3_edge_x Mesh3_edge_y" ;

// global attributes:
                :institution = "Deltares" ;
                :references = "http://www.deltares.nl" ;
                :source = "UNSTRUC" ;
                :history = "Various iterations; see wiki history.";
                :Conventions = "CF-1.4 UGRID-0.2" ;

Example mesh consisting of 1D network and flexible 2D mesh

  • No labels