Skip to content

Commit d70167c

Browse files
- Refactor isNil ifTrue: as ifNil: (#229)
- Demos with announcement are working again
1 parent b5affe0 commit d70167c

19 files changed

+296
-170
lines changed

src/Math-ODE/PMAB2Stepper.class.st

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -15,9 +15,10 @@ PMAB2Stepper class >> order [
1515

1616
{ #category : #stepping }
1717
PMAB2Stepper >> doStep: aState prevState: prevState time: t [
18-
self stepSize isNil
19-
ifTrue: [ self error: 'step size required by stepper' ].
20-
^ (self stepSize / 2) * (3 * (system state: aState time: t) - (system state: prevState time: t - self stepSize)) + aState
18+
19+
self stepSize ifNil: [ self error: 'step size required by stepper' ].
20+
^ self stepSize / 2 * (3 * (system state: aState time: t)
21+
- (system state: prevState time: t - self stepSize)) + aState
2122
]
2223

2324
{ #category : #stepping }
@@ -30,10 +31,10 @@ PMAB2Stepper >> doStep: aState prevState: prevState time: t stepSize: timeStep
3031
{ #category : #stepping }
3132
PMAB2Stepper >> lastStep: aState prevState: prevState time: t deltaT: incrementOfTime [
3233

33-
self stepSize isNil
34-
ifTrue: [ self error: 'step size required by stepper' ].
34+
self stepSize ifNil: [ self error: 'step size required by stepper' ].
3535

36-
^ self stepSize / 2 * (3 * (system state: aState time: t) - (system state: prevState time: t - incrementOfTime)) + aState
36+
^ self stepSize / 2 * (3 * (system state: aState time: t)
37+
- (system state: prevState time: t - incrementOfTime)) + aState
3738
]
3839

3940
{ #category : #stepping }

src/Math-ODE/PMAB3Stepper.class.st

Lines changed: 21 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -15,12 +15,17 @@ PMAB3Stepper class >> order [
1515
]
1616

1717
{ #category : #stepping }
18-
PMAB3Stepper >> doStep: thisState prevState:prevState prevPrevState: prevPrevState prevPrevTime: prevPrevTime [
19-
20-
self stepSize isNil
21-
ifTrue: [ self error: 'step size required by stepper' ].
22-
^ self stepSize * ( ( (23/12) * (system state: thisState time: prevPrevTime+ (2* self stepSize) )) - ((4/3)*(system state: prevState time: prevPrevTime+ self stepSize)) + ((5/12)*(system state: prevPrevState time: prevPrevTime ) )) + thisState.
23-
18+
PMAB3Stepper >> doStep: thisState prevState: prevState prevPrevState: prevPrevState prevPrevTime: prevPrevTime [
19+
20+
self stepSize ifNil: [ self error: 'step size required by stepper' ].
21+
^ self stepSize * (23 / 12
22+
*
23+
(system state: thisState time: prevPrevTime + (2 * self stepSize))
24+
-
25+
(4 / 3
26+
* (system state: prevState time: prevPrevTime + self stepSize))
27+
+ (5 / 12 * (system state: prevPrevState time: prevPrevTime)))
28+
+ thisState
2429
]
2530

2631
{ #category : #stepping }
@@ -31,11 +36,17 @@ PMAB3Stepper >> doStep: thisState prevState: prevState prevPrevState: prevPrevSt
3136

3237
{ #category : #stepping }
3338
PMAB3Stepper >> lastStep: thisState prevState: prevState prevPrevState: prevPrevState prevPrevTime: prevPrevTime deltaT: incrementOfTime [
34-
self stepSize isNil
35-
ifTrue: [ self error: 'step size required by stepper' ].
36-
37-
^ self stepSize * ( ( (23/12) * (system state: thisState time: prevPrevTime+ (2* incrementOfTime) )) - ((4/3)*(system state: prevState time: prevPrevTime+ incrementOfTime)) + ((5/12)*(system state: prevPrevState time: prevPrevTime ) )) + thisState.
3839

40+
self stepSize ifNil: [ self error: 'step size required by stepper' ].
41+
42+
^ self stepSize * (23 / 12
43+
*
44+
(system
45+
state: thisState
46+
time: prevPrevTime + (2 * incrementOfTime)) - (4 / 3
47+
* (system state: prevState time: prevPrevTime + incrementOfTime))
48+
+ (5 / 12 * (system state: prevPrevState time: prevPrevTime)))
49+
+ thisState
3950
]
4051

4152
{ #category : #stepping }

src/Math-ODE/PMAB4Stepper.class.st

Lines changed: 27 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -15,11 +15,18 @@ PMAB4Stepper class >> order [
1515
]
1616

1717
{ #category : #stepping }
18-
PMAB4Stepper >> doStep3State: thirdState secondState:secondState firstState: firstState initState: initState initTime: initTime [
19-
20-
self stepSize isNil
21-
ifTrue: [ self error: 'step size required by stepper' ].
22-
^ self stepSize * ( ( (55/24) * (system state: thirdState time: initTime+ (3* self stepSize) )) - ((59/24)*(system state: secondState time: initTime+ (2* self stepSize))) + ((37/24)*(system state: firstState time: initTime+ self stepSize ) )- ((3/8)*(system state: initState time: initTime ) )) + thirdState.
18+
PMAB4Stepper >> doStep3State: thirdState secondState: secondState firstState: firstState initState: initState initTime: initTime [
19+
20+
self stepSize ifNil: [ self error: 'step size required by stepper' ].
21+
^ self stepSize * (55 / 24
22+
* (system state: thirdState time: initTime + (3 * self stepSize))
23+
- (59 / 24
24+
*
25+
(system state: secondState time: initTime + (2 * self stepSize)))
26+
+
27+
(37 / 24
28+
* (system state: firstState time: initTime + self stepSize))
29+
- (3 / 8 * (system state: initState time: initTime))) + thirdState
2330
]
2431

2532
{ #category : #stepping }
@@ -29,12 +36,21 @@ PMAB4Stepper >> doStep3State: thirdState secondState:secondState firstState: fir
2936
]
3037

3138
{ #category : #stepping }
32-
PMAB4Stepper >> lastStep: thirdState secondState:secondState firstState: firstState initState: initState initTime: initTime deltaT: incrementOfTime [
33-
34-
self stepSize isNil
35-
ifTrue: [ self error: 'step size required by stepper' ].
36-
^ self stepSize * ( ( (55/24) * (system state: thirdState time: initTime+ (3* incrementOfTime) )) - ((59/24)*(system state: secondState time: initTime+ (2* incrementOfTime))) + ((37/24)*(system state: firstState time: initTime+ incrementOfTime ) )- ((3/8)*(system state: initState time: initTime ) )) + thirdState.
37-
39+
PMAB4Stepper >> lastStep: thirdState secondState: secondState firstState: firstState initState: initState initTime: initTime deltaT: incrementOfTime [
40+
41+
self stepSize ifNil: [ self error: 'step size required by stepper' ].
42+
^ self stepSize * (55 / 24
43+
*
44+
(system state: thirdState time: initTime + (3 * incrementOfTime))
45+
- (59 / 24
46+
*
47+
(system
48+
state: secondState
49+
time: initTime + (2 * incrementOfTime)))
50+
+
51+
(37 / 24
52+
* (system state: firstState time: initTime + incrementOfTime))
53+
- (3 / 8 * (system state: initState time: initTime))) + thirdState
3854
]
3955

4056
{ #category : #stepping }

src/Math-ODE/PMAM3Stepper.class.st

Lines changed: 45 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -17,22 +17,28 @@ PMAM3Stepper class >> order [
1717

1818
{ #category : #stepping }
1919
PMAM3Stepper >> doStep: aState prevState: prevState time: t [
20+
2021
| approximateState1 approximateState2 |
21-
self stepSize isNil
22-
ifTrue: [ self error: 'step size required by stepper' ].
23-
approximateState1 := aState + (self stepSize * (system state: aState time: t + self stepSize)).
24-
approximateState2 := aState
25-
+
26-
(self stepSize
27-
*
28-
(5 / 12 * (system state: approximateState1 time: t + (2 * self stepSize)) + (2 / 3 * (system state: aState time: t + self stepSize))
29-
- (1 / 12 * (system state: prevState time: t)))).
30-
^ aState
31-
+
32-
(self stepSize
33-
*
34-
(5 / 12 * (system state: approximateState2 time: t + (2 * self stepSize)) + (2 / 3 * (system state: aState time: t + self stepSize))
35-
- (1 / 12 * (system state: prevState time: t))))
22+
self stepSize ifNil: [ self error: 'step size required by stepper' ].
23+
approximateState1 := aState
24+
+
25+
(self stepSize
26+
*
27+
(system state: aState time: t + self stepSize)).
28+
approximateState2 := aState + (self stepSize * (5 / 12
29+
*
30+
(system
31+
state: approximateState1
32+
time: t + (2 * self stepSize))
33+
+
34+
(2 / 3
35+
*
36+
(system state: aState time: t + self stepSize))
37+
- (1 / 12 * (system state: prevState time: t)))).
38+
^ aState + (self stepSize * (5 / 12
39+
* (system state: approximateState2 time: t + (2 * self stepSize))
40+
+ (2 / 3 * (system state: aState time: t + self stepSize))
41+
- (1 / 12 * (system state: prevState time: t))))
3642
]
3743

3844
{ #category : #stepping }
@@ -45,22 +51,31 @@ PMAM3Stepper >> doStep: aState prevState: prevState time: t stepSize: timeStep [
4551

4652
{ #category : #stepping }
4753
PMAM3Stepper >> lastStep: aState prevState: prevState time: t deltaT: incrementOfTime [
54+
4855
| approximateState1 approximateState2 |
49-
self stepSize isNil
50-
ifTrue: [ self error: 'step size required by stepper' ].
51-
approximateState1 := aState + (self stepSize * (system state: aState time: t + incrementOfTime)).
52-
approximateState2 := aState
53-
+
54-
(self stepSize
55-
*
56-
(5 / 12 * (system state: approximateState1 time: t + (2 * incrementOfTime))
57-
+ (2 / 3 * (system state: aState time: t + incrementOfTime)) - (1 / 12 * (system state: prevState time: t)))).
58-
^ aState
59-
+
60-
(self stepSize
61-
*
62-
(5 / 12 * (system state: approximateState2 time: t + (2 * incrementOfTime))
63-
+ (2 / 3 * (system state: aState time: t + incrementOfTime)) - (1 / 12 * (system state: prevState time: t))))
56+
self stepSize ifNil: [ self error: 'step size required by stepper' ].
57+
approximateState1 := aState
58+
+
59+
(self stepSize
60+
*
61+
(system state: aState time: t + incrementOfTime)).
62+
approximateState2 := aState + (self stepSize * (5 / 12
63+
*
64+
(system
65+
state: approximateState1
66+
time: t + (2 * incrementOfTime))
67+
+
68+
(2 / 3
69+
*
70+
(system
71+
state: aState
72+
time: t + incrementOfTime))
73+
- (1 / 12 * (system state: prevState time: t)))).
74+
^ aState + (self stepSize * (5 / 12
75+
*
76+
(system state: approximateState2 time: t + (2 * incrementOfTime))
77+
+ (2 / 3 * (system state: aState time: t + incrementOfTime))
78+
- (1 / 12 * (system state: prevState time: t))))
6479
]
6580

6681
{ #category : #stepping }

src/Math-ODE/PMAM4Stepper.class.st

Lines changed: 66 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -17,24 +17,41 @@ PMAM4Stepper class >> order [
1717

1818
{ #category : #stepping }
1919
PMAM4Stepper >> doStep: aState prevState: prevState prevPrevState: prevPrevState time: t [
20+
2021
| approximateState1 approximateState2 |
21-
self stepSize isNil
22-
ifTrue: [ self error: 'step size required by stepper' ].
23-
approximateState1 := aState + (self stepSize * (system state: aState time: t)).
24-
approximateState2 := aState
25-
+
26-
(self stepSize
27-
*
28-
(3 / 8 * (system state: approximateState1 time: t + self stepSize) + (19 / 24 * (system state: aState time: t))
29-
- (5 / 24 * (system state: prevState time: t - self stepSize))
30-
+ (1 / 24 * (system state: prevPrevState time: t - (2 * self stepSize))))).
31-
^ aState
32-
+
33-
(self stepSize
34-
*
35-
(3 / 8 * (system state: approximateState2 time: t + self stepSize) + (19 / 24 * (system state: aState time: t))
36-
- (5 / 24 * (system state: prevState time: t - self stepSize))
37-
+ (1 / 24 * (system state: prevPrevState time: t - (2 * self stepSize)))))
22+
self stepSize ifNil: [ self error: 'step size required by stepper' ].
23+
approximateState1 := aState
24+
+
25+
(self stepSize * (system state: aState time: t)).
26+
approximateState2 := aState + (self stepSize
27+
*
28+
(3 / 8
29+
*
30+
(system
31+
state: approximateState1
32+
time: t + self stepSize)
33+
+ (19 / 24 * (system state: aState time: t))
34+
-
35+
(5 / 24
36+
*
37+
(system
38+
state: prevState
39+
time: t - self stepSize))
40+
+
41+
(1 / 24
42+
*
43+
(system
44+
state: prevPrevState
45+
time: t - (2 * self stepSize))))).
46+
^ aState + (self stepSize
47+
*
48+
(3 / 8
49+
* (system state: approximateState2 time: t + self stepSize)
50+
+ (19 / 24 * (system state: aState time: t))
51+
- (5 / 24 * (system state: prevState time: t - self stepSize))
52+
+
53+
(1 / 24
54+
* (system state: prevPrevState time: t - (2 * self stepSize)))))
3855
]
3956

4057
{ #category : #stepping }
@@ -51,24 +68,39 @@ PMAM4Stepper >> doStep: aState prevState: prevState prevPrevState: prevPrevState
5168

5269
{ #category : #stepping }
5370
PMAM4Stepper >> lastStep: aState prevState: prevState prevPrevState: prevPrevState time: t deltaT: incrementOfTime [
71+
5472
| approximateState1 approximateState2 |
55-
self stepSize isNil
56-
ifTrue: [ self error: 'step size required by stepper' ].
57-
approximateState1 := aState + (self stepSize * (system state: aState time: t)).
58-
approximateState2 := aState
59-
+
60-
(self stepSize
61-
*
62-
(3 / 8 * (system state: approximateState1 time: t + incrementOfTime) + (19 / 24 * (system state: aState time: t))
63-
- (5 / 24 * (system state: prevState time: t - incrementOfTime))
64-
+ (1 / 24 * (system state: prevPrevState time: t - (2 * incrementOfTime))))).
65-
^ aState
66-
+
67-
(self stepSize
68-
*
69-
(3 / 8 * (system state: approximateState2 time: t + incrementOfTime) + (19 / 24 * (system state: aState time: t))
70-
- (5 / 24 * (system state: prevState time: t - incrementOfTime))
71-
+ (1 / 24 * (system state: prevPrevState time: t - (2 * incrementOfTime)))))
73+
self stepSize ifNil: [ self error: 'step size required by stepper' ].
74+
approximateState1 := aState
75+
+
76+
(self stepSize * (system state: aState time: t)).
77+
approximateState2 := aState + (self stepSize
78+
*
79+
(3 / 8
80+
*
81+
(system
82+
state: approximateState1
83+
time: t + incrementOfTime)
84+
+ (19 / 24 * (system state: aState time: t))
85+
-
86+
(5 / 24
87+
*
88+
(system
89+
state: prevState
90+
time: t - incrementOfTime)) + (1 / 24
91+
*
92+
(system
93+
state: prevPrevState
94+
time: t - (2 * incrementOfTime))))).
95+
^ aState + (self stepSize
96+
*
97+
(3 / 8
98+
* (system state: approximateState2 time: t + incrementOfTime)
99+
+ (19 / 24 * (system state: aState time: t))
100+
- (5 / 24 * (system state: prevState time: t - incrementOfTime))
101+
+ (1 / 24
102+
*
103+
(system state: prevPrevState time: t - (2 * incrementOfTime)))))
72104
]
73105

74106
{ #category : #stepping }

src/Math-ODE/PMBDF2Stepper.class.st

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -18,11 +18,13 @@ PMBDF2Stepper class >> order [
1818

1919
{ #category : #stepping }
2020
PMBDF2Stepper >> doStep: aState prevState: prevState time: t [
21-
|approximateState |
22-
self stepSize isNil
23-
ifTrue: [ self error: 'step size required by stepper' ].
24-
approximateState := (system state: aState time: t) * self stepSize + aState.
25-
^ ((4 / 3) * aState) - ((1 / 3) * prevState) + ((2 / 3) * self stepSize * (system state: approximateState time: t + self stepSize))
21+
22+
| approximateState |
23+
self stepSize ifNil: [ self error: 'step size required by stepper' ].
24+
approximateState := (system state: aState time: t) * self stepSize
25+
+ aState.
26+
^ 4 / 3 * aState - (1 / 3 * prevState) + (2 / 3 * self stepSize
27+
* (system state: approximateState time: t + self stepSize))
2628
]
2729

2830
{ #category : #stepping }

src/Math-ODE/PMBDF3Stepper.class.st

Lines changed: 9 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -17,12 +17,15 @@ PMBDF3Stepper class >> order [
1717
]
1818

1919
{ #category : #stepping }
20-
PMBDF3Stepper >> doStep: aState prevState: prevState prevPrevState: prevPrevState time: t [
21-
|approximateState |
22-
self stepSize isNil
23-
ifTrue: [ self error: 'step size required by stepper' ].
24-
approximateState := (system state: aState time: t) * self stepSize + aState.
25-
^ ((18 / 11) * aState) - ((9 / 11) * prevState) +((2 / 11) * prevPrevState)+ ((6 / 11) * self stepSize * (system state: approximateState time: t + self stepSize))
20+
PMBDF3Stepper >> doStep: aState prevState: prevState prevPrevState: prevPrevState time: t [
21+
22+
| approximateState |
23+
self stepSize ifNil: [ self error: 'step size required by stepper' ].
24+
approximateState := (system state: aState time: t) * self stepSize
25+
+ aState.
26+
^ 18 / 11 * aState - (9 / 11 * prevState) + (2 / 11 * prevPrevState)
27+
+ (6 / 11 * self stepSize
28+
* (system state: approximateState time: t + self stepSize))
2629
]
2730

2831
{ #category : #stepping }

src/Math-ODE/PMBDF4Stepper.class.st

Lines changed: 10 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -16,13 +16,16 @@ PMBDF4Stepper class >> order [
1616
]
1717

1818
{ #category : #stepping }
19-
PMBDF4Stepper >> doStep3State: thirdState secondState:secondState firstState: firstState initState: initState
20-
thirdTime: t [
21-
|approximateState |
22-
self stepSize isNil
23-
ifTrue: [ self error: 'step size required by stepper' ].
24-
approximateState := (system state: thirdState time: t) * self stepSize + thirdState.
25-
^ ((48 / 25) * thirdState) - ((36 / 25) * secondState) + ((16 / 25) * firstState) - ((3 / 25) * initState) + ((12 / 25) * self stepSize * (system state: approximateState time: t + self stepSize))
19+
PMBDF4Stepper >> doStep3State: thirdState secondState: secondState firstState: firstState initState: initState thirdTime: t [
20+
21+
| approximateState |
22+
self stepSize ifNil: [ self error: 'step size required by stepper' ].
23+
approximateState := (system state: thirdState time: t)
24+
* self stepSize + thirdState.
25+
^ 48 / 25 * thirdState - (36 / 25 * secondState)
26+
+ (16 / 25 * firstState) - (3 / 25 * initState)
27+
+ (12 / 25 * self stepSize
28+
* (system state: approximateState time: t + self stepSize))
2629
]
2730

2831
{ #category : #stepping }

0 commit comments

Comments
 (0)