Releases: NOAA-GFDL/FMS
2024.03
[2024.03] - 2024-08-22
Known Issues
- Diag Manager Rewrite: See the previous releases for known output file differences regarding the new diag manager. The new diag_manager is disabled by default, so these differences will only be present if
use_modern_diag
is set to true in thediag_manager_nml
. - BUILD(HDF5): HDF5 version 1.14.3 generates floating point exceptions, and will cause errors if FMS is built with FPE traps enabled. FPE traps are turned on when using the debug target in mkmf.
- GCC: version 14.1.0 is unsupported due to a bug with strings that has come up previously in earlier versions. This will be caught by the configure script, but will cause compilation errors if using other build systems.
- INTEL: The
-check uninit
flag for the Intel Oneapi Fortran compiler (ifx) is unsupported due to a bug causing false positives when using external libraries. If using the-check all
flag,-check all,nouninit
should be used instead.
Added
- DATA_OVERRIDE: Adds a namelist flag
use_center_grid_points
which, if true, enables reading the centroid values from the grid spec for ocean and ice models. This fixes issues with grid files that have longitudes ranges from 0:180 and then -180:0, but will cause answer changes if enabled. (#1566) - DATA_OVERRIDE: Adds support for reading external weight files. Currently only supported for fregrid generated files while using the bilinear interpolation method. Documentation for this feature can be found in
data_override/README.md
. (#1556) - PLATFORM: Adds two constants
FMS_PATH_LEN
andFMS_FILE_LEN
and uses it across the code for any file path or file name character strings. They default to 1024 and 255 but can also be set by theFMS_MAX_PATH_LEN
andFMS_MAX_FILE_LEN
CPP macros. (#1567) - CMAKE: Adds Cmake option to support building shared libraries (#1559)
Changed
- DIAG_MANAGER: Simplifies the diag_table.yaml format by allowing
module
,reduction
, andkind
to be set on a file level, with the ability to override for a specific field. (#1545) - FIELD_MANAGER: Updated and refactored the
fm_yaml_mod
module for a new table format to remove thesubparams
key. (#1547) - DATA_OVERRIDE: Updates the yaml format to be improve readablity and to be more consistent in key names. Additional documentation for the new format can be found in
data_override/README.md
. (#1556)
Fixed
- PARSER: Adds error code checks to the yaml parser to prevent code from hanging on invalid yamls (#1563)
- PARSER: Adds ability to read in generic blocks to support
field_manager
updates. (#1519) - CRAY COMPILER SUPPORT: Updated any multi-line string literals to be compatible with the cray compiler. (#1554)
Removed
- DIAG_MANAGER: Removed diag_table schemas from FMS and moved them to the
gfdl_msd_schemas
repository, and updates thediag_manager
documentation markdowns. (#1543)
Tag Commit Hashes
- 2024.03-beta1 a5de6a5
2024.02
[2024.02] - 2024-07-11
Known Issues
- Diag Manager Rewrite: See 2024.01.02 for known output file differences regarding the new diag manager. The new diag_manager is disabled by default, so these differences will only be present if
use_modern_diag
is set to true in thediag_manager_nml
. - BUILD(HDF5): HDF5 version 1.14.3 generates floating point exceptions, and will cause errors if FMS is built with FPE traps enabled. FPE traps are turned on when using the debug target in mkmf.
- GCC: version 14.1.0 is unsupported due to a bug with strings that has come up previously in earlier versions. This will be caught by the configure script, but will cause compilation errors if using other build systems.
Added
- TIME_INTERP: Enables use of
verbose
option intime_interp_external2
calls fromdata_override
. The option is enabled indata_override_nml
by settingdebug_data_override
to true. (#1516) - COUPLER: Adds optional argument to
coupler_types_send_data
routine that contains the return statuses for any calls made to the diag_manager'ssend_data
routine. (#1530) - MPP: Adds a separate error log file
warnfile.<root pe num>.out
that only holds output from anympp_error
calls made during a run (#1544)
Changed
- DIAG_MANAGER: The
diag_field_log.out
output file of all registered fields will now include the PE number of the root PE at the time of writing (ie. diag_field_log.out.0). This is to prevent overwritting the file in cases where the root PE may change. (#1497)
Fixed
- CMAKE: Fixes real kind flags being overwritten when using the Debug release type (#1532)
- HORIZ_INTERP: Fixes allocation issues when using method-specific horiz_interp_new routines (such as
horiz_interp_bilinear_new
) by settingis_allocated
and themethod_type
during initialization for each method. (#1538)
Tag Commit Hashes
2024.01.02
[2024.01.02] - 2024-06-14
Known Issues
-
Diag Manager Rewrite:
- Expected output file changes:
- If the model run time is less than the output frequency, old diag_manager would write a specific value (9.96921e+36). The new diag_manager will not, so only fill values will be present.
- A
scalar_axis
dimension will not be added to scalar variables - The
average_*
variables will no longer be added as they are non-standard conventions - Attributes added via
diag_field_add_attributes
in the old code were saved asNF90_FLOAT
regardless of precision, but will now be written as the precision that is passed in - Subregional output will have a global attribute
is_subregional = True
set for non-global history files. - The
grid_type
andgrid_tile
global attributes will no longer be added for all files, and some differences may be seen in the exact order of theassociated_files
attribute
- Expected output file changes:
-
DIAG_MANAGER: When using the
do_diag_field_log
nml option, the output log file may be ovewritten if using a multiple root pe's -
BUILD(HDF5): HDF5 version 1.14.3 generates floating point exceptions, and will cause errors if FMS is built with FPE traps enabled.
-
GCC: version 14.1.0 is unsupported due to a bug with strings that has come up previously in earlier versions. This will be caught by the configure script, but will cause compilation errors if using other build systems.
Fixed
- DIAG_MANAGER: Fixes incorrect dates being appended to static file names
2024.01.01
[2024.01.01] - 2024-05-30
Known Issues
-
Diag Manager Rewrite:
- Expected output file changes:
- If the model run time is less than the output frequency, old diag_manager would write a specific value (9.96921e+36). The new diag_manager will not, so only fill values will be present.
- A
scalar_axis
dimension will not be added to scalar variables - The
average_*
variables will no longer be added as they are non-standard conventions - Attributes added via
diag_field_add_attributes
in the old code were saved asNF90_FLOAT
regardless of precision, but will now be written as the precision that is passed in - Subregional output will have a global attribute
is_subregional = True
set for non-global history files. - The
grid_type
andgrid_tile
global attributes will no longer be added for all files, and some differences may be seen in the exact order of theassociated_files
attribute
- Expected output file changes:
-
DIAG_MANAGER: When using the
do_diag_field_log
nml option, the output log file may be ovewritten if using a multiple root pe's -
BUILD(HDF5): HDF5 version 1.14.3 generates floating point exceptions, and will cause errors if FMS is built with FPE traps enabled.
-
GCC: version 14.1.0 is unsupported due to a bug with strings that has come up previously in earlier versions. This will be caught by the configure script, but will cause compilation errors if using other build systems.
Added
- DIAG_MANAGER: Implements
flush_nc_files
functionality from legacy diag_manager.
Changed
- FMS2_IO: Changed
register_unlimited_compressed_axis
to use a collective gather rather than send and recieves to improve efficiency when reading in iceberg restarts.
Fixed
- DIAG_MANAGER: Fixes 0 day output frequencies causing error stating a time_step was skipped. Also adds checks to crash if averaged fields have -1 or 0 day frequencies or if mixing averaged and non-averaged fields in the same file.
- DIAG_MANAGER: Fixes issue with the weight argument not getting passed through to reduction methods.
- DIAG_MANAGER: Allocation errors when using two empty files.
- DIAG_MANAGER:
time
andtime_bnds
being larger than expected when running for 1 day and using daily data. - DIAG_MANAGER: Allows for mixing static and non-static fields when frequency is 0 days.
- TESTS: Fixes compile failure with ifort 2024.01 from test_mpp_gatscat.F90.
Removed
- DIAG_MANAGER: The
mix_snapshot_average_fields
option is deprecated for the rewritten diag_manager only.
Tag Commit Hashes
2024.01
[2024.01] - 2024-05-03
Known Issues
-
GCC: version 14.1.0 is unsupported due to a bug with strings that has come up previously in earlier versions. This will be caught by the configure script, but will cause compilation errors if using other build systems.
-
Diag Manager Rewrite:
- If two empty files are present in the diag_table.yaml file the code will crash with a allocation error (#1506)
- Setting an output frequency of '0 days' does not work as expected and may cause an error stating a time_step has been skipped (#1502)
- The
flush_nc_files
andmix_snapshot_average_fields
nml options are not yet functional. Themix_snapshot_average_fields
option is planned to be deprecated (for the rewritten diag_manager only). - Expected output file changes:
- If the model run time is less than the output frequency, old diag_manager would write a specific value (9.96921e+36). The new diag_manager will not, so only fill values will be present.
- A
scalar_axis
dimension will not be added to scalar variables - The
average_*
variables will no longer be added as they are non-standard conventions - Attributes added via
diag_field_add_attributes
in the old code were saved asNF90_FLOAT
regardless of precision, but will now be written as the precision that is passed in - Subregional output will have a global attribute
is_subregional = True
set for non-global history files. - The
grid_type
andgrid_tile
global attributes will no longer be added for all files, and some differences may be seen in the exact order of theassociated_files
attribute
-
DIAG_MANAGER: When using the
do_diag_field_log
nml option, the output log file may be ovewritten if using a multiple root pe's -
TESTS:
test_mpp_gatscat.F90
fails to compile with the Intel Oneapi 2024.01's version of ifort -
BUILD(HDF5): HDF5 version 1.14.3 generates floating point exceptions, and will cause errors if FMS is built with FPE traps enabled.
Added
- DIAG_MANAGER: The diag manager has been rewritten with a object oriented design. The old diag_manager code has been kept intact and will be used by default. The rewritten diag manager can be enabled via
use_modern_diag = .true.
to yourdiag_manager_nml
. The new diag manager also requires a call todiag_send_complete
aftersend_data
calls. New features include:- Self-describing YAML formatting for diag_tables
- Allows 4d variables
- Support defining subregions with indices
- More flexibility when adding metadata and defining output frequency
- Updated math and buffer handling for better support when send_data is called in a threaded region
- FMS2_IO: Adds support for collective parallel reads to improve model startup time. The collective reads are disabled by default and enabled via the
use_collective
flag innetcdf_io_mod
. - DATA_OVERRIDE: Adds multifile support for using 3 input netcdf files instead of one. Three keys have been added to the data_table:
is_multi_file
to be set to true to enable the feature, as well asprev_file_name
andnext_file_name
to set to the names of the additional files. (#1408) - INTERPOLATOR: Adds support for yearly/annual data
- DATA_OVERRIDE: Adds support for monotonically increasing/decreasing arrays (#1388)
- DOCS: Add documentation for the exchange grid (xgrid_mod) and update the contribution guide to add a section on code reviews
- MPP: MPI sub-communicators for domains are now accessible via
mpp_get_domain_tile_commid
andmpp_get_domain_commid
inmpp_domains_mod
Changed
- DATA_OVERRIDE: Changes behavior to crash if both data_table and data_table.yaml are present and adds error checking when reading in yaml files
- FIELD_MANAGER: Changes behavior to crash if both field_table and field_table.yaml are present as well as adds a namelist flag (
use_field_table_yaml
) to enable support for the yaml input.
Fixed
- DATA_OVERRIDE: Fixes allocation error with scalar routine and replaces pointers with allocatables
- INTERPOLATOR: Increase max string size for file paths
- AXIS_UTILS: Improves performance of
nearest_index
routine - CMAKE: Fixes macOS linking issues with OpenMP
Tag Commit Hashes
2023.04
[2023.04] - 2023-12-04
Known Issues
- GCC 9 and below as well as GCC 11.1.0 are unsupported due to compilation issues. See prior releases for more details.
NO_QUAD_PRECISION
macro is no longer set by FMS, theENABLE_QUAD_PRECISION
macro has replaced prior usage ofNO_QUAD_PRECISION
.-DENABLE_QUAD_PRECISION
should be set if quad precision is to be used, otherwise FMS will not use quad precision reals where applicable.
Added
- DATA_OVERRIDE: A new namelist flag
use_data_table_yaml
has been added to enable usage of the yaml format data_override tables. This allows an executable built with yaml support be able to accept either format.
Changed
- RESERVED KEYWORD CHANGES: Various routines in FMS have been updated to not use fortran keywords for variable names. The names changed were:
data
,unit
, andvalue
. This may affect usage of external code if argument names are explicitly used. Only required arguement names were changed to mitigate any breaking changes. - TESTS: Changes the testing scripts to allow for the
MPI_LAUNCHER
environment variable override to work with any provided arguments.
Fixed
- CMAKE: Fixed build issue with CMake where precision default flags were being overwritten when using GNU and MPICH.
- AUTOTOOLS: Fixes issue affecting installs where the global libFMS.F90 module was not being installed correctly and adds post-install message.
- DIAG_MANAGER: Fixes issue with incorrect start_time functionality (from the 2023.02.01 patch)
Tag Commit Hashes
- 2023.04-beta1 be1856c
2023.03
[2023.03] - 2023-10-27
Known Issues
- GCC 9 and below as well as GCC 11.1.0 are unsupported due to compilation issues. See prior releases for more details.
NO_QUAD_PRECISION
macro is no longer set by FMS, theENABLE_QUAD_PRECISION
macro has replaced prior usage ofNO_QUAD_PRECISION
.-DENABLE_QUAD_PRECISION
should be set if quad precision is to be used, otherwise FMS will not use quad precision reals where applicable.
Added
- UNIT_TESTS: New unit tests have been created or and existing ones expanded on for any modules utilizing mixed precision support.
Changed
- MIXED PRECISION: Most subroutines and functions in FMS have been updated to simultaneously accept both 4 byte and 8 byte reals as arguments. This deprecates the
--enable-mixed-mode
option, which enabled similar functionality but was limited to certain directories and was not enabled by default. To facilitate easier testing of these code changes, the CMake precision options for default real size were left in (along with an equivalent--disable-r8-default
flag for autotools). The resulting libraries will support mixed-precision real kinds regardless of default real size. It should also be noted that many routines that accept real arguments have been moved to include files along with headers in order to be compiled with both kinds. Most module level variables were explicitly declared as r8_kind for these updates. - Some type/module changes were made to facilitate mixed precision support. They are intended to have minimal impact to other codebases:
- COUPLER_TYPES: In coupler_types.F90,
coupler_nd_field_type
andcoupler_nd_values_type
have been renamed to indicate real kind value:coupler_nd_real4/8_field_type
andcoupler_nd_real4/8_values_type
. Thebc
field withincoupler_nd_bc_type
was modified to use r8_kind within the value and field types, and an additional field addedbc_r4
to use r4_kind values. - TRIDIAGONAL: Module state between r4 and r8 calls are distinct (ie. subsequent calls will only be affected by calls of the same precision). This behaviour can be changed via the
save_both_kinds
optional argument totri_invert
.
- COUPLER_TYPES: In coupler_types.F90,
- CODE_STYLE: has been updated to reflect the formatting used for the mixed precision support updates.
Fixed
- DIAG_MANAGER: Tile number (ie. tileX) will now be added to filenames for sub-regional diagnostics.
- MPP: Bug affecting non-intel compilers coming from uninitialized pointer in the
nest_domain_type
- MPP: Bug fix for unallocated field causing seg faults in
mpp_check_field
- FMS2_IO: Fixed segfault occuring from use of cray pointer remapping along with mpp_scatter/gather
- TEST_FMS: Added various fixes for different compilers within test programs for fms2_io, mpp, diag_manager, parser, and sat_vapor_pres.
- INTERPOLATOR: Deallocates fields in the type that were previously left out in
interpolator_end
Removed
- CPP MACROS:
no_4byte_reals
was removed and will not set any additional macros if used.no_8byte_integers
is still functional.NO_QUAD_PRECISION
was removed. It was conditionally set if ENABLE_QUAD_PRECISION was undefined. ENABLE_QUAD_PRECISION should be used in model components instead (logic is flipped)use_netCDF
was set by autotools previously but wasn't consistently used in the code. FMS should always be compiled with netcdf installed so this was removed with the exception of its use in deprecated IO modules.
- DRIFTERS: The drifters subdirectory has been deprecated. It will only be compiled if using the
-Duse_drifters
CPP flag.
Tag Commit Hashes
2023.02.01
[2023.02.01] - 2023-10-13
Fixed
- DIAG_MANAGER: Fixes issue with incorrect start_time functionality
2023.02
[2023.02] - 2023-07-28
Known Issues
- GCC 11.1.0 is unsupported due to compilation issues with select type. The issue is resolved in later GCC releases.
- When outputting sub-region diagnostics, the current diag_manager does not add "tileX" to the filename when using a cube sphere. This leads to trouble when trying to combine the files and regrid them (if the region is in two different tiles)
- GCC 10 and greater causing io issues when compiled using O2 optimization flags
- GNU compilers prior to the GCC 9.0 release are unsupported for this release due to lack of support for the findloc intrinsic function. This will result in an error saying 'findloc' has no IMPLICIT type and can be resolved by compiling with gcc version 9.0 or greater.
Added
- MPP/EXCHANGE: Adds association checks before pointer deallocations in mpp includes and xgrid
Changed
- LIBFMS: The libFMS.F90 file (module name
fms
) meant to provide global access has been updated to include 'fms' and it's module/subdirectory name as prefixes for all names. This will only affect external codes that are already using the global module (viause fms
) and not individual modules. - MIXED PRECISION: Updates the axis_utils2, horiz_interp, sat_vapor_pressure, and axis_utils subdirectories to support mixed precision real values.
- FMS2_IO: Added in mpp_scatter and mpp_gather performance changes from the 2023.01.01 patch. See 2023.01.01 release notes for more details.
- FMS2_IO: Improved error messages to give more debugging information
- FMS_MOD: Changed fms_init to include a system call to set the stack size to unlimited, removed previously added stack size fixes
- MONIN_OBUKHOV: Restructures the subroutines in
stable_mix
interface so that 1d calls the underlying implementation, and 2 and 3d call it on 1d slices of the data as opposed to passing in mismatched arrays. - MPP: Updates from JEDI for ajoint version the mpp halo filling (mpp_do_update_ad.fh), adds checkpoint for forward buffer information.
Fixed
- MPP: mpp_broadcast causing an unintended error message due to checking the wrong pe value
- MPP: Added workaround for GCC 12 issues causing errors with string lengths in fms2_io
- FMS2_IO: Fixed support for 'packed' data when using NF_SHORT variables. Scale_factor and add_offset attributes will now be applied if present.
- DOCS: Improved doxygen comments for tranlon, updated deployment action for site
- TESTS: Workaround added for ICE coming from mpp_alltoall test with intel 2022.3, and fixes for any test scripts missing input.nml creation. Fixes for mpp/test_global_array failures.
- TIME_INTERP: Fixes crashes when calling with a non-existant field
- DIAG_MANAGER: Fixes a module dependency issue causing failures during parallel builds
- AXIS_UTILS2: Fixes an out of bounds memory index
Removed
- FMS_IO/MPP_IO: The two older io modules, fms_io_mod and mpp_io_mod, have been deprecated and will not be compiled by default. If you wish to compile these modules, you must use the -Duse_deprecated_io CPP flag or the --enable-deprecated-io configure option if building with autotools.
Tag Commit Hashes
2023.01.01
[2023.01.01] - 2023-06-06
Known Issues
- GFORTRAN: GNU compilers prior to the GCC 9.0 release are unsupported for this release due to lack of support for the
findloc
intrinsic function. This will result in an error saying'findloc' has no IMPLICIT type
and can be resolved by compiling with gcc version 9.0 or greater.
Changed
-
FMS2_IO: Performance changes for domain_reads_2d and domain_reads_3d:
- Root pe reads the data
- Uses mpp_scatter to send the data to the other pes
- Added unit tests to test all of the domain_read/domain_write interfaces
-
FMS2_IO: Performance changes for compressed_writes_1d/2d/3d
- Uses mpp_gather to get data for write
- Added unit tests to test all of the compressed writes interfaces
- Compressed_writes_4d/5d were unchanged
-
FMS2_IO: Extended mpp_scatter and mpp_gather to work for int8; added a kludge for scatter since the data is assumed to be (x,y,z)