Releases: NOAA-GFDL/FMS
Releases · NOAA-GFDL/FMS
2021.01
[2021.01] - 2021-03-08
Added
- MPP: A counter for timers to report how many times a timer section is run
- MPP: Adds missing interfaces to be consistent with interfaces that use the OVERLOAD and no_8byte_integer macros in order to allow building without MPI
- MPP: Extends interfaces for read and write routines to include 32-bit and 64-bit real data arrays
- MPP: Adds unit tests for mpp and mpp_io for all public routines with mixed-precision interfaces and expands on existing tests for mixed-precision
- Adds an .editorconfig file with the project's preferred editor configuration
- A variable MODDIR in configure.ac for use in Makefiles to find required Fortran module files
- Adds FMS description web page as a markdown file
Changed
- DOCS: Updates various modules to doxygen style comments and makes adjustments to correctly generate doxygen documentation through the build system
- PLATFORM: changes usage of platform.h to platform_mod and it's associated data types
- Changes all previous uses of flush subroutine calls to function calls
- Changes travis CI to Github actions CI and removed all trailing whitespace
Fixed
- MPP: Fixed a bug causing mpp_get_UG_domain_tile_pe_inf to seg fault from the incorrect assignment of an optional argument
- FMS: Fixes issues with FMS unit tests failing from pointer allocations by reworking deallocate_unstruct_pass_type
- An issue with the automake build system causing unnecessary rebuilds of source files
- Fixes CMake build of the FMS library to install configuration files in the appropriate directories; and for OpenMP dependencies to be private
Tag Commit Hashes
2020.04.02
Patch for the 2020.04.01 release
Fixed
- CMAKE: Fixed a bug that caused the build to fail from incorrect source paths
2020.04.01
Patch for the 2020.04 release
Changed
- FMS2_IO: Changed how nest file names are created to be consistent with mpp_io
Removed
- MPP_IO: removed left over #ifdefs from backwards compatibility changes
Fixed
- DIAG_MANAGER: Fixed a bug where files were getting written with redundant time_bounds data
- Fixed a bug causing the cmake build to fail on latest versions of Ubuntu
2020.04
[2020.04] - 2020-12-07
Added
- DIAG_MANAGER: A namelist flag called
use_mpp_io
if set to .true. will use mpp_io. The default is .false. and will use fms2_io. - DIAG_MANAGER: A check is added before a time axis is registered to check if the time axis is registered as a variable
- DIAG_MANAGER: A unit test was added to test the optional
new_file_freq
functionality - XGRID: A namelist flag called
use_mpp_io
if set to .true. will use mpp_io. The default is .false. and will use fms2_io. - INTERPOLATOR: A namelist flag called
use_mpp_io
if set to .true. will use mpp_io. The default is .false. and will use fms2_io. - AMIP_INTERP: A namelist flag called
use_mpp_io
if set to .true. will use mpp_io. The default is .false. and will use fms2_io. - TOPOGRAPHY: A namelist flag called
use_mpp_io
if set to .true. will use mpp_io. The default is .false. and will use fms2_io. - DATA_OVERRIDE: A namelist flag called
use_mpp_bug
if set to .true. will use mpp_io. The default is .false. and will use fms2_io. - DATA_OVERRIDE: A namelist flag called
reproduce_null_char_bug_flag
if set to .true. and fms2_io is being used, it will reproduce the mpp_io bug where the axis bounds were calculated instead of read. The default is .false.
A unit test was added to test the functionality ofget_grid_version_1
- FMS2_IO: A unit test was added to test the functionality of
get_valid
andis_valid
Changed
- The autotools build has been changed to copy each subdirectory module (.mod) files to a common .mod directory located at the top of the source directory. This change simplifies the include path specifications.
- Use F90 module files for external libraries (MPI and NetCDF) for improved interface checking, thereby removing the reliance on library header include files.
Removed
- LIBFMS: The flag -Duse_mpp_io should not be used and will cause a crash
- LIBFMS: Macros and logic for interfacing to the Flexible File I/O library
- LIBFMS: Macros for SGI MIPSpro compilers, including: mpp_node function and SGI Irix specific high resolution timer
- LIBFMS: Macros for IBM AIX compilers
- LIBFMS: Files in mpp supporting the CRAY SHMEM communications library
- LIBFMS: Files in mpp for the SGI PSET approach for communication via GSM
Fixed
- DATA_OVERRIDE: Fixed a bug in
get_grid_version_1
where the variable_size calls were not correct - FMS2_IO: Fixed a bug in
get_valid
where the mpp_broadcast calls were done insideif (root_pe)
blocks
The fms2_io unit tests were modified so they can work with the AOCC compiler - XGRID: Fixed a bug in
load_xgrid
by checking if a dimension exists before callingget_dimension_size
to avoidFATAL: NetCDF: Invalid dimension ID or name
crashes
Tag Commit Hashes
2020.02.01
This is a patch for 2020.02.
Fixed
- DIAG_MANAGER[2]: Fixes an issue where time_bnds was written incorrectly for the last time stamp in diagnostic files
2020.03
Known Issues
- Users must compile with the flag “-fallow-argument-mismatch” when compiling with GCC 10 (this will be addressed in 2020.04)
- Fms2io: The fms2io unit tests crash with newer versions of netcdf (4. 7.4) because netcdf only supports writing int64 variable with NC_NETCDF4 file types
- Mpp_io: bug reading *_bnds causes values to be calculated incorrectly when netcdf files have null characters in the string attributes
Added
FMS2_IO:
Adds header_buffer_val to the fms2io namelist which sets the netcdf header size in bytes. The default value is 16kb.
- Adds netcdf_default_format to the fms2io namelist which allows the user to change the netcdf file type. The default value is 64bit.
- Adds support to read netcdf string global attributes
- Adds an optional argument to open_file,
dont_add_res_to_filename
, which indicates that the filename should not be modified (default adds .res to restart file name) - Modifies the
register_variable_attribute
andregister_global_attribute
interfaces by adding str_len as an argument. This is a workaround to get fms2io to work with PGI because they don't support class () with len=. - Adds unit test that tests
write_data
andread_data
when using a domain with a mask table - Adds fms2io’s version of get_mosaic_tile_grid
MPP_IO
- Adds
-Duse_mpp_io
compile option for data_override, interpolator, amip_interp, diag_manager, topography, and xgrid to select using mpp_io instead of fms2_io
MPP
- Adds unit tests for routines/functions that are called in mpp_init
CMAKE
- cmake build system now supported
- tested for every PR via CI
Changed
##FMS2_IO
- Improves performance of previous release by gathering the domain decomposed data into one global buffer and doing one write rather than doing multiple writes
DATA_OVERRIDE:
- Changes a line in time_interp_external2 to enable 3D overrides
Deprecated
Removed
Fixed
Data_override
-Fixes a crash when doing ongrid data_override calls with a domain with halos
Diag_manager
- Fixes an issue where time_bnds were written incorrectly for the last time stamp
- Regional diagnostics with a mask-table now work
Fms2io Unit Test
- Includes fms2io_init call to improve functionality
- Mpp_domains2 Unit test works
Fms_io
- Changes the logic in get_tile_string to fix bug where tile numbers 9 and 99 produce an inappropriate error
MPP
- Fixes casting of 32-bit reals prior to generating a checksum value
- BOZ literals used in parameter declarations are now properly converted to integers using the int() function
Version 2019.01.03
#[2019.01.03] - 2020-07-17
Added
- Supports updated nesting without fms2_io
- Supports mpp_domains
Removed
- Bats files
Version 2020.02
[2020.02] - 2020-05-01
Added
- FMS2_IO: An fms2_io_nml namelist has been created. It includes the variable ncchksz. This is the replacement for the environment variable NC_BLKSZ set in model run scripts and used by mpp_io. The default value is 64 KB. Any time a file is opened in fms2_io (nf90_open or nf90_create), the optional argument
chunksize=ncchksz
is passed to the NetCDF library. NetCDF attempts to use this value to control the blocksize utilized for reads and writes of data from the filesystem. - FMS2_IO: Adds support to
compute_global_cheksum.inc
forreal32
, assuming the flag-DOVERLOAD_R4
is used when compiling.
Changed
- MPP_DOMAINS - nesting: The logic supporting nested domains for mosaic grids has been overhauled and extended. FMS now supports multiple nests and telescoping nests (nest embedded within a nest). The requirement for a nest to lie wholly within a single tile has been relaxed and a first-level nest may cross tile boundaries, but may not contain a tile corner. Communications for two-way nesting have also been improved. The 2019 December Public Release and 2020.02 GFDL Release within the [GFDL_atmos_cubed_sphere] (https://github.com/NOAA-GFDL/GFDL_atmos_cubed_sphere) have been updated and are compatible with this release of FMS.
- FMS2_IO: The intent of fileobj is changed from (in) to (inout) in netcdf_restore_state_wrap, restore_domain_state, and netcdf_restore_state because the file object type has a pointer that is being reassigned in one of the routines lower in the call stack.
Deprecated
- MPP_DOMAINS - nesting: The initial nesting implementation is no longer supported. Please see the Changed::MPP_DOMAINS sub-entry under.
Removed
- GENERAL: References to the macro _ALLOCATABLE have been replaced with “allocatable”, _ALLOCATED has been replaced with “allocated”, and _NULL has been removed. It is now assumed that all compilers support the Fortran 2003 standard. The macros still exist in fms_platforms.h for compatibility within other components.
- DIAG_MANAGER: “fms_platform.h” is no longer included in any of the diag_manager routines. Instead, fms_platform_mod is now being use-associated where necessary. This fixes an issue for debuggers not providing correct line numbers.
Known Issues
- DIAG_MANAGER: The regional diagnostics are not reproducing old behavior of a mat table it used to write the output. Regional diagnostics without a mask table should reproduce.
Version 2020.01
[2020.01] - 2020-03-13
Added
- Adds the modules
axis_utils2
,mosaic2
, andtime_interp_external2
that usefms2_io
- Adds unit tests for thread affinity in test_fms/affinity
- Autotools unit tests are now run with
srun, mpirun
, oraprun
(whichever is present on your system) fms2_io
provides three new derived types, which target the different I/O paradigms used in GFDL GCMs:- type(FmsNetcdfFile_t) - This type provides a thin wrapper over the netCDF4 library, but allows the user to assign a “pelist” to the file. If a pelist is assigned, only the first rank on the list directly interacts with the netCDF library, and performs broadcasts to relay the information to the rest of the ranks on the list. This derived type also allows the user to perform “compressed” reads/writes and restart variable “registration” (i.e. the ability to store pointers to user-defined/allocated buffers) and reads/writes in a manner similar to the existing calls in fms_io.
- type(FmsNetcdfUnstructuredDomainFile_t) - This type extends the FmsNetcdfFile_t type to support “domain-decomposed” reads/writes on a user defined mpp_domains unstructured grid. Users are required to inform the FMS2_io module which dimensions correspond to the unstructured grid using the appropriate
register_axis
call before any domain-decomposed reads/writes can be performed. - type(FmsNetcdfDomainFile_t) - This type extends the FmsNetcdfFile_t type to support “domain-decomposed” reads/writes on a user-defined
mpp_domains
two-dimensional lon-lat or cubed-sphere grid. Users are required to inform thefms2_io
module which dimensions (‘x’ or ‘y’) correspond to the two-dimensional grid using the appropriateregister_axis
calls before any domain-decomposed reads/writes can be performed.
fms2_io
requires the user to manage objects of the types described above. Calls toopen_file
(close_file
) act as constructors (destructors) for each of the objects, and must be explicitly made by the user. Each object must be constructed before any I/O can be performed. Examples describing how to use these new types are available in test_fms/fms2_iofms2_io
treats _FillValue attributes as valid_max or valid_min range specifiers if none of valid_range, valid_min, and valid_max are specified as described in these netcdf conventions
Changed
- The
diag_manager
IO is handled by fms2_io instead of mpp_io. Default behavior assumes that the mpp_io namelist variable is set to cf_compliant = .true. - The user must specify the diagnostic attributes that they want to write to the output files. Example: If there is no units attribute, then the variable metadata will not include units, and it will not automatically add units = “none”.
- Calls to
register_diag_axis
for an X or Y axis that is shifted from the CENTER position need to include the optional argument domain_position and should be equal to EAST or NORTH based on the position relative to the domain. EAST and NORTH are exposed throughdiag_manager_mod
. - Changed the handling of average_T and time_bnds variables so that they are set to values that are sent in and are not manipulated as was the case in mpp_io.
interpolator
,xgrid
,data_override
, andamip_interp
now callfms2_io
routines- Support for enabling/disabling quad-precision (used in certain calculations) has been changed to a hard on/off switch. Default behavior is quad-precision disabled. To enable, add the following CPP macro -DENABLE_QUAD_PRECISION. This change was necessary to remove guessing at the proper setting via a mix of compiler vendor and system-defined environment variables which resulted in different behaviors on machines unbeknownst to the user.
Deprecated
- fms2_io does NOT use the scale_factor, add_offset, or other attributes to manipulate the data. The variable/data is returned to the caller as it appears in the file. All post-read data manipulations should be handled by the caller.
Removed
- Removes the use of bats when running unit tests
Known Issues
- Axis for regional diagnostics are not written correctly.
Version 2019.01.01
Patch release 2019.01.01
Revert the default use of quad precision to pre-2019.01 behavior. To enable quad precision, the preprocessor macro ENABLE_QUAD_PRECISION
must be defined at compile time. Defining ENABLE_QUAD_PRECISION will #undef NO_QUAD_PRECISION
in platform.h
.