08.1 Eingangsbemerkungen

Print Friendly, PDF & Email

Ein Modul ist ein Modellbaustein, der die Prozesse genau einer übergeordneten Modellebene beschreibt. Dabei werden Eingangsdaten, die von übergeordneten Modellebenen geliefert werden unter Nutzung von prozessbeschreibenden Funktionen in Ausgangsdaten transformiert. Diese Ausgangsdaten wiederum werden über ArcEGMO an nachfolgende Modellebenen und zur Ergebnisauswertung an RESULT (s. Kapitel 6) weitergegeben. Dementsprechend ist sowohl die Zeit- und Ortsschrittsteuerung wie auch die Parameterermittlung in die übergeordnete Modellebene integriert.

Diese Trennung der Funktionen zwischen Modellebenen und Modulen erlaubt mehr oder weniger umfangreiche Modifikationen der zur Verfügung gestellten Basismodule. Probleme sind dann zu erwarten, wenn umfängliche neue Modelle integriert werden sollen, denen eine andere Modellphilosophie zugrunde liegt.

Für Weiterentwicklungen des Systems ArcEGMO ist deshalb zu klären, ob einem Modul in Zukunft auch die Ermittlung der Modellparameter inklusive der Speicherbereitstellung zugeordnet wird. Dies erhöht wesentlich den Programmieraufwand für den Modellentwickler, gleichzeitig ergeben sich aber auch variablere Gestaltungsmöglichkeiten. Inwiefern es erforderlich wird, die Zeit- und Ortsschrittsteuerung den Modulen zuzuordnen, kann derzeit nicht abgeschätzt werden.

Unter obigen Gesichtspunkten ist klar, dass die folgende Beschreibung der Modulbibliothek genauso wie die Beschreibung der Modellebenen im Kapitel 7 nur eine vorübergehende sein kann.


08.2 Struktur der Modulbibliothek

Print Friendly, PDF & Email

Abbildung 8.2‑1 zeigt die Verzeichnisstruktur der Modulbibliothek, die jeweils einer Modellebene ein Verzeichnis zuordnet. Das zusätzliche Verzeichnis COMMON ist für Modellbausteine vorgesehen, die so allgemeiner Natur wie z.B. der Einzelspeicher sind, dass sie von verschiedenen Modulen genutzt werden.

 

image

Abbildung 8.2‑1: Verzeichnisstruktur der Modulbibliothek

 

Lies den Rest dieses Eintrags »


08.4 Routinen zur Modulsteuerung

Print Friendly, PDF & Email

Über Einträge in der Modulsteuerdatei …ARC_EGMOMODUL.STE können einem Modul Parameter, Steuergrößen oder sonstige Werte zugeordnet werden. Dazu ist, analog dem Beispiel in Abbildung 8.4‑1, ein Block in der Steuerdatei einzurichten. Dieser Block sollte mit einem eindeutigen Steuerwort wie dem Modulnamen eingeleitet werden. Die eigentliche Steuerinformation, hier ein Faktor zur Skalierung des Rückgangsverhaltens des Abflusses, wird über ein Schlüsselwort definiert.

Q_ELS
RUECKGANGSFAKTOR 0.002

Abbildung 8.4‑1: Auszug aus der Modulsteuerdatei

 

Tabelle 8.4‑1: Routinen zur Modulsteuerung

Name der Funktion Übergabewerte Bedeutung
FdModul (void) FILE-Pointer auf die Datei MODUL.STE
FdPara (int rb, char* access, char* fname) FILE-Pointer auf eine Parameterdatei <RB><fname> im para-Verzeichnis der akt. Berechnungsvariante, access <wt|rt>, rb <EFL|KAS|TG|GEB|REG|FGW>
ZModulSteuerInfo (modulname, key, zeile) gibt komplette Zeile aus dem über modulname definierten Block zur eigenen Weiterverwendung
ModulAnswer (modulname, key) Wertet Ja/Nein-Anworten in der Modulsteuerdatei aus
IModulSteuerInfo (modulname, key, val, default) Gibt INT-Wert aus Steuerdatei zurück, Blockdefinition über Modulname,
Zeilendefinition über key
DModulSteuerInfo (modulname, key, val, default) Gibt Double-Wert aus Steuerdatei zurück, Blockdefinition über Modulname,
Zeilendefinition über key
CmodulSteuerInfo (modulname, key, val, default) Gibt Zeichenkette aus Steuerdatei zurück, Blockdefinition über Modulname,
Zeilendefinition über key
ModulTestDruck (modulname) Rueckgabe 1, wenn Testdruck aktiviert wurde, d.h. Zeichenkette „Testdruck“ in der MODUL.STE gefunden wurde

 

Für den Zugriff auf die Steuerinformationen vom Programm aus stehen eine Reihe von Routinen zur Verfügung, die in Tabelle 8.4‑1 aufgelistet sind und die detaillierter (mit Prototypen) im Kapitel „Schnittstellen“ dokumentiert sind.

Der kleine Programmauszug aus Q_ELS.C in Abbildung 8.4‑2 zeigt beispielhaft die Nutzung dieser Routinen. Über den Modulnamen „q_els“ und das Schlüsselwort „RUECKGANGSFAKTOR“ wird der gewünschte Eintrag selektiert und der Wert von 0.002 auf die double-Variable kfak geschrieben. Wurde der angegebene Eintrag nicht gefunden, liefert die Routine als Rückgabewert „0“, so dass dann gemäß dem Vergleich im Beispiel kfak mit einem Standardwert (hier 0.1) belegt wird.

DModulSteuerInfo(„q_els“,“RUECKGANGSFAKTOR“,&kfak, 0.1);

Abbildung 8.4‑2: Auszug aus der Programmdatei Q_ELS.C


08.5 Datenhandling auf Modulebene

Print Friendly, PDF & Email

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.


08.6 Module in der Standardbibliothek

Print Friendly, PDF & Email

Die folgende Tabelle beinhaltet die Module der Standardbibliothek und eine Kurzcharakteristik ihrer Funktion. Ausführlich werden diese Module im Teil Module dieser Dokumentation beschrieben.

Tabelle 8.6‑1: Module der einzelnen Modellebenen

Ebene bzw. Verzeichnis Modul Raumauflösung Prozessbeschreibung
ABI SiWaE EFL Speicheransätze für homogene Standorte
EGMO KAS, TG, REG oder GEB Speicheransätze mit Flächenverteilungsfunktionen für Hydrotopklassen
RD KinWave kinematische Welle
RD_SIMP gebildeter Abfluss = abgeflossener Abfluss
GW EGMO_GW Einzellinearspeicher nach Abflusskomponenten
Q  Q_ELS  Speicherkaskaden
FGW, TG, REG oder GEB