SUMO - Simulation of Urban MObility
MSCFModel_Rail.h
Go to the documentation of this file.
1 /****************************************************************************/
2 // Eclipse SUMO, Simulation of Urban MObility; see https://eclipse.org/sumo
3 // Copyright (C) 2012-2017 German Aerospace Center (DLR) and others.
4 /****************************************************************************/
5 //
6 // This program and the accompanying materials
7 // are made available under the terms of the Eclipse Public License v2.0
8 // which accompanies this distribution, and is available at
9 // http://www.eclipse.org/legal/epl-v20.html
10 //
11 /****************************************************************************/
17 // <description missing>
18 /****************************************************************************/
19 #ifndef SUMO_MSCFMODEL_RAIL_H
20 #define SUMO_MSCFMODEL_RAIL_H
21 
22 
23 #include "MSCFModel.h"
24 
25 
26 
27 class MSCFModel_Rail : public MSCFModel {
28 
29 public:
30 
31  double followSpeed(const MSVehicle* const veh, double speed, double gap2pred, double predSpeed,
32  double predMaxDecel) const;
33 
34  virtual int getModelID() const;
35 
36  virtual MSCFModel* duplicate(const MSVehicleType* vtype) const;
37 
41  MSCFModel_Rail(const MSVehicleType* vtype, std::string trainType);
42 
43 
44  virtual ~MSCFModel_Rail();
45 
46  virtual double maxNextSpeed(double speed, const MSVehicle* const veh) const;
47 
48  virtual double minNextSpeed(double speed, const MSVehicle* const veh) const;
49 
50  double getSpeedAfterMaxDecel(double v) const;
51 
53 
54  double moveHelper(MSVehicle* const veh, double vPos) const;
55 
56  double freeSpeed(const MSVehicle* const veh, double speed, double seen, double maxSpeed,
57  const bool onInsertion) const;
58 
59 private:
60 
61 
62  typedef std::map<double, double> LookUpMap;
63 
64  struct TrainParams {
65  double weight;
66  double mf;
67  double length;
68  double decl;
69  double vmax;
70  double recovery;
71  double rotWeight;
72  LookUpMap traction;
73  LookUpMap resistance;
74  };
75 
76  double getInterpolatedValueFromLookUpMap(double speed, const LookUpMap* lookUpMap) const;
77 
78 
79 public:
80  double stopSpeed(const MSVehicle* const veh, const double speed, double gap) const;
81 
82 // class VehicleVariables : public MSCFModel::VehicleVariables {
83 //
84 // public:
85 //
86 // const std::string getTrainType() const { return myTrainType; };
87 //
88 // void setTrainType(std::string trainType) { myTrainType = trainType; }
89 //
90 // bool isNotYetInitialized() {
91 // return notYetInitialized;
92 // }
93 //
94 // void setInitialized() {
95 // notYetInitialized = false;
96 // }
97 //
98 // private:
99 // std::string myTrainType;
100 // bool notYetInitialized = true;
101 //
102 //
103 // };
104 
105 private:
106 
107 
109 
110  LookUpMap initNGT400Traction() const { // early version of NGT 400
111  LookUpMap map;
112  map[0] = 716.0;
113  map[10] = 700.0;
114  map[20] = 684.0;
115  map[30] = 669.0;
116  map[40] = 653.0;
117  map[50] = 637.0;
118  map[60] = 622.0;
119  map[70] = 606.0;
120  map[80] = 590.0;
121  map[90] = 574.0;
122  map[100] = 559.0;
123  map[110] = 543.0;
124  map[120] = 527.0;
125  map[130] = 507.0;
126  map[140] = 471.0;
127  map[150] = 439.0;
128  map[160] = 412.0;
129  map[170] = 388.0;
130  map[180] = 366.0;
131  map[190] = 347.0;
132  map[200] = 329.0;
133  map[210] = 314.0;
134  map[220] = 299.0;
135  map[230] = 286.0;
136  map[240] = 275.0;
137  map[250] = 264.0;
138  map[260] = 253.0;
139  map[270] = 244.0;
140  map[280] = 235.0;
141  map[290] = 227.0;
142  map[300] = 220.0;
143  map[310] = 213.0;
144  map[320] = 206.0;
145  map[330] = 200.0;
146  map[340] = 194.0;
147  map[350] = 188.0;
148  map[360] = 183.0;
149  map[370] = 178.0;
150  map[380] = 173.0;
151  map[390] = 169.0;
152  map[400] = 165.0;
153  map[410] = 160.6;
154  map[420] = 156.8;
155  map[430] = 153.2;
156  map[440] = 149.7;
157  map[450] = 146.4;
158  map[460] = 143.2;
159  map[470] = 140.1;
160  map[480] = 137.2;
161  return map;
162  }
163 
164  LookUpMap initNGT400Resistance() const { // early version of NGT 400
165  LookUpMap map;
166  map[0] = 1.9;
167  map[10] = 2.1;
168  map[20] = 2.4;
169  map[30] = 2.9;
170  map[40] = 3.5;
171  map[50] = 4.2;
172  map[60] = 5.0;
173  map[70] = 6.0;
174  map[80] = 7.0;
175  map[90] = 8.2;
176  map[100] = 9.6;
177  map[110] = 11.0;
178  map[120] = 12.6;
179  map[130] = 14.3;
180  map[140] = 16.1;
181  map[150] = 18.0;
182  map[160] = 20.1;
183  map[170] = 22.3;
184  map[180] = 24.6;
185  map[190] = 27.0;
186  map[200] = 29.5;
187  map[210] = 32.2;
188  map[220] = 35.0;
189  map[230] = 37.9;
190  map[240] = 40.9;
191  map[250] = 44.1;
192  map[260] = 47.4;
193  map[270] = 50.8;
194  map[280] = 54.3;
195  map[290] = 58.0;
196  map[300] = 61.7;
197  map[310] = 65.6;
198  map[320] = 69.7;
199  map[330] = 73.8;
200  map[340] = 78.1;
201  map[350] = 82.4;
202  map[360] = 86.9;
203  map[370] = 91.6;
204  map[380] = 96.3;
205  map[390] = 101.2;
206  map[400] = 106.2;
207  map[410] = 111.3;
208  map[420] = 116.6;
209  map[430] = 121.9;
210  map[440] = 127.4;
211  map[450] = 133.0;
212  map[460] = 138.7;
213  map[470] = 144.6;
214  map[480] = 150.6;
215  return map;
216  }
217 
219  TrainParams params;
220  params.weight = 384;
221  params.mf = 1.04;
222  params.length = 200;
223  params.decl = 0.9;
224  params.vmax = 500 / 3.6;
225  params.recovery = 0.6;
226  params.rotWeight = params.weight * params.mf;
227  params.traction = initNGT400Traction();
228  params.resistance = initNGT400Resistance();
229  return params;
230  }
231 
232  LookUpMap initNGT400_16Traction() const {
233  LookUpMap map;
234  map[0] = 274.5;
235  map[10] = 274.5;
236  map[20] = 274.5;
237  map[30] = 274.5;
238  map[40] = 274.5;
239  map[50] = 274.5;
240  map[60] = 274.5;
241  map[70] = 274.5;
242  map[80] = 274.5;
243  map[90] = 274.5;
244  map[100] = 274.5;
245  map[110] = 274.5;
246  map[120] = 274.5;
247  map[130] = 274.5;
248  map[140] = 274.5;
249  map[150] = 274.5;
250  map[160] = 274.5;
251  map[170] = 274.5;
252  map[180] = 274.5;
253  map[190] = 274.5;
254  map[200] = 274.5;
255  map[210] = 273;
256  map[220] = 262.3;
257  map[230] = 250;
258  map[240] = 239;
259  map[250] = 229;
260  map[260] = 222;
261  map[270] = 213;
262  map[280] = 205;
263  map[290] = 198;
264  map[300] = 191;
265  map[310] = 186;
266  map[320] = 180;
267  map[330] = 174;
268  map[340] = 169;
269  map[350] = 165;
270  map[360] = 160;
271  map[370] = 155.5;
272  map[380] = 151;
273  map[390] = 148;
274  map[400] = 144;
275  map[410] = 140;
276  map[420] = 136;
277  map[430] = 134;
278  map[440] = 131;
279  map[450] = 128;
280  map[460] = 125;
281  map[470] = 123;
282  return map;
283  }
284 
285  LookUpMap initNGT400_16Resistance() const {
286  LookUpMap map;
287  map[0] = 5.71;
288  map[10] = 6.01;
289  map[20] = 6.4;
290  map[30] = 7.0;
291  map[40] = 7.51;
292  map[50] = 8.34;
293  map[60] = 9.2;
294  map[70] = 10.4;
295  map[80] = 11.3;
296  map[90] = 12.58;
297  map[100] = 14.05;
298  map[110] = 15.5;
299  map[120] = 16.9;
300  map[130] = 18.75;
301  map[140] = 20.77;
302  map[150] = 22.9;
303  map[160] = 25.0;
304  map[170] = 26.9;
305  map[180] = 29.38;
306  map[190] = 32.0;
307  map[200] = 34.5;
308  map[210] = 37.0;
309  map[220] = 39.91;
310  map[230] = 43.11;
311  map[240] = 46.4;
312  map[250] = 49.3;
313  map[260] = 52.4;
314  map[270] = 56.09;
315  map[280] = 59.8;
316  map[290] = 63.7;
317  map[300] = 66.8;
318  map[310] = 71.0;
319  map[320] = 75.39;
320  map[330] = 79.9;
321  map[340] = 84.1;
322  map[350] = 87.9;
323  map[360] = 92.7;
324  map[370] = 97.6;
325  map[380] = 102.0;
326  map[390] = 107.0;
327  map[400] = 112.0;
328  map[410] = 117.5;
329  map[420] = 123.0;
330  map[430] = 128.3;
331  map[440] = 133.3;
332  map[450] = 139.2;
333  map[460] = 145.5;
334  map[470] = 150.0;
335  return map;
336  }
337 
339  TrainParams params;
340  params.weight = 384;
341  params.mf = 1.04;
342  params.length = 200;
343  params.decl = 0.9;
344  params.vmax = 430 / 3.6;
345  params.recovery = 0.6;
346  params.rotWeight = params.weight * params.mf;
347  params.traction = initNGT400_16Traction();
349  return params;
350  }
351 
352  LookUpMap initICE1Traction() const {
353  LookUpMap map;
354  map[0] = 400;
355  map[10] = 394;
356  map[20] = 388;
357  map[30] = 382;
358  map[40] = 377;
359  map[50] = 372;
360  map[60] = 369;
361  map[70] = 366;
362  map[80] = 363;
363  map[90] = 361;
364  map[100] = 349;
365  map[110] = 317;
366  map[120] = 290;
367  map[130] = 268;
368  map[140] = 249;
369  map[150] = 232;
370  map[160] = 217;
371  map[170] = 205;
372  map[180] = 193;
373  map[190] = 183;
374  map[200] = 174;
375  map[210] = 165;
376  map[220] = 158;
377  map[230] = 151;
378  map[240] = 145;
379  map[250] = 139;
380  return map;
381  }
382 
383  LookUpMap initICE1Resistance() const {
384  LookUpMap map;
385  map[0] = 10.7;
386  map[10] = 12.3;
387  map[20] = 14.2;
388  map[30] = 16.4;
389  map[40] = 18.7;
390  map[50] = 21.3;
391  map[60] = 24.2;
392  map[70] = 27.3;
393  map[80] = 30.6;
394  map[90] = 34.1;
395  map[100] = 37.9;
396  map[110] = 41.9;
397  map[120] = 46.2;
398  map[130] = 50.6;
399  map[140] = 55.4;
400  map[150] = 60.4;
401  map[160] = 65.6;
402  map[170] = 71.1;
403  map[180] = 76.7;
404  map[190] = 82.6;
405  map[200] = 88.8;
406  map[210] = 95.2;
407  map[220] = 101.8;
408  map[230] = 108.7;
409  map[240] = 115.8;
410  map[250] = 123.1;
411  return map;
412  }
413 
415  TrainParams params;
416  params.weight = 876;
417  params.mf = 1.1;
418  params.length = 358;
419  params.decl = 0.5;
420  params.vmax = 250 / 3.6;
421  params.recovery = 0.1;
422  params.rotWeight = params.weight * params.mf;
423  params.traction = initICE1Traction();
424  params.resistance = initICE1Resistance();
425  return params;
426  }
427 
429  TrainParams params;
430  params.weight = 420;
431  params.mf = 1.04;
432  params.length = 200;
433  params.decl = 0.5;
434  params.vmax = 300 / 3.6;
435  params.recovery = 0.6;
436  params.rotWeight = params.weight * params.mf;
437  params.traction = initICE3Traction();
438  params.resistance = initICE3Resistance();
439  return params;
440  }
441 
442  LookUpMap initICE3Traction() const {
443  LookUpMap map;
444  map[0] = 300;
445  map[10] = 298;
446  map[20] = 297;
447  map[30] = 295;
448  map[40] = 293;
449  map[50] = 292;
450  map[60] = 290;
451  map[70] = 288;
452  map[80] = 286.5;
453  map[90] = 285;
454  map[100] = 283;
455  map[110] = 262;
456  map[120] = 240;
457  map[130] = 221;
458  map[140] = 206;
459  map[150] = 192;
460  map[160] = 180;
461  map[170] = 169;
462  map[180] = 160;
463  map[190] = 152;
464  map[200] = 144;
465  map[210] = 137;
466  map[220] = 131;
467  map[230] = 125;
468  map[240] = 120;
469  map[250] = 115;
470  map[260] = 111;
471  map[270] = 107;
472  map[280] = 103;
473  map[290] = 99;
474  map[300] = 96;
475  return map;
476  }
477 
478  LookUpMap initICE3Resistance() const {
479  LookUpMap map;
480  map[0] = 7.4;
481  map[10] = 7.6;
482  map[20] = 8.0;
483  map[30] = 8.4;
484  map[40] = 9.1;
485  map[50] = 9.8;
486  map[60] = 10.7;
487  map[70] = 11.7;
488  map[80] = 12.8;
489  map[90] = 14.1;
490  map[100] = 15.5;
491  map[110] = 17.1;
492  map[120] = 18.8;
493  map[130] = 20.6;
494  map[140] = 22.6;
495  map[150] = 24.6;
496  map[160] = 26.9;
497  map[170] = 29.2;
498  map[180] = 31.7;
499  map[190] = 34.3;
500  map[200] = 37.1;
501  map[210] = 40.0;
502  map[220] = 43.1;
503  map[230] = 46.2;
504  map[240] = 49.6;
505  map[250] = 53.0;
506  map[260] = 56.6;
507  map[270] = 60.3;
508  map[280] = 64.1;
509  map[290] = 68.1;
510  map[300] = 71.8;
511  return map;
512  }
513 
515  TrainParams params;
516  params.weight = 425.5;
517  params.mf = 1.1;
518  params.length = 207;
519  params.decl = 0.5;
520  params.vmax = 160 / 3.6;
521  params.recovery = 0.1;
522  params.rotWeight = params.weight * params.mf;
523  params.traction = initREDosto7Traction();
525  return params;
526  }
527 
528  LookUpMap initREDosto7Traction() const {
529  LookUpMap map;
530  map[0] = 300;
531  map[10] = 300;
532  map[20] = 300;
533  map[30] = 300;
534  map[40] = 300;
535  map[50] = 300;
536  map[60] = 300;
537  map[70] = 289;
538  map[80] = 253;
539  map[90] = 224;
540  map[100] = 202;
541  map[110] = 183;
542  map[120] = 168;
543  map[130] = 155;
544  map[140] = 144;
545  map[150] = 134;
546  map[160] = 125;
547  return map;
548  }
549 
550  LookUpMap initREDosto7Resistance() const {
551  LookUpMap map;
552  map[0] = 8.5;
553  map[10] = 8.9;
554  map[20] = 9.5;
555  map[30] = 10.4;
556  map[40] = 11.4;
557  map[50] = 12.7;
558  map[60] = 14.1;
559  map[70] = 15.8;
560  map[80] = 17.7;
561  map[90] = 19.8;
562  map[100] = 22.6;
563  map[110] = 24.6;
564  map[120] = 27.3;
565  map[130] = 30.2;
566  map[140] = 33.3;
567  map[150] = 36.6;
568  map[160] = 40.2;
569  return map;
570  }
571 
573  TrainParams params;
574  params.weight = 72.2;
575  params.mf = 1.04;
576  params.length = 46;
577  params.decl = 0.5;
578  params.vmax = 120 / 3.6;
579  params.recovery = 0;
580  params.rotWeight = params.weight * params.mf;
581  params.traction = initRB628Traction();
582  params.resistance = initRB628Resistance();
583  return params;
584  }
585 
586  LookUpMap initRB628Traction() const {
587  LookUpMap map;
588  map[0] = 60;
589  map[10] = 53.8;
590  map[20] = 47.6;
591  map[30] = 36.9;
592  map[40] = 28.7;
593  map[50] = 23.5;
594  map[60] = 20.0;
595  map[70] = 17.5;
596  map[80] = 15.2;
597  map[90] = 13.9;
598  map[100] = 12.8;
599  map[110] = 11.7;
600  map[120] = 10.8;
601  return map;
602  }
603 
604  LookUpMap initRB628Resistance() const {
605  LookUpMap map;
606  map[0] = 1.29;
607  map[10] = 1.46;
608  map[20] = 1.73;
609  map[30] = 2.08;
610  map[40] = 2.52;
611  map[50] = 3.05;
612  map[60] = 3.66;
613  map[70] = 4.36;
614  map[80] = 5.16;
615  map[90] = 6.03;
616  map[100] = 7.00;
617  map[110] = 8.06;
618  map[120] = 9.2;
619  return map;
620  }
621 
623  TrainParams params;
624  params.weight = 1440;
625  params.mf = 1.06;
626  params.length = 512;
627  params.decl = 0.3;
628  params.vmax = 120 / 3.6;
629  params.recovery = 0.05;
630  params.rotWeight = params.weight * params.mf;
631  params.traction = initFreightTraction();
633  return params;
634  }
635 
636  LookUpMap initFreightTraction() const {
637  LookUpMap map;
638  map[0] = 300;
639  map[10] = 296;
640  map[20] = 293;
641  map[30] = 289;
642  map[40] = 286;
643  map[50] = 282;
644  map[60] = 279;
645  map[70] = 275;
646  map[80] = 272;
647  map[90] = 255;
648  map[100] = 230;
649  map[110] = 209;
650  map[120] = 190;//guessed value
651  return map;
652  }
653 
654  LookUpMap initFreightResistance() const {
655  LookUpMap map;
656  map[0] = 1.9;
657  map[10] = 4.3;
658  map[20] = 8.5;
659  map[30] = 14.3;
660  map[40] = 21.7;
661  map[50] = 30.8;
662  map[60] = 41.5;
663  map[70] = 53.8;
664  map[80] = 67.8;
665  map[90] = 83.5;
666  map[100] = 110.7;
667  map[110] = 119.6;
668  map[120] = 140.2;
669  return map;
670  }
671 
672  LookUpMap initRB425Traction() const {
673  LookUpMap map;
674  map[0] = 150;
675  map[10] = 150;
676  map[20] = 150;
677  map[30] = 150;
678  map[40] = 150;
679  map[50] = 150;
680  map[60] = 140;
681  map[70] = 120;
682  map[80] = 105;
683  map[90] = 93;
684  map[100] = 84;
685  map[110] = 75;
686  map[120] = 70;
687  map[130] = 56;
688  map[140] = 52;
689  map[150] = 46;
690  map[160] = 40;
691  return map;
692  }
693 
694  LookUpMap initRB425Resistance() const {
695  LookUpMap map;
696  map[0] = 2.6;
697  map[10] = 2.9;
698  map[20] = 3.3;
699  map[30] = 3.7;
700  map[40] = 4.3;
701  map[50] = 4.9;
702  map[60] = 5.7;
703  map[70] = 6.6;
704  map[80] = 7.5;
705  map[90] = 8.6;
706  map[100] = 9.7;
707  map[110] = 11.0;
708  map[120] = 12.3;
709  map[130] = 13.8;
710  map[140] = 15.3;
711  map[150] = 16.9;
712  map[160] = 18.7;
713  return map;
714  }
715 
717  TrainParams params;
718  params.weight = 138;
719  params.mf = 1.04;
720  params.length = 67.5;
721  params.decl = 1.0;
722  params.vmax = 160 / 3.6;
723  params.recovery = 0.6;
724  params.rotWeight = params.weight * params.mf;
725  params.traction = initRB425Traction();
726  params.resistance = initRB425Resistance();
727  return params;
728  }
729 
730 // void initVehicleVariables(const MSVehicle *const pVehicle, MSCFModel_Rail::VehicleVariables *pVariables)const;
731 
732 };
733 
734 
735 #endif //SUMO_MSCFMODEL_RAIL_H
LookUpMap initNGT400Resistance() const
LookUpMap initICE3Resistance() const
Representation of a vehicle in the micro simulation.
Definition: MSVehicle.h:83
TrainParams initRB425Params() const
TrainParams initICE1Params() const
double stopSpeed(const MSVehicle *const veh, const double speed, double gap) const
Computes the vehicle&#39;s safe speed for approaching a non-moving obstacle (no dawdling) ...
MSCFModel::VehicleVariables * createVehicleVariables() const
Returns model specific values which are stored inside a vehicle and must be used with casting...
The car-following model abstraction.
Definition: MSCFModel.h:59
virtual MSCFModel * duplicate(const MSVehicleType *vtype) const
Duplicates the car-following model.
virtual double maxNextSpeed(double speed, const MSVehicle *const veh) const
Returns the maximum speed given the current speed.
LookUpMap initNGT400_16Traction() const
LookUpMap initNGT400_16Resistance() const
std::map< double, double > LookUpMap
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...
LookUpMap initREDosto7Resistance() const
TrainParams initICE3Params() const
LookUpMap initRB628Traction() const
LookUpMap initICE3Traction() const
TrainParams initNGT400_16Params() const
LookUpMap initREDosto7Traction() const
double getSpeedAfterMaxDecel(double v) const
Returns the velocity after maximum deceleration.
The car-following model and parameter.
Definition: MSVehicleType.h:72
double moveHelper(MSVehicle *const veh, double vPos) const
Applies interaction with stops and lane changing model influences.
TrainParams initREDosto7Params() const
TrainParams initNGT400Params() const
double freeSpeed(const MSVehicle *const veh, double speed, double seen, double maxSpeed, const bool onInsertion) const
Computes the vehicle&#39;s safe speed without a leader.
double followSpeed(const MSVehicle *const veh, double speed, double gap2pred, double predSpeed, double predMaxDecel) const
Computes the vehicle&#39;s follow speed (no dawdling)
TrainParams initRB628Params() const
LookUpMap initICE1Traction() const
LookUpMap initRB628Resistance() const
virtual ~MSCFModel_Rail()
TrainParams myTrainParams
LookUpMap initFreightResistance() const
LookUpMap initFreightTraction() const
TrainParams initFreightParams() const
MSCFModel_Rail(const MSVehicleType *vtype, std::string trainType)
Constructor.
virtual int getModelID() const
Returns the model&#39;s ID; the XML-Tag number is used.
LookUpMap initICE1Resistance() const
double getInterpolatedValueFromLookUpMap(double speed, const LookUpMap *lookUpMap) const
LookUpMap initRB425Traction() const
LookUpMap initNGT400Traction() const
LookUpMap initRB425Resistance() const