This is the changelog for MeteoIO release 2.7.0
Warning: this release introduces a new syntax for filters, data generators/creators, temporal interpolations and spatial interpolations, making it incompatible with previous ini files!!
Syntax changes
- The filters, DataCreators, DataGenerators, spatial interpolations and temporal interpolations now use "named arguments" (see issue 381 and related). This means that all configuration files have to be converted.
- Issue 358 (better control of detrending) had been pending for quite some time... It is now properly implemented with two new arguments: TREND_MIN_ALT and TREND_MAX_ALT
- There are now two new parameters to control an IDW spatial interpolation: a scale parameter and an alpha parameter. This is user-configurable and therefore implements issue 422.
- It is now possible to disable a data generator / creator for a given list of station IDs by using the "exclude" or "only" option. This is a solution to issue 352.
- It is now possible to enable/disable processing elements as a function of the station ID (with the "exclude" or "only" keywords).
Filters
- For the ADD and the MULT filters, it is now possible to use multi-columns corrections files and to specify which column should be used.
- The NOISE filter has been merged with Add and Mult, respectively. The syntax of these two filters has been changed and it is now mandatory to provide a "type" argument.
- The SUPPR filter now allows suppressing dates within given date ranges, one a per station basis.
- A new kind of filters has been created: on the timestamps themselves. Currently, there is an UnDST filter and a SUPPR filter.
- More options have been exposed for the IIR filter and its "type" now describes another option. The documentation has been expanded.
Spatial interpolations
- code cleanup and bug fix for the ILWR Eps algorithm (the vecMeteo was not read anymore)
- There were possibilities of using nodata in the computation of ILWREPS
- A small issue has been fixed: when using a fixed lapse rate with FRAC, the reported lapse rate is NOT the user provided rate, it is {data average}*{user rate}. If the data average is zero, the trend will now produce zeroes.
- A new option has been added to the SwRad spatial interpolation algorithm in order to project the radiation fields on the slopes (by default, they are on the horizontal).
- A new class has been implemented that performs multiple linear regressions.
- A new spatial interpolation algorithm has been added: NEAREST (it takes the value at the nearest station, for each pixel).
Data Generators
- Now, RSWR is NOT anymore used by default to compute ISWR in the AllSky and TauCLD generators, it must be forced with USE_RSWR (since it is not very per formant)
- When evaluating the cloudiness, it is important to know if it is night or day. If ISWR==nodata and use_rswr=false, this was not evaluated anymore, losing some important information (even if the albedo evaluation is very imprecise, at least it can be used to decide if it is night or day).
Optimizations & cleanup
- Small optimizations that should reduce the memory footprint
- Code cleanup: factorization, code reuse, between DataCreators and DataGenerators
- Changing the syntax of Config::findKeys() in order to make it more logical and more efficient, renamed it in Config::getKeys() for consistency
- Removing some illogical relics: the parameter that will be spatially interpolated is known since the constructor, so there is no need to read it again at each call. For more flexibility, it is given as string instead of index (so at some point, we will be able to interpolate non-standard parameters)
- Simplifying the prototypes of the spatial interpolation algorithms. When there is no need of a GridsManager or a Meteo2DInterpolator (as is most often the case), these are not provided to the constructor.
- The handling of detrending / retrending is now much cleaner, only one class is responsible for it.
- Making the Meteo1DInterpolator structure closer to DateCreator / ProcessingBlock, etc
- The serialization/deserialization methods have been re-written with more precise types (ostream and istream).
- In MathOptim, some minor optimizations.
- The handling of buffered DEMs was quite bad since it was requesting the recomputation of all DEM properties (slope, azimuth, etc) when requesting a DEM (this leads to a x200 speed up for some virtual stations cases)
- When using virtual stations, the DEM is now kept within Meteo2DInterpolator. This leads to another factor 2 speed up. The DEM slope, azimuth, etc are now computed in a more efficient way (the pixel values are retrieved differently if they are in the middle of the DEM or on the sides), leading to a ~20% speed up when reading and processing a DEM.
- In some cases (for example hourly data with hourly sampling rate requested), the i_date_down and i_date_up used to determine which spatial interpolations have to be requested for virtual stations would end up being the same, so the same interpolation was performed twice. This is now properly avoided.
Other bug-fixes and API extensions
- Fixed issue 607: now when using coordsys "LOCAL", it returns the EPSG code -999 and in the plugins making use of it (PSQLIO and SMETIO), this is properly handled.
- When playing with very little data and data creators / generators, there was a possibility for segfault (no data at all for a station -> segfault when attempting reading its metadata)
- Another bug in the handling of the virtual stations...
- When dealing with duplicate VSTATIONS, there was a possibility of segfault.
- Fixed a potential floating point exception
- The R2 coefficient of determination and the Nash-Suttcliffe coefficients have been implemented in libinterpol1D
- Matrix: Added a getNx() and a getNy() call (similar to grids, but valid indices are from 1 to Nx and 1 to Ny)
- The Buffer class now has a size() method that returns the number of stations it contains.
Plugins
- Necessary changes in order to be compatible with the latest version of the DBO api
- The Oshdio plugin has been cleaned up and can now read gridded data. An error message has been fixed.
- In NetCDFIO, when reading very small radiation values, the values are reset to zero.
- In NetCDFIO, proper support for grids written in the wrong order (urcorner instead of llcorner or anything in between). Please keep in mind that the reprojection strategy is still unsatisfactory when dealing with heavily distorted grids (ie at high latitudes or large domains). And when dealing with WRF grids, the precision is still quite low (known DEM features appear shifted and it is still not clear if the problems lies in MeteoIO or in WRF).
Build system
- One gcc option (Wvector-operation-performance) is only supported for gcc>=4.7.0 so it is now skipped when necessary
- Since auto_ptr is getting deprecated (although auto_ptr is valid c++98), replacing them by normal pointers.
- The NetCDF library was not found anymore by cmake, swapping to the latest FindNetCDF from VTK.
- An erroneous syntax prevented cmake from finding the FindMeteoIO from the standalone examples
Documentation & tools
- Added a small explanation (analogy) about libraries...
- ILWR Eps: The documentation has been expanded to highligh the fact that the provided lapse rate (if any) applies to EA, not ILWR! Reasonable values for an atmospheric emissivity lapse rate are provided
- Added the air pressure to the SMET specification
- Improved the documentation of the Grib plugin ( as well as minor cleanup)
- Normally, the smet_range script should now work on osX. The sampling rate computation could be wrong, this has been fixed
- The smet_extract.sh script can now show a summary of which fields are present in each smet file in the current directory. It now supports files with large headers
- The sme2kml script produces kml files with the list of available fields for each stations.
- A bug in data_converter when the number of stations changes over time has been fixed.
- Removing the warning on the use of HNW instead of PSUM (since now everybody should have noticed)
- Now when converting coordinates to UTM with an "invalid" zone (ie not the zone it should be), no warning will be printed (assuming that when this occurs, users actually don't have any other choice).
- The VSTATIONS_REFRESH_RATE parameter had an inappropriate default value.