VIC 5.1.0 (December 14, 2021)
This is a maintanence release that includes numerous bug fixes and a few model enhancements. All code changes were included in the two release candidates (5.1.0.rc1 and 5.1.0.rc2). See the notes below from the two release candidates for more details.
Announcements
- VIC is now shared under the MIT license (GH#917).
- Travis-CI was disabled folling the platform's migration to travis-ci.com. See GH#919 for more details (GH918).
VIC 5.1.0 rc2 (September 28, 2020)
Bug Fixes:
-
Fixed datetime handling bug in unit test module (GH#796)
-
Removed descriptions of forcing disaggregation options from documentation of classic driver global parameter file (GH#831)
-
Removed descriptions of forcing disaggregation options from documentation of image driver global parameter file (GH#833)
-
Fixed segmentation fault in lake model caused by incorrect passing of pointer argument to
vic_run()
. (GH#826 -
Relaxed some of the validation of lake parameters, to allow them to be null in cells containing no lakes. (GH#826
-
Fixed passing of lake data structures to
generate_default_lake_state()
. (GH#826 -
Separated the dimensions of arrays related to lake basin shape and of arrays related to the number of lake simulation layers. (GH#826
-
Added global parameter option to set the maximum number of (dynamic) lake simulation layers. (GH#826
-
Fixed bug causing ET to be 0 in pure bare soil tiles. (GH#823
VIC 5.1.0 rc1
Release date: (April 27, 2018)
Source code is available here:
This is a minor update from VIC 5.0.1. The VIC 5.1.0 includes new features, such as a new streamflow routing extension and extended parallelization using OpenMP. The release also includes a number of bug fixes for the CESM driver. See the VIC Github page for more details on the changes included in this release.
Model enhancement:
-
Improved calculation of drainage between soil layers (GH#656)
Drainage from upper layer to adjacent lower layer is calculated according to Brook & Corey curve (where drainage rate is a function of upper-layer soil moisture). In previous versions, a simple numerical solution is applied which uses the timestep-beginning upper-layer soil moisture to calculate drainage rate, and assume this constant rate over the entire timestep. This can cause unreasonably large drainage if the curve has a steep shape and when soil moisture is high. Now, the current version uses exact integral (instead of numerical solution) for layer drainage calculation.
-
Fixes for the CESM driver
- Using correct fill value datatypes in MPI Gather steps
- Updated state file name time step to be period-ending rather than period-beginning
- Set the state file name to the RASM case ID
- Removed decimal point for missing values for unsigned integers
- Create dummy forcings when initializing the model (so that there is forcing data for the first time step)
- Changed pressure units from kPa to Pa
- Fixed bug that prevented using the correct local domain grid cells in
cesm_put_data.c
- Changed reference temperature units from Celsius to Kelvin in
cesm_put_data.c
- Fix sign for latent heat fluxes passed from VIC to the coupler
- Fix sign for longwave radiation passed from VIC to the coupler
- Changes names of CESM driver functions
trim
andadvance_time
totrimstr
andadvance_vic_time
, respectively, to avoid conflicts with WRF functions with the same names when compiling RFR case.
- Fixes Julian day for the first timestep in the dmy struct for the CESM driver.
- Refactor the cesm_put_data.c routine in the CESM driver to use values from out_data directly, rather than computing them separately in cesm_put_data.c.
- Fixes initialization of coupler fields and calculates temperature and upwelling longwave to pass to WRF during initialization.
- Updates the cesm_put_data.c routine in the CESM driver to pass gridcell-averaged albedo to the coupler.
- Updates the cesm_put_data.c routine in the CESM driver to include the correct units for evap passed to the coupler.
- Updates the cesm_put_data.c routine in the CESM driver to include the correct units for sensible heat flux and updates the rofliq calculation to be correct (previously only OUT_BASEFLOW was being divided by global_param.dt).
- Updates the cesm_put_data.c routine in the CESM driver to include the correct signs for turbulent heat fluxes and evaporation. Previously we had switched the signs to agree with the image driver and they should instead be in accordance with the sign conventions for coupled models, which differ from those of land surface models. Also, eliminate populating the
l2x_Sl_ram1
field with aero_resist to agree with the VIC 4 implementation in RASM.
- Updates the cesm_put_data.c routine in the CESM driver to include the correct signs for the wind stresses and fixes a bug in calculating friction velocity (previously it was missing a square root).
- Updates the cesm_interface_c.c routine to include missing timers and the VIC RUN timer in the CESM driver.
- Updates the cesm_interface_c.c routine in the CESM driver to populate the nrecs, endyear, endmonth and endday fields in the global_param struct to make them available to vic_finalize for timing tables (specifically the secs/day columns).
- Updates the default namelist settings for the CESM driver to include output filenames consistent with the RASM naming conventions, default thermal nodes to 10,
FULL_ENERGY
toTRUE
, and sets defaults for daily and monthly mean output.
- Updates the default output variables for the CESM driver. Also updates the VIC5 parameter file location to be the RASM inputdata directory and updates the name of the VIC5 parameter file to the new VIC5 parameters.
- Adds support to the CESM driver for 25km resolution RASM runs.
- Adds initial state files to default 50km and 25km builds so that these are used by other groups running RASM rather than VIC5 starting up from a clean start.
- GH#880
--Adds option STATENAME_CESM to the option_struct so that statefiles in the CESM driver can be in accordance with RASM naming conventions for model components.
-
Speed up NetCDF operations in the image/CESM drivers (GH#684)
These changes speed up image driver initialization, forcing reads, and history writes by only opening and closing each input netCDF file once.
-
Added two new timers to measure time in I/O operations (GH#703)
These two timers count the CPU and WALL time spent in
vic_force
andvic_write
. The accumulated time from these timers is printed out at the end of each simulation in the timing table. See also GH#442. -
Added gridcell-averaged albedo (STATE_AVG_ALBEDO) as a state file variable (GH#712)
This is for use in the CESM driver for VIC to pass to WRF, but has been implemented in the core structure of VIC (in vic_run) for consistency with the classic and image drivers. Running VIC from a cold start now also includes calculation of gridcell-averaged albedo.
-
Cleanup of the initialization sections of the
image
andcesm
drivers (GH#701)Codified behavior in the initialization of the
image
andcesm
drivers that requires the parameter variablesAreaFract
,Pfactor
,zone_fract
, andCv
must sum exactly to 1.0. If using theSNOW_BAND
option, the area weightedelevation
must match the mean grid cell elevation (elev
). VIC will print warnings if any of these criteria are violated. -
Added thread parallelization using OPENMP (GH#712)
The VIC image and CESM drivers now may be optionally compiled with OPENMP to enable shared memory thread parallelization. This option should improve the parallel scaling of these drivers by reducing the number of MPI messages and increasing message size.
-
Added streamflow routing extensions ROUT_STUB and ROUT_RVIC for the VIC image driver (GH#231)
The VIC image driver can be optionally compiled with ROUT_RVIC to enable routing in image mode (ROUT_STUB is the default extension which means no routing). With ROUT_RVIC enabled, the output variable
OUT_DISCHARGE
is available, and there will also be an extra state variableSTATE_ROUT_RING
stored in the state file. -
Moved MAX_ITER_GRND_CANOPY, which controls the maximum number of ground-canopy iterations in CLOSE_ENERGY mode for vegetation types with an overstory, to the parameters struct (GH#771)
Previously this was set in the surface_fluxes.c numerics routine for ground-canopy iterations, which meant that that routine had to be altered to change the maximum number of iterations. It has now been moved to the parameters struct so that it can be overriden in the constants file.
-
Updated new snow density function by adding a cap to new snow density that is set in the parameters struct by the parameter SNOW_NEW_SNOW_DENS_MAX (GH#776)
Previously the change in cold content of the snowpack term (deltaCC in the snow_data_struct) would get unreasonably large if the Hedstrom and Pomeroy 1998 equation used to calculate snow density, which depends only on air temperature, was calculated with air temperatures above about 2 deg C. We use this term to calculate the ground flux from the snowpack and snow depth, which resulted in extremely small snow depths and unreasonably large ground fluxes from the snowpack (and thus changes in snowpack cold content). Now there is a cap on new snow density with the new parameter SNOW_NEW_SNOW_DENS_MAX as well as a snow depth below which we disregard the ground flux from the snowpack (1.e-8).
-
Added new option BULK_DENSITY_COMB that enables soil bulk density (mineral and organic) to be read from the parameters file (GH#817)
The option BULK_DENSITY_COMB enables soil bulk density (mineral and organic) to be read in as a parameter when the option is set to true in the global parameter file. Default is false.
-
Turns on
ORGANIC_FRACT
option that previously existed in VIC 4 and enables theBULK_DENSITY_COMB
option to be used in conjunction with it (GH#837)The option
ORGANIC_FRACT
, if set to True, means that the organic fraction of the soil, soil density of the organic matter, and bulk density of the organic matter (ifBULK_DENSITY_COMB
is set to false) will be read in from the parameter file. IfBULK_DENSITY_COMB
is set to True, the bulk density of the organic matter will not be read in separately. Default is false. -
Added new option
MAX_SNOW_ALBEDO
that enables new snow albedo to be read in from the parameters file (GH#835)The option
MAX_SNOW_ALBEDO
, if set to true in the global parameter file, means that new snow albedo will be read in from the parameter file and used in the snow routines for all vegetation types except for bare soil. -
Miscellaneous clean-up:
- Added support for veg_hist forcings (non-climatological) in image mode
- Fixed erroneous allocation of extra veg tile in image mode
- Simplified looping over veg tiles and bands in vic_run() and prepare_full_energy()
- Replaced lengthy data structures with local pointers in vic_run()
- Simplified out_prec, out_rain, and Melt arrays
- Updated names of variables and options for LAI and FCANOPY in documentation to match their new names in the code
- Removed constants MAX_VEG and MAX_BANDS from code; all arrays that were declared with those lengths were replaced with dynamic allocations. This allowed for specification of veg libraries containing more classes without recompiling the code, and more efficient memory usage.
- Improved logic in computing soil evaporation (esoil), primarily in func_surf_energy_bal(), by creating explicit terms for transpiration (transp) and esoil in the layer data structure.