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

Module atmos_model_mod

Contact:  Bruce Wyman
Reviewers:  Zhi Liang
Change History: WebCVS Log


OVERVIEW

Driver for the atmospheric model, contains routines to advance the atmospheric model state by one time step.

This version of atmos_model_mod has been designed around the implicit version diffusion scheme of the GCM. It requires two routines to advance the atmospheric model one time step into the future. These two routines correspond to the down and up sweeps of the standard tridiagonal solver. Most atmospheric processes (dynamics,radiation,etc.) are performed in the down routine. The up routine finishes the vertical diffusion and computes moisture related terms (convection,large-scale condensation, and precipitation). The boundary variables needed by other component models for coupling are contained in a derived data type. A variable of this derived type is returned when initializing the atmospheric model. It is used by other routines in this module and by coupling routines. The contents of this derived type should only be modified by the atmospheric model.


OTHER MODULES USED

           mpp_mod
mpp_domains_mod
fms_mod
fms_io_mod
time_manager_mod
field_manager_mod
tracer_manager_mod
diag_integral_mod
atmosphere_mod
coupler_types_mod

PUBLIC INTERFACE

update_atmos_model_down:
compute the atmospheric tendencies for dynamics, radiation, vertical diffusion of momentum, tracers, and heat/moisture.
update_atmos_model_up:
upward vertical diffusion of heat/moisture and moisture processes
atmos_model_init:
Routine to initialize the atmospheric model
atmos_model_end:
termination routine for atmospheric model


PUBLIC DATA

None.


PUBLIC ROUTINES

  1. update_atmos_model_down

    call update_atmos_model_down ( Surface_boundary, Atmos )
    DESCRIPTION
    Called every time step as the atmospheric driver to compute the atmospheric tendencies for dynamics, radiation, vertical diffusion of momentum, tracers, and heat/moisture. For heat/moisture only the downward sweep of the tridiagonal elimination is performed, hence the name "_down".


    INPUT
    Surface_boundary    Derived-type variable that contains quantities going from land+ice to atmos.
       [type(land_ice_atmos_boundary_type)]

    INPUT/OUTPUT
    Atmos    Derived-type variable that contains fields needed by the flux exchange module. These fields describe the atmospheric grid and are needed to compute/exchange fluxes with other component models. All fields in this variable type are allocated for the global grid (without halo regions).
       [type(atmos_data_type)]

  2. update_atmos_model_up

    call update_atmos_model_up ( Surface_boundary, Atmos )
    DESCRIPTION
    Called every time step as the atmospheric driver to finish the upward sweep of the tridiagonal elimination for heat/moisture and compute the convective and large-scale tendencies. The atmospheric variables are advanced one time step and tendencies set back to zero.


    INPUT
    Surface_boundary    Derived-type variable that contains quantities going from land+ice to atmos.
       [type(land_ice_atmos_boundary_type)]

    INPUT/OUTPUT
    Atmos    Derived-type variable that contains fields needed by the flux exchange module. These fields describe the atmospheric grid and are needed to compute/exchange fluxes with other component models. All fields in this variable type are allocated for the global grid (without halo regions).
       [type(atmos_data_type)]

  3. atmos_model_init

    call atmos_model_init (Atmos, Time_init, Time, Time_step)
    DESCRIPTION
    This routine allocates storage and returns a variable of type atmos_boundary_data_type, and also reads a namelist input and restart file.


    INPUT
    Time_init    The base (or initial) time of the experiment.
       [type(time_type)]
    Time    The current time.
       [type(time_type)]
    Time_step    The atmospheric model/physics time step.
       [type(time_type)]

    INPUT/OUTPUT
    Atmos    Derived-type variable that contains fields needed by the flux exchange module.
       [type(atmos_data_type)]

  4. atmos_model_end

    call atmos_model_end (Atmos)
    DESCRIPTION
    Call once to terminate this module and any other modules used. This routine writes a restart file and deallocates storage used by the derived-type variable atmos_boundary_data_type.


    INPUT/OUTPUT
    Atmos    Derived-type variable that contains fields needed by the flux exchange module.
       [type(atmos_data_type)]


PUBLIC TYPES

 type atmos_data_type
     type (domain2d)               :: domain             ! domain decomposition
     integer                       :: axes(4)            ! axis indices (returned by diag_manager) for the atmospheric grid 
                                                         ! (they correspond to the x, y, pfull, phalf axes)
     real, pointer, dimension(:)   :: glon_bnd => NULL() ! global longitude axis grid box boundaries in radians.
     real, pointer, dimension(:)   :: glat_bnd => NULL() ! global latitude axis grid box boundaries in radians.
     real, pointer, dimension(:)   :: lon_bnd  => NULL() ! local longitude axis grid box boundaries in radians.
     real, pointer, dimension(:)   :: lat_bnd  => NULL() ! local latitude axis grid box boundaries in radians.
     real, pointer, dimension(:,:) :: t_bot    => NULL() ! temperature at lowest model level
     real, pointer, dimension(:,:,:) :: tr_bot   => NULL() ! tracers at lowest model level
     real, pointer, dimension(:,:) :: z_bot    => NULL() ! height above the surface for the lowest model level
     real, pointer, dimension(:,:) :: p_bot    => NULL() ! pressure at lowest model level
     real, pointer, dimension(:,:) :: u_bot    => NULL() ! zonal wind component at lowest model level
     real, pointer, dimension(:,:) :: v_bot    => NULL() ! meridional wind component at lowest model level
     real, pointer, dimension(:,:) :: p_surf   => NULL() ! surface pressure 
     real, pointer, dimension(:,:) :: gust     => NULL() ! gustiness factor
     real, pointer, dimension(:,:) :: coszen   => NULL() ! cosine of the zenith angle
     real, pointer, dimension(:,:) :: flux_sw  => NULL() ! net shortwave flux (W/m2) at the surface
     real, pointer, dimension(:,:) :: flux_sw_dir            =>NULL()
     real, pointer, dimension(:,:) :: flux_sw_dif            =>NULL()
     real, pointer, dimension(:,:) :: flux_sw_down_vis_dir   =>NULL()
     real, pointer, dimension(:,:) :: flux_sw_down_vis_dif   =>NULL()
     real, pointer, dimension(:,:) :: flux_sw_down_total_dir =>NULL()
     real, pointer, dimension(:,:) :: flux_sw_down_total_dif =>NULL()
     real, pointer, dimension(:,:) :: flux_sw_vis            =>NULL()
     real, pointer, dimension(:,:) :: flux_sw_vis_dir        =>NULL()
     real, pointer, dimension(:,:) :: flux_sw_vis_dif        =>NULL()
     real, pointer, dimension(:,:) :: flux_lw  => NULL() ! net longwave flux (W/m2) at the surface
     real, pointer, dimension(:,:) :: lprec    => NULL() ! mass of liquid precipitation since last time step (Kg/m2)
     real, pointer, dimension(:,:) :: fprec    => NULL() ! ass of frozen precipitation since last time step (Kg/m2)
     logical, pointer, dimension(:,:) :: maskmap =>NULL()! A pointer to an array indicating which
                                                         ! logical processors are actually used for
                                                         ! the ocean code. The other logical
                                                         ! processors would be all land points and
                                                         ! are not assigned to actual processors.
                                                         ! This need not be assigned if all logical
                                                         ! processors are used. This variable is dummy and need 
                                                         ! not to be set, but it is needed to pass compilation.
     type (surf_diff_type)         :: Surf_diff          ! store data needed by the multi-step version of the diffusion algorithm
     type (time_type)              :: Time               ! current time
     type (time_type)              :: Time_step          ! atmospheric time step.
     type (time_type)              :: Time_init          ! reference time.
     integer, pointer              :: pelist(:) =>NULL() ! pelist where atmosphere is running.
     logical                       :: pe                 ! current pe.
     type(coupler_2d_bc_type)      :: fields             ! array of fields used for additional tracers
 end type
type land_ice_atmos_boundary_type
   ! variables of this type are declared by coupler_main, allocated by flux_exchange_init.
!quantities going from land+ice to atmos
   real, dimension(:,:),   pointer :: t              =>NULL() ! surface temperature for radiation calculations
   real, dimension(:,:),   pointer :: albedo         =>NULL() ! surface albedo for radiation calculations
   real, dimension(:,:),   pointer :: albedo_vis_dir =>NULL()
   real, dimension(:,:),   pointer :: albedo_nir_dir =>NULL()
   real, dimension(:,:),   pointer :: albedo_vis_dif =>NULL()
   real, dimension(:,:),   pointer :: albedo_nir_dif =>NULL()
   real, dimension(:,:),   pointer :: land_frac      =>NULL() ! fraction amount of land in a grid box 
   real, dimension(:,:),   pointer :: dt_t           =>NULL() ! temperature tendency at the lowest level
   real, dimension(:,:,:), pointer :: dt_tr          =>NULL() ! tracer tendency at the lowest level
   real, dimension(:,:),   pointer :: u_flux         =>NULL() ! zonal wind stress
   real, dimension(:,:),   pointer :: v_flux         =>NULL() ! meridional wind stress
   real, dimension(:,:),   pointer :: dtaudu         =>NULL() ! derivative of zonal wind stress w.r.t. the lowest zonal level wind speed
   real, dimension(:,:),   pointer :: dtaudv         =>NULL() ! derivative of meridional wind stress w.r.t. the lowest meridional level wind speed
   real, dimension(:,:),   pointer :: u_star         =>NULL() ! friction velocity
   real, dimension(:,:),   pointer :: b_star         =>NULL() ! bouyancy scale
   real, dimension(:,:),   pointer :: q_star         =>NULL() ! moisture scale
   real, dimension(:,:),   pointer :: rough_mom      =>NULL() ! surface roughness (used for momentum)
   real, dimension(:,:,:), pointer :: data           =>NULL() !collective field for "named" fields above
   integer                         :: xtype                   !REGRID, REDIST or DIRECT
end type land_ice_atmos_boundary_type
type :: land_atmos_boundary_type
   real, dimension(:,:), pointer :: data =>NULL() ! quantities going from land alone to atmos (none at present)
end type land_atmos_boundary_type
!quantities going from ice alone to atmos (none at present)
type :: ice_atmos_boundary_type
   real, dimension(:,:), pointer :: data =>NULL() ! quantities going from ice alone to atmos (none at present)
end type ice_atmos_boundary_type


DATA SETS

None.


ERROR MESSAGES

None.


top