fix: diag manager support for multiple z subaxes and for static variables and files...
[FMS.git] / libFMS.F90
blob42879958f5885334d1286cbbbc8bc0c4357be26a
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 !! Renaming scheme:
32 !!   Routines and variables: fms_<module_name>_routine_name
33 !!   Types:                  FmsModuleNameTypeName
35 !! Exceptions (mainly for rep:
36 !!   - Parameter values are kept their original names
37 !!   - If module name is already included (like in init routines) only fms prefix will be added.
38 !!   - Similarly if theres a redundant module name included already included it will not be repeated
39 !!     (ie. mpp_update_domains => fms_mpp_domains_update_domains)
40 !!   - Override interfaces for operators and assignment are provided
42 !! Remappings due to name conflicts:
44 !!           ZERO from interpolator_mod(mpp_parameter)  => INTERPOLATOR_ZERO
46 !!           version from fms_mod                       => version_FMS
48 !! Not in this module:
50 !!                     axis_utils_mod, fms_io_mod, time_interp_external_mod
51 !!                     get_grid_version_mpp_mod, mpp_io_mod, mosaic_mod, &
52 !!                     fms_mod(partial, old io excluded), drifters modules
53 !!                     constants_mod (FMSconstants should be used externally)
54 !!                     grid_mod, mosaic_mod
56 !! A full list of supported interfaces and public types intended for use via
57 !! this module is provided in the [supported_interfaces.md](../../supported_interfaces.md)
58 !! file.
60 !> @file
61 !> @brief File for @ref FMS
63 !> @addtogroup FMS
64 !> @{
65 module fms
67   !> import each FMS module's public routines/functions, interfaces, and variables
68   !! done explicitly to avoid including any unwanted/depracated routines/modules
70   !> affinity
71   use fms_affinity_mod, only: fms_affinity_init, fms_affinity_get, &
72                               fms_affinity_set
74   !> amip_interp
75   use amip_interp_mod, only: fms_amip_interp_init         => amip_interp_init, &
76                              fms_amip_interp_get_amip_sst             => get_amip_sst, &
77                              fms_amip_interp_get_amip_ice             => get_amip_ice, &
78                              fms_amip_interp_new          => amip_interp_new, &
79                              fms_amip_interp_del          => amip_interp_del, &
80                              FmsAmipInterp_type => amip_interp_type, &
81                              assignment(=), &
82                              fms_amip_interp_i_sst        => i_sst, &
83                              fms_amip_interp_j_sst        => j_sst, &
84                              fms_amip_interp_sst_ncep     => sst_ncep, &
85                              fms_amip_interp_sst_anom     => sst_anom, &
86                              fms_amip_interp_forecast_mode=> forecast_mode, &
87                              fms_amip_interp_use_ncep_sst => use_ncep_sst
88   !> astronomy
89   use astronomy_mod, only: fms_astronomy_init                   => astronomy_init, &
90                            fms_astronomy_get_period             => get_period, &
91                            fms_astronomy_set_period             => set_period, &
92                            fms_astronomy_set_orbital_parameters => set_orbital_parameters, &
93                            fms_astronomy_get_orbital_parameters => get_orbital_parameters, &
94                            fms_astronomy_set_ref_date_of_ae     => set_ref_date_of_ae, &
95                            fms_astronomy_get_ref_date_of_ae     => get_ref_date_of_ae, &
96                            fms_astronomy_diurnal_solar          => diurnal_solar, &
97                            fms_astronomy_daily_mean_solar       => daily_mean_solar, &
98                            fms_astronomy_annual_mean_solar      => annual_mean_solar,  &
99                            fms_astronomy_end                    => astronomy_end, &
100                            fms_astronomy_universal_time         => universal_time, &
101                            fms_astronomy_orbital_time           => orbital_time
103   !> axis_utils
104   use axis_utils2_mod, only: fms_axis_utils2_get_axis_cart         => get_axis_cart, &
105                              fms_axis_utils2_get_axis_modulo       => get_axis_modulo, &
106                              fms_axis_utils2_lon_in_range          => lon_in_range, &
107                              fms_axis_utils2_tranlon               => tranlon, &
108                              fms_axis_utils2_frac_index            => frac_index, &
109                              fms_axis_utils2_nearest_index         => nearest_index, &
110                              fms_axis_utils2_interp_1d             => interp_1d, &
111                              fms_axis_utils2_get_axis_modulo_times => get_axis_modulo_times, &
112                              fms_axis_utils2_axis_edges            => axis_edges
114   !>block_control
115   use block_control_mod, only: FmsBlockControl_type                   => block_control_type, &
116                                fms_block_control_define_blocks        => define_blocks, &
117                                fms_block_control_define_blocks_packed => define_blocks_packed
119   !> column_diagnostics
120   use column_diagnostics_mod, only: fms_column_diagnostics_init        => column_diagnostics_init, &
121                                     fms_column_diagnostics_initialize_diagnostic_columns => &
122                                                                           initialize_diagnostic_columns, &
123                                     fms_column_diagnostics_header      => column_diagnostics_header, &
124                                     fms_column_diagnostics_close_units => close_column_diagnostics_units
126   !> coupler
127   use coupler_types_mod, only: fms_coupler_types_init             => coupler_types_init, &
128                                fms_coupler_type_copy              => coupler_type_copy, &
129                                fms_coupler_type_spawn             => coupler_type_spawn, &
130                                fms_coupler_type_set_diags         => coupler_type_set_diags, &
131                                fms_coupler_type_write_chksums     => coupler_type_write_chksums, &
132                                fms_coupler_type_send_data         => coupler_type_send_data, &
133                                fms_coupler_type_data_override     => coupler_type_data_override, &
134                                fms_coupler_type_register_restarts => coupler_type_register_restarts, &
135                                fms_coupler_type_restore_state     => coupler_type_restore_state, &
136                                fms_coupler_type_increment_data    => coupler_type_increment_data, &
137                                fms_coupler_type_rescale_data      => coupler_type_rescale_data, &
138                                fms_coupler_type_copy_data         => coupler_type_copy_data, &
139                                fms_coupler_type_redistribute_data => coupler_type_redistribute_data, &
140                                fms_coupler_type_destructor        => coupler_type_destructor, &
141                                fms_coupler_type_initialized       => coupler_type_initialized, &
142                                fms_coupler_type_extract_data      => coupler_type_extract_data, &
143                                fms_coupler_type_set_data          => coupler_type_set_data, &
144                                fms_coupler_type_copy_1d_2d        => coupler_type_copy_1d_2d, &
145                                fms_coupler_type_copy_1d_3d        => coupler_type_copy_1d_3d, &
146                                FmsCoupler3dValuesReals8_type         => coupler_3d_real8_values_type, &
147                                FmsCoupler3dFieldReals8_type          => coupler_3d_real8_field_type, &
148                                FmsCoupler2dValuesReals8_type         => coupler_2d_real8_values_type, &
149                                FmsCoupler2dFieldReals8_type          => coupler_2d_real8_field_type, &
150                                FmsCoupler1dValuesReals8_type         => coupler_1d_real8_values_type, &
151                                FmsCoupler1dFieldReals8_type          => coupler_1d_real8_field_type, &
152                                FmsCoupler3dValuesReals4_type         => coupler_3d_real4_values_type, &
153                                FmsCoupler3dFieldReals4_type          => coupler_3d_real4_field_type, &
154                                FmsCoupler2dValuesReals4_type         => coupler_2d_real4_values_type, &
155                                FmsCoupler2dFieldReals4_type          => coupler_2d_real4_field_type, &
156                                FmsCoupler1dValuesReals4_type         => coupler_1d_real4_values_type, &
157                                FmsCoupler1dFieldReals4_type          => coupler_1d_real4_field_type, &
158                                FmsCoupler3dBC_type             => coupler_3d_bc_type, &
159                                FmsCoupler2dBC_type             => coupler_2d_bc_type, &
160                                FmsCoupler1dBC_type             => coupler_1d_bc_type, &
161                                fms_coupler_ind_pcair                      => ind_pcair, &
162                                fms_coupler_ind_u10                        => ind_u10, &
163                                fms_coupler_ind_psurf                      => ind_psurf, &
164                                fms_coupler_ind_alpha                      => ind_alpha, &
165                                fms_coupler_ind_csurf                      => ind_csurf, &
166                                fms_coupler_ind_sc_no                      => ind_sc_no, &
167                                fms_coupler_ind_flux                       => ind_flux, &
168                                fms_coupler_ind_deltap                     => ind_deltap, &
169                                fms_coupler_ind_kw                         => ind_kw, &
170                                fms_coupler_ind_flux0                      => ind_flux0, &
171                                fms_coupler_ind_deposition                 => ind_deposition,&
172                                fms_coupler_ind_runoff                     => ind_runoff
173   use ensemble_manager_mod, only: fms_ensemble_manager_init     => ensemble_manager_init, &
174                                fms_ensemble_manager_get_ensemble_id              => get_ensemble_id, &
175                                fms_ensemble_manager_get_ensemble_size            => get_ensemble_size, &
176                                fms_ensemble_manager_get_ensemble_pelist          => get_ensemble_pelist, &
177                                fms_ensemble_manager_ensemble_pelist_setup        => ensemble_pelist_setup, &
178                                fms_ensemble_manager_get_ensemble_filter_pelist   => get_ensemble_filter_pelist
179   use atmos_ocean_fluxes_mod, only: fms_atmos_ocean_fluxes_init => atmos_ocean_fluxes_init, &
180                                fms_atmos_ocean_type_fluxes_init => atmos_ocean_type_fluxes_init, &
181                                fms_atmos_ocean_fluxes_set_coupler_flux         => aof_set_coupler_flux
183   !> data_override
184   use data_override_mod, only: fms_data_override_init          => data_override_init, &
185                                fms_data_override               => data_override, &
186                                fms_data_override_unset_domains => data_override_unset_domains, &
187                                fms_data_override_UG            => data_override_UG
189   !> diag_integral
190   use diag_integral_mod, only: fms_diag_integral_init       => diag_integral_init, &
191                                fms_diag_integral_field_init => diag_integral_field_init, &
192                                fms_sum_diag_integral_field  => sum_diag_integral_field, &
193                                fms_diag_integral_output     => diag_integral_output, &
194                                fms_diag_integral_end        => diag_integral_end
196   !> diag_manager
197   !! includes imports from submodules made public
198   use diag_manager_mod, only: fms_diag_init => diag_manager_init, &
199                               fms_diag_send_data => send_data, &
200                               fms_diag_send_tile_averaged_data => send_tile_averaged_data, &
201                               fms_diag_end => diag_manager_end, &
202                               fms_diag_register_diag_field => register_diag_field, &
203                               fms_diag_register_static_field => register_static_field, &
204                               fms_diag_axis_init => diag_axis_init, &
205                               fms_diag_get_base_time => get_base_time, &
206                               fms_diag_get_base_date => get_base_date, &
207                               fms_diag_need_data => need_data, &
208                               DIAG_ALL, &
209                               DIAG_OCEAN, &
210                               DIAG_OTHER, &
211                               fms_get_date_dif => get_date_dif, &
212                               DIAG_SECONDS,&
213                               DIAG_MINUTES, &
214                               DIAG_HOURS, &
215                               DIAG_DAYS, &
216                               DIAG_MONTHS, &
217                               DIAG_YEARS, &
218                               fms_diag_get_global_att => get_diag_global_att, &
219                               fms_diag_set_global_att => set_diag_global_att, &
220                               fms_diag_field_add_attribute => diag_field_add_attribute, &
221                               fms_diag_field_add_cell_measures => diag_field_add_cell_measures, &
222                               fms_diag_get_field_id => get_diag_field_id, &
223                               fms_diag_axis_add_attribute => diag_axis_add_attribute, &
224                               fms_diag_grid_init => diag_grid_init, &
225                               fms_diag_grid_end => diag_grid_end, &
226                               fms_diag_set_time_end => diag_manager_set_time_end, &
227                               fms_diag_send_complete => diag_send_complete, &
228                               fms_diag_send_complete_instant => diag_send_complete_instant, &
229                               DIAG_FIELD_NOT_FOUND, &
230                               CMOR_MISSING_VALUE, &
231                               null_axis_id
233   !> exchange
234   use xgrid_mod, only: FmsXgridXmap_type => xmap_type, &
235                        fms_xgrid_setup_xmap => setup_xmap, &
236                        fms_xgrid_set_frac_area => set_frac_area, &
237                        fms_xgrid_put_to_xgrid => put_to_xgrid, &
238                        fms_xgrid_get_from_xgrid => get_from_xgrid, &
239                        fms_xgrid_count => xgrid_count, &
240                        fms_xgrid_some => some, &
241                        fms_xgrid_conservation_check => conservation_check, &
242                        fms_xgrid_init => xgrid_init, &
243                        AREA_ATM_SPHERE, AREA_OCN_SPHERE, AREA_ATM_MODEL, AREA_OCN_MODEL, &
244                        fms_xgrid_get_ocean_model_area_elements => get_ocean_model_area_elements, &
245                        FmsXgridGridBox_type => grid_box_type, &
246                        fms_xgrid_get_xmap_grid_area => get_xmap_grid_area, &
247                        fms_xgrid_put_to_xgrid_ug => put_to_xgrid_ug, &
248                        fms_xgrid_get_from_xgrid_ug => get_from_xgrid_ug, &
249                        fms_xgrid_set_frac_area_ug => set_frac_area_ug, &
250                        FIRST_ORDER, SECOND_ORDER, &
251                        fms_xgrid_stock_move_ug => stock_move_ug, &
252                        fms_xgrid_stock_move => stock_move, &
253                        FmsXgridStock_type => stock_type, &
254                        fms_xgrid_stock_print => stock_print, &
255                        fms_xgrid_get_index_range => get_index_range, &
256                        fms_xgrid_stock_integrate_2d => stock_integrate_2d
257   use stock_constants_mod, only: NELEMS, ISTOCK_WATER, ISTOCK_HEAT, ISTOCK_SALT, &
258                        ISTOCK_TOP, ISTOCK_BOTTOM, ISTOCK_SIDE, &
259                        fms_stock_constants_stocks_file => stocks_file, &
260                        fms_stock_constants_stocks_report => stocks_report, &
261                        fms_stocks_report_init => stocks_report_init, &
262                        fms_stocks_set_init_time => stocks_set_init_time, &
263                        fms_stock_constants_atm_stock => atm_stock, &
264                        fms_stock_constants_ocn_stock => ocn_stock, &
265                        fms_stock_constants_lnd_stock => lnd_stock, &
266                        fms_stock_constants_ice_stock => ice_stock
268   !> field manager
269   use field_manager_mod, only: fms_field_manager_init => field_manager_init, &
270                          fms_field_manager_end => field_manager_end, &
271                          fms_field_manager_find_field_index => find_field_index, &
272                          fms_field_manager_get_field_info => get_field_info, &
273                          fms_field_manager_get_field_method => get_field_method, &
274                          fms_field_manager_get_field_methods => get_field_methods, &
275                          fms_field_manager_parse => parse, &
276                          fms_field_manager_fm_change_list => fm_change_list, &
277                          fms_field_manager_fm_change_root => fm_change_root, &
278                          fms_field_manager_fm_dump_list => fm_dump_list, &
279                          fms_field_manager_fm_exists => fm_exists, &
280                          fms_field_manager_fm_get_index => fm_get_index, &
281                          fms_field_manager_fm_get_current_list => fm_get_current_list, &
282                          fms_field_manager_fm_get_length => fm_get_length, &
283                          fms_field_manager_fm_get_type => fm_get_type, &
284                          fms_field_manager_fm_get_value => fm_get_value, &
285                          fms_field_manager_fm_init_loop => fm_init_loop, &
286                          fms_field_manager_fm_loop_over_list => fm_loop_over_list, &
287                          fms_field_manager_fm_new_list => fm_new_list, &
288                          fms_field_manager_fm_new_value => fm_new_value, &
289                          fms_field_manager_fm_reset_loop => fm_reset_loop, &
290                          fms_field_manager_fm_return_root => fm_return_root, &
291                          fms_field_manager_fm_modify_name => fm_modify_name, &
292                          fms_field_manager_fm_query_method => fm_query_method, &
293                          fms_field_manager_fm_find_methods => fm_find_methods, &
294                          fms_field_manager_fm_copy_list => fm_copy_list, &
295                          fms_field_manager_fm_field_name_len => fm_field_name_len, &
296                          fms_field_manager_fm_path_name_len => fm_path_name_len, &
297                          fms_field_manager_fm_string_len => fm_string_len, &
298                          fms_field_manager_fm_type_name_len => fm_type_name_len, &
299                          NUM_MODELS, NO_FIELD, MODEL_ATMOS, MODEL_OCEAN, MODEL_LAND, MODEL_ICE, MODEL_COUPLER, &
300                          FmsFieldManagerMethod_type          => method_type, &
301                          FmsFieldManagerMethodShort_type     => method_type_short, &
302                          FmsFieldManagerMethodVeryShort_type => method_type_very_short, &
303                          FmsFieldManagerListIterator_type => fm_list_iter_type, &
304                          fms_field_manager_default_method => default_method
305   use fm_util_mod, only: fms_fm_util_start_namelist => fm_util_start_namelist, &
306                          fms_fm_util_end_namelist => fm_util_end_namelist, &
307                          fms_fm_util_check_for_bad_fields => fm_util_check_for_bad_fields, &
308                          fms_fm_util_set_caller => fm_util_set_caller, &
309                          fms_fm_util_reset_caller => fm_util_reset_caller, &
310                          fms_fm_util_set_no_overwrite => fm_util_set_no_overwrite, &
311                          fms_fm_util_reset_no_overwrite => fm_util_reset_no_overwrite, &
312                          fms_fm_util_set_good_name_list => fm_util_set_good_name_list, &
313                          fms_fm_util_reset_good_name_list => fm_util_reset_good_name_list, &
314                          fms_fm_util_get_length => fm_util_get_length, &
315                          fms_fm_util_get_integer => fm_util_get_integer, &
316                          fms_fm_util_get_logical => fm_util_get_logical, &
317                          fms_fm_util_get_real => fm_util_get_real, &
318                          fms_fm_util_get_string => fm_util_get_string, &
319                          fms_fm_util_get_integer_array => fm_util_get_integer_array, &
320                          fms_fm_util_get_logical_array => fm_util_get_logical_array, &
321                          fms_fm_util_get_real_array => fm_util_get_real_array, &
322                          fms_fm_util_get_string_array => fm_util_get_string_array, &
323                          fms_fm_util_set_value => fm_util_set_value, &
324                          fms_fm_util_set_value_integer_array => fm_util_set_value_integer_array, &
325                          fms_fm_util_set_value_logical_array => fm_util_set_value_logical_array, &
326                          fms_fm_util_set_value_real_array => fm_util_set_value_real_array, &
327                          fms_fm_util_set_value_string_array => fm_util_set_value_string_array, &
328                          fms_fm_util_set_value_integer => fm_util_set_value_integer, &
329                          fms_fm_util_set_value_logical => fm_util_set_value_logical, &
330                          fms_fm_util_set_value_real => fm_util_set_value_real, &
331                          fms_fm_util_set_value_string => fm_util_set_value_string, &
332                          fms_fm_util_get_index_list => fm_util_get_index_list, &
333                          fms_fm_util_get_index_string => fm_util_get_index_string, &
334                          fms_fm_util_default_caller => fm_util_default_caller
336   !> fms2_io
337   !! TODO need to see opinions on these
338   !! not sure if we need fms_ prefix for routines
339   !! types do not follow our typical naming convention(no _type and uses camel case instead of _ spacing)
340   use fms2_io_mod, only: unlimited, FmsNetcdfFile_t, FmsNetcdfDomainFile_t, &
341                          FmsNetcdfUnstructuredDomainFile_t, &
342                          Valid_t, &
343                          fms2_io_open_file => open_file, &
344                          fms2_io_open_virtual_file => open_virtual_file, &
345                          fms2_io_close_file => close_file, &
346                          fms2_io_register_axis => register_axis, &
347                          fms2_io_register_field => register_field, &
348                          fms2_io_register_restart_field => register_restart_field, &
349                          fms2_io_write_data => write_data, &
350                          fms2_io_read_data => read_data, &
351                          fms2_io_write_restart => write_restart, &
352                          fms2_io_write_new_restart => write_new_restart, &
353                          fms2_io_read_restart => read_restart, &
354                          fms2_io_read_new_restart => read_new_restart, &
355                          fms2_io_global_att_exists => global_att_exists, &
356                          fms2_io_variable_att_exists => variable_att_exists, &
357                          fms2_io_register_global_attribute => register_global_attribute, &
358                          fms2_io_register_variable_attribute => register_variable_attribute, &
359                          fms2_io_get_global_attribute => get_global_attribute, &
360                          fms2_io_get_variable_attribute => get_variable_attribute, &
361                          fms2_io_get_num_dimensions => get_num_dimensions, &
362                          fms2_io_get_dimension_names => get_dimension_names, &
363                          fms2_io_dimension_exists => dimension_exists, &
364                          fms2_io_is_dimension_unlimited => is_dimension_unlimited, &
365                          fms2_io_get_dimension_size => get_dimension_size, &
366                          fms2_io_get_num_variables =>   get_num_variables, &
367                          fms2_io_get_variable_names =>   get_variable_names, &
368                          fms2_io_variable_exists => variable_exists, &
369                          fms2_io_get_variable_num_dimensions => get_variable_num_dimensions, &
370                          fms2_io_get_variable_dimension_names => get_variable_dimension_names, &
371                          fms2_io_get_variable_size =>   get_variable_size, &
372                          fms2_io_get_compute_domain_dimension_indices => get_compute_domain_dimension_indices, &
373                          fms2_io_get_global_io_domain_indices => get_global_io_domain_indices, &
374                          fms2_io_get_valid => get_valid, &
375                          fms2_io_is_valid => is_valid, &
376                          fms2_io_get_unlimited_dimension_name => get_unlimited_dimension_name, &
377                          fms2_io_get_variable_unlimited_dimension_index => get_variable_unlimited_dimension_index, &
378                          fms2_io_file_exists => file_exists, &
379                          fms2_io_compressed_start_and_count => compressed_start_and_count, &
380                          fms2_io_get_variable_sense =>   get_variable_sense, &
381                          fms2_io_get_variable_missing =>   get_variable_missing, &
382                          fms2_io_get_variable_units =>   get_variable_units, &
383                          fms2_io_get_time_calendar =>   get_time_calendar, &
384                          fms2_io_open_check =>   open_check, &
385                          fms2_io_is_registered_to_restart =>  is_registered_to_restart, &
386                          fms2_io_check_if_open =>   check_if_open, &
387                          fms2_io_set_fileobj_time_name => set_fileobj_time_name, &
388                          fms2_io_is_dimension_registered => is_dimension_registered, &
389                          fms2_io_fms2_io_init =>   fms2_io_init, &
390                          fms2_io_get_mosaic_tile_grid =>   get_mosaic_tile_grid, &
391                          fms2_io_write_restart_bc =>   write_restart_bc, &
392                          fms2_io_read_restart_bc =>   read_restart_bc, &
393                          fms2_io_get_filename_appendix =>   get_filename_appendix, &
394                          fms2_io_set_filename_appendix =>   set_filename_appendix, &
395                          fms2_io_get_instance_filename =>   get_instance_filename, &
396                          fms2_io_nullify_filename_appendix =>   nullify_filename_appendix, &
397                          fms2_io_ascii_read =>   ascii_read, &
398                          fms2_io_get_mosaic_tile_file =>   get_mosaic_tile_file, &
399                          fms2_io_parse_mask_table => parse_mask_table
400   ! used via fms2_io
401   ! fms_io_utils_mod, fms_netcdf_domain_io_mod, netcdf_io_mod, &
402   ! fms_netcdf_unstructured_domain_io_mod, blackboxio
404   !> fms
405   !! routines that don't conflict with fms2_io
406   use fms_mod, only: fms_init, fms_end, error_mesg, fms_error_handler, &
407                      check_nml_error, &
408                      fms_monotonic_array => monotonic_array, fms_string_array_index => string_array_index, &
409                      fms_clock_flag_default => clock_flag_default, fms_print_memory_usage => print_memory_usage, &
410                      fms_write_version_number => write_version_number
412   !> horiz_interp
413   use horiz_interp_mod, only: fms_horiz_interp => horiz_interp, fms_horiz_interp_new => horiz_interp_new, &
414                               fms_horiz_interp_del => horiz_interp_del, fms_horiz_interp_init => horiz_interp_init, &
415                               fms_horiz_interp_end => horiz_interp_end
416   use horiz_interp_type_mod, only: FmsHorizInterp_type => horiz_interp_type, &
417                               assignment(=), CONSERVE, BILINEAR, SPHERICA, BICUBIC, &
418                               fms_horiz_interp_type_stats => stats
419   !! used via horiz_interp
420   ! horiz_interp_bicubic_mod, horiz_interp_bilinear_mod
421   ! horiz_interp_conserve_mod, horiz_interp_spherical_mod
423   !> interpolator
424   use interpolator_mod, only: fms_interpolator_init => interpolator_init, &
425                               fms_interpolator => interpolator, &
426                               fms_interpolate_type_eq => interpolate_type_eq, &
427                               fms_interpolator_obtain_interpolator_time_slices => obtain_interpolator_time_slices, &
428                               fms_interpolator_unset_interpolator_time_flag => unset_interpolator_time_flag, &
429                               fms_interpolator_end => interpolator_end, &
430                               fms_interpolator_init_clim_diag => init_clim_diag, &
431                               fms_interpolator_query_interpolator => query_interpolator, &
432                               FmsInterpolate_type => interpolate_type, &
433                               CONSTANT, INTERP_WEIGHTED_P, INTERP_LINEAR_P, INTERP_LOG_P, &
434                               FMS_INTERPOLATOR_ZERO=>ZERO, & !! conflicts with mpp_parameter's ZERO
435                               fms_interpolator_read_data=>read_data
437   !> memutils
438   use memutils_mod, only: fms_memutils_init => memutils_init, &
439                           fms_memutils_print_memuse_stats => print_memuse_stats
441   !> monin_obukhov
442   use monin_obukhov_mod, only: fms_monin_obukhov_init => monin_obukhov_init, &
443                                fms_monin_obukhov_end => monin_obukhov_end, &
444                                fms_monin_obukhov_mo_drag => mo_drag, &
445                                fms_monin_obukhov_mo_profile => mo_profile, &
446                                fms_monin_obukhov_mo_diff => mo_diff, &
447                                fms_monin_obukhov_stable_mix => stable_mix
448   use monin_obukhov_inter, only: fms_monin_obukhov_inter_diff => monin_obukhov_diff, &
449                                  fms_monin_obukhov_inter_drag_1d => monin_obukhov_drag_1d, &
450                                  fms_monin_obukhov_inter_solve_zeta => monin_obukhov_solve_zeta, &
451                                  fms_monin_obukhov_inter_derivative_t => monin_obukhov_derivative_t, &
452                                  fms_monin_obukhov_inter_derivative_m => monin_obukhov_derivative_m, &
453                                  fms_monin_obukhov_inter_profile_1d => monin_obukhov_profile_1d, &
454                                  fms_monin_obukhov_inter_integral_m => monin_obukhov_integral_m, &
455                                  fms_monin_obukhov_inter_integral_tq => monin_obukhov_integral_tq, &
456                                  fms_monin_obukhov_inter_stable_mix => monin_obukhov_stable_mix
458   !> mosaic
459   use mosaic2_mod, only: fms_mosaic2_get_mosaic_ntiles => get_mosaic_ntiles, &
460                       fms_mosaic2_get_mosaic_ncontacts => get_mosaic_ncontacts, &
461                       fms_mosaic2_get_mosaic_grid_sizes => get_mosaic_grid_sizes, &
462                       fms_mosaic2_get_mosaic_contact => get_mosaic_contact, &
463                       fms_mosaic2_get_mosaic_xgrid_size => get_mosaic_xgrid_size, &
464                       fms_mosaic2_get_mosaic_xgrid => get_mosaic_xgrid, &
465                       fms_mosaic2_calc_mosaic_grid_area => calc_mosaic_grid_area, &
466                       fms_mosaic2_calc_mosaic_grid_great_circle_area => calc_mosaic_grid_great_circle_area, &
467                       fms_mosaic2_is_inside_polygon => is_inside_polygon, &
468                       fms_mosaic2_get_mosaic_tile_grid => get_mosaic_tile_grid !overloaded in fms2_io
469   use grid2_mod, only: fms_grid2_get_grid_ntiles => get_grid_ntiles, &
470                        fms_grid2_get_grid_size => get_grid_size, &
471                        fms_grid2_get_grid_cell_centers => get_grid_cell_centers, &
472                        fms_grid2_get_grid_cell_vertices => get_grid_cell_vertices, &
473                        fms_grid2_get_grid_cell_Area => get_grid_cell_Area, &
474                        fms_grid2_get_grid_comp_area => get_grid_comp_area, &
475                        fms_grid2_define_cube_mosaic => define_cube_mosaic, &
476                        fms_grid2_get_great_circle_algorithm => get_great_circle_algorithm, &
477                        fms_grid2_grid_init => grid_init, &
478                        fms_grid2_end => grid_end
479   use gradient_mod, only: fms_gradient_cubic => gradient_cubic, &
480                           fms_gradient_calc_cubic_grid_info => calc_cubic_grid_info
482   !> mpp
483   use mpp_mod, only: fms_mpp_stdin => stdin, &
484                      fms_mpp_stdout => stdout, &
485                      fms_mpp_stderr => stderr, &
486                      fms_mpp_stdlog => stdlog, &
487                      fms_mpp_lowercase => lowercase, &
488                      fms_mpp_uppercase => uppercase, &
489                      fms_mpp_error => mpp_error, &
490                      fms_mpp_error_state => mpp_error_state, &
491                      fms_mpp_set_warn_level => mpp_set_warn_level, &
492                      fms_mpp_sync => mpp_sync, &
493                      fms_mpp_sync_self => mpp_sync_self, &
494                      fms_mpp_set_stack_size => mpp_set_stack_size, &
495                      fms_mpp_pe => mpp_pe, &
496                      fms_mpp_npes => mpp_npes, &
497                      fms_mpp_root_pe => mpp_root_pe, &
498                      fms_mpp_set_root_pe => mpp_set_root_pe, &
499                      fms_mpp_declare_pelist => mpp_declare_pelist, &
500                      fms_mpp_get_current_pelist => mpp_get_current_pelist, &
501                      fms_mpp_set_current_pelist => mpp_set_current_pelist, &
502                      fms_mpp_get_current_pelist_name => mpp_get_current_pelist_name, &
503                      fms_mpp_clock_id => mpp_clock_id, &
504                      fms_mpp_clock_set_grain => mpp_clock_set_grain, &
505                      fms_mpp_record_timing_data => mpp_record_timing_data, &
506                      fms_mpp_get_unit => get_unit, &
507                      fms_mpp_read_ascii_file => read_ascii_file, &
508                      fms_mpp_read_input_nml => read_input_nml, &
509                      fms_mpp_clock_begin => mpp_clock_begin, &
510                      fms_mpp_clock_end => mpp_clock_end, &
511                      fms_mpp_get_ascii_file_num_lines => get_ascii_file_num_lines, &
512                      fms_mpp_record_time_start => mpp_record_time_start, &
513                      fms_mpp_record_time_end => mpp_record_time_end, &
514                      fms_mpp_chksum => mpp_chksum, &
515                      fms_mpp_max => mpp_max, &
516                      fms_mpp_min => mpp_min, &
517                      fms_mpp_sum => mpp_sum, &
518                      fms_mpp_transmit => mpp_transmit, &
519                      fms_mpp_send => mpp_send, &
520                      fms_mpp_recv => mpp_recv, &
521                      fms_mpp_sum_ad => mpp_sum_ad, &
522                      fms_mpp_broadcast => mpp_broadcast, &
523                      fms_mpp_init => mpp_init, &
524                      fms_mpp_exit => mpp_exit, &
525                      fms_mpp_gather => mpp_gather, &
526                      fms_mpp_scatter => mpp_scatter, &
527                      fms_mpp_alltoall => mpp_alltoall, &
528                      FmsMpp_type => mpp_type, &
529                      FmsMpp_byte => mpp_byte, &
530                      fms_mpp_type_create => mpp_type_create, &
531                      fms_mpp_type_free => mpp_type_free, &
532                      fms_mpp_input_nml_file => input_nml_file
533   use mpp_parameter_mod,only:MAXPES, MPP_VERBOSE, MPP_DEBUG, ALL_PES, ANY_PE, NULL_PE, &
534                      NOTE, WARNING, FATAL, MPP_WAIT, MPP_READY, MAX_CLOCKS, &
535                      MAX_EVENT_TYPES, MAX_EVENTS, MPP_CLOCK_SYNC, MPP_CLOCK_DETAILED, &
536                      CLOCK_COMPONENT, CLOCK_SUBCOMPONENT, CLOCK_MODULE_DRIVER, &
537                      CLOCK_MODULE, CLOCK_ROUTINE, CLOCK_LOOP, CLOCK_INFRA, MAX_BINS, &
538                      EVENT_ALLREDUCE, EVENT_BROADCAST, EVENT_RECV, EVENT_SEND, EVENT_WAIT, &
539                      EVENT_ALLTOALL, EVENT_TYPE_CREATE, EVENT_TYPE_FREE, &
540                      DEFAULT_TAG, COMM_TAG_1, COMM_TAG_2, COMM_TAG_3, COMM_TAG_4, &
541                      COMM_TAG_5,  COMM_TAG_6,  COMM_TAG_7,  COMM_TAG_8, &
542                      COMM_TAG_9,  COMM_TAG_10, COMM_TAG_11, COMM_TAG_12, &
543                      COMM_TAG_13, COMM_TAG_14, COMM_TAG_15, COMM_TAG_16, &
544                      COMM_TAG_17, COMM_TAG_18, COMM_TAG_19, COMM_TAG_20, &
545                      MPP_FILL_INT, MPP_FILL_FLOAT, MPP_FILL_DOUBLE, &
546                      GLOBAL_DATA_DOMAIN, CYCLIC_GLOBAL_DOMAIN, BGRID_NE, &
547                      BGRID_SW, CGRID_NE, CGRID_SW, DGRID_NE, DGRID_SW, &
548                      FOLD_WEST_EDGE, FOLD_EAST_EDGE, FOLD_SOUTH_EDGE, &
549                      FOLD_NORTH_EDGE, WUPDATE, EUPDATE, SUPDATE, NUPDATE, &
550                      XUPDATE, YUPDATE, BITWISE_EXACT_SUM, NON_BITWISE_EXACT_SUM, &
551                      MPP_DOMAIN_TIME, WEST, EAST, SOUTH, NORTH, SCALAR_BIT, SCALAR_PAIR, &
552                      BITWISE_EFP_SUM, NORTH_EAST, SOUTH_EAST, SOUTH_WEST, NORTH_WEST, &
553                      AGRID, GLOBAL, CYCLIC, DOMAIN_ID_BASE, CENTER, CORNER, &
554                      MAX_DOMAIN_FIELDS, MAX_TILES, ZERO, NINETY, MINUS_NINETY, &
555                      ONE_HUNDRED_EIGHTY, NONBLOCK_UPDATE_TAG, EDGEUPDATE, EDGEONLY, &
556                      NONSYMEDGEUPDATE, NONSYMEDGE
557   ! this should really only be used internally
558   !use mpp_data_mod, only: stat, mpp_stack, ptr_stack, status, ptr_status, sync, &
559   !                   ptr_sync, mpp_from_pe, ptr_from, remote_Data_loc, &
560   !                   ptr_remote, mpp_domains_stack, ptr_domains_stack, &
561   !                   mpp_domains_stack_nonblock, ptr_domains_stack_nonblock
562   use mpp_utilities_mod, only: fms_mpp_utilities_array_global_min_max => mpp_array_global_min_max
563   use mpp_memutils_mod, only: fms_mpp_memutils_print_memuse_stats => mpp_print_memuse_stats, &
564                               fms_mpp_memutils_mem_dump => mpp_mem_dump, &
565                               fms_mpp_memutils_memuse_begin => mpp_memuse_begin, &
566                               fms_mpp_memutils_memuse_end => mpp_memuse_end
567   use mpp_efp_mod, only: fms_mpp_efp_reproducing_sum => mpp_reproducing_sum, &
568                          fms_mpp_efp_list_sum_across_PEs => mpp_efp_list_sum_across_PEs, &
569                          fms_mpp_efp_plus => mpp_efp_plus, &
570                          fms_mpp_efp_minus => mpp_efp_minus, &
571                          fms_mpp_efp_to_real => mpp_efp_to_real, &
572                          fms_mpp_efp_real_to_efp => mpp_real_to_efp, &
573                          fms_mpp_efp_real_diff => mpp_efp_real_diff, &
574                          operator(+), operator(-), assignment(=), &
575                          fms_mpp_efp_query_overflow_error => mpp_query_efp_overflow_error, &
576                          fms_mpp_efp_reset_overflow_error => mpp_reset_efp_overflow_error, &
577                          FmsMppEfp_type => mpp_efp_type
578   use mpp_domains_mod, only: FmsMppDomains_axis_spec => domain_axis_spec, &
579                              FmsMppDomain1D => domain1D, &
580                              FmsMppDomain2D => domain2D, &
581                              FmsMppDomainCommunicator2D => DomainCommunicator2D, &
582                              FmsMppDomainsNestDomain_type => nest_domain_type, &
583                              FmsMppDomainsGroupUpdate_type => mpp_group_update_type, &
584                              fms_mpp_domains_domains_set_stack_size => mpp_domains_set_stack_size, &
585                              fms_mpp_domains_get_compute_domain => mpp_get_compute_domain, &
586                              fms_mpp_domains_get_compute_domains => mpp_get_compute_domains, &
587                              fms_mpp_domains_get_data_domain => mpp_get_data_domain, &
588                              fms_mpp_domains_get_global_domain => mpp_get_global_domain, &
589                              fms_mpp_domains_get_domain_components => mpp_get_domain_components, &
590                              fms_mpp_domains_get_layout => mpp_get_layout, &
591                              fms_mpp_domains_get_pelist => mpp_get_pelist, &
592                              operator(.EQ.), operator(.NE.), &
593                              fms_mpp_domains_domain_is_symmetry => mpp_domain_is_symmetry, &
594                              fms_mpp_domains_domain_is_initialized => mpp_domain_is_initialized, &
595                              fms_mpp_domains_get_neighbor_pe => mpp_get_neighbor_pe, &
596                              fms_mpp_domains_nullify_domain_list => mpp_nullify_domain_list, &
597                              fms_mpp_domains_set_compute_domain => mpp_set_compute_domain, &
598                              fms_mpp_domains_set_data_domain => mpp_set_data_domain, &
599                              fms_mpp_domains_set_global_domain => mpp_set_global_domain, &
600                              fms_mpp_domains_get_memory_domain => mpp_get_memory_domain, &
601                              fms_mpp_domains_get_domain_shift => mpp_get_domain_shift, &
602                              fms_mpp_domains_domain_is_tile_root_pe => mpp_domain_is_tile_root_pe, &
603                              fms_mpp_domains_get_tile_id => mpp_get_tile_id, &
604                              fms_mpp_domains_get_domain_extents => mpp_get_domain_extents, &
605                              fms_mpp_domains_get_current_ntile => mpp_get_current_ntile, &
606                              fms_mpp_domains_get_ntile_count => mpp_get_ntile_count, &
607                              fms_mpp_domains_get_tile_list => mpp_get_tile_list, &
608                              fms_mpp_domains_get_tile_npes => mpp_get_tile_npes, &
609                              fms_mpp_domains_get_domain_root_pe => mpp_get_domain_root_pe, &
610                              fms_mpp_domains_get_tile_pelist => mpp_get_tile_pelist, &
611                              fms_mpp_domains_get_tile_compute_domains => mpp_get_tile_compute_domains, &
612                              fms_mpp_domains_get_num_overlap => mpp_get_num_overlap, &
613                              fms_mpp_domains_get_overlap => mpp_get_overlap, &
614                              fms_mpp_domains_get_io_domain => mpp_get_io_domain, &
615                              fms_mpp_domains_get_domain_pe => mpp_get_domain_pe, &
616                              fms_mpp_domains_get_domain_tile_root_pe => mpp_get_domain_tile_root_pe, &
617                              fms_mpp_domains_get_domain_name => mpp_get_domain_name, &
618                              fms_mpp_domains_get_io_domain_layout => mpp_get_io_domain_layout, &
619                              fms_mpp_domains_copy_domain => mpp_copy_domain, &
620                              fms_mpp_domains_set_domain_symmetry => mpp_set_domain_symmetry, &
621                              fms_mpp_domains_get_update_pelist => mpp_get_update_pelist, &
622                              fms_mpp_domains_get_update_size => mpp_get_update_size, &
623                              fms_mpp_domains_get_domain_npes => mpp_get_domain_npes, &
624                              fms_mpp_domains_get_domain_pelist => mpp_get_domain_pelist, &
625                              fms_mpp_domains_clear_group_update => mpp_clear_group_update, &
626                              fms_mpp_domains_group_update_initialized => mpp_group_update_initialized, &
627                              fms_mpp_domains_group_update_is_set => mpp_group_update_is_set, &
628                              fms_mpp_domains_get_global_domains => mpp_get_global_domains, &
629                              fms_mpp_domains_global_field => mpp_global_field, &
630                              fms_mpp_domains_global_max => mpp_global_max, &
631                              fms_mpp_domains_global_min => mpp_global_min, &
632                              fms_mpp_domains_global_sum => mpp_global_sum, &
633                              fms_mpp_domains_global_sum_tl => mpp_global_sum_tl, &
634                              fms_mpp_domains_global_sum_ad => mpp_global_sum_ad, &
635                              fms_mpp_domains_broadcast_domain => mpp_broadcast_domain, &
636                              fms_mpp_domains_init => mpp_domains_init, &
637                              fms_mpp_domains_exit => mpp_domains_exit, &
638                              fms_mpp_domains_redistribute => mpp_redistribute, &
639                              fms_mpp_domains_update_domains => mpp_update_domains, &
640                              fms_mpp_domains_check_field => mpp_check_field, &
641                              fms_mpp_domains_start_update_domains => mpp_start_update_domains, &
642                              fms_mpp_domains_complete_update_domains => mpp_complete_update_domains, &
643                              fms_mpp_domains_create_group_update => mpp_create_group_update, &
644                              fms_mpp_domains_do_group_update => mpp_do_group_update, &
645                              fms_mpp_domains_start_group_update => mpp_start_group_update, &
646                              fms_mpp_domains_complete_group_update => mpp_complete_group_update, &
647                              fms_mpp_domains_reset_group_update_field => mpp_reset_group_update_field, &
648                              fms_mpp_domains_update_nest_fine => mpp_update_nest_fine, &
649                              fms_mpp_domains_update_nest_coarse => mpp_update_nest_coarse, &
650                              fms_mpp_domains_get_boundary => mpp_get_boundary, &
651                              fms_mpp_domains_update_domains_ad => mpp_update_domains_ad, &
652                              fms_mpp_domains_get_boundary_ad => mpp_get_boundary_ad, &
653                              fms_mpp_domains_pass_SG_to_UG => mpp_pass_SG_to_UG, &
654                              fms_mpp_domains_pass_UG_to_SG => mpp_pass_UG_to_SG, &
655                              fms_mpp_domains_define_layout => mpp_define_layout, &
656                              fms_mpp_domains_define_domains => mpp_define_domains, &
657                              fms_mpp_domains_modify_domain => mpp_modify_domain, &
658                              fms_mpp_domains_define_mosaic => mpp_define_mosaic, &
659                              fms_mpp_domains_define_mosaic_pelist => mpp_define_mosaic_pelist, &
660                              fms_mpp_domains_define_null_domain => mpp_define_null_domain, &
661                              fms_mpp_domains_mosaic_defined => mpp_mosaic_defined, &
662                              fms_mpp_domains_define_io_domain => mpp_define_io_domain, &
663                              fms_mpp_domains_deallocate_domain => mpp_deallocate_domain, &
664                              fms_mpp_domains_compute_extent => mpp_compute_extent, &
665                              fms_mpp_domains_compute_block_extent => mpp_compute_block_extent, &
666                              fms_mpp_domains_define_unstruct_domain => mpp_define_unstruct_domain, &
667                              fmsMppDomainUG => domainUG, &
668                              fms_mpp_domains_get_UG_io_domain => mpp_get_UG_io_domain, &
669                              fms_mpp_domains_get_UG_domain_npes => mpp_get_UG_domain_npes, &
670                              fms_mpp_domains_get_UG_compute_domain => mpp_get_UG_compute_domain, &
671                              fms_mpp_domains_get_UG_domain_tile_id => mpp_get_UG_domain_tile_id, &
672                              fms_mpp_domains_get_UG_domain_pelist => mpp_get_UG_domain_pelist, &
673                              fms_mpp_domains_get_ug_domain_grid_index => mpp_get_ug_domain_grid_index, &
674                              fms_mpp_domains_get_UG_domain_ntiles => mpp_get_UG_domain_ntiles, &
675                              fms_mpp_domains_get_UG_global_domain => mpp_get_UG_global_domain, &
676                              fms_mpp_domains_global_field_ug => mpp_global_field_ug, &
677                              fms_mpp_domains_get_ug_domain_tile_list => mpp_get_ug_domain_tile_list, &
678                              fms_mpp_domains_get_UG_compute_domains => mpp_get_UG_compute_domains, &
679                              fms_mpp_domains_define_null_UG_domain => mpp_define_null_UG_domain, &
680                              fms_mpp_domains_NULL_DOMAINUG => NULL_DOMAINUG, &
681                              fms_mpp_domains_get_UG_domains_index => mpp_get_UG_domains_index, &
682                              fms_mpp_domains_get_UG_SG_domain => mpp_get_UG_SG_domain, &
683                              fms_mpp_domains_get_UG_domain_tile_pe_inf => mpp_get_UG_domain_tile_pe_inf, &
684                              fms_mpp_domains_define_nest_domains => mpp_define_nest_domains, &
685                              fms_mpp_domains_get_C2F_index => mpp_get_C2F_index, &
686                              fms_mpp_domains_get_F2C_index => mpp_get_F2C_index, &
687                              fms_mpp_domains_get_nest_coarse_domain => mpp_get_nest_coarse_domain, &
688                              fms_mpp_domains_get_nest_fine_domain => mpp_get_nest_fine_domain, &
689                              fms_mpp_domains_is_nest_coarse => mpp_is_nest_coarse, &
690                              fms_mpp_domains_is_nest_fine => mpp_is_nest_fine, &
691                              fms_mpp_domains_get_nest_pelist => mpp_get_nest_pelist, &
692                              fms_mpp_domains_get_nest_npes => mpp_get_nest_npes, &
693                              fms_mpp_domains_get_nest_fine_pelist => mpp_get_nest_fine_pelist, &
694                              fms_mpp_domains_get_nest_fine_npes => mpp_get_nest_fine_npes, &
695                              fms_mpp_domains_domain_UG_is_tile_root_pe => mpp_domain_UG_is_tile_root_pe, &
696                              fms_mpp_domains_deallocate_domainUG => mpp_deallocate_domainUG, &
697                              fms_mpp_domains_get_io_domain_UG_layout => mpp_get_io_domain_UG_layout, &
698                              NULL_DOMAIN1D, &
699                              NULL_DOMAIN2D, &
700                              fms_mpp_domains_create_super_grid_domain => mpp_create_super_grid_domain, &
701                              fms_mpp_domains_shift_nest_domains => mpp_shift_nest_domains
702   !> parser
703 #ifdef use_yaml
704   use yaml_parser_mod, only: fms_yaml_parser_open_and_parse_file => open_and_parse_file, &
705                              fms_yaml_parser_get_num_blocks => get_num_blocks, &
706                              fms_yaml_parser_get_block_ids => get_block_ids, &
707                              fms_yaml_parser_get_value_from_key => get_value_from_key, &
708                              fms_yaml_parser_get_nkeys => get_nkeys, &
709                              fms_yaml_parser_get_key_ids => get_key_ids, &
710                              fms_yaml_parser_get_key_name => get_key_name, &
711                              fms_yaml_parser_get_key_value => get_key_value
712 #endif
714   !> platform
715   use platform_mod, only: r8_kind, r4_kind, i8_kind, i4_kind, c8_kind, c4_kind, &
716                           l8_kind, l4_kind, i2_kind, ptr_kind
718   !> random_numbers
719   use random_numbers_mod, only: fms_random_numbers_randomNumberStream => randomNumberStream, &
720                                 fms_random_numbers_initializeRandomNumbersStream => initializeRandomNumberStream, &
721                                 fms_random_numbers_getRandomNumbers => getRandomNumbers, &
722                                 fms_random_numbers_constructSeed => constructSeed
724   !> sat_vapor_pres
725   use sat_vapor_pres_mod, only: fms_sat_vapor_pres_lookup_es => lookup_es, &
726                                 fms_sat_vapor_pres_lookup_des => lookup_des, &
727                                 fms_sat_vapor_pres_init => sat_vapor_pres_init, &
728                                 fms_sat_vapor_pres_lookup_es2 => lookup_es2, &
729                                 fms_sat_vapor_pres_lookup_des2 => lookup_des2, &
730                                 fms_sat_vapor_pres_lookup_es2_des2 => lookup_es2_des2, &
731                                 fms_sat_vapor_pres_lookup_es3 => lookup_es3, &
732                                 fms_sat_vapor_pres_lookup_des3 => lookup_des3, &
733                                 fms_sat_vapor_pres_lookup_es3_des3 => lookup_es3_des3, &
734                                 fms_sat_vapor_pres_lookup_es_des => lookup_es_des, &
735                                 fms_sat_vapor_pres_compute_qs => compute_qs, &
736                                 fms_sat_vapor_pres_compute_mrs => compute_mrs, &
737                                 fms_sat_vapor_pres_escomp => escomp, &
738                                 fms_sat_vapor_pres_descomp => descomp
739   !> string_utils
740   use fms_string_utils_mod, only: fms_string_utils_string => string, &
741                                   fms_string_utils_array_to_pointer => fms_array_to_pointer, &
742                                   fms_string_utils_fms_pointer_to_array => fms_pointer_to_array, &
743                                   fms_string_utils_sort_this => fms_sort_this, &
744                                   fms_string_utils_find_my_string => fms_find_my_string, &
745                                   fms_string_utils_find_unique => fms_find_unique, &
746                                   fms_string_utils_c2f_string => fms_c2f_string, &
747                                   fms_string_utils_cstring2cpointer => fms_cstring2cpointer, &
748                                   fms_string_utils_copy => string_copy
750   !> time_interp
751   use time_interp_mod, only: fms_time_interp_init => time_interp_init, &
752                              fms_time_interp => time_interp, fms_fraction_of_year=> fraction_of_year, &
753                              NONE, YEAR, MONTH, DAY
754   use time_interp_external2_mod, only: fms_time_interp_external_init_external_field => init_external_field, &
755                              fms_time_interp_external => time_interp_external, &
756                              fms_time_interp_external_init => time_interp_external_init, &
757                              fms_time_interp_external_exit => time_interp_external_exit, &
758                              fms_time_interp_external_get_external_field_size => get_external_field_size, &
759                              fms_time_interp_external_get_time_axis => get_time_axis, &
760                              fms_time_interp_external_get_external_field_missing => get_external_field_missing, &
761                              fms_time_interp_external_set_override_region => set_override_region, &
762                              fms_time_interp_external_reset_src_data_region => reset_src_data_region, &
763                              fms_time_interp_external_get_external_fileobj => get_external_fileobj, &
764                              NO_REGION, INSIDE_REGION, OUTSIDE_REGION, &
765                              SUCCESS, ERR_FIELD_NOT_FOUND
767   !> time_manager
768   use time_manager_mod, only: FmsTime_type => time_type, &
769                               operator(+), operator(-), operator(*), assignment(=),&
770                               operator(/), operator(>), operator(>=), operator(==), &
771                               operator(/=), operator(<), operator(<=), operator(//), &
772                               fms_time_manager_set_time => set_time, &
773                               fms_time_manager_increment_time => increment_time, &
774                               fms_time_manager_decrement_time => decrement_time, &
775                               fms_time_manager_get_time => get_time, &
776                               fms_time_manager_interval_alarm => interval_alarm, &
777                               fms_time_manager_repeat_alarm => repeat_alarm, &
778                               fms_time_manager_time_type_to_real => time_type_to_real, &
779                               fms_time_manager_real_to_time_type => real_to_time_type, &
780                               fms_time_manager_time_list_error => time_list_error, &
781                               THIRTY_DAY_MONTHS, JULIAN, GREGORIAN, NOLEAP, NO_CALENDAR, INVALID_CALENDAR, &
782                               fms_time_manager_set_calendar_type => set_calendar_type, &
783                               fms_time_manager_get_calendar_type => get_calendar_type, &
784                               fms_time_manager_set_ticks_per_second => set_ticks_per_second, &
785                               fms_time_manager_get_ticks_per_second => get_ticks_per_second, &
786                               fms_time_manager_set_date => set_date, &
787                               fms_time_manager_get_date => get_date, &
788                               fms_time_manager_increment_date => increment_date, &
789                               fms_time_manager_decrement_date => decrement_date, &
790                               fms_time_manager_days_in_month => days_in_month, &
791                               fms_time_manager_leap_year => leap_year, &
792                               fms_time_manager_length_of_year => length_of_year, &
793                               fms_time_manager_days_in_year => days_in_year, &
794                               fms_time_manager_day_of_year => day_of_year, &
795                               fms_time_manager_month_name => month_name, &
796                               fms_time_manager_valid_calendar_types => valid_calendar_types, &
797                               fms_time_manager_init => time_manager_init, &
798                               fms_time_manager_print_time => print_time, &
799                               fms_time_manager_print_date => print_date, &
800                               fms_time_manager_set_date_julian => set_date_julian, &
801                               fms_time_manager_get_date_julian => get_date_julian, &
802                               fms_time_manager_get_date_no_leap => get_date_no_leap, &
803                               fms_time_manager_date_to_string => date_to_string
804   use get_cal_time_mod, only: fms_get_cal_time => get_cal_time
806   !> topography
807   use gaussian_topog_mod, only: fms_gaussian_topog_init => gaussian_topog_init, &
808                                 fms_get_gaussian_topog => get_gaussian_topog
809   use topography_mod, only: fms_topography_init => topography_init, &
810                             fms_topography_get_topog_mean => get_topog_mean, &
811                             fms_topography_get_topog_stdev => get_topog_stdev, &
812                             fms_topography_get_ocean_frac => get_ocean_frac, &
813                             fms_topography_get_ocean_mask => get_ocean_mask, &
814                             fms_topography_get_water_frac => get_water_frac, &
815                             fms_topography_get_water_mask => get_water_mask
817   !> tracer_manager
818   use tracer_manager_mod, only: fms_tracer_manager_init => tracer_manager_init, &
819                                 fms_tracer_manager_end => tracer_manager_end, &
820                                 fms_tracer_manager_check_if_prognostic => check_if_prognostic, &
821                                 fms_tracer_manager_get_tracer_indices => get_tracer_indices, &
822                                 fms_tracer_manager_get_tracer_index => get_tracer_index, &
823                                 fms_tracer_manager_get_tracer_names => get_tracer_names, &
824                                 fms_tracer_manager_get_tracer_name => get_tracer_name, &
825                                 fms_tracer_manager_query_method => query_method, &
826                                 fms_tracer_manager_set_tracer_atts => set_tracer_atts, &
827                                 fms_tracer_manager_set_tracer_profile => set_tracer_profile, &
828                                 fms_tracer_manager_register_tracers => register_tracers, &
829                                 fms_tracer_manager_get_number_tracers => get_number_tracers, &
830                                 fms_tracer_manager_adjust_mass => adjust_mass, &
831                                 fms_tracer_manager_adjust_positive_def => adjust_positive_def, &
832                                 NO_TRACER, MAX_TRACER_FIELDS
834   !> tridiagonal
835   use tridiagonal_mod, only: fms_tridiagonal_tri_invert => tri_invert, &
836                              fms_tridiagonal_close_tridiagonal => close_tridiagonal
838   implicit none
840 #include <file_version.h>
841   character(len=*), parameter, public :: version_FMS = version
842   private :: version
844 end module fms
845 !> @}
846 ! close documentation grouping