PUBLIC INTERFACE ~ PUBLIC DATA ~ PUBLIC ROUTINES ~ NAMELIST ~ DIAGNOSTIC FIELDS ~ ERROR MESSAGES ~ REFERENCES ~ NOTES

Module vegetation_mod

Contact:  Christopher Milly
Reviewers:  Elena Shevliakova Sergey Malyshev
Change History: WebCVS Log


OVERVIEW

Module containing processes relating to vegetation.

Vegetation type describing vegetation characteristics is defined. Vegetation data is allocated and the initial value for canopy air humidity is set up. Updates vegetation and boundary data on the slow and fast time-scales. Deallocates vegetation data, empties memory and cleans up, if necessary.


OTHER MODULES USED

  time_manager_mod
mpp_domains_mod
land_types_mod
soil_mod
constants_mod
fms_mod
fms_io_mod
sat_vapor_pres_mod
field_manager_mod
tracer_manager_mod

PUBLIC INTERFACE

vegetation_init:
Initializes vegetation data.
vegetation_end:
Deallocates vegetation data; empty memory and do clean-up, if necessary.
update_vegetation_slow:
Slow time-scale vegetation update.
update_vegetation_fast_down:
Fast time-scale vegetation update given soil data inputs.
update_vegetation_fast_up:
Fast time-scale vegetation update given soil data inputs.
update_vegetation_bnd_fast:
Updates vegetation boundary data on the fast time-scale.
update_vegetation_bnd_slow:
Updates vegetation boundary data on the slow time-scale.


PUBLIC DATA

None.


PUBLIC ROUTINES

  1. vegetation_init

    subroutine vegetation_init &
         ( veg, gblon, gblat, garea, gfrac, time, dt_fast, dt_slow, domain, &
         frac, mask, id_lon, id_lat )
    
      type(vegetation_type),intent(inout) :: veg        ! state of a particular
                                                        ! realization to initialize
      real,                 intent(in)    :: gblon(:)   ! longitude bounds of the
                                                        ! grid cells
      real,                 intent(in)    :: gblat(:)   ! latitude bounds of the
                                                        ! grid cells
      real,                 intent(in)    :: garea(:,:) ! grid cell area 
      real,                 intent(in)    :: gfrac(:,:) ! fraction of grid cell
                                                        ! covered by land 
      type(time_type),      intent(in)    :: time       ! current time
      type(time_type),      intent(in)    :: dt_fast    ! fast time step
      type(time_type),      intent(in)    :: dt_slow    ! slow time step
      type(domain2d),       intent(in)    :: domain     ! our domain
      real,                 intent(in)    :: frac(:,:,:)! fractional area of tiles
      logical,              intent(in)    :: mask(:,:,:)! land mask
      integer,              intent(in)    :: id_lon     ! ID of X (longitude) diag
                                                        ! axis
      integer,              intent(in)    :: id_lat     ! ID of Y (latitude) diag
                                                        ! axis
    call vegetation_init & ( veg, gblon, gblat, garea, gfrac, time, dt_fast, dt_slow, domain, & frac, mask, id_lon, id_lat )
    DESCRIPTION
    Allocates vegetation data and sets up initial value for canopy air humidity.


  2. vegetation_end

    subroutine vegetation_end ( veg )
    
      type(vegetation_type), intent(inout) :: veg ! data to finish using
    call vegetation_end ( veg )
    DESCRIPTION
    Deallocates vegetation data; empty memory and do clean-up, if necessary.


  3. update_vegetation_slow

    subroutine update_vegetation_slow ( veg )
    
      type(vegetation_type), intent(inout) :: veg ! data to update
    call update_vegetation_slow ( veg )
    DESCRIPTION
    Slow time-scale vegetation update.


  4. update_vegetation_fast_down

    subroutine update_vegetation_fast_down( veg, soil, evap, dedq, drag_q, psurf, evap1, dedt)
    
      type(vegetation_type), intent(inout) :: veg            ! data to update
      type(soil_type),       intent(in)    :: soil           ! soil data inputs
      real, intent(in)  :: &
           evap   (veg%is:veg%ie,veg%js:veg%je,veg%n_tiles),&! evaporation from the
                                                             ! surface into the atm
           drag_q (:,:,:),&                                  ! drag coefficient
           dedq   (:,:,:),&                                  ! derivative of evap
                                                             ! over q_ca
           psurf  (veg%is:veg%ie,veg%js:veg%je,veg%n_tiles)  ! surface pressure
    
      real, intent(out) :: &
           dedt   (:,:,:), &                                 ! derivative of evap
                                                             ! over T
           evap1  (veg%is:veg%ie,veg%js:veg%je,veg%n_tiles)  ! evaporation from
                                                             ! stomatal into sfc
    call update_vegetation_fast_down ( veg, soil, evap, dedq, drag_q, psurf, evap1, dedt)
    DESCRIPTION
    Fast time-scale vegetation update given soil data inputs. Calculates water availability for evapotranspiration. Calculates saturated specific humidity at the surface and its derivative over the surface temperature. Air density is calculated here using surface q and T; in principle we should use canopy q and T, but surface values are the only ones we have available in this particular implementation.


  5. update_vegetation_fast_up

    subroutine update_vegetation_fast_up( veg, soil, drag_q, evap, dedq )
    
      type(vegetation_type), intent(inout) :: veg  ! data to update
      type(soil_type),       intent(in)    :: soil ! soil data inputs
      real, intent(in)  :: &
           drag_q (:,:,:),  &  ! drag coefficient for atmosphere (above vegetation)
           evap   (:,:,:),  &  ! evaporation from surface into the atmosphere
           dedq   (:,:,:)      ! derivative of evap over q_ca
    call update_vegetation_fast_up ( veg, soil, drag_q, evap, dedq )
    DESCRIPTION
    Fast time-scale vegetation update given soil data inputs.


  6. update_vegetation_bnd_fast

    subroutine update_vegetation_bnd_fast ( veg, bnd )
    
      type(vegetation_type), intent(in)    :: veg ! vegetation data
      type(land_data_type),  intent(inout) :: bnd ! boundary data
    call update_vegetation_bnd_fast ( veg, bnd )
    DESCRIPTION
    Updates vegetation boundary data on the fast time-scale.


  7. update_vegetation_bnd_slow

    subroutine update_vegetation_bnd_slow ( veg, bnd )
    
      type(vegetation_type), intent(in)    :: veg ! vegetation data
      type(land_data_type),  intent(inout) :: bnd ! boundary data
    call update_vegetation_bnd_slow ( veg, bnd )
    DESCRIPTION
    Updates vegetation boundary data on the slow time-scale.



PUBLIC TYPES

vegetation_type

Private data type describing vegetation characteristics.

domain
Computational domain
[domain2d, dimension2]
dt
Fast time step
[real, units: s]
is
Computational domain bounds
[integer]
ie
Computational domain bounds
[integer]
js
Computational domain bounds
[integer]
je
Computational domain bounds
[integer]
n_tiles
Number of tiles
[integer]
mask
Land mask
[logical, pointer, dimension3]
bonedry
True if the "bone dry" conditions occur (evaporation during time step is larger than the available water)
[logical, pointer, dimension3]
q_ca
Specific humidity of canopy air
[real, pointer, dimension3, units: kg/kg]
t_surf
Soil surface temperature
[real, pointer, dimension3, units: K]
evap
Explicit estimate of the water vapor flux
[real, pointer, dimension3, units: kg/m2/s]
c_surf
Conductance between surface and canopy air
[real, pointer, dimension3, units: kg/m2/s]
dqsatdt
Derivative of sat. humidity over T surface
[real, pointer, dimension3, units: kg/kg/degK]
e_q
Implicit scheme coefficient
[real, pointer, dimension3]
f_q
Implicit scheme coefficient
[real, pointer, dimension3]
beta
Water availability for evaporation
[real, pointer, dimension3]


NAMELIST

&vegetation_nml

klev
Soil level at which to specify frozen-soil factor for modifying beta.
[integer, default: 0]
do_netcdf_restart
Do netcdf restart.
[logical, default: .true.]


DATA SETS

None.


ERROR MESSAGES

None.


top