Table of Content

Brief changelog of Alpine3D-3.1.0

Bug fixes and new features

  • POI
    • Trying to get non-confusing information for the points of interest outputs: the enforced/measured snow height is now set to undefined.
    • When a soil temperature is requested (using the SOIL_TEMPERATURE_DEPTH key), the POI will also have a new column containing this soil temperature data in their SMET forcing files.
    • The stability parameters are now properly evaluated at the POI.
    • enabled writing out POI's sno files even when WRITE_SNOW is set to false (then they get written in METEO_PATH alongside the other POI files). This should be much more convenient to redo Snowpack simulations on POI without having to write all sno files.
    • Improved the POI SMET outputs to contain more helpful information.
  • Radiation balance
    • The radiation correction strategy has been changed: instead of corercting ONLY the direct component, the coefficient is now computed on the global radiation and applied on both direct and diffuse. Thus the impact of the splitting (which seems to be quite inaccurate) is reduced. This correction coefficient can now be limited to 0-1 since any measured radiation greater than potential global is very dubious.
    • using the atmospheric correction logic from mio::Sun() instead of the local one (ie making the code simpler) and relying or nodata checks done in meteoio instead of redoing them in RadiationField.
    • Finally, this is the implementation of issue 340: distributed cloudiness (through atmospheric loss factor and splitting coefficient). This mostly follows the lines of what has been recently implemented in MeteoIO with a few tricks to perform domain decomposition when running in parallel (either MPI or OpenMP).
    • small bug fix in EnergyBalance (more useful error message to help debug simulations)
  • Parallelization
    • The MPIControl class has been extended to provide the size of the OpenMP world...
    • The MPI version had a problem when gathering gridded data that lead to a stalled simulation. This has been fixed by having all workers gather the requested data and only the master writing it out.
    • Fixed a (tricky) bug that prevented running mixed OpenMP/MPI simulations.
    • A bug has been found (and fixed!) in the handling of nighttime radiation fields when running with MPI
  • Outputs handling
    • Finally, the output grids are now specified in the io.ini, such as "GRIDS_PARAMETERS = HS ALB TSOIL TSS TA RH ISWR" in the [Ouput] section. The parameters belong to SnGrids as defined in SnowpackInterfaceWorkers.h. Each module provides SnowpackInterface with the list of grids it will need.
    • Added the possibility to save the runoff grids in netCDF
    • there was a bug/feature regarding the sno files output handling: SNOW_DAYS_BETWEEN was an int instead of double. This has been fixed for more flexibility.
    • Now writing out a backup of the ini file in the meteo output directory
  • Snowdrift
    • small bug fixes for snowdrift
    • Small fixes to improve user friendliness and speed up (a little bit) snowdrift by avoiding computing drift when there is no snow to drift...
    • Small hack to make it easier to write out snow drift fluxes
    • Added a define to run snowdrift without computing the saltation (it is then highly recommended to also turn off the sublimation!)
  • No-compute dry runs
    • When running with "--nocompute", it now checks the forcing parameters and output various benchmarks to help find out potential problems: monthly sums for various parameters, out of range data, lapse rates, etc
    • It has been extended in order to help calibrating the glacier katabatic flows correction. This is far from perfect, but it is a start...
  • Katabatic flows correction
    • The "improvements" to the katabatic flows corrections by (Ayala et al., 2015) have been implemented (the previous version is still kept since it works generally better).
    • added the ability to scale the flow reach in the katabatic flow modeling
    • Created a small piece of code to test/calibrate the glacier katabatic flows correction.
    • lowered the thresholds to turn on the katabatic flows correction
    • a logic bug was found when handling dynamic glacier masks: the mask was only refreshed when doing the outputs. Now it is refreshed at each time step and properly provided to Glaciers (otherwise it was providing a default, no glacier mask and therefore the katabatic flow correction was never activated).
    • The criterias used in checkKatabaticFlows have been changed in order to now count the number of snowfree cells outside the glacier and the number of glacier cells experiencing proper conditions for katabatic flows. The code has been modified to better handle nodata cells in the domain: now glaciated cells are marked with 1, non-glaciated with 0 and nodata remain nodata.
  • Others
    • Otherwise, small fixes for warnings found with CLang on osX, including a true bug.
    • Fixing a small issue when using the runoff module: the default value of the THRESH_RAIN key was not properly handled.
    • Two bugs have been found: when using "LOCAL" coordinates on a large domain, the projection error compared to usually provided cartesian systems can grow a little too large. Therefore, now by default the cartesian coordinate system that is chosen is the one from the DEM and "LOCAL" can only be enabled with a key.
    • The tests uncovered a bug that got fixed by sheer luck in one of the lasts commits: when using Snowpack with Canopy, the forcing meteo data will be changed for below canopy values. If Snowpack is called multiple times within an Alpine3D time step, these changes will be performed at every sub-time step (ie correcting data that had already been corrected) leading to an underestimation of the radiative fluxes. The same will also happen with precip. This has been fixed by passing currentMeteo to runSnowpack() by copy (as changed in Snowpack itself).

Documentation and tools

  • Small improvements in the documentation and run information messages
  • A basic example is now provided (Stillberg).
  • Small improvements in the run script (so it can use a version of alpine3d from the PATH).
  • Slightly improved log output in order to better show how many processes and how many threads are running
  • The "meteofields" command line flag is not necessary anymore since this is the usage of snowdrift that dictates how the fields have to be generated
  • Fixing some small usability issues
  • better error messages, better initialization
  • Updated the pt_extract "rescue" tool to fit the more recent MeteoIO (this was quite old). It is far from being user friendly but at least it is now usable after reading the explanations given at the begining of the file.
  • Added some documentation (specially about how MPI could end up being misconfigured and running very slowly).
  • Much more flexible script, it can now be called from anywhere and should properly find its associated jar file.
  • Repackaging the grid viewer: everything now comes in a single jar file
  • When reading the sno files, the date of creation of their top layer is compared with the simulation start date to detect layers "in the future"

Code cleanup

  • adjusting to the latest Snowpack and MeteoIO changes
  • More flexibility for the two new keys ADJUST_HEIGHT_xxx: if they have already been defined by the user, they will be kept unchanged. Otherwise, a proper default value for Alpine3D is set.
  • Mostly code cleanup and more consistent information messages
  • This is a big code cleanup: the "TYPE_DOUBLE2D" has been removed (it was only an alias) and the definitions from Alpine3D.h moved into AlpineMain.h so Alpine3D.h is now a proper include for "library" usage.
  • Converted some Array2D<> to grid2DObjects for consistency.
  • Trying to address some of the "HACKS", removing dead code
  • All modules should now be able to declare which grids they need, provide a timer and be constructed and managed from AlpineMain / AlpineControl.
  • Some deprecated methods have been removed.
  • Finally the old(!) LegacyIO is gone from snowdrift. It now calls the ARPSIO plugin from MeteoIO that has been significantly improved in order to properly read 3D grids.
  • replacing some Snowdrift methods by equivalent MeteoIO ones.
  • code cleanup, removing obsolete/messy things
  • removing some partially dead code (ie it does something but the results are never used)
  • In order to mave closer to the "efficient c++" recommendations, several changes have been made in the rest of the classes (mostly defining a few copy constructors and "=" operators).
  • In RadiationField, the horizon is now computed by calling the matching MeteoIO method from DEMObject (that is exactly the same as the previous method).
  • Since there is no meteo1d object anymore, Snowdrift had to be modified so it can extract what it needs from a vector of MeteoData.
  • Adding missing standard includes that used to be provided by overzealous MeteoIO includes...
  • Fixed some warnings ebalance, disbaled the Weffc++ and Wconversion warnings and removed the horiz2sloep / slope2horiz constants in SNowpackInterfaceWorker since SnoStation already has a cos_sl constant
  • Adding an include that was missing on Windows
  • Code cleanup: making the radiation station handling clearer and making the "nocompute" handling clearer

Build system, packaging

  • fixed Clang warnings
  • Fixing the version macro so it also works for Xcode
  • A very small simulation has been setup to use as nightly test with CTest.
  • Added a "basics" test like in Snowpack to make it easier to figure out what is wrong when the simple simulation sees some changes
  • The new way of setting the compiler options has been imported and tweaked from meteoIO
  • swapped the linking order of Snowpack and MeteoIO in order to easily allow to use a system-wide MeteoIO with a locally installed Snowpack
  • Porting the necessary options to deal with OCCI from Snowpack to Alpine3D
  • cleaning up the build system to make it more similar to Snowpack and MeteoIO
  • After wasting a few hours trying to figure out how to get rid of the confusing (and unused) "EXECUTABLE_OUTPUT_PATH" variable, it turned out this was only triggered by enabling the compatibility with a (very) old version of cmake...
  • Improving the detection of Snowpack (same FindLibsnowpack as comitted in snowpack)
  • Improving the packaging
  • Add a manifest file to easily upload releases

Created: 2 months 10 days ago
by Mathias Bavay

Updated: 2 months 9 days ago
by Mathias Bavay


Old Revisions