47 implicit none ;
private 49 public mom_initialize_fixed, mom_initialize_rotation, mom_initialize_topography
56 subroutine mom_initialize_fixed(G, US, OBC, PF, write_geom, output_dir)
62 logical,
intent(in) :: write_geom
63 character(len=*),
intent(in) :: output_dir
66 character(len=200) :: inputdir
67 character(len=200) :: config
68 character(len=40) :: mdl =
"MOM_fixed_initialization" 71 #include "version_variable.h" 73 call calltree_enter(
"MOM_initialize_fixed(), MOM_fixed_initialization.F90")
75 call get_param(pf, mdl,
"DEBUG", debug, default=.false.)
77 call get_param(pf, mdl,
"INPUTDIR", inputdir, &
78 "The directory in which input files are found.", default=
".")
79 inputdir = slasher(inputdir)
82 call set_grid_metrics(g, pf, us)
87 call mom_initialize_topography(g%bathyT, g%max_depth, g, pf, us)
94 call open_boundary_config(g, us, pf, obc)
97 call open_boundary_impose_normal_slope(obc, g, g%bathyT)
100 call initialize_masks(g, pf, us)
103 call open_boundary_impose_land_mask(obc, g, g%areaCu, g%areaCv, us)
106 call hchksum(g%bathyT,
'MOM_initialize_fixed: depth ', g%HI, haloshift=1, scale=us%Z_to_m)
107 call hchksum(g%mask2dT,
'MOM_initialize_fixed: mask2dT ', g%HI)
108 call uvchksum(
'MOM_initialize_fixed: mask2dC[uv]', g%mask2dCu, &
110 call qchksum(g%mask2dBu,
'MOM_initialize_fixed: mask2dBu ', g%HI)
114 call get_param(pf, mdl,
"CHANNEL_CONFIG", config, &
115 "A parameter that determines which set of channels are \n"//&
116 "restricted to specific widths. Options are:\n"//&
117 " \t none - All channels have the grid width.\n"//&
118 " \t global_1deg - Sets 16 specific channels appropriate \n"//&
119 " \t\t for a 1-degree model, as used in CM2G.\n"//&
120 " \t list - Read the channel locations and widths from a \n"//&
121 " \t\t text file, like MOM_channel_list in the MOM_SIS \n"//&
122 " \t\t test case.\n"//&
123 " \t file - Read open face widths everywhere from a \n"//&
124 " \t\t NetCDF file on the model grid.", &
126 select case ( trim(config) )
128 case (
"list") ;
call reset_face_lengths_list(g, pf, us)
129 case (
"file") ;
call reset_face_lengths_file(g, pf, us)
130 case (
"global_1deg") ;
call reset_face_lengths_named(g, pf, trim(config), us)
131 case default ;
call mom_error(fatal,
"MOM_initialize_fixed: "// &
132 "Unrecognized channel configuration "//trim(config))
136 if (g%bathymetry_at_vel)
then 137 call get_param(pf, mdl,
"VELOCITY_DEPTH_CONFIG", config, &
138 "A string that determines how the topography is set at "//&
139 "velocity points. This may be 'min' or 'max'.", &
141 select case ( trim(config) )
142 case (
"max") ;
call set_velocity_depth_max(g)
143 case (
"min") ;
call set_velocity_depth_min(g)
144 case default ;
call mom_error(fatal,
"MOM_initialize_fixed: "// &
145 "Unrecognized velocity depth configuration "//trim(config))
151 call mom_initialize_rotation(g%CoriolisBu, g, pf, us=us)
153 call mom_calculate_grad_coriolis(g%dF_dx, g%dF_dy, g, us=us)
155 call qchksum(g%CoriolisBu,
"MOM_initialize_fixed: f ", g%HI, scale=us%s_to_T)
156 call hchksum(g%dF_dx,
"MOM_initialize_fixed: dF_dx ", g%HI, scale=us%m_to_L*us%s_to_T)
157 call hchksum(g%dF_dy,
"MOM_initialize_fixed: dF_dy ", g%HI, scale=us%m_to_L*us%s_to_T)
160 call initialize_grid_rotation_angle(g, pf)
163 call compute_global_grid_integrals(g, us=us)
166 if (write_geom)
call write_ocean_geometry_file(g, pf, output_dir, us=us)
168 call calltree_leave(
'MOM_initialize_fixed()')
170 end subroutine mom_initialize_fixed
174 subroutine mom_initialize_topography(D, max_depth, G, PF, US)
176 real,
dimension(G%isd:G%ied,G%jsd:G%jed), &
179 real,
intent(out) :: max_depth
187 real :: m_to_z, z_to_m
188 character(len=40) :: mdl =
"MOM_initialize_topography" 189 character(len=200) :: config
191 m_to_z = 1.0 ;
if (
present(us)) m_to_z = us%m_to_Z
192 z_to_m = 1.0 ;
if (
present(us)) z_to_m = us%Z_to_m
194 call get_param(pf, mdl,
"TOPO_CONFIG", config, &
195 "This specifies how bathymetry is specified: \n"//&
196 " \t file - read bathymetric information from the file \n"//&
197 " \t\t specified by (TOPO_FILE).\n"//&
198 " \t flat - flat bottom set to MAXIMUM_DEPTH. \n"//&
199 " \t bowl - an analytically specified bowl-shaped basin \n"//&
200 " \t\t ranging between MAXIMUM_DEPTH and MINIMUM_DEPTH. \n"//&
201 " \t spoon - a similar shape to 'bowl', but with an vertical \n"//&
202 " \t\t wall at the southern face. \n"//&
203 " \t halfpipe - a zonally uniform channel with a half-sine \n"//&
204 " \t\t profile in the meridional direction. \n"//&
205 " \t bbuilder - build topography from list of functions. \n"//&
206 " \t benchmark - use the benchmark test case topography. \n"//&
207 " \t Neverworld - use the Neverworld test case topography. \n"//&
208 " \t DOME - use a slope and channel configuration for the \n"//&
209 " \t\t DOME sill-overflow test case. \n"//&
210 " \t ISOMIP - use a slope and channel configuration for the \n"//&
211 " \t\t ISOMIP test case. \n"//&
212 " \t DOME2D - use a shelf and slope configuration for the \n"//&
213 " \t\t DOME2D gravity current/overflow test case. \n"//&
214 " \t Kelvin - flat but with rotated land mask.\n"//&
215 " \t seamount - Gaussian bump for spontaneous motion test case.\n"//&
216 " \t dumbbell - Sloshing channel with reservoirs on both ends.\n"//&
217 " \t shelfwave - exponential slope for shelfwave test case.\n"//&
218 " \t Phillips - ACC-like idealized topography used in the Phillips config.\n"//&
219 " \t dense - Denmark Strait-like dense water formation and overflow.\n"//&
220 " \t USER - call a user modified routine.", &
221 fail_if_missing=.true.)
222 max_depth = -1.e9*m_to_z ;
call read_param(pf,
"MAXIMUM_DEPTH", max_depth, scale=m_to_z)
223 select case ( trim(config) )
224 case (
"file");
call initialize_topography_from_file(d, g, pf, us)
225 case (
"flat");
call initialize_topography_named(d, g, pf, config, max_depth, us)
226 case (
"spoon");
call initialize_topography_named(d, g, pf, config, max_depth, us)
227 case (
"bowl");
call initialize_topography_named(d, g, pf, config, max_depth, us)
228 case (
"halfpipe");
call initialize_topography_named(d, g, pf, config, max_depth, us)
229 case (
"DOME");
call dome_initialize_topography(d, g, pf, max_depth, us)
230 case (
"ISOMIP");
call isomip_initialize_topography(d, g, pf, max_depth, us)
231 case (
"bbuilder");
call basin_builder_topography(d, g, pf, max_depth)
232 case (
"benchmark");
call benchmark_initialize_topography(d, g, pf, max_depth, us)
233 case (
"Neverworld",
"Neverland");
call neverworld_initialize_topography(d, g, pf, max_depth)
234 case (
"DOME2D");
call dome2d_initialize_topography(d, g, pf, max_depth)
235 case (
"Kelvin");
call kelvin_initialize_topography(d, g, pf, max_depth, us)
236 case (
"sloshing");
call sloshing_initialize_topography(d, g, pf, max_depth)
237 case (
"seamount");
call seamount_initialize_topography(d, g, pf, max_depth)
238 case (
"dumbbell");
call dumbbell_initialize_topography(d, g, pf, max_depth)
239 case (
"shelfwave");
call shelfwave_initialize_topography(d, g, pf, max_depth, us)
240 case (
"Phillips");
call phillips_initialize_topography(d, g, pf, max_depth, us)
241 case (
"dense");
call dense_water_initialize_topography(d, g, pf, max_depth)
242 case (
"USER");
call user_initialize_topography(d, g, pf, max_depth, us)
243 case default ;
call mom_error(fatal,
"MOM_initialize_topography: "// &
244 "Unrecognized topography setup '"//trim(config)//
"'")
246 if (max_depth>0.)
then 247 call log_param(pf, mdl,
"MAXIMUM_DEPTH", max_depth*z_to_m, &
248 "The maximum depth of the ocean.", units=
"m")
250 max_depth = diagnosemaximumdepth(d,g)
251 call log_param(pf, mdl,
"!MAXIMUM_DEPTH", max_depth*z_to_m, &
252 "The (diagnosed) maximum depth of the ocean.", units=
"m", like_default=.true.)
254 if (trim(config) /=
"DOME")
then 255 call limit_topography(d, g, pf, max_depth, us)
258 end subroutine mom_initialize_topography
Initializes fixed aspects of the model, such as horizontal grid metrics, topography and Coriolis.
Initialization for the "Neverworld" configuration.
A structure that can be parsed to read and document run-time parameters.
Initializes horizontal grid.
Describes the horizontal ocean grid with only dynamic memory arrays.
Initialization for the "Phillips" channel configuration.
Configures the ISOMIP test case.
This module contains I/O framework code.
Configures the model for the idealized dumbbell test case.
The MOM6 facility to parse input files for runtime parameters.
An overloaded interface to log the values of various types of parameters.
Code that initializes fixed aspects of the model grid, such as horizontal grid metrics,...
A template of a user to code up customized initial conditions.
Describes various unit conversion factors.
Configures the model for the idealized shelfwave test case.
Provides a transparent unit rescaling type to facilitate dimensional consistency testing.
Describes the decomposed MOM domain and has routines for communications across PEs.
Routines for error handling and I/O management.
Initialization for the "sloshing" internal waves configuration.
An overloaded interface to log version information about modules.
Initialization for the "bench mark" configuration.
Initialization of the 2D DOME experiment with density water initialized on a coastal shelf.
An overloaded interface to read various types of parameters.
Configures the model for the Kelvin wave experiment.
Initialization routines for the dense water formation and overflow experiment.
An idealized topography building system.
Contains a shareable dynamic type for describing horizontal grids and metric data and utilty routines...
Controls where open boundary conditions are applied.
Configures the model for the "DOME" experiment. DOME = Dynamics of Overflows and Mixing Experiment.
Do a halo update on an array.
Configures the model for the idealized seamount test case.
An overloaded interface to read and log the values of various types of parameters.
Provides checksumming functions for debugging.