1 !***********************************************************************
2 !* GNU Lesser General Public License
4 !* This file is part of the GFDL Flexible Modeling System (FMS).
6 !* FMS is free software: you can redistribute it and/or modify it under
7 !* the terms of the GNU Lesser General Public License as published by
8 !* the Free Software Foundation, either version 3 of the License, or (at
9 !* your option) any later version.
11 !* FMS is distributed in the hope that it will be useful, but WITHOUT
12 !* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
13 !* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
16 !* You should have received a copy of the GNU Lesser General Public
17 !* License along with FMS. If not, see <http://www.gnu.org/licenses/>.
18 !***********************************************************************
21 !> @brief A convenience module to use any FMS routines, functions, values
22 !> @author Ryan Mulhall
26 !! Imports all supported FMS modules so that any public interfaces,
27 !! variables or routines can be used via this module. Excludes mpp_io modules
28 !! and routines. Overloaded type operators/assignments cannot be imported individually
29 !! (ie. `use fms, only: OPERATOR(*)` includes any defined '*' operators within FMS).
31 !! Remappings due to conflicts:
33 !! get_mosaic_tile_grid from mosaic2(fms2_io) => mosaic2_get_mosaic_tile_grid
35 !! read_data from interpolator_mod(fms2_io) => interpolator_read_data
37 !! ZERO from interpolator_mod(mpp_parameter) => INTERPOLATOR_ZERO
39 !! version from fms_mod => version_FMS
41 !! Not in this module:
43 !! axis_utils_mod, fms_io_mod, time_interp_external_mod
44 !! get_grid_version_mpp_mod, mpp_io_mod, mosaic_mod,
45 !! fms_mod(partial, old io excluded), drifters modules
46 !! constants_mod (FMSconstants should be used externally)
47 !! grid_mod, mosaic_mod
49 !! A full list of supported interfaces and public types intended for use via
50 !! this module is provided in the [supported_interfaces.md](../../supported_interfaces.md)
54 !> @brief File for @ref FMS
60 !> import each FMS module's public routines/functions, interfaces, and variables
61 !! done explicitly to avoid including any unwanted/depracated routines/modules
64 use fms_affinity_mod, only: fms_affinity_init, fms_affinity_get, &
68 use amip_interp_mod, only: amip_interp_init, get_amip_sst, get_amip_ice, &
69 amip_interp_new,amip_interp_del, amip_interp_type, &
70 assignment(=), i_sst, j_sst, sst_ncep, sst_anom, &
71 forecast_mode, use_ncep_sst
73 use astronomy_mod, only: astronomy_init, get_period, set_period, &
74 set_orbital_parameters, get_orbital_parameters, &
75 set_ref_date_of_ae, get_ref_date_of_ae, &
76 diurnal_solar, daily_mean_solar, annual_mean_solar, &
77 astronomy_end, universal_time, orbital_time
80 use axis_utils2_mod, only: get_axis_cart, get_axis_modulo, lon_in_range, &
81 tranlon, frac_index, nearest_index, interp_1d, &
82 get_axis_modulo_times, axis_edges
85 use block_control_mod, only: block_control_type, define_blocks, &
89 use column_diagnostics_mod, only: column_diagnostics_init, &
90 initialize_diagnostic_columns, &
91 column_diagnostics_header, &
92 close_column_diagnostics_units
95 use coupler_types_mod, only: coupler_types_init, coupler_type_copy, &
96 coupler_type_spawn, coupler_type_set_diags, &
97 coupler_type_write_chksums, coupler_type_send_data, &
98 coupler_type_data_override, coupler_type_register_restarts, &
99 coupler_type_restore_state, coupler_type_increment_data, &
100 coupler_type_rescale_data, coupler_type_copy_data, &
101 coupler_type_redistribute_data, coupler_type_destructor, &
102 coupler_type_initialized, coupler_type_extract_data, &
103 coupler_type_set_data,coupler_type_copy_1d_2d, &
104 coupler_type_copy_1d_3d, coupler_3d_values_type, &
105 coupler_3d_field_type, coupler_3d_bc_type, &
106 coupler_2d_values_type, coupler_2d_field_type, &
107 coupler_2d_bc_type, coupler_1d_values_type, &
108 coupler_1d_field_type, coupler_1d_bc_type, &
109 ind_pcair, ind_u10, ind_psurf, ind_alpha, ind_csurf, &
110 ind_sc_no, ind_flux, ind_deltap, ind_kw, ind_flux0, &
111 ind_deposition, ind_runoff
112 use ensemble_manager_mod, only: ensemble_manager_init, get_ensemble_id, get_ensemble_size, &
113 get_ensemble_pelist, ensemble_pelist_setup, &
114 get_ensemble_filter_pelist
115 use atmos_ocean_fluxes_mod, only: atmos_ocean_fluxes_init, atmos_ocean_type_fluxes_init, &
119 use data_override_mod, only: data_override_init, data_override, &
120 data_override_unset_domains, data_override_UG
123 use diag_integral_mod, only: diag_integral_init, diag_integral_field_init, &
124 sum_diag_integral_field, diag_integral_output, &
128 !! includes imports from submodules made public
129 use diag_manager_mod, only: diag_manager_init, send_data, send_tile_averaged_data, &
130 diag_manager_end, register_diag_field, register_static_field, &
131 diag_axis_init, get_base_time, get_base_date, need_data, &
132 DIAG_ALL, DIAG_OCEAN, DIAG_OTHER, get_date_dif, DIAG_SECONDS,&
133 DIAG_MINUTES, DIAG_HOURS, DIAG_DAYS, DIAG_MONTHS, DIAG_YEARS, &
134 get_diag_global_att, set_diag_global_att, diag_field_add_attribute, &
135 diag_field_add_cell_measures, get_diag_field_id, &
136 diag_axis_add_attribute, diag_grid_init, diag_grid_end, &
137 diag_manager_set_time_end, diag_send_complete, &
138 diag_send_complete_instant, DIAG_FIELD_NOT_FOUND, &
139 CMOR_MISSING_VALUE, null_axis_id
142 use xgrid_mod, only: xmap_type, setup_xmap, set_frac_area, put_to_xgrid, &
143 get_from_xgrid, xgrid_count, some, conservation_check, &
144 xgrid_init, AREA_ATM_SPHERE, AREA_OCN_SPHERE, AREA_ATM_MODEL, &
145 AREA_OCN_MODEL, get_ocean_model_area_elements, grid_box_type, &
146 get_xmap_grid_area, put_to_xgrid_ug, get_from_xgrid_ug, &
147 set_frac_area_ug, FIRST_ORDER, SECOND_ORDER, stock_move_ug, &
148 stock_move, stock_type, stock_print, get_index_range, &
150 use stock_constants_mod, only: NELEMS, ISTOCK_WATER, ISTOCK_HEAT, ISTOCK_SALT, &
151 ISTOCK_TOP, ISTOCK_BOTTOM, ISTOCK_SIDE, stocks_file, &
152 stocks_report, stocks_report_init, stocks_set_init_time, &
153 atm_stock, ocn_stock, lnd_stock, ice_stock
156 use field_manager_mod, only: field_manager_init, field_manager_end, find_field_index, &
158 get_field_method, get_field_methods, parse, fm_change_list, &
159 fm_change_root, fm_dump_list, fm_exists, fm_get_index, &
160 fm_get_current_list, fm_get_length, fm_get_type, fm_get_value, &
162 fm_loop_over_list, fm_new_list, fm_new_value, &
163 fm_reset_loop, fm_return_root, &
164 fm_modify_name, fm_query_method, fm_find_methods, fm_copy_list, &
165 fm_field_name_len, fm_path_name_len, &
166 fm_string_len, fm_type_name_len, NUM_MODELS, NO_FIELD, &
167 MODEL_ATMOS, MODEL_OCEAN, MODEL_LAND, MODEL_ICE, MODEL_COUPLER, &
168 method_type, method_type_short, &
169 method_type_very_short, fm_list_iter_type, default_method
170 use fm_util_mod, only: fm_util_start_namelist, fm_util_end_namelist, &
171 fm_util_check_for_bad_fields, fm_util_set_caller, &
172 fm_util_reset_caller, fm_util_set_no_overwrite, &
173 fm_util_reset_no_overwrite, fm_util_set_good_name_list, &
174 fm_util_reset_good_name_list, fm_util_get_length, &
175 fm_util_get_integer, fm_util_get_logical, fm_util_get_real, &
176 fm_util_get_string, fm_util_get_integer_array, &
177 fm_util_get_logical_array, fm_util_get_real_array, &
178 fm_util_get_string_array, fm_util_set_value, &
179 fm_util_set_value_integer_array, fm_util_set_value_logical_array, &
180 fm_util_set_value_real_array, fm_util_set_value_string_array, &
181 fm_util_set_value_integer, fm_util_set_value_logical, &
182 fm_util_set_value_real, fm_util_set_value_string, &
183 fm_util_get_index_list, fm_util_get_index_string, &
184 fm_util_default_caller
187 use fms2_io_mod, only: unlimited, FmsNetcdfFile_t, FmsNetcdfDomainFile_t, &
188 FmsNetcdfUnstructuredDomainFile_t, open_file, open_virtual_file, &
189 close_file, register_axis, register_field, register_restart_field, &
190 write_data, read_data, write_restart, write_new_restart, &
191 read_restart, read_new_restart, global_att_exists, &
192 variable_att_exists, register_global_attribute, &
193 register_variable_attribute, get_global_attribute, &
194 get_variable_attribute, get_num_dimensions, &
195 get_dimension_names, dimension_exists, is_dimension_unlimited, &
196 get_dimension_size, get_num_variables, get_variable_names, &
197 variable_exists, get_variable_num_dimensions, &
198 get_variable_dimension_names, get_variable_size, &
199 get_compute_domain_dimension_indices, &
200 get_global_io_domain_indices, Valid_t, get_valid, is_valid, &
201 get_unlimited_dimension_name, get_variable_unlimited_dimension_index, &
202 file_exists, compressed_start_and_count, get_variable_sense, &
203 get_variable_missing, get_variable_units, get_time_calendar, &
204 open_check, is_registered_to_restart, check_if_open, &
205 set_fileobj_time_name, is_dimension_registered, &
206 fms2_io_init, get_mosaic_tile_grid, &
207 write_restart_bc, read_restart_bc, get_filename_appendix, & !> 2021.02-a1
208 set_filename_appendix, get_instance_filename, &
209 nullify_filename_appendix, ascii_read, get_mosaic_tile_file, &
212 ! fms_io_utils_mod, fms_netcdf_domain_io_mod, netcdf_io_mod,
213 ! fms_netcdf_unstructured_domain_io_mod, blackboxio
216 !! routines that don't conflict with fms2_io
217 use fms_mod, only: fms_init, fms_end, error_mesg, fms_error_handler, check_nml_error, &
218 monotonic_array, string_array_index, clock_flag_default, &
219 print_memory_usage, write_version_number
222 use horiz_interp_mod, only: horiz_interp, horiz_interp_new, horiz_interp_del, &
223 horiz_interp_init, horiz_interp_end
224 use horiz_interp_type_mod, only: horiz_interp_type, assignment(=), CONSERVE, &
225 BILINEAR, SPHERICA, BICUBIC, stats
226 !! used via horiz_interp
227 ! horiz_interp_bicubic_mod, horiz_interp_bilinear_mod
228 ! horiz_interp_conserve_mod, horiz_interp_spherical_mod
231 use interpolator_mod, only: interpolator_init, interpolator, interpolate_type_eq, &
232 obtain_interpolator_time_slices, unset_interpolator_time_flag, &
233 interpolator_end, init_clim_diag, query_interpolator, &
234 interpolate_type, CONSTANT, &
235 INTERP_WEIGHTED_P, INTERP_LINEAR_P, INTERP_LOG_P, &
236 INTERPOLATOR_ZERO=>ZERO, & !! conflicts with mpp_parameter's ZERO
237 interpolator_read_data=>read_data !! conflicts with fms2_io interface
240 use memutils_mod, only: memutils_init, print_memuse_stats
243 use monin_obukhov_mod, only: monin_obukhov_init, monin_obukhov_end, &
244 mo_drag, mo_profile, mo_diff, stable_mix
245 use monin_obukhov_inter, only: monin_obukhov_diff, monin_obukhov_drag_1d, &
246 monin_obukhov_solve_zeta, monin_obukhov_derivative_t, &
247 monin_obukhov_derivative_m, monin_obukhov_profile_1d, &
248 monin_obukhov_integral_m, monin_obukhov_integral_tq, &
249 monin_obukhov_stable_mix
252 use mosaic2_mod, only: get_mosaic_ntiles, get_mosaic_ncontacts, &
253 get_mosaic_grid_sizes, get_mosaic_contact, &
254 get_mosaic_xgrid_size, get_mosaic_xgrid, &
255 calc_mosaic_grid_area, calc_mosaic_grid_great_circle_area, &
257 mosaic2_get_mosaic_tile_grid => get_mosaic_tile_grid !overloaded in fms2_io
258 use grid2_mod, only: get_grid_ntiles, get_grid_size, get_grid_cell_centers, &
259 get_grid_cell_vertices, get_grid_cell_Area, get_grid_comp_area, &
260 define_cube_mosaic, get_great_circle_algorithm, grid_init, grid_end
261 use gradient_mod, only: gradient_cubic, calc_cubic_grid_info
264 use mpp_mod, only: stdin, stdout, stderr, &
265 stdlog, lowercase, uppercase, mpp_error, mpp_error_state, &
266 mpp_set_warn_level, mpp_sync, mpp_sync_self, mpp_set_stack_size, &
267 mpp_pe, mpp_npes, mpp_root_pe, mpp_set_root_pe, mpp_declare_pelist, &
268 mpp_get_current_pelist, mpp_set_current_pelist, &
269 mpp_get_current_pelist_name, mpp_clock_id, mpp_clock_set_grain, &
270 mpp_record_timing_data, get_unit, read_ascii_file, read_input_nml, &
271 mpp_clock_begin, mpp_clock_end, get_ascii_file_num_lines, &
272 mpp_record_time_start, mpp_record_time_end, mpp_chksum, &
273 mpp_max, mpp_min, mpp_sum, mpp_transmit, mpp_send, mpp_recv, &
274 mpp_sum_ad, mpp_broadcast, mpp_init, mpp_exit, mpp_gather, &
275 mpp_scatter, mpp_alltoall, mpp_type, mpp_byte, mpp_type_create, &
276 mpp_type_free, input_nml_file
277 use mpp_parameter_mod,only:MAXPES, MPP_VERBOSE, MPP_DEBUG, ALL_PES, ANY_PE, NULL_PE, &
278 NOTE, WARNING, FATAL, MPP_WAIT, MPP_READY, MAX_CLOCKS, &
279 MAX_EVENT_TYPES, MAX_EVENTS, MPP_CLOCK_SYNC, MPP_CLOCK_DETAILED, &
280 CLOCK_COMPONENT, CLOCK_SUBCOMPONENT, CLOCK_MODULE_DRIVER, &
281 CLOCK_MODULE, CLOCK_ROUTINE, CLOCK_LOOP, CLOCK_INFRA, MAX_BINS, &
282 EVENT_ALLREDUCE, EVENT_BROADCAST, EVENT_RECV, EVENT_SEND, EVENT_WAIT, &
283 EVENT_ALLTOALL, EVENT_TYPE_CREATE, EVENT_TYPE_FREE, &
284 DEFAULT_TAG, COMM_TAG_1, COMM_TAG_2, COMM_TAG_3, COMM_TAG_4, &
285 COMM_TAG_5, COMM_TAG_6, COMM_TAG_7, COMM_TAG_8, &
286 COMM_TAG_9, COMM_TAG_10, COMM_TAG_11, COMM_TAG_12, &
287 COMM_TAG_13, COMM_TAG_14, COMM_TAG_15, COMM_TAG_16, &
288 COMM_TAG_17, COMM_TAG_18, COMM_TAG_19, COMM_TAG_20, &
289 MPP_FILL_INT, MPP_FILL_FLOAT, MPP_FILL_DOUBLE, &
290 GLOBAL_DATA_DOMAIN, CYCLIC_GLOBAL_DOMAIN, BGRID_NE, &
291 BGRID_SW, CGRID_NE, CGRID_SW, DGRID_NE, DGRID_SW, &
292 FOLD_WEST_EDGE, FOLD_EAST_EDGE, FOLD_SOUTH_EDGE, &
293 FOLD_NORTH_EDGE, WUPDATE, EUPDATE, SUPDATE, NUPDATE, &
294 XUPDATE, YUPDATE, BITWISE_EXACT_SUM, NON_BITWISE_EXACT_SUM, &
295 MPP_DOMAIN_TIME, WEST, EAST, SOUTH, NORTH, SCALAR_BIT, SCALAR_PAIR, &
296 BITWISE_EFP_SUM, NORTH_EAST, SOUTH_EAST, SOUTH_WEST, NORTH_WEST, &
297 AGRID, GLOBAL, CYCLIC, DOMAIN_ID_BASE, CENTER, CORNER, &
298 MAX_DOMAIN_FIELDS, MAX_TILES, ZERO, NINETY, MINUS_NINETY, &
299 ONE_HUNDRED_EIGHTY, NONBLOCK_UPDATE_TAG, EDGEUPDATE, EDGEONLY, &
300 NONSYMEDGEUPDATE, NONSYMEDGE
301 use mpp_data_mod, only: stat, mpp_stack, ptr_stack, status, ptr_status, sync, &
302 ptr_sync, mpp_from_pe, ptr_from, remote_Data_loc, &
303 ptr_remote, mpp_domains_stack, ptr_domains_stack, &
304 mpp_domains_stack_nonblock, ptr_domains_stack_nonblock
305 use mpp_utilities_mod, only: mpp_array_global_min_max
306 use mpp_memutils_mod, only: mpp_print_memuse_stats, mpp_mem_dump, &
307 mpp_memuse_begin, mpp_memuse_end
308 use mpp_efp_mod, only: mpp_reproducing_sum, mpp_efp_list_sum_across_PEs, &
309 mpp_efp_plus, mpp_efp_minus, mpp_efp_to_real, &
310 mpp_real_to_efp, mpp_efp_real_diff, operator(+), &
311 operator(-), assignment(=), mpp_query_efp_overflow_error, &
312 mpp_reset_efp_overflow_error, mpp_efp_type
313 use mpp_domains_mod, only: domain_axis_spec, domain1D, domain2D, DomainCommunicator2D, &
314 nest_domain_type, mpp_group_update_type, &
315 mpp_domains_set_stack_size, mpp_get_compute_domain, &
316 mpp_get_compute_domains, mpp_get_data_domain, &
317 mpp_get_global_domain, mpp_get_domain_components, &
318 mpp_get_layout, mpp_get_pelist, operator(.EQ.), operator(.NE.), &
319 mpp_domain_is_symmetry, mpp_domain_is_initialized, &
320 mpp_get_neighbor_pe, mpp_nullify_domain_list, &
321 mpp_set_compute_domain, mpp_set_data_domain, mpp_set_global_domain, &
322 mpp_get_memory_domain, mpp_get_domain_shift, &
323 mpp_domain_is_tile_root_pe, mpp_get_tile_id, &
324 mpp_get_domain_extents, mpp_get_current_ntile, &
325 mpp_get_ntile_count, mpp_get_tile_list, mpp_get_tile_npes, &
326 mpp_get_domain_root_pe, mpp_get_tile_pelist, &
327 mpp_get_tile_compute_domains, mpp_get_num_overlap, &
328 mpp_get_overlap, mpp_get_io_domain, mpp_get_domain_pe, &
329 mpp_get_domain_tile_root_pe, mpp_get_domain_name, &
330 mpp_get_io_domain_layout, mpp_copy_domain, mpp_set_domain_symmetry, &
331 mpp_get_update_pelist, mpp_get_update_size, &
332 mpp_get_domain_npes, mpp_get_domain_pelist, &
333 mpp_clear_group_update, mpp_group_update_initialized, &
334 mpp_group_update_is_set, mpp_get_global_domains, &
335 mpp_global_field, mpp_global_max, mpp_global_min, mpp_global_sum, &
336 mpp_global_sum_tl, mpp_global_sum_ad, mpp_broadcast_domain, &
337 mpp_domains_init, mpp_domains_exit, mpp_redistribute, &
338 mpp_update_domains, mpp_check_field, mpp_start_update_domains, &
339 mpp_complete_update_domains, mpp_create_group_update, &
340 mpp_do_group_update, mpp_start_group_update, &
341 mpp_complete_group_update, mpp_reset_group_update_field, &
342 mpp_update_nest_fine, mpp_update_nest_coarse, mpp_get_boundary, &
343 mpp_update_domains_ad, mpp_get_boundary_ad, mpp_pass_SG_to_UG, &
344 mpp_pass_UG_to_SG, mpp_define_layout, mpp_define_domains, &
345 mpp_modify_domain, mpp_define_mosaic, mpp_define_mosaic_pelist, &
346 mpp_define_null_domain, mpp_mosaic_defined, &
347 mpp_define_io_domain, mpp_deallocate_domain, &
348 mpp_compute_extent, mpp_compute_block_extent, &
349 mpp_define_unstruct_domain, domainUG, mpp_get_UG_io_domain, &
350 mpp_get_UG_domain_npes, mpp_get_UG_compute_domain, &
351 mpp_get_UG_domain_tile_id, mpp_get_UG_domain_pelist, &
352 mpp_get_ug_domain_grid_index, mpp_get_UG_domain_ntiles, &
353 mpp_get_UG_global_domain, mpp_global_field_ug, &
354 mpp_get_ug_domain_tile_list, mpp_get_UG_compute_domains, &
355 mpp_define_null_UG_domain, NULL_DOMAINUG, mpp_get_UG_domains_index, &
356 mpp_get_UG_SG_domain, mpp_get_UG_domain_tile_pe_inf, &
357 mpp_define_nest_domains, mpp_get_C2F_index, mpp_get_F2C_index, &
358 mpp_get_nest_coarse_domain, mpp_get_nest_fine_domain, &
359 mpp_is_nest_coarse, mpp_is_nest_fine, &
360 mpp_get_nest_pelist, mpp_get_nest_npes, &
361 mpp_get_nest_fine_pelist, mpp_get_nest_fine_npes, &
362 mpp_domain_UG_is_tile_root_pe, mpp_deallocate_domainUG, &
363 mpp_get_io_domain_UG_layout, NULL_DOMAIN1D, NULL_DOMAIN2D, &
364 mpp_create_super_grid_domain, mpp_shift_nest_domains
367 use yaml_parser_mod, only: open_and_parse_file, get_num_blocks, get_block_ids, get_value_from_key, &
368 get_nkeys, get_key_ids, get_key_name, get_key_value
372 use platform_mod, only: r8_kind, r4_kind, i8_kind, i4_kind, c8_kind, c4_kind, &
373 l8_kind, l4_kind, i2_kind, ptr_kind
376 use random_numbers_mod, only: randomNumberStream, initializeRandomNumberStream, &
377 getRandomNumbers, constructSeed
380 use sat_vapor_pres_mod, only: lookup_es, lookup_des, sat_vapor_pres_init, &
381 lookup_es2, lookup_des2, lookup_es2_des2, &
382 lookup_es3, lookup_des3, lookup_es3_des3, &
383 lookup_es_des, compute_qs, compute_mrs, &
386 use fms_string_utils_mod, only: string, fms_array_to_pointer, fms_pointer_to_array, fms_sort_this, &
387 fms_find_my_string, fms_find_unique, fms_c2f_string, fms_cstring2cpointer, &
391 use time_interp_mod, only: time_interp_init, time_interp, fraction_of_year, &
392 NONE, YEAR, MONTH, DAY
393 use time_interp_external2_mod, only: init_external_field, time_interp_external, &
394 time_interp_external_init, time_interp_external_exit, &
395 get_external_field_size, get_time_axis, &
396 get_external_field_missing, set_override_region, &
397 reset_src_data_region, get_external_fileobj, &
398 NO_REGION, INSIDE_REGION, OUTSIDE_REGION, &
399 SUCCESS, ERR_FIELD_NOT_FOUND
402 use time_manager_mod, only: time_type, operator(+), operator(-), operator(*), &
403 operator(/), operator(>), operator(>=), operator(==), &
404 operator(/=), operator(<), operator(<=), operator(//), &
405 assignment(=), set_time, increment_time, decrement_time, &
406 get_time, interval_alarm, repeat_alarm, time_type_to_real, &
407 real_to_time_type, time_list_error, THIRTY_DAY_MONTHS, &
408 JULIAN, GREGORIAN, NOLEAP, NO_CALENDAR, INVALID_CALENDAR, &
409 set_calendar_type, get_calendar_type, set_ticks_per_second, &
410 get_ticks_per_second, set_date, get_date, increment_date, &
411 decrement_date, days_in_month, leap_year, length_of_year, &
412 days_in_year, day_of_year, month_name, valid_calendar_types, &
413 time_manager_init, print_time, print_date, set_date_julian, &
414 get_date_julian, get_date_no_leap, date_to_string
415 use get_cal_time_mod, only: get_cal_time
418 use gaussian_topog_mod, only: gaussian_topog_init, get_gaussian_topog
419 use topography_mod, only: topography_init, get_topog_mean, get_topog_stdev, &
420 get_ocean_frac, get_ocean_mask, get_water_frac, &
424 use tracer_manager_mod, only: tracer_manager_init, tracer_manager_end, &
425 check_if_prognostic, get_tracer_indices, &
426 get_tracer_index, get_tracer_names, &
427 get_tracer_name, query_method, &
428 set_tracer_atts, set_tracer_profile, &
429 register_tracers, get_number_tracers, &
430 adjust_mass, adjust_positive_def, NO_TRACER, MAX_TRACER_FIELDS
433 use tridiagonal_mod, only: tri_invert, close_tridiagonal
437 #include <file_version.h>
438 character(len=*), parameter, public :: version_FMS = version
443 ! close documentation grouping