All notable changes to this project will be documented in this file.
This project adheres to Semantic Versioning.
0.44.0 - 2025-10-06
- Add Collect communication pattern by @wdeconinck in ecmwf#301
- Add array::View interoperability with mdspan by @wdeconinck in ecmwf#304
- Add support for pocketfft by @wdeconinck in ecmwf#308, ecmwf#320
- Improvement in spherical-polygon intersection by @sbrdar in ecmwf#310
- Improvement in the conservative interpolation for general meshes by @sbrdar in ecmwf#318
- Add Field::syncHost and Field::syncDevice by @wdeconinck in ecmwf#311
- Add more GPU tracing capabilities for device allocations and host-device data transfers by @wdeconinck in ecmwf#312
- Improve HaloExchange on_device, checking state flags by @wdeconinck in ecmwf#313
- Update interpolation to support hicsparse backend by @l90lpa in ecmwf#275
- Add Locator to find at which partition and at which index a global index is located by @wdeconinck in ecmwf#317
- Add matrix halo exchange to "binning" interpolation method. by @odlomax in ecmwf#315
- Introduce atlas-interpolations app by @wdeconinck in ecmwf#321
- Support building of StructuredColumns with halos for grids with uneven points at poles e.g. N80 grid
- Move mdspan from atlas to pluto and update mdspan to latest by @wdeconinck in ecmwf#303
- Update MeshBuilder API by @wdeconinck in ecmwf#305
- Fix out-of-range in RegionalLinear2D with FORTRAN feature disabled by @wdeconinck in ecmwf#322
- Fix empty adjoint matrix for SphericalVector for scalar fields by @wdeconinck in ecmwf#314
- Support CUDA 13.0 by @wdeconinck in ecmwf#316
- Fix out-of-range in RegionalLinear2D with FORTRAN feature disabled by @wdeconinck in ecmwf#322
- Allow BlockStructuredColumns to be used for MatchingPartitioner
0.43.1 - 2025-07-09
- Pluto installation of pluto_module.mod file
- Avoid temporary array creation in Fortran pluto_allocator%allocate() function
0.43.0 - 2025-06-25
- Python wheel by @tmi in ecmwf#274, ecmwf#280
- Add Grid getter to FunctionSpace by @tom-j-h in ecmwf#264
- Fortran: Export atlas_functionspace_BlockStructuredColumns by @wdeconinck in ecmwf#276
- Feature/spectral updates by @wdeconinck in ecmwf#285
- Add Field::halo() to manage and describe field halo's by @wdeconinck in ecmwf#291
- Add a vector_component option utility by @odlomax in ecmwf#294
- Implement floating-point-exception trapping for macos by @wdeconinck in ecmwf#295
- Bugfix/device strides on cpu by @sbrdar in ecmwf#297
- Support nvidia 24.5 by @wdeconinck in ecmwf#278
- Set device_updated=false when calling Array::deallocateDevice() (fixes #243) by @wdeconinck in ecmwf#277
- Fix StructuredGrid periodicity for certain domains (fixes #282) by @wdeconinck in ecmwf#283
### Changed
- Make FiniteElement Interpolation weight computation multithreaded using OpenMP by @wdeconinck in ecmwf#292
- Added OpenMP to the cubed-sphere interpolator and the matching cubed sphere partitioner. by @odlomax in ecmwf#293
- Deprecate aliases for structured interpolation methods by @wdeconinck in ecmwf#296
0.42.0 - 2025-04-09
- Cubed sphere 2 grid builder by @mo-jonasganderton in ecmwf#253
- Grid/Distribution constructor for PointCloud by @tom-j-h in ecmwf#262
- Add distribution of serial interpolation matrix by @sbrdar in ecmwf#258
- Add offloading of discontiguous arrays in ecmwf#267
- Add device offload operators on FieldSet in ecmwf#268
- Introducing Pluto by @wdeconinck in ecmwf#269
- Python wheel: initial setup by @tmi in ecmwf#257
- Fix inconsistent index-base used in StructuredColumns::remote_index by @sbrdar in ecmwf#265
- Fix OpenMP related bug in DistributionArray
- Use pluto where possible instead of hic calls by @wdeconinck in ecmwf#270
- Use pluto default memory resources in atlas::array by @wdeconinck in ecmwf#273
0.41.1 - 2025-02-18
- Add CI with gpu
- Add -Werror in CI to avoid new warnings in the future
- Fix compilation with ATLAS_BITS_LOCAL=64 and add it to CI to avoid errors in the future
0.41.0 - 2025-02-10
- Add hicsparse as wrapper to cusparse and hipsparse (#237)
- Add SparseMatrix multiply_add functionality (#240)
- Replace eckit::SparseMatrix with SparseMatrixStorage and SparseMatrixView to support host/device memory spaces (#247)
- Add hicSparse backend to sparse matrix multiply (#246)
- New simplified cubed sphere grid (#245)
- Add functionality to gather global (serial) sparse matrix from an interpolation (#255)
- Fix warnings (#256)
- bugfix: DIV_BY_ZERO in MatchingFunctionSpacePartitionerLonLatPolygon for small grids with OMP (#244)
- bugfix: Apply normalisation also to SphereT as was already done for unit-sphere (#242)
0.40.0 - 2024-11-18
- Add MultiField to pack field allocations by @sbrdar in ecmwf#229
- Add function to create
std::variantfor multiple array views. by @odlomax in ecmwf#220 - Add Fortran access to device data through Field and FieldSet by @sbrdar in ecmwf#232
- Add Fortran API for structured stencil computations by @wdeconinck in ecmwf#228
- Support OpenACC with Cray compiler + use OpenACC_Fortran_FLAGS by @wdeconinck in ecmwf#225
- Refactor
SphericalVectorinterpolation method to usearray::ArrayViewVariant. by @odlomax in ecmwf#227 - Integrate
pack_vector_fieldsintoSphericalVectorInterpolation method. by @odlomax in ecmwf#224 - Refactor
util::pack_vector_fieldsto usearray::ArrayViewVariantby @odlomax in ecmwf#226
- Fix application of limiter for StructuredInterpolation2D by @wdeconinck in ecmwf#236
- Fix use of ATLAS_ENABLE_CUDA ON/OFF
- Bugfix for Qhull by @benjaminmenetrier in ecmwf#230
- Fixed ordering of
fixup_halosandhalo_exhange.execute_adjointinStructuredColumns.ccby @odlomax in ecmwf#223
0.39.0 - 2024-09-18
- Add HIC abstraction layer for HIP and CUDA by @wdeconinck in ecmwf#219
- Support for HIP via HIC
- Add regional interpolation by @benjaminmenetrier in ecmwf#215
- Pack vector components into higher-rank vector fields. by @odlomax in ecmwf#218
- Fix missing header in FieldImpl.h by @tehrengruber in ecmwf#214
- Bug fixes to vector interpolation with StructuredColumns and spherical vector interpolation by @MarekWlasak in ecmwf#222
0.38.1 - 2024-07-15
- Compilation and running with NAG compiler
- Wrap out-of-bounds source cells into the domain (#211)
0.38.0 - 2024-06-20
- Make non_linear interpolation independent of a chosen value type by @wdeconinck in ecmwf#176
- Procedure to carry out a regridding from high to low resolution (binning) by @mo-lormi in ecmwf#191
- Add Fortran interface for node-to-edge connectivity building by @benjaminmenetrier in ecmwf#209
- CUDA/OpenACC capable fields with Native storage backend @sbrdar and @wdeconinck in ecmwf#182
- Make non_linear interpolation independent of a chosen value type by @wdeconinck in ecmwf#176
- Remove float in Triag2D intersection algorithm by @fmahebert in ecmwf#203
- Allow zero-sized interpolation target functionspace by @odlomax in ecmwf#206
- Made sure cubed-sphere interpolation method always sets metadata. by @odlomax in ecmwf#208
- Avoid silent errors accessing Fieldset fields by ambiguous names by @wdeconinck in ecmwf#210
- Fixes opposite pole coordinates by @benjaminmenetrier in ecmwf#202
0.37.0 - 2024-04-09
- Add SphericalVector interpolation method using parallel transport (#163)
- Added arrayForEachDim method
- Bugfix for regional grids with ny > nx
- Fix build for configuration setting ATLAS_BITS_LOCAL=64
- Use new LocalConfiguration baseclass functions in util::Config and util::Metadata instead of eckit::Value backdoor
- atlas_io is an adaptor library when eckit_codec is available (#181)
0.36.0 - 2023-12-11
- Add TriangularMeshBuilder with Fortran API, so far for serial meshes only
- Add Fortran API for CellCollumns functionspace
- Add EqualAreaPartitioner which is geometry based rather than loadbalanced like EqualRegionsPartitioner
- Compilation with Intel LLVM compiler
- Fix 180 degrees phase shift error in MDPI_gulfstream function
- Update install scripts
- Preparation for using eckit::codec as backend for atlas_io
0.35.1 - 2023-10-24
- Don't output with output::Gmsh the triangle elements with wrong orientation when coordinates are "lonlat"
- Add control to skip Gmsh-output of triangles with too large edge length ratio
- Configurable geometry in KDTree
- Use configurable KDTree geometry in PointCloud
- atlas-grid-points executable to list grid points
- Allow constructor of atlas::io::ArrayShape with different integer types
- Support atlas_io with vectorstd::int64_t
- Control FPE in StructuredColumns::checksum to avoid overflow and invalid in unimportant halo regions
- Fixes to MeshBuilder validate_mesh_vs_grid
- Use search radius in FiniteElement interpolation when mesh defines metadata to do so
0.35.0 - 2023-02-10
- Add accessors for the GridBox class (MIR-632)
- Add FunctionSpace::partition() field
- Add configurable MPI communicator to data structures (#131)
- Add single precision support for fvm::Nabla
- Implement PointCloud parallel construction with halo_radius
- Fix StructuredMeshGenerator for Gaussian grids that don't start at 0 degrees (ATLAS-375)
- Remove functionspace::Spectral via Trans initialisation (fixes #153)
- Enable MeshBuilder to set up the Grid (#152)
- Fix use of cmake option ATLAS_ENABLE_TRANS as in a bundle
- Cleanup long-standing temporary element types. API change but with deprecated old API
- Deprecated rename Mesh::nb_partitions -> Mesh::nb_parts
- Implement Delaunay triangulation using Qhull instead of CGAL but CGAL can still be enabled instead for now
0.34.0 - 2023-07-10
- Fieldset::metadata (#126)
- Fieldset::adjointHaloExchange
- Field/Fieldset::clone method
- Functions to enable/disable FPE
- Add function to build mesh from imported connectivity data (#135)
- Implement field::for_each capabilities (#139)
- Introduce colon-separated environment variable ATLAS_PLUGIN_PATH to simplify plugin detection
- Introduce atlas::mdspan, contributed from github.com/kokkos/mdspan
- Add function Field::horizontal_dimension() -> std::vector<idx_t>
- Setup horizontal_dimensions() for BlockStructuredColumns fields
- Upgrade the halo exchange procedure for the function space 'PointCloud' (#120)
- Enable latitude normalisation in KDTree coordinate transform (#140)
- Fix LocalView indexing bug for non-contiguous slices
- C++17 flag public propagation to downstream C++ CMake packages
- Fix cells().global_index() metadata for RegularLonLat grids in StructuredMeshGenerator
- BuildHalo: mark interior added cells as ghost
0.33.0 - 2023-04-03
- Add support for StructuredPartitionPolygon with halo > 0
- Add information on atlas having PROJ support
- C++17 standard is now a requirement
Fix StructuredInterpolation2D with retry for failed stencils
0.32.1 - 2023-02-09
- Added (lon, lat) to (alpha, beta) transforms to cubed sphere projection
0.32.0 - 2023-01-23
- Added BlockStructuredColumns FunctionSpace
- Added function SolidBodyRotation
- Added convenience Fortran constructors for ShiftedLonLat, SHiftedLon, ShiftedLat
- Support for more FunctionSpaces in various interpolation methods
- PolygonLocator now wraps around longitudes for non-matching domains
- StructuredMeshGenerator can generate meshes with partitions without elements
- SerialDistribution makes every MPI task have the entire mesh
- Remove assertion for checking of empty mesh in NodeColumns FunctionSpace
- Gaussian latitudes can now be computed for very high resolution, without running out of memory.
- Interpolation to functionspaces with empty partitions
0.31.1 - 2022-11-11
- Fix bug introduced in StructuredMeshGenerator global numbering with release 0.31.0 in commit a63fc62a2
- Fix healpix global numbering for pentagon pole elements in parallel
- Fix validity check of atlas::HealpixGrid
0.31.0 - 2022-11-10
- Extend PointCloud functionspace to do halo exchanges, including Fortran API
- Add FunctionSpace::gather and FunctionSpace::scatter abstraction
- Improve performance of MatchingMeshPartitionerLonLatPolygon using OpenMP
- Improve performance of BuildHalo using OpenMP and unordered_map
- Improve performance of StructuredMeshGenerator using OpenMP
- Improve performance of ATLAS_TRACE
- Reduce memory peak in GatherScatter setup
- Global element numbering of RegularLonLat grids is now following rows independent of partitioning
- Running CI with Github Actions
- Fix output of atlas-grids y-range for shifted grids
- Fix building with ATLAS_BITS_LOCAL=64
0.30.0 - 2022-08-22
- Fortran API for Interpolation::execute_adjoint()
- Fortran API for FieldSet::name()
- Fortran API for MeshGenerator::generate(grid,partitioner)
- Pentagon element type
- SphericalHarmonic function
- New interpolation method: ConservativeSphericalPolygonInterpolation
- Support 'variables' option in functionspace::PointCloud::createField
- Atlas-IO is now standalone project, still embedded but only depending on eckit
- Deprecate Trans naming of 'ifs' or 'trans' in favour of 'ectrans'
- Default StructuredMeshGenerator partitioner is equal_regions instead of trans/ectrans
- Fix global numbering HEALPix grid to standard
- Fix NodeColumns remote_index for parallel orca grids
- Fix use of ATLAS_LINALG_DENSE_BACKEND environment variable
0.29.0 - 2022-04-21
- MatchingMeshPartitioner "cubedsphere"
- Interpolator "cubedsphere-bilinear"
- Improvements to Interpolation::Cache
- Add support for rank 2 fields when a nonlinear action is added to the interpolator
- Create Array using ArraySpec only
- FieldSet::has(...) replaces FieldSet::has_field(...)
- Metadata return value to Interpolation::execute()
- Rename BilinearRemapping to UnstructuredBilinearLonLat
- Compatibility with proj version >= 8
- Compatibility with eckit version <= 1.18.5
- Compatibility with GridTools backend and using 64bit idx_t
- Wrongly computed Jacobian::transpose() introduced in 0.28.0
- Fix bug where using ectrans was not enabling adjoint of invtrans
- Avoid segfault when OpenMP tasking is broken, as it is with AppleClang and LLVM libomp
0.28.1 - 2022-03-14
- Fix compilation for GNU 7.3
0.28.0 - 2022-03-02
- Assignment of ArrayView from ArrayView
- Grid "regional_variable_resolution" via a new VariableResolutionProjection
- CubedSphereDualMeshGenerator
- VortexRollup function as analytical field for initialising data
- ConvexSphericalPolygon utility class
- Improve Projection::Jacobian
- Initial implementation for bilinear interpolation for unstructured meshes
- Use new eckit (1.19.0) Sparse and Dense linear algebra API
- General robustness improvements to CubedSphere to using functionspaces with various halos
- Workarounds to fix compilation with Fujitsu compiler
- Workarounds to avoid Cray compiler problems with certain flag combinations
- CellColumns::haloExchange for meshes with multiple element types
- Computation of HEALPix mesh remote indices.
0.27.0 - 2021-12-03
- Adjoint interpolation with some restrictions
- Cubed sphere grid partitioner
- Cubed sphere parallel mesh generation
- Cubed sphere function spaces
- Fortran interfaces to Projection methods
- Support discovery of open-source ectrans
- Dense linear Algebra matrix_multiply abstraction
- Remove etc/atlas/config.yaml because defaults should be in code
- Naming of sparse_matrix_multiply backend 'omp' -> 'openmp'
- Applied clang-format 13.0.0 (all files touched)
0.26.0 - 2021-08-23
- Support for cubed sphere grids and preliminary support for cubes sphere mesh generation.
- Compilation with altas_bits_local=64
- Too aggressive optimisation with gnu 11
- Compatibility with cmake 3.20 and nvhpc compilers
0.25.0 - 2021-05-18
- New concept Redistribution to redistribute field on same grid but with different partitioner
- Support for Trans::invtrans_adj() and related methods
- Introduce ~atlas/etc/atlas/config.yaml
- atlas-io with support for encoding/decoding std::array
- atlas-io print support for tiny arrays
- atlas-io version 0.2
- Move util::SpecRegistry to non-templated grid::SpecRegistry
- minor bug fixes
0.24.1 - 2021-04-06
- Periodic halo for HEALPix mesh
- General warnings and suggestions by DeepCode bot
- Compilation problems with clang 3.8
0.24.0 - 2021-03-19
- Fixed hang in band distribution for L160000x8000 grid
- Fixes to Spectral functionspace and TransIFS regarding vertical levels
- Requires eckit 1.16
- atlas-io first version, not for operational use
- Spec registry for grids
0.23.0 - 2021-01-19
- Structured interpolation method interpolating to area straddling Greenwich.
- Fixes when compiling with ATLAS_BITS_LOCAL=64
- Possibility to link to alternative open-source version of IFS trans library.
- Caching mechanism for interpolation
0.22.1 - 2020-10-22
- Installation of PGI compilers via tools/install-pgi.sh
- Allow dependency on older Eigen 3.2 which does not use CMake targets
0.22.0 - 2020-10-14
- Feature INIT_SNAN was not working
- Support KNearestNeighbour interpolation for functionspace with smaller halo than the mesh contains
- Support array size up to size_t limit
- Migration to use ecbuild 3.4
- ATLAS_BITS_LOCAL can be configured to 32 or 64
- Fields can be created with given alignment, which adds padding in innermost dimension
- Added conservative interpolation with "grid-box average" and "grid-box maximum"
- Missing value definition for fields
- Add support for missing values in matrix-based interpolation methods
- Floating point trapping and signal handling mechanism
- Fortran: GridDistribution constructors
- Fortran: Domain access
- Fortran: Get lonlat_bounding_box via domain
- Possibility to access Jacobian of projections (with only some projections implemented)
0.21.0 - 2020-06-23
- Fixed Rotation order of applying the rotation angle
- Fix nabla computation of surface vector fields
- Fix registration and destruction issues of halo-exchange caches
- Workaround Clang compiler problem with OpenMP tasking, using introspection
- Fix bug in conversion of negative degrees to microdegrees
- Fix problem in distribution of work amongst OpenMP threads in StructuredColumns::setup
- Fix problem with StructuredColumns creation for grids defined with domains with negative West
- Fix computation of Grid::lonlatBoundingBox for arbitrary projections crossing the dateline.
- Snap LinearSpacing values to start and endpoint to allow exact comparisons
- Improved performance and memory requirement of cropping of large StructuredGrids
- Regional grids by default now have a positive y-numbering (previously negative).
- PolygonLocator based on functionspace partition polygons.
- KDTree class which abstracts eckit concrete implementations, including Fortran interface
- Geometry class with factory mechanism to configure which spheroid to use, including Fortran interface
- StrcutredGrid function for i,j to index and inverse
- Fortran interface to create StructuredColumns with custom distribution
- Fortran interface to grid spec
- Fortran interface to Projection
- Adjoint of HaloExchange
- Plugin mechanism to load plugins at runtime.
- Fortran constructors for atlas_RegionalGrid
- Fortran constructors for projected reduced Gaussian grids
- Add copy constructor and assignment operator for atlas::vector
- Mercator projection support for scaling, and operation on ellipsoid.
- Grid Distribution can now also be created as a function, e.g. for Serial or Bands
0.20.2 - 2020-04-27
- Avoid 100ds of compilation warnings introduced in version 0.20.0
0.20.1 - 2020-04-08
- Make feature BOUNDSCHECKING work again. It was not turned on for DEBUG builds
- Workaround clang OpenMP bug
- Fix Segfault due to unexpected order of destruction of singleton objects
- atlas-grids tool can now be used to compute approximate North-South grid resolution
0.20.0 - 2020-03-06
- Pole edges hould not be created for global regular grids with points at poles
- Update compatibility with more recent GridTools
- HaloExchange with CUDA
- Self registration from external library
- Proj-based projections
- OpenMP functions for sorting, filling, copying
- Parallel structured grid interpolation
- Grid iterators can have random access
- Speed improvements for StructuredColumns constructor
- Speed improvements for LonLatPolygon::contains()
- Port to ecbuild 3 (also minimum required version)
- Tidying up of atlas tools
0.19.2 - 2020-01-28
- Compatibility with eckit 1.7 due to API change in eckit::LocalConfiguration
0.19.1 - 2019-12-19
- Keep Gaussian identity of a Gaussian grid if a given domain does not crop any latitudes
- Fix naming for LegendreCache, to be more specific, and platform independent
0.19.0 - 2019-10-01
- Lambert ( conformal conic ) projection xy coordinates are now corrected
- LambertProjection renamed to LambertConformalConic
- Reordering of nodes strategies (Hilbert curve, ReverseCuthillMckee)
- Preliminary CellColumns functionspace with Gmsh IO; halos are not yet fully supported
0.18.1 - 2019-08-10
- Match vertical structured interpolation to IFS
- Fix in creating vertical dimension in StructuredColumns using interval
- Fix in caching StructuredColumnsHaloExchange
0.18.0 - 2019-07-15
- Make grid hashes crossplatform
- Fortran: Can now use TransLocal
- Fortran: Can now create unstructured grids
- LonLat Bounding box computations for grids using its projection
- Serialisation of Mesh Connectivity tables to/from eckit::Stream
- Structured interpolation bugs
- StructuredColumns bug with iSend
- Memory corruption in Spectral functionspace with GT CUDA backend
0.17.2 - 2019-06-04
- Compilation with PGI 19.4
- Structured Grid creation for periodic domains that do not start at 0 degrees longitude (Greenwich)
0.17.1 - 2019-04-22
- Option to declaration of field type (vector/scalar) when creating field in FunctionSpace
- New projection: Lambert Azimuthal Equal Area
- StructuredInterpolation2D to target FunctionSpace StructuredColumns
- Compilation with IBM XL 19
- Compilation with Intel 19
0.17.0 - 2019-04-02
- OpenMP is now private dependency
- Dependencies are now added in a modern CMake3 way
- Fortran modules are installed in /module/atlas
- Spectral functionspace better used in distributed context
- Nabla now holds shared_ptr to Method
- Fortran access to vertical coordinates from StructuredColumns
- Compilation with PGI/19.1 (regression)
- Add missing halo_exchange for Fortran rank-4 arrays
- Memory leaks with StructuredColumns
0.16.0 - 2019-02-14
- Interpolation makes use of OpenMP
- Cleanup of header includes
- fypp Fortran preprocessor is ported to fckit 0.6
- Parallel structured interpolation methods (2D,3D): linear, cubic, quasicubic
- Interpolation for multi-level and multi-variable fields
- atlas_Trace: Fortran API and use within OpenMP parallel regions
- StructuredColumns halo-exchange for vector fields
- Field::halo_exchange() function
- Fortran compilation with PGI 18.10
- Access to Field view within OpenMP parallel region
- FunctionSpaces use only required halo, even if larger halo is available in mesh
- Fixed faulty name of a Field when created through Fortran API, wrapping existing memory
- Fix NodeColumns functionspace when mesh is created from projected grid.
- Parallel interpolation from regular lonlat grid.
- Spectral spherical harmonics transforms for large cases
0.15.2 - 2018-08-31
- Initialisation of Fields to signalling NaN in debug builds, uninitialised in non-debug builds (used to be initialised to zero as part of std::vector construction)
- Implementation of cropped unstructured grids so that spectral transforms to unstructured grids are allowed
- Spectral transforms to grids including pole and equator
- Build with gridtools CUDA backend
0.15.1 - 2018-07-17
- Compilation for Intel 18 debug
- Memory bug for spherical harmonics
- Compatibility with fckit 0.5.1
0.15.0 - 2018-06-19
- Native Array data storage uses now a raw C pointer instead of std::vector
- Significant performance improvements to Spherical harmonics transforms
- Various bugs related to parallel halos
- Bit reproducibility for parallel interpolation
0.14.0 - 2018-03-22
- Spherical Harmonics transforms can receive a cache memory handle
- Earth interface (C++)
- Requires eckit 0.20.0, fckit 0.5.0
0.13.2 - 2018-03-20
- C++ compilation using PGI 17, 18 and GCC 7
- Support Python 3 to generate Fortran bindings
- Travis CI linked with github repository
- Problem with CUDA allocated memory
0.13.1 - 2018-03-01
- Fortran compilation using Intel 18
- GridTools compatibility