Releases: UW-Hydro/VIC
Release of VIC.4.2.a
Description of changes between VIC 4.2 and VIC 4.2.a
Bug Fixes:
Fixed unitialized bare soil albedo.
Files Affected:
full_energy.c
Description:
Previously, bare_albedo was unset for the bare soil case (`iveg!=Nveg`).
This fix sets the bare_albedo to the global variable value of
`BARE_SOIL_ALBEDO`.
Cleanup of frozen soil option constraints.
Files Affected:
calc_surf_energy_bal.c
get_global_param.c
Description:
Removed hardcoded, behind the scenes checks for the `EXP_TRANS` and
`NO_FLUX` global parameter values for case of `QUICK_SOLVE=TRUE` in
`calc_surf_energy_bal`.
Release of VIC.4.2
Description of changes between VIC 4.1.2 and VIC 4.2
New Features:
Added partial vegetation cover (within each tile).
Files Affected:
alloc_veg_hist.c
calc_veg_params.c
display_current_settings.c
full_energy.c
func_surf_energy_bal.c
get_force_type.c
get_global_param.c
global.h
initialize_atmos.c
initialize_global.c
initialize_veg.c
output_list_utils.c
put_data.c
read_atmos_data.c
read_forcing_data.c
read_veglib.c
read_vegparam.c
solve_snow.c
surface_fluxes.c
vicNl_def.h
vicNl.h
Description:
Added a time-varying (non-climatological) partial vegcover fraction
within vegetated tiles. Previously, vegetation was assumed to
cover 100% of the land surface in a vegetated tile (i.e., "big
leaf" scheme). This assumption is not valid in general, and in
particular becomes very inaccurate in arid environments (e.g., open
shrublands), or as LAI decreases to near 0. In such cases,
evaporation from bare soil between the plants becomes a major (or
dominant) component of total evapotranspiration.
This partial veg cover fraction ("vegcover") is treated the same way
as LAI and albedo: new options (VEGCOVER_SRC and VEGPARAM_VEGCOVER)
tell VIC whether the veg param file contains 12 climatological
vegcover values and whether to use those or the ones in the veg
library. A new forcing variable ("VEGCOVER") can be included in
forcing files along with LAI and albedo, and must be specified in the
global parameter file in the same way. There is an additional option
controlling whether VEGCOVER values appear in the veg library file:
VEGLIB_VEGCOVER. FALSE by default, if TRUE it tells VIC to expect 12
monthly VEGCOVER values in each veg class, after the 12 LAI and before
the 12 albedo values.
Internally, VIC uses the partial vegcover fraction to divide each veg
tile into the area covered by plants and the area in between the
plants. LAI and canopy moisture and snow storage are rescaled by
1/vegcover to get plant-specific values before canopy evap,
transpiration, and canopy snow dynamics are computed (vegcover is not
allowed to go below the value MIN_VEGCOVER in vicNl_def.h). Bare soil
evap is computed for the bare soil component of the tile. Total
evapotranspiration is computed as the area-weighted sum of canopy evap
and transpiration from the vegetated fraction and bare soil evap from
the bare soil fraction. Finally, LAI and canopy moisture storage are
rescaled back to the tile-area-average values before output.
Added non-climatological time-varying veg parameters.
Files Affected:
alloc_veg_hist.c (new)
calc_surf_energy_bal.c
canopy_evap.c
display_current_settings.c
full_energy.c
func_surf_energy_bal.c
get_force_type.c
get_global_param.c
initialize_atmos.c
initialize_global.c
initialize_veg.c
Makefile
output_list_utils.c
penman.c
put_data.c
read_atmos_data.c
read_forcing_data.c
read_veglib.c
read_vegparam.c
snow_intercept.c
solve_snow.c
surface_fluxes.c
vicNl.c
vicNl_def.h
vicNl.h
Description:
Added ability to read timeseries of LAI and albedo as forcing
variables. In addition, climatological albedo values can now be
given in the veg parameter file in a similar manner to LAI.
These changes involved adding a new veg_hist data structure to
contain the timeseries of LAI, Wdmax, and albedo, as well as
adding LAI, Wdmax, and albedo variables to the veg_var structure
to store the current values of these variables.
To allow for climatological albedo values to be specified in the
veg parameter file (similar to LAI), a new option has been introduced:
ALB_SRC. The constants LAI_FROM_VEGPARAM and LAI_FROM_VEGLIB have
changed name to FROM_VEGPARAM and FROM_VEGLIB so that they can be
used to specify the source of either variable.
VIC now handles LAI and albedo as follows:
1. If specified as a variable in one of the forcing files, the
values from the forcing file will be used in the simulation instead
of the values in the veg parameter or veg library files.
2. If not specified as a variable in one of the forcing files,
values will be taken from the veg parameter file if a) they are listed
there and b) LAI_SRC (for LAI) and/or ALB_SRC(for albedo) are set to
FROM_VEGPARAM.
3. If not supplied as a forcing and [EITHER not listed in the veg
parameter file OR listed there but LAI_SRC or ALB_SRC is set to
FROM_VEGLIB], values will be taken from the veg library.
New forcing variables for carbon cycle.
Files Affected:
alloc_atmos.c
compute_coszen.c (new)
get_force_type.c
initialize_atmos.c
Makefile
mtclim_constants_vic.h
mtclim_vic.c
mtclim_wrapper.c
output_list_utils.c
put_data.c
vicNl_def.h
vicNl.h
write_forcing_file.c
Description:
Added the following new input forcing variables (used for simulations
of carbon cycle processes):
CATM: Atmospheric CO2 mixing ratio [ppm]
FDIR: Fraction of incoming shortwave that is direct [fraction]
PAR: Photosynthetically active radiation [W/m2]
These variables are optional; if not supplied as forcings, VIC will use
default values for them, as follows:
CATM: Value of CatmCurrent defined in vicNl_def.h
FDIR: Value computed by MTCLIM module
PAR: SHORTWAVE*SW2PAR, with SW2PAR defined in vicNl_def.h
Similarly, added the following new output variables:
OUT_CATM: (equals CATM)
OUT_COSZEN: Cosine of the solar zenith angle, computed by MTCLIM module
OUT_FDIR: (equals FDIR)
OUT_PAR: (equals PAR)
Added simulation of photosynthesis.
Files Affected:
calc_Nscale_factors.c (new)
calc_surf_energy_bal.c
canopy_assimilation.c (new)
canopy_evap.c
display_current_settings.c
faparl.c (new)
free_dist_prcp.c
free_vegcon.c
full_energy.c
func_canopy_energy_bal.c
func_surf_energy_bal.c
get_global_param.c
initialize_global.c
initialize_veg.c
Makefile
make_veg_var.c
output_list_utils.c
penman.c
photosynth.c (new)
put_data.c
read_soilparam.c
read_veglib.c
read_vegparam.c
snow_intercept.c
solve_snow.c
surface_fluxes.c
vicNl_def.h
vicNl.h
Description:
Added simulation of photosynthesis. The photosynthesis formulation was
taken from the BETHY model (Knorr, 2000), which in turn used the Farquhar
model for C3 plants and the Collatz model for C4 plants. In addition,
inhibition of photosynthesis under saturated conditions (as described
by Frolking et al, 2002) is allowed for.
This feature requires several new veg parameters to be in the veg
library file:
Ctype: Photosynthetic pathway; can be C3 or C4
MaxCarboxRate: Maximum carboxlyation rate at 25 deg C (mol(CO2)/m2s)
MaxETransport: Maximum electron transport rate at 25 deg C (mol(CO2)/m2s) (C3 plants)
CO2Specificity: CO2 specificity at 25 deg C (mol(CO2)/m2s) (C4 plants)
LightUseEff: Light-use efficiency (mol(CO2)/mol(photons))
NscaleFlag: TRUE = nitrogen-scaling factors are applicable to this veg class
Wnpp_inhib: Moisture level (fraction of maximum moisture) above which photosynthesis experiencing saturation inhibition, i.e. too wet for optimal photosynthesis; only applies to top soil layer
NPPfactor_sat: Photosynthesis multiplier (fraction of maximum) when top soil layer is saturated
There are several new output variables associated with this feature:
OUT_GPP: Gross primary productivity [g C/m2d]
OUT_RAUT: Autotrophic respiration [g C/m2d]
OUT_NPP: Net primary productivity [g C/m2d]
OUT_APAR: Absorbed PAR [W/m2]
By default, this feature is turned off. To turn this feature on, set
CARBON to TRUE in the global parameter file.
When this feature is turned on, you can choose to compute stomatal
resistance via the Jarvis formulation (the formulation used by all
previous versions of VIC) or as a function of photosynthetic demand.
This is determined by the setting of RC_MODE in the global parameter
file. A value of RC_JARVIS (which is the default) selects the Jarvis
formulation. A value of RC_PHOTO selects the photosynthetic demand
formulation.
Added simulation of soil carbon storage and fluxes.
Files Affected:
compute_soil_resp.c (new)
full_energy.c
initialize_lake.c
initialize_soil.c
initialize_veg.c
LAKE.h
lakes.eb.c
Makefile
output_list_utils.c
put_data.c
read_initial_model_state.c
soil_carbon_balance.c (new)
surface_fluxes.c
vicNl_def.h
vicNl.h
write_model_state.c
Description:
Added simulation of soil carbon storage and fluxes. This formulation was
taken mostly from the LPJ model (Sitch, 2003), which in turn used a
Lloyd-Taylor model for the dependence of soil respiration on soil
temperature. The dependence of soil respiration on soil moisture was
based on the formulation of Yi et al (2012) but modified to allow a small
respiration rate under saturated conditions.
At this point, we do not simulate the storage of carbon in living biomass.
Therefore, the flux of carbon into the soil (litterfall) is set equal to
the total NPP of the previous calendar year, spread evenly over the current
year. As in the LPJ model, soil carbon is stored in 3 pools: litter (fast),
intermediate, and slow; with associated turnover times of 2.86 y, 33.3 y, and
1,000 y, respectively. Litterfall enters the litter pool. Carbon exits the
litter pool through respiration (RhLitter). A fraction (fAir) of this
respired carbon is in the form of CO2 and is vented directly to the atmosphere
(RhLitter2Atm). The remainder is sent to the intermediate and slow pools
in the proportions fInter and (1-fInter), respectively. These pools also
respire carbon, which is assumed to be in the form of CO2 and vented directly
to the atmosphere.
There are several new output variables associated with this feature:
OUT_RHET: Total heterotrophic respiration vented to the atmosphere
(= RhLitter2Atm+RhInter+RhSlow) [g C/m2d]
OUT_NEE: Net Ecosystem Exchange (= NPP-RHET) [g C/m2d]
OUT_LITTERFALL: Flux of carbon from living biomass into litter pool [g C/m2d]
OUT_CLITTER: Carbon density in the litter pool [g C/m2]
OUT_CINTER: Carbon density in the intermediate pool [g C/m2]
OUT_CSLOW: Carbon density in the slow pool [g C/m2]
This feature is part of the carbo...
Release of VIC.4.1.2.m
***** Description of changes from VIC 4.1.2.l to VIC 4.1.2.m *****
Bug Fixes:
Fixed negative liquid soil moisture for bare soil conditions
Files Affected:
runoff.c
Description:
Previously, runoff() only checked whether total (liquid+ice) soil
moisture was > residual moisture, but not whether liquid soil moisture
was positive. In some cases, in the bare soil tile, liquid soil moisture
could occasionally go negative. This has been fixed by adding a check on
liquid soil moisture to runoff().
Release of VIC.4.1.2.l
***** Description of changes from VIC 4.1.2.k to VIC 4.1.2.l *****
Bug Fixes:
Fixed memory leak in vicNl()
Files Affected:
vicNl.c
Description:
Several soil_con arrays, allocated in read_soilparam(), were not being
freed in vicNl() due to the "free" statements being inside the wrong
OUTPUT_FORCE "if" block. This has been fixed.
Uninitialized variables in write_forcing_file().
Files Affected:
write_forcing_file.c
Description:
Placeholder variables (dummy_*) in write_forcing_file() were not
initialized, resulting in warnings during compilation. These are now
initialized. This should not affect any model results, since these
variables were never used.
Compilation errors when EXCESS_ICE = TRUE
Files Affected:
full_energy.c
initialize_model_state.c
lakes.eb.c
Description:
Miscellaneous typos in the EXCESS_ICE code prevented compilation
when EXCESS_ICE = TRUE in user_def.h. These have been fixed.
Release of VIC.4.1.2.k
***** Description of changes from VIC 4.1.2.j to VIC 4.1.2.k *****
Bug Fixes:
Fix for crash when FROZEN_SOIL, EXP_TRANS and IMPLICIT all == TRUE
Files Affected:
frozen_soil.c
func_surf_energy_bal.c
vicNl.h
Description:
Extended the "cold nose" hack to the "warm nose" condition, and also
extended to cover the IMPLICIT scheme.
This will be superceded by a more bug-free soil temperature scheme
in the next major release of the model.
Better out-of-box behavior for soil temperature scheme
Files Affected:
get_global_param.c
global.param.sample
initialize_global.c
initialize_model_state.c
Description:
Added constraints to help ensure efficient, physically reasonable
simulation of the soil temperature profile:
- Set default values of IMPLICIT and EXP_TRANS to TRUE.
- Made "cold" (no-spinup) initial soil temperatures more consistent
with air temperature and bottom boundary temperature. - Added validation of option.Nnodes for EXP_TRANS=TRUE to guarantee
that, for the given soil temperature bottom boundary depth "dp" (also
known as the damping depth), there are at least 3 nodes within the top
50 cm of the soil column. This is to constrain errors to a reasonable
size. To satisfy this condition, the following relationship must hold:
Nnodes >= 5*ln(dp+1)+1
Some examples:
dp(m) minimum Nnodes
4 9
7 12
10 14
25 18
50 21
VIC will exit with an error message to this effect if Nnodes is too
small for the given value of dp.
Release of VIC.4.1.2.j
***** Description of changes from VIC 4.1.2.i to VIC 4.1.2.j *****
Bug Fixes:
Fixed incorrect assignment of input forcing variables that are moisture fluxes (all forms of precipitation and channel inflow) when ALMA_INPUT is TRUE.
Files Affected:
initialize_atmos.c
Description:
When ALMA_INPUT was TRUE, VIC was not rescaling moisture fluxes such
as precipitation to an hourly time step correctly in initialize_atmos.
This led to incorrect assignment of these fluxes to the atmos array.
This has been fixed.
Fixed selection of starting point in forcing file when starting in the middle of a day
Files Affected:
make_dmy.c
Description:
For the case of STARTHOUR not equal to 0, VIC was not finding the
correct starting record in the forcing file, due to its missing a
check on the hour of the forcing record. This has been fixed.
Release of VIC.4.1.2.i
***** Description of changes from VIC 4.1.2.h to VIC 4.1.2.i *****
Bug Fixes:
Fixed incorrect handling of case of a mix of cells with and without lakes.
Files Affected:
initialize_model_state.c
read_lakeparam.c
Description:
VIC was neither reading the lake parameter file correctly nor
initializing the lake data structures correctly for the case of a
mix of cells with and without lakes within a single lake parameter
file. This has been fixed.
Fixed use of tmp_moist array without initialization.
Files Affected:
initialize_model_state.c
Description:
Fixed use of tmp_moist array without initialization.
Release of VIC 4.1.2.h
***** Description of changes from VIC 4.1.2.g to VIC 4.1.2.h *****
Bug Fixes:
Fixed use of uninitialized soil moisture values on first time step.
Files Affected:
initialize_model_state.c
Description:
The tmp_moist array, used in initialize_model_state() as an input to
compute_runoff_and_asat(), was initialized within an if statement that
caused it to be sent to compute_runoff_and_asat() without initialization
in some cases. This has been fixed by moving the initialization of
tmp_moist outside the if statement.
Fixed errors in forcing disaggregation under certain input cases.
Files Affected:
initialize_atmos.c
mtclim_vic.c
mtclim_wrapper.c
Description:
Fixed bugs in the following cases:
1. User supplied daily incoming shortwave (not sub-daily)
2. User supplied daily specific or relative humidity without supplying
average daily pressure or temperature, respectively (with which to
convert these to daily vapor pressure).
Fixed bug in root zone calculation.
Files Affected:
calc_root_fraction.c
Description:
Fixed infinite loop that was occurring when the total of root zone
depths exceeded the total soil depth and one of the root zone boundaries
coincided with a soil layer boundary.
Release of VIC 4.1.2.g
***** Description of changes from VIC 4.1.2.f to VIC 4.1.2.g *****
Bug Fixes:
Fixed error in passing SensibleHeat to func_atmos_energy_bal.
Files Affected:
calc_atmos_energy_bal.c
Description:
Replaced (*SensibleHeat) with SensibleHeat in argument lists
of root_brent, error_print_atmos_energy_bal and
solve_atmos_energy_bal.
***** Description of changes from VIC 4.1.2.e to VIC 4.1.2.f *****
Bug Fixes:
Fixed use of uninitialized variable in cold nose fix for frozen soil
Files Affected:
frozen_soil.c
Description:
Fixed use of uninitialized variable in cold nose fix for
frozen soil. Code was attempting to check all nodes for a
cold nose, but this check requires accessing the value of the
next node, which is undefined when we check the bottom node.
Now the code does not check the bottom node (which is unlikely
to experience a cold nose anyway).
Fixed bug in converting from ALMA_INPUT moisture flux units
Files Affected:
initialize_atmos.c
Description:
Fixed bug in converting from ALMA_INPUT moisture flux units
to traditional units (was multiplying by number of seconds in
model step when should have been multiplying by number of seconds
in forcing step).
Release of VIC 4.1.2.d
***** Description of changes from VIC 4.1.2.c to VIC 4.1.2.d *****
Bug Fixes:
Fixed incorrect summing of rain and snow components of precipitation over grid
cell
Files Affected:
full_energy.c
Description:
The amounts of rainfall and snowfall over the lake (or inundated wetland)
were being omitted from the grid cell totals. This has been fixed.
Vapor pressure incorrect if user supplies (QAIR or REL_HUMID) + PRESSURE as
input forcings instead of vapor pressure.
Files Affected:
initialize_atmos.c
Description:
For the cases of the combination of (QAIR or REL_HUMID) plus PRESSURE
supplied as input forcings instead of VP, the logic distinguishing
between daily and sub-daily supplied PRESSURE was flawed, resulting
in incorrect values in both cases. This has been fixed.
***** Description of changes from VIC 4.1.2.b to VIC 4.1.2.c *****
Bug Fixes:
Incorrect handling of user-supplied tskc (cloud fraction) for LW_CLOUD==LW_CLOUD_DEARDORFF
Files Affected:
calc_longwave.c
mtclim_vic.c
Description:
Previous versions of VIC (before 4.1.2) used a full-sky longwave
formulation taken from two formulas in the Bras hydrology text. For
the new Deardorff full-sky longwave formulation, the dependence on
cloud fraction is different from the old Bras formulation. In
4.1.2 (and 4.1.2.a-b), the new Deardorff formulation did not account
for the possibility of user-supplied cloud fraction; if the user
supplied cloud fraction as an input forcing, the resulting longwave
was wrong. This has been fixed.
Changed default settings of MTCLIM_SWE_CORR and LW_TYPE to reflect best
general settings
Files Affected:
initialize_global.c
global.param.sample
Description:
In light of the findings of Bohn et al. (2012), we have changed the
default setting of MTCLIM_SWE_CORR to FALSE and of LW_TYPE to
LW_PRATA. These settings give forcing estimates that are less biased
in general.
Vapor pressure set to 0 if user supplies (QAIR or REL_HUMID) + PRESSURE as
input forcings instead of vapor pressure.
Files Affected:
initialize_atmos.c
Description:
For the cases of the combination of (QAIR or REL_HUMID) plus PRESSURE
supplied as input forcings instead of VP, VIC was supposed to compute
VP from (QAIR or REL_HUMID) and PRESSURE, then transfer the computed
VP to the atmos data structure. This transfer was being skipped, and
vapor pressure was consequently set to 0 during the simulation. This
has been fixed.
Computed longwave sometimes is extremely large at high latitudes.
Files Affected:
mtclim_vic.c
Description:
Previously (VIC 4.1.2, 4.1.2.a, and 4.1.2.b only), when SHORTWAVE and
VP were supplied to VIC as input forcings (and LONGWAVE was NOT
supplied as a forcing), the incoming longwave radiation computed by
VIC would in rare cases become extremely large. This happens only at
high latitudes in winter when the theoretical clear-sky potential
solar radiation is very small. If the supplied VP was large enough,
it could cause the internal variable t_tmax (clear-sky transmittance)
to go negative. This in turn would cause the internal variable
t_fmax (cloud transmittance) to go negative as well. This, finally,
would cause computed LONGWAVE values to become extremely large, if
the LW_CLOUD method was set to DEARDORFF. This has been fixed.
***** Description of changes from VIC 4.1.2.a to VIC 4.1.2.b *****
Bug Fixes:
VIC was unnecessarily requiring WIND to be supplied as an input forcing.
Files Affected:
initialize_atmos.c
vicNl_def.h
Description:
VIC was requiring WIND (or the zonal and meridional components of
wind, WIND_E and WIND_N) to be supplied as an input forcing. Now VIC
allows WIND to be omitted. If WIND is not supplied as an input
forcing, VIC will supply a default wind speed, defined in vicNl_def.h
as DEFAULT_WIND_SPEED and currently set to 3.0 m/s.
Cloud fraction tskc was not accounting for the case in which observed incoming
shortwave is supplied as a forcing.
Files Affected:
mtclim_vic.c
Description:
In the absence of observations, VIC's estimate of cloud fraction, tskc,
is a function of some intermediate quantities that are computed within
the MTCLIM algorithm (in mtclim_vic.c). These intermediate terms
can be computed from either observed daily shortwave radiation (if
available) or simulated daily shortwave radiation. The computation
of tskc was previously taking place in a part of the code where
only the simulated daily shortwave radiation was available. Thus,
tskc would not reflect the actual amount of incident shortwave, even
if observed incident shortwave was supplied as a forcing.
This has been fixed. The tskc computation has been moved to another
location in the code where the observed daily shortwave can be
accessed (if supplied by the user as a forcing).