Change log

This document provides an overview of the major changes between different "official" releases of oomph-lib.

As of 2016 (i.e. > the 1.0.* release) we include the svn revision number as part of the release identifier since this makes it easier for us to publish incremental updates to the library (and to do so more frequently than we used to!). Whenever such a new release is made available we automatically update the snapshot of the corresponding svn log which contains the commit messages of all changes made since "day one":

svn log [Note that this link will not work from a local installation of oomph-lib.]

[For historical reasons we also provide access to the complete log from our previous (non-public) svn repository. This covers all changes from the initial release of the library (svn revision 132) up to the move to the new public repository.]

You may also want to consult the entries in our (sadly rather under-used) bugzilla-based bug-and-feature-tracking system, accessible online at

http://oomph-lib.maths.man.ac.uk/bugzilla

for known bugs and their resolution.

The remainder of this document covers the following issues:



Policy on interface changes

We obviously try to avoid interface changes as much as possible as they may force users to adjust their code when upgrading to a new version. We will only change interfaces (names of objects and/or member functions, or the number or order of their arguments) if

  1. The previously chosen name turned out to be too ambiguous. For instance, the change from
    Problem::actions_before_solve()
    to
    Problem::actions_before_newton_solve()
    became necessary because of the addition of further nonlinear (but non-Newton) solvers (e.g. the segregated FSI solver). Since such solvers may call the Newton solver themselves, a more fine-grained control over what we mean by "solving" was required.

  2. The previously chosen name violated our own coding conventions. For instance,
    FiniteElement::n_nodal_position_type()
    had to be changed to
    FiniteElement::nnodal_position_type()
    because we do not want underscores after the leading "n" in an access function that returns the number of certain objects.

  3. The order of the function arguments violated our own coding conventions. For instance,
    FiniteElement::get_x(Vector<double>& s, const unsigned& t,...)
    had to be changed to
    FiniteElement::get_x(const unsigned& t, Vector<double>& s,...)
    because the discrete "time" argument always comes first.

Changes to function or object names are easy to detect because the compiler will not find the old version when linking against a new version of the library, encouraging the user to consult this list to (hopefully) find the appropriate replacement.

Changes to the order of function arguments can be very dangerous: if the order of two arguments of the same type is exchanged the compiler cannot detect the change to the interface but the code is likely to compute different results. To facilitate the detection of such changes, the new version of such functions contains an explicit warnings that can be enabled by compiling the library with the macro WARN_ABOUT_SUBTLY_CHANGED_OOMPH_INTERFACES. (For a gcc compiler this is done with the compiler flag -DWARN_ABOUT_SUBTLY_CHANGED_OOMPH_INTERFACES).

Here is an example of a function in which the order of the two unsigned arguments was changed. If compiled with WARN_ABOUT_SUBTLY_CHANGED_OOMPH_INTERFACES, the code will issue an appropriate warning every time this function is called.

// Function of two unsigned arguments whose order has changed
// since the previous release
void SomeClass::some_function(const unsigned& t, const unsigned& i)
{
[...]
#ifdef WARN_ABOUT_SUBTLY_CHANGED_OOMPH_INTERFACES
// Throw an oomph-lib warning to alert the user to the change
// in the order of the arguments
OomphLibWarning("Warning: Order of interfaces has changed",
"SomeClass::some_function(...)",
OOMPH_EXCEPTION_LOCATION);
#endif
[...]
}

Obviously, you should only compile the library with WARN_ABOUT_SUBTLY_CHANGED_OOMPH_INTERFACES if you encounter problems after upgrading to a new version.


Changes between version 0.9 and 1.0.*

Major new functionality

Have a look through the extensive list of example codes to see what else is available.

Changes between version 0.85 and 0.9

Major new functionality


Major interface changes



Changes between version 0.8 and 0.85

Major new functionality


Major interface changes



PDF file

A pdf version of this document is available.