Skip to main content
Pre-release

This release is a pre-release and may not be stable for production use.

wltp: A wltc gear-shifts calculator

Home:

https://github.com/ankostis/wltp

Documentation:

https://wltp.readthedocs.org/

PyPI:

https://pypi.python.org/pypi/wltp

travisCI:

https://travis-ci.org/ankostis/wltp

Copyright:

2013-2014 European Commission (JRC)

License:

EUPL 1.1+

A calculator of the gear-shifts profile for light-duty-vehicles (cars) according to UNECE draft of the WLTP.

Introduction

The calculator accepts as input the vehicle-specifications and parameters for modifying the execution of the WLTC cycle and spits-out the it gear-shifts of the vehicle, the attained speed-profile, and any warnings. It certainly does not calculate any CO2 emissions or other metrics.

An “execution” or a “run” of an experiment is depicted in the following diagram:

     .-------------------.    ______________        .-------------------.
    /        Model      /    | Experiment   |       / Model(augmented)  /
   /-------------------/     |--------------|      /-------------------/
  / +--vehicle        /  ==> |  .----------.| ==> / +...              /
 /  +--params        /       | / WLTC-data/ |    /  +--cycle_run     /
/                   /        |'----------'  |   /                   /
'------------------'         |______________|  '-------------------'

Install

Requires Python 3.3+. Install it directly from the PyPI repository with the usual:

$ pip3 install wltp

Or you can build it from the sources (assuming you have a working installation of git):

$ git clone https://github.com/ankostis/wltp.git wltp
$ cd wltp
$ python3 setup.py install .
info:: WinPython and

Anaconda python distributions for Windows and OS X, respectively.

Python usage

Here is a quick-start example:

>>> from wltp import model
>>> from wltp.experiment import Experiment
>>> import json                  ## Just for pretty-printing model

>>> mdl = {
    "vehicle": {
        "mass":     1500,
        "v_max":    195,
        "p_rated":  100,
        "n_rated":  5450,
        "n_idle":   950,
        "n_min":    None, # Can be overriden by manufacturer.
        "gear_ratios":      [120.5, 75, 50, 43, 37, 32],
        "resistance_coeffs":[100, 0.5, 0.04],
    }
}

>>> processor = Experiment(mdl)
>>> mdl = processor.run()
>>> print(json.dumps(mdl['params'], indent=2))
{
  "f_n_min_gear2": 0.9,
  "v_stopped_threshold": 1,
  "wltc_class": "class3b",
  "f_n_min": 0.125,
  "f_n_max": 1.2,
  "f_downscale": 0,
  "f_inertial": 1.1,
  "f_n_clutch_gear2": [
    1.15,
    0.03
  ],
  "f_safety_margin": 0.9
}

To access the time-based cycle-results it is better to use a class(pandas.DataFrame):

>>> import pandas as pd
>>> df = pd.DataFrame(mdl['cycle_run'])
>>> df.columns
Index(['clutch', 'driveability', 'gears', 'gears_orig', 'p_available', 'p_required', 'rpm', 'rpm_norm', 'v_class', 'v_real', 'v_target'], dtype='object')
>>> df.index.name = 't'
>>> print('Mean engine_speed: ', df.rpm.mean())
Mean engine_speed:  1917.0407829

>>> print(df.head())
  clutch driveability  gears  gears_orig  p_available  p_required  rpm  \
t
0  False                   0           0            9           0  950
1  False                   0           0            9           0  950
2  False                   0           0            9           0  950
3  False                   0           0            9           0  950
4  False                   0           0            9           0  950

   rpm_norm  v_class   v_real  v_target
t
0         0        0  29.6875         0
1         0        0  29.6875         0
2         0        0  29.6875         0
3         0        0  29.6875         0
4         0        0  29.6875         0

[5 rows x 11 columns]

>>> print(processor.driveability_report())
...
  12: (a: X-->0)
  13: g1: Revolutions too low!
  14: g1: Revolutions too low!
...
  30: (b2(2): 5-->4)
...
  38: (c1: 4-->3)
  39: (c1: 4-->3)
  40: Rule e or g missed downshift(40: 4-->3) in acceleration?
...
  42: Rule e or g missed downshift(42: 3-->2) in acceleration?
...

For information on the model-data, check the schema:

>>> print(json.dumps(model.model_schema(), indent=2))
{
  "properties": {
    "params": {
      "properties": {
        "f_n_min_gear2": {
          "description": "Gear-2 is invalid when N :< f_n_min_gear2 * n_idle.",
          "type": [
            "number",
            "null"
          ],
          "default": 0.9
        },
        "v_stopped_threshold": {
          "description": "Velocity (Km/h) under which (<=) to idle gear-shift (Annex 2-3.3, p71).",
          "type": [
...

For more examples, download the sources and check the test-cases found at /wltp/test.

Cmd-line usage

To get help:

$ python wltp --help          ## to get generic help for cmd-line syntax
$ python wltp -M /vehicle     ## to get help for specific model-paths

and then, assuming vehicle.csv is a CSV file with the vehicle parameters for which you want to override the n_idle only, run the following:

$ python wltp -v \
    -I vehicle.csv file_frmt=SERIES model_path=/params header@=None \
    -m /vehicle/n_idle:=850 \
    -O cycle.csv model_path=/cycle_run

IPython usage

Getting Involved

Read doc(INSTALL), and use the typical gitHub’s development tools. For instances, to download the sources:

git https://github.com/ankostis/wltp.git wltp

To provide feedback, use github’s Issue=tracker.

To check the status of the integration-server for the latest commit, visit TravisCI.

Specs & Algorithm

This program was implemented from scratch based on this download(GTR specification <23.10.2013 ECE-TRANS-WP29-GRPE-2013-13 0930.docx>) (included in the docs/ dir). The latest version of this GTR, along with other related documents can be found at UNECE’s site:

Cycles

info:: doc(CHANGES)

Development team

  • Author:
    • Kostis Anagnostopoulos

  • Contributing Authors:
    • Heinz Steven (test-data, validation, and review)

    • Georgios Fontaras (simulation, physics & engineering support)

    • Alessandro Marotta (policy support)

Glossary

rubric:

WLTP
    The `Worldwide harmonised Light duty vehicles Test Procedure <https://www2.unece.org/wiki/pages/viewpage.action?pageId=2523179>`_,
    a **GRPE** informal working group

UNECE
    The United Nations Economic Commission for Europe, which has assumed the steering role
    on the **WLTP**.

GRPE
    UNECE Working party on Pollution and Energy – Transport Programme

GTR
    Global Technical Regulation

WLTC
    The family of the 3 pre-defined *driving-cycles* to use for each vehicle depending on its
    **PMR**. Classes 1,2 & 3 are split in 2, 4 and 4 *parts* respectively.

PMR
    The ``rated_power / unladen_mass`` of the vehicle

Unladen mass
    *UM* or *Curb weight*, the weight of the vehicle in running order minus
    the mass of the driver.

Test mass
    *TM*, the representative weight of the vehicle used as input for the calculations of the simulation,
    derived by interpolating between high and low values for the |CO2|-family of the vehicle.

Downscaling
    Reduction of the top-velocity of the original drive trace to be followed, to ensure that the vehicle
    is not driven in an unduly high proportion of "full throttle".

Metadata

Release files for wltp 0.0.8-alpha

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for wltp 0.0.8-alpha
File Size Uploaded Provenance Actions
wltp-0.0.8-alpha.tar.gz 2.6 MB Without provenance Details for wltp-0.0.8-alpha.tar.gz

Release files / wltp-0.0.8-alpha.tar.gz

Download URL wltp-0.0.8-alpha.tar.gz
Size 2.6 MB
Tags Source
SHA-256 checksum
How to use checksums
ea09cccd922d3bdf3135bd7aebf2c336edecf28d80e8f43b38ba74a758b36a18
BLAKE2b-256 checksum
How to use checksums
bfacd5ed9ead1e70f3866fb8fd69e4c30c8de244a6b4b4e52f51006f45e5ca3e
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No

Security for wltp 0.0.8-alpha

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

No provenance found

None of the files in this release were uploaded with provenance metadata.

A note on package security

PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.

To learn more about protecting yourself from malicious actors, visit our package security documentation.

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page