Contact: Isaac Held, Bruce Wyman
Reviewers:
Change history: WebCVS Log for forcing.f90
Routines for computing heating and dissipation
for "Held-Suarez" benchmark integration of a dry GCM
fms_mod
constants_mod
time_manager_mod
diag_manager_mod
field_manager_mod
tracer_manager_mod
use forcing_mod [,only: forcing_init, &
forcing ]
forcing_init : initializes module
forcing : adds tendencies to existing tendencies
Notes:
Optional namelist input can be read from file input.nml.
Diagnostic fields are specified in file diag_table.
No restart files are needed or generated by this module.
No data files are needed.
call forcing_init ( axes, Time )
INPUT:
axes -- integer, dimension(4)
axis indices (x,y,zfull,zhalf) returned by module diag_manager_mod
Time -- type(time_type)
the current time
call forcing ( is, ie, js, je, dt, Time, lat, phalf, pfull,
u, v, t, r, um, vm, tm, rm, udt, vdt, tdt, rdt
[, mask, kbot] )
INPUT: is, ie, js, je, dt, Time, lat, p_half, p_full, u, v, t, r
is, ie, js, je -- integer, scalar
global indices of the data window being passed
dt -- real, scalar
the time step (seconds)
Time -- type(time_type)
the current time
lat -- real, dimension(:,:)
latitudes of grid points in radians
phalf -- real, dimension(:,:.:)
half_level pressures (Pa)
pfull -- real, dimension(:,:.:)
full_level pressures (Pa)
size(p_full,3) = size(p_half,3)-1
u, v, t -- real, dimension(:,:.:)
full level zonal wind (m/s), meridional wind(m/s), temperature (K),
size(u,3) = size(v,3) = size(t,3) = size(p_full,3)
r -- real, dimension(:,:.:,:)
full level tracers
size(r,3) = size(p_full,3)
size(r,4) = number of tracers
IN/OUT:
udt, vdt, tdt -- real, dimension(:,:,:)
udt = du/dt = tendency of u (m/(s^2)), etc
output has heating and friction added to input tendencies
rdt -- real, dimension(:,:.:,:)
tendency of tracers
OPTIONAL INPUT: mask, kbot
mask -- real, dimension(:,:,:)
step-mountain/eta coordinate field mask
kbot -- real, dimension(:,:)
index of lowest model level (adjacent to step-mountain surface)
(all values listed are default values)
(TE = radiative equilibrium -- see Held and Suarez)
logical :: no_forcing = .false. Turns off all Held Suarez physics.
(Interfaces become dummy routines)
This switch facilitates code development and testing.
real :: delh = 60. (K) horizontal TE contrast from equator to pole
real :: t_zero = 315. (K) TE at equator at surface
real :: t_strat = 200. (K) stratospheric temperature
real :: delv = 10. (K) parameter controling static stability of TE
real :: eps = 0.0 (K) not in Held and Suarez (2*eps = TE difference
between NP and SP ( TE => TE + eps*sin(lat) )
damping times
units are (1/s) , value is inverse of damping time, if positive
(days), value is damping time, if negative
real :: ka =-40.0 radiative damping above the planetary boundary layer
real :: ks =-4.0 radiative damping within the planetary boundary layer
real :: kf =-1.0 frictional (Rayleigh) damping within the planetary boundary layer
real :: sigma_b = 0.7 top of planetary boundary layer in sigma coordinates
logical :: do_conserve_energy =.true. if true, kinetic energy dissipated by friction
is added to enthalpy, to conserve energy
real :: trflux = 1.e-5 ! surface flux for optional tracer
real :: trsink = -4. ! damping time for tracer
Diagnostic fields may be output to a netcdf file by specifying the module name identifier forcing and the desired field names (given below) in file diag_table. See the documentation for diag_manager.
Diagnostic fields for module name identifier: forcing
field name field description
---------- -----------------
teq equilibrium temperature (deg_K)
tdt_ndamp temperture tendency for newtonian damping (deg_K/sec)
udt_rdamp zonal wind tendency for rayleigh damping (m/s2)
vdt_rdamp meridional wind tendency for rayleigh damping (m/s2)
tdt_diss_rdamp Dissipative heating from Rayleigh damping (deg_K/sec)
diss_heat_rdamp Integrated dissipative heating for Rayleigh damping (W/m2)
NOTES
1) Fields tdt_diss_rdamp and diss_heat_rdamp can only be output
when namelist variable do_conserve_energy =.true.
2) Field teq can be stored as packed data (valid range = 100,400).
FATAL errors in forcing_mod
have not called forcing_init
You have not called forcing_init before forcing.
Held, I. M., and M. J. Suarez, 1994: A proposal for the intercomparison of the dynamical cores of atmospheric general circulation models. Bulletin of the American Meteorological Society, 75(10), 1825-1830.
This module computes a source-sink term for all prognostic tracers.
The source term is a globally uniform surface flux given by namelist
variable trflux. The sink term is computed everywhere as coeff*tracer.
The default coefficient is given by namelist variable trsink.
The behavior of the source-sink term can also be controlled by
field_table method "tracer_sms".
Examples:
"tracer_sms", "NONE"
"tracer_sms", "ON", "flux=1.e-3,sink=-2."
None.