Initial values for temperature and salinity.
196 type(ocean_grid_type),
intent(in) :: G
197 type(verticalGrid_type),
intent(in) :: GV
198 real,
dimension(SZI_(G),SZJ_(G), SZK_(G)),
intent(out) :: T
199 real,
dimension(SZI_(G),SZJ_(G), SZK_(G)),
intent(out) :: S
200 real,
dimension(SZI_(G),SZJ_(G), SZK_(G)),
intent(in) :: h
201 type(param_file_type),
intent(in) :: param_file
202 type(EOS_type),
pointer :: eqn_of_state
203 logical,
optional,
intent(in) :: just_read_params
207 integer :: i, j, k, is, ie, js, je, nz, k_light
208 real :: xi0, xi1, dxi, r, S_surf, T_surf, S_range, T_range
209 real :: T_ref, T_Light, T_Dense, S_ref, S_Light, S_Dense, a1, frac_dense, k_frac, res_rat
211 character(len=20) :: verticalCoordinate, density_profile
213 is = g%isc ; ie = g%iec ; js = g%jsc ; je = g%jec ; nz = g%ke
215 just_read = .false. ;
if (
present(just_read_params)) just_read = just_read_params
217 call get_param(param_file, mdl,
"REGRIDDING_COORDINATE_MODE", verticalcoordinate, &
218 default=default_coordinate_mode, do_not_log=just_read)
219 call get_param(param_file, mdl,
"INITIAL_DENSITY_PROFILE", density_profile, &
220 'Initial profile shape. Valid values are "linear", "parabolic" '//&
221 'and "exponential".', default=
'linear', do_not_log=just_read)
222 call get_param(param_file, mdl,
"INITIAL_SSS", s_surf, &
223 'Initial surface salinity', units=
'1e-3', default=34., do_not_log=just_read)
224 call get_param(param_file, mdl,
"INITIAL_SST", t_surf, &
225 'Initial surface temperature', units=
'C', default=0., do_not_log=just_read)
226 call get_param(param_file, mdl,
"INITIAL_S_RANGE", s_range, &
227 'Initial salinity range (bottom - surface)', units=
'1e-3', &
228 default=2., do_not_log=just_read)
229 call get_param(param_file, mdl,
"INITIAL_T_RANGE", t_range, &
230 'Initial temperature range (bottom - surface)', units=
'C', &
231 default=0., do_not_log=just_read)
233 select case ( coordinatemode(verticalcoordinate) )
234 case ( regridding_layer )
236 call get_param(param_file, mdl,
"T_REF", t_ref, default=10.0, do_not_log=.true.)
237 call get_param(param_file, mdl,
"TS_RANGE_T_LIGHT", t_light, default=t_ref, do_not_log=.true.)
238 call get_param(param_file, mdl,
"TS_RANGE_T_DENSE", t_dense, default=t_ref, do_not_log=.true.)
239 call get_param(param_file, mdl,
"S_REF", s_ref, default=35.0, do_not_log=.true.)
240 call get_param(param_file, mdl,
"TS_RANGE_S_LIGHT", s_light, default = s_ref, do_not_log=.true.)
241 call get_param(param_file, mdl,
"TS_RANGE_S_DENSE", s_dense, default = s_ref, do_not_log=.true.)
242 call get_param(param_file, mdl,
"TS_RANGE_RESOLN_RATIO", res_rat, default=1.0, do_not_log=.true.)
243 if (just_read)
return
246 k_light = gv%nk_rho_varies + 1
247 do j=js,je ;
do i=is,ie
248 t(i,j,k_light) = t_light ; s(i,j,k_light) = s_light
250 a1 = 2.0 * res_rat / (1.0 + res_rat)
252 k_frac = real(k-k_light)/real(nz-k_light)
253 frac_dense = a1 * k_frac + (1.0 - a1) * k_frac**2
254 do j=js,je ;
do i=is,ie
255 t(i,j,k) = frac_dense * (t_dense - t_light) + t_light
256 s(i,j,k) = frac_dense * (s_dense - s_light) + s_light
259 case ( regridding_sigma, regridding_zstar, regridding_rho )
260 if (just_read)
return
261 do j=js,je ;
do i=is,ie
264 xi1 = xi0 + gv%H_to_Z * h(i,j,k) / g%max_depth
265 select case ( trim(density_profile) )
268 s(i,j,k) = s_surf + ( 0.5 * s_range ) * (xi0 + xi1)
269 t(i,j,k) = t_surf + t_range * 0.5 * (xi0 + xi1)
271 s(i,j,k) = s_surf + s_range * (2.0 / 3.0) * (xi1**3 - xi0**3) / (xi1 - xi0)
272 t(i,j,k) = t_surf + t_range * (2.0 / 3.0) * (xi1**3 - xi0**3) / (xi1 - xi0)
275 s(i,j,k) = s_surf + s_range * (exp(xi1/r)-exp(xi0/r)) / (xi1 - xi0)
276 t(i,j,k) = t_surf + t_range * (exp(xi1/r)-exp(xi0/r)) / (xi1 - xi0)
278 call mom_error(fatal,
'Unknown value for "INITIAL_DENSITY_PROFILE"')