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.

Nach oben scrollen