Release of “Fractal Fun”

Over the past months, we worked on methods to allow adding more structure to energy system models: It should be simpler to group Nodes (such as Sources or Converters). There are several things that benefit from this, for example cellular models or models spanning several geographical regions. Also, there were several implementations building on top of solph that aimed for this very same thing.

So, with oemof.network v0.5.1 (Github, PyPI, Zenodo) and oemof.solph v0.6.1 (GitHub, PyPI, Zenodo) every Node can now have parent nodes and contain sub-nodes. As both can be added after creation, we codenamed the releases “fractal fun”. When using the new function subnode(class_local_name, ..) (see documentation) to create new Nodes, labels are automatically created that represent the hierarchy.

Helpers for result processing are currently being implemented. A graph visualisation in oemof.visio has already been implemented and is available as a packaged pre-release (GirHub, PyPI). For a brief code example producing the illustrative figures used here, see oemof.visio:examples/oemof_model_subnetworks.py.

TESPy version 0.9 released

Version 0.9 of TESPy is available!

A major refactoring of the presolving and solving architecture has been carried out. The changes will allow users to debug models much more efficiently, as it is possible to extract the list of variables and the list of equations that have been presolved as well as those that are finally passed to the numerical solver. In this context, the presolver now further reduces the model size by identifying linear relationships between variables and mapping such variables to a single one. PowerConnections and respective components like Motor, Generator and PowerBus replace the Bus architecture, for example enabling the modelling of single shaft gas turbines, where the generator efficiency will only affect the net shaft power of the gas turbine.

For the full changelog please check out the documentation website: https://tespy.readthedocs.io/.

Also, a new package in context of thermal engineering has been released under the oemof organization: ExerPy. The exergy analysis features of TESPy have been ported to the new package and it will be developed independently in the future to integrate more methods in the context of exergy analysis. ExerPy provides an easy to use API to read and process the results of your TESPy models.

Feisty Friday: omeof.solph v0.6.0

Without any public announcement, we shadow-dropped oemof.solph v0.6.0 last Friday (solph package 0.6.0 at PyPI, solph 0.6.0 changelog at GitHub). As yesterday was a public Holiday in Germany, this was an extra-bold move, breaking the dogma “never release on Fridays” in an extreme way. Seems like it wasn’t extra-stupid: Until now, nobody complained.

We decided to do this, as we believe it to be a rather stable release. We have cool new features (time-series aggregation and new result handling), but we marked them as experimental. The most noticeable change probably is the completely revised and reshaped documentation, which we tried to be more beginner-friendly than ever. Other changes include removal of API wrappers that allowed to still use old class names and keywords. Highlights of the release include:

Continue reading “Feisty Friday: omeof.solph v0.6.0”

Demandlib 0.2.2: VDI and BDEW25

If a rough estimate for energy demands is just good enough, standard load profiles can be handy. To easily generate these kinds of profiles, we have the “demandlib” in the oemof cosmos. This week, we released a new iteration that includes profiles as defined by the VDI (Verband Deutscher Ingeneure, Association of German Engineers) and the updated profiles by the BDEW (Bundesverband der Energie- und Wasserwirtschaft, German Association of Energy and Water Industries).

Continue reading “Demandlib 0.2.2: VDI and BDEW25”

New solph release: v0.5.4

We released two new versions of solph. One is a stable maintenance release (solph 0.5.4 at PyPIsolph v0.5.4 at GitHub), the other is a packaged preview for the next release (solph 0.6.0a1 at PyPI). In the actual release features the following changes:

  • Consistency
    • Allow sinks/sources to have multiple inputs/outputs
    • Allow lower limit for generic_integral_limit
  • Fixes
    • Display inline math correctly and hint towards the usage of the inbuilt slope and offset calculation methods (OffsetConverter)
    • Adapt to new Pandas API and fix warnings
    • Formulate full_load_time docstring specific for energy
  • Improvements “under the hood”
    • Introduce variable for storage losses
    • Replace _Sequence by _FakeSequence

We decided to have an alpha version packaged as well, which mostly changes the way storage_costs are considered. Before, we took into account every time step, which eventually leads to double weighting of the initial/last time step if the storage is balanced (i.e. first and last time step are the same). As the previous implementation wasn’t really broken in all cases, the new way is not strictly a fix. And as it will lead to different results compared to the previous implementation, the change shouldn’t be part of the v0.5 release. So, if you want to consider storage costs, this release is just for you.

Solph v0.5.3 has landed

Today, we released a new version of solph (solph 0.5.3 at PyPI, solph v0.5.3 at GitHub). It adds one important feature, the OffsetConverter now allows multiple inputs and multiple outputs. Still, it is mostly a maintenance release. As discussed in my thoughts on software maintenance, we are currently changing stuff “under the hood” to prepare for future changes. The decision to have a release was because we wanted to make sure that new installations do not have problems due to incompatible dependencies. As the latest versions of Pyomo and numpy are currently incompatible, we skipped a beta release. So in case you experience issues, please speak up.

Details on the new OffsetConverter can be found in the documentation. The component makes it possible to create a Converter with efficiencies depending on the part load condition. With the new formulation, the Flow with the NonConvex property is taken as reference, all other Flows are constrained with respect to this one. For consistence with “normal” Converters, the proportionality factor is called conversion_factor, while the offset to model part-load efficiencies is expressed as a normed_offset to facilitate investment optimisation.

solph v0.5.2: Next Network

Today, we had two new releases, oemof.network 0.5.0 (GitHub, PyPI) and oemof.solph 0.5.2 (GitHub, PyPI). The release of the first includes a lot of refactoring and cleaning. The code should now be a lot easier to understand and to maintain. We now use explicit keyword arguments also for network, so typos will be easy to find. Secondly, there is a (still experimental) API to get Nodes by label. At last, we now officially support an API to add Flows between existing Nodes. Using this API in solph, the Nodes might e.g. be Buses:

Continue reading “solph v0.5.2: Next Network”

oemof.network v0.5.0a5 released

At the last user meeting, we decided that there should be more pre-releases. So, here we go: Today, there is a version “continuous clean-up” of oemof.network (github.com: oemof-network/v0.5.0a5, oemof.network · PyPI). As the code name suggests, it is mostly a clean-up without adding new functionality. However, the code quality improved quite a lot and we have prepared the deletion of code that is unused or seems to be unnecessary. So, please check out this alpha release to tell if we are wrong.

Update: Deprecating the use of network.Source and others in favour of network.Node only makes sense when the latter is really part of the public API. so, we’re at v0.5.0 alpha 5 already.

solph v0.5.1: Compliant Converter

Today, oemof.solph v0.5.1, code name “compilant converter” has been released. (Package at PyPITag at GitHub). The most noteworthy addition is a new (still experimental) feature multi-period (dynamic) investment models. The code name refers to a small but maybe more evident change: The component Transformer is renamed to Converter. This is because people typically think of electrical devices when they hear the word “transformer”. However, as experienced users of our package know, the Transformer is neither meant to be (only) electrical nor bidirectional (as electrical transformers typically are). Thus, the more generic term “converter” is now used. (Note that we always had the argument “conversion_factor”.) To maintain compatibility for v0.5.0, there is a transitional wrapper that still allows to name the component “Transformer”. It will keep telling you about the upcoming change, though. Another usability feature is the presentation of the examples as part of the documentation. Also, we fixed error when calling oemof_installation_test as a console script. It turned out to confuse quite a few new users that it did not work as documented in the previous release.

We hope to have a fair balance between improvements in usability and new (experimental) features to make this an exciting release for all kinds of users. For us, it definitely is.

RC1 of solph 0.5.1

We have a release candidate for v0.5.1 (Package at PyPI, Tag at GitHub). There are some additions, but we also prepare for significant API changes that will come obligatory with v0.6. When upgrading from v0.5.0 to v0.5.1, there should be no changes required for you code. (This is not true if you use features that are explicitly marked “experimental”. Those may change without notice.)

Noticeable changes include:

  • The component Transformer is now named Converter.
  • You can now combine Investment and OffsetConverter.
  • Having energy stored in a GenericStorage can now have a cost.
  • You can now give an Investment object as the nominal_value. We considered this more intuitive than working with two mutually exclusive different keyword arguments.
  • Tons of improvements in the (still experimental) MultiPeriod optimisation.

Again, there are transitional wrappers, so nothing should break when updating from v0.5.0, using the new API should be voluntary (you get a warning) for now. It would be nice if you test if your solph v0.5 code still works with this RC. We are aiming for a final release of v0.5.1 by the end of August.