New URL for NEMO forge!   http://forge.nemo-ocean.eu

Since March 2022 along with NEMO 4.2 release, the code development moved to a self-hosted GitLab.
This present forge is now archived and remained online for history.
phycst.F90 in branches/dev_001_SBC/NEMO/OPA_SRC – NEMO

source: branches/dev_001_SBC/NEMO/OPA_SRC/phycst.F90 @ 886

Last change on this file since 886 was 885, checked in by ctlod, 16 years ago

dev_001_SBC: Step I: add the LIM 3.0 component into LIM_SRC_3 directory, see ticket: #111

  • Property svn:eol-style set to native
  • Property svn:keywords set to Id
File size: 11.5 KB
Line 
1MODULE phycst
2   !!======================================================================
3   !!                    ***  MODULE  phycst  ***
4   !!     Definition of of both ocean and ice parameters used in the code
5   !!=====================================================================
6   !! History :        !  90-10  (C. Levy - G. Madec)  Original code
7   !!                  !  91-11  (G. Madec)
8   !!                  !  91-12  (M. Imbard)
9   !!             8.5  !  02-08  (G. Madec, C. Ethe)  F90, add ice constants
10   !!             9.0  !  06-08  (G. Madec)  style
11   !!----------------------------------------------------------------------
12
13   !!----------------------------------------------------------------------
14   !!   phy_cst  : define and print physical constant and domain parameters
15   !!----------------------------------------------------------------------
16   USE par_oce          ! ocean parameters
17   USE in_out_manager   ! I/O manager
18
19   IMPLICIT NONE
20   PRIVATE
21
22   PUBLIC   phy_cst     ! routine called by inipar.F90
23
24   REAL(wp), PUBLIC ::   rpi = 3.141592653589793_wp             !: pi
25   REAL(wp), PUBLIC ::   rad = 3.141592653589793_wp / 180._wp   !: conversion from degre into radian
26   REAL(wp), PUBLIC ::   rsmall = 0.5 * EPSILON( 1. )           !: smallest real computer value
27   
28   REAL(wp), PUBLIC ::          & !:
29      rday = 24.*60.*60.  ,     & !: day (s)
30      rsiyea              ,     & !: sideral year (s)
31      rsiday              ,     & !: sideral day (s)
32      raajj = 365._wp     ,     & !: number of days in one year
33      raamo =  12._wp     ,     & !: number of months in one year
34      rjjhh =  24._wp     ,     & !: number of hours in one day
35      rhhmm =  60._wp     ,     & !: number of minutes in one hour
36      rmmss =  60._wp     ,     & !: number of seconds in one minute
37      raass               ,     & !: number of seconds in one year
38      rmoss               ,     & !: number of seconds in one month
39      rjjss               ,     & !: number of seconds in one day
40!!!   omega = 7.292115083046061e-5_wp ,  &  !: change the last digit!
41      omega               ,    &  !: earth rotation parameter
42      ra    = 6371229._wp ,    &  !: earth radius (meter)
43      grav  = 9.80665_wp          !: gravity (m/s2)
44   
45   REAL(wp), PUBLIC ::         &  !:
46      rtt      = 273.16_wp  ,  &  !: triple point of temperature (Kelvin)
47      rt0      = 273.15_wp  ,  &  !: freezing point of water (Kelvin)
48#if defined key_lim3
49      rt0_snow = 273.16_wp  ,  &  !: melting point of snow  (Kelvin)
50      rt0_ice  = 273.16_wp  ,  &  !: melting point of ice   (Kelvin)
51#else
52      rt0_snow = 273.15_wp  ,  &  !: melting point of snow  (Kelvin)
53      rt0_ice  = 273.05_wp  ,  &  !: melting point of ice   (Kelvin)
54#endif
55      rau0     = 1020._wp   ,  &  !: volumic mass of reference (kg/m3)
56      rauw     = 1000._wp   ,  &  !: volumic mass of pure water (kg/m3)
57      rcp      =    4.e+3_wp,  &  !: ocean specific heat
58      ro0cpr                      !: = 1. / ( rau0 * rcp )
59
60   REAL(wp), PUBLIC ::            &  !:
61#if defined key_lim3
62      rcdsn   =   0.31_wp     ,   &  !: thermal conductivity of snow
63      rcdic   =   2.034396_wp ,   &  !: thermal conductivity of fresh ice
64      cpic    = 2067.0        ,   &
65      ! add the following lines
66      lsub    = 2.834e+6      ,   &  !: pure ice latent heat of sublimation (J.kg-1)
67      lfus    = 0.334e+6      ,   &  !: latent heat of fusion of fresh ice   (J.kg-1)
68      rhoic   = 917._wp       ,   &  !: volumic mass of sea ice (kg/m3)
69      tmut    =   0.054       ,   &  !: decrease of seawater meltpoint with salinity
70#else
71      rcdsn   =   0.22_wp     ,   &  !: conductivity of the snow
72      rcdic   =   2.034396_wp ,   &  !: conductivity of the ice
73      rcpsn   =   6.9069e+5_wp,   &  !: density times specific heat for snow
74      rcpic   =   1.8837e+6_wp,   &  !: volumetric latent heat fusion of sea ice
75      xlsn    = 110.121e+6_wp ,   &  !: volumetric latent heat fusion of snow
76      xlic    = 300.33e+6_wp  ,   &  !: volumetric latent heat fusion of ice
77      xsn     =   2.8e+6      ,   &  !: latent heat of sublimation of snow
78      rhoic   = 900._wp       ,   &  !: volumic mass of sea ice (kg/m3)
79#endif
80      rhosn   = 330._wp       ,   &  !: volumic mass of snow (kg/m3)
81      emic    =   0.97_wp     ,   &  !: emissivity of snow or ice
82      sice    =   6.0_wp      ,   &  !: salinity of ice (psu)
83      soce    =  34.7_wp      ,   &  !: salinity of sea (psu)
84      cevap   =   2.5e+6_wp   ,   &  !: latent heat of evaporation (water)
85      srgamma =   0.9_wp      ,   &  !: correction factor for solar radiation (Oberhuber, 1974)
86      vkarmn  =   0.4_wp      ,   &  !: von Karman constant
87      stefan  =   5.67e-8_wp         !: Stefan-Boltzmann constant
88
89   !!----------------------------------------------------------------------
90   !!  OPA 9.0 , LOCEAN-IPSL (2006)
91   !! $Id$
92   !! Software governed by the CeCILL licence (modipsl/doc/NEMO_CeCILL.txt)
93   !!----------------------------------------------------------------------
94   
95CONTAINS
96   
97   SUBROUTINE phy_cst
98      !!----------------------------------------------------------------------
99      !!                       ***  ROUTINE phy_cst  ***
100      !!
101      !! ** Purpose :   Print model parameters and set and print the constants
102      !!----------------------------------------------------------------------
103      CHARACTER (len=64) ::   cform = "(A12, 3(A13, I7) )" 
104      !!----------------------------------------------------------------------
105
106      IF(lwp) WRITE(numout,*)
107      IF(lwp) WRITE(numout,*) ' phy_cst : initialization of ocean parameters and constants'
108      IF(lwp) WRITE(numout,*) ' ~~~~~~~'
109
110      ! Ocean Parameters
111      ! ----------------
112      IF(lwp) THEN
113         WRITE(numout,*) '       Domain info'
114         WRITE(numout,*) '          dimension of model'
115         WRITE(numout,*) '                 Local domain      Global domain       Data domain '
116         WRITE(numout,cform) '            ','   jpi     : ', jpi, '   jpiglo  : ', jpiglo, '   jpidta  : ', jpidta
117         WRITE(numout,cform) '            ','   jpj     : ', jpj, '   jpjglo  : ', jpjglo, '   jpjdta  : ', jpjdta
118         WRITE(numout,cform) '            ','   jpk     : ', jpk, '   jpk     : ', jpk   , '   jpkdta  : ', jpkdta
119         WRITE(numout,*)      '           ','   jpij    : ', jpij
120         WRITE(numout,*) '          mpp local domain info (mpp)'
121         WRITE(numout,*) '             jpni    : ', jpni, '   jpreci  : ', jpreci
122         WRITE(numout,*) '             jpnj    : ', jpnj, '   jprecj  : ', jprecj
123         WRITE(numout,*) '             jpnij   : ', jpnij
124         WRITE(numout,*) '          lateral domain boundary condition type : jperio  = ', jperio
125         WRITE(numout,*) '          domain island (use in rigid-lid case)  : jpisl   = ', jpisl, '   jpnisl  = ', jpnisl
126      ENDIF
127
128      ! Define constants
129      ! ----------------
130      IF(lwp) WRITE(numout,*)
131      IF(lwp) WRITE(numout,*) '       Constants'
132
133      IF(lwp) WRITE(numout,*)
134      IF(lwp) WRITE(numout,*) '          mathematical constant                 rpi = ', rpi
135
136      rsiyea = 365.25 * rday * 2. * rpi / 6.283076
137      rsiday = rday / ( 1. + rday / rsiyea )
138      omega  = 2. * rpi / rsiday 
139      IF(lwp) WRITE(numout,*)
140      IF(lwp) WRITE(numout,*) '          day                                rday   = ', rday,   ' s'
141      IF(lwp) WRITE(numout,*) '          sideral year                       rsiyea = ', rsiyea, ' s'
142      IF(lwp) WRITE(numout,*) '          sideral day                        rsiday = ', rsiday, ' s'
143      IF(lwp) WRITE(numout,*) '          omega                              omega  = ', omega,  ' s-1'
144
145      rjjss = rjjhh * rhhmm * rmmss
146      IF(lwp) WRITE(numout,*)
147      IF(lwp) WRITE(numout,*) '          nb of months per year               raamo = ', raamo, ' months'
148      IF(lwp) WRITE(numout,*) '          nb of hours per day                 rjjhh = ', rjjhh, ' hours'
149      IF(lwp) WRITE(numout,*) '          nb of minutes per hour              rhhmm = ', rhhmm, ' mn'
150      IF(lwp) WRITE(numout,*) '          nb of seconds per minute            rmmss = ', rmmss, ' s'
151      IF(lwp) WRITE(numout,*) '          nb of seconds per day               rjjss = ', rjjss, ' s'
152
153      IF(lwp) WRITE(numout,*)
154      IF(lwp) WRITE(numout,*) '          earth radius                         ra   = ', ra, ' m'
155      IF(lwp) WRITE(numout,*) '          gravity                              grav = ', grav , ' m/s^2'
156
157      IF(lwp) WRITE(numout,*)
158      IF(lwp) WRITE(numout,*) '          triple point of temperature      rtt      = ', rtt     , ' K'
159      IF(lwp) WRITE(numout,*) '          freezing point of water          rt0      = ', rt0     , ' K'
160      IF(lwp) WRITE(numout,*) '          melting point of snow            rt0_snow = ', rt0_snow, ' K'
161      IF(lwp) WRITE(numout,*) '          melting point of ice             rt0_ice  = ', rt0_ice , ' K'
162
163      ro0cpr = 1. / ( rau0 * rcp )
164      IF(lwp) WRITE(numout,*)
165      IF(lwp) WRITE(numout,*) '          volumic mass of pure water         rauw   = ', rauw, ' kg/m^3'
166      IF(lwp) WRITE(numout,*) '          volumic mass of reference          rau0   = ', rau0, ' kg/m^3'
167      IF(lwp) WRITE(numout,*) '          ocean specific heat                rcp    = ', rcp
168      IF(lwp) WRITE(numout,*) '                       1. / ( rau0 * rcp ) = ro0cpr = ', ro0cpr
169
170      IF(lwp) THEN
171         WRITE(numout,*)
172         WRITE(numout,*) '          thermal conductivity of the snow          = ', rcdsn   , ' J/s/m/K'
173         WRITE(numout,*) '          thermal conductivity of the ice           = ', rcdic   , ' J/s/m/K'
174#if defined key_lim3
175         WRITE(numout,*) '          fresh ice specific heat                   = ', cpic    , ' J/kg/K'
176         WRITE(numout,*) '          latent heat of fusion of fresh ice / snow = ', lfus    , ' J/kg'
177         WRITE(numout,*) '          latent heat of subl.  of fresh ice / snow = ', lsub    , ' J/kg'
178#else
179         WRITE(numout,*) '          density times specific heat for snow      = ', rcpsn   , ' J/m^3/K' 
180         WRITE(numout,*) '          density times specific heat for ice       = ', rcpic   , ' J/m^3/K'
181         WRITE(numout,*) '          volumetric latent heat fusion of sea ice  = ', xlic    , ' J/m' 
182         WRITE(numout,*) '          volumetric latent heat fusion of snow     = ', xlsn    , ' J/m' 
183         WRITE(numout,*) '          latent heat of sublimation of snow        = ', xsn     , ' J/kg' 
184#endif
185         WRITE(numout,*) '          density of sea ice                        = ', rhoic   , ' kg/m^3'
186         WRITE(numout,*) '          density of snow                           = ', rhosn   , ' kg/m^3'
187         WRITE(numout,*) '          emissivity of snow or ice                 = ', emic 
188         WRITE(numout,*) '          salinity of ice                           = ', sice    , ' psu'
189         WRITE(numout,*) '          salinity of sea                           = ', soce    , ' psu'
190         WRITE(numout,*) '          latent heat of evaporation (water)        = ', cevap   , ' J/m^3' 
191         WRITE(numout,*) '          correction factor for solar radiation     = ', srgamma 
192         WRITE(numout,*) '          von Karman constant                       = ', vkarmn 
193         WRITE(numout,*) '          Stefan-Boltzmann constant                 = ', stefan  , ' J/s/m^2/K^4'
194
195         WRITE(numout,*)
196         WRITE(numout,*) '          conversion: degre ==> radian          rad = ', rad
197
198         WRITE(numout,*)
199         WRITE(numout,*) '          smallest real computer value       rsmall = ', rsmall
200      ENDIF
201
202   END SUBROUTINE phy_cst
203
204   !!======================================================================
205END MODULE phycst
Note: See TracBrowser for help on using the repository browser.