|
|
Systems Ecology |
|
Examples (Worldmodel 2)
Documentation
Reference
Downloads
Contact
MacMETH DM AuxLib SciLib EasyMW MW ISIS RMS Shell RMS Extras RASS |
||
|
Example: Worldmodel 2 WorldModel2.mod WM2Tables.def WM2Tables.mod
MODULE Worldmodel 2;
(*******************************************************)
(* WorldModel2 by Forrester J.W. 1973 "World dynamics" *)
(*******************************************************
Last changes:
tb 29.09.88 First implementation by Martina (Tina)
Blanke
tn 29.10.91 Version 0.3
updated to new version of TabFunc
with new support for ExtrapolModes
dg 27.10.92 SimInit and ModelDefinitions
changed for correct start-up
af 14/03/96 Since the sources for V 0.5 got
lost, this is an attempt to construct
a new version using the newest RAMSES
software.
In contrast to version 0.4 German, this
version does switch in the year 1970
and therefore does fully conform to
what is described in the "Systems Ecology
Report #1"
af 10/04/97 Adaptations to run it on the IBM PC
under Windows
af 21/04/97 V 0.7 (port back from IBM PC)
af 22/03/99 V 1.0
- New TabFunc use with DefineDefltTabFuncEditWinPos
- Imports RunsOnAMac from DMSystem
*******************************************************)
FROM DMSystem IMPORT ScreenWidth, ScreenHeight, MenuBarHeight,
TitleBarHeight, ScrollBarWidth, RunsOnAMac;
FROM DMConversions IMPORT IntToString;
FROM DMStrings IMPORT FindInString, LoadString, StoreString, Append;
FROM DMWindows IMPORT WindowFrame, RectArea,
InnerWindowFrame, OuterWindowFrame, WindowKind, ScrollBars;
FROM DMMenus IMPORT InstallAbout;
FROM DMWindIO IMPORT SetPos, WriteString,
SetWindowFont, WindowFont, FontStyles, FontStyle;
IMPORT DMWindIO; (* for local module AboutAux *)
IMPORT DMMaster; (* for proper linking *)
FROM DMKeyChars IMPORT ProgrammedOn, ComputerPlatform, BestCH;
FROM SimBase IMPORT
Model, IntegrationMethod, DeclM, DeclSV, DeclP, RTCType,
StashFiling, Tabulation, Graphing, DeclMV, SetSimTime,
NoInitialize, NoInput, NoOutput, NoTerminate, NoAbout,
StateVar, Derivative, Parameter, AuxVar,
SetMonInterval, StackWindows,
SetIntegrationStep, DisableWindow, CloseWindow,
SetDefltCurveAttrForMV, Stain, LineStyle, MWWindow,
SetDefltWindowArrangement, MWWindowArrangement, SetWindowPlace,
SetDefltIndepVarIdent, EnableWindow, GetWindowPlace,
IOWColsDisplay, GetIOWColDisplay, SetIOWColDisplay, SetDefltIOWColDisplay;
FROM SimMaster IMPORT
RunSimEnvironment, InstallDefSimEnv, CurrentTime;
FROM WM2Tables IMPORT DeclareTables,
BRCMT, BRFMT, BRMMT, BRPMT,
CFIFRT, CIMT, CIQRT,
DRCMT, DRFMT, DRMMT, DRPMT,
FCMT, FPCIT, FPMT,
NREMT, NRMMT,
POLATT, POLCMT,
QLCT, QLFT, QLMT, QLPT;
FROM TabFunc IMPORT Yi, Yie;
IMPORT DMWindows; (* for local module AboutAux *)
VAR
m: Model;
(* state variables *)
P: StateVar; PDot: Derivative;
POL: StateVar; POLDot: Derivative;
NR: StateVar; NRDot: Derivative;
CI: StateVar; CIDot: Derivative;
CIAF: StateVar; CIAFDot: Derivative;
(* parameters *)
BRN, BRN1, CIAFN, CIAFT, CIDN, CIDN1, CIGN, CIGN1, DRN, DRN1, ECIRN,
FC, FC1, FN, LA, NRI, NRUN, NRUN1, PDN, POLN, POLN1, POLS, QLS: Parameter;
(* switch years*)
BRNSwitchYear, CIDNSwitchYear, CIGNSwitchYear, DRNSwitchYear,
FCSwitchYear, NRUNSwitchYear, POLNSwitchYear: Parameter;
(* aux variables *)
BR, BRCM, BRFM, BRMM, BRPM, CFIFR, CID, CIG, CIM, CIQR,
CIR, CIRA, CR, DR, DRCM, DRFM, DRMM, DRPM, ECIR, FCM,
FPCI, FPM, FR, MSL, NREM, NRFR, NRMM, NRUR, POLA, POLAT,
POLCM, POLG, POLR, QL, QLC, QLF,QLM, QLP: AuxVar;
MODULE AboutAux; (* *************************************************** *)
FROM DMWindIO IMPORT SetPos, StringArea, GetPen, SetPen, WriteString;
FROM DMWindows IMPORT RectArea;
EXPORT aboutWidth, aboutHeigth,
SetCenterWidth, SetCenterLine,
WriteCenteredLn;
VAR
aboutWidth, aboutHeigth,
centerWidth, centerLine, leftMar: INTEGER;
PROCEDURE SetCenterWidth (w: INTEGER);
BEGIN
centerWidth := w;
END SetCenterWidth;
PROCEDURE SetLeftMargin (lm: CARDINAL);
BEGIN
leftMar := lm;
END SetLeftMargin;
PROCEDURE SetCenterLine (l: CARDINAL);
BEGIN
centerLine := l; SetPos(l,leftMar);
END SetCenterLine;
PROCEDURE WriteCenteredLn (s: ARRAY OF CHAR);
VAR a: RectArea; bl,ss,xx,yy: INTEGER;
BEGIN
SetPos(centerLine,leftMar);
StringArea(s,a,bl,ss);
GetPen(xx,yy); SetPen((centerWidth-a.w) DIV 2,yy);
WriteString(s);
INC(centerLine); SetPos(centerLine,leftMar);
END WriteCenteredLn;
BEGIN (* AboutAux *)
aboutWidth := 150;
aboutHeigth := 100;
SetCenterWidth (aboutWidth);
SetLeftMargin (2);
SetCenterLine (2);
END AboutAux; (* *************************************************** *)
PROCEDURE AboutP;
BEGIN
SetCenterLine(1);
WriteCenteredLn("");
SetWindowFont(Chicago,18,FontStyle{});
WriteCenteredLn("World Model 2");
SetWindowFont(Chicago,12,FontStyle{underline});
WriteCenteredLn("");
WriteCenteredLn(" ");
SetWindowFont(Geneva,10,FontStyle{});
WriteCenteredLn("");
WriteCenteredLn("");
WriteCenteredLn("A teaching program by");
SetWindowFont(Geneva,10,FontStyle{bold});
WriteCenteredLn("A. Fischlin, M. Blanke, D. Gyalistras,");
WriteCenteredLn("T. Nemecek, M. Baltensweiler & M. Ulrich");
SetWindowFont(Geneva,10,FontStyle{});
WriteCenteredLn("");
WriteCenteredLn("based on");
SetWindowFont(Geneva,10,FontStyle{bold});
WriteCenteredLn('Forrester, J.W. (1971) "World Dynamics"');
SetWindowFont(Geneva,10,FontStyle{});
WriteCenteredLn("");
WriteCenteredLn("Version 1.0 March 1999");
END AboutP;
PROCEDURE Dynamic;
BEGIN
NRFR:= NR / NRI; (* 7 *)
CIR:= CI / P; (* 23 *)
NREM:= Yi(NREMT, NRFR); (* 6 *)
CR:= P / LA / PDN; (* 15 *)
CIRA:= CIR * CIAF / CIAFN; (* 22 *)
POLR:= POL / POLS; (* 29 *)
ECIR:= CIR * (1.0-CIAF) * NREM / (1.0-CIAFN); (* 5 *)
FCM:= Yi(FCMT, CR); (* 20 *)
FPCI:= Yie(FPCIT, CIRA); (* 21 *)
FPM:= Yi(FPMT, POLR); (* 28 *)
MSL:= ECIR / ECIRN; (* 4 *)
IF CurrentTime() < FCSwitchYear (* 19 *)
THEN FR:= FPCI * FCM * FPM * FC / FN
ELSE FR:= FPCI * FCM * FPM * FC1 / FN
END;
DRMM:= Yie(DRMMT, MSL); (* 11 *)
DRPM:= Yi(DRPMT, POLR); (* 12 *)
DRFM:= Yie(DRFMT, FR); (* 13 *)
DRCM:= Yi(DRCMT, CR); (* 14 *)
BRMM:= Yie(BRMMT, MSL); (* 3 *)
BRCM:= Yi(BRCMT, CR); (* 16 *)
BRFM:= Yie(BRFMT, FR); (* 17 *)
BRPM:= Yi(BRPMT, POLR); (* 18 *)
IF CurrentTime() < BRNSwitchYear (* 2 *)
THEN BR:= P * BRN * BRMM * BRCM * BRFM * BRPM
ELSE BR:= P * BRN1 * BRMM * BRCM * BRFM * BRPM
END;
IF CurrentTime() < DRNSwitchYear (* 10 *)
THEN DR:= P * DRN * DRMM * DRPM * DRFM * DRCM
ELSE DR:= P * DRN1 * DRMM * DRPM * DRFM * DRCM
END;
PDot:= BR - DR; (* 1 *)
NRMM:= Yie(NRMMT, MSL); (* 42 *)
IF CurrentTime() < NRUNSwitchYear (* 9 *)
THEN NRUR:= P * NRUN * NRMM
ELSE NRUR:= P * NRUN1 * NRMM
END;
NRDot:= - NRUR; (* 8 *)
CIM:= Yie(CIMT, MSL); (* 26 *)
IF CurrentTime() < CIGNSwitchYear (* 25 *)
THEN CIG:= P * CIM * CIGN
ELSE CIG:= P * CIM * CIGN1
END;
IF CurrentTime() < CIDNSwitchYear (* 27 *)
THEN CID:= CI * CIDN
ELSE CID:= CI * CIDN1
END;
CIDot:= CIG - CID; (* 24 *)
POLCM:= Yie(POLCMT, CIR); (* 32 *)
POLAT:= Yi(POLATT, POLR); (* 34 *)
IF CurrentTime() < POLNSwitchYear (* 31 *)
THEN POLG:= P * POLN * POLCM
ELSE POLG:= P * POLN1 * POLCM
END;
POLA:= POL / POLAT; (* 33 *)
POLDot:= POLG - POLA; (* 30 *)
QLM:= Yie(QLMT, MSL); (* 38 *)
QLF:= Yie(QLFT, FR); (* 40 *)
CIQR:= Yie(CIQRT, QLM/QLF); (* 43 *)
CFIFR:= Yie(CFIFRT, FR); (* 36 *)
CIAFDot:= (CFIFR * CIQR - CIAF) / CIAFT; (* 35 *)
QLC:= Yi(QLCT, CR); (* 39 *)
QLP:= Yi(QLPT, POLR); (* 41 *)
QL:= QLS * QLM * QLC * QLF * QLP; (* 37 *)
END Dynamic;
PROCEDURE Objects;
BEGIN
DeclSV(P, PDot, 1.650E+9, 0.0 , 8.0E+9, "Population",
"P", "people");
DeclSV(NR, NRDot, 9.0E+11, 0.0 , 1.0E+12, "Natural resources",
"NR", "Natural resource units");
DeclSV(CI, CIDot, 4.0E+8, 0.0 , 2.0E+10, "Capital investment",
"CI", "Capital units");
DeclSV(POL, POLDot, 2.0E+8, 0.0 , 2.0E+11, "Pollution",
"POL", "Pollution units");
DeclSV(CIAF, CIAFDot, 0.2 , 0.0 , 1.0 ,
"Capital-investment-in-agriculture fraction",
"CIAF", "dimensionless");
DeclMV(P, 0.0 , 8.0E+9, "(S) Population",
"P/1", "people",
notOnFile, notInTable, isY);
DeclMV(BR, 0.0, 4.0E+8, "(R) Birth rate",
"BR/2", "people/year",
notOnFile, notInTable, notInGraph);
DeclMV(BRMM, 0.0, 1.5, "(T) Birth-rate-from-material multipier",
"BRMM/3", "dimensionless",
notOnFile, notInTable, notInGraph);
DeclMV(MSL, 0.0, 2.0, "(A) Material standard of living",
"MSL/4", "dimensionless",
notOnFile, notInTable, notInGraph);
DeclMV(ECIR, 0.0, 2.0, "(A) Effective-capital-investment ratio",
"ECIR/5", "capital units/person",
notOnFile, notInTable, notInGraph);
DeclMV(NREM, 0.0, 2.0, "(T) Natural-resource-extraction multiplier",
"NREM/6", "dimensionless",
notOnFile, notInTable, notInGraph);
DeclMV(NRFR, 0.0, 2.0, "(A) Natural-resource fraction remaining",
"NRFR/7", "dimensionless",
notOnFile, notInTable, notInGraph);
DeclMV(NR, 0.0 , 1.0E+12, "(S) Natural resources",
"NR/8", "natural resource units",
notOnFile, notInTable, isY);
DeclMV(NRUR,0.0, 8.0E+9, "(R) Natural-resource-usage rate",
"NRUR/9", "natural resource units/year",
notOnFile,notInTable,notInGraph);
DeclMV(DR, 0.0, 4.0E+8, "(R) Death rate",
"DR/10", "people/year",
notOnFile, notInTable, notInGraph);
DeclMV(DRMM, 0.0, 3.0, "(T) Death-rate-from-material multiplier",
"DRMM/11", "dimensionless",
notOnFile, notInTable, notInGraph);
DeclMV(DRPM, 0.0, 25.0, "(T) Death-rate-from-pollution multiplier",
"DRPM/12", "dimensionless",
notOnFile, notInTable, notInGraph);
DeclMV(DRFM, 0.0, 30.0, "(T) Death-rate-from-food multiplier",
"DRFM/13", "dimensionless",
notOnFile, notInTable, notInGraph);
DeclMV(DRCM, 0.0, 9.0, "(T) Death-rate-from-crowding multiplier",
"DRCM/14", "dimensionless",
notOnFile, notInTable, notInGraph);
DeclMV(CR, 0.0, 10.0, "(A) Crowding ratio",
"CR/15", "dimensionless",
notOnFile, notInTable, notInGraph);
DeclMV(BRCM, 0.0, 1.5, "(T) Birth-rate-from-crowding multiplier",
"BRCM/16", "dimensionless",
notOnFile, notInTable, notInGraph);
DeclMV(BRFM, 0.0, 2.5 , "(T) Birth-rate-from-food multiplier",
"BRFM17", "dimensionless",
notOnFile, notInTable, notInGraph);
DeclMV(BRPM, 0.0, 1.5, "(T) Birth-rate-from-pollution multiplier",
"BRPM/18", "dimensionless",
notOnFile, notInTable, notInGraph);
DeclMV(FR, 0.0, 2.0, "(A) Food ratio",
"FR/19", "dimensionless",
notOnFile, notInTable, notInGraph);
DeclMV(FCM, 0.0, 3.0, "(T) Food-from-crowding multiplier",
"FCM/20", "dimensionless",
notOnFile, notInTable, notInGraph);
DeclMV(FPCI, 0.0, 3.2, "(T) Food potential from capital investment",
"FPCI/21", "food units/person/year",
notOnFile, notInTable, notInGraph);
DeclMV(CIRA, 0.0, 12.0, "(A) Capital-investment ratio in agriculture",
"CIRA/22", "capital units/person",
notOnFile, notInTable, notInGraph);
DeclMV(CIR, 0.0, 10.0, "(A) Capital-investment ratio",
"CIR/23", "capital units/person",
notOnFile, notInTable, notInGraph);
DeclMV(CI, 0.0 , 2.0E+10, "(S) Capital investment",
"CI/24", "capital units",
notOnFile, notInTable, isY);
DeclMV(CIG, 0.0, 4.0E+8, "(R) Capital-investment generation",
"CIG/25", "capital units/year",
notOnFile, notInTable, notInGraph);
DeclMV(CIM, 0.0, 4.0, "(T) Capital-investment multiplier",
"CIM/26", "dimensionless",
notOnFile, notInTable, notInGraph);
DeclMV(CID, 0.0, 4.0E+8, "(R) Capital-investment discard",
"CID/27", "capital units/year",
notOnFile, notInTable, notInGraph);
DeclMV(FPM, 0.0, 1.5, "(T) Food-from-pollution multiplier",
"FPM/28", "dimensionless",
notOnFile, notInTable, notInGraph);
DeclMV(POLR, 0.0, 40.0, "(A) Pollution ratio",
"POLR/29", "dimensionless",
notOnFile, notInTable, isY);
DeclMV(POL, 0.0, 2.0E+11, "(S) Pollution",
"POL/30", "pollution units",
notOnFile, notInTable, notInGraph);
DeclMV(POLG, 0.0, 2.0E10, "(R) Pollution generation",
"POLG/31", "pollution units/year",
notOnFile, notInTable, notInGraph);
DeclMV(POLCM, 0.0, 10.5, "(T) Pollution-from-capital multiplier",
"POLCM/32", "dimensionless",
notOnFile, notInTable, notInGraph);
DeclMV(POLA, 0.0, 2.0E10, "(R) Pollution absorption",
"POLA/33", "pollution units/year",
notOnFile, notInTable, notInGraph);
DeclMV(POLAT,0.0, 16.0, "(T) Pollution-absorption time",
"POLAT/34", "years",
notOnFile, notInTable, notInGraph);
DeclMV(CIAF, 0.2, 0.6, "(S) Capital-investment-in-agrigulture fraction",
"CIAF/35", "dimensionless",
notOnFile, notInTable, notInGraph);
DeclMV(CFIFR, 0.0, 1.0, "(T) Capital fraction indicated by food ratio",
"CFIFR/36", "dimensionless",
notOnFile, notInTable, notInGraph);
DeclMV(QL, 0.0, 2.0, "(A) Quality of Life",
"QL/37","satisfaction units",
notOnFile, notInTable, isY);
DeclMV(QLM, 0.0, 4.0, "(T) Quality of life from material",
"QLM/38", "dimensionless",
notOnFile, notInTable, notInGraph);
DeclMV(QLC, 0.0, 2.0, "(T) Quality of life from crowding",
"QLC/39", "dimensionless",
notOnFile, notInTable, notInGraph);
DeclMV(QLF, 0.0, 4.0, "(T) Quality of life from food",
"QLF/40", "dimensionless",
notOnFile, notInTable, notInGraph);
DeclMV(QLP, 0.0, 2.0, "(T) Quality of life from pollution",
"QLP/41", "dimensionless",
notOnFile, notInTable, notInGraph);
DeclMV(NRMM, 0.0, 4.2, "(T) Natural-resource-from-material multiplier",
"NRMM/42", "dimensionless",
notOnFile, notInTable, notInGraph);
DeclMV(CIQR, 0.5, 4.0, "(T) Capital-investment-from-quality ratio",
"CIQR/43", "dimensionless",
notOnFile, notInTable, notInGraph);
DeclP(BRN1, 0.04, 0.0, 4.0, rtc,
"Birth rate normal No.1",
"BRN1", "fraction/year");
DeclP(CIDN1, 0.025, 0.0, 2.5, rtc,
"Capital-investment discard normal No.1",
"CIDN1", "fraction/year");
DeclP(CIGN1, 0.05, 0.0, 5.0, rtc,
"Capital-investment generation normal No.1",
"CIGN1", "capital units/person/year");
DeclP(DRN1, 0.028, 0.0, 2.8, rtc,
"Death rate normal No.1",
"DRN1", "fraction/year");
DeclP(FC1, 1.0, 0.0, 100.0, rtc,
"Food coefficient No.1",
"FC1", "dimensionless");
DeclP(NRUN1,1.0, 0.0, 100.0, rtc,
"Natural-resource usage normal No.1",
"NRUN1", "natural resource units/person/year");
DeclP(POLN1, 1.0, 0.0, 100.0, rtc, "Pollution normal No.1",
"POLN1", "pollution units/person/year");
DeclP(BRNSwitchYear, 1970.0, 1900.0, 2100.0, rtc, "BRNSwitchYear",
"BRNSY", "years");
DeclP(CIDNSwitchYear, 1970.0, 1900.0, 2100.0, rtc, "CIDNSwitchYear",
"CIDNSY", "years");
DeclP(CIGNSwitchYear, 1970.0, 1900.0, 2100.0, rtc, "CIGNSwitchYear",
"CIGNSY", "years");
DeclP(DRNSwitchYear, 1970.0, 1900.0, 2100.0, rtc, "DRNSwitchYear",
"DRNSY", "years");
DeclP(FCSwitchYear, 1970.0, 1900.0, 2100.0, rtc, "FCSwitchYear",
"FCSY", "years");
DeclP(NRUNSwitchYear, 1970.0, 1900.0, 2100.0, rtc, "NRUNSwitchYear",
"NRUNSY", "years");
DeclP(POLNSwitchYear, 1970.0, 1900.0, 2100.0, rtc, "POLNSwitchYear",
"POLNSY", "years");
(* DeclP(BRN, 0.04, 0.0, 4.0, noRtc, "Birth rate normal",
"BRN", "fraction/year"); *)
BRN:= 0.04;
(* DeclP(CIAFN,0.3, 0.0, 30.0, noRtc,
"Capital-investment-in-agriculture fraction normal",
"CIAFN", "dimensionless"); *)
CIAFN:= 0.3;
(* DeclP(CIAFT, 15.0, 0.0, 1500.0, noRtc,
"Capital-investment-in-agriculture fraction adjustment time",
"CIAFT", "years"); *)
CIAFT:= 15.0;
(* DeclP(CIDN, 0.025, 0.0, 2.5, noRtc,
"Capital-investment discard normal",
"CIDN", "fraction/year"); *)
CIDN:= 0.025;
(* DeclP(CIGN, 0.05, 0.0, 5.0, noRtc,
"Capital-investment generation normal",
"CIGN", "capital units/person/year"); *)
CIGN:= 0.05;
(* DeclP(DRN, 0.028, 0.0, 2.8, noRtc, "Death rate normal",
"DRN", "fraction/year"); *)
DRN:= 0.028;
(* DeclP(ECIRN, 1.0, 0.0, 100.0, noRtc,
"Effective-capital-investment ratio normal",
"ECIRN", "capital units/person"); *)
ECIRN:= 1.0;
(* DeclP(FC, 1.0, 0.0, 100.0, noRtc, "Food coefficient",
"FC", "dimensionless"); *)
FC:= 1.0;
(* DeclP(FN,1.0, 0.0, 100.0, noRtc, "Food normal",
"FN", "food units/person/year"); *)
FN:= 1.0;
(* DeclP(LA, 1.35E+8, 1.35E+6, 1.35E+12, noRtc, "Land area",
"LA", "square kilometers"); *)
LA:= 1.35E+8;
(* DeclP(NRI, 9.0E+11, 9.0E+9, 9.0E13, noRtc,
"Natural resources, initial",
"NRI", "natural-resource units"); *)
NRI:= 9.0E+11;
(* DeclP(NRUN,1.0, 0.0, 100.0, noRtc,
"Natural-resource usage normal",
"NRUN", "natural resource units/person/year"); *)
NRUN:= 1.0;
(* DeclP(PDN, 26.5, 0.0, 2650.0, noRtc,
"Population density normal",
"PDN", "people/square kilometers"); *)
PDN:= 26.5;
(* DeclP(POLN, 1.0, 0.0, 100.0, noRtc, "Pollution normal",
"POLN", "pollution units/person/year"); *)
POLN:= 1.0;
(* DeclP(POLS, 3.6E+9, 3.6E+7, 3.6E+11, noRtc,
"Pollution standard",
"POLS", "pollution units"); *)
POLS:= 3.6E+9;
(* DeclP(QLS, 1.0, 0.0, 100.0, noRtc,
"Quality-of-life standard",
"QLS", "satisfaction units"); *)
QLS:= 1.0;
END Objects;
PROCEDURE SimInit;
VAR height, width, margin, heightPIOW : INTEGER;
x,y,w,h, x1,y1,w1,h1, x2,y2,w2,h2: INTEGER;
pAndMVSideBySide, iOWsWideEnough, isOpen: BOOLEAN;
wd: IOWColsDisplay; wf: WindowFrame;
PROCEDURE DefineDefltTabFuncEditWinPos(mwwLow,mmwUp: MWWindow);
CONST tabFuncDfltEWinID = 7501; (* see TabFunc *) marg = 10;
VAR winPosStr: ARRAY [0..63] OF CHAR; isOpen, resFound: BOOLEAN;
mwf,tfewf: WindowFrame; istr: ARRAY [0..15] OF CHAR; strID: INTEGER;
BEGIN
winPosStr := "";
LoadString("",tabFuncDfltEWinID,winPosStr);
resFound := winPosStr[0]<>0C;
IF resFound THEN
(* resource is actually present => can be modified according to current screen *)
IF mwwLow <> MIOW THEN
GetWindowPlace(mwwLow,mwf.x,mwf.y,mwf.w,mwf.h,isOpen);
tfewf := mwf; (* x, y, w are ok *)
OuterWindowFrame(tfewf,GrowOrShrinkOrDrag,WithoutScrollBars,tfewf);
GetWindowPlace(mmwUp,mwf.x,mwf.y,mwf.w,mwf.h,isOpen);
OuterWindowFrame(mwf,GrowOrShrinkOrDrag,WithoutScrollBars,mwf);
tfewf.h := mwf.y+mwf.h - tfewf.y;
InnerWindowFrame(tfewf,GrowOrShrinkOrDrag,WithoutScrollBars,tfewf);
ELSE (* space used by MIOW and SIOW is too small => use all of screen *)
(* use default, i.e. entire screen *)
tfewf.x := marg; tfewf.y := marg;
tfewf.w := ScreenWidth()-2*marg;
tfewf.h := ScreenHeight()-MenuBarHeight()-2*marg;
InnerWindowFrame(tfewf,GrowOrShrinkOrDrag,WithoutScrollBars,tfewf);
END(*IF*);
winPosStr := "";
IntToString(tfewf.x,istr,7); Append(winPosStr,istr);
IntToString(tfewf.y,istr,7); Append(winPosStr,istr);
IntToString(tfewf.w,istr,7); Append(winPosStr,istr);
IntToString(tfewf.h,istr,7); Append(winPosStr,istr);
(* On a 1024 x 768 screen good values are tfewf.x = 5, y=634 w=495 h=217 *)
strID := tabFuncDfltEWinID;
StoreString("",strID,winPosStr);
END(*IF*);
END DefineDefltTabFuncEditWinPos;
BEGIN (*SimInit*)
(* avoid any premature opening of windows *)
CloseWindow( GraphW );
CloseWindow( TableW );
DisableWindow( PIOW );
DisableWindow( MVIOW );
DisableWindow( GraphW );
DisableWindow( TableW );
GetWindowPlace( SVIOW, x1,y1, w1,h1, isOpen);
GetWindowPlace( MVIOW, x2,y2, w2,h2, isOpen);
pAndMVSideBySide := x1=x2;
iOWsWideEnough := w1>((ScreenWidth()-3*ScrollBarWidth()) DIV 2);
IF pAndMVSideBySide THEN
(* arrangement is: M SV
P MV
T G *)
(* place P instead of SV to leave space for
table function editing in the top left corner of the screen *)
DefineDefltTabFuncEditWinPos(PIOW,SVIOW); (* PIOW not yet changed, SVIOW
still upper right corner *)
SetWindowPlace( PIOW, x1,y1, w1,h1);
ELSE
(* arrangement is: SV P MV
M
T G
screen is probably too small for tiling,
emphasize p and mv IO-windows *)
DefineDefltTabFuncEditWinPos(MIOW,MVIOW);
height := ScreenHeight() - MenuBarHeight();
width := ScreenWidth();
margin := 3*ScrollBarWidth() DIV 2;
heightPIOW:= 140+TitleBarHeight();
w := width-2*margin;
h := height-2*margin;
x := (width-w) DIV 2;
y := (height-h) DIV 2;
SetWindowPlace( TableW,x, y, w ,h );
SetWindowPlace( GraphW, x, y, w ,h );
wf.x := 0; wf.y := height-heightPIOW;
wf.w := width; wf.h := heightPIOW;
InnerWindowFrame(wf,GrowOrShrinkOrDrag,WithoutScrollBars,wf);
SetWindowPlace( PIOW, wf.x, wf.y, wf.w, wf.h );
wf.x := 0; wf.y := 0;
wf.w := width; wf.h := height-heightPIOW;
InnerWindowFrame(wf,GrowOrShrinkOrDrag,WithoutScrollBars,wf);
SetWindowPlace( MVIOW, wf.x, wf.y, wf.w, wf.h );
END(*IF*);
IF iOWsWideEnough OR NOT pAndMVSideBySide THEN
GetIOWColDisplay(PIOW,wd);
wd.descrCol := TRUE;
wd.identCol := TRUE;
wd.p.unitCol := TRUE;
wd.p.pValCol := TRUE;
SetIOWColDisplay(PIOW,wd);
GetIOWColDisplay(MVIOW,wd);
wd.descrCol := TRUE;
wd.identCol := TRUE;
wd.mv.unitCol := TRUE;
wd.mv.mVMonSetCol := TRUE;
SetIOWColDisplay(MVIOW,wd);
END(*IF*);
SetDefltWindowArrangement(current);
EnableWindow( PIOW );
EnableWindow( MVIOW );
EnableWindow( GraphW );
EnableWindow( TableW );
GetWindowPlace( PIOW, wf.x, wf.y, wf.w, wf.h, isOpen );
SetWindowPlace( PIOW, wf.x, wf.y, wf.w, wf.h );
GetWindowPlace( MVIOW, wf.x, wf.y, wf.w, wf.h, isOpen );
SetWindowPlace( MVIOW, wf.x, wf.y, wf.w, wf.h );
IF iOWsWideEnough THEN
(* force opening of Table and Graph, despite no
tabulation or screen will look confusing to user *)
GetWindowPlace( TableW, wf.x, wf.y, wf.w, wf.h, isOpen );
SetWindowPlace( TableW, wf.x, wf.y, wf.w, wf.h );
GetWindowPlace( GraphW, wf.x, wf.y, wf.w, wf.h, isOpen );
SetWindowPlace( GraphW, wf.x, wf.y, wf.w, wf.h );
END(*IF*);
END SimInit;
PROCEDURE ModelDefinitions;
CONST macBullet = 245C; (*=165*)
BEGIN
aboutWidth := 330;
aboutHeigth := 200;
SetCenterWidth (aboutWidth);
InstallAbout( "About World Model 2...", aboutWidth, aboutHeigth, AboutP );
DeclM(m, Euler, NoInitialize, NoInput, NoOutput, Dynamic, NoTerminate,
Objects,
"World model 2 by J.W. Forrester", "WM2model", NoAbout);
ProgrammedOn(Mac);
SetDefltCurveAttrForMV( m, P, coal, unbroken, BestCH(macBullet) );
SetDefltCurveAttrForMV( m, NR, emerald, broken, 0C );
SetDefltCurveAttrForMV( m, CI, sapphire, invisible, "$" );
SetDefltCurveAttrForMV( m, POLR, ruby, unbroken, 0C );
SetDefltCurveAttrForMV( m, QL, pink, spotted, 0C );
SetDefltIndepVarIdent('year', 'year', 'year');
SetSimTime(1900.0,2100.0);
SetMonInterval(5.0);
SetIntegrationStep(0.5); (* was 0.2 in original *)
DeclareTables;
(* suppress opening of windows during start up at wrong places *)
DisableWindow( MIOW );
DisableWindow( SVIOW );
DisableWindow( PIOW );
DisableWindow( MVIOW );
DisableWindow( GraphW );
DisableWindow( TableW );
SetDefltWindowArrangement(tiled);
END ModelDefinitions;
BEGIN
InstallDefSimEnv( SimInit );
RunSimEnvironment(ModelDefinitions);
END WorldModel2.
DEFINITION MODULE WM2Tables;
(******************************************************************
Module WM2TabFuncts (Version 1.0)
Copyright \2511988 by Andreas Fischlin and CELTIA,
Swiss Federal Institute of Technology Zurich ETHZ
Version for 'Dialog Machine' V1.0 and MacMETH V2.4
1-Pass Modula-2 implementation, ModelWorks 1.0
Purpose World Model 2 Table Functions
References Forrester, J.W. 1971. World Dynamics.
Programming
Design
M. Blanke (22 Aug 88)
Implementation
M. Blanke (22 Aug 88)
Swiss Federal Institute of Technology Zurich
Fachgruppe SystemoeSkologie ETHZ
Bodenphysik/IWH, VOD
ETH-Zentrum
CH-8092 Zurich
Switzerland
Last revision: 29 Sept. 88 (mb)
******************************************************************)
FROM TabFunc IMPORT TabFUNC;
VAR
BRCMT, BRFMT, BRMMT, BRPMT, CFIFRT, CIMT, CIQRT, DRCMT,
DRFMT, DRMMT, DRPMT, FCMT, FPCIT, FPMT, NREMT,
NRMMT, POLATT, POLCMT, QLCT, QLFT, QLMT, QLPT : TabFUNC;
PROCEDURE DeclareTables;
END WM2Tables.
IMPLEMENTATION MODULE WM2Tables;
(*
Implementation and Revisions:
============================
Author Date Description
------ ---- -----------
tb 22/08/88 First implementation (DM 1.0,
MacMETH 2.4, ModelWorks 1.0)
tb 29/09/88 fitted to new Modul "TabFunc"
tn 29.10.91 Version 0.3:
updated to new version of TabFunc: all ExtrapolModes
set to horizontally
af 21/04/97 V 0.7 (port back from IBM PC)
af 22/03/99 V 1.0 with OS 8 support
*)
FROM TabFunc IMPORT DeclTabF, TabFUNC, ExtrapolMode, DefineExtrapolationMode;
VAR
x4, y4 : ARRAY [0..4] OF REAL;
x5, y5 : ARRAY [0..5] OF REAL;
x6, y6 : ARRAY [0..6] OF REAL;
x8, y8 : ARRAY [0..8] OF REAL;
x10,y10: ARRAY [0..10] OF REAL;
PROCEDURE DeclareTables;
BEGIN
(*BRCMT*) x5[0]:= 0.0;
(*BRCMT*) x5[1]:= 1.0;
(*BRCMT*) x5[2]:= 2.0;
(*BRCMT*) x5[3]:= 3.0;
(*BRCMT*) x5[4]:= 4.0;
(*BRCMT*) x5[5]:= 5.0;
(*BRCMT*) y5[0]:= 1.05;
(*BRCMT*) y5[1]:= 1.0;
(*BRCMT*) y5[2]:= 0.9;
(*BRCMT*) y5[3]:= 0.7;
(*BRCMT*) y5[4]:= 0.6;
(*BRCMT*) y5[5]:= 0.55;
DeclTabF(BRCMT, x5, y5, 6, TRUE,"BRCMT","CR","BRCM", "dimensionless",
"dimensionless", 0.0, 1000.0, 0.001, 10.5);
(*BRFMT*) x4[0]:= 0.0;
(*BRFMT*) x4[1]:= 1.0;
(*BRFMT*) x4[2]:= 2.0;
(*BRFMT*) x4[3]:= 3.0;
(*BRFMT*) x4[4]:= 4.0;
(*BRFMT*) y4[0]:= 0.0;
(*BRFMT*) y4[1]:= 1.0;
(*BRFMT*) y4[2]:= 1.6;
(*BRFMT*) y4[3]:= 1.9;
(*BRFMT*) y4[4]:= 2.0;
DeclTabF(BRFMT, x4, y4, 5, TRUE, "BRFMT", "FR", "BRFM", "dimensionless",
"dimensionless", 0.0, 1000.0, 0.0, 20.0);
(*BRMMT*) x5[0]:= 0.0;
(*BRMMT*) x5[1]:= 1.0;
(*BRMMT*) x5[2]:= 2.0;
(*BRMMT*) x5[3]:= 3.0;
(*BRMMT*) x5[4]:= 4.0;
(*BRMMT*) x5[5]:= 5.0;
(*BRMMT*) y5[0]:= 1.2;
(*BRMMT*) y5[1]:= 1.0;
(*BRMMT*) y5[2]:= 0.85;
(*BRMMT*) y5[3]:= 0.75;
(*BRMMT*) y5[4]:= 0.7;
(*BRMMT*) y5[5]:= 0.7;
DeclTabF(BRMMT, x5, y5, 6, TRUE, "BRMMT", "MSL", "BRMM", "dimensionless",
"dimensionless", 0.0, 1000.0, 0.001, 12.0);
(*BRPMT*) x6[0]:= 0.0;
(*BRPMT*) x6[1]:= 10.0;
(*BRPMT*) x6[2]:= 20.0;
(*BRPMT*) x6[3]:= 30.0;
(*BRPMT*) x6[4]:= 40.0;
(*BRPMT*) x6[5]:= 50.0;
(*BRPMT*) x6[6]:= 60.0;
(*BRPMT*) y6[0]:= 1.02;
(*BRPMT*) y6[1]:= 0.9;
(*BRPMT*) y6[2]:= 0.7;
(*BRPMT*) y6[3]:= 0.4;
(*BRPMT*) y6[4]:= 0.25;
(*BRPMT*) y6[5]:= 0.15;
(*BRPMT*) y6[6]:= 0.1;
DeclTabF(BRPMT, x6, y6, 7, TRUE, "BRPMT", "POLR", "BRPM", "dimensionless",
"dimensionless", 0.0, 1000.0, 0.001, 10.2);
(*CFIFRT*) x4[0]:= 0.0;
(*CFIFRT*) x4[1]:= 0.5;
(*CFIFRT*) x4[2]:= 1.0;
(*CFIFRT*) x4[3]:= 1.5;
(*CFIFRT*) x4[4]:= 2.0;
(*CFIFRT*) y4[0]:= 1.0;
(*CFIFRT*) y4[1]:= 0.6;
(*CFIFRT*) y4[2]:= 0.3;
(*CFIFRT*) y4[3]:= 0.15;
(*CFIFRT*) y4[4]:= 0.1;
DeclTabF(CFIFRT, x4, y4, 5, TRUE, "CFIFRT", "FR", "CFIFR", "dimensionless",
"dimensionless", 0.0, 1000.0, 0.001, 10.0);
(*CIMT*) x5[0]:= 0.0;
(*CIMT*) x5[1]:= 1.0;
(*CIMT*) x5[2]:= 2.0;
(*CIMT*) x5[3]:= 3.0;
(*CIMT*) x5[4]:= 4.0;
(*CIMT*) x5[5]:= 5.0;
(*CIMT*) y5[0]:= 0.1;
(*CIMT*) y5[1]:= 1.0;
(*CIMT*) y5[2]:= 1.8;
(*CIMT*) y5[3]:= 2.4;
(*CIMT*) y5[4]:= 2.8;
(*CIMT*) y5[5]:= 3.0;
DeclTabF(CIMT, x5, y5, 6, TRUE, "CIMT", "MSL", "CIM", "dimensionless",
"dimensionless", 0.0, 1000.0, 0.001, 30.0);
(*CIQRT*) x4[0]:= 0.0;
(*CIQRT*) x4[1]:= 0.5;
(*CIQRT*) x4[2]:= 1.0;
(*CIQRT*) x4[3]:= 1.5;
(*CIQRT*) x4[4]:= 2.0;
(*CIQRT*) y4[0]:= 0.7;
(*CIQRT*) y4[1]:= 0.8;
(*CIQRT*) y4[2]:= 1.0;
(*CIQRT*) y4[3]:= 1.5;
(*CIQRT*) y4[4]:= 2.0;
DeclTabF(CIQRT, x4, y4, 5, TRUE, "CIQR", "QLM/QLF", "CIQRT", "dimensionless",
"dimensionless", 0.0, 1000.0, 0.001, 20.0);
(*DRCMT*) x5[0]:= 0.0;
(*DRCMT*) x5[1]:= 1.0;
(*DRCMT*) x5[2]:= 2.0;
(*DRCMT*) x5[3]:= 3.0;
(*DRCMT*) x5[4]:= 4.0;
(*DRCMT*) x5[5]:= 5.0;
(*DRCMT*) y5[0]:= 0.9;
(*DRCMT*) y5[1]:= 1.0;
(*DRCMT*) y5[2]:= 1.2;
(*DRCMT*) y5[3]:= 1.5;
(*DRCMT*) y5[4]:= 1.9;
(*DRCMT*) y5[5]:= 3.0;
DeclTabF(DRCMT, x5, y5, 6, TRUE, "DRCMT", "CR", "DRCM", "dimensionless",
"dimensionless", 0.0, 1000.0, 0.001, 30.0);
(*DRFMT*) x8[0]:= 0.0;
(*DRFMT*) x8[1]:= 0.25;
(*DRFMT*) x8[2]:= 0.5;
(*DRFMT*) x8[3]:= 0.75;
(*DRFMT*) x8[4]:= 1.0;
(*DRFMT*) x8[5]:= 1.25;
(*DRFMT*) x8[6]:= 1.5;
(*DRFMT*) x8[7]:= 1.75;
(*DRFMT*) x8[8]:= 2.0;
(*DRFMT*) y8[0]:= 30.0;
(*DRFMT*) y8[1]:= 3.0;
(*DRFMT*) y8[2]:= 2.0;
(*DRFMT*) y8[3]:= 1.4;
(*DRFMT*) y8[4]:= 1.0;
(*DRFMT*) y8[5]:= 0.7;
(*DRFMT*) y8[6]:= 0.6;
(*DRFMT*) y8[7]:= 0.5;
(*DRFMT*) y8[8]:= 0.5;
DeclTabF(DRFMT, x8, y8, 9, TRUE, "DRFMT", "FR", "DRFM", "dimensionless",
"dimensionless", 0.0, 1000.0, 0.001, 300.0);
(*DRMMT*) x10[0]:= 0.0;
(*DRMMT*) x10[1]:= 0.5;
(*DRMMT*) x10[2]:= 1.0;
(*DRMMT*) x10[3]:= 1.5;
(*DRMMT*) x10[4]:= 2.0;
(*DRMMT*) x10[5]:= 2.5;
(*DRMMT*) x10[6]:= 3.0;
(*DRMMT*) x10[7]:= 3.5;
(*DRMMT*) x10[8]:= 4.0;
(*DRMMT*) x10[9]:= 4.5;
(*DRMMT*) x10[10]:= 5.0;
(*DRMMT*) y10[0]:= 3.0;
(*DRMMT*) y10[1]:= 1.8;
(*DRMMT*) y10[2]:= 1.0;
(*DRMMT*) y10[3]:= 0.8;
(*DRMMT*) y10[4]:= 0.7;
(*DRMMT*) y10[5]:= 0.6;
(*DRMMT*) y10[6]:= 0.53;
(*DRMMT*) y10[7]:= 0.5;
(*DRMMT*) y10[8]:= 0.5;
(*DRMMT*) y10[9]:= 0.5;
(*DRMMT*) y10[10]:= 0.5;
DeclTabF(DRMMT, x10, y10, 11, TRUE, "DRMMT", "MSL", "DRMM", "dimensionless",
"dimensionless", 0.0, 1000.0, 0.001, 30.0);
(*DRPMT*) x6[0]:= 0.0;
(*DRPMT*) x6[1]:= 10.0;
(*DRPMT*) x6[2]:= 20.0;
(*DRPMT*) x6[3]:= 30.0;
(*DRPMT*) x6[4]:= 40.0;
(*DRPMT*) x6[5]:= 50.0;
(*DRPMT*) x6[6]:= 60.0;
(*DRPMT*) y6[0]:= 0.92;
(*DRPMT*) y6[1]:= 1.3;
(*DRPMT*) y6[2]:= 2.0;
(*DRPMT*) y6[3]:= 3.2;
(*DRPMT*) y6[4]:= 4.8;
(*DRPMT*) y6[5]:= 6.8;
(*DRPMT*) y6[6]:= 9.2;
DeclTabF(DRPMT ,x6, y6, 7, TRUE, "DRPMT", "POLR", "DRPM", "dimensionless",
"dimensionless", 0.0, 1000.0, 0.001, 92.0);
(*FCMT*) x5[0]:= 0.0;
(*FCMT*) x5[1]:= 1.0;
(*FCMT*) x5[2]:= 2.0;
(*FCMT*) x5[3]:= 3.0;
(*FCMT*) x5[4]:= 4.0;
(*FCMT*) x5[5]:= 5.0;
(*FCMT*) y5[0]:= 2.4;
(*FCMT*) y5[1]:= 1.0;
(*FCMT*) y5[2]:= 0.6;
(*FCMT*) y5[3]:= 0.4;
(*FCMT*) y5[4]:= 0.3;
(*FCMT*) y5[5]:= 0.2;
DeclTabF(FCMT, x5, y5, 6, TRUE, "FCMT", "CR", "FCM", "dimensionless",
"dimensionless", 0.0, 1000.0, 0.001, 24.0);
(*FPCIT*) x6[0]:= 0.0;
(*FPCIT*) x6[1]:= 1.0;
(*FPCIT*) x6[2]:= 2.0;
(*FPCIT*) x6[3]:= 3.0;
(*FPCIT*) x6[4]:= 4.0;
(*FPCIT*) x6[5]:= 5.0;
(*FPCIT*) x6[6]:= 6.0;
(*FPCIT*) y6[0]:= 0.5;
(*FPCIT*) y6[1]:= 1.0;
(*FPCIT*) y6[2]:= 1.4;
(*FPCIT*) y6[3]:= 1.7;
(*FPCIT*) y6[4]:= 1.9;
(*FPCIT*) y6[5]:= 2.05;
(*FPCIT*) y6[6]:= 2.2;
DeclTabF(FPCIT, x6, y6, 7, TRUE, "FPCIT", "CIRA", "FPCI", "dimensionless",
"dimensionless", 0.0, 1000.0, 0.001, 22.0);
(*FPMT*) x6[0]:= 0.0;
(*FPMT*) x6[1]:= 10.0;
(*FPMT*) x6[2]:= 20.0;
(*FPMT*) x6[3]:= 30.0;
(*FPMT*) x6[4]:= 40.0;
(*FPMT*) x6[5]:= 50.0;
(*FPMT*) x6[6]:= 60.0;
(*FPMT*) y6[0]:= 1.02;
(*FPMT*) y6[1]:= 0.9;
(*FPMT*) y6[2]:= 0.65;
(*FPMT*) y6[3]:= 0.35;
(*FPMT*) y6[4]:= 0.2;
(*FPMT*) y6[5]:= 0.1;
(*FPMT*) y6[6]:= 0.05;
DeclTabF(FPMT, x6, y6, 7, TRUE, "FPMT", "POLR", "FPM", "dimensionless",
"dimensionless", 0.0, 1000.0, 0.001, 10.2);
(*NREMT*) x4[0]:= 0.0;
(*NREMT*) x4[1]:= 0.25;
(*NREMT*) x4[2]:= 0.5;
(*NREMT*) x4[3]:= 0.75;
(*NREMT*) x4[4]:= 1.0;
(*NREMT*) y4[0]:= 0.0;
(*NREMT*) y4[1]:= 0.15;
(*NREMT*) y4[2]:= 0.5;
(*NREMT*) y4[3]:= 0.85;
(*NREMT*) y4[4]:= 1.0;
DeclTabF(NREMT, x4, y4, 5, TRUE, "NREMT", "NRFR", "NREM", "dimensionless",
"dimensionless", 0.0, 1000.0, 0.0, 10.0);
(*NRMMT*) x10[0]:= 0.0;
(*NRMMT*) x10[1]:= 1.0;
(*NRMMT*) x10[2]:= 2.0;
(*NRMMT*) x10[3]:= 3.0;
(*NRMMT*) x10[4]:= 4.0;
(*NRMMT*) x10[5]:= 5.0;
(*NRMMT*) x10[6]:= 6.0;
(*NRMMT*) x10[7]:= 7.0;
(*NRMMT*) x10[8]:= 8.0;
(*NRMMT*) x10[9]:= 9.0;
(*NRMMT*) x10[10]:= 10.0;
(*NRMMT*) y10[0]:= 0.0;
(*NRMMT*) y10[1]:= 1.0;
(*NRMMT*) y10[2]:= 1.8;
(*NRMMT*) y10[3]:= 2.4;
(*NRMMT*) y10[4]:= 2.9;
(*NRMMT*) y10[5]:= 3.3;
(*NRMMT*) y10[6]:= 3.6;
(*NRMMT*) y10[7]:= 3.8;
(*NRMMT*) y10[8]:= 3.9;
(*NRMMT*) y10[9]:= 3.95;
(*NRMMT*) y10[10]:= 4.0;
DeclTabF(NRMMT, x10, y10, 11, TRUE, "NRMMT", "MSL", "NRMM", "dimensionless",
"dimensionless", 0.0, 1000.0, 0.0, 40.0);
(*POLATT*) x6[0]:= 0.0;
(*POLATT*) x6[1]:= 10.0;
(*POLATT*) x6[2]:= 20.0;
(*POLATT*) x6[3]:= 30.0;
(*POLATT*) x6[4]:= 40.0;
(*POLATT*) x6[5]:= 50.0;
(*POLATT*) x6[6]:= 60.0;
(*POLATT*) y6[0]:= 0.6;
(*POLATT*) y6[1]:= 2.5;
(*POLATT*) y6[2]:= 5.0;
(*POLATT*) y6[3]:= 8.0;
(*POLATT*) y6[4]:= 11.5;
(*POLATT*) y6[5]:= 15.5;
(*POLATT*) y6[6]:= 20.0;
DeclTabF(POLATT, x6, y6, 7, TRUE, "POLATT", "POLR", "POLAT", "dimensionless",
"dimensionless", 0.0, 1000.0, 0.001, 200.0);
(*POLCMT*) x5[0]:= 0.0;
(*POLCMT*) x5[1]:= 1.0;
(*POLCMT*) x5[2]:= 2.0;
(*POLCMT*) x5[3]:= 3.0;
(*POLCMT*) x5[4]:= 4.0;
(*POLCMT*) x5[5]:= 5.0;
(*POLCMT*) y5[0]:= 0.05;
(*POLCMT*) y5[1]:= 1.0;
(*POLCMT*) y5[2]:= 3.0;
(*POLCMT*) y5[3]:= 5.4;
(*POLCMT*) y5[4]:= 7.4;
(*POLCMT*) y5[5]:= 8.0;
DeclTabF(POLCMT, x5, y5, 6, TRUE, "POLCMT", "CIR", "POLCM", "dimensionless",
"dimensionless", 0.0, 1000.0, 0.001, 80.0);
(*QLCT*) x10[0]:= 0.0;
(*QLCT*) x10[1]:= 0.5;
(*QLCT*) x10[2]:= 1.0;
(*QLCT*) x10[3]:= 1.5;
(*QLCT*) x10[4]:= 2.0;
(*QLCT*) x10[5]:= 2.5;
(*QLCT*) x10[6]:= 3.0;
(*QLCT*) x10[7]:= 3.5;
(*QLCT*) x10[8]:= 4.0;
(*QLCT*) x10[9]:= 4.5;
(*QLCT*) x10[10]:= 5.0;
(*QLCT*) y10[0]:= 2.0;
(*QLCT*) y10[1]:= 1.3;
(*QLCT*) y10[2]:= 1.0;
(*QLCT*) y10[3]:= 0.75;
(*QLCT*) y10[4]:= 0.55;
(*QLCT*) y10[5]:= 0.45;
(*QLCT*) y10[6]:= 0.38;
(*QLCT*) y10[7]:= 0.3;
(*QLCT*) y10[8]:= 0.25;
(*QLCT*) y10[9]:= 0.22;
(*QLCT*) y10[10]:= 0.2;
DeclTabF(QLCT, x10, y10, 11, TRUE, "QLCT", "CR", "QLC", "dimensionless",
"dimensionless", 0.0, 1000.0, 0.001, 20.0);
(*QLFT*) x4[0]:= 0.0;
(*QLFT*) x4[1]:= 1.0;
(*QLFT*) x4[2]:= 2.0;
(*QLFT*) x4[3]:= 3.0;
(*QLFT*) x4[4]:= 4.0;
(*QLFT*) y4[0]:= 0.0;
(*QLFT*) y4[1]:= 1.0;
(*QLFT*) y4[2]:= 1.8;
(*QLFT*) y4[3]:= 2.4;
(*QLFT*) y4[4]:= 2.7;
DeclTabF(QLFT, x4, y4, 5, TRUE, "QLFT", "FR", "QLF", "dimensionless",
"dimensionless", 0.0, 1000.0, 0.0, 27.0);
(*QLMT*) x5[0]:= 0.0;
(*QLMT*) x5[1]:= 1.0;
(*QLMT*) x5[2]:= 2.0;
(*QLMT*) x5[3]:= 3.0;
(*QLMT*) x5[4]:= 4.0;
(*QLMT*) x5[5]:= 5.0;
(*QLMT*) y5[0]:= 0.2;
(*QLMT*) y5[1]:= 1.0;
(*QLMT*) y5[2]:= 1.7;
(*QLMT*) y5[3]:= 2.3;
(*QLMT*) y5[4]:= 2.7;
(*QLMT*) y5[5]:= 2.9;
DeclTabF(QLMT, x5, y5, 6, TRUE, "QLMT", "MSL", "QLM", "dimensionless",
"dimensionless", 0.0, 1000.0, 0.001, 29.0);
(*QLPT*) x6[0]:= 0.0;
(*QLPT*) x6[1]:= 10.0;
(*QLPT*) x6[2]:= 20.0;
(*QLPT*) x6[3]:= 30.0;
(*QLPT*) x6[4]:= 40.0;
(*QLPT*) x6[5]:= 50.0;
(*QLPT*) x6[6]:= 60.0;
(*QLPT*) y6[0]:= 1.04;
(*QLPT*) y6[1]:= 0.85;
(*QLPT*) y6[2]:= 0.6;
(*QLPT*) y6[3]:= 0.3;
(*QLPT*) y6[4]:= 0.15;
(*QLPT*) y6[5]:= 0.05;
(*QLPT*) y6[6]:= 0.02;
DeclTabF(QLPT, x6, y6, 7, TRUE, "QLPT", "POLR", "QLP", "dimensionless",
"dimensionless", 0.0, 1000.0, 0.001, 10.4);
DefineExtrapolationMode(BRCMT, horizontally);
DefineExtrapolationMode(BRFMT, horizontally);
DefineExtrapolationMode(BRMMT, horizontally);
DefineExtrapolationMode(BRPMT, horizontally);
DefineExtrapolationMode(CFIFRT, horizontally);
DefineExtrapolationMode(CIMT, horizontally);
DefineExtrapolationMode(CIQRT, horizontally);
DefineExtrapolationMode(DRCMT, horizontally);
DefineExtrapolationMode(DRFMT, horizontally);
DefineExtrapolationMode(DRMMT, horizontally);
DefineExtrapolationMode(DRPMT, horizontally);
DefineExtrapolationMode(FCMT, horizontally);
DefineExtrapolationMode(FPCIT, horizontally);
DefineExtrapolationMode(FPMT, horizontally);
DefineExtrapolationMode(NREMT, horizontally);
DefineExtrapolationMode(NRMMT, horizontally);
DefineExtrapolationMode(POLATT, horizontally);
DefineExtrapolationMode(POLCMT, horizontally);
DefineExtrapolationMode(QLCT, horizontally);
DefineExtrapolationMode(QLFT, horizontally);
DefineExtrapolationMode(QLMT, horizontally);
DefineExtrapolationMode(QLPT, horizontally);
END DeclareTables;
END WM2Tables.
|
||
|
|
||
| RAMSES@env.ethz.ch | Last modified 1/30/23 | [Top of page] |