summaryrefslogtreecommitdiff
path: root/doc/dynamo/dynamo handbuch
diff options
context:
space:
mode:
Diffstat (limited to 'doc/dynamo/dynamo handbuch')
-rw-r--r--doc/dynamo/dynamo handbuch1826
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.
-