NetCDF Unstrukturiertes Gitter mit SubGrid: Unterschied zwischen den Versionen
Aus BAWiki
imported>Lang Guenther |
imported>Lang Guenther |
||
Zeile 166: | Zeile 166: | ||
====(optional) Kantenverzeichnis der Polygone==== | ====(optional) Kantenverzeichnis der Polygone==== | ||
Für UnTRIM<sup>2</sup> nicht erforderlich. | Für UnTRIM<sup>2</sup> nicht erforderlich. | ||
====Polygonverzeichnis der Kanten==== | ====(optional) Polygonverzeichnis der Kanten==== | ||
Für UnTRIM<sup>2</sup> nicht erforderlich. | Für UnTRIM<sup>2</sup> nicht erforderlich. | ||
Version vom 13. Januar 2011, 17:16 Uhr
Kurze Beschreibung
Ein aus beliebigen Polygonen (Dreiecke und Vierecke) aufgebautes Gitter wird beschrieben. Zusätzlich sind typische Daten des SubGrid vorhanden. Die Dateitypen hierfür sind utrsub_grid.dat (Berechnungsgitter mit SubGrid-Tiefenklassen) und pltsub_grid.upi (Hilfsgitter für Postprocessoren, Plot-SubGrid). Die Speicherung von Daten auf diesem Gitter, z. B. der Tiefe (Bathymetrie), wird an anderer Stelle beschrieben (siehe NetCDF Synoptische Daten im unstrukturierten Gitter mit SubGrid). Ebenso werden hier keine Informationen über offene und geschlossene Kanten oder Positionen zum Einsteuern von Randwerten aufgeführt. Es wird ausschließlich die Struktur (Topologie) des Gitters beschrieben.
Die Beschreibung wurde vollständig für die staggered data Positionen node, edge und poly gestaltet.
Inhalt der Datei
Dimensionen
- Siehe NetCDF Unstrukturiertes Gitter, Abschnitt "Dimensionen".
- Zusätzlich zu den dort angegebenen Dimensionen werden noch benötigt:
- Tiefenklassen für den Berechnungskern (kein Gitter):
- dimensions
- nMesh2_subedgedepth = number of sub edge depth classes
- nMesh2_subpolydepth = number of sub polygon depth classes
- nMaxMesh2_edge_subedgedepth = maximum number of sub depth classes along a computational edge
- nMaxMesh2_poly_subpolydepth = maximum number of sub depth classes within a computational polygon
- Anmerkungen:
- Das mathematische SubGrid-Modellverfahren benötigt keinerlei geometrische Informationen hinsichtlich der Orte, an denen bestimmte Tiefen vorhanden sind.
- Es genügt, die Tiefenverteilung innerhalb eines Berechnungspolygons bzw. entlang einer Berechnungskante zu kennen.
- Die Informationen zur Tiefenverteilung werden in dem mathematischen SubGrid-Modellverfahren ausschließlich in integraler Weise berücksichtigt - Integral über das Berechnungspolygon bzw. über die Berechnungskante.
- SubGrid-spezifische Daten des Modellverfahrens, wie z. B. die zeitvariable Tiefenverteilung, werden von dem Verfahren ausschließlich für die o. g. Tiefenklassen vorgehalten und ggf. auf Datei geschrieben.
- dimensions
- Hilfsgitter für Postprocessoren, Plot-SubGrid
- dimensions:
- nSubMesh2_node = number of nodes in sub grid ;
- nSubMesh2_edge = number of edges in sub grid ;
- nSubMesh2_poly = number of polygons in sub grid ;
- nMaxSubMesh2_edge = maximum number of sub edges along an edge ;
- nMaxSubMesh2_poly = maximum number of sub polygons within a polygon ;
- nMaxSubMesh2_poly_nodes = maximum number of nodes within a subpolygon ;
- Anmerkungen:
- Alle Angaben zur geometrischen Konkretisierung der Tiefenverteilung stellen jeweils nur eine mögliche Realisierung der gegebenen Tiefenverteilung im Berechnungspolygon oder auf Berechnungskanten dar. Diese müssen daher, aus Sicht des SubGrid-Modellverfahrens, in gewisser Weise als willkürlich bezeichnet werden.
- Die zusätzlichen geometrischen Informationen werden i. d. R. zur korrekten Analyse der SubGrid-Berechnungsergebnisse nicht benötigt. Sie stellen vielmehr Hilfsinformationen zur quasi-deterministischen Visualisierung der Ergebnisse des SubGrid-Modellverfahrens dar.
- dimensions:
- Tiefenklassen für den Berechnungskern (kein Gitter):
Lokale Koordinaten
Berechnungsgitter
- Siehe NetCDF Unstrukturiertes Gitter, Abschnitt "Lokale Koordinaten".
- Alle Variablen können in identischer Weise deklariert werden.
Plot-SubGrid
In diesem Entwurf wird das Plot-SubGrid wie ein Berechnungsgitter beschrieben, auch wenn es hinsichtlich seiner topologischen Eigenschaften nicht alle Nachbarschaftsbeziehungen eines Berechnungsgitters aufweisen muss.
SubKnoten
- double SubMesh2_node_x(nSubMesh2_node) ;
- SubMesh2_node_x:standard_name = "projection_x_coordinate" ;
- SubMesh2_node_x:long_name = "x-coordinate of 2D mesh sub grid nodes" ;
- SubMesh2_node_x:units = "m" ;
- double Mesh2_node_y(nSubMesh2_node) ;
- SubMesh2_node_y:standard_name = "projection_y_coordinate" ;
- SubMesh2_node_y:long_name = "y-coordinate of 2D mesh sub grid nodes" ;
- SubMesh2_node_y:units = "m" ;
- double SubMesh2_node_x(nSubMesh2_node) ;
SubKanten
- double SubMesh2_edge_x(nSubMesh2_edge) ;
- SubMesh2_edge_x:standard_name = "projection_x_coordinate" ;
- SubMesh2_edge_x:long_name = "x-coordinate of 2D mesh sub grid edges, e.g. center of sub edge" ;
- SubMesh2_edge_x:units = "m" ;
- SubMesh2_edge_x:bounds = "SubMesh2_edge_x_bnd"
- double SubMesh2_edge_y(nSubMesh2_edge) ;
- SubMesh2_edge_y:standard_name = "projection_y_coordinate" ;
- SubMesh2_edge_y:long_name = "y-coordinate of 2D mesh sub grid edges, e.g. center of sub edge" ;
- SubMesh2_edge_y:units = "m" ;
- SubMesh2_edge_y:bounds = "SubMesh2_edge_y_bnd"
- double SubMesh2_edge_x(nSubMesh2_edge) ;
SubPolygone
- double SubMesh2_poly_x(nSubMesh2_poly) ;
- SubMesh2_poly_x:standard_name = "projection_x_coordinate" ;
- SubMesh2_poly_x:long_name = "x-coordinate of 2D mesh sub polygons, e.g. any position within sub polygon" ;
- SubMesh2_poly_x:units = "m" ;
- SubMesh2_poly_x:bounds = "SubMesh2_poly_x_bnd"
- double SubMesh2_poly_y(nSubMesh2_poly) ;
- SubMesh2_poly_y:standard_name = "projection_y_coordinate" ;
- SubMesh2_poly_y:long_name = "y-coordinate of 2D mesh sub polygons, e.g. any position within sub polygon" ;
- SubMesh2_poly_y:units = "m" ;
- SubMesh2_poly_y:bounds = "SubMesh2_poly_y_bnd"
- double SubMesh2_poly_x(nSubMesh2_poly) ;
(optional) Begrenzung für SubKanten
- double SubMesh2_edge_x_bnd(nSubMesh2_edge,Two) ; \\ no metadata required
- double SubMesh2_edge_y_bnd(nSubMesh2_edge,Two) ; \\ no metadata required
(optional) Begrenzung für SubPolygone
- double SubMesh2_poly_x_bnd(nSubMesh2_poly,nMaxSubMesh2_poly_nodes) ;
- SubMesh2_poly_x_bnd:_Fillvalue = fillvalue ; \\ for missing subnodes
- double SubMesh2_poly_y_bnd(nSubMesh2_poly,nMaxSubMesh2_poly_nodes) ;
- SubMesh2_poly_y_bnd:_Fillvalue = fillvalue ; \\ for missing subnodes
- double SubMesh2_poly_x_bnd(nSubMesh2_poly,nMaxSubMesh2_poly_nodes) ;
Geografische Koordinaten
Berechnungsgitter
- Siehe NetCDF Unstrukturiertes Gitter, Abschnitt "Geografische Koordinaten".
- Alle Variablen können in identischer Weise deklariert werden.
Plot-SubGrid
In diesem Entwurf wird das Plot-SubGrid wie ein Berechnungsgitter beschrieben, auch wenn es hinsichtlich seiner topologischen Eigenschaften nicht alle Nachbarschaftsbeziehungen eines Berechnungsgitters aufweisen muss.
SubKnoten
- double SubMesh2_node_lon(nSubMesh2_node) ;
- SubMesh2_node_lon:standard_name = "longitude" ;
- SubMesh2_node_lon:long_name = "longitude of 2D mesh sub grid nodes" ;
- SubMesh2_node_lon:units = "degrees_east" ;
- double SubMesh2_node_lat(nSubMesh2_node) ;
- SubMesh2_node_lat:standard_name = "latitude" ;
- SubMesh2_node_lat:long_name = "latitude of 2D mesh sub grid nodes" ;
- SubMesh2_node_lat:units = "degrees_north" ;
- double SubMesh2_node_lon(nSubMesh2_node) ;
SubKanten
- double SubMesh2_edge_lon(nSubMesh2_edge) ;
- SubMesh2_edge_lon:standard_name = "longitude" ;
- SubMesh2_edge_lon:long_name = "longitude of 2D mesh sub grid edges, e.g. center of sub edge" ;
- SubMesh2_edge_lon:units = "degrees_east" ;
- SubMesh2_edge_lon:bounds = "SubMesh2_edge_lon_bnd"
- double SubMesh2_edge_lat(nSubMesh2_edge) ;
- SubMesh2_edge_lat:standard_name = "latitude" ;
- SubMesh2_edge_lat:long_name = "latitude of 2D mesh sub grid edges, e.g. center of sub edge" ;
- SubMesh2_edge_lat:units = "degrees_north" ;
- SubMesh2_edge_lat:bounds = "SubMesh2_edge_lat_bnd"
- double SubMesh2_edge_lon(nSubMesh2_edge) ;
SubPolygone
- double SubMesh2_poly_lon(nSubMesh2_poly) ;
- SubMesh2_poly_lon:standard_name = "longitude" ;
- SubMesh2_poly_lon:long_name = "longitude of 2D mesh sub polygons, e.g. any position within sub polygon" ;
- SubMesh2_poly_lon:units = "degrees_east" ;
- SubMesh2_poly_lon:bounds = "SubMesh2_poly_lon_bnd"
- double SubMesh2_poly_lat(nSubMesh2_poly) ;
- SubMesh2_poly_lat:standard_name = "latitude" ;
- SubMesh2_poly_lat:long_name = "latitude of 2D mesh sub polygons, e.g. any position within sub polygon" ;
- SubMesh2_poly_lat:units = "degrees_north" ;
- SubMesh2_poly_lat:bounds = "SubMesh2_poly_lat_bnd"
- double SubMesh2_poly_lon(nSubMesh2_poly) ;
(optional) Begrenzung für SubKanten
- double SubMesh2_edge_lon_bnd(nSubMesh2_edge,Two) ; \\ no metadata required
- double SubMesh2_edge_lat_bnd(nSubMesh2_edge,Two) ; \\ no metadata required
(optional) Begrenzung für SubPolygone
- double SubMesh2_poly_lon_bnd(nSubMesh2_poly,nMaxSubMesh2_poly_nodes) ; \\ no metadata required
- SubMesh2_poly_lon_bnd:_Fillvalue = fillvalue ; \\ for missing subnodes
- double SubMesh2_poly_lat_bnd(nSubMesh2_poly,nMaxSubMesh2_poly_nodes) ; \\ no metadata required
- SubMesh2_poly_lat_bnd:_Fillvalue = fillvalue ; \\ for missing subnodes
- double SubMesh2_poly_lon_bnd(nSubMesh2_poly,nMaxSubMesh2_poly_nodes) ; \\ no metadata required
Topologische Daten
Berechnungsgitter
Knotenverzeichnis der Kanten
- Siehe NetCDF Unstrukturiertes Gitter, Abschnitt "Knotenverzeichnis der Kanten"
- Die Variable kann in identischer Weise deklariert werden.
Knotenverzeichnis der Polygone
- Siehe NetCDF Unstrukturiertes Gitter, Abschnitt "Knotenverzeichnis der Polygone".
- Die Variable kann in identischer Weise deklariert werden.
Polygonverzeichnis der Kanten
- Siehe NetCDF Unstrukturiertes Gitter, Abschnitt "Polygonverzeichnis der Kanten".
- Die Variable kann in identischer Weise deklariert werden.
Plot-SubGrid
Knotenverzeichnis der Kanten
- integer SubMesh2_edge_nodes(nSubMesh2_edge,Two) ;
- SubMesh2_edge_nodes:standard_name = "???" \\ yet to be determined
- SubMesh2_edge_nodes:long_name = "list of nodes for all sub edges, start node - end node"
- Bemerkung: Indizes starten mit Null!
- integer SubMesh2_edge_nodes(nSubMesh2_edge,Two) ;
Knotenverzeichnis der Polygone
- integer SubMesh2_poly_nodes(nSubMesh2_poly,nMaxSubMesh2_poly_nodes) ;
- SubMesh2_poly_nodes:standard_name = "???" \\ yet to be determined
- SubMesh2_poly_nodes:long_name = "list of nodes for all sub polygons, counterclockwise"
- Bemerkung: Indizes starten mit Null!
- integer SubMesh2_poly_nodes(nSubMesh2_poly,nMaxSubMesh2_poly_nodes) ;
(optional) Kantenverzeichnis der Polygone
Für UnTRIM2 nicht erforderlich.
(optional) Polygonverzeichnis der Kanten
Für UnTRIM2 nicht erforderlich.
SubKantenverzeichnis der Kanten
- integer Mesh2_edge_subedges(nMesh2_edge,nMaxMesh2_edge_subedges) ;
- Mesh2_edge_subedges:standard_name = "???" ; \\ yet to be determined
- Mesh2_edge_subedges:long_name = "list of sub edges for all edges" ;
- Mesh2_edge_subedges:_FillValue = fillvalue ; \\ for missing sub edges
- Bemerkungen:
- Für jede Berechnungskante wird auf die Liste der (Plot-) SubGrid-Kanten verwiesen.
- Nur für Visualisierungszwecke erforderlich.
- Die Anzahl der (Plot-) SubGrid-Kanten einer Berechnungskante ist immer größer oder gleich der Anzahl ihrer SubGrid-Tiefenklassen.
- integer Mesh2_edge_subedges(nMesh2_edge,nMaxMesh2_edge_subedges) ;
SubPolygonverzeichnis der Polygone
- integer Mesh2_poly_subpolys(nMesh2_poly,nMaxMesh2_poly_subpolys) ;
- Mesh2_poly_subpolys:standard_name = "???" ; \\ yet to be determined
- Mesh2_poly_subpolys:long_name = "list of sub polygons for all polygons" ;
- Mesh2_poly_subpolys:_FillValue = fillvalue ; \\ for missing sub polygons
- Bemerkungen:
- Für jedes Berechnungspolygon wird auf die Liste der (Plot-) SubGrid-Polygone verwiesen.
- Nur für Visualisierungszwecke erforderlich.
- Die Anzahl der (Plot-) SubGrid-Polygone eines Berechnungspolygons ist immer größer oder gleich der Anzahl seiner SubGrid-Tiefenklassen.
- integer Mesh2_poly_subpolys(nMesh2_poly,nMaxMesh2_poly_subpolys) ;
Tiefenklassenverzeichnis der SubKanten
- integer Mesh2_edge_subedgedepth(nMesh2_edge,nMaxMesh2_edge_subedges) ;
- Mesh2_edge_subedgedepth:standard_name = "???" ; \\ yet to be determined
- Mesh2_edge_subedgedepth:long_name = "list of (local) sub edge depth classes for all subedges" ;
- Mesh2_edge_subedgedepth:_FillValue = fillvalue ; \\ for missing sub edges
- Bemerkungen:
- Für jede Berechnungskante und jede ihrer (Plot-) SubGrid-Kanten wird auf die jeweilige (lokale) Tiefenklasse der Berechnungskante verwiesen.
- Damit kann einer (Plot-) SubGrid-Kante z. B. ihre (aktuelle) Tiefe zugewiesen werden.
- Nur für Visualisierungszwecke erforderlich.
- Die Anzahl der (Plot-) SubGrid-Kanten einer Berechnungskante ist immer größer oder gleich der Anzahl ihrer SubGrid-Tiefenklassen. D. h., dieselbe Tiefenklasse kann mehrfach in der Liste für eine Berechnungskante auftauchen.
- integer Mesh2_edge_subedgedepth(nMesh2_edge,nMaxMesh2_edge_subedges) ;
Tiefenklassenverzeichnis der SubPolygone
- integer Mesh2_poly_subpolydepth(nMesh2_poly,nMaxMesh2_poly_subpolys) ;
- Mesh2_poly_subpolydepth:standard_name = "???" ; \\ yet to be determined
- Mesh2_poly_subpolydepth:long_name = "list of (local) sub polygon depth classes for all subpolygons" ;
- Mesh2_poly_subpolydepth:_FillValue = fillvalue ; \\ for missing sub polygons
- Bemerkungen:
- Für jedes Berechnungspolygon und jedes seiner (Plot-) SubGrid-Polygone wird auf die jeweilige (lokale) Tiefenklasse des Berechnungspolygons verwiesen.
- Damit kann z. B. jedem (Plot-) SubGrid-Polygon seine aktuelle Tiefe zugeordnet werden.
- Nur für Visualisierungszwecke erforderlich.
- Die Anzahl der (Plot-) SubGrid-Polygone eines Berechnungspolygons ist immer größer oder gleich der Anzahl seiner SubGrid-Tiefenklassen. D. h., dieselbe Tiefenklasse kann mehrfach in der Liste für ein Berechnungspolygon auftauchen.
- integer Mesh2_poly_subpolydepth(nMesh2_poly,nMaxMesh2_poly_subpolys) ;
Topologievariable
Berechnungsgitter
Die Topologie des Berechnungsgitters wird in gewohnter Weise mit einer Topologievariablen beschrieben. Siehe hierfür die Topologievariable für ein Dreiecksgitter.
Plot-SubGrid
- integer SubMesh2 ;
- SubMesh2:standard_name = "???" ; \\ yet to be determined
- SubMesh2:long_name = "name of (sub) grid can be stored here" ;
- SubMesh2:dimensionality = 2 ; \\ flat, two-dimensional topology
- SubMesh2:locations = "node edge poly" ;
- SubMesh2:node_coordinates = "SubMesh2_node_lon SubMesh2_node_lat" ;
- SubMesh2:edge_coordinates = "SubMesh2_edge_lon SubMesh2_edge_lat" ;
- SubMesh2:poly_coordinates = "SubMesh2_poly_lon SubMesh2_poly_lat" ;
- SubMesh2:edge_node_connectivity = "SubMesh2_edge_nodes" ;
- (optional) SubMesh2::edge_poly_connectivity = "" ; \\ void in case of UnTRIM2
- SubMesh2::poly_node_connectivity = "SubMesh2_poly_nodes" ;
- (optional) SubMesh2::poly_edge_connectivity = "" ; \\ void in case of UnTRIM2
- Hinweise:
- Die orange markierten Bezeichnungen stellen Abweichungen bzw. Ergänzungen zu den Deltares-CF-Erweiterungen dar.
- Der Gebrauch von poly an Stelle von face ist zu bevorzugen und entspricht dem UnTRIM-Jargon.
- Für UnTRIM2 sind keine Nachbarschaftsbeziehungen auf der Ebene des Plot-SubGrid erforderlich.
- integer SubMesh2 ;
Koordinatentransformation
Siehe unter NetCDF Grid Mapping Variable.
Anmerkungen, Fragen
- Datei nutzt Deltares-CF-Erweiterungen, und zusätzlich mit orange markierten (BAW-) Erweiterungen in der Topologievariablen.
- Können auch für Kanten bounds angegeben werden?
- Müssen die Indizes unbedingt mit Null starten?
- Dürfen in Bounds-Variablen Werte mit _FillValue stehen?
- Die Beschreibung der Koordinatentransformation ist für UTM- und Gauß-Krüger-Koordinaten geeignet.
zurück zu NetCDF