Initializes the layer thicknesses to be uniform in the dumbbell test case.
94 type(ocean_grid_type),
intent(in) :: G
95 type(verticalGrid_type),
intent(in) :: GV
96 type(unit_scale_type),
intent(in) :: US
97 real,
dimension(SZI_(G),SZJ_(G),SZK_(GV)), &
99 type(param_file_type),
intent(in) :: param_file
101 logical,
optional,
intent(in) :: just_read_params
104 real :: e0(SZK_(G)+1)
106 real :: eta1D(SZK_(G)+1)
108 real :: min_thickness
109 real :: S_surf, S_range, S_ref, S_light, S_dense
110 real :: eta_IC_quanta
112 # include "version_variable.h" 113 character(len=20) :: verticalCoordinate
115 integer :: i, j, k, is, ie, js, je, nz
117 is = g%isc ; ie = g%iec ; js = g%jsc ; je = g%jec ; nz = g%ke
119 just_read = .false. ;
if (
present(just_read_params)) just_read = just_read_params
121 if (.not.just_read) &
122 call mom_mesg(
"MOM_initialization.F90, initialize_thickness_uniform: setting thickness")
124 if (.not.just_read)
call log_version(param_file, mdl, version,
"")
125 call get_param(param_file, mdl,
"MIN_THICKNESS", min_thickness, &
126 'Minimum thickness for layer',&
127 units=
'm', default=1.0e-3, do_not_log=just_read, scale=us%m_to_Z)
128 call get_param(param_file, mdl,
"REGRIDDING_COORDINATE_MODE", verticalcoordinate, &
129 default=default_coordinate_mode, do_not_log=just_read)
142 select case ( coordinatemode(verticalcoordinate) )
144 case ( regridding_layer, regridding_rho )
145 call get_param(param_file, mdl,
"INITIAL_SSS", s_surf, default=34., do_not_log=.true.)
146 call get_param(param_file, mdl,
"INITIAL_S_RANGE", s_range, default=2., do_not_log=.true.)
147 call get_param(param_file, mdl,
"S_REF", s_ref, default=35.0, do_not_log=.true.)
148 call get_param(param_file, mdl,
"TS_RANGE_S_LIGHT", s_light, default = s_ref, do_not_log=.true.)
149 call get_param(param_file, mdl,
"TS_RANGE_S_DENSE", s_dense, default = s_ref, do_not_log=.true.)
150 call get_param(param_file, mdl,
"INTERFACE_IC_QUANTA", eta_ic_quanta, &
151 "The granularity of initial interface height values "//&
152 "per meter, to avoid sensivity to order-of-arithmetic changes.", &
153 default=2048.0, units=
"m-1", scale=us%Z_to_m, do_not_log=just_read)
154 if (just_read)
return 163 e0(k) = - g%max_depth * ( ( s_light - s_surf ) + ( s_dense - s_light ) * &
164 ( (real(k)-1.5) / real(nz-1) ) ) / s_range
166 if (eta_ic_quanta > 0.0) &
167 e0(k) = nint(eta_ic_quanta*e0(k)) / eta_ic_quanta
168 e0(k) = min(real(1-k)*gv%Angstrom_Z, e0(k))
169 e0(k) = max(-g%max_depth, e0(k))
171 do j=js,je ;
do i=is,ie
172 eta1d(nz+1) = -g%bathyT(i,j)
175 if (eta1d(k) < (eta1d(k+1) + gv%Angstrom_Z))
then 176 eta1d(k) = eta1d(k+1) + gv%Angstrom_Z
177 h(i,j,k) = gv%Angstrom_H
179 h(i,j,k) = gv%Z_to_H * (eta1d(k) - eta1d(k+1))
184 case ( regridding_zstar )
185 if (just_read)
return 186 do j=js,je ;
do i=is,ie
187 eta1d(nz+1) = -g%bathyT(i,j)
189 eta1d(k) = -g%max_depth * real(k-1) / real(nz)
190 if (eta1d(k) < (eta1d(k+1) + min_thickness))
then 191 eta1d(k) = eta1d(k+1) + min_thickness
192 h(i,j,k) = gv%Z_to_H * min_thickness
194 h(i,j,k) = gv%Z_to_H * (eta1d(k) - eta1d(k+1))
199 case ( regridding_sigma )
200 if (just_read)
return 201 do j=js,je ;
do i=is,ie
202 h(i,j,:) = gv%Z_to_H * g%bathyT(i,j) / dfloat(nz)