MOM_initialize_topography makes the appropriate call to set up the bathymetry. At this point the topography is in units of [m], but this can be changed later.
174 type(dyn_horgrid_type),
intent(in) :: G
175 real,
dimension(G%isd:G%ied,G%jsd:G%jed), &
177 type(param_file_type),
intent(in) :: PF
178 real,
intent(out) :: max_depth
179 type(unit_scale_type),
optional,
intent(in) :: US
186 real :: m_to_Z, Z_to_m
187 character(len=40) :: mdl =
"MOM_initialize_topography"
188 character(len=200) :: config
190 m_to_z = 1.0 ;
if (
present(us)) m_to_z = us%m_to_Z
191 z_to_m = 1.0 ;
if (
present(us)) z_to_m = us%Z_to_m
193 call get_param(pf, mdl,
"TOPO_CONFIG", config, &
194 "This specifies how bathymetry is specified: \n"//&
195 " \t file - read bathymetric information from the file \n"//&
196 " \t\t specified by (TOPO_FILE).\n"//&
197 " \t flat - flat bottom set to MAXIMUM_DEPTH. \n"//&
198 " \t bowl - an analytically specified bowl-shaped basin \n"//&
199 " \t\t ranging between MAXIMUM_DEPTH and MINIMUM_DEPTH. \n"//&
200 " \t spoon - a similar shape to 'bowl', but with an vertical \n"//&
201 " \t\t wall at the southern face. \n"//&
202 " \t halfpipe - a zonally uniform channel with a half-sine \n"//&
203 " \t\t profile in the meridional direction. \n"//&
204 " \t benchmark - use the benchmark test case topography. \n"//&
205 " \t Neverland - use the Neverland test case topography. \n"//&
206 " \t DOME - use a slope and channel configuration for the \n"//&
207 " \t\t DOME sill-overflow test case. \n"//&
208 " \t ISOMIP - use a slope and channel configuration for the \n"//&
209 " \t\t ISOMIP test case. \n"//&
210 " \t DOME2D - use a shelf and slope configuration for the \n"//&
211 " \t\t DOME2D gravity current/overflow test case. \n"//&
212 " \t Kelvin - flat but with rotated land mask.\n"//&
213 " \t seamount - Gaussian bump for spontaneous motion test case.\n"//&
214 " \t dumbbell - Sloshing channel with reservoirs on both ends.\n"//&
215 " \t shelfwave - exponential slope for shelfwave test case.\n"//&
216 " \t Phillips - ACC-like idealized topography used in the Phillips config.\n"//&
217 " \t dense - Denmark Strait-like dense water formation and overflow.\n"//&
218 " \t USER - call a user modified routine.", &
219 fail_if_missing=.true.)
220 max_depth = -1.e9*m_to_z ;
call read_param(pf,
"MAXIMUM_DEPTH", max_depth, scale=m_to_z)
221 select case ( trim(config) )
222 case (
"file");
call initialize_topography_from_file(d, g, pf, us)
223 case (
"flat");
call initialize_topography_named(d, g, pf, config, max_depth, us)
224 case (
"spoon");
call initialize_topography_named(d, g, pf, config, max_depth, us)
225 case (
"bowl");
call initialize_topography_named(d, g, pf, config, max_depth, us)
226 case (
"halfpipe");
call initialize_topography_named(d, g, pf, config, max_depth, us)
227 case (
"DOME");
call dome_initialize_topography(d, g, pf, max_depth, us)
228 case (
"ISOMIP");
call isomip_initialize_topography(d, g, pf, max_depth, us)
229 case (
"benchmark");
call benchmark_initialize_topography(d, g, pf, max_depth, us)
230 case (
"Neverland");
call neverland_initialize_topography(d, g, pf, max_depth)
231 case (
"DOME2D");
call dome2d_initialize_topography(d, g, pf, max_depth)
232 case (
"Kelvin");
call kelvin_initialize_topography(d, g, pf, max_depth, us)
233 case (
"sloshing");
call sloshing_initialize_topography(d, g, pf, max_depth)
234 case (
"seamount");
call seamount_initialize_topography(d, g, pf, max_depth)
235 case (
"dumbbell");
call dumbbell_initialize_topography(d, g, pf, max_depth)
236 case (
"shelfwave");
call shelfwave_initialize_topography(d, g, pf, max_depth, us)
237 case (
"Phillips");
call phillips_initialize_topography(d, g, pf, max_depth, us)
238 case (
"dense");
call dense_water_initialize_topography(d, g, pf, max_depth)
239 case (
"USER");
call user_initialize_topography(d, g, pf, max_depth, us)
240 case default ;
call mom_error(fatal,
"MOM_initialize_topography: "// &
241 "Unrecognized topography setup '"//trim(config)//
"'")
243 if (max_depth>0.)
then
244 call log_param(pf, mdl,
"MAXIMUM_DEPTH", max_depth*z_to_m, &
245 "The maximum depth of the ocean.", units=
"m")
247 max_depth = diagnosemaximumdepth(d,g)
248 call log_param(pf, mdl,
"!MAXIMUM_DEPTH", max_depth*z_to_m, &
249 "The (diagnosed) maximum depth of the ocean.", units=
"m")
251 if (trim(config) /=
"DOME")
then
252 call limit_topography(d, g, pf, max_depth, us)