Eclipse SUMO - Simulation of Urban MObility
Loading...
Searching...
No Matches
MSCFModel_Rail.h
Go to the documentation of this file.
1/****************************************************************************/
2// Eclipse SUMO, Simulation of Urban MObility; see https://eclipse.dev/sumo
3// Copyright (C) 2012-2026 German Aerospace Center (DLR) and others.
4// This program and the accompanying materials are made available under the
5// terms of the Eclipse Public License 2.0 which is available at
6// https://www.eclipse.org/legal/epl-2.0/
7// This Source Code may also be made available under the following Secondary
8// Licenses when the conditions for such availability set forth in the Eclipse
9// Public License 2.0 are satisfied: GNU General Public License, version 2
10// or later which is available at
11// https://www.gnu.org/licenses/old-licenses/gpl-2.0-standalone.html
12// SPDX-License-Identifier: EPL-2.0 OR GPL-2.0-or-later
13/****************************************************************************/
18// <description missing>
19/****************************************************************************/
20#pragma once
21#include <config.h>
22
24#include "MSCFModel.h"
25
26
27
28class MSCFModel_Rail : public MSCFModel {
29
30public:
34 MSCFModel_Rail(const MSVehicleType* vtype);
35
36 double followSpeed(const MSVehicle* const veh, double speed, double gap2pred, double predSpeed,
37 double predMaxDecel, const MSVehicle* const pred = 0, const CalcReason usage = CalcReason::CURRENT) const;
38
39 virtual int getModelID() const;
40
41 virtual MSCFModel* duplicate(const MSVehicleType* vtype) const;
42
43
44
45 virtual ~MSCFModel_Rail();
46
47 virtual double maxNextSpeed(double speed, const MSVehicle* const veh) const;
48
49 virtual double minNextSpeed(double speed, const MSVehicle* const veh) const;
50
51 virtual double minNextSpeedEmergency(double speed, const MSVehicle* const veh = 0) const;
52
53 double getSpeedAfterMaxDecel(double v) const;
54
55 double finalizeSpeed(MSVehicle* const veh, double vPos) const;
56
57 double freeSpeed(const MSVehicle* const veh, double speed, double seen, double maxSpeed,
58 const bool onInsertion, const CalcReason usage = CalcReason::CURRENT) const;
59
60 bool startupDelayStopped() const {
61 // starup delay in trains is dominated by inertia + brake delay and thus applies to any kind of stopping
62 return true;
63 }
64
65private:
66
67 struct TrainParams {
68 // the vehicle mass in tons
69 double weight; // tons
70 // the mass factor
71 double mf;
72 double length;
73 double decl;
74 double vmax;
75 double recovery;
78 double maxPower; // kN
79 double maxTraction; // kN
80 double resCoef_constant; // kN
81 double resCoef_linear; // kN / (km/h)
82 double resCoef_quadratic; // kN / (km/h)^2
83 //
84 double curveResistance = 0;
85 double roeckl_sharp_radius = 300;
86 double roeckl_numerator = 6380;
88 double roeckl_offset = 55;
90
91 double getResistance(double speed) const;
92 double getTraction(double speed) const;
93 };
94
95public:
96 double stopSpeed(const MSVehicle* const veh, const double speed, double gap, double decel, const CalcReason usage = CalcReason::CURRENT) const;
97
98protected:
99
100 // @return rotational weight in tons
101 double getRotWeight(const MSVehicle* const veh) const;
102
103 // @brief return weight in tons
104 double getWeight(const MSVehicle* const veh) const;
105
106 // @brief Röckl formula which returns kN
107 double getCurveResistance(const MSVehicle* veh) const;
108
109private:
110
112
113 LinearApproxHelpers::LinearApproxMap initNGT400Traction() const { // early version of NGT 400
115 map[0] = 716.0;
116 map[10] = 700.0;
117 map[20] = 684.0;
118 map[30] = 669.0;
119 map[40] = 653.0;
120 map[50] = 637.0;
121 map[60] = 622.0;
122 map[70] = 606.0;
123 map[80] = 590.0;
124 map[90] = 574.0;
125 map[100] = 559.0;
126 map[110] = 543.0;
127 map[120] = 527.0;
128 map[130] = 507.0;
129 map[140] = 471.0;
130 map[150] = 439.0;
131 map[160] = 412.0;
132 map[170] = 388.0;
133 map[180] = 366.0;
134 map[190] = 347.0;
135 map[200] = 329.0;
136 map[210] = 314.0;
137 map[220] = 299.0;
138 map[230] = 286.0;
139 map[240] = 275.0;
140 map[250] = 264.0;
141 map[260] = 253.0;
142 map[270] = 244.0;
143 map[280] = 235.0;
144 map[290] = 227.0;
145 map[300] = 220.0;
146 map[310] = 213.0;
147 map[320] = 206.0;
148 map[330] = 200.0;
149 map[340] = 194.0;
150 map[350] = 188.0;
151 map[360] = 183.0;
152 map[370] = 178.0;
153 map[380] = 173.0;
154 map[390] = 169.0;
155 map[400] = 165.0;
156 map[410] = 160.6;
157 map[420] = 156.8;
158 map[430] = 153.2;
159 map[440] = 149.7;
160 map[450] = 146.4;
161 map[460] = 143.2;
162 map[470] = 140.1;
163 map[480] = 137.2;
164 LinearApproxHelpers::scalePoints(map, 1 / 3.6, 1);
165 return map;
166 }
167
168 LinearApproxHelpers::LinearApproxMap initNGT400Resistance() const { // early version of NGT 400
170 map[0] = 1.9;
171 map[10] = 2.1;
172 map[20] = 2.4;
173 map[30] = 2.9;
174 map[40] = 3.5;
175 map[50] = 4.2;
176 map[60] = 5.0;
177 map[70] = 6.0;
178 map[80] = 7.0;
179 map[90] = 8.2;
180 map[100] = 9.6;
181 map[110] = 11.0;
182 map[120] = 12.6;
183 map[130] = 14.3;
184 map[140] = 16.1;
185 map[150] = 18.0;
186 map[160] = 20.1;
187 map[170] = 22.3;
188 map[180] = 24.6;
189 map[190] = 27.0;
190 map[200] = 29.5;
191 map[210] = 32.2;
192 map[220] = 35.0;
193 map[230] = 37.9;
194 map[240] = 40.9;
195 map[250] = 44.1;
196 map[260] = 47.4;
197 map[270] = 50.8;
198 map[280] = 54.3;
199 map[290] = 58.0;
200 map[300] = 61.7;
201 map[310] = 65.6;
202 map[320] = 69.7;
203 map[330] = 73.8;
204 map[340] = 78.1;
205 map[350] = 82.4;
206 map[360] = 86.9;
207 map[370] = 91.6;
208 map[380] = 96.3;
209 map[390] = 101.2;
210 map[400] = 106.2;
211 map[410] = 111.3;
212 map[420] = 116.6;
213 map[430] = 121.9;
214 map[440] = 127.4;
215 map[450] = 133.0;
216 map[460] = 138.7;
217 map[470] = 144.6;
218 map[480] = 150.6;
219 LinearApproxHelpers::scalePoints(map, 1 / 3.6, 1);
220 return map;
221 }
222
224 TrainParams params;
225 params.weight = 384;
226 params.mf = 1.04;
227 params.length = 200;
228 params.decl = 0.9;
229 params.vmax = 500 / 3.6;
230 params.recovery = 0.6;
231 params.traction = initNGT400Traction();
233 return params;
234 }
235
238 map[0] = 274.5;
239 map[10] = 274.5;
240 map[20] = 274.5;
241 map[30] = 274.5;
242 map[40] = 274.5;
243 map[50] = 274.5;
244 map[60] = 274.5;
245 map[70] = 274.5;
246 map[80] = 274.5;
247 map[90] = 274.5;
248 map[100] = 274.5;
249 map[110] = 274.5;
250 map[120] = 274.5;
251 map[130] = 274.5;
252 map[140] = 274.5;
253 map[150] = 274.5;
254 map[160] = 274.5;
255 map[170] = 274.5;
256 map[180] = 274.5;
257 map[190] = 274.5;
258 map[200] = 274.5;
259 map[210] = 273;
260 map[220] = 262.3;
261 map[230] = 250;
262 map[240] = 239;
263 map[250] = 229;
264 map[260] = 222;
265 map[270] = 213;
266 map[280] = 205;
267 map[290] = 198;
268 map[300] = 191;
269 map[310] = 186;
270 map[320] = 180;
271 map[330] = 174;
272 map[340] = 169;
273 map[350] = 165;
274 map[360] = 160;
275 map[370] = 155.5;
276 map[380] = 151;
277 map[390] = 148;
278 map[400] = 144;
279 map[410] = 140;
280 map[420] = 136;
281 map[430] = 134;
282 map[440] = 131;
283 map[450] = 128;
284 map[460] = 125;
285 map[470] = 123;
286 LinearApproxHelpers::scalePoints(map, 1 / 3.6, 1);
287 return map;
288 }
289
292 map[0] = 5.71;
293 map[10] = 6.01;
294 map[20] = 6.4;
295 map[30] = 7.0;
296 map[40] = 7.51;
297 map[50] = 8.34;
298 map[60] = 9.2;
299 map[70] = 10.4;
300 map[80] = 11.3;
301 map[90] = 12.58;
302 map[100] = 14.05;
303 map[110] = 15.5;
304 map[120] = 16.9;
305 map[130] = 18.75;
306 map[140] = 20.77;
307 map[150] = 22.9;
308 map[160] = 25.0;
309 map[170] = 26.9;
310 map[180] = 29.38;
311 map[190] = 32.0;
312 map[200] = 34.5;
313 map[210] = 37.0;
314 map[220] = 39.91;
315 map[230] = 43.11;
316 map[240] = 46.4;
317 map[250] = 49.3;
318 map[260] = 52.4;
319 map[270] = 56.09;
320 map[280] = 59.8;
321 map[290] = 63.7;
322 map[300] = 66.8;
323 map[310] = 71.0;
324 map[320] = 75.39;
325 map[330] = 79.9;
326 map[340] = 84.1;
327 map[350] = 87.9;
328 map[360] = 92.7;
329 map[370] = 97.6;
330 map[380] = 102.0;
331 map[390] = 107.0;
332 map[400] = 112.0;
333 map[410] = 117.5;
334 map[420] = 123.0;
335 map[430] = 128.3;
336 map[440] = 133.3;
337 map[450] = 139.2;
338 map[460] = 145.5;
339 map[470] = 150.0;
340 LinearApproxHelpers::scalePoints(map, 1 / 3.6, 1);
341 return map;
342 }
343
345 TrainParams params;
346 params.weight = 384;
347 params.mf = 1.04;
348 params.length = 200;
349 params.decl = 0.9;
350 params.vmax = 430 / 3.6;
351 params.recovery = 0.6;
354 return params;
355 }
356
359 map[0] = 400;
360 map[10] = 394;
361 map[20] = 388;
362 map[30] = 382;
363 map[40] = 377;
364 map[50] = 372;
365 map[60] = 369;
366 map[70] = 366;
367 map[80] = 363;
368 map[90] = 361;
369 map[100] = 349;
370 map[110] = 317;
371 map[120] = 290;
372 map[130] = 268;
373 map[140] = 249;
374 map[150] = 232;
375 map[160] = 217;
376 map[170] = 205;
377 map[180] = 193;
378 map[190] = 183;
379 map[200] = 174;
380 map[210] = 165;
381 map[220] = 158;
382 map[230] = 151;
383 map[240] = 145;
384 map[250] = 139;
385 LinearApproxHelpers::scalePoints(map, 1 / 3.6, 1);
386 return map;
387 }
388
391 map[0] = 10.7;
392 map[10] = 12.3;
393 map[20] = 14.2;
394 map[30] = 16.4;
395 map[40] = 18.7;
396 map[50] = 21.3;
397 map[60] = 24.2;
398 map[70] = 27.3;
399 map[80] = 30.6;
400 map[90] = 34.1;
401 map[100] = 37.9;
402 map[110] = 41.9;
403 map[120] = 46.2;
404 map[130] = 50.6;
405 map[140] = 55.4;
406 map[150] = 60.4;
407 map[160] = 65.6;
408 map[170] = 71.1;
409 map[180] = 76.7;
410 map[190] = 82.6;
411 map[200] = 88.8;
412 map[210] = 95.2;
413 map[220] = 101.8;
414 map[230] = 108.7;
415 map[240] = 115.8;
416 map[250] = 123.1;
417 LinearApproxHelpers::scalePoints(map, 1 / 3.6, 1);
418 return map;
419 }
420
422 TrainParams params;
423 params.weight = 876;
424 params.mf = 1.1;
425 params.length = 358;
426 params.decl = 0.5;
427 params.vmax = 250 / 3.6;
428 params.recovery = 0.1;
429 params.traction = initICE1Traction();
431 return params;
432 }
433
435 TrainParams params;
436 params.weight = 420;
437 params.mf = 1.04;
438 params.length = 200;
439 params.decl = 0.5;
440 params.vmax = 300 / 3.6;
441 params.recovery = 0.6;
442 params.traction = initICE3Traction();
444 return params;
445 }
446
449 map[0] = 300;
450 map[10] = 298;
451 map[20] = 297;
452 map[30] = 295;
453 map[40] = 293;
454 map[50] = 292;
455 map[60] = 290;
456 map[70] = 288;
457 map[80] = 286.5;
458 map[90] = 285;
459 map[100] = 283;
460 map[110] = 262;
461 map[120] = 240;
462 map[130] = 221;
463 map[140] = 206;
464 map[150] = 192;
465 map[160] = 180;
466 map[170] = 169;
467 map[180] = 160;
468 map[190] = 152;
469 map[200] = 144;
470 map[210] = 137;
471 map[220] = 131;
472 map[230] = 125;
473 map[240] = 120;
474 map[250] = 115;
475 map[260] = 111;
476 map[270] = 107;
477 map[280] = 103;
478 map[290] = 99;
479 map[300] = 96;
480 LinearApproxHelpers::scalePoints(map, 1 / 3.6, 1);
481 return map;
482 }
483
486 map[0] = 7.4;
487 map[10] = 7.6;
488 map[20] = 8.0;
489 map[30] = 8.4;
490 map[40] = 9.1;
491 map[50] = 9.8;
492 map[60] = 10.7;
493 map[70] = 11.7;
494 map[80] = 12.8;
495 map[90] = 14.1;
496 map[100] = 15.5;
497 map[110] = 17.1;
498 map[120] = 18.8;
499 map[130] = 20.6;
500 map[140] = 22.6;
501 map[150] = 24.6;
502 map[160] = 26.9;
503 map[170] = 29.2;
504 map[180] = 31.7;
505 map[190] = 34.3;
506 map[200] = 37.1;
507 map[210] = 40.0;
508 map[220] = 43.1;
509 map[230] = 46.2;
510 map[240] = 49.6;
511 map[250] = 53.0;
512 map[260] = 56.6;
513 map[270] = 60.3;
514 map[280] = 64.1;
515 map[290] = 68.1;
516 map[300] = 71.8;
517 LinearApproxHelpers::scalePoints(map, 1 / 3.6, 1);
518 return map;
519 }
520
522 TrainParams params;
523 params.weight = 425.5;
524 params.mf = 1.1;
525 params.length = 207;
526 params.decl = 0.5;
527 params.vmax = 160 / 3.6;
528 params.recovery = 0.1;
531 return params;
532 }
533
536 map[0] = 300;
537 map[10] = 300;
538 map[20] = 300;
539 map[30] = 300;
540 map[40] = 300;
541 map[50] = 300;
542 map[60] = 300;
543 map[70] = 289;
544 map[80] = 253;
545 map[90] = 224;
546 map[100] = 202;
547 map[110] = 183;
548 map[120] = 168;
549 map[130] = 155;
550 map[140] = 144;
551 map[150] = 134;
552 map[160] = 125;
553 LinearApproxHelpers::scalePoints(map, 1 / 3.6, 1);
554 return map;
555 }
556
559 map[0] = 8.5;
560 map[10] = 8.9;
561 map[20] = 9.5;
562 map[30] = 10.4;
563 map[40] = 11.4;
564 map[50] = 12.7;
565 map[60] = 14.1;
566 map[70] = 15.8;
567 map[80] = 17.7;
568 map[90] = 19.8;
569 map[100] = 22.6;
570 map[110] = 24.6;
571 map[120] = 27.3;
572 map[130] = 30.2;
573 map[140] = 33.3;
574 map[150] = 36.6;
575 map[160] = 40.2;
576 LinearApproxHelpers::scalePoints(map, 1 / 3.6, 1);
577 return map;
578 }
579
581 TrainParams params;
582 params.weight = 72.2;
583 params.mf = 1.04;
584 params.length = 46;
585 params.decl = 0.5;
586 params.vmax = 120 / 3.6;
587 params.recovery = 0;
588 params.traction = initRB628Traction();
590 return params;
591 }
592
595 map[0] = 60;
596 map[10] = 53.8;
597 map[20] = 47.6;
598 map[30] = 36.9;
599 map[40] = 28.7;
600 map[50] = 23.5;
601 map[60] = 20.0;
602 map[70] = 17.5;
603 map[80] = 15.2;
604 map[90] = 13.9;
605 map[100] = 12.8;
606 map[110] = 11.7;
607 map[120] = 10.8;
608 LinearApproxHelpers::scalePoints(map, 1 / 3.6, 1);
609 return map;
610 }
611
614 map[0] = 1.29;
615 map[10] = 1.46;
616 map[20] = 1.73;
617 map[30] = 2.08;
618 map[40] = 2.52;
619 map[50] = 3.05;
620 map[60] = 3.66;
621 map[70] = 4.36;
622 map[80] = 5.16;
623 map[90] = 6.03;
624 map[100] = 7.00;
625 map[110] = 8.06;
626 map[120] = 9.2;
627 LinearApproxHelpers::scalePoints(map, 1 / 3.6, 1);
628 return map;
629 }
630
632 TrainParams params;
633 params.weight = 1440;
634 params.mf = 1.06;
635 params.length = 512;
636 params.decl = 0.3;
637 params.vmax = 120 / 3.6;
638 params.recovery = 0.05;
639 params.traction = initFreightTraction();
641 return params;
642 }
643
646 map[0] = 300;
647 map[10] = 296;
648 map[20] = 293;
649 map[30] = 289;
650 map[40] = 286;
651 map[50] = 282;
652 map[60] = 279;
653 map[70] = 275;
654 map[80] = 272;
655 map[90] = 255;
656 map[100] = 230;
657 map[110] = 209;
658 map[120] = 190;//guessed value
659 LinearApproxHelpers::scalePoints(map, 1 / 3.6, 1);
660 return map;
661 }
662
665 map[0] = 1.9;
666 map[10] = 4.3;
667 map[20] = 8.5;
668 map[30] = 14.3;
669 map[40] = 21.7;
670 map[50] = 30.8;
671 map[60] = 41.5;
672 map[70] = 53.8;
673 map[80] = 67.8;
674 map[90] = 83.5;
675 map[100] = 110.7;
676 map[110] = 119.6;
677 map[120] = 140.2;
678 LinearApproxHelpers::scalePoints(map, 1 / 3.6, 1);
679 return map;
680 }
681
684 map[0] = 150;
685 map[10] = 150;
686 map[20] = 150;
687 map[30] = 150;
688 map[40] = 150;
689 map[50] = 150;
690 map[60] = 140;
691 map[70] = 120;
692 map[80] = 105;
693 map[90] = 93;
694 map[100] = 84;
695 map[110] = 75;
696 map[120] = 70;
697 map[130] = 56;
698 map[140] = 52;
699 map[150] = 46;
700 map[160] = 40;
701 LinearApproxHelpers::scalePoints(map, 1 / 3.6, 1);
702 return map;
703 }
704
707 map[0] = 2.6;
708 map[10] = 2.9;
709 map[20] = 3.3;
710 map[30] = 3.7;
711 map[40] = 4.3;
712 map[50] = 4.9;
713 map[60] = 5.7;
714 map[70] = 6.6;
715 map[80] = 7.5;
716 map[90] = 8.6;
717 map[100] = 9.7;
718 map[110] = 11.0;
719 map[120] = 12.3;
720 map[130] = 13.8;
721 map[140] = 15.3;
722 map[150] = 16.9;
723 map[160] = 18.7;
724 LinearApproxHelpers::scalePoints(map, 1 / 3.6, 1);
725 return map;
726 }
727
729 TrainParams params;
730 params.weight = 138;
731 params.mf = 1.04;
732 params.length = 67.5;
733 params.decl = 1.0;
734 params.vmax = 160 / 3.6;
735 params.recovery = 0.6;
736 params.traction = initRB425Traction();
738 return params;
739 }
740
743 map[0] = 106.15;
744 map[10] = 106.15;
745 map[20] = 106.15;
746 map[30] = 106.15;
747 map[40] = 106.15;
748 map[50] = 106.15;
749 map[60] = 103.73;
750 map[70] = 88.70;
751 map[80] = 77.47;
752 map[90] = 68.76;
753 map[100] = 61.82;
754 map[110] = 56.15;
755 map[120] = 51.43;
756 map[130] = 47.44;
757 map[140] = 44.03;
758 map[150] = 41.07;
759 map[160] = 38.49;
760 LinearApproxHelpers::scalePoints(map, 1 / 3.6, 1);
761 return map;
762 }
763
764
767 map[0] = 1.01;
768 map[10] = 1.09;
769 map[20] = 1.27;
770 map[30] = 1.55;
771 map[40] = 1.93;
772 map[50] = 2.41;
773 map[60] = 2.99;
774 map[70] = 3.67;
775 map[80] = 4.46;
776 map[90] = 5.34;
777 map[100] = 6.34;
778 map[110] = 7.44;
779 map[120] = 8.64;
780 map[130] = 9.96;
781 map[140] = 11.38;
782 map[150] = 12.91;
783 map[160] = 14.56;
784 LinearApproxHelpers::scalePoints(map, 1 / 3.6, 1);
785 return map;
786 }
787
789 TrainParams params;
790 params.weight = 105.5;
791 params.mf = 1.05;
792 params.length = 46.56;
793 params.decl = 1.1;
794 params.vmax = 160 / 3.6;
795 params.recovery = 0.3;
798 return params;
799 }
800
803 map[0] = 104.50;
804 map[10] = 104.50;
805 map[20] = 104.50;
806 map[30] = 104.50;
807 map[40] = 104.50;
808 map[50] = 104.50;
809 map[60] = 102.00;
810 map[70] = 87.43;
811 map[80] = 76.50;
812 map[90] = 68.00;
813 map[100] = 61.20;
814 map[110] = 55.64;
815 map[120] = 51.00;
816 map[130] = 47.08;
817 map[140] = 43.71;
818 map[150] = 40.80;
819 map[160] = 38.25;
820 LinearApproxHelpers::scalePoints(map, 1 / 3.6, 1);
821 return map;
822 }
823
824
827 map[0] = 1.01;
828 map[10] = 1.09;
829 map[20] = 1.27;
830 map[30] = 1.55;
831 map[40] = 1.93;
832 map[50] = 2.41;
833 map[60] = 2.99;
834 map[70] = 3.67;
835 map[80] = 4.45;
836 map[90] = 5.34;
837 map[100] = 6.34;
838 map[110] = 7.43;
839 map[120] = 8.64;
840 map[130] = 9.95;
841 map[140] = 11.38;
842 map[150] = 12.91;
843 map[160] = 14.56;
844 LinearApproxHelpers::scalePoints(map, 1 / 3.6, 1);
845 return map;
846 }
847
849 TrainParams params;
850 params.weight = 105.4;
851 params.mf = 1.05;
852 params.length = 46.56;
853 params.decl = 1.1;
854 params.vmax = 160 / 3.6;
855 params.recovery = 0.3;
858 return params;
859 }
860
862 TrainParams params;
863 params.weight = 100;
864 params.mf = 1.05;
865 params.length = 100;
866 params.decl = 1;
867 params.vmax = 200 / 3.6;
868 params.recovery = 0.3;
869 return params;
870 }
871// void initVehicleVariables(const MSVehicle *const pVehicle, MSCFModel_Rail::VehicleVariables *pVariables)const;
872
873};
std::map< double, double > LinearApproxMap
static void scalePoints(LinearApproxMap &map, double keyFactor, double valueFactor)
Scale both key and values.
TrainParams initICE3Params() const
TrainParams initNGT400_16Params() const
virtual ~MSCFModel_Rail()
TrainParams initREDosto7Params() const
LinearApproxHelpers::LinearApproxMap initICE3Resistance() const
virtual double minNextSpeedEmergency(double speed, const MSVehicle *const veh=0) const
Returns the minimum speed after emergency braking, given the current speed (depends on the numerical ...
TrainParams initCustomParams() const
TrainParams initICE1Params() const
double getCurveResistance(const MSVehicle *veh) const
TrainParams initMireoPlusB2TParams() const
LinearApproxHelpers::LinearApproxMap initRB425Resistance() const
double freeSpeed(const MSVehicle *const veh, double speed, double seen, double maxSpeed, const bool onInsertion, const CalcReason usage=CalcReason::CURRENT) const
Computes the vehicle's safe speed without a leader.
TrainParams initRB628Params() const
virtual MSCFModel * duplicate(const MSVehicleType *vtype) const
Duplicates the car-following model.
LinearApproxHelpers::LinearApproxMap initICE1Resistance() const
LinearApproxHelpers::LinearApproxMap initMireoPlusH2TResistance() const
LinearApproxHelpers::LinearApproxMap initFreightTraction() const
virtual int getModelID() const
Returns the model's ID; the XML-Tag number is used.
double getSpeedAfterMaxDecel(double v) const
Returns the velocity after maximum deceleration.
TrainParams myTrainParams
LinearApproxHelpers::LinearApproxMap initMireoPlusB2TTraction() const
LinearApproxHelpers::LinearApproxMap initNGT400Resistance() const
LinearApproxHelpers::LinearApproxMap initREDosto7Traction() const
LinearApproxHelpers::LinearApproxMap initNGT400Traction() const
virtual double minNextSpeed(double speed, const MSVehicle *const veh) const
Returns the minimum speed given the current speed (depends on the numerical update scheme and its ste...
LinearApproxHelpers::LinearApproxMap initMireoPlusB2TResistance() const
double getWeight(const MSVehicle *const veh) const
LinearApproxHelpers::LinearApproxMap initICE3Traction() const
double followSpeed(const MSVehicle *const veh, double speed, double gap2pred, double predSpeed, double predMaxDecel, const MSVehicle *const pred=0, const CalcReason usage=CalcReason::CURRENT) const
Computes the vehicle's follow speed (no dawdling)
double getRotWeight(const MSVehicle *const veh) const
LinearApproxHelpers::LinearApproxMap initRB425Traction() const
TrainParams initRB425Params() const
LinearApproxHelpers::LinearApproxMap initRB628Traction() const
LinearApproxHelpers::LinearApproxMap initNGT400_16Traction() const
TrainParams initFreightParams() const
LinearApproxHelpers::LinearApproxMap initREDosto7Resistance() const
virtual double maxNextSpeed(double speed, const MSVehicle *const veh) const
Returns the maximum speed given the current speed.
TrainParams initNGT400Params() const
LinearApproxHelpers::LinearApproxMap initFreightResistance() const
LinearApproxHelpers::LinearApproxMap initMireoPlusH2TTraction() const
LinearApproxHelpers::LinearApproxMap initICE1Traction() const
LinearApproxHelpers::LinearApproxMap initNGT400_16Resistance() const
TrainParams initMireoPlusH2TParams() const
LinearApproxHelpers::LinearApproxMap initRB628Resistance() const
bool startupDelayStopped() const
whether startupDelay should be applied after stopping
double finalizeSpeed(MSVehicle *const veh, double vPos) const
Applies interaction with stops and lane changing model influences. Called at most once per simulation...
double stopSpeed(const MSVehicle *const veh, const double speed, double gap, double decel, const CalcReason usage=CalcReason::CURRENT) const
Computes the vehicle's safe speed for approaching a non-moving obstacle (no dawdling)
The car-following model abstraction.
Definition MSCFModel.h:59
CalcReason
What the return value of stop/follow/free-Speed is used for.
Definition MSCFModel.h:95
@ CURRENT
the return value is used for calculating the next speed
Definition MSCFModel.h:97
Representation of a vehicle in the micro simulation.
Definition MSVehicle.h:77
The car-following model and parameter.
LinearApproxHelpers::LinearApproxMap traction
LinearApproxHelpers::LinearApproxMap resistance
double getTraction(double speed) const
double getResistance(double speed) const