next up previous contents
Next: Fortran: Module Interface BiogeophysicsLakeMod Up: Fortran: Module Interface Biogeophysics2Mod Previous: Fortran: Module Interface Biogeophysics2Mod   Contents

Biogeophysics2


INTERFACE:

   subroutine Biogeophysics2 (lbl, ubl, lbc, ubc, lbp, ubp, &
              num_urbanl, filter_urbanl, num_nolakec, filter_nolakec, &
              num_nolakep, filter_nolakep)
DESCRIPTION:

This is the main subroutine to execute the calculation of soil/snow and ground temperatures and update surface fluxes based on the new ground temperature

Calling sequence is: Biogeophysics2: surface biogeophysics driver -> SoilTemperature: soil/snow and ground temperatures -> SoilTermProp thermal conductivities and heat capacities -> Tridiagonal tridiagonal matrix solution -> PhaseChange phase change of liquid/ice contents

(1) Snow and soil temperatures o The volumetric heat capacity is calculated as a linear combination in terms of the volumetric fraction of the constituent phases. o The thermal conductivity of soil is computed from the algorithm of Johansen (as reported by Farouki 1981), and the conductivity of snow is from the formulation used in SNTHERM (Jordan 1991). o Boundary conditions: F = Rnet - Hg - LEg (top), F= 0 (base of the soil column). o Soil / snow temperature is predicted from heat conduction in 10 soil layers and up to 5 snow layers. The thermal conductivities at the interfaces between two neighboring layers (j, j+1) are derived from an assumption that the flux across the interface is equal to that from the node j to the interface and the flux from the interface to the node j+1. The equation is solved using the Crank-Nicholson method and results in a tridiagonal system equation.

(2) Phase change (see PhaseChange.F90)


USES:

     use clmtype
     use clm_atmlnd        , only : clm_a2l
     use clm_time_manager  , only : get_step_size
     use clm_varcon        , only : hvap, cpair, grav, vkc, tfrz, sb, &
                                    isturb, icol_roof, icol_sunwall, icol_shadewall, istsoil
     use clm_varcon        , only : istcrop
     use clm_varpar        , only : nlevsno, nlevgrnd, max_pft_per_col
     use SoilTemperatureMod, only : SoilTemperature
     use subgridAveMod     , only : p2c
ARGUMENTS:
     implicit none
     integer, intent(in) :: lbp, ubp                    ! pft bounds
     integer, intent(in) :: lbc, ubc                    ! column bounds
     integer, intent(in) :: lbl, ubl                    ! landunit 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
     integer, intent(in) :: num_urbanl                  ! number of urban landunits in clump
     integer, intent(in) :: filter_urbanl(ubl-lbl+1)    ! urban landunit filter
     integer, intent(in) :: num_nolakep                 ! number of column non-lake points in pft filter
     integer, intent(in) :: filter_nolakep(ubp-lbp+1)   ! pft filter for non-lake points
CALLED FROM:
   subroutine clm_driver1
REVISION HISTORY:
   15 September 1999: Yongjiu Dai; Initial code
   15 December 1999:  Paul Houser and Jon Radakovich; F90 Revision
   Migrated to clm2.0 by Keith Oleson and Mariana Vertenstein
   Migrated to clm2.1 new data structures by Peter Thornton and M. Vertenstein
LOCAL VARIABLES:
   local pointers to implicit in arguments
     integer , pointer :: ctype(:)                ! column type
     integer , pointer :: ltype(:)                ! landunit type
     integer , pointer :: pcolumn(:)         ! pft's column index
     integer , pointer :: plandunit(:)            ! pft's landunit index
     integer , pointer :: pgridcell(:)       ! pft's gridcell index
     real(r8), pointer :: pwtgcell(:)        ! pft's weight relative to corresponding column
     integer , pointer :: npfts(:)           ! column's number of pfts 
     integer , pointer :: pfti(:)            ! column's beginning pft index 
     integer , pointer :: snl(:)             ! number of snow layers
     logical , pointer :: do_capsnow(:)      ! true => do snow capping
     real(r8), pointer :: forc_lwrad(:)      ! downward infrared (longwave) radiation (W/m**2)
     real(r8), pointer :: emg(:)             ! ground emissivity
     real(r8), pointer :: htvp(:)            ! latent heat of vapor of water (or sublimation) [j/kg]
     real(r8), pointer :: t_grnd(:)          ! ground temperature (Kelvin)
     integer , pointer :: frac_veg_nosno(:)  ! fraction of vegetation not covered by snow (0 OR 1 now) [-]
     real(r8), pointer :: cgrnds(:)          ! deriv, of soil sensible heat flux wrt soil temp [w/m2/k]
     real(r8), pointer :: cgrndl(:)          ! deriv of soil latent heat flux wrt soil temp [w/m**2/k]
     real(r8), pointer :: sabg(:)            ! solar radiation absorbed by ground (W/m**2)
     real(r8), pointer :: dlrad(:)           ! downward longwave radiation below the canopy [W/m2]
     real(r8), pointer :: ulrad(:)           ! upward longwave radiation above the canopy [W/m2]
     real(r8), pointer :: eflx_sh_veg(:)     ! sensible heat flux from leaves (W/m**2) [+ to atm]
     real(r8), pointer :: qflx_evap_veg(:)   ! vegetation evaporation (mm H2O/s) (+ = to atm)
     real(r8), pointer :: qflx_tran_veg(:)   ! vegetation transpiration (mm H2O/s) (+ = to atm)
     real(r8), pointer :: qflx_evap_can(:)   ! evaporation from leaves and stems (mm H2O/s) (+ = to atm)
     real(r8), pointer :: wtcol(:)           ! pft weight relative to column
     real(r8), pointer :: tssbef(:,:)        ! soil/snow temperature before update
     real(r8), pointer :: t_soisno(:,:)      ! soil temperature (Kelvin)
     real(r8), pointer :: h2osoi_ice(:,:)    ! ice lens (kg/m2) (new)
     real(r8), pointer :: h2osoi_liq(:,:)    ! liquid water (kg/m2) (new)
     real(r8), pointer :: eflx_building_heat(:)   ! heat flux from urban building interior to walls, roof
     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 :: eflx_heat_from_ac_pft(:) ! sensible heat flux put back into canyon due to removal by AC (W/m**2)
     real(r8), pointer :: canyon_hwr(:)      ! ratio of building height to street width (-)
  
   local pointers to implicit inout arguments
     real(r8), pointer :: eflx_sh_grnd(:)    ! sensible heat flux from ground (W/m**2) [+ to atm]
     real(r8), pointer :: qflx_evap_soi(:)   ! soil evaporation (mm H2O/s) (+ = to atm)
     real(r8), pointer :: qflx_snwcp_liq(:)  ! excess rainfall due to snow capping (mm H2O /s)
     real(r8), pointer :: qflx_snwcp_ice(:)  ! excess snowfall due to snow capping (mm H2O /s)
   
   local pointers to implicit out arguments
   
     real(r8), pointer :: dt_grnd(:)         ! change in t_grnd, last iteration (Kelvin)
     real(r8), pointer :: eflx_soil_grnd(:)  ! soil heat flux (W/m**2) [+ = into soil]
     real(r8), pointer :: eflx_soil_grnd_u(:)! urban soil heat flux (W/m**2) [+ = into soil]
     real(r8), pointer :: eflx_soil_grnd_r(:)! rural soil heat flux (W/m**2) [+ = into soil]
     real(r8), pointer :: eflx_sh_tot(:)     ! total sensible heat flux (W/m**2) [+ to atm]
     real(r8), pointer :: eflx_sh_tot_u(:)   ! urban total sensible heat flux (W/m**2) [+ to atm]
     real(r8), pointer :: eflx_sh_tot_r(:)   ! rural total sensible heat flux (W/m**2) [+ to atm]
     real(r8), pointer :: qflx_evap_tot(:)   ! qflx_evap_soi + qflx_evap_can + qflx_tran_veg
     real(r8), pointer :: eflx_lh_tot(:)     ! total latent heat flux (W/m**2)  [+ to atm]
     real(r8), pointer :: eflx_lh_tot_u(:)   ! urban total latent heat flux (W/m**2)  [+ to atm]
     real(r8), pointer :: eflx_lh_tot_r(:)   ! rural total latent heat flux (W/m**2)  [+ to atm]
     real(r8), pointer :: qflx_evap_grnd(:)  ! ground surface evaporation rate (mm H2O/s) [+]
     real(r8), pointer :: qflx_sub_snow(:)   ! sublimation rate from snow pack (mm H2O /s) [+]
     real(r8), pointer :: qflx_dew_snow(:)   ! surface dew added to snow pack (mm H2O /s) [+]
     real(r8), pointer :: qflx_dew_grnd(:)   ! ground surface dew formation (mm H2O /s) [+]
     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 :: eflx_lwrad_net_u(:)  ! urban net infrared (longwave) rad (W/m**2) [+ = to atm]
     real(r8), pointer :: eflx_lwrad_net_r(:)  ! rural net infrared (longwave) rad (W/m**2) [+ = to atm]
     real(r8), pointer :: eflx_lh_vege(:)    ! veg evaporation heat flux (W/m**2) [+ to atm]
     real(r8), pointer :: eflx_lh_vegt(:)    ! veg transpiration heat flux (W/m**2) [+ to atm]
     real(r8), pointer :: eflx_lh_grnd(:)    ! ground evaporation heat flux (W/m**2) [+ to atm]
     real(r8), pointer :: errsoi_pft(:)      ! pft-level soil/lake energy conservation error (W/m**2)
     real(r8), pointer :: errsoi_col(:)      ! column-level soil/lake energy conservation error (W/m**2)
   !OTHER LOCAL VARIABLES:


next up previous contents
Next: Fortran: Module Interface BiogeophysicsLakeMod Up: Fortran: Module Interface Biogeophysics2Mod Previous: Fortran: Module Interface Biogeophysics2Mod   Contents
Erik Kluzek 2011-06-15