Today we released VIC 5.0.0, a major upgrade to the VIC model infrastructure and the basis for all future releases of the VIC model. The new release is available from the VIC GitHub repository. Documentation is provided at on the VIC documentation web site.
Following this release, no further releases will be made as part of the VIC 4 development track except for occasional bug fixes to the support/VIC.4.2.d branch.
The VIC 5.0.0 release is the result of three years of concerted effort in overhauling the VIC source code to allow for future expansion and for better integration with other models. More details on individual model features will be provided on this web site in a series of posts over the next few weeks. Full details can be found on the VIC documentation web site and in the various issues that have been tracked on the VIC GitHub repository.
Note that the VIC 5.0.0 release includes many infrastructure upgrades, but that the model calculations provide the same results as can be obtained with VIC 4.2.d. This was a conscious decision to limit the number of simultaneous changes that were implemented in the source code.
Major changes in VIC 5.0.0 include:
a clean separation of model physics from the model driver: All model physics are now contained in a vic_run module and different model drivers, that manage input/output, initialization, memory allocation, all interact with the same vic_run module.
multiple model drivers: For historic reasons, VIC always ran in a time before space mode in which every model element (or grid cell) was run to completion before advancing to the next model element. While this had advantages, this mode made it much more difficult to interact with other models which use a space before time mode in which the entire model domain is completed for one time step. We have retained the original behavior as part of a classic driver and have implemented the space before time behavior as part of an image driver. We are also creating a CESM driver (which is currently still being tested) and have a python driver that can be used to test individual model functions.
netCDF file format: While the classic driver uses (nearly) the same ASCII format for input and output as earlier versions of VIC, all input and output in the image driver uses netCDF. This includes spatial model parameters, meteorological forcing data, model output and model state files.
exact restarts: When operated in image mode, the VIC model now has byte-exact restarts. That means that if you run the model in a single simulation, the results are exactly the same as when you run the model in shorter increments and restart each time from a model state file that was generated at the end of the previous simulation. Because the classic mode uses ASCII state files, restarts are not byte-exact, but the behavior has been much improved over previous versions of VIC.
parallelization: In classic mode (time before space), VIC could easily be parallelized by breaking the domain into separate pieces and running each piece on a separate processor and/or node. In image mode this is a less desirable solution. Although parallelization could be implemented that way, it reduces the advantages of having a space before time mode in which you may want to treat the entire domain as a single entity. The image mode therefore uses MPI to allow parallelization of the code over a large number of nodes or processors. We have run tests with VIC 5.0.0 in which we used more than three thousand processors.
separation of the generation of the meteorological forcings: We have removed the MTCLIM code that was used to estimate meteorological forcings at sub-daily time steps given limited inputs from the VIC source code. This means that the user will need to generate all the meteorological forcing data outside of VIC. This will likely be the single largest impact on users who are only interested in the classic mode and who would like to upgrade to VIC 5.0.0.
continuous integration and model testing: As part of the VIC GitHub repository all code changes are automatically subjected to a large number of tests. We currently use travis to automatically build and run the model on a number of different architectures and with a number of different compilers. As part of this, we also test model functionality in an automated manner. In addition, we have designed a science test suite which is run before model releases in which model output is compared with observations and previous model simulations to assess the effect of model changes in a large range of environments.
improved documentation: All documentation has been updated and is available on the VIC documentation page. Note that documentation for previous versions of VIC is available in the same location.
extensive code cleanup and reformatting.
We encourage everyone to upgrade to VIC 5.0.0 and to contribute to further model development.
You can report bugs and issues on the VIC GitHub repository.
If you have questions, please refer them to the VIC user mailing list.
Subscribe to this blog via RSS.