-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathpollution.ts
More file actions
133 lines (129 loc) · 3.61 KB
/
pollution.ts
File metadata and controls
133 lines (129 loc) · 3.61 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
/** Kintetic constants for the Pollution model */
enum POL {
K1 = 0.35,
K2 = 26.6,
K3 = 1.23e4,
K4 = 8.6e-4,
K5 = 8.2e-4,
K6 = 1.5e4,
K7 = 1.3e-4,
K8 = 2.4e4,
K9 = 1.65e4,
K10 = 9e3,
K11 = 0.022,
K12 = 1.2e4,
K13 = 1.88,
K14 = 1.63e4,
K15 = 4.8e6,
K16 = 3.5e-4,
K17 = 0.0175,
K18 = 1e8,
K19 = 4.44e11,
K20 = 1240,
K21 = 2.1,
K22 = 5.78,
K23 = 0.0474,
K24 = 1780,
K25 = 3.12,
}; // POL
/** The chemical reaction part of the air pollution model (https://archimede.uniba.it/~testset/report/pollu.pdf) */
export const pollution = {
name: 'Pollution',
arg: {name: 't', start: 0, finish: 60, step: 0.002},
initial: [0, 0.2, 0, 0.04, 0, 0, 0.1, 0.3, 0.01, 0, 0, 0, 0, 0, 0, 0, 0.007, 0, 0, 0],
func: (t: number, y: Float64Array, output: Float64Array) => {
// extract function values
const y1 = y[0];
const y2 = y[1];
const y3 = y[2];
const y4 = y[3];
const y5 = y[4];
const y6 = y[5];
const y7 = y[6];
const y8 = y[7];
const y9 = y[8];
const y10 = y[9];
const y11 = y[10];
const y12 = y[11];
const y13 = y[12];
const y14 = y[13];
const y15 = y[14];
const y16 = y[15];
const y17 = y[16];
const y18 = y[17];
const y19 = y[18];
const y20 = y[19];
// evaluate expressions
const r1 = POL.K1 * y1;
const r2 = POL.K2 * y2 * y4;
const r3 = POL.K3 * y5 * y2;
const r4 = POL.K4 * y7;
const r5 = POL.K5 * y7;
const r6 = POL.K6 * y7 * y6;
const r7 = POL.K7 * y9;
const r8 = POL.K8 * y9 * y6;
const r9 = POL.K9 * y11 * y2;
const r10 = POL.K10 * y11 * y1;
const r11 = POL.K11 * y13;
const r12 = POL.K12 * y10 * y2;
const r13 = POL.K13 * y14;
const r14 = POL.K14 * y1 * y6;
const r15 = POL.K15 * y3;
const r16 = POL.K16 * y4;
const r17 = POL.K17 * y4;
const r18 = POL.K18 * y16;
const r19 = POL.K19 * y16;
const r20 = POL.K20 * y17 * y6;
const r21 = POL.K21 * y19;
const r22 = POL.K22 * y19;
const r23 = POL.K23 * y1 * y4;
const r24 = POL.K24 * y19 * y1;
const r25 = POL.K25 * y20;
// compute output
output[0] = -(r1 + r10 + r14 + r23 + r24) + (r2 + r3 + r9 + r11 + r12 + r22 + r25);
output[1] = -r2 - r3 - r9 - r12 + r1 + r21;
output[2] = -r15 + r1 + r17 + r19 + r22;
output[3] = -r2 - r16 - r17 - r23 + r15;
output[4] = -r3 +2 * r4 + r6 +r7 +r13 + r20;
output[5] = -r6 - r8 - r14 - r20 + r3 + 2 * r18;
output[6] = -r4 - r5 - r6 + r13;
output[7] = r4 + r5 + r6 + r7;
output[8] = -r7 - r8;
output[9] = -r12 +r7 + r9;
output[10] = -r9 - r10 + r8 + r11;
output[11] = r9;
output[12] = -r11 + r10;
output[13] = -r13 + r12;
output[14] = r14;
output[15] = -r18 - r19 + r16;
output[16] = -r20;
output[17] = r20;
output[18] = -r21 - r22 - r24 + r23 + r25;
output[19] = -r25 + r24;
},
tolerance: 1e-6,
solutionColNames: ['y1', 'y2', 'y3', 'y4', 'y5', 'y6', 'y7', 'y8', 'y9', 'y10', 'y11',
'y12', 'y13', 'y14', 'y15', 'y16', 'y17', 'y18', 'y19', 'y20'],
}; // pollution
export const pollutionReferencePoint = new Float64Array([
0.05646255480022769,
0.1342484130422339,
0.4139734331099427E-8,
0.5523140207484359E-2,
0.2018977262302196E-6,
0.1464541863493966E-6,
0.7784249118997964E-1,
0.3245075353396018,
0.7494013383880406E-2,
0.1622293157301561E-7,
0.1135863833257075E-7,
0.2230505975721359E-2,
0.2087162882798630E-3,
0.1396921016840158E-4,
0.8964884856898295E-2,
0.4352846369330103E-17,
0.6899219696263405E-2,
0.1007803037365946E-3,
0.1772146513969984E-5,
0.5682943292316392E-4,
]);