Go to the documentation of this file.
46 implicit none ;
private
61 logical,
intent(in) :: write_geom
62 character(len=*),
intent(in) :: output_dir
65 character(len=200) :: inputdir
66 character(len=200) :: config
67 character(len=40) :: mdl =
"MOM_fixed_initialization"
70 #include "version_variable.h"
72 call calltree_enter(
"MOM_initialize_fixed(), MOM_fixed_initialization.F90")
74 call get_param(pf, mdl,
"DEBUG", debug, default=.false.)
76 call get_param(pf, mdl,
"INPUTDIR", inputdir, &
77 "The directory in which input files are found.", default=
".")
78 inputdir = slasher(inputdir)
93 call open_boundary_config(g, us, pf, obc)
96 call open_boundary_impose_normal_slope(obc, g, g%bathyT)
105 call hchksum(g%bathyT,
'MOM_initialize_fixed: depth ', g%HI, haloshift=1, scale=us%Z_to_m)
106 call hchksum(g%mask2dT,
'MOM_initialize_fixed: mask2dT ', g%HI)
107 call uvchksum(
'MOM_initialize_fixed: mask2dC[uv]', g%mask2dCu, &
109 call qchksum(g%mask2dBu,
'MOM_initialize_fixed: mask2dBu ', g%HI)
113 call get_param(pf, mdl,
"CHANNEL_CONFIG", config, &
114 "A parameter that determines which set of channels are \n"//&
115 "restricted to specific widths. Options are:\n"//&
116 " \t none - All channels have the grid width.\n"//&
117 " \t global_1deg - Sets 16 specific channels appropriate \n"//&
118 " \t\t for a 1-degree model, as used in CM2G.\n"//&
119 " \t list - Read the channel locations and widths from a \n"//&
120 " \t\t text file, like MOM_channel_list in the MOM_SIS \n"//&
121 " \t\t test case.\n"//&
122 " \t file - Read open face widths everywhere from a \n"//&
123 " \t\t NetCDF file on the model grid.", &
125 select case ( trim(config) )
127 case (
"list") ;
call reset_face_lengths_list(g, pf, us)
128 case (
"file") ;
call reset_face_lengths_file(g, pf, us)
129 case (
"global_1deg") ;
call reset_face_lengths_named(g, pf, trim(config), us)
130 case default ;
call mom_error(fatal,
"MOM_initialize_fixed: "// &
131 "Unrecognized channel configuration "//trim(config))
135 if (g%bathymetry_at_vel)
then
136 call get_param(pf, mdl,
"VELOCITY_DEPTH_CONFIG", config, &
137 "A string that determines how the topography is set at "//&
138 "velocity points. This may be 'min' or 'max'.", &
140 select case ( trim(config) )
141 case (
"max") ;
call set_velocity_depth_max(g)
142 case (
"min") ;
call set_velocity_depth_min(g)
143 case default ;
call mom_error(fatal,
"MOM_initialize_fixed: "// &
144 "Unrecognized velocity depth configuration "//trim(config))
150 call mom_initialize_rotation(g%CoriolisBu, g, pf, us=us)
152 call mom_calculate_grad_coriolis(g%dF_dx, g%dF_dy, g, us=us)
154 call qchksum(g%CoriolisBu,
"MOM_initialize_fixed: f ", g%HI, scale=us%s_to_T)
155 call hchksum(g%dF_dx,
"MOM_initialize_fixed: dF_dx ", g%HI, scale=us%m_to_L*us%s_to_T)
156 call hchksum(g%dF_dy,
"MOM_initialize_fixed: dF_dy ", g%HI, scale=us%m_to_L*us%s_to_T)
159 call initialize_grid_rotation_angle(g, pf)
175 real,
dimension(G%isd:G%ied,G%jsd:G%jed), &
178 real,
intent(out) :: max_depth
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)
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)
Code that initializes fixed aspects of the model grid, such as horizontal grid metrics,...
Initialization of the 2D DOME experiment with density water initialized on a coastal shelf.
subroutine, public mom_initialize_fixed(G, US, OBC, PF, write_geom, output_dir)
MOM_initialize_fixed sets up time-invariant quantities related to MOM6's horizontal grid,...
subroutine, public set_grid_metrics(G, param_file, US)
set_grid_metrics is used to set the primary values in the model's horizontal grid....
subroutine, public open_boundary_impose_normal_slope(OBC, G, depth)
Sets the slope of bathymetry normal to an open bounndary to zero.
subroutine, public reset_face_lengths_file(G, param_file, US)
This subroutine sets the open face lengths at selected points to restrict passages to their observed ...
An overloaded interface to log version information about modules.
subroutine, public dome_initialize_topography(D, G, param_file, max_depth, US)
This subroutine sets up the DOME topography.
subroutine, public isomip_initialize_topography(D, G, param_file, max_depth, US)
Initialization of topography for the ISOMIP configuration.
Contains a shareable dynamic type for describing horizontal grids and metric data and utilty routines...
Configures the model for the Kelvin wave experiment.
subroutine, public benchmark_initialize_topography(D, G, param_file, max_depth, US)
This subroutine sets up the benchmark test case topography.
subroutine, public mom_mesg(message, verb, all_print)
This provides a convenient interface for writing an informative comment.
subroutine, public read_face_length_list(iounit, filename, num_lines, lines)
This subroutine reads and counts the non-blank lines in the face length list file,...
Configures the model for the idealized shelfwave test case.
Do a halo update on an array.
subroutine, public sloshing_initialize_topography(D, G, param_file, max_depth)
Initialization of topography.
A structure that can be parsed to read and document run-time parameters.
An overloaded interface to read and log the values of various types of parameters.
subroutine, public set_rotation_beta_plane(f, G, param_file, US)
This subroutine sets up the Coriolis parameter for a beta-plane or f-plane.
This module contains I/O framework code.
subroutine, public mom_initialize_topography(D, max_depth, G, PF, US)
MOM_initialize_topography makes the appropriate call to set up the bathymetry. At this point the topo...
subroutine, public reset_face_lengths_named(G, param_file, name, US)
This subroutine sets the open face lengths at selected points to restrict passages to their observed ...
logical function, public open_boundary_query(OBC, apply_open_OBC, apply_specified_OBC, apply_Flather_OBC, apply_nudged_OBC, needs_ext_seg_data)
Describes various unit conversion factors.
subroutine, public shelfwave_initialize_topography(D, G, param_file, max_depth, US)
Initialization of topography.
Initialization for the "Neverland" configuration.
subroutine, public set_velocity_depth_min(G)
Set the bathymetry at velocity points to be the minimum of the depths at the neighoring tracer points...
subroutine, public limit_topography(D, G, param_file, max_depth, US)
limit_topography ensures that min_depth < D(x,y) < max_depth
Configures the model for the idealized dumbbell test case.
Initialization routines for the dense water formation and overflow experiment.
subroutine, public initialize_topography_from_file(D, G, param_file, US)
Read gridded depths from file.
subroutine, public set_velocity_depth_max(G)
Set the bathymetry at velocity points to be the maximum of the depths at the neighoring tracer points...
subroutine, public seamount_initialize_topography(D, G, param_file, max_depth)
Initialization of topography.
subroutine, public phillips_initialize_topography(D, G, param_file, max_depth, US)
Initialize topography.
subroutine, public set_rotation_planetary(f, G, param_file, US)
This subroutine sets up the Coriolis parameter for a sphere.
Describes the decomposed MOM domain and has routines for communications across PEs.
subroutine, public neverland_initialize_topography(D, G, param_file, max_depth)
This subroutine sets up the Neverland test case topography.
Initialization for the "bench mark" configuration.
subroutine, public apply_topography_edits_from_file(D, G, param_file, US)
Applies a list of topography overrides read from a netcdf file.
subroutine, public initialize_topography_named(D, G, param_file, topog_config, max_depth, US)
initialize the bathymetry based on one of several named idealized configurations
Initializes fixed aspects of the model, such as horizontal grid metrics, topography and Coriolis.
Controls where open boundary conditions are applied.
Configures the model for the "DOME" experiment. DOME = Dynamics of Overflows and Mixing Experiment.
subroutine, public mom_initialize_rotation(f, G, PF, US)
MOM_initialize_rotation makes the appropriate call to set up the Coriolis parameter.
The MOM6 facility to parse input files for runtime parameters.
Initialization for the "sloshing" internal waves configuration.
subroutine, public mom_calculate_grad_coriolis(dF_dx, dF_dy, G, US)
Calculates the components of grad f (Coriolis parameter)
subroutine, public calltree_leave(mesg)
Writes a message about leaving a subroutine if call tree reporting is active.
subroutine, public user_initialize_topography(D, G, param_file, max_depth, US)
Initialize topography.
subroutine, public kelvin_initialize_topography(D, G, param_file, max_depth, US)
This subroutine sets up the Kelvin topography and land mask.
Provides a transparent unit rescaling type to facilitate dimensional consistency testing.
logical function, public is_root_pe()
This returns .true. if the current PE is the root PE.
Initializes horizontal grid.
subroutine, public dumbbell_initialize_topography(D, G, param_file, max_depth)
Initialization of topography.
Provides checksumming functions for debugging.
subroutine, public initialize_grid_rotation_angle(G, PF)
initialize_grid_rotation_angle initializes the arrays with the sine and cosine of the angle between l...
subroutine, public mom_error(level, message, all_print)
This provides a convenient interface for writing an mpp_error message with run-time filter based on a...
subroutine, public calltree_waypoint(mesg, n)
Writes a message about reaching a milestone if call tree reporting is active.
subroutine, public rescale_dyn_horgrid_bathymetry(G, m_in_new_units)
rescale_dyn_horgrid_bathymetry permits a change in the internal units for the bathymetry on the grid,...
subroutine, public initialize_masks(G, PF, US)
Initializes the grid masks and any metrics that come with masks already applied.
An overloaded interface to log the values of various types of parameters.
subroutine, public dense_water_initialize_topography(D, G, param_file, max_depth)
Initialize the topography field for the dense water experiment.
Configures the model for the idealized seamount test case.
Initialization for the "Phillips" channel configuration.
subroutine, public reset_face_lengths_list(G, param_file, US)
This subroutine sets the open face lengths at selected points to restrict passages to their observed ...
subroutine, public write_ocean_geometry_file(G, param_file, directory, geom_file, US)
Write out a file describing the topography, Coriolis parameter, grid locations and various other fixe...
subroutine, public open_boundary_config(G, US, param_file, OBC)
Enables OBC module and reads configuration parameters This routine is called from MOM_initialize_fixe...
subroutine, public compute_global_grid_integrals(G, US)
Pre-compute global integrals of grid quantities (like masked ocean area) for later use in reporting d...
Routines for error handling and I/O management.
subroutine, public dome2d_initialize_topography(D, G, param_file, max_depth)
Initialize topography with a shelf and slope in a 2D domain.
subroutine, public calltree_enter(mesg, n)
Writes a message about entering a subroutine if call tree reporting is active.
Describes the horizontal ocean grid with only dynamic memory arrays.
Configures the ISOMIP test case.
real function, public diagnosemaximumdepth(D, G)
Return the global maximum ocean bottom depth in the same units as the input depth.
subroutine, public open_boundary_impose_land_mask(OBC, G, areaCu, areaCv, US)
Reconcile masks and open boundaries, deallocate OBC on PEs where it is not needed....
A template of a user to code up customized initial conditions.
An overloaded interface to read various types of parameters.