!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !! !! !! GNU General Public License !! !! !! !! This file is part of the Flexible Modeling System (FMS). !! !! !! !! FMS is free software; you can redistribute it and/or modify !! !! it and are expected to follow the terms of the GNU General Public !! !! License as published by the Free Software Foundation. !! !! !! !! FMS is distributed in the hope that it will be useful, !! !! but WITHOUT ANY WARRANTY; without even the implied warranty of !! !! MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the !! !! GNU General Public License for more details. !! !! !! !! You should have received a copy of the GNU General Public License !! !! along with FMS; if not, write to: !! !! Free Software Foundation, Inc. !! !! 59 Temple Place, Suite 330 !! !! Boston, MA 02111-1307 USA !! !! or see: !! !! http://www.gnu.org/licenses/gpl.txt !! !! !! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! ! $Header: /u/gcmpack/MITgcm/pkg/atm_phys/constants_mod.F90,v 1.1 2013/05/08 22:14:14 jmc Exp $ ! $Name: $ module constants_mod ! ! Bruce Wyman ! ! ! ! Defines useful constants for Earth. ! ! ! Constants are defined as real parameters, ! except for PI and RADIAN, which are calculated in constants_init to promote ! consistency and accuracy among various compilers. ! ! Constants are accessed through the "use" statement. ! !use fms_mod, only: write_version_number implicit none private character(len=128) :: version='$Id: constants_mod.F90,v 1.1 2013/05/08 22:14:14 jmc Exp $' character(len=128) :: tagname='$Name: $' logical :: do_log = .true. logical :: module_is_initialized = .FALSE. !dummy variable to use in HUGE initializations real :: realnumber !------------ physical constants --------------- ! ! radius of the earth ! ! ! rotation rate of the planet (earth) ! ! ! acceleration due to gravity ! ! ! gas constant for dry air ! ! ! RDGAS / CP_AIR ! ! ! specific heat capacity of dry air at constant pressure ! ! ! specific heat capacity taken from McDougall (2002) "Potential Enthalpy ..." ! ! ! average density of sea water ! ! ! reciprocal of average density of sea water ! ! ! (kg/m^3)*(cal/kg/deg C)(joules/cal) = (joules/m^3/deg C) ! real, public, parameter :: RADIUS = 6371.0e3 real, public, parameter :: OMEGA = 7.292e-5 real, public, parameter :: GRAV = 9.80 real, public, parameter :: RDGAS = 287.04 real, public, parameter :: KAPPA = 2./7. real, public, parameter :: CP_AIR = RDGAS/KAPPA real, public, parameter :: CP_OCEAN = 3989.24495292815 real, public, parameter :: RHO0 = 1.035e3 real, public, parameter :: RHO0R = 1.0/RHO0 real, public, parameter :: RHO_CP = RHO0*CP_OCEAN !------------ water vapor constants --------------- ! ! gas constant for water vapor ! ! ! density of liquid water ! ! ! latent heat of evaporation ! ! ! latent heat of fusion ! ! ! latent heat of sublimation ! ! ! temp where fresh water freezes ! real, public, parameter :: RVGAS = 461.50 real, public, parameter :: DENS_H2O = 1000. real, public, parameter :: HLV = 2.500e6 real, public, parameter :: HLF = 3.34e5 real, public, parameter :: HLS = 2.834e6 real, public, parameter :: TFREEZE = 273.16 !-------------- radiation constants ----------------- ! ! molecular weight of air ! ! ! molecular weight of water ! ! ! molecular weight of ozone ! ! ! diffusivity factor ! ! ! seconds in a day ! ! ! Avogadro's number ! ! ! mean sea level pressure ! ! ! mean sea level pressure ! ! ! radius of the earth ! real, public, parameter :: WTMAIR = 2.896440E+01 real, public, parameter :: WTMH2O = 1.801534E+01 real, public, parameter :: WTMO3 = 47.99820E+01 real, public, parameter :: DIFFAC = 1.660000E+00 real, public, parameter :: SECONDS_PER_DAY = 8.640000E+04 real, public, parameter :: AVOGNO = 6.023000E+23 real, public, parameter :: PSTD = 1.013250E+06 real, public, parameter :: PSTD_MKS = 101325.0 real, public, parameter :: REARTH = 6.356766E+08 ! ! factor used to convert flux divergence to heating rate in degrees per day ! ! ! factor used to convert flux divergence to heating rate in degrees per day ! ! ! mixing ratio of molecular oxygen in air ! ! ! reference atmospheric density ! ! ! minimum value allowed as argument to log function ! ! ! melting point of water ! real, public, parameter :: RADCON = ((1.0E+02*GRAV)/(1.0E+04*CP_AIR))*SECONDS_PER_DAY real, public, parameter :: RADCON_MKS = (GRAV/CP_AIR)*SECONDS_PER_DAY real, public, parameter :: O2MIXRAT = 2.0953E-01 real, public, parameter :: RHOAIR = 1.292269 real, public, parameter :: ALOGMIN = -50.0 real, public, parameter :: FREZDK = 273.16 !------------ miscellaneous constants --------------- ! ! Stefan-Boltzmann constant ! ! ! Von Karman constant ! ! ! ratio of circle circumference to diameter ! ! ! degrees per radian ! ! ! converts rho*g*z (in mks) to dbars: 1dbar = 10^4 (kg/m^3)(m/s^2)m ! ! ! degrees Kelvin at zero Celsius ! ! ! a small number to prevent divide by zero exceptions ! real, public, parameter :: STEFAN = 5.6734e-8 real, public, parameter :: VONKARM = 0.40 real, public :: PI = HUGE(realnumber) real, public :: RADIAN = HUGE(realnumber) real, public, parameter :: C2DBARS = 1.e-4 real, public, parameter :: KELVIN = 273.15 real, public, parameter :: EPSLN = 1.0e-40 !----------------------------------------------------------------------- public constants_init contains ! ! ! Initialization routine. The purpose of this routine ! is initialize the value of PI and RADIAN, and to write the ! version and tag name information to the log file. ! ! ! If this routine is called more than once or called ! from other than the root PE it will return silently. ! There are no arguments. ! ! subroutine constants_init if (module_is_initialized) return module_is_initialized = .TRUE. if (.not.do_log) return ! call write_version_number (version,tagname) do_log = .false. PI = 4.0*ATAN(1.0) RADIAN = 180.0/PI end subroutine constants_init ! !----------------------------------------------------------------------- end module constants_mod ! ! ! 1. Renaming of constants. ! ! ! 2. Additional constants. ! ! ! Constants have been declared as type REAL, PARAMETER. ! ! The value a constant can not be changed in a users program. ! New constants can be defined in terms of values from the ! constants module using a parameter statement.

! ! The name given to a particular constant may be changed.

! ! Constants can be used on the right side on an assignment statement ! (their value can not be reassigned). ! ! As PI is calculated, it cannot be a parameter variable. ! Do not assign a new value to PI. ! ! !
!    use constants_mod, only:  TFREEZE, grav_new => GRAV
!    real, parameter :: grav_inv = 1.0 / grav_new
!    tempc(:,:,:) = tempk(:,:,:) - TFREEZE
!    geopotential(:,:) = height(:,:) * grav_new
!
!
!
!