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