diff options
Diffstat (limited to 'doc/dynamo/dynamo handbuch')
-rw-r--r-- | doc/dynamo/dynamo handbuch | 1826 |
1 files changed, 0 insertions, 1826 deletions
diff --git a/doc/dynamo/dynamo handbuch b/doc/dynamo/dynamo handbuch deleted file mode 100644 index 4012973..0000000 --- a/doc/dynamo/dynamo handbuch +++ /dev/null @@ -1,1826 +0,0 @@ -#block##pageblock##page (2)##setcount (1)##count per page# -#head# -#center#DYNAMO-Compiler -#center#____________________________________________________________ - -#end# -#bottom odd# -#center#____________________________________________________________ -GMD #right#DYNAMO - % -#end# -#bottom even# -#center#____________________________________________________________ -DYNAMO - % #right#GMD -#end# - -#ib#1. Einleitung#ie# - - - -Diese Handbuch beschreibt die Funktion des EUMEL-DYNAMO-Compilers in der -Version 3.3+ und seine Einschränkungen oder Änderungen gegenüber dem -DYNAMO-Sprachstandard. In keiner Weise kann diese Beschreibung eine Einfüh -rung in die Programmiersprache DYNAMO ersetzen! - -Die beschriebene Compilerversion enthält nun auch ein Modul zur Unterstützung von -hochauflösender Grafik durch die häufig in IBM-PC/AT-Kompatiblen eingesetzte -CGA-Grafikkarte. Dennoch ist es einfach möglich, diesen Grafikmodus auszuschal -ten, und somit die alte, zeichenorientierte Grafik weiter zu verwenden. - -Der DYNAMO-Compiler wurde 1983 von Robert Keil und Torsten Fröhlich (Helm -holtz-Gymnasium, Bonn) im Rahmen des MIKROS-Projektes am Informatik-Kolleg -der GMD entwickelt. Für Spezifikation und Betreuung der Entwicklung war Dr. Diether -Craemer verantwortlich, software-technische Unterstützung kam von Prof. John -Henize, Dr. Peter Heyderhoff, Rudolf Legde und Dipl.- Math. Lothar Oppor. Die -Grafik wurde von D.Giffeler beigesteuert. - - - - -#ib#1.1. Referenzliteratur#ie# - - - - - [1] Craemer, Diether - "Mathematisches Modellieren dynamischer Vorgänge" - e. Einf. in die Programmiersprache DYNAMO - Stuttgart, Teuber, 1985 - ISBN 3-519-02477-2 - - [2] Craemer, Diether - "Fluß und Zustand - Simulation dynamischer Vorgänge in DYNAMO" - in: LOGIN 5 (1985), Heft 1, S. 20-23 - - [3] Pugh, Alexander L. - "DYNAMO II User's Manual" - Cambridge, London 1973: MIT-Press - ISBN 0-262-66018-0 -#page# - -#ib#1.2. Die Programmiersprache DYNAMO#ie# - - - -DYNAMO wurde von einer Gruppe um Jay FORRESTER am Massachusetts Institute -of Technology (MIT) um 1960 entwickelt. Die Sprache basiert auf der #on ("i")# System -Dynamic#off ("i")# von FORRESTER. - -In DYNAMO (#on ("u")##on ("b")#Dyna#off ("b")##off ("u")#mic #on ("u")##on ("b")#Mo#off ("b")##off ("u")#delling Language) können Systeme, in denen Veränderun -gen kontinuierlich geschehen, modelliert und simuliert werden. - -Kontinuierliche Veränderungen von Größen werden über deren Veränderungsrate im -Wesentlichen nach folgender Gleichung berechnet - -Größe jetzt = Größe früher + DT * Veränderungsrate, - -dabei ist DT die Länge des Zeitintervalls von "früher" bis "jetzt". - -Außer diesen Gleichungen für Größen braucht man Gleichungen für die Verände -rungsraten, für Hilfsgrößen, zur Initialisierung von Größen, zur Definition von Konstan -ten und Tabellen, zu Angaben von Simulationsläufen und zur Wiedergabe von Ergeb -nissen in Zahlentabellen oder Diagrammen. - -Alle diese Gleichungen können einfach in der Form, wie man sie aus dem Mathema -tik-Unterricht der Sekundarstufe kennt, hingeschrieben werden, ohne sich Gedanken -über den Ablauf des Programms machen zu müssen. - -#on ("b")# -DYNAMO ist also eine einfache funktional-applikative, nicht-prozedurale Sprache.#off ("b")# - -Das macht ihren Reiz und ihre Leistungsfähigkeit aus, die zur Formulierung der be -kannten Weltmodelle von FORRESTER, MEADOWS ("Die Grenzen des Wachstums"), -PESTEL, MESAROVIC u.a. in dieser Sprache führten. - -Anwendungsgebiete der Sprache sind ökologische, gesellschaftliche, wirtschaftliche -und technische Systeme, deren dynamisches Verhalten der Modellbildner nachbilden -und studieren möchte. - -Im Allgemeinen verfolgt der Modellbildner mit seinem Modell einen Zweck (Verhaltens -änderung des nachgebildeten Systems), so daß auch neben gesicherten Fakten die -Wertvorstellungen des Modellbildners in das Modell eingehen. - - - - -#ib#1.3 Kurz-Einführung in die DYNAMO- -Schreibweise#ie# - - - -Die System Dynamic Methode benutzt als Analogie-Bild den Archetyp des Flusses: - - - Wasser fließt durch das Flußbett, kann in Seen gestaut und in der Ge - schwindigkeit durch Schleusen und Wehre reguliert werden. - - - Analog dazu "fließt" Geld auf dem Überweisungsweg, wird in Konten gestaut, - und die Liquidität kann durch Zinssätze reguliert werden. - - - Gedanken "fließen" auf Nervenbahnen, werden im Gehirn gespeichert, und - Gedankenströme werden über Synapsen reguliert. - - - Autos "fließen" über Straßen, werden auf Parkplätzen gestaut, und der Ver - kehrsfluß wird über Ampeln reguliert. - - - Menschen "fließen" über Wanderwege, halten sich in Wohnorten auf, und die - Bevölkerungsdynamik wird durch ein komplexes, rückgekoppeltes Zusammen - spiel von Ein- und Auswanderungsraten sowie Geburts- und Sterberaten - reguliert. - -Am letzten Beispiel wird deutlich, daß sich ein soziales Phänomen nur im Zusam -menwirken vieler netzartig miteinander verbundener Variablen beschreiben läßt (wenn -überhaupt). - -Solange jedoch einigen Variablen ZUSTANDS-CHARAKTER ("Wasserstand") und -anderen VERÄNDERUNGS-CHARAKTER ("Flußgeschwindigkeit") zugeordnet -werden kann, können die Größen für Berechnungen folgender Art verwendet werden: - - - Wasserstand jetzt = Wasserstand früher + vergangene Zeit * - (Zuflußrate - Abflußrate) - - -analog: - - Bevölkerung jetzt = Bevölkerung früher + vergangene Zeit * - (Geburtsrate - Sterberate) - - -Diese Schreibweise kann praktisch so in ein Computerprogramm übernommen wer -den. Mit geringfügigen Änderungen handelt es sich bei diesen Gleichungen schon um -gültige Zeilen in der Programmiersprache DYNAMO. - -In DYNAMO wird er Zeitpunkt "jetzt" durch das Anhängsel .K, der Zeitpunkt "früher" -durch das Anhängsel .J, die Zeitspanne von jetzt bis später durch das Anhängsel .KL, -die Zeitspanne von früher bis jetzt durch das Anhänsel .JK und die vergangene Zeit -mit DT (wie "Delta Tempus": Zeitdifferenz) bezeichnet. Die Variablen mit Zustands- -Charakter heißen LEVELS (Niveaus) und die Veränderungs-Charakter heißen RATES -(Veränderungsraten, Geschwindigkeiten). Die entsprechenden Gleichungen werden mit -L bzw. R gekennzeichnet. Es gib weitere Kennzeichnungen: - - C für Konstantendefinition (constant) - T für Tabellendefintion (table) - A für Hilfsgrößen (auxiliaries) - N für Anfangswerte (initial) - X für Folgezeile (extension) - PRINT für Ausgabe von Zahlen - PLOT für Ausgabe von Diagrammen - -Ein einfaches Bevölkerungsmodell könnte z.B. so geschriben werden: - - - L BEVÖLKERUNG.K=BEVÖLKERUNG.J+DT*(GEBURTENRATE.JK - X -STERBERATE.JK) - R STERBERATE.KL=5 - R GEBURTENRATE.KL=20 - N BEVÖLKERUNG=1000 - C DT=1 (jedes Jahr wird neu berechnet) - C LENGTH=60 (60 Jahre werden simuliert) - PRINT BEVÖLKERUNG - - -Für eine tiefere Einführung in DYNAMO sollte man die Referenzliteratur zu Rate -ziehen. - - - - -#ib#1.4 Eine erste, kleine Sitzung mit dem -DYNAMO-System#ie# - - - -Wir gehen davon aus, daß das DYNAMO-System in ihrer Task generiert worden ist -(siehe 2.). - - 1. Tippen Sie das obrige Programm mittels des EUMEL-Editors ab. - - 2. Verlassen Sie den Editor mit <ESC><q> und starten Sie den DYNAMO- - Compiler durch die Eingabe des Befehls "dynamo". - - 3. Nach erfolgreichem Übersetzen sollte Ihnen nun das DYNAMO-Runtime- - System zur Verfügung stehen. Durch den Befehl 'run' wird das Programm aus - geführt und Sie erhalten eine Zahlenkolonne, die die Entwicklung der Bevöl - kerung in den zu untersuchenden 60 Jahren angibt. Falls Ihnen beim Abtippen - des Programms Fehler unterlaufen sein sollten, so kann das Programm nicht - fehlerfrei übersetzt werden. Fehlermeldunggen zur Compile-Zeit des - DYNAMO-Compilers werden im Paralleleditor angezeigt; das Programm kann - im oberen der beiden Editorfenster (in diesem befinden Sie sich auch nach - Fehlern) korrigiert werden. Danach können Sie erneut wie nach Punkt 2 ver - fahren. -#page# - - - -#ib#2. Generierung des DYNAMO-Compilers#ie# - - - -Der DYNAMO-Compiler, seine Funktionen und die Beispielprogramme werden auf -zwei Archiv-Disketten a#b#' 360 KB ausgeliefert. - -Zum Generieren des DYNAMO-Systems legen Sie bitte die erste Diskette in das -Dikettenlaufwerk Ihres Rechners und durch folgende Kommandozeile lesen Sie den -Generator vom Archiv und starten ihn: - - - archive ("dynamo"); fetch ("dyn.inserter", archive); run - - -Danach holt der Generator alle benötigten Dateien vom eingelegten Archiv bzw. von -dem zweiten Archiv (nachdem er Sie zum Wechseln der Diskette aufgefordert hat). -Anschließend wird der DYNAMO-Compiler insertiert. Am Ende der Generierung -werden Sie gefragt werden, ob Sie den Compiler mit Grafik#u##count ("Grafik")##e# oder ohne benutzen -wollen. Nach der Meldung "dynamo system generiert" können Sie den Compiler#foot# -#u##value ("Grafik")##e# Es kann z.Zt. nur eine CGA-Grafikkarte betrieben werden -#end# -nutzen. -#page# - - - -#ib#3. Der EUMEL-DYNAMO-Compiler#ie# - - - -Der im EUMEL-System implementierte DYNAMO-Compiler ist ein 2-Pass- -Compiler, der die DYNAMO-Programme zunächst in ELAN übersetzt. Der Vorteil -dieser Methode besteht darin, daß es möglich ist, übersetzte Programme unabhängig -vom DYNAMO-Compiler zur Ausführung bringen zu können. - -Die Notation der im folgenden aufgeführten ELAN-Prozeduren des Compilers ent -spricht der in den EUMEL-Handbüchern üblichen Prozedurkopf-Schreibweise. - -Als Beispiel: - - - dynamo ("dyn.grasshasenfuchs") - - -ein Beispiel für den Aufruf der Prozedur mit der Prozedurkopf-Schreibweise - - PROC dynamo (TEXT CONST filename) - -auf der Kommando-Ebene des Betriebssystems EUMEL. - -Der Prozedur 'dynamo' wird beim Aufruf der Dateiname (TEXT) 'filename' übergeben -und dadurch der Compiler auf die Datei mit dem Namen 'filename' angewendet. - - - - -#ib#3.1. Benutzung des DYNAMO-Compiler#ie# - - - -Um ein DYNAMO-Programm zu Übersetzen, gibt es grundsätzlich zwei Möglichkei -ten. Erst einmal kann man ein DYNAMO-Programm in ein ELAN-Programm um -wandeln, jedoch ohne es dabei zur Ausführung zu bringen. Dieses ELAN-Programm -kann man nun unabhängig vom eingentlichen Compiler starten. Die zweite, wohl öfter -angewendete Methode ist, ein DYNAMO-Programm in ein ELAN-Programm zu -compilieren, wobei es danach direkt ausgeführt wird. Ob danach ein ELAN- -Programm zur Verfügung stehen soll, kann der Benutzer selbst entscheiden. - - -PROC dynamo - - Zweck: Aufruf des DYNAMO-Compilers mit 'quelldatei' = 'last param', d.h. das - zu übersetzende Programm steht in der zuletzt bearbeiteten Datei. - - -PROC dynamo (TEXT CONST quelldatei) - - Zweck: Ruft den DYNAMO-Compiler für die Datei 'quelldatei' auf. Anmerkung: - Gleichbedeutend mit 'dynamo (quelltext, quelltext + ".elan", TRUE)', s. - nächste Prozedur. - - Beispiel: - - - dynamo ("dyn.grashasenfuchs") - - - Der DYNAMO-Compiler wird auf die Datei "dyn.grashasenfuchs" ange - wendet. - - -PROC dynamo (TEXT CONST quelldatei, zieldatei, - BOOL CONST pass2 ausfuehren) - - Zweck: Diese Prozedur startet den DYNAMO-Compiler. 'quelldatei' gibt den - Namen der Datei an, in welcher der DYNAMO-Quelltext enthalten ist, - 'zieldatei' ist der Name der Datei, die das erzeugte ELAN-Programm - beinhalten soll. Wenn 'pass2 ausfuehren' = TRUE, dann wird dieses auch - durch den ELAN-Compiler weiterverarbeitet (das Programm wird zur - Ausführung gebracht). - - Beispiel: - - - dynamo ("dyn.grashasenfuchs", - "grashasenfuchs.elanprogramm", FALSE) - - - Im obigen Beispiel wird der in der Datei "dyn.grashasenfuchs" enthaltene - DYNAMO-Quelltext in die Datei "grashasenfuchs.elanprogramm" als - ELAN-Programm geschrieben. Das ELAN-Programm wird nicht ausge - führt. - - -PROC erase (BOOL CONST erase option) - - Zweck: Wenn 'erase option' = TRUE, so werden die erzeugten ELAN-Programme - nach Beendigung der Ausführung gelöscht, bei 'erase option' = FALSE - bleiben sie erhalten (Voreinstellung: 'erase option' = FALSE). - - -PROC error listing (TEXT CONST fehlerdatei) - - Zweck: Falls gewünscht ist, die Fehlermeldungen, die ggf. beim Übersetzen ein - treten, auch in eine Datei zu schreiben, so können Sie hier unter 'fehler - datei' einen Dateinamen angeben. Bei der Angabe von "" wird die Umlei - tung in die Datei ausgeschaltet werden (Voreingestellt ist 'fehlerdatei' = - ""). - - -PROC graphic (BOOL CONST graphic option) - - Zweck: Mit dieser Prozedur läßt sich einstellen, ob bei der DYNAMO-Anweisung - PLOT die hochauflösende Grafik ('graphic option' = TRUE) oder die zei - chenorientierte Grafik ('grafik option' = FALSE) verwendet werden soll. Die - Voreinstellung wird bei der Installation des Compilers erfragt. - - -PROC protokoll (BOOL CONST protokoll option) - - Zweck: Bei 'protokoll option' = TRUE werden alle Textausgaben, die bei der - Laufzeit des DYNAMO-Programmes auftreten, nicht nur auf dem Bild - schirm dargestellt, sondern auch in eine Datei mit dem Namen "dyn.out" - protokolliert (voreingestellt ist 'protokoll option' = FALSE). Die Datei - "dyn.out" enthält auch Seitenvorschubbefehle ('\#page\#') und sollte nur mit - einem EUMEL-Printer ausgedruckt werden. - - - - -#ib#3.2. Abweichungen gegenüber dem - Sprachstandard#ie# - - - - - Die Länge der Namen ist nicht auf 7 Zeichen festgelegt, sondern praktisch be - liebig (32000). Dies ist eine Erweiterung; wer seine Programme auch auf ande - ren DYNAMO-Compilern laufen lassen will, sollte sich aber auf 7 Zeichen be - schränken. - - - Zahlen werden intern mit einer Mantisse von 13 Stellen abgespeichert, von denen - nur die ersten 7 bei der Ausgabe dargestellt werden. Die größte darstellbare Zahl - ist daher 9.999999999999e126. - - - Die maximale Anzahl der Gleichungen ist auf 950 festgelegt. - - - Der Compiler akzeptiert aus Gründen der besseren Lesbarkeit auch Programme, - die in Kleinschrift geschrieben sind. Dabei ist es sinnvoll, die Quellprogramme - konsistent zu halten (d.h. Groß- und Kleinschrift nicht zu vermischen). Man - sollte grundsätzlich Kleinschrift vorziehen, da diese vom Compiler auch effizienter - verarbeitet werden kann. - - - Quellprogramme dürfen eine beliebige Zahl von Leerzeilen enthalten. X - Befeh - le (Fortschreibungszeilen) werden davon nicht beeinflußt. - - - In der augenblicklichen Version 3.3 des Compilers gelten folgende Einschränkun - gen : - - 1. Bei der Verarbeitung von Array-Gleichungen werden Compilerseitig keine - Semantik-Überprüfungen auf eventuell unzureichende Initialisierung oder - Überlappung (d.h. mehrfaches Setzen desselben Elements) durchgeführt. - Defaultmäßig bekommen alle Elemente einer Array-Gleichung bei der Initiali - sierung den Wert '0.0' zugewiesen. - - 2. Die maximale Größe von Tables und Array-Gleichungen ist durch Verwen - dung des Vector-Pakets auf 4000 Elemente festgelegt. Da pro Table-Ele - ment aber zur Zeit eine Zeile im Zielprogramm generiert wird, sollte man dies - besser nicht ausnutzen. - - 3. Supplementary-Gleichungen werden aus Kompatibilitäts-Gründen korrekt - übersetzt, aber sonst wie Auxiliary-Gleichungen behandelt. - - 4. Print ('prtper')- und Plotperiode ('pltper') werden nur als Konstanten verarbei - tet. Falls Gleichungen für 'prtper' oder 'pltper' angegeben werden, so bewirken - diese keine Veränderung. - - 5. Array-Gleichungen dürfen nicht mehr als eine Dimension besitzen. - - 6. Für Gleichungen, die Makro-Aufrufe enthalten, sollten Initialisierungs (N)- - Gleichungen angegeben werden. - - - -#ib#3.3. Das DYNAMO Runtime-System#ie# - - - -Nach erfolgreicher Übersetzung wird vom Zielprogramm das Runtime-System aufge -rufen. In diesem Modus (das DYNAMO-Runtime-System meldet sich mit "dynamo -runtime system :") ist es möglich, Konstanten zu ändern und DynamoProgramme zur -Ausführung zu bringen. - -Im DYNAMO-Runtime-System stehen folgende Kommandos zur Verfügung (näheres -zur Notation siehe Kapitel 4, S. #to page ("Anweisungen und Funktionen")#). - - - run - - Zweck: Ausführen des übersetzten Programms - - - run <name> - - Zweck: Ausführen des übersetzten Programms und retten des Konstantendaten - raums in des Datenraum mit dem Namen "<name>.const". Existiert der - Datenraum bereits, werden die Konstanten aus dem Datenraum in den - Lauf übernommen. Somit ermöglicht der Compiler, Konstantenwerte aus - einem früheren Lauf wieder zu verwenden. - - - c <Konstantenname>=Wert [/<Konstantenname>=Wert [...]] - - Zweck: Änderung einer oder mehrerer Konstanten - - - ? - - Zweck: Anzeigen der Konstanten und ihrer Werte - - - quit - - Zweck: Verlassen des Runtime-Systems - - - help - - Zweck: Zeigt eine kurze Erklärung - - -Bei PRINT- und PLOT-Ausgaben sind folgende Kommandos möglich: - - + Nächster Bildschirm - o (Off), keine Unterbrechung der Ausgabe (nicht möglich bei hochauflösen - der Grafik) - e (End), Zurück zum Runtime System - p Phasendiagramm (nur bei hochauflösender Grafik möglich) - - - -#ib#3.4. Fehlermeldungen des - DYNAMO-Compilers#ie# - - - -Falls der Compiler einen Fehler im DYNAMO-Programm entdeckt, gibt er eine Feh -lermeldung nach dem folgenden Muster aus: -"Fehler in Zeile <zeilennummer> bei >> <symbol> << : <fehlertext>. - -Im folgenden sind alle Fehlermeldungen und Möglichkeiten zur Abhilfe aufgelistet, -sofern diese nicht klar ersichtlich sind: - - 1 GLEICHUNG DOPPELT DEFINIERT - - 2 DOPPELTE INITIALISIERUNG - - 3 FALSCHER ZEILENTYP - -> Erlaubt sind : a, c, l, n, r, s, print, plot, note, spec, *, x, macro, mend, - for, noise, run. - - 4 VERSCHACHTELTE MAKRO-DEFINITION - -> 'mend' - Befehl fehlt. - - 5 MAKRO-NAME ERWARTET - - 6 '(' ERWARTET - - 7 FORMALER PARAMETER ERWARTET - - 8 ')' NACH PARAMETERLISTE ERWARTET - - 9 BEI AUXILIARIES NUR SUBSKRIPTION MIT '.K' ERLAUBT - -10 BEI KONSTANTEN-DEFINITION NAME ERWARTET - -11 BEI LEVELS NUR SUBSKRIPTION MIT '.K' ERLAUBT - -12 BEI RATES NUR SUBSKRIPTTION MIT '.KL' ERLAUBT - -13 BEI TABLE-DEFINITIONEN KEINE SUBSKRIPTION ERLAUBT - -14 X - BEFEHL HIER NICHT ERLAUBT - -15 BEI FOR-DEFINITION NAME ERWARTET - -16 '=' NACH FOR-VARIABLE ERWARTET - -17 BEREICHSANGABE ERWARTET - -18 ',' ERWARTET - -19 LOKALE GLEICHUNG NUR IN MAKRO ERLAUBT - -20 BEI DEFINITION NAME ERWARTET - -21 '=' ERWARTET - -22 INDEX NICHT KORREKT - -> Als Index ist nur erlaubt : <for variable> !, - <add op> <ganze zahl>!. - <add op> ::= "+"; "-". - -23 ')' NACH INDIZIERUNG ERWARTET - -24 PRTPER NICHT DEFINIERT - -> Wenn das Programm einen Print-Befehl enthält, muß 'prtper' (Printperiode) - als Konstante definiert werden. - -25 PLTPER NICHT DEFINIERT - -> Wenn das Programm einen Plot-Befehl enthält, muß 'pltper' (Plotperiode) - als Konstante definiert werden. - -26 '/' ODER ',' BEI PLOT ERWARTET - -27 NAME ALS PLOTPARAMETER ERWARTET - -28 DOPPELTE SCALE - ANGABE IN EINER GRUPPE - -> Wenn mehrere Plotparameter mit ',' getrennt werden (also die gleiche Ska - lierung erhalten), dürfen nicht mehrere feste Skalierungen angegeben wer - den. - -29 ERSTE SCALE - ANGABE ERWARTET - -30 ZWEITE SCALE - ANGABE ERWARTET - -31 ')' NACH SCALE - ANGABE FEHLT - -32 PRINTPARAMETER NICHT DEFINIERT - -33 PRINTPARAMETER ERWARTET - -34 TIME DARF NUR INITIALISIERT WERDEN - -35 DT NICHT DEFINIERT - -36 LENGTH NICHT DEFINIERT - -37 BEI KONSTANTEN - DEFINITION ZAHL ERWARTET - -38 BEI INITIALISIERUNG KONSTANTE ERWARTET - -39 LEVELS MUESSEN INITIALISIERT WERDEN - -40 KONSTANTE BEI TABLE ERWARTET - -41 '/' ODER "," ERWARTET - -42 TABLE - DEFINITION OHNE BENUTZUNG - -43 SIMULTANE GLEICHUNGEN - -> Bei dem Versuch, A, R, oder N - Gleichungen zu sortieren, trat eine - direkte oder indirekte Rekursion auf. - -44 FAKTOR ERWARTET - -> Erwartet : <zahl>; - <funktions aufruf>; - <macro aufruf>; - <gleichungs name>; - '(', <ausdruck>, ')'; - <monadischer operator>, <faktor>. - <monadischer operator> ::= '+'; '-'. - -45 TIME MUSS MIT '.J' ODER '.K' SUBSKRIBIERT WERDEN - -46 SYMBOL NICHT DEFINIERT - -47 FUNKTION NICHT DEFINIERT - -48 UNZULAESSIGE INDIZIERUNG - -> Die Indices auf beiden Seiten der Gleichung müssen immer gleich sein. - -49 FALSCHE PARAMETERANZAHL - -50 FALSCHES TRENNSYMBOL ZWISCHEN PARAMETERN - -51 ALS PARAMETER TABLE ERWARTET - -52 FALSCHER PARAMETER IN TABLEFUNKTION - -53 ZU VIELE AKTUELLE PARAMETER - -54 ')' NACH MAKROAUFRUF FEHLT - -55 REKURSIVER MAKROAUFRUF - -56 BEI N - GLEICHUNG KEINE SUBSKRIPTION ERLAUBT - -57 FALSCHE SUBSKRIPTION IN AUXILIARY - GLEICHUNG - -58 ')' ERWARTET - -59 FALSCHE SUBSKRIPTION IN LEVEL - GLEICHUNG - -60 FALSCHE SUBSKRIPTION IN RATE - GLEICHUNG - -61 FOR - VARIABLE NICHT DEFINIERT - -> Eine FOR - Variable muß vor der ersten Benutzung definiert werden. - -62 KONSTANTE ERWARTET - -63 FALSCHES REAL - FORMAT - -> Exponent fehlt - -64 GLOBALE GLEICHUNG IN MACRO NICHT ERLAUBT - -65 DOPPELTE DEFINITION BEI MEHRFACHEM MAKROAFRUF - -66 ALS NOISE - PARAMETER ZAHL ERWARTET -#page# - -#ib#4. Anweisungen und Funktionen des - EUMEL-DYNAMO-Compilers#ie# -#goal page ("Anweisungen und Funktionen")# - - -Dieses Kapitel gibt eine alphabetische Übersicht über die im EUMEL-DYNAMO- -Compiler realisierten Anweisungen und Funktionen (wertliefernde Algorithmen). - -Die Beschreibung der Anweisungen und Funktionen ist nach der DYNAMO- -Syntaxregel angegeben, wobei folgende Zeichen mit besonderer Bedeutung verwendet -werden: - - [] optionale Angabe - [...] beliebig häufige Wiederholung der letzten optionalen Angabe - < > in spitzen Klammern stehende Namen sind Variablen- bzw. Konstan - tennamen - <Name> steht für einen beliebigen Bezeichner gemäß der DYNAMO-Syntax - <Zahl> bezeichnet einen beliebigen Wert (also auch eine Ausdruck) - {} Alternative Angabe - - X DYNAMO Anweisung, kennzeichnet eine Fortsetzungsszeile der - vorhergegangenen Anweiung (S. #to page ("X")#) - -Alle Anweisungen und Funktionen werden nach dem gleichen Schema dargestellt: - - - -Funktionsname#right#Typ (Funkt. oder Anweisung) - - -Zweck: Schlagwort zur Wirkung - -Format: Beschreibung des Formates (spezielle Zeichen s.o.) - -Erklärung: kurze Beschreibung der Anweisung/Funktion - -Beispiel: Anwendung der Anweisung/Funktion - -Programm: Beispielprogramm, in welchem die Anweisung/Funktion angewendet wird. - -Referenz: Verweis auf ähnliche oder äquivalente Anweisungen/Funktionen im - Format '<Funktions- bzw. Anweisungsname>, Seitennummer'. - - -Eine oder mehrere dieser Felder können fehlen (z.B. wenn es keine Referenz oder -kein Beispielprogramm gibt). -#page# - - - -#ib#4.1. Übersicht über die Anweisungen und - Funktionen#ie# - - - -#goal page ("A")##ib (2)#A#ie (2)##on ("i")##right#Anweisung#off ("i")# - - -Zweck: Auxiliary-Gleichung (A-Gleichung, Hilfsgleichung) - -Format: A <Auxiliary-Name>.K=<Ausdruck>#u##count ("Ausdruck")##e# -#foot# -#u##value ("Ausdruck")##e# genaueres über die Definition eines Ausdruckes siehe [1], S. 93 -#end# - -Erklärung: Mit Hilfe von Auxiliary-Gleichungen werden Level- und Hilfsgrößen - (Auxiliaries) zum selben Zeitpunkt verknüpft. - -Beispiel: A JM.K=MM.K/MEJ - -Programm: "dyn.workfluc" - - - -#ib (2)#ABS#ie (2)##on ("i")##right#Funktion#off ("i")# - - -Zweck: Absolutbetrag - -Format: ABS(<Zahl>) - -Erklärung: Liefert den Absolutbetrag - - - IF <Zahl> >= 0 THEN - <Zahl> - ELSE - - <Zahl> - END IF - -Beispiel: N X=ABS(A*2.0) - - - -#goal page ("ARCTAN")#ARCTAN#on ("i")##right#Funktion#off ("i")# - - -Zweck: Berechnung der trigonometrischen Funktion Arcustangens - -Format: ARCTAN(<Zahl>) - -Erklärung: Berechnet den Arcustangens von <Zahl>; Ergebnis im Bogenmaß. - -Beispiel: N X=ARCTAN(TAN(1.3)) (X = 1.3) - - -Referenz: COSD, S. #to page ("COSD")# - SIN, S. #to page ("SIN")# - SIND, S. #to page ("SIND")# - TAN, S. #to page ("TAN")# - TAND, S. #to page ("TAND")# - ARCTAND, S. #to page ("ARCTAN")# - COS, S. #to page ("COS")# - - - -#goal page ("ARCTAND")##ib (2)#ARCTAND#ie (2)##on ("i")##right#Funktion#off ("i")# - - -Zweck: Berechnung der trigonometrischen Funktion Arcustangens - -Format: ARCTAND(<Zahl>) - -Erklärung: Berechnet den Arcustangens von <Zahl>; Ergebnis im Gradmaß - -Beispiel: N X=ARCTAND(TAND(45.0)) (X = 45.0) - - -Referenz: COSD, S. #to page ("COSD")# - SIN, S. #to page ("SIN")# - SIND, S. #to page ("SIND")# - TAN, S. #to page ("TAN")# - TAND, S. #to page ("TAND")# - COS, S. #to page ("COS")# - ARCTAN, S. #to page ("ARCTAND")# - - - -#goalpage ("C")##ib (2)#C#ie (2)##on ("i")##right#Anweisung#off ("i")# - - -Zweck: Konstantendefinition - -Format: C <Name>=<Zahl> - -Erklärung: Werte, die während eines Simulationslaufes gleich bleiben, können durch - die Konstantendefintion benannt werden (s. auch 'c' im Runtime- - System). - -Beispiel: C POPI=30.3 - -Programm: "dyn.wohnen" - - - -#goal page ("CLIP")##ib (2)#CLIP#ie (2)##on ("i")##right#Funktion#off ("i")# - - -Zweck: Wert nach Bedingung - -Format: CLIP(<Zahl1>,<Zahl2>,<Zahl3>,<Zahl4>) - -Erklärung: Liefert den Wert des ersten Argumentes, wenn das dritte Argument - größer oder gleich dem vierten Argument ist. Andernfalls wird der Wert - des zweiten Argumentes geliefert. - - - IF <Zahl3> >= <Zahl4> THEN - <Zahl1> - ELSE - <Zahl2> - END IF - -Beispiel: N X=CLIP(1.0,2.0,3.0,4.0) (X = 2.0) - - -Programm: "dyn.welt/forrester" - -Referenz: FIFGE, S. #to page ("FIFGE")# (äquivalente Funktion) - - - -#goalpage ("COS")#COS#on ("i")##right#Funktion#off ("i")# - - -Zweck: Berechnung der trigonometrischen Funktion Cosinus - -Format: COS(<Zahl>) - -Erklärung: Es wird der Cosinus des Wertes <Zahl>, welcher im Bogenmaß vorlie - gen muß, geliefert. - -Beispiel: N X=COS(1.6) - -Referenz: COSD, S. #to page ("COSD")# - SIN, S. #to page ("SIN")# - SIND, S. #to page ("SIND")# - TAN, S. #to page ("TAN")# - TAND, S. #to page ("TAND")# - ARCTAN, S. #to page ("ARCTAN")# - ARCTAND, S. #to page ("ARCTAND")# - - - -#goal page ("COSD")##ib (2)#COSD#ie (2)##on ("i")##right#Funktion#off ("i")# - - -Zweck: Berechnung der trigonometrischen Funktion Cosinus - -Format: COSD(<Zahl>) - -Erklärung: Es wird der Cosinus des Wertes <Zahl>, welcher im Gradmaß vorliegen - muß, geliefert. - -Beispiel: N X=COSD(33.5) - -Referenz: COS, S. #to page ("COS")# - SIN, S. #to page ("SIN")# - SIND, S. #to page ("SIND")# - TAN, S. #to page ("TAN")# - TAND, S. #to page ("TAND")# - ARCTAN, S. #to page ("ARCTAN")# - ARCTAND, S. #to page ("ARCTAND")# - - - -#goal page ("EXP")##ib (2)#EXP#ie (2)##on ("i")##right#Funktion#off ("i")# - - -Zweck: Exponentialfunktion zur Basis e - -Format: EXP(<Zahl>) - -Erklärung: Liefert e#u#<Zahl>#e# - -Beispiel: N X=EXP(1.0) (X = 2.71 = e) - - -Referenz: LN, S. #to page ("LN")# (Umkehrfunktion) - - - -#goal page ("FIFGE")##ib (2)#FIFGE#ie (2)##on ("i")##right#Funktion#off ("i")# - - -Zweck: Wert nach Bedingung (#on ("u")#f#off ("u")#irst #on ("u")#if#off ("u")# #on ("u")#g#off ("u")#reater or #on ("u")#e#off ("u")#qual) - -Format: FIFGE(<Zahl1>,<Zahl2>,<Zahl3>,<Zahl4>) - -Erklärung: Liefert den Wert des ersten Argumentes, wenn das dritte Argument - größer oder gleich dem vierten Argument ist. Andernfalls wird der Wert - des zweiten Argumentes geliefert. - - - IF <Zahl3> >= <Zahl4> THEN - <Zahl1> - ELSE - <Zahl2> - END IF - -Beispiel: N X=FIFGE(1.0,2.0,3.0,4.0) (X = 2.0) - - -Referenz: CLIP, S. #to page ("CLIP")# (äquivalente Funktion) - - - -#goal page ("FIFZE")##ib (2)#FIFZE#ie (2)##on ("i")##right#Funktion#off ("i")# - - -Zweck: Wert nach Bedingung (#on ("u")#f#off ("u")#irst #on ("u")#if#off ("u")# #on ("u")#ze#off ("u")#ro) - -Format: FIFZE(<Zahl1>,<Zahl2>,<Zahl3>) - -Erklärung: Wenn der Parameter <Zahl3> den Wert 0 hat, so wird <Zahl1> - geliefert, andernfalls <Zahl2> - - - IF <Zahl3> = 0 THEN - <Zahl1> - ELSE - <Zahl2> - END IF - -Beispiel: N X=FIFZE(1.0,2.0,3.0) (X = 2.0) - - -Referenz: SWITCH, S. #to page ("SWITCH")# - - - -#goal page ("FLOOR")##ib (2)#FLOOR#ie (2)##on ("i")##right#Funktion#off ("i")# - - -Zweck: Vorkommastellen - -Format: FLOOR(<Zahl>) - -Erklärung: Liefert die Vorkommastellen von <Zahl> - -Beipiel: N X=FLOOR(3.14) (X = 3.0) - - -Referenz: FRAC, S. #to page ("FRAC")# - - - -#ib (2)#FOR#ie (2)##on ("i")##right#Anweisung#off ("i")# - - -Zweck: Schleifen-Definition - -Format: FOR <Name>=<Zahl1>,<Zahl2> - -Erklärung: <Name> bezeichnet eine Schleifenvariable, die von <Zahl1> bis - <Zahl2> hochgezählt wird. Somit ist es möglich, gleiche Berechnungen - für die verschiedenen Werte einer Tabelle durchzuführen. - -Beispiel: FOR BERECHNUNGSZEITRAUM=1900,2100 - - -Programm: "dyn.bev" - - - -#goal page ("FRAC")##ib (2)#FRAC#ie (2)##on ("i")##right#Funktion#off ("i")# - - -Zweck: Nachkommastellen - -Format: FRAC(<Zahl>) - -Erklärung: Liefert die Nachkommastellen von <Zahl> - -Beispiel: N X=FRAC(3.14) (X = 0.14) - - -Referenz: FLOOR, S. #to page ("FLOOR")# - - - -#goal page ("L")##ib (2)#L#ie (2)##on ("i")##right#Anweisung#off ("i")# - - -Zweck: Level-Gleichung - -Format: L <Level-Name>.K=<Level-Name>.J+ - <Vergangenheitsausdruck> - -Erklärung: Die Level-Gleichung stellt einen gegenwärtigen Wert in Bezug zu - seinem Wert in der Vergangenheit und seiner Veränderungsrate in der - bis dahin vergangenen Zeit (Vergangenheitsausdruck s. [1], S. 96). - -Beispiel: L HASEN.K=CLIP(HASEN.J+DT*(HGRATE.JK - X -HSRATE.JK),0,HASEN.J,0) - -Programm: "dyn.grashasenfuchs" - - - -#goal page ("LN")##ib (2)#LN#ie (2)##on ("i")##right#Funktion#off ("i")# - - -Zweck: Logarithmus-Funktion - -Format: LN(<Zahl>) - -Erklärung: Berechnet den natürlichen Logarithmus von <Zahl> - -Beispiel: N X=LN(1.0) (X = 0.0) - - -Programm: "dyn.wasseröko" - -Referenz: LOG2, S. #to page ("LOG2")# - LOG10, S. #to page ("LOG10")# - EXP, S. #to page ("EXP")# - - - -#goal page ("LOG2")##ib (2)#LOG2#ie (2)##on ("i")##right#Funktion#off ("i")# - - -Zweck: Logarithmus-Funktion - -Format: LOG2(<Zahl>) - -Erklärung: Berechnet den Logarithmus von <Zahl> zur Basis 2 - -Beispiel: N X=LOG2(8.0) (X = 3.0) - - -Referenz: LN, S. #to page ("LN")# - LOG10, S. #to page ("LOG10")# - - - -#goal page ("LOG10")##ib (2)#LOG10#ie (2)##on ("i")##right#Funktion#off ("i")# - - -Zweck: Logarithmus-Funktion - -Format: LOG10(<Zahl>) - -Erklärung: Berechnet den Logarithmus von <Zahl> zur Basis 10 - -Beispiel: N X=LOG10(100.0) (X = 2.0) - - -Referenz: LOG2, S. #to page ("LOG2")# - LN, S. #to page ("LN")# - EXP, S. #to page ("EXP")# - - - -#goal page ("MACRO")##ib (2)#MACRO#ie (2)##on ("i")##right#Anweisung#off ("i")# - - -Zweck: Macro-Definition - -Format: MACRO <Name>(<Ausdruck>[,<Ausdruck>[...]]) - -Erklärung: Durch die Verwendung der MACRO-Anweisung können Sie einer oder - mehreren DYNAMO-Gleichungen einen Namen geben (<Name>). - Macros müssen durch MEND abgeschloßen werden und dürfen #on ("u")#nicht#off ("u")# - rekursiv aufgerufen werden (vergl. Refinements in ELAN). - -Beispiel: MACRO SMOOTH(IN,DEL) - L SMOOTH.K=SMOOTH.J+DT*(IN.J-SMOOTH.J)/DEL - N SMOOTH=IN - MEND - -Programm: "dyn.mac" (diese Datei enthält alle bisherigen Makros) - -Referenz: MEND, S. #to page ("MEND")# - - - -#goal page ("MAX")##ib (2)#MAX#ie (2)##on ("i")##right#Funktion#off ("i")# - - -Zweck: Maximum zweier Größen - -Format: MAX(<Zahl1>,<Zahl2>) - -Erklärung: Liefert die größere Zahl aus <Zahl1> und <Zahl2> - - - IF <Zahl1> > <Zahl2> THEN - <Zahl1> - ELSE - <Zahl2> - END IF - -Beispiel: N X=MAX(1.0,2.0) (X = 2.0) - - -Referenz: MIN, S. #to page ("MIN")# - - - -#goal page ("MEND")##ib (2)#MEND#ie (2)##on ("i")##right#Anweisung#off ("i")# - - -Zweck: Macro-Definition - -Format: MEND - -Erklärung: MEND beendet eine Macro-Definition - -Beispiel: MACRO SMOOTH(IN,DEL) - L SMOOTH.K=SMOOTH.J+DT*(IN.J-SMOOTH.J) - X /DEL - N SMOOTH=IN - MEND - -Programm: "dyn.mac" (diese Datei enthält alle bisherigen Makros) - -Referenz: MACRO, S. #to page ("MACRO")# - - - -#goal page ("MIN")##ib (2)#MIN#ie (2)##on ("i")##right#Funktion#off ("i")# - - -Zweck: Minimum zweier Größen - -Format: MIN(<Zahl1>,<Zahl2>) - -Erklärung: Liefert die kleinere Zahl aus <Zahl1> und <Zahl2> - -Beispiel: N X=MIN(1.0,2.0) (X = 1.0) - - -Programm: "dyn.forst7" - -Referenz: MAX, S. #to page ("MAX")# - - - -#goal page ("N")##ib (2)#N#ie (2)##on ("i")##right#Anweisung#off ("i")# - - -Zweck: Initialisierungsgleichung - -Format: N <Name>=<Zahl> - -Erklärung: Initialisert eine Variable mit dem Bezeichner <Name> auf den Wert - <Zahl>, d.h. es wird ihr ein Startwert zugewiesen. - -Beispiel: N X=1900 - -Programm: "dyn.grashasenfuchs" - - - -#goal page ("NOISE")##ib (2)#NOISE#ie (2)##on ("i")##right#Funktion#off ("i")# - - -Zweck: Pseudo-Zufallszahlen-Generator - -Format: NOISE(<Zahl>) - -Erklärung: Diese Funktion liefert eine Pseudo-Zufallszahl zwischen -0.5 und +0.5 - und setzt einen neuen Startwert für den Generator fest. Der Parameter - <Zahl> wird nicht ausgewertet. - -Beispiel: N X=NOISE(0) - -Referenz: NORMRN, S. #to page ("NORMRN")# - - - -#goal page ("NORMRN")##ib (2)#NORMRN#ie (2)##on ("i")##right#Funktion#off ("i")# - - -Zweck: Pseudo-Zufallszahlen-Generator - -Format: NORM(<Zahl1>,<Zahl2>) - -Erklärung: Liefert einen Wert zwischen <Zahl1> - <Zahl2> * 2.4 und <Zahl1> - + <Zahl2> * 2.4. - -Beispiel: N X=NORM(1.0,10.0) - -Referenz: NOISE, S. #to page ("NOISE")# - - - -#ib (2)#NOTE#ie (2)##on ("i")##right#Anweisung#off ("i")# - - -Zweck: Kommentar - -Format: NOTE <Kommentarzeile> - -Erklärung: Die Zeilen, die mit NOTE gekennzeichnet sind, werden vom Compiler als - Kommentarzeilen erkannt und nicht beachtet. NOTE-Zeilen haben nur - dokumentierenden Charakter und sind für den Programmlauf ohne jede - Bedeutung. Dennoch sollte man, wenn immer möglich, Kommentare in - sein DYNAMO-Programm einfügen, denn sie sind in DYNAMO an - nähernd die einzige Möglichkeit, ein Programm lesbar zu machen, damit - es auch nach längerer Zeit noch korrigiert werden kann. - -Beispiel: NOTE Dies ist eine Kommentarzeile - -Programm: "dyn.welt/forrester" - - - -#goal page ("PLOT")##ib (2)#PLOT#ie (2)##on ("i")##right#Anweisung#off ("i")# - - -Zweck: Darstellen der Ergebnisse in Diagrammform - -Format: PLOT <Name>[=<Druckzeichen>][(<Skalenbegin>, - <Skalenende>)][/...][,...] - -Erklärung: Durch diese Anweisung werden die Größen nach PLTPER Zeiteinheiten - in einem Diagramm ausgegeben. Die Angabe eines Druckzeichens ist - nur bei zeichenorientierten Grafik erforderlich, denn bei hochauflösender - Grafik werden die Graphen der verschiedenen Größen durch unterschied - liche Linientypen gezeichnet; fehlt bei der zeichenorientierten Grafik das - Druckzeichen, so werden die Graphen durch die Zahlen von 0...9 darge - stellt. Bei "/" werden verschiedene, bei "," gleiche Skalen benutzt. - -Beispiel: PLOT GRAS=G(995,1005)/HASEN=H(85,115) - X /FUECHS=F(15,35) - -Programm: "dyn.grashasenfuchs" - -Referenz: PRINT, S. #to page ("PRINT")# - - - -#goal page ("POWER")##ib (2)#POWER#ie (2)##on ("i")##right#Funktion#off ("i")# - - -Zweck: Potenzfunktion - -Format: POWER(<Zahl1>,<Zahl2>) - -Erklärung: Liefert <Zahl1>#u#<Zahl2>#e# - -Beipiel: N X=POWER(2, 2) (X = 4) - - -Referenz: SQRT, S. #to page ("SQRT")# - - - -#goal page ("PRINT")##ib (2)#PRINT#ie (2)##on ("i")##right#Anweisung#off ("i")# - - -Zweck: Darstellung der Ergebnisse in Tabellenform - -Format: PRINT <Name>[/...][,...] - -Erklärung: Durch diese Anweisung werden die Werte (<Name>) nach PRTPER - Zeiteinheiten in einer Tabelle ausgegeben. Die Ausgabe kann umgeleitet - werden (s. 'protokoll'). - -Beispiel: PRINT GBEV,BEV(1),BEV(40),BEV(60),BEV(63) - X ,BEV(65),ZBEV,PRENT - -Programm: "dyn.bev" - -Referenz: PLOT, S. #to page ("PLOT")# - - - -#goal page ("R")##ib (2)#R#ie (2)##on ("i")##right#Anweisung#off ("i")# - - -Zweck: Rate-Gleichung - -Format: R<Rate-Name>.KL=<Gegenwartsausdruck> - -Erklärung: Eine Rate-Gleichung stellt die Veränderungsrate in Bezug zu den aktu - ellen Level-Größen. - -Beispiel: R FGRATE.KL=FGK*HASEN*FUECHS.K - - -Programm: "dyn.grashasenfuchs" - -Referenz: A, S. #to page ("A")# - C, S. #to page ("C")# - L, S. #to page ("L")# - - - -#ib (2)#RAMP#ie (2)##on ("i")##right#Funktion#off ("i")# - - -Zweck: Wert nach Bedingung - -Format: RAMP(<Zahl1>,<Zahl2>) - -Erklärung: Wenn TIME kleiner <Zahl2>, dann liefert RAMP 0, andernfalls wird - <Zahl1> * (TIME - <Zahl2>) geliefert. - - - IF TIME < <Zahl2> THEN - 0 - ELSE - <Zahl1> * (TIME - <Zahl2>) - END IF - - - -#goal page ("RUN")##ib (2)#RUN#ie (2)##on ("i")##right#Anweisung#off ("i")# - - -Zweck: Überschrift - -Format: RUN <Überschrift> - -Erklärung: Gibt dem aktuellen Lauf eine Überschrift. Gleichzeitig ist - "<Überschrift>.const" der Name eines Datenraums, in dem die Kon - stanten dieses Laufs aufgehoben werden (s. 'run' im Runtime-System). - -Beispiel: RUN Überschrift - -Referenz: *, S. #to page ("*")# - - - -#ib (2)#S#ie (2)##on ("i")##right#Anweisung#off ("i")# - - -Zweck: Supplementary-Gleichung - -Format: S <Name>.K=<Vergangenheitsausdruck> - -Erklärung: Gleichungen für Hilfsgrößen werden durch Supplementary-Gleichungen - ausgedrückt. - -Beispiel: S SCHADSTOFFVERHÄLTNIS.K=COZWEI.K/OZWEI.K - - - - -#ib (2)#SCLPRD#ie (2)##on ("i")##right#Funktion#off ("i")# - - -Zweck: Skalarprodukt - -Format: SCLPRD(<Tabelle1>,<Zahl1>,<Zahl2>,<Tabelle2>,<Zahl3>) - -Erklärung: Liefert das Skalarprokukt der Tabellen <Tabelle1> und <Tabelle2>, - wobei <Zahl1> und <Zahl2> den Ausschnitt aus der ersten Tabelle - angeben und <Zahl3> den Startindex für den Vektor in der zweiten - Tabelle angibt. - -Beispiel: GB.K=SCLPRD(BEV.K,15,44,GR,1)/2 - - -Programm: "dyn.bev" - - - -#goal page ("SIN")##ib (2)#SIN#ie (2)##on ("i")##right#Funktion#off ("i")# - - -Zweck: Berechnung der trigonometrischen Funktion Sinus - -Format: SIN(<Zahl>) - -Erklärung: Berechnet den Sinus von <Zahl>, welche im Bogenmaß angegeben - wird. - -Beispiel: N X=SIN(0.5) - -Referenz: COS, S. #to page ("COS")# - COSD, S. #to page ("COSD")# - SIND, S. #to page ("SIND")# - TAN, S. #to page ("TAN")# - TAND, S. #to page ("TAND")# - ARCTAN, S. #to page ("ARCTAN")# - ARCTAND, S. #to page ("ARCTAND")# - - - -#goal page ("SIND")##ib (2)#SIND#ie (2)##on ("i")##right#Funktion#off ("i")# - - -Zweck: Berechnung der trigonometrischen Funktion Sinus - -Format: SIND(<Zahl>) - -Erklärung: Berechnet den Sinus von <Zahl>, welche im Gradmaß angegeben wird. - -Beispiel: N X=SIND(45.0) - -Referenz: COS, S. #to page ("COS")# - SIN, S. #to page ("SIN")# - COSD, S. #to page ("COSD")# - TAN, S. #to page ("TAN")# - TAND, S. #to page ("TAND")# - ARCTAN, S. #to page ("ARCTAN")# - ARCTAND, S. #to page ("ARCTAND")# - - - -#ib (2)#SPEC#ie (2)##on ("i")##right#Anweisung#off ("i")# - - -Zweck: Lauf-Anweisung - - DT=<Zahl1> -Format: SPEC { LENGTH=<Zahl2> }[/...] - PLTPER=<Zahl3> - PRTPER=<Zahl4> - -Erklärung: Durch die Lauf-Anweisung werden die Systemkonstanten festgesetzt. - Sie darf pro Lauf nur einmal benutzt werden. - -Beispiel: SPEC DT=1/PLTPER=1/PRTPER=1/LENGTH=2000 - - -Referenz: C, S. #to page ("C")# (SPEC kann durch C-Def. ersetzt werden) - - - -#goal page ("SQRT")##ib (2)#SQRT#ie (2)##on ("i")##right#Funktion#off ("i")# - - -Zweck: Quadratwurzel - -Format: SQRT(<Zahl>) - -Erklärung: Berechnet die Quadratwurzel aus <Zahl> - -Beispiel: N X=SQRT(4.0) (X = 2.0) - - -Referenz: POWER, S. #to page ("POWER")# - - - -#ib (2)#STEP#ie (2)##on ("i")##right#Funktion#off ("i")# - -Zweck: Wert nach Bedingung - -Format: STEP(<Zahl1>,<Zahl2>) - -Erklärung: Ist TIME kleiner <Zahl2>, so wird 0 geliefert, ansonsten <Zahl1> - - - IF TIME < <Zahl2> THEN - 0.0 - ELSE - <Zahl1> - END IF - -Beispiel: N X=STEP(12.0,12.0) - - - -#goal page ("SUM")##ib (2)#SUM#ie (2)##on ("i")##right#Funktion#off ("i")# - - -Zweck: Summierung einer Tabelle - -Format: SUM(<Tabelle>) - -Erklärung: Liefert die Summe der Einträge in einer Tabelle - -Beispiel: A GESAMTBEV.K=SUM(BEV.K) - -Programm: "dyn.bev" - -Referenz: SUMV, S. #to page ("SUMV")# - - - -#goal page ("SUMV")##ib (2)#SUMV#ie (2)##on ("i")##right#Funktion#off ("i")# - - -Zweck: Summierung einer Tabelle - -Format: SUMV(<Tabelle>,<Zahl1>,<Zahl2>) - -Erklärung: Summierung der Einträge in der Tabelle von Element <Zahl1> bis - Element <Zahl2> - -Beispiel: A ZBEV.K=SUMV(BEV.K,16,59) Teilbevölkerung - - -Programm: "dyn.bev" - -Referenz: SUM, S. #to page ("SUM")# - - - -#goal page ("SWITCH")##ib (2)#SWITCH#ie (2)##on ("i")##right#Funktion#off ("i")# - - -Zweck: Wert nach Bedingung - -Format: SWITCH(<Zahl1>,<Zahl2>,<Zahl3>) - -Erklärung: Wenn der Parameter <Zahl3> den Wert 0 hat, so wird <Zahl1> - geliefert, andernfalls <Zahl2> (gleichbedeutend mit FIFZE). - - - IF <Zahl3> = 0 THEN - <Zahl1> - ELSE - <Zahl2> - END IF - -Beispiel: N X=SWITCH(1.0,2.0,3.0) (X = 2.0) - - -Referenz: FIFZE, S. #to page ("FIFZE")# - - - -#goal page ("T")##ib (2)#T#ie (2)##on ("i")##right#Anweisung#off ("i")# - - -Zweck: Tabellen-Definition - -Format: T <Name>=<Zahl1>[/<Zahl2>[....]] - -Erklärung: Durch die T-Anweisung wird eine Tabelle definiert, die Elemente wer - den durch "/" getrennt hintereinander angegeben. - -Beispiel: T TABELLE=1/2/3/4/5/6/8/9/10/11/12 - - -Programm: "dyn.bev" - -Referenz: TABLE, S. #to page ("TABLE")# - TABHL, S. #to page ("TABHL")# - - - -#goal page ("TABHL")##ib (2)#TABHL#ie (2)##on ("i")##right#Funktion#off ("i")# - - -Zweck: Tabellenfunktion - -Format: TABHL(<Tabelle>,<Zahl1>,<Zahl2>,<Zahl3>) - -Erklärung: IF <Zahl1> < <Zahl2> THEN - <Tabelle> (<Zahl2>) - ELIF <Zahl2> <= <Zahl1> AND <Zahl1> <= <Zahl3> THEN - TABLE (<Tabelle>, <Zahl1>, <Zahl2>, <Zahl3>) - ELSE - <Tabelle> (<Zahl3>) - END IF - -Beispiel: A BRMM.K=TABHL(BRMMT,MSL.K,0,5,1) - - -Programm: "dyn.welt/forrester" - -Referenz: T, S. #to page ("T")# - TABLE, S. #to page ("TABLE")# - - - -#goal page ("TABLE")##ib (2)#TABLE#ie (2)##on ("i")##right#Funktion#off ("i")# - - -Zweck: Tabellenfunktion - -Format: TABLE(<Tabelle>,<Zahl1>,<Zahl2>,<Zahl3>,<Zahl4>) - -Erklärung: Verknüpft die Werte aus <Tabelle> mit <Zahl1>, wobei <Zahl2> den - ersten und <Zahl3> den letzten Tabelleneintrag angibt. <Zahl4> stellt - die Schrittweite dar. - -Beispiel: T TABELLE=1/2/3/4/5 - A BEISP.K=TABLE(TABELLE,X.K,2,4,1) - -Programm: "dyn.welt/forrester" - -Referenz: T, S. #to page ("T")# - TABHL, S. #to page ("TABHL")# - - - -#goal page ("TAN")##ib (2)#TAN#ie (2)##on ("i")##right#Funktion#off ("i")# - - -Zweck: Berechnung der trigonometrischen Funktion Tangens - -Format: TAN(<Zahl>) - -Erklärung: Berechnet den Tangens von <Zahl>, welche im Bogenmaß angegeben - wird. - -Beispiel: N X=TAN(0.5) - -Referenz: COS, S. #to page ("COS")# - SIN, S. #to page ("SIN")# - COSD, S. #to page ("COSD")# - SIND, S. #to page ("TAN")# - TAND, S. #to page ("TAND")# - ARCTAN, S. #to page ("ARCTAN")# - ARCTAND, S. #to page ("ARCTAND")# - - - -#goal page ("TAND")##ib (2)#TAND#ie (2)##on ("i")##right#Funktion#off ("i")# - - -Zweck: Berechnung der trigonometrischen Funktion Tangens - -Format: TAND(<Zahl>) - -Erklärung: Berechnet den Tangens von <Zahl>, welche im Gradmaß angegeben - wird. - -Beispiel: N X=TAND(45.0) - -Referenz: COS, S. #to page ("COS")# - SIN, S. #to page ("SIN")# - COSD, S. #to page ("COSD")# - TAN, S. #to page ("TAN")# - SIND, S. #to page ("SIND")# - ARCTAN, S. #to page ("ARCTAN")# - ARCTAND, S. #to page ("ARCTAND")# - - - -#goalpage ("X")##ib (2)#X#ie (2)##on ("i")##right#Anweisung#off ("i")# - - -Zweck: Fortsetzungszeile - -Format: X <Fortsetzungszeile> - -Erklärung: Eine in der vorangegangenen Zeile nicht beendete Anweisung wird nach - einer X-Anweisung fortgesetzt (Es können beliebig viele X-Anweisun - gen nacheinander folgen). - -Beispiel: T TABELLE=1/2/3/4/5/6/7/8/9/10/11/12/13/14 - X /15/16/17/18/19 - -Programm: "dyn.bev" - - - -#goal page ("*")##ib (2)#*#ie (2)##on ("i")##right#Anweisung#off ("i")# - - -Zweck: Überschrift - -Format: * <Überschrift> - -Erklärung: Gibt dem aktuellen Lauf eine Überschrift - -Beispiel: * Überschrift - -Referenz: RUN, S. #to page ("RUN")# -#page# - -#ib#5. Makros in DYNAMO#ie# - - - - -Der DYNAMO-Compiler bietet die Möglichkeit, benutzereigene Funktionen zu definie -ren. Makros werden ähnlich wie Refinements in ELAN in das DYNAMO-Programm -eingesetzt. Beim EUMEL-DYNAMO-Compiler werden mit "zz" beginnende Namen -generiert, so daß Sie es vermeiden sollten, eigene Namen mit "zz" beginnen zu -lassen. Weiterhin sollte man als Namen der aktuellen Parameter nicht die Namen der -formellen Parameter verwenden. - -Folgende Makros werden standardmäßig vom DYNAMO-Compiler zur Verfügung -gestellt: - - macro delay1 (in, del) Verzögerung erster Ordnung - - macro delay3 (in, del) Verzögerung dritter Ordnung - Material - - macro delay3p (in, del, ppl) Verzögerung dritter Ordnung mit - Pipeline - - macro delinf3 (in, del) Verzögerung dritter Ordnung für - Information - - macro smooth (in, del) Verzögerung erster Ordnung für - Information - - - - -#ib#5.1. Insertieren von Makros#ie# - - - - -Makros werden durch folgende Prozedur in die Compilertabelle eingetragen: - - -PROC insert macro (TEXT CONST filename): - - Zweck: Fügt die in der Datei 'filename' enthaltenen Makros in die Makrotabelle ein. - Die Datei sollte zweckmäßigerweise nur Makrodefinitionen enthalten. Es ist - - im Gegensatz zu normalen DYNAMO-Programmen - nicht nötig, die - Systemkonstanten zu definieren (die Standard-Makros sind in der Datei - "dyn.mac" enthalten; diese Datei kann beliebig ergänzt werden). - - - - -#ib#5.2. Aufbau eines Makros#ie# - - - - -Makros beginnen in DYNAMO immer mit der Anweisung MACRO (s. auch Seite #to page ("MACRO")#) -und enden mit MEND (s. Seite #to page ("MEND")#). Dazwischen steht ein Makrorumpf, bestehend -aus einer oder mehreren DYNAMO-Gleichungen. Beim Makroaufruf können, soweit -vorher definiert, Parameter angegeben werden, jedoch rekursiv aufrufen kann man -Makros nicht. - -Beispiel: MACRO SMOOTH (IN, DEL) - L SMOOTH.K = SMOOTH.J + DT * (IN.J - SMOOTH.J) - X /DEL - N SMOOTH = IN - MEND - -Lokale Variablen in Makros beginnen mit einem $-Zeichen. Der Makro-Expandierer -ersetzt das $-Zeichen durch "zz" gefolgt von einer Zahl. Aus diesem Grund sollen -eigene Namen nicht mit "zz" beginnen. - -Falls Sie eine Fehlermeldung bekommen, die sich auf einen mit "zz" beginnenden -Namen bezieht, sollten Sie den Fehler in dem entsprechenden Makro suchen. - -#on ("b")# -Achtung: #off ("b")#Makros sollten nur von fortgeschrittenden DYNAMO-Programmieren - verwendet werden, da Makros Eigenschaften von Refinements (textuelle - Ersetzung) und Prozeduren (Parameterübergabe) vereinigen. Der daraus - folgende Effekt ist nicht ganz einfach zu durchschauen. -#page# - - - -#ib#6. Erweiterung des Sprachumfangs#ie# - - - - -Während Makros in DYNAMO geschrieben werden, ist es ferner möglich, die Menge -der Funktionen mittels der Sprache ELAN zu erweitern. - -Hierbei geht man wie folgt vor: - - 1. Schreiben einer Funktion in ELAN (näheres siehe unten) - - 2. Einbinden der Funktion in die Tabellen des DYNAMO-Compilers - - 2.1. Einschreiben des Namens der Funktion, gefolgt von den Typen der Ein - gabeparameter in die bestehende Datei "dyn.std", wobei folgende Typen - existieren: - - r real (Datentyp REAL) - t table (Datentyp TAB) - - Abgeschlossen wird die "dyn.std"-Datei durch die Zeichensequenz "/*". - - Beispiele: - - power rr table trrrr /* - - - 2.2. Laden der Funktion(en) mittels der Prozedur 'init std ("dyn.std")' - - -Eine zur Einbindung in den DYNAMO-Compiler vorgesehene ELAN-Funktion wird -unter Beachtung gewisser Regeln erstellt: - - 1. Die deklarierten ELAN-Prozeduren dürfen nur Parameter vom Typ REAL oder - TAB besitzen oder gänzlich ohne Parameter sein. - - 2. Der Typ des Resultaten muß vom Typ REAL sein. - -Zur Manipulation von Tabellen wurde der Datentyp TAB geschaffen, auf welchen man -wie auf das Standard-Vektorpaket zugreifen kann. - -Beispiel: - - REAL PROC abs (REAL CONST a): - IF a < 0.0 THEN - -a - ELSE - a - END IF - END PROC abs; - - PROC sumv (TAB CONST tab, REAL CONST erstes, letztes): - REAL VAR summe := 0.0; - INT VAR i; - FOR i FROM int (erstes) UPTO int (letztes) REPEAT - summe INCR wert (tab, i) - END REPEAT; - summe - END PROC sumv - - - - -#ib#6.1. Für fortgeschrittende ELAN-Program - mierer#ie# - - - -Der Quellcode des EUMEL-DYNAMO-Compilers wird mit ausgeliefert. Daher -können Einschränkungen (s. 3.2 Abweichungen gegenüber dem Sprachstandard) -leicht beseitigt werden. Wem z.B. die Anzahl der Gleichungen (950) zu wenig ist, der -kann im Quelltext des Compilers diesen Wert (annähernd) beliebig nach oben hin -erhöhen. - |