Aktionen

NetCDF Unstrukturiertes Gitter mit SubGrid: Unterschied zwischen den Versionen

Aus BAWiki

imported>Lang Guenther
(Die LinkTitles-Erweiterung hat automatisch Links zu anderen Seiten hinzugefügt (<a target="_blank" rel="nofollow noreferrer noopener" class="external free" href="https://github.com/bovender/LinkTitles">https://github.com/bovender/LinkTitles</a>).)
 
(65 dazwischenliegende Versionen von 3 Benutzern werden nicht angezeigt)
Zeile 2: Zeile 2:
=Kurze Beschreibung=
=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|utrsub_grid.dat]] (Berechnungsgitter mit SubGrid-Tiefenklassen) und [[PLTSUB_GRID.UPI|pltsub_grid.upi]] (Hilfsgitter für Postprocessoren, Plot-SubGrid).
Ein aus beliebigen Faces (Polygonen, Dreiecke und Vierecke) aufgebautes Gitter wird beschrieben. Zusätzlich sind Daten des (topografischen) SubGrid vorhanden.  
Die Speicherung von Daten auf diesem Gitter, z. B. der Tiefe (Bathymetrie), wird an anderer Stelle
Die Dateitypen hierfür sind [[UTRSUB_GRID.DAT|utrsub_grid.dat]] (Berechnungsgitter mit SubGrid-Tiefenklassen) und [[PLTSUB_GRID.UPI|pltsub_grid.upi]] (Hilfsgitter für Postprocessoren, Plot-SubGrid).
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 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 Struktur (Topologie) des Gitters beschrieben.  


Die Beschreibung wurde vollständig für die ''staggered data'' Positionen ''node'', ''edge'' und ''poly'' gestaltet.
Die Beschreibung wurde vollständig für die ''staggered data'' Positionen ''node'', ''edge'' und ''face'' gestaltet.
 
Alle Abweichungen/Erweiterungen von den ''UGRID Conventions'' sind nachfolgend in der Farbe <font color=darkorange>''darkorange''</font> farblich hervorgehoben.
 
==Berechnungsgitter==
 
Die Beschreibung des Berechnungsgitters ist fast vollständig identisch mit der Beschreibung ''[[NetCDF Unstrukturiertes Gitter]]'' für ein unstrukturiertes Gitter ohne SubGrid.
Nachfolgend werden nur diejenigen Variablen wiederholt, deren Definition sich (in Teilen) von derjenigen eines unstrukturierten Gitters ohne SubGrid unterscheidet.
 
==Gitter mit SubGrid==
 
Zusätzlich zu dem Berechnungsgitter werden nachfolgend alle zur Beschreibung des topografischen SubGrid benötigten Variablen aufgeführt. Da diese Informationen insbesondere für die
grafische Darstellung benötigt werden, wird dieser Gitter auch als (Plot-) SubGrid bezeichnet.
 
==Kombiniertes Gitter==
 
Die beiden vorgenannten Gitter - Berechnungsgitter und subgridskaliges Gitter - werden in einem kombinierten Gitter (''Parent Mesh'')
zusammengefasst. Hierzu gehören auch die verschiedenen Kontaktlisten, die den Zusammenhang ziwschen den beiden Teilnetzen beschreiben.
Diese Art der Beschreibung basiert im Wesentlichen auf Ideen, die von '''Bert Jagers''' (Deltares) erdacht wurden (siehe [https://publicwiki.deltares.nl/display/NETCDF/netCDF ''Deltares Conventions'']).
 


=Inhalt der Datei=
=Inhalt der Datei=
==Dimensionen==
==Dimensionen==


* Siehe [[NetCDF Unstrukturiertes Gitter#Dimensionen|NetCDF Unstrukturiertes Gitter, Abschnitt "Dimensionen"]].
# '''nMesh2_node''' : Anzahl der ''Knoten''.
* Zusätzlich zu den dort angegebenen Dimensionen werden noch benötigt:
# '''nMesh2_edge''' : Anzahl der ''Kanten''.
*: Tiefenklassen für den Berechnungskern (kein Gitter):
# '''nMesh2_face''' : Anzahl der ''Faces'' (''Polygone'').
*:: dimensions
# '''nMaxMesh2_face_nodes''' : maximale Anzahl der Knoten/Kanten in einem ''Face'' (Polygon)
*::: <font color=blue>nMesh2_subedgedepth</font> = ''number of sub edge depth classes''
# '''nSubMesh2_edge''' : Anzahl der ''Plot-Subkanten''.
*::: <font color=blue>nMesh2_subpolydepth</font> = ''number of sub polygon depth classes''
# '''nSubMesh2_face''' : Anzahl der ''Plot-Subfaces'' (''Plot-Subpolygone'').
*::: <font color=blue>nMaxMesh2_subedgedepth</font> = ''maximum number of sub depth classes along a computational edge''
# '''nMaxSubMesh2_face_nodes''' : maximale Anzahl der ''Plot-Subknoten'' eines Plot-Subface (-Subpolygons).
*::: <font color=blue>nMaxMesh2_subpolydepth</font> = ''maximum number of sub depth classes within a computational polygon''
# '''two''' : Konstante ( = 2 ).
*:: ''Anmerkungen'':
 
*::# Das mathematische SubGrid-Modellverfahren benötigt keinerlei geometrische Informationen hinsichtlich der Orte, an denen bestimmte Tiefen vorhanden sind.
Hinweise:
*::# Es genügt, die Tiefenverteilung innerhalb eines Berechnungspolygons bzw. entlang einer Berechnungskante zu kennen.
# Plot-Subkanten und Plot-Subfaces (-Subpolygone) werden nur für die Visualisierung benötigt.
*::# 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.
# Das Simulationsprogramm [[UNTRIM2]] verwendet ausschließlich die korrespondierenden Tiefenklassen (hier nicht aufgeführt).
*::# 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.
# Die Anzahl der Plot-Subkanten bzw. -Subfaces (-Subpolygone) kann größer oder gleich die Anzahl der entsprechenden Tiefenklassen sein.
*: Hilfsgitter für Postprocessoren, Plot-SubGrid
 
*:: dimensions:   
*::: <font color=blue>nSubMesh2_node</font> = ''number of nodes in sub grid'' ;
*::: <font color=blue>nSubMesh2_edge</font> = ''number of edges in sub grid'' ;
*::: <font color=blue>nSubMesh2_poly</font> = ''number of polygons in sub grid'' ;
*::: <font color=blue>nMaxSubMesh2_poly_nodes</font> = ''maximum number of nodes within a polygon of the sub grid'' ;
*::: <font color=blue>nMaxMesh2_edge_subedges</font> = ''maximum number of sub edges along an edge'' ;
*::: <font color=blue>nMaxMesh2_poly_subpolys</font> = ''maximum number of sub polygons within a polygon'' ;
*:: ''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.


==Lokale Koordinaten==
==Lokale Koordinaten==
===Berechnungsgitter===
* Siehe [[NetCDF Unstrukturiertes Gitter#Lokale Koordinaten|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" ;


====SubKanten====
Die Beschreibung der lokalen Koordinaten des Berechnungsgitters stimmen mit derjenigen eines unstrukturierten Gitters ohne SubGrid überein.
:: double SubMesh2_edge_x(nSubMesh2_edge) ;  
Siehe [[NetCDF Unstrukturiertes Gitter#Lokale Koordinaten|NetCDF Unstrukturiertes Gitter unter "Lokale Koordinaten"]].
::: 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" ;  
==Lokale Koordinaten des Plot-Subgrid==
::: SubMesh2_edge_x:units = "m" ;
===Kanten===
::: SubMesh2_edge_x:bounds = "SubMesh2_edge_x_bnd"
 
:: double SubMesh2_edge_y(nSubMesh2_edge) ;  
double SubMesh2_edge_x(nSubMesh2_edge) ;
::: SubMesh2_edge_y:standard_name = "'''projection_y_coordinate'''" ;  
: SubMesh2_edge_x:long_name = "x-Koordinate der 2D (Plot) SubGrid Kanten" ;
::: SubMesh2_edge_y:long_name = "y-coordinate of 2D mesh sub grid edges, e.g. center of sub edge" ;  
: SubMesh2_edge_x:units = "m" ;
::: SubMesh2_edge_y:units = "m" ;
: SubMesh2_edge_x:name_id = 1650 ;
::: SubMesh2_edge_y:bounds = "SubMesh2_edge_y_bnd"
: SubMesh2_edge_x:bounds = "SubMesh2_edge_x_bnd" ;
: SubMesh2_edge_x:standard_name = "projection_x_coordinate" ;
 
double SubMesh2_edge_y(nSubMesh2_edge) ;
: SubMesh2_edge_y:long_name = "y-Koordinate der 2D (Plot) SubGrid Kanten" ;
: SubMesh2_edge_y:units = "m" ;
: SubMesh2_edge_y:name_id = 1651 ;
: SubMesh2_edge_y:bounds = "SubMesh2_edge_y_bnd" ;
: SubMesh2_edge_y:standard_name = "projection_y_coordinate" ;
 
Hinweise:
# Das Attribut "name_id" entspricht der (BAW) PHYDEF-Code-[[Kennung]] der Variablen.
 
===Faces (Polygone)===
 
double SubMesh2_face_x(nSubMesh2_face) ;
: SubMesh2_face_x:long_name = "x-Koordinate der 2D (Plot) SubGrid Polygone (Faces)" ;
: SubMesh2_face_x:units = "m" ;
: SubMesh2_face_x:name_id = 1650 ;
: SubMesh2_face_x:bounds = "SubMesh2_face_x_bnd" ;
: SubMesh2_face_x:standard_name = "projection_x_coordinate" ;
 
double SubMesh2_face_y(nSubMesh2_face) ;
: SubMesh2_face_y:long_name = "y-Koordinate der 2D (Plot) SubGrid Polygone (Faces)" ;
: SubMesh2_face_y:units = "m" ;
: SubMesh2_face_y:name_id = 1651 ;
: SubMesh2_face_y:bounds = "SubMesh2_face_y_bnd" ;
: SubMesh2_face_y:standard_name = "projection_y_coordinate" ;
 
Hinweise:
# Das Attribut "name_id" entspricht der (BAW) PHYDEF-Code-[[Kennung]] der Variablen.
# Es kann ein beliebiger, innerhalb des Face (Polygon) liegender Punkt gewählt werden.
 
===Begrenzung für Kanten===
 
double SubMesh2_edge_x_bnd(nSubMesh2_edge, two) ; \\ keine Metadaten erforderlich
 
double SubMesh2_edge_y_bnd(nSubMesh2_edge, two) ; \\ keine Metadaten erforderlich


====SubPolygone====
===Begrenzung für Faces (Polygone)===
:: 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"


====(optional) Begrenzung für SubKanten====
double SubMesh2_face_x_bnd(nSubMesh2_face, nMaxSubMesh2_face_nodes) ; \\ _FillValue erforderlich, da nicht immer nMaxSubMesh2_face_nodes definiert
:: double SubMesh2_edge_x_bnd(nSubMesh2_edge,Two) ; \\ no metadata required
: SubMesh2_face_x_bnd:_FillValue = ''fillvalue'' ;
:: double SubMesh2_edge_y_bnd(nSubMesh2_edge,Two) ; \\ no metadata required
double SubMesh2_face_y_bnd(nSubMesh2_face, nMaxSubMesh2_face_nodes) ; \\ _FillValue erforderlich, da nicht immer nMaxSubMesh2_face_nodes definiert
: SubMesh2_face_y_bnd:_FillValue = ''fillvalue'' ;


====(optional) Begrenzung für SubPolygone====
Hinweise:
:: double SubMesh2_poly_x_bnd(nSubMesh2_poly,nMaxSubMesh2_poly_nodes) ;
# Koordinaten der Knoten des SubFace (SubPolygons) entgegen dem Uhrzeigersinn angeben.
::: SubMesh2_poly_x_bnd:_Fillvalue = ''fillvalue'' ; \\ for missing subnodes
# Fehlende Punkte mit ungültigen Werten werden mit ''_FillValue'' gekennzeichnet. Diese dürfen nur am Ende vorhanden sein.
:: double SubMesh2_poly_y_bnd(nSubMesh2_poly,nMaxSubMesh2_poly_nodes) ;
::: SubMesh2_poly_y_bnd:_Fillvalue = ''fillvalue'' ; \\ for missing subnodes


==Geografische Koordinaten==
==Geografische Koordinaten==
Die Beschreibung der geografischen Koordinaten des ''Berechnungsgitters'' stimmen mit derjenigen eines unstrukturierten Gitters ohne SubGrid überein.
Siehe [[NetCDF Unstrukturiertes Gitter#Geografische Koordinaten|NetCDF Unstrukturiertes Gitter unter "Geografische Koordinaten"]].
==Geografische Koordinaten des Plot-Subgrid==
===Kanten===
double SubMesh2_edge_lon(nSubMesh2_edge) ;
: SubMesh2_edge_lon:long_name = "geografische Laenge der 2D (Plot) SubGrid Kanten" ;
: SubMesh2_edge_lon:units = "degrees_east" ;
: SubMesh2_edge_lon:name_id = 1653 ;
: SubMesh2_edge_lon:bounds = "SubMesh2_edge_lon_bnd" ;
: SubMesh2_edge_lon:standard_name = "longitude" ;
double SubMesh2_edge_lat(nSubMesh2_edge) ;
: SubMesh2_edge_lat:long_name = "geografische Breite der 2D (Plot) SubGrid Kanten" ;
: SubMesh2_edge_lat:units = "degrees_north" ;
: SubMesh2_edge_lat:name_id = 1652 ;
: SubMesh2_edge_lat:bounds = "SubMesh2_edge_lat_bnd" ;
: SubMesh2_edge_lat:standard_name = "latitude" ;
Hinweise:
# Das Attribut "name_id" entspricht der (BAW) PHYDEF-Code-[[Kennung]] der Variablen.
===Faces (Polygone)===
double SubMesh2_face_lon(nSubMesh2_face) ;
: SubMesh2_face_lon:long_name = "geografische Laenge der 2D (Plot) SubGrid Polygone (Faces)" ;
: SubMesh2_face_lon:units = "degrees_east" ;
: SubMesh2_face_lon:name_id = 1653 ;
: SubMesh2_face_lon:bounds = "SubMesh2_face_lon_bnd" ;
: SubMesh2_face_lon:standard_name = "longitude" ;
double SubMesh2_face_lat(nSubMesh2_face) ;
: SubMesh2_face_lat:long_name = "geografische Breite der 2D (Plot) SubGrid Polygone (Faces)" ;
: SubMesh2_face_lat:units = "degrees_north" ;
: SubMesh2_face_lat:name_id = 1652 ;
: SubMesh2_face_lat:bounds = "SubMesh2_face_lat_bnd" ;
: SubMesh2_face_lat:standard_name = "latitude" ;
Hinweise:
# Das Attribut "name_id" entspricht der (BAW) PHYDEF-Code-[[Kennung]] der Variablen.
# Es kann ein beliebiger, innerhalb des Polygons liegender Punkt gewählt werden.
===Begrenzung für Kanten===
double SubMesh2_edge_lon_bnd(nSubMesh2_edge, two) ; \\ keine Metadaten erforderlich
double SubMesh2_edge_lat_bnd(nSubMesh2_edge, two) ; \\ keine Metadaten erforderlich
===Begrenzung für Faces (Polygone)===
double SubMesh2_face_lon_bnd(nSubMesh2_face, nMaxSubMesh2_face_nodes) ; \\ _FillValue erforderlich, da nicht immer nMaxSubMesh2_face_nodes definiert
: SubMesh2_face_lon_bnd:_FillValue = ''fillvalue'' ;
double SubMesh2_face_lat_bnd(nSubMesh2_face, nMaxSubMesh2_face_nodes) ; \\ _FillValue erforderlich, da nicht immer nMaxSubMesh2_face_nodes definiert
: SubMesh2_face_lat_bnd:_FillValue = ''fillvalue'' ;
Hinweise:
# Koordinaten der Knoten des SubFace (SubPolygons) entgegen dem Uhrzeigersinn angeben.
# Fehlende Punkte mit ungültigen Werten werden mit ''_FillValue'' gekennzeichnet. Diese dürfen nur am Ende vorhanden sein.
==Topologische Daten==
===Berechnungsgitter===
===Berechnungsgitter===
* Siehe [[NetCDF Unstrukturiertes Gitter#Geografische Koordinaten|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" ;


====SubKanten====
Die Konnektivitäts-Listen des Berechnungsgitters stimmen mit derjenigen eines unstrukturierten Gitters ohne SubGrid überein.  
:: double SubMesh2_edge_lon(nSubMesh2_edge) ;   
Siehe [[NetCDF Unstrukturiertes Gitter#Topologische Daten|NetCDF Unstrukturiertes Gitter unter "Topologische Daten"]].
::: 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"


====SubPolygone====
===Gitter mit SubGrid===
:: 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"


====(optional) Begrenzung für SubKanten====
Für das SubGrid werden ''keine'' Konnektivitäts-Listen benötigt, da Nachbarschaftsbeziehungen keine Rolle spielen.
:: double SubMesh2_edge_lon_bnd(nSubMesh2_edge,Two) ; \\ no metadata required
 
:: double SubMesh2_edge_lat_bnd(nSubMesh2_edge,Two) ; \\ no metadata required
==Topologievariable==
====(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


==Topologische Daten==
===Berechnungsgitter===
===Berechnungsgitter===
====Knotenverzeichnis der Kanten====


* Siehe [[NetCDF Unstrukturiertes Gitter#Knotenverzeichnis der Kanten|NetCDF Unstrukturiertes Gitter, Abschnitt "Knotenverzeichnis der Kanten"]]
int Mesh2 ;
* Die Variable kann in identischer Weise deklariert werden.
: Mesh2:long_name = "Berechnungsgitter" ;
: Mesh2:cf_role = "mesh_topology" ; \\ UGRID required
: Mesh2:topology_dimension = 2 ; \\ UGRID required
: Mesh2:node_coordinates = "Mesh2_node_x Mesh2_node_y Mesh2_node_lon Mesh2_node_lat" ; \\ UGRID required
: Mesh2:edge_coordinates = "Mesh2_edge_x Mesh2_edge_y Mesh2_edge_lon Mesh2_edge_lat" ; \\ UGRID optionally required for data at edges
: Mesh2:face_coordinates = "Mesh2_face_x Mesh2_face_y Mesh2_face_lon Mesh2_face_lat Mesh2_face_center_x Mesh2_face_center_y Mesh2_face_center_lon Mesh2_face_center_lat" ; \\ UGRID optionally required for data at faces
: Mesh2:face_node_connectivity = "Mesh2_face_nodes" ; \\ UGRID required
: Mesh2:face_edge_connectivity = "Mesh2_face_edges" ; \\ UGRID optional
: Mesh2:edge_node_connectivity = "Mesh2_edge_nodes" ; \\ UGRID optional
: Mesh2:<font color=darkorange>edge_face_connectivity</font> = "Mesh2_edge_faces" ;
: Mesh2:<font color=darkorange>parent_mesh</font> = "Combined_Mesh2_and_SubMesh2" ;


====Knotenverzeichnis der Polygone====
Hinweise:
# In der Praxis müssen nicht alle Verknüpfungslisten (''connectivity'') angegeben werden, da manche Informationen redundant sind. Sie sollten aber angegeben werden können.
# Die in [http://ugrid-conventions.github.io/ugrid-conventions/#2d-flexible-mesh-mixed-triangles-quadrilaterals-etc-topology ''2D flexible mesh (mixed triangles, quadrilaterals, etc.) topology''] aufgeführten Attribute ''face_dimension'' und ''edge_dimension'' werden in der BAW nicht unterstützt. Dies ist auch nicht erforderlich, da die Reihenfolge der Dimensionen in den Konnektivitäts-Variablen standardkonform sind.
# Das Attribut "parent_mesh" verweist auf das kombinierte Gitter (''Parent Mesh''), dessen erster Bestandteil das Berechnungsgitter ist.


* Siehe [[NetCDF Unstrukturiertes Gitter#Knotenverzeichnis der Polygone|NetCDF Unstrukturiertes Gitter, Abschnitt "Knotenverzeichnis der Polygone"]].
===Gitter mit SubGrid===
* Die Variable kann in identischer Weise deklariert werden.


====Polygonverzeichnis der Kanten====
int SubMesh2 ;
: SubMesh2:long_name = "SubGrid" ;
: SubMesh2:cf_role = "mesh_topology" ;
: SubMesh2:topology_dimension = 2 ;
: SubMesh2:edge_coordinates = "SubMesh2_edge_x SubMesh2_edge_y SubMesh2_edge_lon SubMesh2_edge_lat" ;
: SubMesh2:face_coordinates = "SubMesh2_face_x SubMesh2_face_y SubMesh2_face_lon SubMesh2_face_lat" ;
: SubMesh2:<font color=darkorange>parent_mesh</font> = "Combined_Mesh2_and_SubMesh2" ;


* Siehe [[NetCDF Unstrukturiertes Gitter#Polygonverzeichnis der Kanten|NetCDF Unstrukturiertes Gitter, Abschnitt "Polygonverzeichnis der Kanten"]].
Hinweise:
* Die Variable kann in identischer Weise deklariert werden.
# Weiter gehende topologische Daten liegen für das Plot-SubGrid nicht vor.
# Diese Variable entspricht ''nicht'' den [http://ugrid-conventions.github.io/ugrid-conventions/ ''UGRID Conventions''], da für das SubGrid keine Konnektivitäts-Listen benötigt werden bzw. bekannt sind.
# Das Attribut "parent_mesh" verweist auf das kombinierte Gitter (''Parent Mesh''), dessen zweiter Bestandteil das SubGrid ist.


===Plot-SubGrid===
===Kombiniertes Gitter===
====Knotenverzeichnis der Kanten====
int Combined_Mesh2_and_SubMesh2 ;
:: integer SubMesh2_edge_nodes(nSubMesh2_edge,Two) ;
: Combined_Mesh2_and_SubMesh2:long_name = "Kombiniertes Gitter" ;
::: SubMesh2_edge_nodes:standard_name = "'''???'''" \\ yet to be determined
: Combined_Mesh2_and_SubMesh2:cf_role = "mesh_topology" ;
::: SubMesh2_edge_nodes:long_name = "list of nodes for all sub edges, start node - end node"
: Combined_Mesh2_and_SubMesh2:<font color=darkorange>sub_meshes</font> = "Mesh2 SubMesh2" ;
:: ''Bemerkung: Indizes starten mit Null!''
: Combined_Mesh2_and_SubMesh2:<font color=darkorange>mesh_contacts</font> = "SubMesh2_face_contact SubMesh2_edge_contact" ;
====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!''
====(optional) Kantenverzeichnis der Polygone====
Für UnTRIM<sup>2</sup> nicht erforderlich.
====(optional) Polygonverzeichnis der Kanten====
Für UnTRIM<sup>2</sup> nicht erforderlich.


===Verknüpfung von Berechnungsgitter und Plot-SubGrid===
Hinweise:
====SubKantenverzeichnis der Kanten====
# Das Konzept der ''Parent Mesh'' Variable ist nicht in den [http://ugrid-conventions.github.io/ugrid-conventions/ ''UGRID Conventions''] enthalten.
:: integer Mesh2_edge_subedges(nMesh2_edge,nMaxMesh2_edge_subedges) ;
# Das Attribut "sub_meshes" verweist auf die beiden, zu dem ''Parent Mesh'' gehörenden Gitternetze (Berechnungsgitter, SubGrid).
::: Mesh2_edge_subedges:standard_name = "'''???'''" ; \\ yet to be determined
# Das Attribut "mesh_contacts" verweist auf Variablen, welche den Zusammenhang zwischen den zu dem ''Parent Mesh'' gehörenden Gitternetzen beschreiben.
::: Mesh2_edge_subedges:long_name = "list of sub edges for all (computational) edges" ;
::: Mesh2_edge_subedges:_FillValue = ''fillvalue'' ; \\ for missing sub edges
:: ''Bemerkung: Indizes starten mit Null!''
:: ''Hinweise'':
::# 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.


====SubPolygonverzeichnis der Polygone====
==Kontaktlisten==
:: 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 (computational) polygons" ;
::: Mesh2_poly_subpolys:_FillValue = ''fillvalue'' ; \\ for missing sub polygons
:: ''Bemerkung: Indizes starten mit Null!''
:: ''Hinweise'':
::# 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.


===Plot-SubGrid und Tiefenklassen===
Die Kontaktlisten beschreiben den Zusammenhang zwischen den verschiedenen Bestandteilen des ''Parent Mesh''. In diesem Beispiel
====Tiefenklassenverzeichnis der SubKanten====
den Zusammenhang zwischen dem Berechnungsgitter und dem SubGrid sowie umgekehrt.
:: 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.


====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.


==Topologievariable==
===Kontaktliste Plot-Subkanten <-> Kanten===
===Berechnungsgitter===


:: integer Mesh2 ;
int SubMesh2_edge_contact(nSubMesh2_edge, two) ;
::: Mesh2:standard_name = "'''???'''" ; \\ yet to be determined
: SubMesh2_edge_contact:long_name = "Liste aller Kontakte zwischen (Plot-) SubKanten und (Berechnungs-) Kanten" ;
::: Mesh2:long_name = "name of grid can be stored here" ;
: SubMesh2_edge_contact:valid_range = 0, 4279 ;
::: Mesh2:dimensionality = 2 ; \\ flat, two-dimensional topology
: SubMesh2_edge_contact:_FillValue = -999 ;
::: Mesh2:locations = "node edge <font color=darkorange>poly</font>" ;
: SubMesh2_edge_contact:coordinates = "SubMesh2_edge_x SubMesh2_edge_y SubMesh2_edge_lon SubMesh2_edge_lat" ;
::: Mesh2:node_coordinates = "Mesh2_node_lon Mesh2_node_lat" ;
: SubMesh2_edge_contact:grid_mapping = "Mesh2_crs" ;
::: Mesh2:edge_coordinates = "Mesh2_edge_lon Mesh2_edge_lat" ;
: SubMesh2_edge_contact:cf_role = "<font color=darkorange>mesh_topology_contact</font>" ;
::: Mesh2:<font color=darkorange>poly</font>_coordinates = "Mesh2_poly_lon Mesh2_poly_lat" ;
: SubMesh2_edge_contact:<font color=darkorange>contact_meshes</font> = "SubMesh2 Mesh2" ;
::: Mesh2:edge_node_connectivity = "Mesh2_edge_nodes" ;
: SubMesh2_edge_contact:<font color=darkorange>contact_type</font> = "edge edge" ;
::: Mesh2::<font color=darkorange>edge_poly_connectivity</font> = "Mesh2_edge_polys" ; \\ Deltares uses face_connectivity
: SubMesh2_edge_contact:start_[[index]] = 0 ;
::: Mesh2::<font color=darkorange>poly</font>_node_connectivity = "Mesh2_poly_nodes" ;
::: Mesh2::<font color=darkorange>poly_edge_connectivity</font> = "Mesh2_poly_edges" ;
::: Mesh2::parent_mesh = "Mesh2_SubMesh2" ; \\ combined mesh (computational plus plot sub grid)
:: ''Hinweise'':
::# Identisch mit der [[NetCDF Dreiecksgitter#Topologievariable|Topologievariablen für ein Dreiecksgitter]], jedoch mit dem zusätzlichen Attribut ''parent_mesh''.


===Plot-SubGrid===
Hinweise:
:: integer SubMesh2 ;
# Das Konzept der ''Mesh Topology Contact'' Variable ist nicht in den [http://ugrid-conventions.github.io/ugrid-conventions/ ''UGRID Conventions''] enthalten.
::: SubMesh2:standard_name = "'''???'''" ; \\ yet to be determined
# Indizes starten mit Null.
::: SubMesh2:long_name = "name of (sub) grid can be stored here" ;
# Jede Plot-Subkante verweist auf jeweils eine Kante des Berechnungsgitters.
::: SubMesh2:dimensionality = 2 ; \\ flat, two-dimensional topology
# Für jede Kante des Berechnungsgitters sind i.d.R. mehrere Verweise auf Plot-Subkanten vorhanden.
::: SubMesh2:locations = "node edge <font color=darkorange>poly</font>" ;
::: SubMesh2:node_coordinates = "SubMesh2_node_lon SubMesh2_node_lat" ;
::: SubMesh2:edge_coordinates = "SubMesh2_edge_lon SubMesh2_edge_lat" ;
::: SubMesh2:<font color=darkorange>poly</font>_coordinates = "SubMesh2_poly_lon SubMesh2_poly_lat" ;
::: SubMesh2:edge_node_connectivity = "SubMesh2_edge_nodes" ;
::: (optional) SubMesh2::<font color=darkorange>edge_poly_connectivity</font> = "" ; \\ void in case of UnTRIM<sup>2</sup>
::: SubMesh2::<font color=darkorange>poly</font>_node_connectivity = "SubMesh2_poly_nodes" ;
::: (optional) SubMesh2::<font color=darkorange>poly_edge_connectivity</font> = "" ; \\ void in case of UnTRIM<sup>2</sup>
::: SubMesh2::parent_mesh = "Mesh2_SubMesh2" ; \\ combined mesh (computational plus plot sub grid)
:: ''Hinweise'':
::# Die Beschreibung des Plot-SubGrid kann in derselben Weise wie für das Berechnungsgitter erfolgen.  
::# Die <font color=darkorange>orange</font> markierten Bezeichnungen stellen Abweichungen bzw. Ergänzungen zu den [http://public.deltares.nl/display/NETCDF/netCDF Deltares-CF-Erweiterungen] dar.
::# Der Gebrauch von ''poly'' an Stelle von ''face'' ist zu bevorzugen und entspricht dem UnTRIM-Jargon.
::# Für UnTRIM<sup>2</sup> sind keine Nachbarschaftsbeziehungen auf der Ebene des Plot-SubGrid erforderlich.


==Topologie des kombinierten Gitters==
===Kontaktliste Plot-Subfaces <-> Faces===
:: integer Mesh2_SubMesh2 ;
::: Mesh2_SubMesh2:standard_name = "'''???'''" ; \\ yet to be determined
::: Mesh2_SubMesh2:long_name = "name of combined grid can be stored here" ;
::: Mesh2_SubMesh2:sub_meshes = "Mesh2 SubMesh2" ;


==Koordinatentransformation==
int SubMesh2_face_contact(nSubMesh2_face, two) ;
: SubMesh2_face_contact:long_name = "Liste aller Kontakte zwischen (Plot-) SubPolygonen und (Berechnungs-) Polygonen" ;
: SubMesh2_face_contact:valid_range = 0, 10271 ;
: SubMesh2_face_contact:_FillValue = -999 ;
: SubMesh2_face_contact:coordinates = "SubMesh2_face_x SubMesh2_face_y SubMesh2_face_lon SubMesh2_face_lat" ;
: SubMesh2_face_contact:grid_mapping = "Mesh2_crs" ;
: SubMesh2_face_contact:cf_role = "<font color=darkorange>mesh_topology_contact</font>" ;
: SubMesh2_face_contact:<font color=darkorange>contact_meshes</font> = "SubMesh2 Mesh2" ;
: SubMesh2_face_contact:<font color=darkorange>contact_type</font> = "face face" ;
: SubMesh2_face_contact:start_[[index]] = 0 ;


Siehe unter [[NetCDF Grid Mapping Variable]].
Hinweise:
# Das Konzept der ''Mesh Topology Contact'' Variable ist nicht in den [http://ugrid-conventions.github.io/ugrid-conventions/ ''UGRID Conventions''] enthalten.
# Indizes starten mit Null.
# Jedes Plot-Subface verweist auf jeweils ein Face (Polygon) des Berechnungsgitters.
# Für jedes Face (Polygon) des Berechnungsgitters sind i.d.R. mehrere Verweise auf Plot-Subfaces vorhanden.


=Anmerkungen, Fragen=
==Koordinatentransformation==


* Datei nutzt [http://public.deltares.nl/display/NETCDF/netCDF Deltares-CF-Erweiterungen], und zusätzlich mit <font color=darkorange>orange</font> markierten (BAW-) Erweiterungen in der Topologievariablen.
* Siehe unter [[NetCDF Grid Mapping Variable]].
* 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.


----
----

Aktuelle Version vom 21. Oktober 2022, 09:24 Uhr

Kurze Beschreibung

Ein aus beliebigen Faces (Polygonen, Dreiecke und Vierecke) aufgebautes Gitter wird beschrieben. Zusätzlich sind Daten des (topografischen) 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 face gestaltet.

Alle Abweichungen/Erweiterungen von den UGRID Conventions sind nachfolgend in der Farbe darkorange farblich hervorgehoben.

Berechnungsgitter

Die Beschreibung des Berechnungsgitters ist fast vollständig identisch mit der Beschreibung NetCDF Unstrukturiertes Gitter für ein unstrukturiertes Gitter ohne SubGrid. Nachfolgend werden nur diejenigen Variablen wiederholt, deren Definition sich (in Teilen) von derjenigen eines unstrukturierten Gitters ohne SubGrid unterscheidet.

Gitter mit SubGrid

Zusätzlich zu dem Berechnungsgitter werden nachfolgend alle zur Beschreibung des topografischen SubGrid benötigten Variablen aufgeführt. Da diese Informationen insbesondere für die grafische Darstellung benötigt werden, wird dieser Gitter auch als (Plot-) SubGrid bezeichnet.

Kombiniertes Gitter

Die beiden vorgenannten Gitter - Berechnungsgitter und subgridskaliges Gitter - werden in einem kombinierten Gitter (Parent Mesh) zusammengefasst. Hierzu gehören auch die verschiedenen Kontaktlisten, die den Zusammenhang ziwschen den beiden Teilnetzen beschreiben. Diese Art der Beschreibung basiert im Wesentlichen auf Ideen, die von Bert Jagers (Deltares) erdacht wurden (siehe Deltares Conventions).


Inhalt der Datei

Dimensionen

  1. nMesh2_node : Anzahl der Knoten.
  2. nMesh2_edge : Anzahl der Kanten.
  3. nMesh2_face : Anzahl der Faces (Polygone).
  4. nMaxMesh2_face_nodes : maximale Anzahl der Knoten/Kanten in einem Face (Polygon)
  5. nSubMesh2_edge : Anzahl der Plot-Subkanten.
  6. nSubMesh2_face : Anzahl der Plot-Subfaces (Plot-Subpolygone).
  7. nMaxSubMesh2_face_nodes : maximale Anzahl der Plot-Subknoten eines Plot-Subface (-Subpolygons).
  8. two : Konstante ( = 2 ).

Hinweise:

  1. Plot-Subkanten und Plot-Subfaces (-Subpolygone) werden nur für die Visualisierung benötigt.
  2. Das Simulationsprogramm UNTRIM2 verwendet ausschließlich die korrespondierenden Tiefenklassen (hier nicht aufgeführt).
  3. Die Anzahl der Plot-Subkanten bzw. -Subfaces (-Subpolygone) kann größer oder gleich die Anzahl der entsprechenden Tiefenklassen sein.


Lokale Koordinaten

Die Beschreibung der lokalen Koordinaten des Berechnungsgitters stimmen mit derjenigen eines unstrukturierten Gitters ohne SubGrid überein. Siehe NetCDF Unstrukturiertes Gitter unter "Lokale Koordinaten".

Lokale Koordinaten des Plot-Subgrid

Kanten

double SubMesh2_edge_x(nSubMesh2_edge) ;

SubMesh2_edge_x:long_name = "x-Koordinate der 2D (Plot) SubGrid Kanten" ;
SubMesh2_edge_x:units = "m" ;
SubMesh2_edge_x:name_id = 1650 ;
SubMesh2_edge_x:bounds = "SubMesh2_edge_x_bnd" ;
SubMesh2_edge_x:standard_name = "projection_x_coordinate" ;

double SubMesh2_edge_y(nSubMesh2_edge) ;

SubMesh2_edge_y:long_name = "y-Koordinate der 2D (Plot) SubGrid Kanten" ;
SubMesh2_edge_y:units = "m" ;
SubMesh2_edge_y:name_id = 1651 ;
SubMesh2_edge_y:bounds = "SubMesh2_edge_y_bnd" ;
SubMesh2_edge_y:standard_name = "projection_y_coordinate" ;

Hinweise:

  1. Das Attribut "name_id" entspricht der (BAW) PHYDEF-Code-Kennung der Variablen.

Faces (Polygone)

double SubMesh2_face_x(nSubMesh2_face) ;

SubMesh2_face_x:long_name = "x-Koordinate der 2D (Plot) SubGrid Polygone (Faces)" ;
SubMesh2_face_x:units = "m" ;
SubMesh2_face_x:name_id = 1650 ;
SubMesh2_face_x:bounds = "SubMesh2_face_x_bnd" ;
SubMesh2_face_x:standard_name = "projection_x_coordinate" ;

double SubMesh2_face_y(nSubMesh2_face) ;

SubMesh2_face_y:long_name = "y-Koordinate der 2D (Plot) SubGrid Polygone (Faces)" ;
SubMesh2_face_y:units = "m" ;
SubMesh2_face_y:name_id = 1651 ;
SubMesh2_face_y:bounds = "SubMesh2_face_y_bnd" ;
SubMesh2_face_y:standard_name = "projection_y_coordinate" ;

Hinweise:

  1. Das Attribut "name_id" entspricht der (BAW) PHYDEF-Code-Kennung der Variablen.
  2. Es kann ein beliebiger, innerhalb des Face (Polygon) liegender Punkt gewählt werden.

Begrenzung für Kanten

double SubMesh2_edge_x_bnd(nSubMesh2_edge, two) ; \\ keine Metadaten erforderlich

double SubMesh2_edge_y_bnd(nSubMesh2_edge, two) ; \\ keine Metadaten erforderlich

Begrenzung für Faces (Polygone)

double SubMesh2_face_x_bnd(nSubMesh2_face, nMaxSubMesh2_face_nodes) ; \\ _FillValue erforderlich, da nicht immer nMaxSubMesh2_face_nodes definiert

SubMesh2_face_x_bnd:_FillValue = fillvalue ;

double SubMesh2_face_y_bnd(nSubMesh2_face, nMaxSubMesh2_face_nodes) ; \\ _FillValue erforderlich, da nicht immer nMaxSubMesh2_face_nodes definiert

SubMesh2_face_y_bnd:_FillValue = fillvalue ;

Hinweise:

  1. Koordinaten der Knoten des SubFace (SubPolygons) entgegen dem Uhrzeigersinn angeben.
  2. Fehlende Punkte mit ungültigen Werten werden mit _FillValue gekennzeichnet. Diese dürfen nur am Ende vorhanden sein.

Geografische Koordinaten

Die Beschreibung der geografischen Koordinaten des Berechnungsgitters stimmen mit derjenigen eines unstrukturierten Gitters ohne SubGrid überein. Siehe NetCDF Unstrukturiertes Gitter unter "Geografische Koordinaten".

Geografische Koordinaten des Plot-Subgrid

Kanten

double SubMesh2_edge_lon(nSubMesh2_edge) ;

SubMesh2_edge_lon:long_name = "geografische Laenge der 2D (Plot) SubGrid Kanten" ;
SubMesh2_edge_lon:units = "degrees_east" ;
SubMesh2_edge_lon:name_id = 1653 ;
SubMesh2_edge_lon:bounds = "SubMesh2_edge_lon_bnd" ;
SubMesh2_edge_lon:standard_name = "longitude" ;

double SubMesh2_edge_lat(nSubMesh2_edge) ;

SubMesh2_edge_lat:long_name = "geografische Breite der 2D (Plot) SubGrid Kanten" ;
SubMesh2_edge_lat:units = "degrees_north" ;
SubMesh2_edge_lat:name_id = 1652 ;
SubMesh2_edge_lat:bounds = "SubMesh2_edge_lat_bnd" ;
SubMesh2_edge_lat:standard_name = "latitude" ;

Hinweise:

  1. Das Attribut "name_id" entspricht der (BAW) PHYDEF-Code-Kennung der Variablen.

Faces (Polygone)

double SubMesh2_face_lon(nSubMesh2_face) ;

SubMesh2_face_lon:long_name = "geografische Laenge der 2D (Plot) SubGrid Polygone (Faces)" ;
SubMesh2_face_lon:units = "degrees_east" ;
SubMesh2_face_lon:name_id = 1653 ;
SubMesh2_face_lon:bounds = "SubMesh2_face_lon_bnd" ;
SubMesh2_face_lon:standard_name = "longitude" ;

double SubMesh2_face_lat(nSubMesh2_face) ;

SubMesh2_face_lat:long_name = "geografische Breite der 2D (Plot) SubGrid Polygone (Faces)" ;
SubMesh2_face_lat:units = "degrees_north" ;
SubMesh2_face_lat:name_id = 1652 ;
SubMesh2_face_lat:bounds = "SubMesh2_face_lat_bnd" ;
SubMesh2_face_lat:standard_name = "latitude" ;

Hinweise:

  1. Das Attribut "name_id" entspricht der (BAW) PHYDEF-Code-Kennung der Variablen.
  2. Es kann ein beliebiger, innerhalb des Polygons liegender Punkt gewählt werden.

Begrenzung für Kanten

double SubMesh2_edge_lon_bnd(nSubMesh2_edge, two) ; \\ keine Metadaten erforderlich

double SubMesh2_edge_lat_bnd(nSubMesh2_edge, two) ; \\ keine Metadaten erforderlich

Begrenzung für Faces (Polygone)

double SubMesh2_face_lon_bnd(nSubMesh2_face, nMaxSubMesh2_face_nodes) ; \\ _FillValue erforderlich, da nicht immer nMaxSubMesh2_face_nodes definiert

SubMesh2_face_lon_bnd:_FillValue = fillvalue ;

double SubMesh2_face_lat_bnd(nSubMesh2_face, nMaxSubMesh2_face_nodes) ; \\ _FillValue erforderlich, da nicht immer nMaxSubMesh2_face_nodes definiert

SubMesh2_face_lat_bnd:_FillValue = fillvalue ;

Hinweise:

  1. Koordinaten der Knoten des SubFace (SubPolygons) entgegen dem Uhrzeigersinn angeben.
  2. Fehlende Punkte mit ungültigen Werten werden mit _FillValue gekennzeichnet. Diese dürfen nur am Ende vorhanden sein.

Topologische Daten

Berechnungsgitter

Die Konnektivitäts-Listen des Berechnungsgitters stimmen mit derjenigen eines unstrukturierten Gitters ohne SubGrid überein. Siehe NetCDF Unstrukturiertes Gitter unter "Topologische Daten".

Gitter mit SubGrid

Für das SubGrid werden keine Konnektivitäts-Listen benötigt, da Nachbarschaftsbeziehungen keine Rolle spielen.

Topologievariable

Berechnungsgitter

int Mesh2 ;

Mesh2:long_name = "Berechnungsgitter" ;
Mesh2:cf_role = "mesh_topology" ; \\ UGRID required
Mesh2:topology_dimension = 2 ; \\ UGRID required
Mesh2:node_coordinates = "Mesh2_node_x Mesh2_node_y Mesh2_node_lon Mesh2_node_lat" ; \\ UGRID required
Mesh2:edge_coordinates = "Mesh2_edge_x Mesh2_edge_y Mesh2_edge_lon Mesh2_edge_lat" ; \\ UGRID optionally required for data at edges
Mesh2:face_coordinates = "Mesh2_face_x Mesh2_face_y Mesh2_face_lon Mesh2_face_lat Mesh2_face_center_x Mesh2_face_center_y Mesh2_face_center_lon Mesh2_face_center_lat" ; \\ UGRID optionally required for data at faces
Mesh2:face_node_connectivity = "Mesh2_face_nodes" ; \\ UGRID required
Mesh2:face_edge_connectivity = "Mesh2_face_edges" ; \\ UGRID optional
Mesh2:edge_node_connectivity = "Mesh2_edge_nodes" ; \\ UGRID optional
Mesh2:edge_face_connectivity = "Mesh2_edge_faces" ;
Mesh2:parent_mesh = "Combined_Mesh2_and_SubMesh2" ;

Hinweise:

  1. In der Praxis müssen nicht alle Verknüpfungslisten (connectivity) angegeben werden, da manche Informationen redundant sind. Sie sollten aber angegeben werden können.
  2. Die in 2D flexible mesh (mixed triangles, quadrilaterals, etc.) topology aufgeführten Attribute face_dimension und edge_dimension werden in der BAW nicht unterstützt. Dies ist auch nicht erforderlich, da die Reihenfolge der Dimensionen in den Konnektivitäts-Variablen standardkonform sind.
  3. Das Attribut "parent_mesh" verweist auf das kombinierte Gitter (Parent Mesh), dessen erster Bestandteil das Berechnungsgitter ist.

Gitter mit SubGrid

int SubMesh2 ;

SubMesh2:long_name = "SubGrid" ;
SubMesh2:cf_role = "mesh_topology" ;
SubMesh2:topology_dimension = 2 ;
SubMesh2:edge_coordinates = "SubMesh2_edge_x SubMesh2_edge_y SubMesh2_edge_lon SubMesh2_edge_lat" ;
SubMesh2:face_coordinates = "SubMesh2_face_x SubMesh2_face_y SubMesh2_face_lon SubMesh2_face_lat" ;
SubMesh2:parent_mesh = "Combined_Mesh2_and_SubMesh2" ;

Hinweise:

  1. Weiter gehende topologische Daten liegen für das Plot-SubGrid nicht vor.
  2. Diese Variable entspricht nicht den UGRID Conventions, da für das SubGrid keine Konnektivitäts-Listen benötigt werden bzw. bekannt sind.
  3. Das Attribut "parent_mesh" verweist auf das kombinierte Gitter (Parent Mesh), dessen zweiter Bestandteil das SubGrid ist.

Kombiniertes Gitter

int Combined_Mesh2_and_SubMesh2 ;

Combined_Mesh2_and_SubMesh2:long_name = "Kombiniertes Gitter" ;
Combined_Mesh2_and_SubMesh2:cf_role = "mesh_topology" ;
Combined_Mesh2_and_SubMesh2:sub_meshes = "Mesh2 SubMesh2" ;
Combined_Mesh2_and_SubMesh2:mesh_contacts = "SubMesh2_face_contact SubMesh2_edge_contact" ;

Hinweise:

  1. Das Konzept der Parent Mesh Variable ist nicht in den UGRID Conventions enthalten.
  2. Das Attribut "sub_meshes" verweist auf die beiden, zu dem Parent Mesh gehörenden Gitternetze (Berechnungsgitter, SubGrid).
  3. Das Attribut "mesh_contacts" verweist auf Variablen, welche den Zusammenhang zwischen den zu dem Parent Mesh gehörenden Gitternetzen beschreiben.

Kontaktlisten

Die Kontaktlisten beschreiben den Zusammenhang zwischen den verschiedenen Bestandteilen des Parent Mesh. In diesem Beispiel den Zusammenhang zwischen dem Berechnungsgitter und dem SubGrid sowie umgekehrt.


Kontaktliste Plot-Subkanten <-> Kanten

int SubMesh2_edge_contact(nSubMesh2_edge, two) ;

SubMesh2_edge_contact:long_name = "Liste aller Kontakte zwischen (Plot-) SubKanten und (Berechnungs-) Kanten" ;
SubMesh2_edge_contact:valid_range = 0, 4279 ;
SubMesh2_edge_contact:_FillValue = -999 ;
SubMesh2_edge_contact:coordinates = "SubMesh2_edge_x SubMesh2_edge_y SubMesh2_edge_lon SubMesh2_edge_lat" ;
SubMesh2_edge_contact:grid_mapping = "Mesh2_crs" ;
SubMesh2_edge_contact:cf_role = "mesh_topology_contact" ;
SubMesh2_edge_contact:contact_meshes = "SubMesh2 Mesh2" ;
SubMesh2_edge_contact:contact_type = "edge edge" ;
SubMesh2_edge_contact:start_index = 0 ;

Hinweise:

  1. Das Konzept der Mesh Topology Contact Variable ist nicht in den UGRID Conventions enthalten.
  2. Indizes starten mit Null.
  3. Jede Plot-Subkante verweist auf jeweils eine Kante des Berechnungsgitters.
  4. Für jede Kante des Berechnungsgitters sind i.d.R. mehrere Verweise auf Plot-Subkanten vorhanden.

Kontaktliste Plot-Subfaces <-> Faces

int SubMesh2_face_contact(nSubMesh2_face, two) ;

SubMesh2_face_contact:long_name = "Liste aller Kontakte zwischen (Plot-) SubPolygonen und (Berechnungs-) Polygonen" ;
SubMesh2_face_contact:valid_range = 0, 10271 ;
SubMesh2_face_contact:_FillValue = -999 ;
SubMesh2_face_contact:coordinates = "SubMesh2_face_x SubMesh2_face_y SubMesh2_face_lon SubMesh2_face_lat" ;
SubMesh2_face_contact:grid_mapping = "Mesh2_crs" ;
SubMesh2_face_contact:cf_role = "mesh_topology_contact" ;
SubMesh2_face_contact:contact_meshes = "SubMesh2 Mesh2" ;
SubMesh2_face_contact:contact_type = "face face" ;
SubMesh2_face_contact:start_index = 0 ;

Hinweise:

  1. Das Konzept der Mesh Topology Contact Variable ist nicht in den UGRID Conventions enthalten.
  2. Indizes starten mit Null.
  3. Jedes Plot-Subface verweist auf jeweils ein Face (Polygon) des Berechnungsgitters.
  4. Für jedes Face (Polygon) des Berechnungsgitters sind i.d.R. mehrere Verweise auf Plot-Subfaces vorhanden.

Koordinatentransformation


zurück zu NetCDF


Strukturübersicht