NOAA GFDL FMS Versions Save

GFDL's Flexible Modeling System

2024.01

3 weeks ago

[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 and mix_snapshot_average_fields nml options are not yet functional. The mix_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 as NF90_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 and grid_tile global attributes will no longer be added for all files, and some differences may be seen in the exact order of the associated_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 your diag_manager_nml. The new diag manager also requires a call to diag_send_complete after send_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 in netcdf_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 as prev_file_name and next_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 and mpp_get_domain_commid in mpp_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

  • 2024.01-beta5 d3bab5a84b6a51eddd46ab6fb65eaa532830c6c7
  • 2024.01-beta4 ac363ddfd3075637cecae30ddfbae7a78751197b
  • 2024.01-alpha6 2ace94564a08aec4d7ab7eca0e57c0289e52d5b1
  • 2024.01-alpha5 5ed0bd373cc59a9681052fa837cb83a67169d102
  • 2024.01-alpha4 8dd90d72b58f0de3632dc62920f8adfb996b2265
  • 2024.01-beta3 f71405a075102aef42f5811dc09e239ddd002637
  • 2024.01-beta2 bb6de937f70a08a440f5e63b8553b047c1921509
  • 2024.01-beta1 913f8aaecca374d5e10280056de862d5e4a7a668
  • 2024.01-alpha3 085c6bfc945a6f1c586b842ca6268fca442884d8
  • 2024.01-alpha2 38bfde30e1cb8bf5222410a9c37e71529567bf69
  • 2024.01-alpha1 ac0d086296ea8b9196552463655cb9a848db39fe

2023.04

5 months ago

[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, the ENABLE_QUAD_PRECISION macro has replaced prior usage of NO_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, and value. 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 be1856c45accfe2fb15953c5f51e0d58a8816882

2023.03

7 months ago

[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, the ENABLE_QUAD_PRECISION macro has replaced prior usage of NO_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 and coupler_nd_values_type have been renamed to indicate real kind value: coupler_nd_real4/8_field_type and coupler_nd_real4/8_values_type. The bc field within coupler_nd_bc_type was modified to use r8_kind within the value and field types, and an additional field added bc_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 to tri_invert.
  • 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.03-beta1 06b94a7f574e7794684b8584391744ded68e2989
  • 2023.03-alpha3 b25a7c52a27dfd52edc10bc0ebe12776af0f03df
  • 2023.03-alpha2 9983ce308e62e9f7215b04c227cebd30fd75e784
  • 2023.03-alpha1 a46bd94fd8dd1f6f021501e29179003ff28180ec

2023.02.01

7 months ago

[2023.02.01] - 2023-10-13

Fixed

  • DIAG_MANAGER: Fixes issue with incorrect start_time functionality

2023.02

10 months ago

[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 (via use 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.02-beta1 2be8aa452ad3e5f43e92c38a64f12d1ae6c43fb8
  • 2023.02-alpha3 8c73bd18dc1d580f2ee524c37cf903ff54d40501
  • 2023.02-alpha2 783019fdec89a8db2b26247c2f63d4782e1495c0
  • 2023.02-alpga1 419c66be31f82ebb13a91ea5e837c707eb54473b

2023.01.01

11 months ago

[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)

2023.01

1 year ago

[2023.01] - 2023-04-03

Known Issues

  • If using GCC 10 or higher as well as MPICH, compilation errors will occur unless -fallow-argument-mismatch is included in the Fortran compiler flags(the flag will now be added automatically if building with autotools or CMake).
  • 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)

Added

  • DIAG_MANAGER: Added code refactored as part of larger diag_manager rewrite for the send_data routines. The refactored code is disabled by default and enabled by setting use_refactored_send to true in the diag_manager_nml, and should mirror current behaviour.
  • FMS2_IO: Added the ability to set deflate_level and shuffle netcdf options in fms2_io_nml. Also added functionality for registering dimensions as unlimited compressed.
  • YAML_PARSER: Added support for emitting multiple tabbed section keys to allow diag manager yaml output

Changed

  • STRING_UTILS: Extended the string interface in fms_string_utils_mod to accept reals of 4 or 8 kind, as well as 1, 2, and 3 dimensional real arrays
  • DIAG_MANAGER: Changed the log_diag_field_info routine to allow for specifying seperator
  • INTERPOLATOR(s): In horiz_interp, amip_interp and interpolator, changed pointers arrays into allocatables

Fixed

  • TRIDIAGONAL: Added OMP directives to prevent race conditions
  • DIAG_MANAGER: Added diag_send_data routine to fix class(*) related compiler issues from the refactor update
  • SAT_VAPOR_PRES_K: Removed implied saves causing issues with class(*) type checking
  • TIME_INTERP: Fixed naming conflicts between module level and local variables
  • YAML_PARSER: Fixed typo in variable name, rename variables to avoid fortran keywords
  • DOCS: Fixed incorrect serial build instructions
  • COMPILER SUPPORT: Fixed compilation errors with Intel's llvm-based compiler and added support for the CMake build. Also fixed mpp_checksum unit test failures with openmpi and nvhpc compilation issues.
  • TIME_MANAGER: Fixed an bug from PR #1169 that was causing answer changes in land models

Tag Commit Hashes

  • 2023.01-beta4 (63626578cb8ed4bed1ce670b88acd6a1ec438e32)
  • 2023.01-beta3 (0ff254e409b74d7d17ab234abe5ecd985967256c)
  • 2023.01-beta2 (74d8e734bd43b0ce043003da74896e5d747afc2f)
  • 2023.01-beta1 (6255971af28381fad22547bdc2c538fc3ea2e8bf)
  • 2023.01-alpha4 (4526cc94a3e19fe8fa151f54b0db432e1fb2f7d0)
  • 2023.01-alpha3 (f0e8cab3d8e58195f7c2663b84fd0bed12fa8b64)
  • 2023.01-alpha2 (91e732473f7cffce070f9ce239f8ffa22c081261)
  • 2023.01-alpha1 (203c8bf464ff26fe0fe39b1451caedd026bbce55)

2022.04

1 year ago

[2022.04] - 2022-10-13

Known Issues

  • If using GCC 10 or higher as well as MPICH, compilation errors will occur unless -fallow-argument-mismatch is included in the Fortran compiler flags(the flag will now be added automatically if building with autotools or CMake).
  • 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)

Added

  • FIELD MANAGER: Adds support for reading field tables in the yaml format (field_table.yaml). Yaml input only be used if compiled with -Duse_yaml preprocessor flag, otherwise it will default to previous behaviour. The converter script to convert current field tables to the new format is publicly available here, although the conversions will also be done automatically in FRE.
  • FMS2_IO: Adds options to enable data compression and chunking for netcdf output in register_restart_field

Changed

  • BUILD: Improves the configuration check for the MPICH/GCC 10+ argument mismatch bug by replacing it with a m4 compile test

Fixed

  • Compiler Support: allows for compilation via the Cray/HP CCE compilers by fixing string concatenation compilation errors

Tag Commit Hashes

  • 2022.04-beta2 163cb3e434dba05933c3d2151dea5d770758a2f3
  • 2022.04-beta1 1099a2890a06d279df0abe1f383b71279643bcdd
  • 2022.04-alpha4 8036d8d8448b0da8416a76ee0820314da27d5711
  • 2022.04-alpha3 7fafa4f7fb7a89c6f22da7ae19dc4e61a8073451
  • 2022.04-alpha2 0c4b3cc98f4bce5b39c6e9f6404ea32f5bf719e5
  • 2022.04-alpha1 ec57a48aeefb62b475a11cad7e30ebe460fa0d9f

2022.03

1 year ago

[2022.03] - 2022-08-01

Known Issues

  • If using GCC 10 or higher as well as MPICH, compilation errors will occur unless -fallow-argument-mismatch is included in the Fortran compiler flags(the flag will now be added automatically if building with autotools or CMake).
  • 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)

Added

  • BUILD: Adds checks to autotools and cmake build files to solve compilation issues with GCC 10 and greater. Also adds a debug build type for CMake to allow for overriding compiler flags, and individual override flags for mixed precision routines.
  • DOCS: Additional information added for building and testing FMS with the build systems; renamed and moved autotools build document.
  • YAML: Adds support for writing yaml files through the fms_yaml_output_mod module

Changed

  • MIXED MODE: Expands support for mixed precision reals to the constants files, diag_manager, sat_vapor_pres, time_manager, and tracer_manager
  • FMS_IO: Increased the character length for restart file names to allow for longer paths

Fixed

  • COUPLER: Fixes global checksum being written to stdout by every core instead of just the root
  • DOCS: Fixed parsing issues with include and header files, adds class diagrams and layout improvements

Tag Commit Hashes

  • 2022.03-alpha1 62588548a5ecbdce7dbf857542ed272f7b2c971f
  • 2022.03-beta1 8a4ad847122c7cc597a1f2626290b46af44b143a

2022.02

2 years ago

[2022.02] - 2022-04-29

Known Issues

  • If using GCC 10 or higher as well as MPICH, compilation errors will occur unless -fallow-argument-mismatch is included in the Fortran compiler flags
  • GCC 11.1.0 is unsupported due to compilation issues with select type. The issue is resolved in later GCC releases.

Added

  • STRING_UTILS: Adds a module, fms_string_utils_mod, for common string operations throughout FMS
  • LIBFMS: makes recently added routines available through the global fms module
  • CMAKE: Adds build option for position independent code
  • CONSTANTS: Adds macros to load constants for different modeling systems/uses between GFDL, GEOS and GFS. Can be selected in cmake with -DCONSTANTS=<GEOS|GFDL|GFS>

Changed

  • STRING_UTILS: Refactored string routine definitions from fms_mod and fms2_io_mod to be located in fms_string_utils_mod
  • CONSTANTS: Makes fmsconstants.F90 contain the constant definitions, with constants_mod refactored to hold the same values
  • MOSAIC2: changes grid 'version' names and documentation to be more descriptive

Removed

  • FMS_MOD: Removes fms_c.c and fms_c.h files from the fms directory

Fixed

  • FMS2_IO: Fixed bug casuing non-root pe's to fail during the flush_file routine

Tag Commit Hashes

  • 2022.02-alpha1 270c2a4e1a94229a2ae6b1e431c473589b6e15c3
  • 2022.02-alpha2 7768ad1d4941b92ec8f40d34b1b517f5bde3df4e
  • 2022.02-beta1 689579eea6bf7a25c64e8b823551ec588be90984