INTERFACE:
subroutine BalanceCheck(lbp, ubp, lbc, ubc, lbl, ubl, lbg, ubg)DESCRIPTION:
This subroutine accumulates the numerical truncation errors of the water and energy balance calculation. It is helpful to see the performance of the process of integration.
The error for energy balance:
error = abs(Net radiation - change of internal energy - Sensible heat - Latent heat)
The error for water balance:
error = abs(precipitation - change of water storage - evaporation - runoff)
USES:
use clmtype use clm_atmlnd , only : clm_a2l use subgridAveMod use clm_time_manager , only : get_step_size, get_nstep use clm_varcon , only : isturb, icol_roof, icol_sunwall, icol_shadewall, & spval, icol_road_perv, icol_road_imperv, istice_mec use clm_varctl , only : glc_dyntopoARGUMENTS:
implicit none integer :: lbp, ubp ! pft-index bounds integer :: lbc, ubc ! column-index bounds integer :: lbl, ubl ! landunit-index bounds integer :: lbg, ubg ! grid-index boundsCALLED FROM:
subroutine clm_driverREVISION HISTORY:
15 September 1999: Yongjiu Dai; Initial code 15 December 1999: Paul Houser and Jon Radakovich; F90 Revision 10 November 2000: Mariana Vertenstein Migrated to new data structures by Mariana Vertenstein and Peter ThorntonLOCAL VARIABLES:
local pointers to original implicit in arguments integer , pointer :: pgridcell(:) ! pft's gridcell index integer , pointer :: plandunit(:) ! pft's landunit index integer , pointer :: cgridcell(:) ! column's gridcell index integer , pointer :: ltype(:) ! landunit type integer , pointer :: ctype(:) ! column type real(r8), pointer :: pwtgcell(:) ! pft's weight relative to corresponding gridcell real(r8), pointer :: cwtgcell(:) ! column's weight relative to corresponding gridcell real(r8), pointer :: forc_rain(:) ! rain rate [mm/s] real(r8), pointer :: forc_snow(:) ! snow rate [mm/s] real(r8), pointer :: forc_lwrad(:) ! downward infrared (longwave) radiation (W/m**2) real(r8), pointer :: endwb(:) ! water mass end of the time step real(r8), pointer :: begwb(:) ! water mass begining of the time step real(r8), pointer :: fsa(:) ! solar radiation absorbed (total) (W/m**2) real(r8), pointer :: fsr(:) ! solar radiation reflected (W/m**2) real(r8), pointer :: eflx_lwrad_out(:) ! emitted infrared (longwave) radiation (W/m**2) real(r8), pointer :: eflx_lwrad_net(:) ! net infrared (longwave) rad (W/m**2) [+ = to atm] real(r8), pointer :: sabv(:) ! solar radiation absorbed by vegetation (W/m**2) real(r8), pointer :: sabg(:) ! solar radiation absorbed by ground (W/m**2) real(r8), pointer :: eflx_sh_tot(:) ! total sensible heat flux (W/m**2) [+ to atm] real(r8), pointer :: eflx_sh_totg(:) ! total sensible heat flux at grid level (W/m**2) [+ to atm] real(r8), pointer :: eflx_dynbal(:) ! energy conversion flux due to dynamic land cover change(W/m**2) [+ to atm] real(r8), pointer :: eflx_lh_tot(:) ! total latent heat flux (W/m8*2) [+ to atm] real(r8), pointer :: eflx_soil_grnd(:) ! soil heat flux (W/m**2) [+ = into soil] real(r8), pointer :: qflx_evap_tot(:) ! qflx_evap_soi + qflx_evap_can + qflx_tran_veg real(r8), pointer :: qflx_irrig(:) ! irrigation flux (mm H2O /s) real(r8), pointer :: qflx_surf(:) ! surface runoff (mm H2O /s) real(r8), pointer :: qflx_qrgwl(:) ! qflx_surf at glaciers, wetlands, lakes real(r8), pointer :: qflx_drain(:) ! sub-surface runoff (mm H2O /s) real(r8), pointer :: qflx_runoff(:) ! total runoff (mm H2O /s) real(r8), pointer :: qflx_runoffg(:) ! total runoff at gridcell level inc land cover change flux (mm H2O /s) real(r8), pointer :: qflx_liq_dynbal(:) ! liq runoff due to dynamic land cover change (mm H2O /s) real(r8), pointer :: qflx_snwcp_ice(:) ! excess snowfall due to snow capping (mm H2O /s) [+]` real(r8), pointer :: qflx_glcice(:) ! flux of new glacier ice (mm H2O /s) [+ if ice grows] real(r8), pointer :: qflx_snwcp_iceg(:) ! excess snowfall due to snow cap inc land cover change flux (mm H20/s) real(r8), pointer :: qflx_ice_dynbal(:) ! ice runoff due to dynamic land cover change (mm H2O /s) real(r8), pointer :: forc_solad(:,:) ! direct beam radiation (vis=forc_sols , nir=forc_soll ) real(r8), pointer :: forc_solai(:,:) ! diffuse radiation (vis=forc_solsd, nir=forc_solld) real(r8), pointer :: eflx_traffic_pft(:) ! traffic sensible heat flux (W/m**2) real(r8), pointer :: eflx_wasteheat_pft(:) ! sensible heat flux from urban heating/cooling sources of waste heat (W/m**2) real(r8), pointer :: canyon_hwr(:) ! ratio of building height to street width real(r8), pointer :: eflx_heat_from_ac_pft(:) !sensible heat flux put back into canyon due to removal by AC (W/m**2) local pointers to original implicit out arguments real(r8), pointer :: errh2o(:) ! water conservation error (mm H2O) real(r8), pointer :: errsol(:) ! solar radiation conservation error (W/m**2) real(r8), pointer :: errlon(:) ! longwave radiation conservation error (W/m**2) real(r8), pointer :: errseb(:) ! surface energy conservation error (W/m**2) real(r8), pointer :: netrad(:) ! net radiation (positive downward) (W/m**2) real(r8), pointer :: errsoi_col(:) ! column-level soil/lake energy conservation error (W/m**2)