Line data Source code
1 : !=======================================================================
2 : !
3 : ! This module defines a variety of physical and numerical constants
4 : ! used throughout the ice model
5 : !
6 : ! author Elizabeth C. Hunke, LANL
7 :
8 : module ice_constants
9 :
10 : use ice_kinds_mod
11 :
12 : implicit none
13 : private
14 :
15 : public :: ice_init_constants
16 : public :: ice_query_constants
17 :
18 : !-----------------------------------------------------------------
19 : ! physical constants
20 : !-----------------------------------------------------------------
21 :
22 : real (kind=dbl_kind), public :: &
23 : omega = 7.292e-5_dbl_kind ,&! angular velocity of earth (rad/sec) ! LCOV_EXCL_LINE
24 : radius = 6.37e6_dbl_kind ! earth radius (m)
25 :
26 : real (kind=dbl_kind), public :: &
27 : spval_dbl = 1.0e30_dbl_kind ! special value (double precision)
28 :
29 : real (kind=real_kind), public :: &
30 : spval = 1.0e30_real_kind ! special value for netCDF output
31 :
32 : ! these are currently set so as to have no effect on the decomposition
33 : real (kind=dbl_kind), public :: &
34 : shlat = 30.0_dbl_kind ,&! artificial masking edge (deg) ! LCOV_EXCL_LINE
35 : nhlat = -30.0_dbl_kind ! artificial masking edge (deg)
36 :
37 : !-----------------------------------------------------------------
38 : ! numbers used outside the column package
39 : !-----------------------------------------------------------------
40 :
41 : real (kind=dbl_kind), parameter, public :: &
42 : c0 = 0.0_dbl_kind, & ! LCOV_EXCL_LINE
43 : c1 = 1.0_dbl_kind, & ! LCOV_EXCL_LINE
44 : c1p5 = 1.5_dbl_kind, & ! LCOV_EXCL_LINE
45 : c2 = 2.0_dbl_kind, & ! LCOV_EXCL_LINE
46 : c3 = 3.0_dbl_kind, & ! LCOV_EXCL_LINE
47 : c4 = 4.0_dbl_kind, & ! LCOV_EXCL_LINE
48 : c5 = 5.0_dbl_kind, & ! LCOV_EXCL_LINE
49 : c6 = 6.0_dbl_kind, & ! LCOV_EXCL_LINE
50 : c8 = 8.0_dbl_kind, & ! LCOV_EXCL_LINE
51 : c9 = 9.0_dbl_kind, & ! LCOV_EXCL_LINE
52 : c10 = 10.0_dbl_kind, & ! LCOV_EXCL_LINE
53 : c12 = 12.0_dbl_kind, & ! LCOV_EXCL_LINE
54 : c15 = 15.0_dbl_kind, & ! LCOV_EXCL_LINE
55 : c16 = 16.0_dbl_kind, & ! LCOV_EXCL_LINE
56 : c20 = 20.0_dbl_kind, & ! LCOV_EXCL_LINE
57 : c25 = 25.0_dbl_kind, & ! LCOV_EXCL_LINE
58 : c30 = 30.0_dbl_kind, & ! LCOV_EXCL_LINE
59 : c100 = 100.0_dbl_kind, & ! LCOV_EXCL_LINE
60 : c180 = 180.0_dbl_kind, & ! LCOV_EXCL_LINE
61 : c360 = 360.0_dbl_kind, & ! LCOV_EXCL_LINE
62 : c365 = 365.0_dbl_kind, & ! LCOV_EXCL_LINE
63 : c400 = 400.0_dbl_kind, & ! LCOV_EXCL_LINE
64 : c1000= 1000.0_dbl_kind, & ! LCOV_EXCL_LINE
65 : c3600= 3600.0_dbl_kind, & ! LCOV_EXCL_LINE
66 : p001 = 0.001_dbl_kind, & ! LCOV_EXCL_LINE
67 : p01 = 0.01_dbl_kind, & ! LCOV_EXCL_LINE
68 : p025 = 0.025_dbl_kind, & ! LCOV_EXCL_LINE
69 : p05 = 0.05_dbl_kind, & ! LCOV_EXCL_LINE
70 : p1 = 0.1_dbl_kind, & ! LCOV_EXCL_LINE
71 : p15 = 0.15_dbl_kind, & ! LCOV_EXCL_LINE
72 : p2 = 0.2_dbl_kind, & ! LCOV_EXCL_LINE
73 : p25 = 0.25_dbl_kind, & ! LCOV_EXCL_LINE
74 : p3 = 0.3_dbl_kind, & ! LCOV_EXCL_LINE
75 : p4 = 0.4_dbl_kind, & ! LCOV_EXCL_LINE
76 : p5 = 0.5_dbl_kind, & ! LCOV_EXCL_LINE
77 : p6 = 0.6_dbl_kind, & ! LCOV_EXCL_LINE
78 : p75 = 0.75_dbl_kind, & ! LCOV_EXCL_LINE
79 : p111 = c1/c9, & ! LCOV_EXCL_LINE
80 : p166 = c1/c6, & ! LCOV_EXCL_LINE
81 : p222 = c2/c9, & ! LCOV_EXCL_LINE
82 : p333 = c1/c3, & ! LCOV_EXCL_LINE
83 : p666 = c2/c3, & ! LCOV_EXCL_LINE
84 : p055 = p111*p5, & ! LCOV_EXCL_LINE
85 : p027 = p055*p5, & ! LCOV_EXCL_LINE
86 : eps04 = 1.0e-4_dbl_kind, & ! LCOV_EXCL_LINE
87 : eps13 = 1.0e-13_dbl_kind, & ! LCOV_EXCL_LINE
88 : eps16 = 1.0e-16_dbl_kind
89 :
90 : !-----------------------------------------------------------------
91 : ! location of fields for staggered grids
92 : !-----------------------------------------------------------------
93 :
94 : integer (int_kind), parameter, public :: &
95 : field_loc_unknown = 0, & ! LCOV_EXCL_LINE
96 : field_loc_noupdate = -1, & ! LCOV_EXCL_LINE
97 : field_loc_center = 1, & ! LCOV_EXCL_LINE
98 : field_loc_NEcorner = 2, & ! LCOV_EXCL_LINE
99 : field_loc_Nface = 3, & ! LCOV_EXCL_LINE
100 : field_loc_Eface = 4
101 :
102 : !-----------------------------------------------------------------
103 : ! field type attribute - necessary for handling
104 : ! changes of direction across tripole boundary
105 : !-----------------------------------------------------------------
106 :
107 : integer (int_kind), parameter, public :: &
108 : field_type_unknown = 0, & ! LCOV_EXCL_LINE
109 : field_type_noupdate = -1, & ! LCOV_EXCL_LINE
110 : field_type_scalar = 1, & ! LCOV_EXCL_LINE
111 : field_type_vector = 2, & ! LCOV_EXCL_LINE
112 : field_type_angle = 3
113 :
114 : !-----------------------------------------------------------------
115 : ! conversion factors
116 : !-----------------------------------------------------------------
117 :
118 : real (kind=dbl_kind), parameter, public :: &
119 : cm_to_m = 0.01_dbl_kind ,&! cm to meters ! LCOV_EXCL_LINE
120 : m_to_cm = 100._dbl_kind ,&! meters to cm ! LCOV_EXCL_LINE
121 : m2_to_km2 = 1.e-6_dbl_kind ,&! m^2 to km^2 ! LCOV_EXCL_LINE
122 : kg_to_g = 1000._dbl_kind ,&! kilograms to grams ! LCOV_EXCL_LINE
123 : mps_to_cmpdy = 8.64e6_dbl_kind ! m per s to cm per day
124 :
125 : !=======================================================================
126 :
127 : contains
128 :
129 : !=======================================================================
130 :
131 : ! subroutine to set the cice constants
132 :
133 0 : subroutine ice_init_constants( &
134 : omega_in, radius_in, spval_dbl_in, spval_in, shlat_in, nhlat_in)
135 :
136 : real (kind=dbl_kind), intent(in), optional :: &
137 : omega_in , & ! angular velocity of earth (rad/sec) ! LCOV_EXCL_LINE
138 : radius_in , & ! earth radius (m) ! LCOV_EXCL_LINE
139 : spval_dbl_in , & ! special value (double precision) ! LCOV_EXCL_LINE
140 : shlat_in , & ! artificial masking edge (deg) ! LCOV_EXCL_LINE
141 : nhlat_in ! artificial masking edge (deg)
142 : real (kind=real_kind), intent(in), optional :: &
143 : spval_in ! special value for netCDF output
144 :
145 : character(len=*),parameter :: subname='(ice_init_constants)'
146 :
147 0 : if (present(omega_in)) omega = omega_in
148 0 : if (present(radius_in)) radius = radius_in
149 0 : if (present(spval_dbl_in)) spval_dbl = spval_dbl_in
150 0 : if (present(spval_in)) spval = spval_in
151 0 : if (present(shlat_in)) shlat = shlat_in
152 0 : if (present(nhlat_in)) nhlat = nhlat_in
153 :
154 0 : end subroutine ice_init_constants
155 :
156 : !=======================================================================
157 :
158 : ! subroutine to set the cice constants
159 :
160 0 : subroutine ice_query_constants( &
161 : omega_out, radius_out, spval_dbl_out, spval_out, shlat_out, nhlat_out)
162 :
163 : real (kind=dbl_kind), intent(out), optional :: &
164 : omega_out , & ! angular velocity of earth (rad/sec) ! LCOV_EXCL_LINE
165 : radius_out , & ! earth radius (m) ! LCOV_EXCL_LINE
166 : spval_dbl_out , & ! special value (double precision) ! LCOV_EXCL_LINE
167 : spval_out , & ! special value for netCDF output ! LCOV_EXCL_LINE
168 : shlat_out , & ! artificial masking edge (deg) ! LCOV_EXCL_LINE
169 : nhlat_out ! artificial masking edge (deg)
170 :
171 : character(len=*),parameter :: subname='(ice_query_constants)'
172 :
173 0 : if (present(omega_out)) omega_out = omega
174 0 : if (present(radius_out)) radius_out = radius
175 0 : if (present(spval_dbl_out)) spval_dbl_out = spval_dbl
176 0 : if (present(spval_out)) spval_out = spval
177 0 : if (present(shlat_out)) shlat_out = shlat
178 0 : if (present(nhlat_out)) nhlat_out = nhlat
179 :
180 0 : end subroutine ice_query_constants
181 :
182 : !=======================================================================
183 :
184 : end module ice_constants
185 :
186 : !=======================================================================
|