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

Module ocean_density_mod

Contact:  S.M. Griffies
Reviewers: 
Change History: WebCVS Log


OVERVIEW

Compute density and related quantities.

This module computes the in-situ density and its partial derivatives with respect to conservative temperature or potential temperature, and with respect to salinity.

Based on Jackett, McDougall, Feistel Wright, and Griffies(2005).

This equation of state is valid over a "cone-shaped" range corresponding to

0psu <= salinity <= 40 psu

-3C <= theta <= 40C "theta" = either conservative or potential temp

0dbar <= pressure <= 8000dbar

with the cone getting smaller in the deeper ocean where theta and salinity vary over a smaller range.

Input variables are the following:

--salinity in psu --conservative temperature or potential temperature (theta) in deg C --pressure in dbars (1bar = 10dbar = 10^5 Newton/m^2 = 10^5 Pascals).

Note that in the ocean, pressure increases roughly by 1dbar for each meter depth. Also note that pressure is the "sea pressure", which is the absolute pressure minus the pressure of a standard atmosphere, which is 10.1325 dbars.

check values
for "theta" = conservative temperature rho(s=20psu,theta=20C,p=1000dbar) = 1017.842890411975 (kg/m^3)
alpha(s=20psu,theta=20C,p=1000dbar) = 2.436057013634649e-4 (1/C)
beta(s=20psu,theta=20C,p=1000dbar) = 7.314818108935248e-4 (1/psu)
for "theta" = potential temperature rho(s=20psu,theta=20C,p=1000dbar) = 1017.728868019642 (kg/m^3)
alpha(s=20psu,theta=20C,p=1000dbar) = 2.525481286927133e-4 (1/C)
beta(s=20psu,theta=20C,p=1000dbar) = 7.379638527217575e-4 (1/psu)
This equation of state should be suitable for purposes of realistic global ocean climate modeling.

B. Linear equation for use in idealized Boussinesq studies

This equation renders density a linear function of potential temperature and salinity. All nonlinearities are ignored, as are pressure effects.

The valid range for theta and salinity arbitrary for the linear equation of state.



OTHER MODULES USED

       constants_mod
diag_manager_mod
fms_mod
fms_io_mod
mpp_domains_mod
mpp_mod
platform_mod
time_manager_mod
field_manager_mod
ocean_domains_mod
ocean_parameters_mod
ocean_pressure_mod
ocean_types_mod
ocean_util_mod
ocean_workspace_mod

PUBLIC INTERFACE

ocean_density_init:
ocean_density_diag:
update_ocean_density:
density_field:
density_level:
density_line:
neutral_density_field:
neutral_density_point:
potential_density:
density_sfc:
density_point:
density_derivs_field:
cabbeling_thermobaricity:
density_derivs_level:
density_derivs_point:
density_delta_z:
density_delta_sfc:
compute_buoyfreq:
ocean_density_end:
ocean_density_restart:
ocean_density_chksum:


PUBLIC DATA

None.


PUBLIC ROUTINES

  1. ocean_density_init

    DESCRIPTION
    Initialize the density module


  2. ocean_density_diag

    DESCRIPTION
    Diagnose pressure_at_depth and diagnostic ocean density fields. Also send some diagnostics to diagnostic manager.


  3. update_ocean_density

    DESCRIPTION
    Diagnose pressure_at_depth and ocean density. Also send some diagnostics to diagnostic manager.


  4. density_field

    DESCRIPTION
    Compute density for all grid points.

    Note that pressure here is

    sea pressure = absolute pressure - press_standard (dbars)

    and salinity is in model units (psu).



  5. density_level

    DESCRIPTION
    Compute density at a particular k-level.

    Note that pressure here is

    sea pressure = absolute pressure - press_standard (dbars)



  6. density_line

    DESCRIPTION
    Compute density at a particular k-level and j index. This scheme is used in the vectorized version of the full convection scheme.

    Note that pressure here is

    sea pressure = absolute pressure - press_standard



  7. neutral_density_field

    DESCRIPTION
    Compute neutral density according to a rational polynomial approximation given by McDougall and Jackett (2005).


  8. neutral_density_point

    DESCRIPTION
    Compute neutral density according to a rational polynomial approximation given by McDougall and Jackett (2005).


  9. potential_density

    DESCRIPTION
    Compute potential density referenced to some given sea pressure.

    Note that potential density referenced to the surface (i.e., sigma_0) has a zero sea pressure, so pressure=0.0 should be the argument to the function.

    Note that pressure here is sea pressure = absolute pressure - press_standard (dbars)



  10. density_sfc

    DESCRIPTION
    Compute density as a function of surface salinity, surface theta, and insitu sea pressure.

    Note that pressure here is sea pressure = absolute pressure - press_standard (dbars)

    For use in KPP mixed layer scheme


  11. density_point

    DESCRIPTION
    Compute density at a single model grid point.

    Note that pressure here is

    sea pressure = absolute pressure - press_standard (dbars)



  12. density_derivs_field

    DESCRIPTION
    Compute partial derivative of density with respect to potential temperature and with respect to salinity. Hold pressure constant.

    Pressure here is

    sea pressure = absolute press - press_standard (dbars)



  13. cabbeling_thermobaricity

    DESCRIPTION
    Compute cabbeling and thermobaricity parameters, as defined in McDougall (1987).

    Pressure here is sea pressure = absolute press - press_standard (dbars)



  14. density_derivs_level

    DESCRIPTION
    Compute partial derivative of density with respect to potential temperature and with respect to salinity. Hold pressure constant.

    Pressure here is sea pressure = absolute press - press_standard



  15. density_derivs_point

    DESCRIPTION
    Compute partial derivative of density with respect to potential temperature and with respect to salinity. Do so here for a point.

    Pressure here is

    sea pressure = absolute pressure - press_standard (dbars)



  16. density_delta_z

    DESCRIPTION
    rho(k)-rho(k+1) for all i,j with both temperatures referenced to the deeper pressure depth.

    Of use for KPP scheme.


  17. density_delta_sfc

    DESCRIPTION
    rho(1)-rho(k+1) for all i,j.

    Of use for KPP scheme.


  18. compute_buoyfreq

    DESCRIPTION
    Diagnose the buoyancy frequency, both at T-points and at vertical interfaces of T-cells. The algorithm follows that used in subroutine diagnose_wdianeutral.

    Author: Stephen.Griffies@noaa.gov



  19. ocean_density_end

    DESCRIPTION
    Write density and pressure_at_depth to a restart.



  20. ocean_density_restart

    DESCRIPTION
    Write out restart files registered through register_restart_file


  21. ocean_density_chksum

    DESCRIPTION
    Compute checksums for density.



NAMELIST

&ocean_density_nml

write_a_restart
Set true to write a restart. False setting only for rare cases where wish to benchmark model without measuring the cost of writing restarts and associated chksums. Default is write_a_restart=.true.
[logical]
press_standard
Standard atmospheric pressure (dbar). The realistic EOS used in mom4 requires "sea pressure" as an argument rather than absolute pressure. Sea pressure is absolute pressure minus a standard atmospheric pressure of 10.1325dbar.

For models that do have a realistic atmospheric loading, then it is appropriate to remove 10.1325dbar prior to computing the EOS. For those cases with zero atmospheric pressure, then it is not necessary to remove the standard atmosphere. The default for the press_standard is 0.0dbar.
[real, units: dbar]
t_test
Conservative temperature or potential temperature for testing the EOS.
[real, units: C]
s_test
Salinity for testing the EOS.
[real, units: psu]
p_test
Sea pressure for testing the EOS.
[real, units: dbar]
tn_test
Conservative temperature or potential temperature for testing the equation for neutral density.
[real, units: C]
sn_test
Salinity the equation for neutral density.
[real, units: psu]
linear_eos
Set to true if wish to use the linear equation of state.
[logical]
alpha_linear_eos
Constant "thermal expansion coefficient" for EOS rho = rho0 - alpha_linear_eos*theta + beta_linear_eos*salinity
[real]
beta_linear_eos
Constant "saline contraction coefficient" for EOS rho = rho0 - alpha_linear_eos*theta + beta_linear_eos*salinity
[real]
potrho_press
Sea pressure for computing diagnostic potential density of use for computing diagnostics with potential density.
[real, units: dbar]
potrho_min
Minimum potential density used to partition vertical according to potential density.
[real, units: kg/m^3]
potrho_max
Maximum potential density used to partition vertical according to potential density.
[real, units: kg/m^3]
neutralrho_min
Minimum neutral density used to partition vertical according to rational polynomial approximation to neutral density.
[real, units: kg/m^3]
neutralrho_max
Maximum neutral density used to partition vertical according to rational polynomial approximation to neutral density.
[real, units: kg/m^3]
theta_min
Minimum conservative temperature or potential temperature used to partition vertical according to temperature.
[real, units: C]
theta_max
Maximum conservative temperature or potential temperature used to partition vertical according to temperature.
[real, units: C]
layer_nk
Number of classes used to partition vertical according to potential density, conservative temperature, or potential temperature. Used for diagnostics.
[integer]
buoyfreq_smooth_vert
To smooth the vertical temp and salt derivative for diagnosing the buoyancy frequency. Default buoyfreq_smooth_vert=.true.
[logical]
epsln_drhodz
To normalize the inverse vertical derivative of neutral density for computing the buoyancy frequency. Default epsln_drhodz=1e-10.
[real, units: kg/m4]
mask_domain_restart
For cases where use the domain masking, it is necessary to initialize the field denominator_r to nonzero in order to avoid NaNs in the case when change processor layout in between restarts. Note that when use solid wall boundary conditions, this logical should remain false in order to bitwise reproduce across restarts. Default mask_domain_restart=.false.
[logical]
debug_this_module
For debugging nonlinear equation of state
[logical]
rho0_density
For debugging, it is often useful to have rho=rho0 uniform.
[logical]
do_bitwise_exact_sum
Set true to do bitwise exact global sum. When it is false, the global sum will be non-bitwise_exact, but will significantly increase efficiency. default: do_bitwise_exact_sum=.false.
[logical]


DATA SETS

None.


ERROR MESSAGES

None.


REFERENCES

  1. Feistel (2003), A new extended Gibbs thermodynamic potential of seawater. Progress in Oceanography. vol 58, pages 43-114.
  2. Jackett, McDougall, Feistel, Wright, and Griffies (2006) Algorithms for density, potential temperature, conservative temperature, and freezing temperature of seawater. Journal of Atmospheric and Oceanic Technology, 2006, in press.
  3. McDougall and Jackett (2005) The material derivative of neutral density Journal of Marine Research, vol 63, pages 159-185.
  4. S.M. Griffies, M.J. Harrison, R.C. Pacanowski, and A. Rosati A Technical Guide to MOM4 (2003)
  5. S.M. Griffies, R.C. Pacanowski, R.M. Schmidt, and V. Balaji Tracer Conservation with an Explicit Free Surface Method for Z-coordinate Ocean Models Monthly Weather Review (2001) vol 129 pages 1081--1098
  6. T. McDougall (1987) Cabbeling, Thermobaricity, and water mass conversion JGR vol 92, pages 5448-5464


COMPILER SPECIFICS

None.


PRECOMPILER OPTIONS

None.


LOADER OPTIONS

None.


TEST PROGRAM

None.


KNOWN BUGS

None.


NOTES

Density is computed as a function of conservative temperature (degC) or potential temperature (degC), salinity (psu), and in-situ pressure (dbar). The pressure contribution includes that from the free surface height and the applied atmospheric and/or sea ice pressure.

For vert_coordinate==GEOPOTENTIAL, ZSTAR, or ZSIGMA, baroclinic component of hydrostatic pressure is not known until the density is known. In this case, the baroclinic pressure contribution to density is lagged by a time step. rho(tau) = rho[theta(tau),s(tau), p_atm(tau) + p_fs(tau) + p_baroclinic(tau-1)]. This issue does not arise when using vert_coordinate=PRESSURE, PSTAR, or PSIGMA.



FUTURE PLANS

None.


top