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/UKMO/dev_r5518_GO6_package/NEMOGCM/NEMO/OPA_SRC/DOM – NEMO

source: branches/UKMO/dev_r5518_GO6_package/NEMOGCM/NEMO/OPA_SRC/DOM/phycst.F90 @ 11101

Last change on this file since 11101 was 11101, checked in by frrh, 5 years ago

Merge changes from Met Office GMED ticket 450 to reduce unnecessary
text output from NEMO.
This output, which is typically not switchable, is rarely of interest
in normal (non-debugging) runs and simply redunantley consumes extra
file space.
Further, the presence of this text output has been shown to
significantly degrade performance of models which are run during
Met Office HPC RAID (disk) checks.
The new code introduces switches which are configurable via the
changes made in the associated Met Office MOCI ticket 399.

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