INTERFACE:
subroutine PhaseChange (lbc, ubc, num_nolakec, filter_nolakec, fact, &
brr, hs, dhsdT, xmf, hs_top, sabg_lyr_col)
DESCRIPTION:
Calculation of the phase change within snow and soil layers: (1) Check the conditions for which the phase change may take place, i.e., the layer temperature is great than the freezing point and the ice mass is not equal to zero (i.e. melting), or the layer temperature is less than the freezing point and the liquid water mass is greater than the allowable supercooled liquid water calculated from freezing point depression (i.e. freezing). (2) Assess the rate of phase change from the energy excess (or deficit) after setting the layer temperature to freezing point. (3) Re-adjust the ice and liquid mass, and the layer temperature
USES:
use shr_kind_mod , only : r8 => shr_kind_r8
use clmtype
use clm_time_manager, only : get_step_size
use clm_varcon , only : tfrz, hfus, grav, istsoil, istice_mec, isturb, icol_road_perv
use clm_varcon , only : istcrop
use clm_varpar , only : nlevsno, nlevgrnd
ARGUMENTS:
implicit none
integer , intent(in) :: lbc, ubc ! column bounds
integer , intent(in) :: num_nolakec ! number of column non-lake points in column filter
integer , intent(in) :: filter_nolakec(ubc-lbc+1) ! column filter for non-lake points
real(r8), intent(in) :: brr (lbc:ubc, -nlevsno+1:nlevgrnd) ! temporary
real(r8), intent(in) :: fact (lbc:ubc, -nlevsno+1:nlevgrnd) ! temporary
real(r8), intent(in) :: hs (lbc:ubc) ! net ground heat flux into the surface
real(r8), intent(in) :: dhsdT (lbc:ubc) ! temperature derivative of "hs"
real(r8), intent(out):: xmf (lbc:ubc) ! total latent heat of phase change
real(r8), intent(in) :: hs_top(lbc:ubc) ! net heat flux into the top snow layer [W/m2]
real(r8), intent(in) :: sabg_lyr_col(lbc:ubc,-nlevsno+1:1) ! absorbed solar radiation (col,lyr) [W/m2]
CALLED FROM:
subroutine SoilTemperature in this moduleREVISION HISTORY:
15 September 1999: Yongjiu Dai; Initial code 15 December 1999: Paul Houser and Jon Radakovich; F90 Revision 2/14/02, Peter Thornton: Migrated to new data structures. 7/01/03, Mariana Vertenstein: Migrated to vector code 04/25/07 Keith Oleson: CLM3.5 Hydrology 03/28/08 Mark Flanner: accept new arguments and calculate freezing rate of h2o in snowLOCAL VARIABLES:
local pointers to original implicit in scalars
integer , pointer :: snl(:) !number of snow layers
real(r8), pointer :: h2osno(:) !snow water (mm H2O)
integer , pointer :: ltype(:) !landunit type
integer , pointer :: clandunit(:) !column's landunit
integer , pointer :: ctype(:) !column type
local pointers to original implicit inout scalars
real(r8), pointer :: snowdp(:) !snow height (m)
local pointers to original implicit out scalars
real(r8), pointer :: qflx_snomelt(:) !snow melt (mm H2O /s)
real(r8), pointer :: eflx_snomelt(:) !snow melt heat flux (W/m**2)
real(r8), pointer :: eflx_snomelt_u(:)!urban snow melt heat flux (W/m**2)
real(r8), pointer :: eflx_snomelt_r(:)!rural snow melt heat flux (W/m**2)
real(r8), pointer :: qflx_snofrz_lyr(:,:) !snow freezing rate (positive definite) (col,lyr) [kg m-2 s-1]
real(r8), pointer :: qflx_glcice(:) !flux of new glacier ice (mm H2O/s) [+ = ice grows]
local pointers to original implicit in arrays
real(r8), pointer :: h2osoi_liq(:,:) !liquid water (kg/m2) (new)
real(r8), pointer :: h2osoi_ice(:,:) !ice lens (kg/m2) (new)
real(r8), pointer :: tssbef(:,:) !temperature at previous time step [K]
real(r8), pointer :: sucsat(:,:) !minimum soil suction (mm)
real(r8), pointer :: watsat(:,:) !volumetric soil water at saturation (porosity)
real(r8), pointer :: bsw(:,:) !Clapp and Hornberger "b"
real(r8), pointer :: dz(:,:) !layer thickness (m)
local pointers to original implicit inout arrays
real(r8), pointer :: t_soisno(:,:) !soil temperature (Kelvin)
local pointers to original implicit out arrays
integer, pointer :: imelt(:,:) !flag for melting (=1), freezing (=2), Not=0 (new)
!OTHER LOCAL VARIABLES: