Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.
Comment: Migration of unmigrated content due to installation of a new plugin
scrollbar

D-Flow FM (formerly Unstruc) is a shallow water flow solver on flexible meshes (also known as 'unstructured grids'). The output data of D-Flow are stored in NetCDF files. Since a convention for storing unstructured grid data in NetCDF files didn't exist, we have started to define an extension to the CF standard. Meanwhile this effort has been linked to other international initiatives, and the latest proposal for the conventions can be found on this unstructured grid page. Although we lead and follow these developments, we also want to keep the output files relatively stable, hence the D-Flow FM output files don't always follow the proposed conventions exactly. This page describes the format of the NetCDF files that are currently produced by D-Flow FM.

Unstructured grid as a net

  • The unstructured grid is a set of net nodes (coordinates) and a set of net links connecting them.
  • Flow data is defined on net cells (naming might change). Cells have a (circum-)center (water level point). The entire cell is defined through its contour line (bounds: NetcellContour_x/y). The contour line contains the coordinates of surrounding net nodes for 2D cells and generated coordinates for 1D channels/manholes/etc.

Examples

Table of Content Zone
locationtop
typelist

D-Flow FM net file with 2D cells on lon/lat-grid.

New version (Mar '10) with additional NetLinkType 0 (closed 2D link/thin dams), and netcell (=NetElem) data + boundary data (intended for use in RGFGRID)

Code Block

netcdf courantc_net {
dimensions:
        nNetNode = 178907 ;
        nNetLink = 363286 ;
        nNetLinkPts = 2 ;
        nBndLink = 14337 ;
        nNetElem = 184189 ;
        nNetElemMaxNode = 7 ;
variables:
        double NetNode_x(nNetNode) ;
                NetNode_x:units = "degrees_east" ;
                NetNode_x:standard_name = "longitude" ;
                NetNode_x:long_name = "netnodal lon-coordinate" ;
        double NetNode_y(nNetNode) ;
                NetNode_y:units = "degrees_north" ;
                NetNode_y:standard_name = "latitude" ;
                NetNode_y:long_name = "netnodal lat-coordinate" ;
        double NetNode_z(nNetNode) ;
        int NetLink(nNetLink, nNetLinkPts) ;
                NetLink:standard_name = "netlink" ;
                NetLink:long_name = "link between two netnodes" ;
        int NetLinkType(nNetLink) ;
                NetLinkType:long_name = "type of netlink" ;
                NetLinkType:valid_range = 0, 2 ;
                NetLinkType:flag_values = 0, 1, 2 ;
                NetLinkType:flag_meanings = "closed_link_between_2D_nodes link_between_1D_nodes link_between_2D_nodes" ;
        int NetElemNode(nNetElem, nNetElemMaxNode) ;
                NetElemNode:long_name = "Mapping from net cell to net nodes." ;
        int BndLink(nBndLink) ;
                BndLink:long_name = "Netlinks that compose the net boundary." ;
        int NetElemLink(nNetElemLink, nNetElemLinkPts) ;
                NetElemLink:long_name = "link between two netelems" ;

// global attributes:
                :institution = "Deltares" ;
                :references = "http://www.deltares.nl" ;
                :source = "UNSTRUC v1.0.11.10693:1069, model" ;
                :history = "Created on 2010-03-05T09:41:31+0100, UNSTRUC" ;
                :Conventions = "CF-1.4:Deltares-0.1" ;
data:

 NetNode_x = 10.7736671537707, 10.775, 10.7783013103449, 10.775, 10.775,
    10.80625, 10.7839111680939, 10.80625, 10.8375, 10.80625, 10.80625,
// ...
 NetLink =
  23381, 23382,
  32338, 32341,
// ...
 NetLinkType = 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 2, 2, 2, 2, 2, 2, 2, 2,
// ...
 NetElemNode =
  1, 2, 5, _, _, _, _,
  1, 5, 4, _, _, _, _,
// ...
 BndLink = 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19,
    20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37,
// ...

D-Flow FM map file with 2D cells on lon/lat-grid.

Code Block

netcdf test_map {
dimensions:
        nNetNode = 178907 ;
        nNetLink = 363472 ;
        nNetLinkPts = 2 ;
        nNetCell = 184324 ;
        nNetCellMaxNode = 7 ;
        nNetCellContourPts = 99 ;
        nNetCellLink = 349141 ;
        nNetCellLinkPts = 2 ;
        time = UNLIMITED ; // (1 currently)
variables:
        double NetNode_x(nNetNode) ;
                NetNode_x:units = "degrees_east" ;
                NetNode_x:standard_name = "longitude" ;
                NetNode_x:long_name = "netnodal lon-coordinate" ;
        double NetNode_y(nNetNode) ;
                NetNode_y:units = "degrees_north" ;
                NetNode_y:standard_name = "latitude" ;
                NetNode_y:long_name = "netnodal lat-coordinate" ;
        double NetNode_z(nNetNode) ;
        int NetLink(nNetLink, nNetLinkPts) ;
                NetLink:standard_name = "netlink" ;
                NetLink:long_name = "link between two netnodes" ;
        int NetLinkType(nNetLink) ;
                NetLinkType:standard_name = "netlink_type" ;
                NetLinkType:long_name = "type of netlink" ;
                NetLinkType:valid_range = 1, 2 ;
                NetLinkType:flag_values = 1, 2 ;
                NetLinkType:flag_meanings = "link_between_1D_nodes link_between_2D_nodes" ;
        double time(time) ;
                time:units = "seconds since 2010-01-01 00:00:00" ;
        double NetCell_xc(nNetCell) ;
                NetCell_xc:units = "degrees_east" ;
                NetCell_xc:standard_name = "longitude" ;
                NetCell_xc:long_name = "Net cell circumcenter x" ;
                NetCell_xc:bounds = "NetCellContour_x" ;
        double NetCell_yc(nNetCell) ;
                NetCell_yc:units = "degrees_north" ;
                NetCell_yc:standard_name = "latitude" ;
                NetCell_yc:long_name = "Net cell circumcenter y" ;
                NetCell_yc:bounds = "NetCellContour_y" ;
        double NetCellContour_x(nNetCell, nNetCellContourPts) ;
                NetCellContour_x:units = "degrees_east" ;
                NetCellContour_x:standard_name = "longitude" ;
                NetCellContour_x:long_name = "List of x-points forming netcell" ;
        double NetCellContour_y(nNetCell, nNetCellContourPts) ;
                NetCellContour_y:units = "degrees_north" ;
                NetCellContour_y:standard_name = "latitude" ;
                NetCellContour_y:long_name = "List of y-points forming netcell" ;
        int NetCellNode(nNetCell, nNetCellMaxNode) ;
                NetCellNode:standard_name = "netcell_node" ;
                NetCellNode:long_name = "Mapping from net cell to net nodes (first column is node count, will change)." ;
                NetCellNode:netcell_coords = "NetCell_xc NetCell_yc" ;
        int NetCellLink(nNetCellLink, nNetCellLinkPts) ;
        double s1(time, nNetCell) ;
                s1:cell_methods = "area: mean" ;
                s1:coordinates = "NetCell_xc Netcell_yc" ;
                s1:grid_mapping = "crs" ;
        double ucx(time, nNetCell) ;
                ucx:cell_methods = "area: point" ;
                ucx:coordinates = "NetCell_xc Netcell_yc" ;
                ucx:grid_mapping = "crs" ;
        double ucy(time, nNetCell) ;
                ucy:cell_methods = "area: point" ;
                ucy:coordinates = "NetCell_xc Netcell_yc" ;
                ucy:grid_mapping = "crs" ;
        int crs ;
                crs:grid_mapping_name = "latitude_longitude" ;
                crs:longitude_of_prime_meridian = 0.f ;
                crs:semi_major_axis = 6378137.f ;
                crs:inverse_flattening = 298.2572f ;

// global attributes:
                :institution = "Deltares" ;
                :references = "http://www.deltares.nl" ;
                :source = "UNSTRUC v1.0.11.10021:1007, model csmcourant" ;
                :history = "Created on 2010-01-06T15:35:40+0100, UNSTRUC" ;
                :Conventions = "CF-1.4/Deltares-0.1" ;
data:

 NetNode_x = 10.7736671537707, 10.775, 10.7783013103449, 10.775, 10.775,
    10.80625, 10.7839111680939, 10.80625, 10.8375, 10.80625, 10.80625,
// ...
 NetLink =
  80895, 80882,
  167568, 167573,
  108907, 109422,
// ...
 NetLinkType = 1, 1, 1, 1, 1, 1, 1, 1, 
// ...
 time = 0.0300439515169901 ;
 NetCell_xc = 10.7743335768854, 10.7743335913705, 10.7906249344082,

 NetCellContour_x =
  10.7736671537707, 10.775, 10.775, _, _, _, _, _, // ...
  10.775, 10.7783013103449, 10.80625, 10.80625, 10.775, _, _, _, _, _, _, _,
// ...
 NetCellNode =
  3, 1, 2, 5, _, _, _,
  3, 1, 5, 4, _, _, _,
  5, 2, 3, 6, 8, 5, _,
// ...
 NetCellLink =
  1, 2,
  1, 3,
// ...
 s1 =
  4.78405906502741e-001, 5.63697801327623e-001, 2.44636456454523e-001,
    7.54911502823542e-001, 2.32821367302938e-001, 1.96039340036838e-001,
    5.73297867243609e-001, 2.28008030376163e-001, 3.37509917682617e-001,
// ...
crs = 4326 ;

D-Flow FM map file with staggered solution variables (concept)

TODO: replace normal velocity by u/v at edge?

Code Block

netcdf test_map {
dimensions:
        nNetNode = 706 ;
        nNetLink = 1313 ;
        nNetLinkPts = 2 ;
        nBndLink = 104 ;
        nNetElem = 610 ;
        nNetElemMaxNode = 7 ;
        nFlowElem = 665 ;
        nFlowElemMaxNode = 6 ;
        nFlowElemContourPts = 99 ;
        nNetElemLink1D = 65 ;
        nNetElemLink = 1078 ;
        nNetElemLinkPts = 2 ;
        nFlowLink = 1143 ;
        nFlowLinkPts = 2 ;
        time = UNLIMITED ; // (1 currently)
variables:
        double NetNode_x(nNetNode) ;
                NetNode_x:units = "m" ;
                NetNode_x:standard_name = "projection_x_coordinate" ;
                NetNode_x:long_name = "netnodal x-coordinate" ;
        double NetNode_y(nNetNode) ;
                NetNode_y:units = "m" ;
                NetNode_y:standard_name = "projection_y_coordinate" ;
                NetNode_y:long_name = "netnodal y-coordinate" ;
        double NetNode_z(nNetNode) ;
        int NetLink(nNetLink, nNetLinkPts) ;
                NetLink:standard_name = "netlink" ;
                NetLink:long_name = "link between two netnodes" ;
        int NetLinkType(nNetLink) ;
                NetLinkType:long_name = "type of netlink" ;
                NetLinkType:valid_range = 0, 2 ;
                NetLinkType:flag_values = 0, 1, 2 ;
                NetLinkType:flag_meanings = "closed_link_between_2D_nodes link_between_1D_nodes link_between_2D_nodes" ;
        int NetElemNode(nNetElem, nNetElemMaxNode) ;
                NetElemNode:long_name = "Mapping from net cell to net nodes." ;
        int BndLink(nBndLink) ;
                BndLink:long_name = "Netlinks that compose the net boundary." ;
        double time(time) ;
                time:units = "seconds since 1992-08-31 00:00:00" ;
        double FlowElem_xcc(nFlowElem) ;
                FlowElem_xcc:units = "m" ;
                FlowElem_xcc:standard_name = "projection_x_coordinate" ;
                FlowElem_xcc:long_name = "Flow element circumcenter x" ;
                FlowElem_xcc:bounds = "FlowElemContour_x" ;
        double FlowElem_ycc(nFlowElem) ;
                FlowElem_ycc:units = "m" ;
                FlowElem_ycc:standard_name = "projection_y_coordinate" ;
                FlowElem_ycc:long_name = "Flow element circumcenter y" ;
                FlowElem_ycc:bounds = "FlowElemContour_y" ;
        double FlowElemContour_x(nFlowElem, nFlowElemContourPts) ;
                FlowElemContour_x:units = "m" ;
                FlowElemContour_x:standard_name = "projection_x_coordinate" ;
                FlowElemContour_x:long_name = "List of x-points forming flow element" ;
        double FlowElemContour_y(nFlowElem, nFlowElemContourPts) ;
                FlowElemContour_y:units = "m" ;
                FlowElemContour_y:standard_name = "projection_y_coordinate" ;
                FlowElemContour_y:long_name = "List of y-points forming flow element" ;
        int FlowLink(nFlowLink, nFlowLinkPts) ;
                FlowLink:long_name = "link/interface between two flow elements" ;
        int FlowLinkType(nFlowLink) ;
                FlowLinkType:long_name = "type of flowlink" ;
                FlowLinkType:valid_range = 1, 2 ;
                FlowLinkType:flag_values = 1, 2 ;
                FlowLinkType:flag_meanings = "link_between_1D_flow_elements link_between_2D_flow_elements" ;
        double FlowLink_xu(nFlowLink) ;
                FlowLink_xu:long_name = "Center coordinate of net link (velocity point)." ;
                FlowLink_xu:units = "m" ;
                FlowLink_xu:standard_name = "projection_x_coordinate" ;
        double FlowLink_yu(nFlowLink) ;
                FlowLink_yu:long_name = "Center coordinate of net link (velocity point)." ;
                FlowLink_yu:units = "m" ;
                FlowLink_yu:standard_name = "projection_y_coordinate" ;
        double s1(time, nFlowElem) ;
                s1:coordinates = "FlowElem_xcc FlowElem_ycc" ;
        double ucx(time, nFlowElem) ;
                ucx:coordinates = "FlowElem_xcc FlowElem_ycc" ;
        double ucy(time, nFlowElem) ;
                ucy:coordinates = "FlowElem_xcc FlowElem_ycc" ;
        double unorm(time, nFlowLink) ;
                unorm:standard_name = "normal_velocity" ;
                unorm:units = "m s-1" ;
                unorm:interfaces = "FlowLink" ;
                unorm:coordinates = "FlowLink_xu FlowLink_yu" ;

// global attributes:
                :institution = "Deltares" ;
                :references = "http://www.deltares.nl" ;
                :source = "UNSTRUC v1.0.11.10693:1069, model" ;
                :history = "Created on 2010-03-08T13:23:31+0100, UNSTRUC" ;
                :Conventions = "CF-1.4:Deltares-0.1" ;
data:

 NetNode_x = 1078.99694824, 1068.75195312, 1110.4510498, 1123.6159668,
    1032.6619873, 1023.13500977, 984.9420166, 974.37200928, 936.1550293,
    922.88897705, 886.71002197, 868.85601807, 837.2210083, 812.21697998,
// ...
 time = 10.7142857142857 ;

 FlowElem_xcc = 1800.29010953126, 1827.13454757167, 1892.73565627098,
// ...
 FlowElemContour_x =
  1799.14001465, 1843.04504395, 1796.97290039, 1758.60998535, _, _, _, _, _,
    _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _,
    _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _,
    _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _,
    _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _,
// ...
 FlowLink =
  1, 2,
  2, 9,

D-Flow FM map file with z-layers (concept)

Code Block

netcdf test_map {
dimensions:
        nNetNode = 706 ;
        nNetLink = 1313 ;
        nNetLinkPts = 2 ;
        nFlowElem = 665 ;
        nFlowElemMaxNode = 6 ;
        nFlowElemContourPts = 99 ;
        nFlowLink = 1143 ;
        nFlowLinkPts = 2 ;
        nLayer = 5;
        time = UNLIMITED ; // (1 currently)
variables:
        double NetNode_x(nNetNode) ;
                NetNode_x:units = "m" ;
                NetNode_x:standard_name = "projection_x_coordinate" ;
                NetNode_x:long_name = "netnodal x-coordinate" ;
        double NetNode_y(nNetNode) ;
                NetNode_y:units = "m"

...

Unstructured grid as a net

  • The unstructured grid is a set of net nodes (coordinates) and a set of net links connecting them.
  • Flow data is defined on net cells (naming might change). Cells have a (circum-)center (water level point). The entire cell is defined through its contour line (bounds: NetcellContour_x/y). The contour line contains the coordinates of surrounding net nodes for 2D cells and generated coordinates for 1D channels/manholes/etc.

Examples

...

locationtop
typelist

UNSTRUC net file with 2D cells on lon/lat-grid.

New version (Mar '10) with additional NetLinkType 0 (closed 2D link/thin dams), and netcell (=NetElem) data + boundary data (intended for use in RGFGRID)

Code Block
netcdf courantc_net { dimensions: nNetNode = 178907 ; nNetLink = 363286
 ;
        
nNetLinkPts
 
=
 
2
 
;
     
nBndLink = 14337
NetNode_y:standard_name = "projection_y_coordinate" ;
        
nNetElem
 
=
 
184189
 
;
     NetNode_y:long_name = 
nNetElemMaxNode = 7 ; variables:
"netnodal y-coordinate" ;
        double NetNode_
x
z(nNetNode) ;
        int 
NetNode_x:units = "degrees_east"
NetLink(nNetLink, nNetLinkPts) ;
                
NetNode_x
NetLink:standard_name = "
longitude
netlink" ;
                
NetNode_x
NetLink:long_name = "
netnodal lon-coordinate
link between two netnodes" ;
        
double
int 
NetNode_y
NetLinkType(
nNetNode
nNetLink) ;
                
NetNode_y:units
NetLinkType:long_name = "
degrees_north
type of netlink" ;
                
NetNode_y
NetLinkType:
standard
valid_
name
range =
"latitude"
 0, 2 ;
                
NetNode_y
NetLinkType:
long
flag_
name
values = 
"netnodal lat-coordinate" ; double NetNode_z(nNetNode)
0, 1, 2 ;
         
int
 
NetLink(nNetLink,
 
nNetLinkPts)
 
;
    NetLinkType:flag_meanings = "closed_link_between_2D_nodes link_between_1D_nodes link_between_2D_nodes" ;
       
NetLink:standard_name
 
= "netlink"
double time(time) ;
                
NetLink
time:
long_name
units = "
link
seconds 
between two netnodes
since 1992-08-31 00:00:00" ;
        
int
double 
NetLinkType
FlowElem_xcc(
nNetLink
nFlowElem) ;
                
NetLinkType:long_name
FlowElem_xcc:units = "
type of netlink
m" ;
                
NetLinkType
FlowElem_xcc:
valid
standard_
range
name = 
0, 2
"projection_x_coordinate" ;
                
NetLinkType
FlowElem_xcc:
flag
long_
values
name = "Flow 
0,
element 
1,
circumcenter 
2
x" ;
                
NetLinkType:flag_meanings
FlowElem_xcc:bounds = "
closed_link_between_2D_nodes link_between_1D_nodes link_between_2D_nodes
FlowElemContour_x" ;
        
int
double 
NetElemNode(nNetElem, nNetElemMaxNode
FlowElem_ycc(nFlowElem) ;
                
NetElemNode:long_name
FlowElem_ycc:units = "
Mapping from net cell to net nodes." ;
m" ;
                
int BndLink(nBndLink)
FlowElem_ycc:standard_name = "projection_y_coordinate" ;
                
BndLink
FlowElem_ycc:long_name = "Flow element circumcenter 
"Netlinks that compose the net boundary.
y" ;
                FlowElem_ycc:bounds = "FlowElemContour_y" ;
        
int
double 
NetElemLink
FlowElemContour_x(
nNetElemLink
nFlowElem, 
nNetElemLinkPts
nFlowElemContourPts) ;
                
NetElemLink:long_name
FlowElemContour_x:units = "
link between two netelems
m" ;
// global attributes:

                
:institution
FlowElemContour_x:standard_name = "
Deltares
projection_x_coordinate" ;
                
:references = "http://www.deltares.nl" ;
FlowElemContour_x:long_name = "List of x-points forming flow element" ;
      
:source
 
=
 
"UNSTRUC v1.0.11.10693:1069, model"
double FlowElemContour_y(nFlowElem, nFlowElemContourPts) ;
                FlowElemContour_y:
history
units = "
Created on 2010-03-05T09:41:31+0100, UNSTRUC
m" ;
                
:Conventions
FlowElemContour_y:standard_name = "
CF-1.4:Deltares-0.1" ; data: NetNode_x = 10.7736671537707, 10.775, 10.7783013103449, 10.775, 10.775, 10.80625, 10.7839111680939, 10.80625, 10.8375, 10.80625, 10.80625, // ... NetLink = 23381, 23382, 32338, 32341, // ... NetLinkType = 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 2, 2, 2, 2, 2, 2, 2, 2, // ... NetElemNode = 1, 2, 5, _, _, _, _, 1, 5, 4, _, _, _, _, // ... BndLink = 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, // ...

UNSTRUC map file with 2D cells on lon/lat-grid.

Code Block
netcdf test_map { dimensions:
projection_y_coordinate" ;
                FlowElemContour_y:long_name = "List of y-points forming flow element" ;
        int FlowLink(nFlowLink, nFlowLinkPts) ;
                FlowLink:long_name = "link/interface between two flow elements" ;
        int FlowLinkType(nFlowLink) ;
                FlowLinkType:long_name = "type of flowlink" ;
                FlowLinkType:valid_range = 1, 2 ;
                
nNetNode
FlowLinkType:flag_values = 
178907
1, 2 ;
            
nNetLink = 363472
    FlowLinkType:flag_meanings = "link_between_1D_flow_elements link_between_2D_flow_elements" ;
        
nNetLinkPts = 2
double FlowLink_xu(nFlowLink) ;
         
nNetCell
    
=
 
184324
 
; nNetCellMaxNode = 7
 FlowLink_xu:long_name = "Center coordinate of net link (velocity point)." ;
        
nNetCellContourPts
 
=
 
99
 
;
     
nNetCellLink = 349141
FlowLink_xu:units = "m" ;
       
nNetCellLinkPts
 
=
 
2
 
;
      
time
FlowLink_xu:standard_name = 
UNLIMITED ; // (1 currently) variables:
"projection_x_coordinate" ;
        double 
NetNode
FlowLink_
x
yu(
nNetNode
nFlowLink) ;
                
NetNode
FlowLink_
x
yu:
units
long_name = "
degrees_east
Center coordinate of net link (velocity point)." ;
                
NetNode
FlowLink_
x
yu:
standard_name
units = "
longitude
m" ;
                
NetNode
FlowLink_
x
yu:
long
standard_name = "
netnodal lon-
projection_y_coordinate" ;
        double 
NetNode
FlowElem_
y(nNetNode
zc(nFlowElem, nLayer) ;
                
NetNode
FlowElem_
y
zc:
units
long_name = "
degrees_north" ; NetNode_y:standard_name = "latitude
Vertical coordinates of layers underlying each FlowElement." ;
                
NetNode
FlowElem_
y
zcc:
long_name
units = "
netnodal lat-coordinate
m" ;
        
double NetNode_z(nNetNode) ; int NetLink(nNetLink, nNetLinkPts) ;
        FlowElem_zc:layer_type = "z" ; // see other example for sigma
                
NetLink
FlowElem_zc:standard_name = "
netlink
???" ;
        double 
FlowElem_bl(nFlowElem) ;
   
NetLink:long_name
 
=
 
"link
 
between
 
two
 
netnodes"
 
;
       FlowElem_bl:units 
int NetLinkType(nNetLink)
= "m" ;
                
NetLinkType
FlowElem_bl:
standard
long_name = "
netlink_type
bottom level" ;
                
NetLinkType
FlowElem_bl:
long
standard_name = "
type of netlink
sea_floor_depth" ;
 // wrt geoid, maar doen wij dat wel zo?
       
NetLinkType:valid_range
 
=
double 
1
s1(time, 
2
nFlowElem) ;
                
NetLinkType:flag_values = 1, 2
s1:coordinates = "FlowElem_xcc FlowElem_ycc" ;
        double ucx(time, nFlowElem, nLayer) ;
                
NetLinkType
ucx:
flag_meanings
coordinates = "
link_between_1D_nodes link_between_2D_nodes
FlowElem_xcc FlowElem_ycc" ;
        double 
time
ucy(time, nFlowElem, nLayer) ;
                
time
ucy:
units
coordinates = "
seconds since 2010-01-01 00:00:00
FlowElem_xcc FlowElem_ycc FlowElem_zcc" ;
double NetCell_xc(nNetCell) ; NetCell_xc:units = "degrees_east" ;
 // AvD: Mogen de z-coordinaten hier ook nog bij? (nFlowElem mapt naar x+y, nLayer naar z)

D-Flow FM map file with sigma coords (concept)

Code Block

netcdf test_map {
dimensions:
        nNetNode = 706 ;
        
NetCell_xc:standard_name
nNetLink = 
"longitude"
1313 ;
        nNetLinkPts = 2 ;
        
NetCell_xc:long_name
nFlowElem = 
"Net
665 
cell
;
 
circumcenter
 
x"
 
;
     nFlowElemMaxNode = 6 ;
        
NetCell_xc:bounds
nFlowElemContourPts = 
"NetCellContour_x"
99 ;
        nFlowLink 
double NetCell_yc(nNetCell)
= 1143 ;
        nFlowLinkPts = 2 ;
        
NetCell_yc:units
nLayer = 
"degrees_north"
5;
        time = UNLIMITED ; // (1 currently)
variables:
     
NetCell_yc:standard_name = "latitude"
   double FlowElem_bl(nFlowElem) ;
                
NetCell
FlowElem_
yc
bl:
long_name
units = "
Net cell circumcenter y
m" ;
                
NetCell
FlowElem_
yc
bl:
bounds
long_name = "
NetCellContour_y
bottom level" ;
 
double
 
NetCellContour_x(nNetCell,
 
nNetCellContourPts)
 
;
            
NetCellContour_x:units
FlowElem_bl:standard_name = "
degrees
sea_floor_
east
depth" ;
 // wrt geoid, maar doen wij dat wel zo?
        double 
NetCellContour_x:standard_name = "longitude"
FlowElem_zc(nFlowElem, nLayer) ;
                
NetCellContour
FlowElem_
x
zc:long_name = "
List
Vertical coordinates of 
x-points forming netcell
layers underlying each FlowElement." ;
   
double
 
NetCellContour_y(nNetCell,
 
nNetCellContourPts)
 
;
          
NetCellContour_y
FlowElem_zc:units = "
degrees_north
" ;
                
NetCellContour
FlowElem_
y
zc:standard_name = "
latitude
ocean_sigma_coordinate" ;
                
NetCellContour
FlowElem_
y
zc:
long
formula_
name
terms = "
List of y-points forming netcell" ;
sigma: FlowElem_zc eta: s1 depth: FlowElem_bl" ; // mooie oplossing: bottomlevel (en sigma/zc) mag tijdsonafhankelijk zijn
        
int
double 
NetCellNode
s1(
nNetCell
time, 
nNetCellMaxNode
nFlowElem) ;
                s1:coordinates = "FlowElem_xcc FlowElem_ycc" ;
        
NetCellNode:standard_name = "netcell_node"
double ucx(time, nFlowElem, nLayer) ;
                
NetCellNode
ucx:
long_name
coordinates = "
Mapping from net cell to net nodes (first column is node count, will change)." ;
FlowElem_xcc FlowElem_ycc" ;
// ...

D-Flow FM map file with subdomains for variable nr of layers (flexible layers, concept)

Code Block

netcdf test_map {
dimensions:
        nNetNode1 = 106 ;
        
NetCellNode:netcell_coords
nNetLink1 = 
"NetCell_xc NetCell_yc"
313 ;
        
int NetCellLink(nNetCellLink, nNetCellLinkPts)
nNetLinkPts1 = 2 ;
        
double s1(time, nNetCell)
nFlowElem1 = 165 ;
        
s1:cell_methods
nFlowElemMaxNode1 = 
"area: mean"
6 ;
        nFlowElemContourPts1 = 99 ;
       
s1:coordinates
 
= "NetCell_xc Netcell_yc"
nFlowLink1 = 343 ;
        nFlowLinkPts1 = 2 ;
        
s1:grid_mapping
nLayer1 = 
"crs"
5;
        
double ucx(time, nNetCell)
nNetNode2 = 486 ;
        nNetLink2 = 673 ;
        
ucx:cell_methods
nNetLinkPts2 = 
"area: point"
2 ;
        nFlowElem2 = 578 ;
     
ucx:coordinates
   nFlowElemMaxNode2 = 
"NetCell_xc Netcell_yc"
6 ;
        nFlowElemContourPts2 = 99 ;
        nFlowLink2 
ucx:grid_mapping
= 
"crs"
840 ;
        
double ucy(time, nNetCell)
nFlowLinkPts2 = 2 ;
        nLayer2 = 10 ;
     
ucy:cell_methods
 
=
 
"area: point" ;
 // ... idem for 3 and 4
        
ucy:coordinates
nSubdomain = 
"NetCell_xc Netcell_yc"
4 ;
        nSubdomainLink = 3 ; // for example: 4 
ucy:grid_mapping = "crs" ;
subdoms in one row
        nSubdomainLinkPts 
int
= 
crs
2 ;
        time = UNLIMITED ; // (1 currently)
variables:
       
crs:grid_mapping_name = "latitude_longitude"
 double NetNode_x_1(nNetNode1) ;
                
crs:longitude
NetNode_
of_prime_meridian
x_1:units = 
0.f
"m" ;
                
crs:semi_major_axis = 6378137.f
NetNode_x_1:standard_name = "projection_x_coordinate" ;
                
crs:inverse_flattening = 298.2572f
NetNode_x_1:long_name = "netnodal x-coordinate" ;
// 
global attributes:
...
        
:institution = "Deltares"
double NetNode_x_2(nNetNode1) ;
                NetNode_x_2:
references
units = "
http://www.deltares.nl
m" ;
                
:source = "UNSTRUC v1.0.11.10021:1007, model csmcourant
NetNode_x_2:standard_name = "projection_x_coordinate" ;
                
:history
NetNode_x_2:long_name = "
Created
netnodal 
on 2010-01-06T15:35:40+0100, UNSTRUC
x-coordinate" ;

        double s1_1(time, nFlowElem_1) ;
            
:Conventions
 
=
 
"CF-1.4/Deltares-0.1"
 
; data: NetNode_x = 10.7736671537707, 10.775, 10.7783013103449, 10.775, 10.775,
 s1_1:coordinates = "FlowElem_xcc_1 FlowElem_ycc_1" ;
    
10.80625,
 
10.7839111680939,
 
10.80625,
 
10.8375, 10.80625, 10.80625, // ... NetLink = 80895, 80882, 167568, 167573, 108907, 109422, // ... NetLinkType = 1, 1, 1, 1, 1, 1, 1, 1,
 double s1_2(time, nFlowElem_2) ;
                s1_2:coordinates = "FlowElem_xcc_2 FlowElem_ycc_2" ;
// ...
  
time
 
=
 
0.0300439515169901
 
;
 
NetCell_xc
 
=
 
10.7743335768854, 10.7743335913705, 10.7906249344082, NetCellContour_x = 10.7736671537707, 10.775, 10.775, _, _, _, _, _, // ... 10.775, 10.7783013103449, 10.80625, 10.80625, 10.775, _, _, _, _, _, _, _,
integer SubdomainLink (nSubdomainLink, nSubdomainLinkPts) ;
                SubdomainLink:long_name = "Meta link between subdomain numbers."
// ..
. NetCellNode = 3, 1, 2, 5, _, _, _, 3, 1, 5, 4, _, _, _, 5, 2, 3, 6, 8, 5, _, // ... NetCellLink = 1, 2, 1, 3, // ... s1 = 4.78405906502741e-001, 5.63697801327623e-001, 2.44636456454523e-001, 7.54911502823542e-001, 2.32821367302938e-001, 1.96039340036838e-001, 5.73297867243609e-001, 2.28008030376163e-001, 3.37509917682617e-001, // ... crs = 4326 ;
 randlinks tussen subdomains kunnen nuttig zijn, maar zijn ws niet nodig voor visualisatie?

        integer Subdomain ;
                Subdomain:interfaces = "SubdomainLink"

data:

 SubdomainLink =
  1, 2,
  2, 3,
  3, 4 ;

 Subdomain = 4; // weinig bijzonders.