Initializes the layer thicknesses to be uniform in the dumbbell test case.
78 type(ocean_grid_type),
intent(in) :: G
79 type(verticalGrid_type),
intent(in) :: GV
80 type(unit_scale_type),
intent(in) :: US
81 real,
dimension(SZI_(G),SZJ_(G),SZK_(GV)), &
83 type(param_file_type),
intent(in) :: param_file
85 logical,
optional,
intent(in) :: just_read_params
90 real :: eta1D(SZK_(G)+1)
93 real :: S_surf, S_range, S_ref, S_light, S_dense
96 # include "version_variable.h"
97 character(len=20) :: verticalCoordinate
99 integer :: i, j, k, is, ie, js, je, nz
101 is = g%isc ; ie = g%iec ; js = g%jsc ; je = g%jec ; nz = g%ke
103 just_read = .false. ;
if (
present(just_read_params)) just_read = just_read_params
105 if (.not.just_read) &
106 call mom_mesg(
"MOM_initialization.F90, initialize_thickness_uniform: setting thickness")
108 if (.not.just_read)
call log_version(param_file, mdl, version,
"")
109 call get_param(param_file, mdl,
"MIN_THICKNESS", min_thickness, &
110 'Minimum thickness for layer',&
111 units=
'm', default=1.0e-3, do_not_log=just_read, scale=us%m_to_Z)
112 call get_param(param_file, mdl,
"REGRIDDING_COORDINATE_MODE", verticalcoordinate, &
113 default=default_coordinate_mode, do_not_log=just_read)
126 select case ( coordinatemode(verticalcoordinate) )
128 case ( regridding_layer, regridding_rho )
129 call get_param(param_file, mdl,
"INITIAL_SSS", s_surf, default=34., do_not_log=.true.)
130 call get_param(param_file, mdl,
"INITIAL_S_RANGE", s_range, default=2., do_not_log=.true.)
131 call get_param(param_file, mdl,
"S_REF", s_ref, default=35.0, do_not_log=.true.)
132 call get_param(param_file, mdl,
"TS_RANGE_S_LIGHT", s_light, default = s_ref, do_not_log=.true.)
133 call get_param(param_file, mdl,
"TS_RANGE_S_DENSE", s_dense, default = s_ref, do_not_log=.true.)
134 call get_param(param_file, mdl,
"INTERFACE_IC_QUANTA", eta_ic_quanta, &
135 "The granularity of initial interface height values "//&
136 "per meter, to avoid sensivity to order-of-arithmetic changes.", &
137 default=2048.0, units=
"m-1", scale=us%Z_to_m, do_not_log=just_read)
138 if (just_read)
return
147 e0(k) = - g%max_depth * ( ( s_light - s_surf ) + ( s_dense - s_light ) * &
148 ( (real(k)-1.5) / real(nz-1) ) ) / s_range
150 if (eta_ic_quanta > 0.0) &
151 e0(k) = nint(eta_ic_quanta*e0(k)) / eta_ic_quanta
152 e0(k) = min(real(1-k)*gv%Angstrom_Z, e0(k))
153 e0(k) = max(-g%max_depth, e0(k))
155 do j=js,je ;
do i=is,ie
156 eta1d(nz+1) = -g%bathyT(i,j)
159 if (eta1d(k) < (eta1d(k+1) + gv%Angstrom_Z))
then
160 eta1d(k) = eta1d(k+1) + gv%Angstrom_Z
161 h(i,j,k) = gv%Angstrom_H
163 h(i,j,k) = gv%Z_to_H * (eta1d(k) - eta1d(k+1))
168 case ( regridding_zstar )
169 if (just_read)
return
170 do j=js,je ;
do i=is,ie
171 eta1d(nz+1) = -g%bathyT(i,j)
173 eta1d(k) = -g%max_depth * real(k-1) / real(nz)
174 if (eta1d(k) < (eta1d(k+1) + min_thickness))
then
175 eta1d(k) = eta1d(k+1) + min_thickness
176 h(i,j,k) = gv%Z_to_H * min_thickness
178 h(i,j,k) = gv%Z_to_H * (eta1d(k) - eta1d(k+1))
183 case ( regridding_sigma )
184 if (just_read)
return
185 do j=js,je ;
do i=is,ie
186 h(i,j,:) = gv%Z_to_H * g%bathyT(i,j) / dfloat(nz)