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 ;

...

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
nNetElemLink1D = 
178907
65 ;
        
nNetLink
nNetElemLink = 
363286
1078 ;
        
nNetLinkPts
nNetElemLinkPts = 2 ;
        
nBndLink
nFlowLink = 
14337
1143 ;
        
nNetElem
nFlowLinkPts = 
184189
2 ;
        
nNetElemMaxNode
time = 
7
UNLIMITED ; // (1 currently)
variables:
        double NetNode_x(nNetNode) ;
                NetNode_x:units = "
degrees_east
m" ;
                NetNode_x:standard_name = "
longitude
projection_x_coordinate" ;
                NetNode_x:long_name = "netnodal 
lon
x-coordinate" ;
        double NetNode_y(nNetNode) ;
                NetNode_y:units = "
degrees_north
m" ;
                NetNode_y:standard_name = "
latitude
projection_y_coordinate" ;
                NetNode_y:long_name = "netnodal 
lat
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
, nNetElemMaxNode) ;
                
BndLink
NetElemNode:long_name = "
Netlinks
Mapping from 
that
net 
compose
cell 
the
to net 
boundary
nodes." ;
        int 
NetElemLink(nNetElemLink, nNetElemLinkPts
BndLink(nBndLink) ;
                
NetElemLink
BndLink:long_name = "
link
Netlinks 
between
that 
two
compose 
netelems" ; // global attributes: :institution = "Deltares
the net boundary." ;
        
:references = "http://www.deltares.nl"
double time(time) ;
                time:
source
units = "
UNSTRUC v1.0.11.10693:1069, model
seconds since 1992-08-31 00:00:00" ;
        double FlowElem_xcc(nFlowElem) ;
            
:history
 
=
 
"Created
 
on 2010-03-05T09:41:31+0100, UNSTRUC
 FlowElem_xcc:units = "m" ;
                
:Conventions
FlowElem_xcc:standard_name = "
CF-1.4:Deltares-0.1
projection_x_coordinate" ;
data: NetNode_x = 10.7736671537707, 10.775, 10.7783013103449, 10.775, 10.775,
                FlowElem_xcc:long_name = "Flow element circumcenter x" ;
    
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:
            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" ;
        
nNetNode = 178907
double FlowElemContour_x(nFlowElem, nFlowElemContourPts) ;
        
nNetLink
 
=
 
363472
 
;
     
nNetLinkPts
FlowElemContour_x:units = 
2
"m" ;
        
nNetCell
 
=
 
184324
 
;
     
nNetCellMaxNode
FlowElemContour_x:standard_name = 
7
"projection_x_coordinate" ;
         
nNetCellContourPts
  
=
 
99
 
;
   FlowElemContour_x:long_name = "List of x-points 
nNetCellLink
forming 
=
flow 
349141
element" ;
        
nNetCellLinkPts = 2
double FlowElemContour_y(nFlowElem, nFlowElemContourPts) ;
 
time
 
=
 
UNLIMITED
 
;
 
//
 
(1
 
currently) variables:
        
double
 
NetNode_x(nNetNode)
FlowElemContour_y:units = "m" ;
                
NetNode
FlowElemContour_
x
y:
units
standard_name = "
degrees
projection_y_
east
coordinate" ;
                
NetNode
FlowElemContour_
x
y:
standard
long_name = "
longitude"
List of y-points forming flow element" ;
        int FlowLink(nFlowLink, nFlowLinkPts) ;
                
NetNode_x
FlowLink:long_name =
"netnodal lon-coordinate
 "link/interface between two flow elements" ;
        
double
int 
NetNode_y
FlowLinkType(
nNetNode
nFlowLink) ;
                
NetNode_y:units
FlowLinkType:long_name = "
degrees_north
type of flowlink" ;
                
NetNode_y
FlowLinkType:
standard
valid_
name
range =
"latitude"
 1, 2 ;
                
NetNode_y
FlowLinkType:
long
flag_
name
values = 
"netnodal lat-coordinate"
1, 2 ;
                FlowLinkType:flag_meanings = 
double NetNode_z(nNetNode)
"link_between_1D_flow_elements link_between_2D_flow_elements" ;
        
int
double 
NetLink(nNetLink, nNetLinkPts
FlowLink_xu(nFlowLink) ;
                
NetLink
FlowLink_xu:
standard
long_name = "
netlink
Center coordinate of net link (velocity point)." ;
                
NetLink:long_name
FlowLink_xu:units = "
link between two netnodes
m" ;
        
int
 
NetLinkType(nNetLink)
 
;
      FlowLink_xu:standard_name = "projection_x_coordinate" ;
       
NetLinkType:standard_name
 
=
double 
"netlink_type"
FlowLink_yu(nFlowLink) ;
                
NetLinkType
FlowLink_yu:long_name = "
type
Center coordinate of
netlink
 net link (velocity point)." ;
                
NetLinkType:valid_range
FlowLink_yu:units = 
1, 2
"m" ;
                
NetLinkType
FlowLink_yu:
flag
standard_
values
name =
1, 2
 "projection_y_coordinate" ;
        double s1(time, nFlowElem) ;
                
NetLinkType
s1:
flag_meanings
coordinates = "
link_between_1D_nodes link_between_2D_nodes
FlowElem_xcc FlowElem_ycc" ;
        double 
time
ucx(time, nFlowElem) ;
                
time
ucx:
units
coordinates = "
seconds since 2010-01-01 00:00:00
FlowElem_xcc FlowElem_ycc" ;
        double 
NetCell_xc(nNetCell
ucy(time, nFlowElem) ;
                
NetCell_xc
ucy:
units
coordinates = "
degrees_east"
FlowElem_xcc FlowElem_ycc" ;
        double unorm(time, nFlowLink) ;
                
NetCell_xc
unorm:standard_name = "
longitude
normal_velocity" ;
                
NetCell_xc:long_name
unorm:units = "
Net cell circumcenter x
m s-1" ;
                
NetCell_xc
unorm:
bounds
interfaces = "
NetCellContour_x
FlowLink" ;
                unorm:coordinates = 
double NetCell_yc(nNetCell) ;
"FlowLink_xu FlowLink_yu" ;

// global attributes:
                
NetCell_yc
:
units
institution = "
degrees_north
Deltares" ;
                
NetCell_yc:standard_name
:references = "
latitude
http://www.deltares.nl" ;
                
NetCell_yc:long_name
:source = "
Net cell circumcenter y
UNSTRUC v1.0.11.10693:1069, model" ;
                
NetCell_yc
:
bounds
history = "
NetCellContour_y
Created on 2010-03-08T13:23:31+0100, UNSTRUC" ;
        
double
 
NetCellContour_x(nNetCell,
 
nNetCellContourPts)
 
;
     :Conventions = "CF-1.4:Deltares-0.1" ;
data:

 NetNode_x = 1078.99694824, 1068.75195312, 
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"
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 ;
        
int NetCellLink(nNetCellLink, nNetCellLinkPts)
nNetLinkPts = 2 ;
        
double s1(time, nNetCell)
nFlowElem = 665 ;
        nFlowElemMaxNode = 6 ;
        
s1:cell_methods
nFlowElemContourPts = 
"area: mean"
99 ;
        nFlowLink = 1143 ;
        
s1:coordinates
nFlowLinkPts = 
"NetCell_xc Netcell_yc"
2 ;
        nLayer = 5;
        
s1:grid_mapping
time =
"crs" ;
 UNLIMITED ; // (1 currently)
variables:
        double 
ucx(time, nNetCell
NetNode_x(nNetNode) ;
                
ucx:cell_methods
NetNode_x:units = "
area: point
m" ;
                
ucx:coordinates
NetNode_x:standard_name = "
NetCell
projection_
xc Netcell
x_
yc
coordinate" ;
                
ucx
NetNode_x:
grid
long_
mapping
name = "
crs
netnodal x-coordinate" ;
        double 
ucy(time, nNetCell
NetNode_y(nNetNode) ;
                
ucy:cell_methods
NetNode_y:units = "
area: point
m" ;
                
ucy:coordinates
NetNode_y:standard_name = "
NetCell
projection_
xc Netcell
y_
yc
coordinate" ;
                
ucy
NetNode_y:
grid
long_
mapping
name = "
crs"
netnodal y-coordinate" ;
        double NetNode_z(nNetNode) ;
        int
crs
 NetLink(nNetLink, nNetLinkPts) ;
                
crs
NetLink:
grid_mapping
standard_name = "
latitude_longitude
netlink" ;
                
crs
NetLink:
longitude_of_prime_meridian
long_name = 
0.f ;
"link between two netnodes" ;
        
crs:semi_major_axis = 6378137.f
int NetLinkType(nNetLink) ;
                
crs
NetLinkType:
inverse
long_
flattening
name = 
298.2572f ; // global attributes:
"type of netlink" ;
                NetLinkType:
institution
valid_range =
"Deltares"
 0, 2 ;
                NetLinkType:
references
flag_values =
"http://www.deltares.nl"
 0, 1, 2 ;
                NetLinkType:
source
flag_meanings = "
UNSTRUC v1.0.11.10021:1007, model csmcourant
closed_link_between_2D_nodes link_between_1D_nodes link_between_2D_nodes" ;
        
:history = "Created on 2010-01-06T15:35:40+0100, UNSTRUC"
double time(time) ;
                time:
Conventions
units = "
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 ;

UNSTRUC map file with staggered solution variables (concept)

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

Code Block
netcdf test_map { dimensions:
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" ;
                
nNetNode
FlowElem_ycc:long_name = 
706
"Flow 
;
element circumcenter y" ;
     
nNetLink
 
=
 
1313
 
;
        
nNetLinkPts
FlowElem_ycc:bounds = 
2
"FlowElemContour_y" ;
        
nBndLink = 104
double FlowElemContour_x(nFlowElem, nFlowElemContourPts) ;
     
nNetElem
 
=
 
610
 
;
        
nNetElemMaxNode
FlowElemContour_x:units = 
7
"m" ;
        
nFlowElem
 
=
 
665
 
;
     
nFlowElemMaxNode
FlowElemContour_x:standard_name = 
6
"projection_x_coordinate" ;
          
nFlowElemContourPts
 
=
 
99
 
;
   FlowElemContour_x:long_name = "List of x-points 
nNetElemLink1D
forming 
=
flow 
65
element" ;
        
nNetElemLink = 1078
double FlowElemContour_y(nFlowElem, nFlowElemContourPts) ;
        
nNetElemLinkPts
 
=
 
2
 
;
     
nFlowLink
FlowElemContour_y:units = 
1143
"m" ;
         
nFlowLinkPts
 
=
 
2
 
;
    FlowElemContour_y:standard_name = "projection_y_coordinate" ;
 
time
 
=
 
UNLIMITED
 
;
 
//
 
(1
 
currently) variables:
        
double
 
NetNode_x(nNetNode) ;
FlowElemContour_y:long_name = "List of y-points forming flow element" ;
        
NetNode_x:units = "m"
int FlowLink(nFlowLink, nFlowLinkPts) ;
                
NetNode_x
FlowLink:
standard
long_name = "
projection_x_coordinate
link/interface between two flow elements" ;
        int FlowLinkType(nFlowLink) ;
       
NetNode_x:long_name
 
=
 
"netnodal
 
x-coordinate"
 
;
     FlowLinkType:long_name = "type 
double NetNode_y(nNetNode)
of flowlink" ;
                
NetNode_y:units
FlowLinkType:valid_range =
"m"
 1, 2 ;
                
NetNode_y
FlowLinkType:
standard
flag_
name
values =
"projection_y_coordinate"
 1, 2 ;
                
NetNode_y
FlowLinkType:
long
flag_
name
meanings = "
netnodal y-coordinate
link_between_1D_flow_elements link_between_2D_flow_elements" ;
        double 
NetNode
FlowLink_
z
xu(
nNetNode
nFlowLink) ;
                FlowLink_xu:long_name = "Center coordinate of net 
int
link 
NetLink
(
nNetLink,
velocity 
nNetLinkPts
point)." ;
                
NetLink:standard_name
FlowLink_xu:units = "
netlink
m" ;
                
NetLink
FlowLink_xu:
long
standard_name = "
link between two netnodes
projection_x_coordinate" ;
        
int
double 
NetLinkType
FlowLink_yu(
nNetLink
nFlowLink) ;
                
NetLinkType
FlowLink_yu:long_name = "
type
Center coordinate of
netlink
 net link (velocity point)." ;
                
NetLinkType:valid_range
FlowLink_yu:units = 
0, 2
"m" ;
                FlowLink_yu:standard_name = "projection_y_coordinate" ;
        double 
NetLinkType:flag_values = 0, 1, 2
FlowElem_zc(nFlowElem, nLayer) ;
                
NetLinkType
FlowElem_zc:
flag
long_
meanings
name = "
closed_link_between_2D_nodes link_between_1D_nodes link_between_2D_nodes
Vertical coordinates of layers underlying each FlowElement." ;
      
int
 
NetElemNode(nNetElem,
 
nNetElemMaxNode)
 
;
       FlowElem_zcc:units = "m" ;
      
NetElemNode:long_name
 
=
 
"Mapping
 
from
 
net
 
cell
 
to
 
net
 
nodes."
 
; int BndLink(nBndLink) ;
 FlowElem_zc:layer_type = "z" ; // see other example for sigma
                
BndLink
FlowElem_zc:
long
standard_name = "
Netlinks that compose the net boundary.
???" ;
        double 
time
FlowElem_bl(
time
nFlowElem) ;
                
time:units = "seconds since 1992-08-31 00:00:00" ; double FlowElem_xc(nFlowElem)
FlowElem_bl:units = "m" ;
                FlowElem_
xc
bl:
units
long_name = "
m
bottom level" ;
                FlowElem_
xc
bl:standard_name = "
projection
sea_
x
floor_
coordinate"
depth" ; // wrt geoid, maar doen wij dat wel zo?
        double s1(time, nFlowElem) ;
                s1:coordinates = "FlowElem_
xc:long_name = "Flow element circumcenter x"
xcc FlowElem_ycc" ;
        double ucx(time, nFlowElem, nLayer) ;
                
FlowElem_xc
ucx:
bounds
coordinates = "
FlowElemContour_x
FlowElem_xcc FlowElem_ycc" ;
        double 
FlowElem_yc(nFlowElem
ucy(time, nFlowElem, nLayer) ;
                
FlowElem_yc
ucy:
units
coordinates = "
m
FlowElem_xcc FlowElem_ycc FlowElem_zcc" ;
 // AvD: Mogen de z-coordinaten hier ook 
FlowElem_yc:standard_name = "projection_y_coordinate" ;
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:
        
FlowElem_yc:long_name
nNetNode = 
"Flow
706 
element
;
 
circumcenter
 
y"
 
;
     nNetLink = 1313 ;
        
FlowElem_yc:bounds
nNetLinkPts = 
"FlowElemContour_y"
2 ;
        
double FlowElemContour_x(nFlowElem, nFlowElemContourPts)
nFlowElem = 665 ;
        nFlowElemMaxNode = 6 ;
        
FlowElemContour_x:units
nFlowElemContourPts = 
"m"
99 ;
        nFlowLink = 1143 ;
        
FlowElemContour_x:standard_name
nFlowLinkPts = 
"projection_x_coordinate"
2 ;
        nLayer = 5;
      
FlowElemContour_x:long_name
 
=
 
"List
time 
of
= 
x-points
UNLIMITED 
forming
; 
flow element" ;
// (1 currently)
variables:
        double 
FlowElemContour
FlowElem_
y
bl(nFlowElem
, nFlowElemContourPts
) ;
                
FlowElemContour
FlowElem_
y
bl:units = "m" ;
                
FlowElemContour
FlowElem_
y
bl:
standard
long_name = "
projection_y_coordinate
bottom level" ;
                
FlowElemContour
FlowElem_
y
bl:
long
standard_name = 
"List of y-points forming flow element" ;
"sea_floor_depth" ; // wrt geoid, maar doen wij dat wel zo?
        
int
double 
FlowLink
FlowElem_zc(
nFlowLink
nFlowElem, 
nFlowLinkPts
nLayer) ;
                
FlowLink
FlowElem_zc:long_name = "
link/interface between two flow elements
Vertical coordinates of layers underlying each FlowElement." ;
                FlowElem_zc:units 
int FlowLinkType(nFlowLink)
= "" ;
                
FlowLinkType
FlowElem_zc:
long
standard_name = "
type of flowlink
ocean_sigma_coordinate" ;
                
FlowLinkType
FlowElem_zc:
valid
formula_
range
terms =
1, 2 ;
 "sigma: FlowElem_zc eta: s1 depth: FlowElem_bl" ; // mooie oplossing: bottomlevel (en sigma/zc) mag tijdsonafhankelijk zijn
       
FlowLinkType:flag_values
 
=
double 
1
s1(time, 
2
nFlowElem) ;
                
FlowLinkType
s1:
flag_meanings
coordinates = "
link_between_1D_flow_elements link_between_2D_flow_elements
FlowElem_xcc FlowElem_ycc" ;
        double 
FlowLink_xe(nFlowLink
ucx(time, nFlowElem, nLayer) ;
                
FlowLink_xe:long_name
ucx:coordinates = "FlowElem_xcc FlowElem_ycc"
Center
 
coordinate of net link (velocity point)." ; FlowLink_xe:units = "m" ;
;
// ...

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

Code Block

netcdf test_map {
dimensions:
        nNetNode1 = 106 ;
        
FlowLink_xe:standard_name
nNetLink1 = 
"projection_x_coordinate"
313 ;
        nNetLinkPts1 
double FlowLink_ye(nFlowLink)
= 2 ;
        nFlowElem1 = 165 ;
     
FlowLink_ye:long_name
 
=
 
"Center
 
coordinate
nFlowElemMaxNode1 
of
= 
net
6 
link
;
 
(velocity
 
point)."
 
;
     nFlowElemContourPts1 = 99 ;
        
FlowLink_ye:units
nFlowLink1 = 
"m"
343 ;
        nFlowLinkPts1 = 2 ;
        
FlowLink_ye:standard_name
nLayer1 = 
"projection_y_coordinate"
5;
        
double s1(time, nFlowElem)
nNetNode2 = 486 ;
        nNetLink2 = 673 ;
        
s1:coordinates
nNetLinkPts2 = 
"FlowCell_xc FlowCell_yc"
2 ;
        
double ucx(time, nFlowElem)
nFlowElem2 = 578 ;
        nFlowElemMaxNode2 = 6 ;
        
ucx:coordinates
nFlowElemContourPts2 = 
"FlowCell_xc FlowCell_yc"
99 ;
        
double ucy(time, nFlowElem)
nFlowLink2 = 840 ;
        nFlowLinkPts2 = 2 ;
        
ucy:coordinates
nLayer2 = 
"FlowCell_xc FlowCell_yc"
10 ;
        // ... idem 
double unorm(time, nFlowLink) ;
for 3 and 4
        nSubdomain = 4 ;
        
unorm:standard_name
nSubdomainLink = 
"normal_velocity"
3 ;
 // for example: 4 subdoms in one row
        
unorm:units
nSubdomainLinkPts = 
"m s-1"
2 ;
        time = UNLIMITED ; // (1 currently)
variables:
        
unorm:interfaces = "FlowLink"
double NetNode_x_1(nNetNode1) ;
                
unorm:coordinates
NetNode_x_1:units = "
FlowLink_xe FlowLink_ye
m" ;
// global attributes:

                
:institution
NetNode_x_1:standard_name = "
Deltares
projection_x_coordinate" ;
                
:references
NetNode_x_1:long_name = "
http://www.deltares.nl" ;
netnodal x-coordinate" ;
// ...
     
:source
 
=
 
"UNSTRUC v1.0.11.10693:1069, model"
 double NetNode_x_2(nNetNode1) ;
                NetNode_x_2:
history
units = "
Created on 2010-03-08T13:23:31+0100, UNSTRUC
m" ;
                
:Conventions
NetNode_x_2:standard_name = "
CF-1.4:Deltares-0.1
projection_x_coordinate" ;
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_xc = 1800.29010953126, 1827.13454757167, 1892.73565627098, // ... FlowElemContour_x = 1799.14001465, 1843.04504395, 1796.97290039, 1758.60998535, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, // ... FlowLink
                NetNode_x_2:long_name = "netnodal x-coordinate" ;

        double s1_1(time, nFlowElem_1) ;
                s1_1:coordinates = "FlowElem_xcc_1 FlowElem_ycc_1" ;
        double s1_2(time, nFlowElem_2) ;
                s1_2:coordinates = "FlowElem_xcc_2 FlowElem_ycc_2" ;
// ...
        integer SubdomainLink (nSubdomainLink, nSubdomainLinkPts) ;
                SubdomainLink:long_name = "Meta link between subdomain numbers."
// .. randlinks tussen subdomains kunnen nuttig zijn, maar zijn ws niet nodig voor visualisatie?

        integer Subdomain ;
                Subdomain:interfaces = "SubdomainLink"

data:

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

 Subdomain = 4; // weinig bijzonders.