revert: log_diag_field_info argument changes (#1136)
[FMS.git] / libFMS.F90
blob872c587a8c786e15484fe19ea3dc88be4e097941
1 !***********************************************************************
2 !*                   GNU Lesser General Public License
3 !*
4 !* This file is part of the GFDL Flexible Modeling System (FMS).
5 !*
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
14 !* for more details.
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 !***********************************************************************
19 !> @defgroup FMS FMS
20 !> @ingroup libfms
21 !> @brief A convenience module to use any FMS routines, functions, values
22 !> @author Ryan Mulhall
24 !! @date 2/2021
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)
51 !! file.
53 !> @file
54 !> @brief File for @ref FMS
56 !> @addtogroup FMS
57 !> @{
58 module fms
60   !> import each FMS module's public routines/functions, interfaces, and variables
61   !! done explicitly to avoid including any unwanted/depracated routines/modules
63   !> affinity
64   use fms_affinity_mod, only: fms_affinity_init, fms_affinity_get, &
65                               fms_affinity_set
67   !> amip_interp
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
72   !> astronomy
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
79   !> axis_utils
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
84   !>block_control
85   use block_control_mod, only: block_control_type, define_blocks, &
86                                define_blocks_packed
88   !> column_diagnostics
89   use column_diagnostics_mod, only: column_diagnostics_init, &
90                                     initialize_diagnostic_columns, &
91                                     column_diagnostics_header, &
92                                     close_column_diagnostics_units
94   !> coupler
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, &
116                                aof_set_coupler_flux
118   !> data_override
119   use data_override_mod, only: data_override_init, data_override, &
120                                data_override_unset_domains, data_override_UG
122   !> diag_integral
123   use diag_integral_mod, only: diag_integral_init, diag_integral_field_init, &
124                                sum_diag_integral_field, diag_integral_output, &
125                                diag_integral_end
127   !> diag_manager
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
141   !> exchange
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, &
149                        stock_integrate_2d
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
155   !> field manager
156   use field_manager_mod, only: field_manager_init, field_manager_end, find_field_index, &
157                          get_field_info, &
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, &
161                          fm_init_loop, &
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
186   !> fms2_io
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, &
210                          parse_mask_table
211   ! used via fms2_io
212   ! fms_io_utils_mod, fms_netcdf_domain_io_mod, netcdf_io_mod,
213   ! fms_netcdf_unstructured_domain_io_mod, blackboxio
215   !> fms
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
221   !> horiz_interp
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
230   !> interpolator
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
239   !> memutils
240   use memutils_mod, only: memutils_init, print_memuse_stats
242   !> monin_obukhov
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
251   !> mosaic
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, &
256                       is_inside_polygon, &
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
263   !> mpp
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
365   !> parser
366 #ifdef use_yaml
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
369 #endif
371   !> platform
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
375   !> random_numbers
376   use random_numbers_mod, only: randomNumberStream, initializeRandomNumberStream, &
377                                 getRandomNumbers, constructSeed
379   !> sat_vapor_pres
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, &
384                                 escomp, descomp
385   !> string_utils
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, &
388                                   string_copy
390   !> time_interp
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
401   !> time_manager
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
417   !> topography
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, &
421                             get_water_mask
423   !> tracer_manager
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
432   !> tridiagonal
433   use tridiagonal_mod, only: tri_invert, close_tridiagonal
435   implicit none
437 #include <file_version.h>
438   character(len=*), parameter, public :: version_FMS = version
439   private :: version
441 end module fms
442 !> @}
443 ! close documentation grouping