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

Module land_model_mod

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


OVERVIEW

This module contains calls to the sub-models to calculate quantities on the fast and slow time scales and update the boundary conditions and tiling structure where necessary.

The sub-models (soil and vegetation) are first called in top-bottom order to evaluate the derivatives. Then they are called in bottom-top order to finish the implicit calculations. On the upward pass, they have a chance to update boundary values returned to the atmosphere. These calls are done on the fast time scale to calculate the fluxes.

On the slow time scale, the land is updated and the boundary conditions may be updated. The land boundary data is updated on the fast time scale without updating the tiling structure. The land boundary data for the atmosphere is updated on the slow time scale and changes the tiling structure, if necessary, as well as the albedo, drag coefficient and such.

The diagnostic horizontal axes for the land grid is initialized. All sub-models use them instead of creating their own. Also, NetCDF library messages are printed out, including file names and line numbers.


OTHER MODULES USED

  time_manager_mod
mpp_domains_mod
fms_mod
vegetation_mod
soil_mod
land_types_mod
constants_mod
diag_manager_mod
field_manager_mod
tracer_manager_mod

PUBLIC INTERFACE

land_model_init:
Initializes the state of the land model.
land_model_end:
Destructs the land model.
update_land_model_fast:
Updates the state of the land model on the fast time scale.
update_land_model_slow:
Updates the state of the land model on the slow time scale.
update_land_bnd_fast:
Updates land boundary data.
update_land_bnd_slow:
Updates the land boundary data for the atmosphere on the slow time scale.
init_land_diag:
Initializes the horizontal axes for the land grid.
err:
Prints out error messages.


PUBLIC DATA

None.


PUBLIC ROUTINES

  1. land_model_init

    subroutine init_land_with_xgrid &
         (atmos2land, bnd, time_init, time, dt_fast, dt_slow, atmos_domain)
    
      type(atmos_land_boundary_type), intent(inout) :: atmos2land ! land boundary data
      type(land_data_type), intent(inout) :: bnd ! land boundary data
      type(time_type), intent(in)    :: time_init ! initial time of simulation (?)
      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), optional :: atmos_domain ! domain of computations
    subroutine init_land_with_area &
         ( atmos2land, bnd, gblon, gblat, gcellarea, gfrac, time, dt_fast, dt_slow, domain, &
         glon, glat )
    
      type(atmos_land_boundary_type), intent(inout) :: atmos2land ! land boundary data
      type(land_data_type), intent(inout) :: bnd        ! state to update
      real,              intent(in) :: gblon(:)! lon boundaries of the grid cells
      real,              intent(in) :: gblat(:)! lat boundaries of the grid cells
      real,              intent(in) :: gcellarea(:,:) ! full area of the grid cells
      real,              intent(in) :: gfrac(:,:)     ! fraction of land in the grid cell
      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), optional :: domain  ! domain of computations
      real,              intent(in), optional :: glon(:), glat(:) ! centers
                              ! of the grid cells

    DESCRIPTION
    Initializes the land state in three ways. 1) The grid description file may be used as an input. The land grid boundaries and area of land are read from a grid description file. 2) A logical land mask may be used to calculate the area of the grid cells where the mask is true and calls init_land_with_area. Naturally, in this case there are no partly covered land cells -- every cell is either land or ocean. 3) The land state may be initialized from the land area for each of the grid points.


  2. land_model_end

    subroutine land_model_end ( atmos2land, bnd )
      type(atmos_land_boundary_type), intent(inout) :: atmos2land
      type(land_data_type), intent(inout) :: bnd        ! state to update
    call land_model_end ( bnd )
    DESCRIPTION
    Destructs the land model and its sub-models. Deallocates the arrays and the boundary exchange data


  3. update_land_model_fast

    subroutine update_land_model_fast ( atmos2land, bnd )
    
      type(atmos_land_boundary_type), intent(inout)    :: atmos2land ! quantities exchanged between
                                                                  ! the atmosphere and the land
      type(land_data_type),  intent(inout) :: bnd ! state to update
    call update_land_model_fast ( atmos2land, bnd )
    DESCRIPTION
    Updates the state of the land model on the fast time scale. To implement implicit calculation scheme, first the land sub-models are called in top-bottom general order to evaluate the derivatives; then they are called in bottom-top order to finish implicit calculations. On the upward pass they have a chance to update boundary values returned to the atmosphere. After calculations, update the boundary conditions visible to the atmosphere.


  4. update_land_model_slow

    subroutine update_land_model_slow ( atmos2land, bnd )
      type(atmos_land_boundary_type), intent(inout) :: atmos2land
      type(land_data_type), intent(inout) :: bnd        ! state to update
    call update_land_model_slow ( bnd )
    DESCRIPTION
    Updates land, and boundary conditions if necessary, on the slow time scale.


  5. update_land_bnd_fast

    subroutine update_land_bnd_fast ( bnd )
    
      type(land_data_type), intent(inout) :: bnd        ! state to update
    call update_land_bnd_fast ( bnd )
    DESCRIPTION
    Updates land boundary data (the ones that atmosphere sees) on the fast time scale. This routine does not update the tiling structure because it is assumed that the tiling does not change on fast time scale.


  6. update_land_bnd_slow

    subroutine update_land_bnd_slow ( bnd )
    
      type(land_data_type), intent(inout) :: bnd        ! state to update
    call update_land_bnd_slow ( bnd )
    DESCRIPTION
    Updates the land boundary data for the atmosphere on the slow time scale. This subroutine is responsible for changing of the tiling structure, if necessary, as well as for changing albedo, drag coefficients and such.


    NOTE
    If the tiling structure has been modified, then probably the distribution of other boundary values, such as temperature and surface humidity, should be modified too, not yet clear how.


  7. init_land_diag

    subroutine init_land_diag(glonb, glatb, domain, id_lon, id_lat, glon, glat)
    
      real, intent(in)           :: glonb(:), glatb(:) ! longitude and latitude boundaries of grid
                                                       ! cells, specified for the global grid
                                                       ! (not only domain)
      type(domain2d), intent(in) :: domain ! the domain of operations
      integer, intent(out)       :: id_lon, id_lat     ! IDs of respective diag. manager axes
      real, intent(in),optional  :: glon(:), glat(:)   ! coordinates of grid cell centers
    call init_land_diag (glonb, glatb, domain, id_lon, id_lat)
    DESCRIPTION
    Initialize the horizontal axes for the land grid so that all submodules use them, instead of creating their own.


  8. err

    subroutine err(ierr, file, line)
    
      integer,          intent(in) :: ierr ! error code
      character(len=*), intent(in) :: file ! name of the file
      integer,          intent(in) :: line ! number of line in the file
    call err (ierr, file, line)
    DESCRIPTION
    Prints out NetCDF library error message, including file name and line number.



PUBLIC TYPES

land_type

The type describing the state of the land model. It is private to this module and is basically a remnant of the previous design. There is only one variable of this type, called "theLand", which is used in the model to hold the data. Strictly speaking, this type is not necessary, but there is no harm in having it and it is possible to image a situation where a single entity describing the land-surface model state would be useful.

domain
Domain of calculations
[domain2d, dimension2]
is
Domain bound
[integer]
ie
Domain bound
[integer]
js
Domain bound
[integer]
je
Domain bound
[integer]
n_tiles
Domain bound
[integer]
soil
Soil component data
[soil_type]
vegetation
Vegetation component data
[vegetation_type]
blon
Longitude domain boundaries
[real, pointer, dimension1]
blat
Latitude domain boundaries
[real, pointer, dimension1]
mask
Land mask, true where there is land
[logical, pointer, dimension2]


DIAGNOSTIC FIELDS

Diagnostic fields may be output to a netcdf file by specifying the module name identifier and the desired field names (given below) in file diag_table. See the documentation for diag_manager.
Diagnostic fields for module name identifier: 
field name   
----------
lonb lon latb lat
field description (units)
-------------------------
Longitude cell boundaries (degrees_E) Diagnostic manager longitude axis (degrees_E) Latitude cell boundaries (degrees_N) Diagnostic manager latitude axis (degrees_N)

DATA SETS

None.


ERROR MESSAGES

None.


top