module atmos_tracer_driver_mod

Overview

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

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

fms_mod
        time_manager_mod
      tracer_manager_mod
       field_manager_mod
    tracer_utilities_mod
           constants_mod
         atmos_radon_mod
atmos_carbon_aerosol_mod
    atmos_sulfur_hex_mod

Public interface

use atmos_tracer_driver_mod [, only:  atmos_tracer_driver,
                                      atmos_tracer_driver_init,
                                      atmos_tracer_driver_end ]
atmos_tracer_driver:

A routine which allows tracer code to be called.

atmos_tracer_driver_init:

Subroutine to initialize the tracer driver module.

atmos_tracer_driver_end:

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_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(:,:,:,:)]

  3. 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.

Data sets

None.

Error messages

FATAL in atmos_tracer_driver

tracer_driver_init must be called first. Tracer_driver_init needs to be called before tracer_driver.

top