1 |
johnpye |
1165 |
(* ASCEND modelling environment |
2 |
|
|
Copyright (C) 1997 Carnegie Mellon University |
3 |
|
|
Copyright (C) 2006 Carnegie Mellon University |
4 |
|
|
|
5 |
|
|
This program is free software; you can redistribute it and/or modify |
6 |
|
|
it under the terms of the GNU General Public License as published by |
7 |
|
|
the Free Software Foundation; either version 2, or (at your option) |
8 |
|
|
any later version. |
9 |
|
|
|
10 |
|
|
This program is distributed in the hope that it will be useful, |
11 |
|
|
but WITHOUT ANY WARRANTY; without even the implied warranty of |
12 |
|
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
13 |
|
|
GNU General Public License for more details. |
14 |
|
|
|
15 |
|
|
You should have received a copy of the GNU General Public License |
16 |
jpye |
2649 |
along with this program. If not, see <http://www.gnu.org/licenses/>. |
17 |
johnpye |
1165 |
*) |
18 |
aw0a |
1 |
REQUIRE "atoms.a4l"; |
19 |
|
|
(* |
20 |
johnpye |
1165 |
This model is the second example in "Solved simple models with ASCEND." |
21 |
aw0a |
1 |
|
22 |
johnpye |
1165 |
@TODO add a citation and/or brief problem description |
23 |
|
|
|
24 |
|
|
by Arthur Westerberg, 1997. |
25 |
|
|
*) |
26 |
|
|
|
27 |
aw0a |
1 |
MODEL travel_distance; |
28 |
johnpye |
1165 |
kmax IS_A integer_constant; |
29 |
|
|
v[1..2*kmax+1] IS_A speed; |
30 |
|
|
delta_time IS_A time; |
31 |
|
|
d IS_A distance; |
32 |
aw0a |
1 |
|
33 |
johnpye |
1165 |
d = SUM[ |
34 |
|
|
v[2*k-1] + 4*v[2*k] + v[2*k+1] |
35 |
|
|
SUCH_THAT k IN [1..kmax] |
36 |
|
|
] * delta_time/6; |
37 |
aw0a |
1 |
|
38 |
|
|
END travel_distance; |
39 |
|
|
|
40 |
johnpye |
1165 |
MODEL distance_calc REFINES travel_distance; |
41 |
aw0a |
1 |
kmax :== 5; |
42 |
|
|
|
43 |
|
|
METHODS |
44 |
|
|
|
45 |
|
|
METHOD specify; |
46 |
johnpye |
576 |
FIX v[1..2*kmax+1]; |
47 |
|
|
FIX delta_time; |
48 |
aw0a |
1 |
END specify; |
49 |
|
|
|
50 |
|
|
METHOD values; |
51 |
|
|
v[1] := 100 {ft/min}; |
52 |
|
|
v[2] := 120 {ft/min}; |
53 |
|
|
v[3] := 130 {ft/min}; |
54 |
|
|
v[4] := 135 {ft/min}; |
55 |
|
|
v[5] := 140 {ft/min}; |
56 |
|
|
v[6] := 160 {ft/min}; |
57 |
|
|
v[7] := 180 {ft/min}; |
58 |
|
|
v[8] := 210 {ft/min}; |
59 |
|
|
v[9] := 240 {ft/min}; |
60 |
|
|
v[10] := 220 {ft/min}; |
61 |
|
|
v[11] := 200 {ft/min}; |
62 |
|
|
delta_time := 10 {s}; |
63 |
|
|
END values; |
64 |
|
|
|
65 |
johnpye |
1165 |
METHOD on_load; |
66 |
|
|
RUN reset; |
67 |
|
|
RUN values; |
68 |
|
|
END on_load; |
69 |
aw0a |
1 |
|
70 |
johnpye |
1165 |
METHOD self_test; |
71 |
|
|
ASSERT abs(d - 42.84 {m}) < 1 {cm}; |
72 |
|
|
END self_test; |
73 |
|
|
|
74 |
|
|
END distance_calc; |
75 |
|
|
|
76 |
|
|
|