Changelog2 1 0
This is the changelog for MeteoIO release 2.1.0
- speed improvements
- bug fixes (non-consistent indexes for extra parameters - some dates keeping hour=24 instead of 0 of the next day - possible arithmetic exception when computing the distance between two identical points - possibilities of un-released file descriptors)
- new (convenient) restart() method for the timer class
- buffer centering can be configured: how much time before and after the data point that triggers a rebuffer (as a fraction of buffer length or as a fixed time interval).
- a new method has been implemented to push some data into the IOManager. This allow other software to inject their data into the IOManager and get it processed as if it would be coming from a plugin.
- a (basic) merge method has been implemented for Coords, StationData and MeteoData. This is usefull when getting data from several networks that run different measurements on the same location, in order to put everything back into a single object.
- a few more atmospheric methods have been implemented. The emeissivity methods have been cleaned up for consistency. They now read a different set of parameters. Please check your code!!
- a plugin to read/write to the MeteoSwiss CosmoXML format has been implemented
- more consistent naming of plugin parameters in the io.ini. Plugins reading files now use a METEOPATH parameter for locating the files.
- the min, max and min-max filters were not properly handling their "soft" keyword. This has been fixed.
- the SMET plugin was not properly reading snow heights. The units offsets and multipliers have now a different priority (therefore, you need to update your files if your were using them both for the same parameter).
- the variance computation was using a naive algorithm. It now uses a (slower) compensated formula to avoid catastrophic cancellation.
- the Tukey filter is back. Forget using it for snow heights, it can not work... (snow height might show null variance, which can not work for Tukey).
- the rate filter can now take 2 arguments: a climbing and a descent rate.
- a very primitive indexing has been implemented in some plugins (namely, GeoTop, SNIO and SMETIO). This offers up to 30% speed gains in some cases.
- 2 segments linear fit (with fixed inflection point) implemented (but not easily user-configurable) that can be called by some specific interpolations algorithms.
- interpolations of wind velocities could lead to negative values... such values are now brought back to 0.
- an algorithm for incoming long wave radiation has been implemented that interpolates the emissivity as a proxy variable and then reconverts to ILWR.
arrays and grids
- 2D layers can be extracted from 3D grids
- convenient assignement operators for arrays (example: mygrid = 2.; will fill the grid with two's)
- more methods and operators have been implemented to the Grid objects, so that they behave like Arrays (size() operator, direct access by indexes). This should make it much easier to switch between arrays and Grids in user code.
- new operators for arrays: absolute value, cell count.
- the nodata handling strategy was not satisfying for arrays (the aritmethic operators were NOT handling nodata). Now, a setter allows deciding how nodata would be handled (ie: as nodata or as any other number) and every method follows it.
- the backtrace generated on Linux is now greyed out in terminals supporting colors. This is less scarry to the end user.
- lots of error messages have been improved for clarity.
- the code now works on Windows. A few methods have to be re-implemented for Windows, some had to be tweaked to be more portable. Lots of warnings (mostly about unsigned types) have been found and fixed.
- the library can be successfully built and packaged with Visual C++ or Code::Blocks on Windows. The documentation is properly built (but you need at least doxygen, if possible also latex and ghostview to build it). Cmake offers several compilations strategies (safe, optimized) that set various flags for different compilers in order to match the chosen strategy.
- instead of offering MeteoIO in a standalone parallel object, we now rely on the caller to decide how to create his objects. This prevents having tens of unnecessary objects hanging out only because a true parallel object needed to call one MeteoIO method...
- we already had a method for extracting an array out of another array (subset), we now have a method for re-assembling arrays (filling an array with smaller ones). IOUtils also offers a method to compute indices for splitting a given array between workers. The caller can now get its indices from IOUtils, split the array by calling a subset method or constructor, process the sub-arrays, then re-assemble the whole array by calling a fill on the main array.
Last update: June 17, 2022