Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.
Comment: Included location_map for 1D meshes (also allowed for 2d/3D meshes, but often those will be identity maps, which can be left out). Textual documentation follows (Bert?).

...

Code Block
netcdf test_map {  

dimensions:  
        // dimensions for mesh 1
        nMesh1_node = 3 ;
        nMesh1_edge = 2 ;
        nMaxMesh1_contour_pts = 99 ;
        nMesh1_cell = 2 ;
        nMesh1_interface = 2 ;

        // dimensions for mesh 2
        nMesh2_node = 6 ;
        nMesh2_edge = 7 ;
        nMesh2_face = 2 ;
        nMesh2_edge_nodes = 7;
        nMesh2_face_nodes = 4;
        nMesh2_face_links = 1;
        nMaxMesh2_face_nodes = 4;
        nMaxMesh2_contour_pts = 99 ;
        // dimensions for mesh 3
        nMesh3_node = 6 ;
        nMesh3_edge = 7 ;
        nMesh3_face = 2 ;
        nMesh3_edge_nodes = 7;
        nMesh3_face_nodes = 4;
        nMesh3_face_links = 1;
        nMaxMesh3_face_nodes = 4;
        nMaxMesh3_contour_pts = 99 ;
        Mesh3nMesh3_layerslayer = 3 ;
        Mesh3nMesh3_interfacesinterface = 4;
        // common dimensions
        Two = 2;
        time = UNLIMITED ; // (1 currently)  

variables:  
// Basic mesh data (coordinates independent of computational cells whatsoever)
        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" ;  
                Mesh1_node_x:bounds = "Mesh1_node_contour_x" ;  
        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" ;  
                Mesh1_node_y:bounds = "Mesh1_node_contour_y" ;  
        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" ;  
        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" ;  
        double Mesh1_node_contour_x(nMesh1_node, nMaxMesh1_contour_pts) ;  
                Mesh1_node_contour_x:standard_name = "projection_x_coordinate" ;  
                Mesh1_node_contour_x:long_name = "List of x-points that form outline of flow volume" ;  
                Mesh1_node_contour_x:units = "m" ;  
        double Mesh1_node_contour_y(nMesh1_node, nMaxMesh1_contour_pts) ;  
                Mesh1_node_contour_y:standard_name = "projection_y_coordinate" ;  
                Mesh1_node_contour_y:units = "m" ;  
                Mesh1_node_contour_y:long_name = "List of y-points that form outline of flow volume" ;  

// Basic mesh topology
        integer Mesh1_edge_nodes(nMesh1_edge, Two) ;  
                Mesh1_edge_nodes:long_name = "links between two nodes" ;  
        integer Mesh1 ; 
                Mesh1:long_name = "Topology data of Mesh1" ;
                Mesh1:dimensionality = 1 ;
                Mesh1:locations = "link node" ;
                Mesh1:node_coordinates = "Mesh1_node_x Mesh1_node_y" ;
                Mesh1:edge_coordinates = "Mesh1_edge_x Mesh1_edge_y" ;
                Mesh1:edge_nodes = "Mesh1_edge_nodes" ;
                Mesh1:parent_mesh = "CombinedMesh" ;

// Similar for Mesh2
        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" ;  
        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" ;  
        integer Mesh2_edge_nodes(nMesh2_edge, Two) ;  
                Mesh2_edge_nodes:long_name = "link between two nodes" ;  
        integer Mesh2_face_nodes(nMesh2_face, nMaxMesh2_face_nodes) ;  
                Mesh2_face_nodes:long_name = "Mapping from net face to net nodes." ;  
        integer Mesh2_face_links(nMesh2_face_links, Two) ;  
                FlowLink:long_name = "link/interface between two flow elements (faces)" ;  
        integer Mesh2 ; 
                Mesh2:long_name = "Topology data of Mesh2" ;
                Mesh2:dimensionality = 2 ;
                Mesh2:locations = "face edge node" ;
                Mesh2:node_coordinates = "Mesh2_node_x Mesh2_node_y" ;
                Mesh2:edge_coordinates = "Mesh2_edge_x Mesh2_edge_y" ;
                Mesh2:edge_nodes = "Mesh2_edge_nodes" ;
                Mesh2:face_coordinates = "Mesh2_face_x Mesh2_face_y" ;
                Mesh2:face_nodes = "Mesh2_face_nodes" ;
                Mesh2:face_connectivity = "Mesh2_face_links" ;
                Mesh2:parent_mesh = "CombinedMesh" ;

// Similar for Mesh3
        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" ;  
        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" ;  
        integer Mesh3_edge_nodes(nMesh3_edge, Two) ;  
                Mesh3_edge_nodes:long_name = "link between two nodes" ;  
        integer Mesh3_face_nodes(nMesh3_face, nMaxMesh3_face_nodes) ;  
                Mesh3_face_nodes:long_name = "Mapping from faces to nodes." ;  
        integer Mesh3_face_links(nMesh3_face_links, Two) ;  
                FlowLink:long_name = "link/interface between two flow elements (faces)" ;  
        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" ;
        integer Mesh3 ; 
                Mesh3:long_name = "Topology data of Mesh3" ;
                Mesh3:dimensionality = 2 ;
                Mesh3:locations = "face edge node" ;
                Mesh3:node_coordinates = "Mesh3_node_x Mesh3_node_y" ;
                Mesh3:edge_coordinates = "Mesh3_edge_x Mesh3_edge_y" ;
                Mesh3:edge_nodes = "Mesh3_edge_nodes" ;
                Mesh3:face_coordinates = "Mesh3_face_x Mesh3_face_y" ;
                Mesh3:face_nodes = "Mesh3_face_nodes" ;
                Mesh3:face_connectivity = "Mesh3_face_links" ;
                Mesh3:parent_mesh = "CombinedMesh" ;

        integer CombiMesh_edge_mesh(nCombiMesh_contacts, Two) ; 
                CombiMesh_edge_mesh:long_name = "Mesh number of contact" ; 
                CombiMesh_edge_mesh:valid_range = 0, 2;
                CombiMesh_edge_mesh:valid_values = 0, 1, 2;
                CombiMesh_edge_mesh:flag_meanings = "Mesh1 Mesh2 Mesh3" ;
        integer CombiMesh_edge(nCombiMesh_contacts, Two) ; 
                CombiMesh_edge:long_name = "Edge number of contact" ; 
        integer CombinedMesh(nCombinedMesh_contacts, Four) ; 
                CombinedMesh:long_name = "Topology data of CombinedMesh" ;
                CombinedMesh:sub_meshes = "Mesh1 Mesh2 Mesh3" ;
                CombinedMesh:contact = "CombiMesh_edge_mesh CombiMesh_edge" ;

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

// 1D mesh nodes may be merged with 2D mesh faces. Or 2D mesh faces may be masked and omitted in
// solution output. As a result, allow for a map between flow node numbers and basic mesh entities/numbers).
//
// Relation between basic mesh (nodes/edges/faces) and computational mesh (corners/interfaces/cells)
// (For cell center data, nMesh1_cell <= nMesh1_node, nMesh2_cell <= nMesh2_face)
// (In case of identity maps, leave out the location_map, and specify coordinates, grid and location
//  directly in attributes of solution variable.)
        double Mesh1_cell_x(nMesh1_cell) ;
                Mesh1_cell_x:standard_name = "projection_x_coordinate" ;  
                Mesh1_cell_x:long_name = "flow cell circumcenter x-coordinate" ;  
                Mesh1_cell_x:units = "m" ;  
        double Mesh1_cell_y(nMesh1_cell) ;
                Mesh1_cell_y:standard_name = "projection_y_coordinate" ;  
                Mesh1_cell_y:long_name = "flow cell circumcenter y-coordinate" ;  
                Mesh1_cell_y:units = "m" ;  
        double Mesh1_flownode(nMesh1_cell) ;
                Mesh1_cell_node:long_name = "map from flowcell to 1D mesh node" ;  
                Mesh1_cell_node:grid = "Mesh1" ;
                Mesh1_cell_node:location = "node" ; // location of flow cell on topological mesh entity.
        double Mesh1_flowlink(nMesh1_interface) ;
                Mesh1_cell_node:long_name = "map from flowlink to 1D mesh edge" ;  
                Mesh1_cell_node:grid = "Mesh1" ;
                Mesh1_cell_node:location = "edge" ; // location of flow link on topological mesh entity.

        double Mesh1_zwl(time, nMesh1_nodecell) ;  
                Mesh1_zwl:standard_name = "sea_surface_height_above_geoid" ;
                Mesh1_zwl:units = "m" ;
                Mesh1_zwl:gridlocation_map = "Mesh1"
                Mesh1_zwl:location = "face"Mesh1_flownode" ;
                Mesh1_zwl:coordinates = "Mesh1_nodecell_x Mesh1_nodecell_y" ;
        double Mesh1_u(time, nMesh1_edgeinterface) ;  
                Mesh1_zwl:standard_name = "sea_water_speed" ;
                Mesh1_u:long_name = "Velocity (along the edge)" ; 
                Mesh1_u:units = "m s-1 edge)" ;  
                Mesh1_u:gridunits = "Mesh1"m s-1" ;  
                Mesh1_u:location_map = "edgeMesh1_flowlink" ;  
                Mesh1_u:coordinates = "Mesh1_edgeinterface_x Mesh1_edgeinterface_y" ;  

        double Mesh2_depth(nMesh2_node) ;  
                Mesh2_depth:standard_name = "sea_floor_depth_below_geoid" ;
                Mesh2_depth:units = "m" ;
                Mesh2_depth:positive = "down" ;
                Mesh2_depth:grid = "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:grid = "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:grid = "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:grid = "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:grid = "Mesh2"
                Mesh2_unorm:location = "edge" ;  
                Mesh2_unorm:coordinates = "Mesh2_edge_x Mesh2_edge_y" ;  
todo: meaning?
        integer Mesh2_edgetype(nMesh2_edge) ;  
                Mesh2_edgetype:long_name = "Type of edge" ; 
                Mesh2_edgetype:valid_range = 0, 2;
                Mesh2_edgetype:valid_values = 0, 1, 2;
                Mesh2_edgetype:flag_meanings = "closed_edge open_internal_edge open_boundary_edge" ;
                Mesh2_edgetype:grid = "Mesh2"
                Mesh2_edgetype:location = "edge" ;  
                Mesh2_edgetype:coordinates = "Mesh2_edge_x Mesh2_edge_y" ;  

        double Mesh3_depth(nMesh3_node) ;  
                Mesh3_depth:standard_name = "sea_floor_depth_below_geoid" ;
                Mesh3_depth:units = "m" ;
                Mesh3_depth:positive = "down" ;
                Mesh3_depth:grid = "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:grid = "Mesh3"
                Mesh3_zwl:location = "face" ;
                Mesh3_zwl:coordinates = "Mesh3_face_x Mesh3_face_y" ;
        double Mesh3_ucx(time, nMesh3_face, Mesh3nMesh3_layerslayer) ;  
                Mesh3_ucx:standard_name = "eastward_sea_water_velocity" ;
                Mesh3_ucx:units = "m s-1" ;
                Mesh3_ucx:grid = "Mesh3"
                Mesh3_ucx:location = "face" ;
                Mesh3_ucx:coordinates = "Mesh3_face_x Mesh3_face_y Mesh3_layers" ;  
        double Mesh3_ucy(time, nMesh3_face, Mesh3nMesh3_layerslayer) ;  
                Mesh3_ucy:standard_name = "northward_sea_water_velocity" ;
                Mesh3_ucy:units = "m s-1" ;
                Mesh3_ucy:grid = "Mesh3"
                Mesh3_ucy:location = "face" ;
                Mesh3_ucy:coordinates = "Mesh3_face_x Mesh3_face_y Mesh3_layers" ;  
        double Mesh3_unorm(time, nMesh3_edge, Mesh3nMesh3_layerslayer) ;  
                Mesh3_unorm:long_name = "Normal component of velocity at the interface" ; 
                Mesh3_unorm:units = "m s-1" ;  
                Mesh3_unorm:grid = "Mesh3"
                Mesh3_unorm:location = "edge" ;  
                Mesh3_unorm:coordinates = "Mesh3_edge_x Mesh3_edge_y Mesh3_layers" ;  
TODO: meaning
        integer Mesh3_edgetype(nMesh3_edge) ;  
                Mesh3_edgetype:long_name = "Type of edge" ; 
                Mesh3_edgetype:valid_range = 0, 2;
                Mesh3_edgetype:valid_values = 0, 1, 2;
                Mesh3_edgetype:flag_meanings = "closed_edge open_internal_edge open_boundary_edge" ;
                Mesh3_edgetype:grid = "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 = "Created on 2010-04-12, Bert Jagers\n",
    "2010-06-01, distinguish basic mesh/net and flow mesh, include mapping between the two, Arthur van Dam" ;  
                :Conventions = "CF-1.4:Deltares-0.1" ;