OpenPNM version 2.8 is now available

Actually 2.8.1 if you're counting closely

We realized that a version 2.8 was required, despite announcing that 2.7 would be the last of the Version 2 series. The reason for this unplanned update was to ensure that the officially available version of OpenPNM (now 2.8.1) was compatible with the current version of PoreSpy (2.0.2). When PoreSpy V2 was released a few weeks ago we changed some of the network extraction functions, including what data was returned by the new `snow2` algorithm. This change meant that versions of OpenPNM and PoreSpy on PyPI were not fully compatible, which is clearly not an acceptable state of affairs. So, it was decided to push a fix to the `PoreSpy` IO class in OpenPNM to work with the output of `snow2`. There were also a few other changes on the dev branch that we were planning to include in the upcoming version 3, but decided to include them in the 2.8 release, such as the ability to export to the Statoil format, support for PyCuda’s new ‘cg’ solver, and a flexible Phase object generator that accepts a CAS number as argument. A full list of changes to the 2.8.0 release can be found on the changelog at Github.

Work will now continue in earnest on OpenPNM V3, which will probably take many months. The main breaking change we expect to make is how numerical solvers are initiallized and called, following a workflow something like this:

solver = op.solvers.RKF45(settings)
alg = op.algorithms.TransientFickianDiffusion(...)

With this new approach, inspired by Julia’s DifferentialEquation library, we can provide better support for more sophsisticated transient solvers (i.e. RKF45, and scipy’s solve_ivp).

Aside: On another note, the 2.8.0 version did not make it to PyPI, so we had to release a 2.8.1 version to remedy this. The problem arose because about a year ago we accidentally created a version 2.8.0 on PyPI, which we promptly deleted. However, for good reasons PyPI does not let people push new code to an existing release, even a deleted one, so we had to create a 2.8.1 release (which actually included 2 bugfixes) and redeploy to PyPI.