ChaProEV 1.2.1__tar.gz → 1.2.2__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (97) hide show
  1. {chaproev-1.2.1/src/ChaProEV.egg-info → chaproev-1.2.2}/PKG-INFO +1 -1
  2. chaproev-1.2.2/docs/scenario.md +94 -0
  3. {chaproev-1.2.1 → chaproev-1.2.2}/pyproject.toml +1 -1
  4. {chaproev-1.2.1 → chaproev-1.2.2}/scenarios/Mopo/XX_bus.toml +37 -42
  5. {chaproev-1.2.1 → chaproev-1.2.2}/scenarios/Mopo/XX_car.toml +7 -4
  6. {chaproev-1.2.1 → chaproev-1.2.2}/scenarios/Mopo/XX_truck.toml +17 -11
  7. {chaproev-1.2.1 → chaproev-1.2.2}/scenarios/Mopo/XX_van.toml +12 -12
  8. {chaproev-1.2.1 → chaproev-1.2.2}/src/ChaProEV/define.py +1 -4
  9. {chaproev-1.2.1 → chaproev-1.2.2}/src/ChaProEV/run_time.py +34 -34
  10. {chaproev-1.2.1 → chaproev-1.2.2/src/ChaProEV.egg-info}/PKG-INFO +1 -1
  11. chaproev-1.2.1/docs/scenario.md +0 -64
  12. {chaproev-1.2.1 → chaproev-1.2.2}/.flake8 +0 -0
  13. {chaproev-1.2.1 → chaproev-1.2.2}/.gitignore +0 -0
  14. {chaproev-1.2.1 → chaproev-1.2.2}/.vscode/ltex.dictionary.en-US.txt +0 -0
  15. {chaproev-1.2.1 → chaproev-1.2.2}/.vscode/settings.json +0 -0
  16. {chaproev-1.2.1 → chaproev-1.2.2}/ChaProEV.pptx +0 -0
  17. {chaproev-1.2.1 → chaproev-1.2.2}/ChaProEV.toml +0 -0
  18. {chaproev-1.2.1 → chaproev-1.2.2}/Gemfile +0 -0
  19. {chaproev-1.2.1 → chaproev-1.2.2}/LICENCE +0 -0
  20. {chaproev-1.2.1 → chaproev-1.2.2}/MOPO_logo_chaproev on wht.svg +0 -0
  21. {chaproev-1.2.1 → chaproev-1.2.2}/MOPO_logo_chaproev.png +0 -0
  22. {chaproev-1.2.1 → chaproev-1.2.2}/MOPO_logo_chaproev.svg +0 -0
  23. {chaproev-1.2.1 → chaproev-1.2.2}/MOPO_logo_main.svg +0 -0
  24. {chaproev-1.2.1 → chaproev-1.2.2}/MOPO_logo_main_onwhite.svg +0 -0
  25. {chaproev-1.2.1 → chaproev-1.2.2}/README.md +0 -0
  26. {chaproev-1.2.1 → chaproev-1.2.2}/comparisons/comparison_template.toml +0 -0
  27. {chaproev-1.2.1 → chaproev-1.2.2}/docs/ChaProEV_workflow.png +0 -0
  28. {chaproev-1.2.1 → chaproev-1.2.2}/docs/Legs.png +0 -0
  29. {chaproev-1.2.1 → chaproev-1.2.2}/docs/Locations.png +0 -0
  30. {chaproev-1.2.1 → chaproev-1.2.2}/docs/Makefile +0 -0
  31. {chaproev-1.2.1 → chaproev-1.2.2}/docs/README.md +0 -0
  32. {chaproev-1.2.1 → chaproev-1.2.2}/docs/Trips.png +0 -0
  33. {chaproev-1.2.1 → chaproev-1.2.2}/docs/Vehicle_Temperature_correction_factor.svg +0 -0
  34. {chaproev-1.2.1 → chaproev-1.2.2}/docs/_config.yml +0 -0
  35. {chaproev-1.2.1 → chaproev-1.2.2}/docs/build/doctrees/environment.pickle +0 -0
  36. {chaproev-1.2.1 → chaproev-1.2.2}/docs/build/doctrees/index.doctree +0 -0
  37. {chaproev-1.2.1 → chaproev-1.2.2}/docs/build/html/.buildinfo +0 -0
  38. {chaproev-1.2.1 → chaproev-1.2.2}/docs/build/html/_sources/index.rst.txt +0 -0
  39. {chaproev-1.2.1 → chaproev-1.2.2}/docs/build/html/_static/alabaster.css +0 -0
  40. {chaproev-1.2.1 → chaproev-1.2.2}/docs/build/html/_static/basic.css +0 -0
  41. {chaproev-1.2.1 → chaproev-1.2.2}/docs/build/html/_static/custom.css +0 -0
  42. {chaproev-1.2.1 → chaproev-1.2.2}/docs/build/html/_static/doctools.js +0 -0
  43. {chaproev-1.2.1 → chaproev-1.2.2}/docs/build/html/_static/documentation_options.js +0 -0
  44. {chaproev-1.2.1 → chaproev-1.2.2}/docs/build/html/_static/file.png +0 -0
  45. {chaproev-1.2.1 → chaproev-1.2.2}/docs/build/html/_static/language_data.js +0 -0
  46. {chaproev-1.2.1 → chaproev-1.2.2}/docs/build/html/_static/minus.png +0 -0
  47. {chaproev-1.2.1 → chaproev-1.2.2}/docs/build/html/_static/plus.png +0 -0
  48. {chaproev-1.2.1 → chaproev-1.2.2}/docs/build/html/_static/pygments.css +0 -0
  49. {chaproev-1.2.1 → chaproev-1.2.2}/docs/build/html/_static/searchtools.js +0 -0
  50. {chaproev-1.2.1 → chaproev-1.2.2}/docs/build/html/_static/sphinx_highlight.js +0 -0
  51. {chaproev-1.2.1 → chaproev-1.2.2}/docs/build/html/genindex.html +0 -0
  52. {chaproev-1.2.1 → chaproev-1.2.2}/docs/build/html/index.html +0 -0
  53. {chaproev-1.2.1 → chaproev-1.2.2}/docs/build/html/objects.inv +0 -0
  54. {chaproev-1.2.1 → chaproev-1.2.2}/docs/build/html/search.html +0 -0
  55. {chaproev-1.2.1 → chaproev-1.2.2}/docs/build/html/searchindex.js +0 -0
  56. {chaproev-1.2.1 → chaproev-1.2.2}/docs/charging.md +0 -0
  57. {chaproev-1.2.1 → chaproev-1.2.2}/docs/consumption.md +0 -0
  58. {chaproev-1.2.1 → chaproev-1.2.2}/docs/define.md +0 -0
  59. {chaproev-1.2.1 → chaproev-1.2.2}/docs/index.md +0 -0
  60. {chaproev-1.2.1 → chaproev-1.2.2}/docs/make.bat +0 -0
  61. {chaproev-1.2.1 → chaproev-1.2.2}/docs/mobility.md +0 -0
  62. {chaproev-1.2.1 → chaproev-1.2.2}/docs/running_model,md +0 -0
  63. {chaproev-1.2.1 → chaproev-1.2.2}/docs/source/index.rst +0 -0
  64. {chaproev-1.2.1 → chaproev-1.2.2}/docs/using.md +0 -0
  65. {chaproev-1.2.1 → chaproev-1.2.2}/docs/weather.md +0 -0
  66. {chaproev-1.2.1 → chaproev-1.2.2}/eu-emblem-low-res.jpg +0 -0
  67. {chaproev-1.2.1 → chaproev-1.2.2}/mkdocs.yml +0 -0
  68. {chaproev-1.2.1 → chaproev-1.2.2}/requirements.txt +0 -0
  69. {chaproev-1.2.1 → chaproev-1.2.2}/scenarios/local_impact_BEVs/baseline.toml +0 -0
  70. {chaproev-1.2.1 → chaproev-1.2.2}/setup.cfg +0 -0
  71. {chaproev-1.2.1 → chaproev-1.2.2}/src/ChaProEV/ChaProEV.py +0 -0
  72. {chaproev-1.2.1 → chaproev-1.2.2}/src/ChaProEV/__init__.py +0 -0
  73. {chaproev-1.2.1 → chaproev-1.2.2}/src/ChaProEV/charging.py +0 -0
  74. {chaproev-1.2.1 → chaproev-1.2.2}/src/ChaProEV/consumption.py +0 -0
  75. {chaproev-1.2.1 → chaproev-1.2.2}/src/ChaProEV/make_variants.py +0 -0
  76. {chaproev-1.2.1 → chaproev-1.2.2}/src/ChaProEV/mobility.py +0 -0
  77. {chaproev-1.2.1 → chaproev-1.2.2}/src/ChaProEV/profiles.py +0 -0
  78. {chaproev-1.2.1 → chaproev-1.2.2}/src/ChaProEV/py.typed +0 -0
  79. {chaproev-1.2.1 → chaproev-1.2.2}/src/ChaProEV/scenarios_module.py +0 -0
  80. {chaproev-1.2.1 → chaproev-1.2.2}/src/ChaProEV/weather.py +0 -0
  81. {chaproev-1.2.1 → chaproev-1.2.2}/src/ChaProEV/writing.py +0 -0
  82. {chaproev-1.2.1 → chaproev-1.2.2}/src/ChaProEV.egg-info/PKG-INFO-PC-28624 +0 -0
  83. {chaproev-1.2.1 → chaproev-1.2.2}/src/ChaProEV.egg-info/PKG-INFO-PC-28624-2 +0 -0
  84. {chaproev-1.2.1 → chaproev-1.2.2}/src/ChaProEV.egg-info/SOURCES-PC-28624-2.txt +0 -0
  85. {chaproev-1.2.1 → chaproev-1.2.2}/src/ChaProEV.egg-info/SOURCES-PC-28624.txt +0 -0
  86. {chaproev-1.2.1 → chaproev-1.2.2}/src/ChaProEV.egg-info/SOURCES.txt +0 -0
  87. {chaproev-1.2.1 → chaproev-1.2.2}/src/ChaProEV.egg-info/dependency_links.txt +0 -0
  88. {chaproev-1.2.1 → chaproev-1.2.2}/src/ChaProEV.egg-info/requires-PC-28624-2.txt +0 -0
  89. {chaproev-1.2.1 → chaproev-1.2.2}/src/ChaProEV.egg-info/requires-PC-28624.txt +0 -0
  90. {chaproev-1.2.1 → chaproev-1.2.2}/src/ChaProEV.egg-info/top_level.txt +0 -0
  91. {chaproev-1.2.1 → chaproev-1.2.2}/tests/test_battery_space.py +0 -0
  92. {chaproev-1.2.1 → chaproev-1.2.2}/tests/test_charge_and_consumption.py +0 -0
  93. {chaproev-1.2.1 → chaproev-1.2.2}/tests/test_empty_values.py +0 -0
  94. {chaproev-1.2.1 → chaproev-1.2.2}/tests/test_same_output.py +0 -0
  95. {chaproev-1.2.1 → chaproev-1.2.2}/todo.txt +0 -0
  96. {chaproev-1.2.1 → chaproev-1.2.2}/variants/Mopo/XX_car.csv +0 -0
  97. {chaproev-1.2.1 → chaproev-1.2.2}/variants/Mopo.toml +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: ChaProEV
3
- Version: 1.2.1
3
+ Version: 1.2.2
4
4
  Summary: ChaProEV: Charging Profiles of Electric Vehicles
5
5
  Author-email: Omar Usmani <Omar.Usmani@TNO.nl>
6
6
  Project-URL: Homepage, https://github.com/TNO/ChaProEV
@@ -0,0 +1,94 @@
1
+ # Scenario file description
2
+
3
+ This page describes the elements of the scenario file
4
+
5
+ ## run
6
+ Run parameters give the elements to produce the time tags of the run range.
7
+ ### use_day_types_in_charge_computing
8
+ If set to true, the charging computations will be done per day type rather
9
+ than for all days of the run, which fastens the computations.
10
+ ### start
11
+ This part gives the year, month, day, hour, and minute of the start of the
12
+ computations. It is best to set this to a day hour start for consistency
13
+ and then cut off the start for display (see below). For example,
14
+ start on 31/12/2019 at 05:00 if your day start hour is 05:00 and if you want
15
+ to show results starting on 1/1/2020 at 00:00.
16
+ ### end
17
+ This part gives the year, month, day, hour, and minute of the end of the
18
+ computations. Note that the end time tag is not included in the run,
19
+ so put 1/1/2021 at 00:00 if you want to compute for 2020.
20
+ ### display_start
21
+ This is the first time tag you want to show in your end results.
22
+ ### display_end
23
+ This is the first time tag that does not appear in your displayed results.
24
+ ### frequency
25
+ The time frequency of the run (size and type).
26
+ For the type, use 'H' for hours, 'min' for minutes,
27
+ 'S' for seconds, 'D' for days. For more info and other types, see
28
+ [here](https://pandas.pydata.org/docs/user_guide/timeseries.html#timeseries-offset-aliases).
29
+ The current model uses hourly (so 1 and 'h'). Changing that might require
30
+ some adjustments in the code.
31
+ ### display frequency
32
+ The frequency of the displayed values can be different than the frequency of the compuatations.
33
+ In the current version, this needs to be the same or less frequent than the computation frequencey above.
34
+ ### extra_downloads
35
+ This is to decide if you want to dowload some files (note that this concerns the
36
+ currently inactive weather module).
37
+ ## locations
38
+
39
+ ## legs
40
+
41
+ ### mix
42
+
43
+ ## vehicle
44
+ These parameters define the scenario's vehicle. If you want profiles
45
+ for several vehicles, run separate scenarios.
46
+ ### vehicle name
47
+ This is the name of the vehicle, which will be checked to see if trips
48
+ and locations are actually declared.
49
+
50
+ ## trips
51
+
52
+ ## mobility_module
53
+ ### day_start_hour
54
+ This parameter defines the start of the day for the scenario. It is chosen
55
+ so that there are no movements during that hour number. It represents the
56
+ shift from midnight, so a day start hour of 5 means that the day starts
57
+ at hour 5 (i.e. 05.00). The idea is to choose an hour that is logical
58
+ for the users/matches their patterns. This is connected to the
59
+ [day types](day_types), as a given day will correspond to a day type.
60
+ For example, the hours between 00:00 and 05:00 on a Saturday belong to
61
+ the Thursday before and are as such on a week day
62
+ (as opposed to a weekend day).
63
+
64
+ ### day_types
65
+
66
+ ### trips_per_day_type
67
+ For vehicles other than cars, we assume that there is one trip per day type.
68
+ This is where we match the trips to their day type
69
+
70
+ ## transport_factors
71
+
72
+ ### road_types
73
+
74
+ ### weights
75
+
76
+ ## weather
77
+
78
+ ## charging
79
+
80
+ ## plots
81
+
82
+ ## files
83
+
84
+ ## maps
85
+
86
+ ## colors
87
+
88
+ ## color_bars
89
+
90
+ ## unit_conversion
91
+
92
+ ## time
93
+
94
+ ## numbers
@@ -4,7 +4,7 @@ build-backend = 'setuptools.build_meta'
4
4
 
5
5
  [project]
6
6
  name = 'ChaProEV'
7
- version = '1.2.1'
7
+ version = '1.2.2'
8
8
  authors = [
9
9
  { name='Omar Usmani', email='Omar.Usmani@TNO.nl' },
10
10
  ]
@@ -189,8 +189,9 @@ mix = [0.8, 0.2]
189
189
 
190
190
  [legs.bus_from_route_start_to_route_end]
191
191
  vehicle = 'bus'
192
- distance = 20 # km
193
- duration = 0.5 # hours
192
+ distance = 13 # km
193
+ duration = 0.66 # hours
194
+ # Bus 28 in The Hague has a 40 minute route that is about 10-15 km (value chosen to be close to 90_000 kilometers per year)
194
195
  # This factor adds a correction to the vehicle consumption that depends
195
196
  # on the hour in day (the first is for 00:00 to 00:59,
196
197
  # the last for 23:00 to 23:59). Note that these are actual hours,
@@ -217,8 +218,9 @@ mix = [0.8, 0.2]
217
218
 
218
219
  [legs.bus_from_route_end_to_route_start]
219
220
  vehicle = 'bus'
220
- distance = 20 # km
221
- duration = 0.5 # hours
221
+ distance = 13 # km
222
+ duration = 0.66 # hours
223
+ # Bus 28 in The Hague has a 40 minute route that is about 10-15 km (value chosen to be close to 90_000 kilometers per year)
222
224
  # This factor adds a correction to the vehicle consumption that depends
223
225
  # on the hour in day (the first is for 00:00 to 00:59,
224
226
  # the last for 23:00 to 23:59). Note that these are actual hours,
@@ -244,20 +246,27 @@ mix = [0.8, 0.2]
244
246
 
245
247
 
246
248
 
249
+
247
250
  [vehicle]
248
251
  name = 'bus'
249
252
  base_location = 'bus_depot' # not relevant for cars
250
- yearly_kilometrage = 42_000
253
+ yearly_kilometrage = 90_000
254
+ # https://www.ebusco.com/wp-content/uploads/Website_Brochure_NL_V1-4.pdf
251
255
  # Not relevant for cars, as it is built bottom-up
252
256
  kilometers_column_for_consumption = 'Arrivals'
253
257
  use_weighted = false
254
- battery_capacity = 80 # kWh
258
+ battery_capacity = 500 # kWh
259
+ # https://www.ebusco.com/wp-content/uploads/Website_Brochure_NL_V1-4.pdf
255
260
  solar_panel_size_kWp = 0 # kWp
256
261
  [vehicle.base_consumption_per_km]
257
- electricity_kWh = 0.2
258
- gasoline_litres = 0.075
259
- diesel_litres = 0.05
260
- hydrogen_kg = 0.006340
262
+ electricity_kWh = 0.76
263
+ # https://www.ebusco.com/wp-content/uploads/Website_Brochure_NL_V1-4.pdf
264
+ # Others scaled accroding to cars
265
+ gasoline_litres = 0.3399
266
+ diesel_litres = 0.2917
267
+ hydrogen_kg = 0.0398
268
+ CNG_kg = 0.2415
269
+ LNG_kg = 0.2415
261
270
 
262
271
  [trips]
263
272
 
@@ -268,18 +277,14 @@ legs = [
268
277
  'bus_from_route_start_to_route_end',
269
278
  'bus_from_route_end_to_route_start',
270
279
  'bus_from_route_start_to_depot',
271
- 'bus_from_depot_to_route_start',
272
- 'bus_from_route_start_to_route_end',
273
- 'bus_from_route_end_to_route_start',
274
- 'bus_from_route_start_to_depot',
275
280
  ]
276
- time_between_legs = [0, 0.25, 0, 4, 0, 0.25, 0]
281
+ time_between_legs = [0, 0.1, 0]
277
282
 
278
283
  # This is the time spent at each interim location (same units as used
279
284
  # general
280
285
  percentage_station_users = 0
281
286
  start_probabilities = [
282
- 0, 0, 0.25, 0.5, 0.25, 0, 0, 0,
287
+ 0, 0.5, 0.5, 0, 0, 0, 0, 0,
283
288
  0, 0, 0, 0, 0, 0, 0, 0,
284
289
  0, 0, 0, 0, 0, 0, 0, 0
285
290
  ] # Start at day start hour
@@ -287,8 +292,8 @@ repeated_sequence = [
287
292
  'bus_from_route_start_to_route_end',
288
293
  'bus_from_route_end_to_route_start'
289
294
  ]
290
- repetition_amounts = [3, 3]
291
- time_between_repetitions = [0.1, 0.22] # hours
295
+ repetition_amounts = [9]
296
+ time_between_repetitions = [0.1] # hours
292
297
 
293
298
  [trips.bus_weekend_in_workweek]
294
299
  vehicle = 'bus'
@@ -297,17 +302,14 @@ legs = [
297
302
  'bus_from_route_start_to_route_end',
298
303
  'bus_from_route_end_to_route_start',
299
304
  'bus_from_route_start_to_depot',
300
- 'bus_from_depot_to_route_start',
301
- 'bus_from_route_start_to_route_end',
302
- 'bus_from_route_end_to_route_start',
303
- 'bus_from_route_start_to_depot',
304
305
  ]
305
- time_between_legs = [0, 0.25, 0, 4, 0, 0.25, 0]
306
+ time_between_legs = [0, 0.1, 0]
307
+
306
308
  # This is the time spent at each interim location (same units as used
307
309
  # general
308
310
  percentage_station_users = 0
309
311
  start_probabilities = [
310
- 0, 0, 0.25, 0.5, 0.25, 0, 0, 0,
312
+ 0, 0.25, 0.5, 0.25, 0, 0, 0, 0,
311
313
  0, 0, 0, 0, 0, 0, 0, 0,
312
314
  0, 0, 0, 0, 0, 0, 0, 0
313
315
  ] # Start at day start hour
@@ -315,8 +317,8 @@ repeated_sequence = [
315
317
  'bus_from_route_start_to_route_end',
316
318
  'bus_from_route_end_to_route_start'
317
319
  ]
318
- repetition_amounts = [2, 2]
319
- time_between_repetitions = [0.1, 0.22] # hours
320
+ repetition_amounts = [7]
321
+ time_between_repetitions = [0.1] # hours
320
322
 
321
323
 
322
324
  [trips.bus_weekday_in_holiday_week]
@@ -326,18 +328,14 @@ legs = [
326
328
  'bus_from_route_start_to_route_end',
327
329
  'bus_from_route_end_to_route_start',
328
330
  'bus_from_route_start_to_depot',
329
- 'bus_from_depot_to_route_start',
330
- 'bus_from_route_start_to_route_end',
331
- 'bus_from_route_end_to_route_start',
332
- 'bus_from_route_start_to_depot',
333
331
  ]
334
- time_between_legs = [0, 0.25, 0, 4, 0, 0.25, 0]
332
+ time_between_legs = [0, 0.1, 0]
335
333
 
336
334
  # This is the time spent at each interim location (same units as used
337
335
  # general
338
336
  percentage_station_users = 0
339
337
  start_probabilities = [
340
- 0, 0, 0.25, 0.5, 0.25, 0, 0, 0,
338
+ 0, 0.25, 0.75, 0, 0, 0, 0, 0,
341
339
  0, 0, 0, 0, 0, 0, 0, 0,
342
340
  0, 0, 0, 0, 0, 0, 0, 0
343
341
  ] # Start at day start hour
@@ -345,8 +343,8 @@ repeated_sequence = [
345
343
  'bus_from_route_start_to_route_end',
346
344
  'bus_from_route_end_to_route_start'
347
345
  ]
348
- repetition_amounts = [2, 2]
349
- time_between_repetitions = [0.2, 0.42] # hours
346
+ repetition_amounts = [8]
347
+ time_between_repetitions = [0.1] # hours
350
348
 
351
349
  [trips.bus_weekend_in_holiday_week]
352
350
  vehicle = 'bus'
@@ -355,17 +353,14 @@ legs = [
355
353
  'bus_from_route_start_to_route_end',
356
354
  'bus_from_route_end_to_route_start',
357
355
  'bus_from_route_start_to_depot',
358
- 'bus_from_depot_to_route_start',
359
- 'bus_from_route_start_to_route_end',
360
- 'bus_from_route_end_to_route_start',
361
- 'bus_from_route_start_to_depot',
362
356
  ]
363
- time_between_legs = [0, 0.25, 0, 4, 0, 0.25, 0]
357
+ time_between_legs = [0, 0.1, 0]
358
+
364
359
  # This is the time spent at each interim location (same units as used
365
360
  # general
366
361
  percentage_station_users = 0
367
362
  start_probabilities = [
368
- 0, 0, 0.25, 0.5, 0.25, 0, 0, 0,
363
+ 0, 0.25, 0.5, 0.25, 0, 0, 0, 0,
369
364
  0, 0, 0, 0, 0, 0, 0, 0,
370
365
  0, 0, 0, 0, 0, 0, 0, 0
371
366
  ] # Start at day start hour
@@ -373,8 +368,8 @@ repeated_sequence = [
373
368
  'bus_from_route_start_to_route_end',
374
369
  'bus_from_route_end_to_route_start'
375
370
  ]
376
- repetition_amounts = [1, 1]
377
- time_between_repetitions = [0.1, 0.22] # hours
371
+ repetition_amounts = [7]
372
+ time_between_repetitions = [0.1] # hours
378
373
 
379
374
 
380
375
  # These parameters are used for the ChaProEV mobility module
@@ -406,10 +406,13 @@ use_weighted = false
406
406
  battery_capacity = 80 # kWh
407
407
  solar_panel_size_kWp = 0 # kWp
408
408
  [vehicle.base_consumption_per_km]
409
- electricity_kWh = 0.2
410
- gasoline_litres = 0.075
411
- diesel_litres = 0.05
412
- hydrogen_kg = 0.006340
409
+ # https://www.autoweek.nl/verbruiksmonitor/
410
+ electricity_kWh = 0.1451
411
+ gasoline_litres = 0.0649
412
+ diesel_litres = 0.0557
413
+ hydrogen_kg = 0.0076
414
+ LPG_litres = 0.092
415
+ CNG_kg = 0.0461
413
416
 
414
417
  [trips]
415
418
  [trips.commute_to_work]
@@ -113,8 +113,8 @@ time_modulation_factors = [
113
113
  # etc.
114
114
  [legs.truck_to_customer]
115
115
  vehicle = 'truck'
116
- distance = 150 # km
117
- duration = 2.2 # hours
116
+ distance = 42 # km # To get to about 91_000 km per year
117
+ duration = 1 # hours
118
118
  # This factor adds a correction to the vehicle consumption that depends
119
119
  # on the hour in day (the first is for 00:00 to 00:59,
120
120
  # the last for 23:00 to 23:59). Note that these are actual hours,
@@ -139,8 +139,8 @@ end = 'truck_customer'
139
139
  mix = [0.8, 0.2]
140
140
  [legs.truck_to_hub]
141
141
  vehicle = 'truck'
142
- distance = 150 # km
143
- duration = 2.2 # hours
142
+ distance = 42 # km # To get to about 91_000 km per year
143
+ duration = 1 # hours
144
144
  # This factor adds a correction to the vehicle consumption that depends
145
145
  # on the hour in day (the first is for 00:00 to 00:59,
146
146
  # the last for 23:00 to 23:59). Note that these are actual hours,
@@ -164,22 +164,28 @@ end = 'truck_hub'
164
164
  # road_types = ['highway', 'city']
165
165
  mix = [0.8, 0.2]
166
166
 
167
+
167
168
  [vehicle]
168
169
 
169
170
  name = 'truck'
170
171
  base_location = 'truck_hub' # not relevant for cars
171
- yearly_kilometrage = 42_000
172
+ yearly_kilometrage = 91_250
173
+ # 250 km per day https://www.agendalaadinfrastructuur.nl/ondersteuning+gemeenten/documenten+en+links/documenten+in+bibliotheek/handlerdownloadfiles.ashx?idnv=2547592#:~:text=Op%20dit%20moment%20gebruikt%20een,dieselvrachtwagen%20(Mobilyze%2C%202023).
172
174
  # Not relevant for cars, as it is built bottom-up
173
175
  kilometers_column_for_consumption = 'Arrivals'
174
176
  use_weighted = false
175
- battery_capacity = 80 # kWh
177
+ battery_capacity = 540 # kWh
178
+ # https://www.volvotrucks.com/en-en/news-stories/press-releases/2022/jan/volvos-heavy-duty-electric-truck-is-put-to-the-test-excels-in-both-range-and-energy-efficiency.html
176
179
  solar_panel_size_kWp = 0 # kWp
177
180
  [vehicle.base_consumption_per_km]
178
- electricity_kWh = 0.2
179
- gasoline_litres = 0.075
180
- diesel_litres = 0.05
181
- hydrogen_kg = 0.006340
182
-
181
+ electricity_kWh = 0.1451
182
+ gasoline_litres = 0.0649
183
+ diesel_litres = 0.0557
184
+ hydrogen_kg = 0.0076
185
+ CNG_kg = 0.0461
186
+ LNG_kg = 0.0461
187
+
188
+
183
189
  [trips]
184
190
 
185
191
  [trips.truck_weekday]
@@ -114,7 +114,7 @@ time_modulation_factors = [
114
114
  # etc.
115
115
  [legs.van_to_customer]
116
116
  vehicle = 'van'
117
- distance = 20 # km
117
+ distance = 2.6 # km # Chosen to match 18_000 km per year
118
118
  duration = 0.25 # hours
119
119
  # This factor adds a correction to the vehicle consumption that depends
120
120
  # on the hour in day (the first is for 00:00 to 00:59,
@@ -140,7 +140,7 @@ end = 'van_customer'
140
140
  mix = [0.8, 0.2]
141
141
  [legs.van_to_base]
142
142
  vehicle = 'van'
143
- distance = 20 # km
143
+ distance = 2.6 # km # Chosen to match 18_000 km per year
144
144
  duration = 0.25 # hours
145
145
  # This factor adds a correction to the vehicle consumption that depends
146
146
  # on the hour in day (the first is for 00:00 to 00:59,
@@ -165,23 +165,23 @@ end = 'van_base'
165
165
  # road_types = ['highway', 'city']
166
166
  mix = [0.8, 0.2]
167
167
 
168
-
169
-
170
-
171
168
  [vehicle]
172
169
  name = 'van'
173
170
  base_location = 'van_base' # not relevant for cars
174
- yearly_kilometrage = 42_000
171
+ yearly_kilometrage = 18_000
172
+ # https://www.cbs.nl/nl-nl/visualisaties/verkeer-en-vervoer/verkeer/verkeersprestaties-bestelautos
175
173
  # Not relevant for cars, as it is built bottom-up
176
174
  kilometers_column_for_consumption = 'Arrivals'
177
175
  use_weighted = false
178
176
  battery_capacity = 80 # kWh
179
177
  solar_panel_size_kWp = 0 # kWp
180
178
  [vehicle.base_consumption_per_km]
181
- electricity_kWh = 0.2
182
- gasoline_litres = 0.075
183
- diesel_litres = 0.05
184
- hydrogen_kg = 0.006340
179
+ electricity_kWh = 0.1451
180
+ gasoline_litres = 0.0649
181
+ diesel_litres = 0.0557
182
+ hydrogen_kg = 0.0076
183
+ LPG_litres = 0.092
184
+ CNG_kg = 0.0461
185
185
 
186
186
  [trips]
187
187
  [trips.van_weekday]
@@ -211,7 +211,7 @@ repeated_sequence = [
211
211
  'van_to_customer',
212
212
  'van_to_base',
213
213
  ]
214
- repetition_amounts = [4, 2, 2, 1]
214
+ repetition_amounts = [3, 1, 1, 1]
215
215
  time_between_repetitions = [0.1, 1, 0.1, 1] # hours
216
216
 
217
217
  [trips.van_weekend]
@@ -241,7 +241,7 @@ repeated_sequence = [
241
241
  'van_to_customer',
242
242
  'van_to_base',
243
243
  ]
244
- repetition_amounts = [2, 2, 2, 1]
244
+ repetition_amounts = [1, 1, 1, 1]
245
245
  time_between_repetitions = [0.1, 2, 0.1, 2] # hours
246
246
 
247
247
 
@@ -557,7 +557,6 @@ def get_travelling_group_travel_impact(
557
557
  percent_in_first_slot = 1 + percent_in_first_slot
558
558
 
559
559
  if travelling_group_first_slot + 2 >= HOURS_IN_A_DAY:
560
-
561
560
  print('Trip extending beyond day end. Check your entry')
562
561
  exit()
563
562
 
@@ -583,10 +582,9 @@ def get_travelling_group_travel_impact(
583
582
  if percent_in_first_slot <= 0:
584
583
  travelling_group_first_slot += 1
585
584
  percent_in_first_slot = 1 + percent_in_first_slot
586
-
587
585
  if travelling_group_first_slot + 2 >= HOURS_IN_A_DAY:
588
-
589
586
  print('Trip extending beyond day end. Check your entry')
587
+ print('dddd')
590
588
  exit()
591
589
 
592
590
  return mobility_matrix
@@ -1069,7 +1067,6 @@ class Trip:
1069
1067
  first_leg: str = trip.legs[0]
1070
1068
  initial_location: str = scenario.legs[first_leg].locations.start
1071
1069
  trip.location_split[initial_location] = 1
1072
-
1073
1070
  trip.location_split, trip.mobility_matrix = (
1074
1071
  get_location_split_and_impact_of_departures_and_arrivals(
1075
1072
  trip.location_names,
@@ -40,8 +40,8 @@ def get_run_duration(
40
40
  ).total_seconds()
41
41
 
42
42
  time_parameters: Box = general_parameters.time
43
- SECONDS_PER_HOUR: int = time_parameters.SECONDS_PER_HOUR
44
- HOURS_IN_A_DAY: int = time_parameters.HOURS_IN_A_DAY
43
+ SECONDS_PER_HOUR: int = int(time_parameters.SECONDS_PER_HOUR)
44
+ HOURS_IN_A_DAY: int = int(time_parameters.HOURS_IN_A_DAY)
45
45
  DAYS_IN_A_YEAR: float = time_parameters.DAYS_IN_A_YEAR
46
46
  SECONDS_PER_YEAR: float = (
47
47
  SECONDS_PER_HOUR * HOURS_IN_A_DAY * DAYS_IN_A_YEAR
@@ -61,11 +61,11 @@ def get_time_range(
61
61
  '''
62
62
  run_parameters: Box = scenario.run
63
63
  run_start_parameters: Box = run_parameters.start
64
- run_start_year: int = run_start_parameters.year
65
- run_start_month: int = run_start_parameters.month
66
- run_start_day: int = run_start_parameters.day
67
- run_start_hour: int = run_start_parameters.hour
68
- run_start_minute: int = run_start_parameters.minute
64
+ run_start_year: int = int(run_start_parameters.year)
65
+ run_start_month: int = int(run_start_parameters.month)
66
+ run_start_day: int = int(run_start_parameters.day)
67
+ run_start_hour: int = int(run_start_parameters.hour)
68
+ run_start_minute: int = int(run_start_parameters.minute)
69
69
 
70
70
  run_start: datetime.datetime = datetime.datetime(
71
71
  run_start_year,
@@ -76,11 +76,11 @@ def get_time_range(
76
76
  )
77
77
 
78
78
  display_run_start_parameters: Box = run_parameters.display_start
79
- display_run_start_year: int = display_run_start_parameters.year
80
- display_run_start_month: int = display_run_start_parameters.month
81
- display_run_start_day: int = display_run_start_parameters.day
82
- display_run_start_hour: int = display_run_start_parameters.hour
83
- display_run_start_minute: int = display_run_start_parameters.minute
79
+ display_run_start_year: int = int(display_run_start_parameters.year)
80
+ display_run_start_month: int = int(display_run_start_parameters.month)
81
+ display_run_start_day: int = int(display_run_start_parameters.day)
82
+ display_run_start_hour: int = int(display_run_start_parameters.hour)
83
+ display_run_start_minute: int = int(display_run_start_parameters.minute)
84
84
 
85
85
  display_run_start: datetime.datetime = datetime.datetime(
86
86
  display_run_start_year,
@@ -92,7 +92,7 @@ def get_time_range(
92
92
 
93
93
  mobility_module_parameters: Box = scenario.mobility_module
94
94
 
95
- day_start_hour: int = mobility_module_parameters.day_start_hour
95
+ day_start_hour: int = int(mobility_module_parameters.day_start_hour)
96
96
  compute_start_location_split: bool = (
97
97
  mobility_module_parameters.compute_start_location_split
98
98
  )
@@ -118,22 +118,22 @@ def get_time_range(
118
118
  )
119
119
 
120
120
  run_end_parameters: Box = run_parameters.end
121
- run_end_year: int = run_end_parameters.year
122
- run_end_month: int = run_end_parameters.month
123
- run_end_day: int = run_end_parameters.day
124
- run_end_hour: int = run_end_parameters.hour
125
- run_end_minute: int = run_end_parameters.minute
121
+ run_end_year: int = int(run_end_parameters.year)
122
+ run_end_month: int = int(run_end_parameters.month)
123
+ run_end_day: int = int(run_end_parameters.day)
124
+ run_end_hour: int = int(run_end_parameters.hour)
125
+ run_end_minute: int = int(run_end_parameters.minute)
126
126
 
127
127
  run_end: datetime.datetime = datetime.datetime(
128
128
  run_end_year, run_end_month, run_end_day, run_end_hour, run_end_minute
129
129
  )
130
130
 
131
131
  display_run_end_parameters: Box = run_parameters.display_end
132
- display_run_end_year: int = display_run_end_parameters.year
133
- display_run_end_month: int = display_run_end_parameters.month
134
- display_run_end_day: int = display_run_end_parameters.day
135
- display_run_end_hour: int = display_run_end_parameters.hour
136
- display_run_end_minute: int = display_run_end_parameters.minute
132
+ display_run_end_year: int = int(display_run_end_parameters.year)
133
+ display_run_end_month: int = int(display_run_end_parameters.month)
134
+ display_run_end_day: int = int(display_run_end_parameters.day)
135
+ display_run_end_hour: int = int(display_run_end_parameters.hour)
136
+ display_run_end_minute: int = int(display_run_end_parameters.minute)
137
137
 
138
138
  display_run_end: datetime.datetime = datetime.datetime(
139
139
  display_run_end_year,
@@ -216,7 +216,7 @@ def get_time_stamped_dataframe(
216
216
  time_stamped_dataframe, scenario, general_parameters
217
217
  )
218
218
 
219
- day_start_hour: int = scenario.mobility_module.day_start_hour
219
+ day_start_hour: int = int(scenario.mobility_module.day_start_hour)
220
220
  HOURS_IN_A_DAY = general_parameters.time.HOURS_IN_A_DAY
221
221
  hour_in_day: ty.List[int] = [
222
222
  (
@@ -304,7 +304,7 @@ def add_day_type_to_time_stamped_dataframe(
304
304
  Adds a column with the date type
305
305
  to a time-stamped_dataframe
306
306
  '''
307
- day_start_hour: int = scenario.mobility_module.day_start_hour
307
+ day_start_hour: int = int(scenario.mobility_module.day_start_hour)
308
308
  day_types: ty.List[str] = [
309
309
  get_day_type(
310
310
  time_tag - datetime.timedelta(hours=day_start_hour),
@@ -323,13 +323,13 @@ def get_day_start_time_tags_and_types(
323
323
  ) -> ty.List[ty.Tuple[datetime.datetime, str]]:
324
324
  time_tags_and_types: ty.List[ty.Tuple[datetime.datetime, str]] = []
325
325
 
326
- run_start_year: int = scenario.run.start.year
327
- run_start_month: int = scenario.run.start.month
328
- run_start_day: int = scenario.run.start.day
329
- run_end_year: int = scenario.run.end.year
330
- run_end_month: int = scenario.run.end.month
331
- run_end_day: int = scenario.run.end.day
332
- day_start_hour: int = scenario.mobility_module.day_start_hour
326
+ run_start_year: int = int(scenario.run.start.year)
327
+ run_start_month: int = int(scenario.run.start.month)
328
+ run_start_day: int = int(scenario.run.start.day)
329
+ run_end_year: int = int(scenario.run.end.year)
330
+ run_end_month: int = int(scenario.run.end.month)
331
+ run_end_day: int = int(scenario.run.end.day)
332
+ day_start_hour: int = int(scenario.mobility_module.day_start_hour)
333
333
  tags_start: datetime.datetime = datetime.datetime(
334
334
  year=run_start_year,
335
335
  month=run_start_month,
@@ -378,8 +378,8 @@ def from_day_to_run(
378
378
  ):
379
379
  rolled_dataframe_to_clone[column] = column_values
380
380
 
381
- SECONDS_PER_HOUR: int = general_parameters.time.SECONDS_PER_HOUR
382
- HOURS_IN_A_DAY: int = general_parameters.time.HOURS_IN_A_DAY
381
+ SECONDS_PER_HOUR: int = int(general_parameters.time.SECONDS_PER_HOUR)
382
+ HOURS_IN_A_DAY: int = int(general_parameters.time.HOURS_IN_A_DAY)
383
383
  run_number_of_seconds: float = (
384
384
  run_range[-1] - run_range[0]
385
385
  ).total_seconds()
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: ChaProEV
3
- Version: 1.2.1
3
+ Version: 1.2.2
4
4
  Summary: ChaProEV: Charging Profiles of Electric Vehicles
5
5
  Author-email: Omar Usmani <Omar.Usmani@TNO.nl>
6
6
  Project-URL: Homepage, https://github.com/TNO/ChaProEV
@@ -1,64 +0,0 @@
1
- # Scenario file description
2
-
3
- This page describes the elements of the scenario file
4
-
5
- ## run
6
-
7
- ## locations
8
-
9
- ## legs
10
-
11
- ### mix
12
-
13
- ## vehicle
14
- These parameters define the scenario's vehicle. If you want profiles
15
- for several vehicles, run separate scenarios.
16
- ### vehicle name
17
- This is the name of the vehicle, which will be checked to see if trips
18
- and locations are actually declared.
19
-
20
- ## trips
21
-
22
- ## mobility_module
23
- ### day_start_hour
24
- This parameter defines the start of the day for the scenario. It is chosen
25
- so that there are no movements during that hour number. It represents the
26
- shift from midnight, so a day start hour of 5 means that the day starts
27
- at hour 5 (i.e. 05.00). The idea is to choose an hour that is logical
28
- for the users/matches their patterns. This is connected to the
29
- [day types](day_types), as a given day will correspond to a day type.
30
- For example, the hours between 00:00 and 05:00 on a Saturday belong to
31
- the Thursday before and are as such on a week day
32
- (as opposed to a weekend day).
33
-
34
- ### day_types
35
-
36
- ### trips_per_day_type
37
- For vehicles other than cars, we assume that there is one trip per day type.
38
- This is where we match the trips to their day type
39
-
40
- ## transport_factors
41
-
42
- ### road_types
43
-
44
- ### weights
45
-
46
- ## weather
47
-
48
- ## charging
49
-
50
- ## plots
51
-
52
- ## files
53
-
54
- ## maps
55
-
56
- ## colors
57
-
58
- ## color_bars
59
-
60
- ## unit_conversion
61
-
62
- ## time
63
-
64
- ## numbers
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes