08.5 Datenhandling auf Modulebene
Die Integration von Verwaltungsmöglichkeiten für alle Datenarten und -strukturen, die im Zusammenhang mit einer hydrologischen Flussgebietsmodellierung denkbar sind, ist weder möglich noch wäre sie aufgrund der damit verbundenen Redundanzen effektiv.
Reicht der vom Rahmenprogramm verwaltete Datenfundus für ein einzubindendes Modul nicht aus, so sind die benötigten Spezialdaten auf Modulebene zu verwalten.
Dafür werden die im Folgenden beschriebenen Routinen bereitgestellt, die neben der Eingabe und Auswertung dieser Daten auch die Verwaltung des benötigten Speicherplatzes unterstützen (allokieren, adressieren und freigeben).
Um die Verarbeitung nicht integrierter Daten innerhalb von Modulen zu gestatten, wurden eine Reihe von Routinen mit dem Ziel geschaffen, auch dem in der Programmierung nicht so versierten Nutzer ein möglichst einfaches Datenhandling zu gestatten.
8.5.1 Zeitinvariante Daten
Eine wesentliche Aufgabe der in Tabelle 8.5‑1 aufgeführten Routinen ist es, neue Datentabellen einzulesen, die analog den im Kapitel 4.5 aufgeführten Relate-Tabellen strukturiert sind, oder auf zusätzliche (vom Rahmenprogramm nicht eingelesene) Attribute in vorhandenen Relate-Tabellen zuzugreifen.
Tabelle 8.5‑1: Routinen zur Verwaltung von Relate-Tabellen
Name der Funktion | Übergabewerte | Bedeutung |
double * Alloc_Double | (double**,int n,char *cf) | allokiert DoubleFeld der Dimension n, bei Fehler wird die Zeichenkette cf als Mitteilung ausgegeben |
int * Alloc_Int | (int**,int n,char *cf) | allokiert IntegerFeld i_array der Dimension n, bei Fehler wird die Zeichenkette cf als Mitteilung ausgegeben |
Char * xsprints | (char* buffer, char *format, …) | analog fprintf, allerdings Ausgabe nicht auf File, sondern auf Zeichenkette buffer |
int TB_OpenTable | (char *db_typ, char *ws, char *fn, char *id_name, DB_Tab **tab) | Öffnet die Tabelle fn (=Dateiname) vom Typ db_typ („ASCII“) im Verzeichnis ws, liest die Schlüsselspalte (über id_name gekennzeichnet ein und liefert die Tabellenstruktur *tab zurück, Rückgabewert = anz_rec (Anzahl der Zeilen) |
int TB_OpenRelateTable | (**tab, char *modname, char *tabname, char *id_name, char *err | Öffnet die RelateTabelle tabname (=Dateiname) im GIS-RELATE-Verzeichnis, liest die Schlüsselspalte (über id_name gekennzeichnet ein und liefert die Tabellenstruktur *tab zurück, Rückgabewert = anz_rec (Anzahl der Zeilen), modname gibt den Modulnamen bzw. den Block an, unter dem die Einträge in der modul.ste stehen, err ist eine Zeichenkette, über die eine Fehlerbeschreibung definiert werden kann |
int TB_TableAnzRec | (DB_Tab *tab) | gibt die Anzahl der Zeilen bzw. der Datenrecords der Tabelle zurück |
void TB_BindIAttribut | (DB_Tab *tab, char *attributname, int **values) | allokiert das Feld values und liest die Werte des Attributs attributname aus der Tabelle tab |
int TB_GetIAttribut4Id | (DB_Tab *tab, int id, int *values) | liefert aus dem Feld values den der ID id zugeordneten Wert zurück |
Int TB_ReadAttribut | (DB_Tab *tab, char *modname, char *attributname, double **values, char *err) | allokiert das Feld values und liest die Werte des Attributs attributname aus der Tabelle tab, modname gibt den Modulnamen bzw. den Block an, unter dem die Einträge in der modul.ste stehen, err ist eine Zeichenkette, über die eine Fehlerbeschreibung definiert werden kann |
void TB_BindDAttributdouble TB_GetDAttribut4Id | analog TB_BindIAttribut und TB_GetIAttribut4Id für Double | |
void TB_CloseTable | (DB_Tab *tab) | schließt die Datei fn |
void TB_Close | (DB_Tab *tab) | schließt die Datei fn und gibt die Struktur tab frei |
8.5.2 Zeitvariante Daten
Eine Beschreibung zur Definition und Anwendung von zeitvarianten Daten ist in Kapitel 5.5 zu finden.
8.5.2.1 Routinen zur Verwaltung von Zeitreihen
Die Routine ReadZRelTab liest Zeitfunktionen ein, deren Werte je nach Berechnungsfortschritt bzw. dem aktuellen Datum in der Simulation auf die dafür vorgesehenen Variablen gebunden werden.
Tabelle 8.5‑2: Routinen zur Verwaltung von Zeitreihen
Name der Funktion | Übergabewerte | Bedeutung |
ZRel_tab * ReadZRelTab | () | Liest Zeitreihentabellen ein |
void GetZRelTab | (ZRel_tab *ht) | Speichert die Werte der Zeitreihendateien gemäß des Simulationszeitpunktes auf die dafür vorgesehen Speicherplätze |
void FreeZRelTab | (ZRel_tab *ht) | Gibt den in ReadZRelTab allokierten Speicherplatz wieder frei |
8.5.2.2 Unterstützte Zeitfunktionen
Unterstützt werden äquidistante und nicht äquidistante Zeitfunktionen.
Die nicht äquidistanten Zeitfunktionen beschreiben über Stützstellen vorzugebende Verläufe. Zwischen den Stützstellen wird linear interpoliert oder eine Stufenfunktion aufgebaut. Bei der Stufenfunktion gilt ein Wert solange, bis er durch einen neuen ersetzt wird.
Die Zeitfunktionen für Kennwerte von Relateklassen befinden sich im Verzeichnis ../zeit.dat/ascii.rel/.
8.5.2.3 Analytische Zeitfunktionen
Analytische Funktionen werden aufgrund der Vielzahl denkbarer Ansätze nicht direkt unterstützt. Diese sind vom Modulentwickler selbst zu programmieren, wobei jedoch die Parameterverwaltung für solche Funktionen durch die Nutzung der in Kapitel 8.5.1 (attributbezogene Kennwerte) oder Kapitel 8.4 (globale bzw. attributunabhängige Parameter) unterstützt wird.