omf

Api

transform

Transform a tessif energy system into an oemof energy system.

Internal Functionalities

generate_oemof_busses

Generates oemof busses out of tessif busses.

generate_oemof_sinks

Generates oemof sinks out of tessif sinks.

generate_oemof_sources

Generates oemof sources out of tessif sources.

generate_oemof_storages

Generates oemof storages out of tessif storages.

generate_oemof_transformers

Generates oemof transformers out of tessif transformers.

tessif.transform.es2es.omf is a tessif module aggregating all the functionality for automatically transforming a tessif energy system into an oemof energy system.

tessif.transform.es2es.omf.generate_oemof_busses(busses)[source]

Generates oemof busses out of tessif busses.

Parameters:

busses (Iterable) – Iterable of tessif.model.components.Bus objects that are to be transformed into oemof.solph.network.bus.Bus objects.

Returns:

Generator object yielding the transformed bus objects.

Return type:

generated_busses Generator

tessif.transform.es2es.omf.generate_oemof_chps(chps, tessif_busses, oemof_busses)[source]

Generate oemof chps out of tessif chps

Parameters:
  • chps (Iterable) – Iterable of tessif.model.components.CHP objects that are to be transformed into oemof.solph.components.extraction_turbine_chp.ExtractionTurbineCHP or oemof.solph.components.generic_chp.GenericCHP objects.

  • tessif_busses (Iterable) –

    Collection of tessif.model.components.Bus objects present in the same energy system as chps.

    Used for figuring out connections.

  • oemof_busses (Iterable) –

    Iterable of oemof.solph.network.bus.Bus objects present in the same energy system as chps.

    Used for figuring out connections.

Returns:

Generator object yielding the transformed chp objects.

Return type:

generated_chps Generator

Examples

>>> # utilize example hub for accessing a parameterized energy system
>>> import tessif.examples.data.tsf.py_hard as tsf_py
>>> es = tsf_py.create_variable_chp()
>>> # generate the chps:
>>> chp = list(generate_oemof_chps(
...     chps=es.chps,
...     tessif_busses=es.busses,
...     oemof_busses=generate_oemof_busses(es.busses)))[0]

Label:

>>> print(chp.label)
CHP1

Conversion Factors:

>>> for key, value in chp.conversion_factors.items():
...     print('{}: {}'.format(key, value[123123]))
Powerline: 0.3
Heat Grid: 0.2
Gas Grid: 1
>>> linear_flow_params = (
...     'nominal_value', 'summed_min', 'summed_max',
...     'min', 'max', 'positive_gradient', 'negative_gradient')
>>> for flow in list(
...     chp.inputs.values())+list(chp.outputs.values()):
...     print("Flow from '{}' to '{}'".format(
...         flow.label.input, flow.label.output))
...     print('Linear flow parameters')
...     for attr in linear_flow_params:
...         print('{}:'.format(attr), getattr(flow, attr))
...     print()
Flow from 'Gas Grid' to 'CHP1'
Linear flow parameters
nominal_value: None
summed_min: None
summed_max: None
min: []
max: []
positive_gradient: {'ub': [], 'costs': 0.0}
negative_gradient: {'ub': [], 'costs': 0.0}

Flow from 'CHP1' to 'Powerline'
Linear flow parameters
nominal_value: 9
summed_min: None
summed_max: None
min: []
max: []
positive_gradient: {'ub': [], 'costs': 0.0}
negative_gradient: {'ub': [], 'costs': 0.0}

Flow from 'CHP1' to 'Heat Grid'
Linear flow parameters
nominal_value: 6
summed_min: None
summed_max: None
min: []
max: []
positive_gradient: {'ub': [], 'costs': 0.0}
negative_gradient: {'ub': [], 'costs': 0.0}

Generates oemof links out of tessif links.

Parameters:
  • links (Iterable) – Iterable of tessif.model.components.Link objects that are to be transformed into oemof.solph.custom.link.Link objects.

  • tessif_busses (Iterable) –

    Collection of tessif.model.components.Bus objects present in the same energy system as links.

    Used for figuring out connections.

  • oemof_busses (Iterable) –

    Iterable of oemof.solph.network.bus.Bus objects present in the same energy system as links.

    Used for fiuring out connections

Returns:

Generator object yielding the transformed link objects.

Return type:

generated_links Generator

Examples

Creating a small energy system:

>>> # utilize example hub for accessing a parameterized energy system
>>> import tessif.examples.data.tsf.py_hard as tsf_py
>>> es = tsf_py.create_fpwe()
tessif.transform.es2es.omf.generate_oemof_sinks(sinks, tessif_busses, oemof_busses)[source]

Generates oemof sinks out of tessif sinks.

Parameters:
Returns:

Generator object yielding the transformed sink objects.

Return type:

generated_sinks Generator

Examples

>>> # utilize example hub for accessing a parameterized energy system
>>> import tessif.examples.data.tsf.py_hard as tsf_py
>>> es = tsf_py.create_fpwe()
>>> # generate the sinks:
>>> sink = list(generate_oemof_sinks(
...     sinks=es.sinks,
...     tessif_busses=es.busses,
...     oemof_busses=generate_oemof_busses(es.busses)))[0]
>>> print(sink.label)
Demand
>>> linear_flow_params = (
...     'nominal_value', 'summed_min', 'summed_max',
...     'min', 'max', 'positive_gradient', 'negative_gradient')
>>> for flow in sink.inputs.values():
...     print('Linear flow parameters:')
...     for attr in linear_flow_params:
...         print('{}:'.format(attr), getattr(flow, attr))
Linear flow parameters:
nominal_value: 11
summed_min: None
summed_max: None
min: []
max: []
positive_gradient: {'ub': [], 'costs': 0}
negative_gradient: {'ub': [], 'costs': 0}
tessif.transform.es2es.omf.generate_oemof_sources(sources, tessif_busses, oemof_busses)[source]

Generates oemof sources out of tessif sources.

Parameters:
Returns:

Generator object yielding the transformed source objects.

Return type:

generated_sources Generator

Examples

>>> # utilize example hub for accessing a parameterized energy system
>>> import tessif.examples.data.tsf.py_hard as tsf_py
>>> es = tsf_py.create_fpwe()
>>> # generate the sources:
>>> source = list(generate_oemof_sources(
...     sources=es.sources,
...     tessif_busses=es.busses,
...     oemof_busses=generate_oemof_busses(es.busses)))[0]
>>> print(source.label)
Gas Station
>>> linear_flow_params = (
...     'nominal_value', 'summed_min', 'summed_max',
...     'min', 'max', 'positive_gradient', 'negative_gradient')
>>> for flow in source.outputs.values():
...     print('Linear flow parameters:')
...     for attr in linear_flow_params:
...         print('{}:'.format(attr), getattr(flow, attr))
Linear flow parameters:
nominal_value: 100
summed_min: None
summed_max: None
min: []
max: []
positive_gradient: {'ub': [], 'costs': 0}
negative_gradient: {'ub': [], 'costs': 0}
tessif.transform.es2es.omf.generate_oemof_storages(storages, tessif_busses, oemof_busses)[source]

Generates oemof storages out of tessif storages.

Parameters:
Returns:

Generator object yielding the transformed storage objects.

Return type:

generated_storages Generator

Examples

>>> # utilize example hub for accessing a parameterized energy system
>>> import tessif.examples.data.tsf.py_hard as tsf_py
>>> es = tsf_py.create_fpwe()
>>> # generate the storages:
>>> storage = list(generate_oemof_storages(
...     storages=es.storages,
...     tessif_busses=es.busses,
...     oemof_busses=generate_oemof_busses(es.busses)))[0]

Storage Uid:

>>> print(storage.label)
Battery

Storage in and outflow efficiencies:

>>> print('inflow:', storage.inflow_conversion_factor[12371293])
inflow: 1
>>> print('outflow:', storage.inflow_conversion_factor[107088076])
outflow: 1

Idle Changes:

>>> print(storage.loss_rate[12371203])
0.1

Initial State Of Charge:

>>> print(storage.initial_storage_level)
1.0

Flows:

>>> linear_flow_params = (
...     'nominal_value', 'summed_min', 'summed_max', 'min', 'max',
...     'positive_gradient', 'negative_gradient', 'variable_costs',
...     'emissions',)
>>> for flow in list(
...     storage.inputs.values())+list(storage.outputs.values()):
...     print("Flow from '{}' to '{}'".format(
...         flow.label.input, flow.label.output))
...     print('Linear flow parameters')
...     for attr in linear_flow_params:
...         print('{}:'.format(attr), getattr(flow, attr))
Flow from 'Powerline' to 'Battery'
Linear flow parameters
nominal_value: 30
summed_min: None
summed_max: None
min: []
max: []
positive_gradient: {'ub': [], 'costs': 0}
negative_gradient: {'ub': [], 'costs': 0}
variable_costs: []
emissions: 0
Flow from 'Battery' to 'Powerline'
Linear flow parameters
nominal_value: 30
summed_min: None
summed_max: None
min: []
max: []
positive_gradient: {'ub': [], 'costs': 0}
negative_gradient: {'ub': [], 'costs': 0}
variable_costs: []
emissions: 0
tessif.transform.es2es.omf.generate_oemof_transformers(transformers, tessif_busses, oemof_busses)[source]

Generates oemof transformers out of tessif transformers.

Parameters:
Returns:

Generator object yielding the transformed transformer objects.

Return type:

generated_transformers Generator

Examples

>>> # utilize example hub for accessing a parameterized energy system
>>> import tessif.examples.data.tsf.py_hard as tsf_py
>>> es = tsf_py.create_fpwe()
>>> # generate the transformers:
>>> transformer = list(generate_oemof_transformers(
...     transformers=es.transformers,
...     tessif_busses=es.busses,
...     oemof_busses=generate_oemof_busses(es.busses)))[0]

Label:

>>> print(transformer.label)
Generator

Conversion Factors:

>>> for key, value in transformer.conversion_factors.items():
...     print('{}: {}'.format(key, value[123123]))
Powerline: 0.42
Pipeline: 1
>>> linear_flow_params = (
...     'nominal_value', 'summed_min', 'summed_max',
...     'min', 'max', 'positive_gradient', 'negative_gradient')
>>> for flow in list(
...     transformer.inputs.values())+list(transformer.outputs.values()):
...     print("Flow from '{}' to '{}'".format(
...         flow.label.input, flow.label.output))
...     print('Linear flow parameters')
...     for attr in linear_flow_params:
...         print('{}:'.format(attr), getattr(flow, attr))
...     print()
Flow from 'Pipeline' to 'Generator'
Linear flow parameters
nominal_value: 50
summed_min: None
summed_max: None
min: []
max: []
positive_gradient: {'ub': [], 'costs': 0}
negative_gradient: {'ub': [], 'costs': 0}

Flow from 'Generator' to 'Powerline'
Linear flow parameters
nominal_value: 15
summed_min: None
summed_max: None
min: []
max: []
positive_gradient: {'ub': [], 'costs': 0}
negative_gradient: {'ub': [], 'costs': 0}
tessif.transform.es2es.omf.transform(tessif_es, **kwargs)[source]

Transform a tessif energy system into an oemof energy system.

Parameters:

tessif_es (tessif.model.energy_system.AbstractEnergySystem) – The tessif energy system that is to be transformed into an oemof energy system.

Returns:

oemof_es – The oemof energy system that was transformed out of the tessif energy system.

Return type:

oemof.solph.network.energy_system.EnergySystem

Examples

Use the example hub’s create_mwe() utility for showcasing basic usage:

  1. Create the mwe:

    >>> from tessif.examples.data.tsf.py_hard import create_mwe
    >>> tessif_es = create_mwe()
    
  2. Transform the tessif energy system:

    >>> oemof_es = transform(tessif_es)
    
  3. Show node labels using the oemof interface as well as tessif's uid concept:

    >>> for node in oemof_es.nodes:
    ...     print(node.label.name)
    Pipeline
    Powerline
    Gas Station
    Demand
    Generator
    Battery
    
  4. Simulate the oemof energy system:

    >>> import tessif.simulate as simulate
    >>> optimized_oemof_es = simulate.omf_from_es(oemof_es)
    
  5. Extract some results:

    >>> import tessif.transform.es2mapping.omf as transform_oemof_results
    >>> load_results = transform_oemof_results.LoadResultier(
    ...     optimized_oemof_es)
    >>> print(load_results.node_load['Powerline'])
    Powerline            Battery  Generator  Battery  Demand
    1990-07-13 00:00:00    -10.0       -0.0      0.0    10.0
    1990-07-13 01:00:00     -0.0      -10.0      0.0    10.0
    1990-07-13 02:00:00     -0.0      -10.0      0.0    10.0
    1990-07-13 03:00:00     -0.0      -10.0      0.0    10.0
    

A slightly more advanced example:

>>> from tessif.examples.data.tsf.py_hard import create_fpwe
>>> tessif_es = create_fpwe()
>>> oemof_es = transform(tessif_es)
>>> optimized_oemof_es = simulate.omf_from_es(oemof_es)
>>> load_results = transform_oemof_results.LoadResultier(
...     optimized_oemof_es)
>>> print(load_results.node_load['Powerline'])
Powerline            Battery  Generator  Solar Panel  Battery  Demand
1990-07-13 00:00:00     -0.0       -0.0        -12.0      1.0    11.0
1990-07-13 01:00:00     -8.0       -0.0         -3.0      0.0    11.0
1990-07-13 02:00:00     -0.9       -3.1         -7.0      0.0    11.0