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

Module atmos_tracer_driver_mod

Contact:  William Cooke
Reviewers:  Matt Harrison Bruce Wyman
Change History: WebCVS Log


OVERVIEW

This code allows the user to easily add tracers to the FMS framework.

This is a null module to be used when no atmospheric model is required.

This code allows a user to easily implement tracer code in the FMS framework. The tracer and tracer tendency arrays are supplied along with longtitude, latitude, wind, temperature, and pressure information which allows a user to implement sources and sinks of the tracer which depend on these parameters.

In the following example, radon being implemented in the atmosphere will be used as an example of how to implement a tracer in the FMS framework.

Within the global scope of tracer_driver_mod a use statement should be inserted for each tracer to be added.
      use radon_mod, only : radon_sourcesink, radon_init, radon_end
An integer parameter, which will be used as an identifier for the tracer, should be assigned.
      integer :: nradon
Within tracer_driver_init a call to the tracer manager is needed in order to identify which tracer it has set the tracer as.
      nradon = get_tracer_index(MODEL_ATMOS,'radon')
Here MODEL_ATMOS is a parameter defined in field_manager. 'radon' is the name of the tracer within the field_table.

If the tracer exists then the integer returned will be positive and it can be used to call the initialization routines for the individual tracers.
      if (nradon > 0) then
           call radon_init(Argument list)
      endif
Within tracer_driver the user can also use the identifier to surround calls to the source-sink routines for the tracer of interest.

      if (nradon > 0 .and. nradon <= nt) then
          call radon_sourcesink (Argument list)
          rdt(:,:,:,nradon)=rdt(:,:,:,nradon)+rtnd(:,:,:)
      endif
It is the users responsibility to add the tendency generated by the sourcesink routine.

Within tracer_driver_end the user can add calls to the terminators for the appropriate source sink routines.

      call radon_end
This may simply be a deallocation statement or a routine to send output to the logfile stating that the termination routine has been called.


OTHER MODULES USED

 time_manager_mod
coupler_types_mod

PUBLIC INTERFACE

atmos_tracer_driver:
A routine which allows tracer code to be called.
atmos_tracer_flux_init:
Subroutine to initialize the ocean-atmosphere gas flux modules
atmos_tracer_driver_init:
Subroutine to initialize the tracer driver module.
atmos_tracer_driver_end:
Subroutine to terminate the tracer driver module.
atmos_tracer_driver_gather_data:
Subroutine to terminate the tracer driver module.


PUBLIC DATA

None.


PUBLIC ROUTINES

  1. atmos_tracer_driver

    call atmos_tracer_driver (is, ie, js, je, Time, lon, lat, land, phalf, pfull, r, & u, v, t, q, u_star, rdt, rm, rdiag, kbot)
    DESCRIPTION
    This subroutine calls the source sink routines for atmospheric tracers. This is the interface between the dynamical core of the model and the tracer code. It should supply all the necessary information to a user that they need in order to calculate the tendency of that tracer with respect to emissions or chemical losses.



    INPUT
    is, ie, js, je    Local domain boundaries.
       [integer]
    Time    Model time.
       [type(time_type)]
    lon    Longitude of the centre of the model gridcells
       [real, dimension(:,:)]
    lat    Latitude of the centre of the model gridcells
       [real, dimension(:,:)]
    land    Land/sea mask.
       [logical, dimension(:,:)]
    phalf    Pressures on the model half levels.
       [real, dimension(:,:,:)]
    pfull    Pressures on the model full levels.
       [real, dimension(:,:,:)]
    r    The tracer array in the component model.
       [real, dimension(:,:,:,:)]
    u    Zonal wind speed.
       [real, dimension(:,:,:)]
    v    Meridonal wind speed.
       [real, dimension(:,:,:)]
    t    Temperature.
       [real, dimension(:,:,:)]
    q    Specific humidity. This may also be accessible as a portion of the tracer array.
       [real, dimension(:,:,:)]
    u_star    Friction velocity :: The magnitude of the wind stress is density*(ustar**2) The drag coefficient for momentum is u_star**2/(u**2+v**2)
       [real, dimension(:,:)]
    rm    The tracer array in the component model for the previous timestep.
       [real, dimension(:,:,:,:)]
    kbot    Integer array describing which model layer intercepts the surface.
       [integer, optional, dimension(:,:)]

    INPUT/OUTPUT
    rdt    The tendency of the tracer array in the compenent model. The tendency due to sources and sinks computed in the individual tracer routines should be added to this array before exiting tracer_driver.
       [real, dimension(:,:,:,:)]
    rdiag    The array of diagnostic tracers. As these may be changed within the tracer routines for diagnostic purposes, they need to be writable.
       [real, dimension(:,:,:,:)]

  2. atmos_tracer_flux_init

    DESCRIPTION
    Subroutine to initialize the ocean-atmosphere gas flux modules


  3. atmos_tracer_driver_init

    call atmos_tracer_driver_init (lonb,latb, r, mask, axes, Time)
    DESCRIPTION
    The purpose of the arguments here are for passing on to the individual tracer code. The user may wish to provide initial values which can be implemented in the initialization part of the tracer code. Remember that the tracer manager will provide a simple fixed or exponential profile if the user provides data for this within the field table. However if a more complicated profile is required then it should be set up in the initialization section of the user tracer code.


    INPUT
    lonb    The longitudes for the local domain.
       [real, dimension(:)]
    latb    The latitudes for the local domain.
       [real, dimension(:)]
    mask    optional mask (0. or 1.) that designates which grid points are above (=1.) or below (=0.) the ground dimensioned as (nlon,nlat,nlev).
       [real, optional, dimension(:,:,:)]
    Time    Model time.
       [type(time_type)]
    axes    The axes relating to the tracer array dimensioned as (nlon, nlat, nlev, ntime)
       [integer, dimension(4)]

    INPUT/OUTPUT
    r    Tracer fields dimensioned as (nlon,nlat,nlev,ntrace).
       [real, dimension(:,:,:,:)]

  4. atmos_tracer_driver_end

    call atmos_tracer_driver_end 
    
    DESCRIPTION
    Termination routine for tracer_driver. It should also call the destructors for the individual tracer routines.


  5. atmos_tracer_driver_gather_data

    call atmos_tracer_driver_gather_data 
    
    DESCRIPTION
    Termination routine for tracer_driver. It should also call the destructors for the individual tracer routines.



DATA SETS

None.


ERROR MESSAGES

None.


top