From 9d289a4aac2bacfb879a4682b720cf0e7892dc84 Mon Sep 17 00:00:00 2001 From: Willem Deconinck Date: Tue, 11 Feb 2025 16:14:48 +0000 Subject: [PATCH 01/17] atlas-docs: Build doxygen from source --- .github/docs-config.yml | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/.github/docs-config.yml b/.github/docs-config.yml index e08272a73..e15d9f94a 100644 --- a/.github/docs-config.yml +++ b/.github/docs-config.yml @@ -1,7 +1,13 @@ # note: each step is executed in own process build-steps: - git clone --depth 1 https://github.com/ecmwf/atlas-docs.git $RUNNER_TEMP/atlas-docs - - sudo apt install -y -q doxygen texlive-full + - | + wget https://github.com/doxygen/doxygen/archive/refs/tags/Release_1_13_2.tar.gz + tar xzf Release_1_13_2.tar.gz + cmake -S doxygen-Release_1_13_2 -B doxygen + cmake --build doxygen -j16 + sudo cmake --install doxygen + - sudo apt install -y -q ghostscript texlive-full - | cd $RUNNER_TEMP/atlas-docs make PUBLIC=1 WITH_ECKIT=1 WITH_DOXYGEN=1 ATLAS_SOURCE_DIR=$GITHUB_WORKSPACE clean html From 424f9b313744fefca17b228ddfdc609b6f48b484 Mon Sep 17 00:00:00 2001 From: Willem Deconinck Date: Thu, 13 Feb 2025 15:35:22 +0100 Subject: [PATCH 02/17] Fix RegionalLinear2D interpolation with ATLAS_BITS_LOCAL=64 --- .../method/structured/RegionalLinear2D.cc | 4 ++-- .../test_interpolation_structured2D_regional.cc | 16 ++++++++-------- 2 files changed, 10 insertions(+), 10 deletions(-) diff --git a/src/atlas/interpolation/method/structured/RegionalLinear2D.cc b/src/atlas/interpolation/method/structured/RegionalLinear2D.cc index e8588b617..47e5c3301 100644 --- a/src/atlas/interpolation/method/structured/RegionalLinear2D.cc +++ b/src/atlas/interpolation/method/structured/RegionalLinear2D.cc @@ -62,8 +62,8 @@ void RegionalLinear2D::do_setup(const FunctionSpace& source, // Source grid indices const Field sourceFieldIndexI = sourceFs.index_i(); const Field sourceFieldIndexJ = sourceFs.index_j(); - const auto sourceIndexIView = array::make_view(sourceFieldIndexI); - const auto sourceIndexJView = array::make_view(sourceFieldIndexJ); + const auto sourceIndexIView = array::make_view(sourceFieldIndexI); + const auto sourceIndexJView = array::make_view(sourceFieldIndexJ); sourceSize_ = sourceFs.size(); // Destination grid size diff --git a/src/tests/interpolation/test_interpolation_structured2D_regional.cc b/src/tests/interpolation/test_interpolation_structured2D_regional.cc index 8bba8692e..be0c40ff3 100644 --- a/src/tests/interpolation/test_interpolation_structured2D_regional.cc +++ b/src/tests/interpolation/test_interpolation_structured2D_regional.cc @@ -106,8 +106,8 @@ CASE("test_interpolation_structured2D_regional_1d") { auto targetField = targetFs.createField(Config("name", "target")); // Accuracy test - const auto sourceIView = array::make_view(sourceFs.index_i()); - const auto sourceJView = array::make_view(sourceFs.index_j()); + const auto sourceIView = array::make_view(sourceFs.index_i()); + const auto sourceJView = array::make_view(sourceFs.index_j()); auto sourceView = array::make_view(sourceField); const auto sourceGhostView = atlas::array::make_view(sourceFs.ghost()); sourceView.assign(0.0); @@ -120,8 +120,8 @@ CASE("test_interpolation_structured2D_regional_1d") { interpolation.execute(sourceField, targetField); - const auto targetIView = array::make_view(targetFs.index_i()); - const auto targetJView = array::make_view(targetFs.index_j()); + const auto targetIView = array::make_view(targetFs.index_i()); + const auto targetJView = array::make_view(targetFs.index_j()); const auto targetView = array::make_view(targetField); const auto targetGhostView = atlas::array::make_view(targetFs.ghost()); const double tolerance = 1.e-12; @@ -163,8 +163,8 @@ CASE("test_interpolation_structured2D_regional_2d") { auto targetField = targetFs.createField(Config("name", "target")); // Accuracy test - const auto sourceIView = array::make_view(sourceFs.index_i()); - const auto sourceJView = array::make_view(sourceFs.index_j()); + const auto sourceIView = array::make_view(sourceFs.index_i()); + const auto sourceJView = array::make_view(sourceFs.index_j()); auto sourceView = array::make_view(sourceField); const auto sourceGhostView = atlas::array::make_view(sourceFs.ghost()); sourceView.assign(0.0); @@ -179,8 +179,8 @@ CASE("test_interpolation_structured2D_regional_2d") { interpolation.execute(sourceField, targetField); - const auto targetIView = array::make_view(targetFs.index_i()); - const auto targetJView = array::make_view(targetFs.index_j()); + const auto targetIView = array::make_view(targetFs.index_i()); + const auto targetJView = array::make_view(targetFs.index_j()); const auto targetView = array::make_view(targetField); const auto targetGhostView = atlas::array::make_view(targetFs.ghost()); const double tolerance = 1.e-12; From 60e715efb260589286734c6ee786f81c23e197b8 Mon Sep 17 00:00:00 2001 From: Willem Deconinck Date: Thu, 13 Feb 2025 15:00:40 +0100 Subject: [PATCH 03/17] Fix compilation with ATLAS_BITS_LOCAL=64 --- src/atlas/field/MultiField.cc | 2 +- src/atlas/field/MultiField.h | 2 +- src/atlas/field/MultiFieldCreator.h | 2 +- src/atlas/field/MultiFieldCreatorArray.cc | 2 +- src/atlas/field/MultiFieldCreatorArray.h | 2 +- src/atlas/field/MultiFieldCreatorIFS.cc | 2 +- src/atlas/field/MultiFieldCreatorIFS.h | 2 +- src/atlas/field/detail/MultiFieldInterface.cc | 1 - .../grid/atlas_StencilComputer_module.F90 | 42 +++++++++++++++---- 9 files changed, 42 insertions(+), 15 deletions(-) diff --git a/src/atlas/field/MultiField.cc b/src/atlas/field/MultiField.cc index e646f17af..eea285fa9 100644 --- a/src/atlas/field/MultiField.cc +++ b/src/atlas/field/MultiField.cc @@ -35,7 +35,7 @@ MultiField::MultiField(const eckit::Configuration& config) { reset(creator->create(config)); } -MultiField::MultiField(const array::DataType datatype, const std::vector& shape, +MultiField::MultiField(const array::DataType datatype, const array::ArrayShape& shape, const std::vector& var_names) { std::unique_ptr creator(MultiFieldCreatorFactory::build("MultiFieldCreatorArray")); reset(creator->create(datatype, shape, var_names)); diff --git a/src/atlas/field/MultiField.h b/src/atlas/field/MultiField.h index 2cc3c6903..852ec5848 100644 --- a/src/atlas/field/MultiField.h +++ b/src/atlas/field/MultiField.h @@ -53,7 +53,7 @@ class MultiField : public util::ObjectHandle { using Handle::Handle; MultiField(const eckit::Configuration&); - MultiField(const array::DataType datatype, const std::vector& shape, + MultiField(const array::DataType datatype, const array::ArrayShape& shape, const std::vector& var_names); //-- Accessors diff --git a/src/atlas/field/MultiFieldCreator.h b/src/atlas/field/MultiFieldCreator.h index 84a0cf48e..cc11495e4 100644 --- a/src/atlas/field/MultiFieldCreator.h +++ b/src/atlas/field/MultiFieldCreator.h @@ -49,7 +49,7 @@ class MultiFieldCreator : public util::Object { virtual ~MultiFieldCreator(); virtual MultiFieldImpl* create(const eckit::Configuration& config = util::Config()) const = 0; - virtual MultiFieldImpl* create(const array::DataType datatype, const std::vector& shape, + virtual MultiFieldImpl* create(const array::DataType datatype, const array::ArrayShape& shape, const std::vector& var_names) const = 0; }; diff --git a/src/atlas/field/MultiFieldCreatorArray.cc b/src/atlas/field/MultiFieldCreatorArray.cc index 7987a83f7..5172bc774 100644 --- a/src/atlas/field/MultiFieldCreatorArray.cc +++ b/src/atlas/field/MultiFieldCreatorArray.cc @@ -80,7 +80,7 @@ MultiFieldImpl* MultiFieldCreatorArray::create(const eckit::Configuration& confi return create(datatype, shape, var_names); } -MultiFieldImpl* MultiFieldCreatorArray::create(const array::DataType datatype, const std::vector& shape, const std::vector& var_names) const { +MultiFieldImpl* MultiFieldCreatorArray::create(const array::DataType datatype, const array::ArrayShape& shape, const std::vector& var_names) const { const int dim = shape.size(); const int nvar = var_names.size(); ATLAS_ASSERT(nvar > 0 && dim > 2, "MultiField must have at least one field name."); diff --git a/src/atlas/field/MultiFieldCreatorArray.h b/src/atlas/field/MultiFieldCreatorArray.h index c66f2c144..d7977e241 100644 --- a/src/atlas/field/MultiFieldCreatorArray.h +++ b/src/atlas/field/MultiFieldCreatorArray.h @@ -48,7 +48,7 @@ class MultiFieldCreatorArray : public MultiFieldCreator { MultiFieldCreatorArray(const eckit::Configuration& config); ~MultiFieldCreatorArray() override; MultiFieldImpl* create(const eckit::Configuration& config = util::Config()) const override; - MultiFieldImpl* create(const array::DataType datatype, const std::vector& shape, + MultiFieldImpl* create(const array::DataType datatype, const array::ArrayShape& shape, const std::vector& var_names) const override; }; diff --git a/src/atlas/field/MultiFieldCreatorIFS.cc b/src/atlas/field/MultiFieldCreatorIFS.cc index eed2d089c..046120216 100644 --- a/src/atlas/field/MultiFieldCreatorIFS.cc +++ b/src/atlas/field/MultiFieldCreatorIFS.cc @@ -34,7 +34,7 @@ MultiFieldCreatorIFS::MultiFieldCreatorIFS(const eckit::Configuration& config) { MultiFieldCreatorIFS::~MultiFieldCreatorIFS() = default; -MultiFieldImpl* MultiFieldCreatorIFS::create(const array::DataType datatype, const std::vector& shape, +MultiFieldImpl* MultiFieldCreatorIFS::create(const array::DataType datatype, const array::ArrayShape& shape, const std::vector& var_names) const { ATLAS_NOTIMPLEMENTED; return nullptr; diff --git a/src/atlas/field/MultiFieldCreatorIFS.h b/src/atlas/field/MultiFieldCreatorIFS.h index dddd7cd04..dfa533627 100644 --- a/src/atlas/field/MultiFieldCreatorIFS.h +++ b/src/atlas/field/MultiFieldCreatorIFS.h @@ -53,7 +53,7 @@ class MultiFieldCreatorIFS : public MultiFieldCreator { MultiFieldCreatorIFS(const eckit::Configuration& config); ~MultiFieldCreatorIFS() override; MultiFieldImpl* create(const eckit::Configuration& config = util::Config()) const override; - MultiFieldImpl* create(const array::DataType datatype, const std::vector& shape, + MultiFieldImpl* create(const array::DataType datatype, const array::ArrayShape& shape, const std::vector& var_names) const override; }; diff --git a/src/atlas/field/detail/MultiFieldInterface.cc b/src/atlas/field/detail/MultiFieldInterface.cc index 4f305c97f..87e88fa2f 100644 --- a/src/atlas/field/detail/MultiFieldInterface.cc +++ b/src/atlas/field/detail/MultiFieldInterface.cc @@ -33,7 +33,6 @@ MultiFieldImpl* atlas__MultiField__create_shape(int kind, int rank, int shapef[] size_t length, size_t size) { array::ArrayShape shape; shape.resize(rank); - array::ArrayStrides strides; for (idx_t j = 0, jf = rank - 1; j < rank; ++j) { shape[j] = shapef[jf--]; } diff --git a/src/atlas_f/grid/atlas_StencilComputer_module.F90 b/src/atlas_f/grid/atlas_StencilComputer_module.F90 index e3bb5966f..b0afe6403 100644 --- a/src/atlas_f/grid/atlas_StencilComputer_module.F90 +++ b/src/atlas_f/grid/atlas_StencilComputer_module.F90 @@ -104,7 +104,9 @@ module atlas_StencilComputer_module contains procedure, pass :: write => atlas_StructuredGrid_Stencil__write generic, public :: write(FORMATTED) => write - procedure, public :: i => atlas_StructuredGrid_Stencil__i + procedure, private :: i_int32 => atlas_StructuredGrid_Stencil__i_int32 + procedure, private :: i_int64 => atlas_StructuredGrid_Stencil__i_int64 + generic, public :: i => i_int32, i_int64 procedure, public :: j => atlas_StructuredGrid_Stencil__j END TYPE atlas_StructuredGrid_Stencil @@ -115,7 +117,10 @@ module atlas_StencilComputer_module type(atlas_StructuredGrid_ComputeNorth) :: compute_north type(atlas_StructuredGrid_ComputeWest) :: compute_west contains - procedure :: setup => atlas_StructuredGrid_ComputeStencil__setup + procedure :: setup_int32 => atlas_StructuredGrid_ComputeStencil__setup_int32 + procedure :: setup_int64 => atlas_StructuredGrid_ComputeStencil__setup_int64 + generic, public :: setup => setup_int32, setup_int64 + procedure :: execute => atlas_StructuredGrid_ComputeStencil__execute_real64 procedure :: assignment_operator => atlas_StructuredGrid_ComputeStencil__assignment @@ -190,13 +195,13 @@ function atlas_StructuredGrid_ComputeWest__ctor(grid, halo) result(this) call this%return() end function -subroutine atlas_StructuredGrid_ComputeStencil__setup(this, grid, stencil_width) - use, intrinsic :: iso_c_binding, only : c_double +subroutine atlas_StructuredGrid_ComputeStencil__setup_int32(this, grid, stencil_width) + use, intrinsic :: iso_c_binding, only : c_double, c_int use atlas_grid_module, only : atlas_StructuredGrid implicit none class(atlas_StructuredGrid_ComputeStencil) :: this class(atlas_StructuredGrid), intent(in) :: grid - integer(ATLAS_KIND_IDX), intent(in) :: stencil_width + integer(c_int), intent(in) :: stencil_width this%stencil_width = stencil_width this%halo = (stencil_width + 1) / 2 this%stencil_offset = stencil_width - floor(real(stencil_width,c_double) / 2._c_double + 1._c_double, ATLAS_KIND_IDX) @@ -204,6 +209,19 @@ subroutine atlas_StructuredGrid_ComputeStencil__setup(this, grid, stencil_width) this%compute_west = atlas_StructuredGrid_ComputeWest(grid, this%halo) end subroutine +subroutine atlas_StructuredGrid_ComputeStencil__setup_int64(this, grid, stencil_width) + use, intrinsic :: iso_c_binding, only : c_double, c_long + use atlas_grid_module, only : atlas_StructuredGrid + implicit none + class(atlas_StructuredGrid_ComputeStencil) :: this + class(atlas_StructuredGrid), intent(in) :: grid + integer(c_long), intent(in) :: stencil_width + this%stencil_width = stencil_width + this%halo = (stencil_width + 1) / 2 + this%stencil_offset = stencil_width - floor(real(stencil_width,c_double) / 2._c_double + 1._c_double, ATLAS_KIND_IDX) + this%compute_north = atlas_StructuredGrid_ComputeNorth(grid, this%halo) + this%compute_west = atlas_StructuredGrid_ComputeWest(grid, this%halo) +end subroutine ! ---------------------------------------------------------------------------------------- @@ -295,10 +313,20 @@ function atlas_StructuredGrid_Stencil__j(this, j_index) result(j) j = this%j_begin + (j_index-1) end function -function atlas_StructuredGrid_Stencil__i(this, i_index, j_index) result(i) +function atlas_StructuredGrid_Stencil__i_int32(this, i_index, j_index) result(i) + use, intrinsic :: iso_c_binding, only : c_int + integer(ATLAS_KIND_IDX) :: i + class(atlas_StructuredGrid_Stencil), intent(in) :: this + integer(c_int) :: i_index + integer(ATLAS_KIND_IDX) :: j_index + i = this%i_begin(j_index) + (i_index-1) +end function + +function atlas_StructuredGrid_Stencil__i_int64(this, i_index, j_index) result(i) + use, intrinsic :: iso_c_binding, only : c_long integer(ATLAS_KIND_IDX) :: i class(atlas_StructuredGrid_Stencil), intent(in) :: this - integer(ATLAS_KIND_IDX) :: i_index + integer(c_long) :: i_index integer(ATLAS_KIND_IDX) :: j_index i = this%i_begin(j_index) + (i_index-1) end function From f24f7ab8b287c01b9c118a85f9d77139464a2cb2 Mon Sep 17 00:00:00 2001 From: Willem Deconinck Date: Thu, 13 Feb 2025 15:13:40 +0100 Subject: [PATCH 04/17] Fix assemble_global_matrix with ATLAS_BITS_LOCAL=64 --- src/atlas/interpolation/AssembleGlobalMatrix.cc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/atlas/interpolation/AssembleGlobalMatrix.cc b/src/atlas/interpolation/AssembleGlobalMatrix.cc index 4214cc2c2..269741781 100644 --- a/src/atlas/interpolation/AssembleGlobalMatrix.cc +++ b/src/atlas/interpolation/AssembleGlobalMatrix.cc @@ -134,7 +134,7 @@ atlas::linalg::SparseMatrixStorage assemble_global_matrix(const Interpolation& i auto compute_max_global_index = [&mpi_comm,mpi_root](const FunctionSpace& fs) { auto global_index = array::make_view(fs.global_index()); - auto ghost = array::make_view(fs.ghost()); + auto ghost = array::make_view(fs.ghost()); gidx_t max_gidx{0}; for( size_t i = 0; i < global_index.size(); ++i) { if (not ghost(i)) { From a2fda0aab5fa54b713e2a0b5107996e14149c48c Mon Sep 17 00:00:00 2001 From: Willem Deconinck Date: Fri, 14 Feb 2025 11:49:23 +0100 Subject: [PATCH 05/17] Extend macros to suppress warnings based on pragmas --- src/atlas/interpolation/Vector2D.h | 8 +-- src/atlas/interpolation/Vector3D.h | 8 +-- .../method/sphericalvector/SparseMatrix.h | 8 +-- src/atlas/library/defines.h.in | 52 +++++++++++-------- .../sparse/MakeSparseMatrixStorageEigen.h | 8 +-- src/atlas/util/QhullSphericalTriangulation.cc | 24 +++------ 6 files changed, 53 insertions(+), 55 deletions(-) diff --git a/src/atlas/interpolation/Vector2D.h b/src/atlas/interpolation/Vector2D.h index 2983c1d50..d25ba0131 100644 --- a/src/atlas/interpolation/Vector2D.h +++ b/src/atlas/interpolation/Vector2D.h @@ -18,12 +18,12 @@ //#define EIGEN_DONT_ALIGN //#define EIGEN_DONT_VECTORIZE -ATLAS_START_WARNINGS_SUPPRESSION -ATLAS_SUPPRESS_INTEGER_SIGN_CHANGE_WARNINGS -ATLAS_SUPPRESS_UNREACHABLE_WARNINGS +ATLAS_SUPPRESS_WARNINGS_PUSH +ATLAS_SUPPRESS_WARNINGS_INTEGER_SIGN_CHANGE +ATLAS_SUPPRESS_WARNINGS_CODE_IS_UNREACHABLE #include #include -ATLAS_STOP_WARNINGS_SUPPRESSION +ATLAS_SUPPRESS_WARNINGS_POP #else #include diff --git a/src/atlas/interpolation/Vector3D.h b/src/atlas/interpolation/Vector3D.h index e183c2e84..22f0115b0 100644 --- a/src/atlas/interpolation/Vector3D.h +++ b/src/atlas/interpolation/Vector3D.h @@ -18,12 +18,12 @@ //#define EIGEN_DONT_ALIGN //#define EIGEN_DONT_VECTORIZE -ATLAS_START_WARNINGS_SUPPRESSION -ATLAS_SUPPRESS_INTEGER_SIGN_CHANGE_WARNINGS -ATLAS_SUPPRESS_UNREACHABLE_WARNINGS +ATLAS_SUPPRESS_WARNINGS_PUSH +ATLAS_SUPPRESS_WARNINGS_INTEGER_SIGN_CHANGE +ATLAS_SUPPRESS_WARNINGS_CODE_IS_UNREACHABLE #include #include -ATLAS_STOP_WARNINGS_SUPPRESSION +ATLAS_SUPPRESS_WARNINGS_POP #else #include diff --git a/src/atlas/interpolation/method/sphericalvector/SparseMatrix.h b/src/atlas/interpolation/method/sphericalvector/SparseMatrix.h index fbe810087..7315b86c3 100644 --- a/src/atlas/interpolation/method/sphericalvector/SparseMatrix.h +++ b/src/atlas/interpolation/method/sphericalvector/SparseMatrix.h @@ -13,11 +13,11 @@ #include "atlas/library/defines.h" #if ATLAS_HAVE_EIGEN -ATLAS_START_WARNINGS_SUPPRESSION -ATLAS_SUPPRESS_INTEGER_SIGN_CHANGE_WARNINGS -ATLAS_SUPPRESS_UNREACHABLE_WARNINGS +ATLAS_SUPPRESS_WARNINGS_PUSH +ATLAS_SUPPRESS_WARNINGS_INTEGER_SIGN_CHANGE +ATLAS_SUPPRESS_WARNINGS_CODE_IS_UNREACHABLE #include -ATLAS_STOP_WARNINGS_SUPPRESSION +ATLAS_SUPPRESS_WARNINGS_POP #endif #include "atlas/runtime/Exception.h" diff --git a/src/atlas/library/defines.h.in b/src/atlas/library/defines.h.in index 0d218acb7..92ca7bdaa 100644 --- a/src/atlas/library/defines.h.in +++ b/src/atlas/library/defines.h.in @@ -58,27 +58,37 @@ #define ATLAS_UNREACHABLE() __builtin_unreachable() #if defined(__NVCOMPILER) -# if !defined(ATLAS_START_WARNINGS_SUPPRESSION) -# define ATLAS_START_WARNINGS_SUPPRESSION _Pragma( "diag push" ) -# define ATLAS_STOP_WARNINGS_SUPPRESSION _Pragma( "diag pop" ) -# endif -# if !defined(ATLAS_SUPPRESS_INTEGER_SIGN_CHANGE_WARNINGS) -# define ATLAS_SUPPRESS_INTEGER_SIGN_CHANGE_WARNINGS _Pragma( "diag_suppress 68" ) -# endif -# if !defined(ATLAS_SUPPRESS_UNREACHABLE_WARNINGS) -# define ATLAS_SUPPRESS_UNREACHABLE_WARNINGS _Pragma( "diag_suppress 111" ) -# endif -#else -# if !defined(ATLAS_START_WARNINGS_SUPPRESSION) -# define ATLAS_START_WARNINGS_SUPPRESSION -# define ATLAS_STOP_WARNINGS_SUPPRESSION -# endif -# if !defined(ATLAS_SUPPRESS_INTEGER_SIGN_CHANGE_WARNINGS) -# define ATLAS_SUPPRESS_INTEGER_SIGN_CHANGE_WARNINGS -# endif -# if !defined(ATLAS_SUPPRESS_UNREACHABLE_WARNINGS) -# define ATLAS_SUPPRESS_UNREACHABLE_WARNINGS -# endif +# define ATLAS_SUPPRESS_WARNINGS_PUSH _Pragma( "diag push" ) +# define ATLAS_SUPPRESS_WARNINGS_POP _Pragma( "diag pop" ) +# define ATLAS_SUPPRESS_WARNINGS_INTEGER_SIGN_CHANGE _Pragma( "diag_suppress integer_sign_change" ) +# define ATLAS_SUPPRESS_WARNINGS_CODE_IS_UNREACHABLE _Pragma( "diag_suppress code_is_unreachable" ) +#elif defined(__INTEL_COMPILER) +# define ATLAS_SUPPRESS_WARNINGS_PUSH _Pragma( "warning push" ) +# define ATLAS_SUPPRESS_WARNINGS_POP _Pragma( "warning pop" ) +# define ATLAS_SUPPRESS_WARNINGS_INTEGER_SIGN_CHANGE _Pragma( "warning disable 68" ) +#elif defined(__GNUC__) +# define ATLAS_SUPPRESS_WARNINGS_PUSH _Pragma( "GCC diagnostic push" ) \ + _Pragma( "GCC diagnostic ignored \"-Wpragmas\"" ) \ + _Pragma( "GCC diagnostic ignored \"-Wunknown-warning-option\"" ) +# define ATLAS_SUPPRESS_WARNINGS_POP _Pragma( "GCC diagnostic pop" ) +# define ATLAS_SUPPRESS_WARNINGS_TEMPLATE_ID_CDTOR _Pragma( "GCC diagnostic ignored \"-Wtemplate-id-cdtor\"" ) #endif + +#if !defined(ATLAS_SUPPRESS_WARNINGS_PUSH) +# define ATLAS_SUPPRESS_WARNINGS_PUSH +#endif +#if !defined(ATLAS_SUPPRESS_WARNINGS_POP) +# define ATLAS_SUPPRESS_WARNINGS_POP +#endif +#if !defined(ATLAS_SUPPRESS_WARNINGS_INTEGER_SIGN_CHANGE) +# define ATLAS_SUPPRESS_WARNINGS_INTEGER_SIGN_CHANGE #endif +#if !defined(ATLAS_SUPPRESS_WARNINGS_CODE_IS_UNREACHABLE) +# define ATLAS_SUPPRESS_WARNINGS_CODE_IS_UNREACHABLE +#endif +#if !defined(ATLAS_SUPPRESS_WARNINGS_TEMPLATE_ID_CDTOR) +# define ATLAS_SUPPRESS_WARNINGS_TEMPLATE_ID_CDTOR +#endif + +#endif \ No newline at end of file diff --git a/src/atlas/linalg/sparse/MakeSparseMatrixStorageEigen.h b/src/atlas/linalg/sparse/MakeSparseMatrixStorageEigen.h index 1383ba3f4..369b79e8d 100644 --- a/src/atlas/linalg/sparse/MakeSparseMatrixStorageEigen.h +++ b/src/atlas/linalg/sparse/MakeSparseMatrixStorageEigen.h @@ -17,11 +17,11 @@ #include "atlas/library/defines.h" #if ATLAS_HAVE_EIGEN -ATLAS_START_WARNINGS_SUPPRESSION -ATLAS_SUPPRESS_INTEGER_SIGN_CHANGE_WARNINGS -ATLAS_SUPPRESS_UNREACHABLE_WARNINGS +ATLAS_SUPPRESS_WARNINGS_PUSH +ATLAS_SUPPRESS_WARNINGS_INTEGER_SIGN_CHANGE +ATLAS_SUPPRESS_WARNINGS_CODE_IS_UNREACHABLE #include -ATLAS_STOP_WARNINGS_SUPPRESSION +ATLAS_SUPPRESS_WARNINGS_POP #endif #include "atlas/array.h" diff --git a/src/atlas/util/QhullSphericalTriangulation.cc b/src/atlas/util/QhullSphericalTriangulation.cc index 376aa3a1c..2d658473c 100644 --- a/src/atlas/util/QhullSphericalTriangulation.cc +++ b/src/atlas/util/QhullSphericalTriangulation.cc @@ -9,18 +9,11 @@ #if ATLAS_HAVE_QHULL -#if defined(__GNUC__) -#pragma GCC diagnostic push -#pragma GCC diagnostic ignored "-Wpragmas" -#pragma GCC diagnostic ignored "-Wunknown-warning-option" -#pragma GCC diagnostic ignored "-Wtemplate-id-cdtor" -#endif - -#if defined(__INTEL_COMPILER) -#pragma warning push -#pragma warning disable 68 // integer conversion resulted in a change of sign -#endif - +// Suppress a few warnings present in third-party libqhullcpp +ATLAS_SUPPRESS_WARNINGS_PUSH +ATLAS_SUPPRESS_WARNINGS_INTEGER_SIGN_CHANGE +ATLAS_SUPPRESS_WARNINGS_CODE_IS_UNREACHABLE +ATLAS_SUPPRESS_WARNINGS_TEMPLATE_ID_CDTOR #include #include @@ -28,12 +21,7 @@ #include #include -#if defined(__GNUC__) -#pragma GCC diagnostic pop -#endif -#if defined(__INTEL_COMPILER) -#pragma warning pop -#endif +ATLAS_SUPPRESS_WARNINGS_POP #endif From b5074d4fb3898d1331a6e10da19814e874f61bc1 Mon Sep 17 00:00:00 2001 From: Willem Deconinck Date: Wed, 12 Feb 2025 09:45:41 +0000 Subject: [PATCH 06/17] Filter tests with MPI 4 and MPI_SLOTS --- src/tests/functionspace/CMakeLists.txt | 10 +++++----- src/tests/grid/CMakeLists.txt | 2 +- src/tests/interpolation/CMakeLists.txt | 6 +++--- src/tests/mesh/CMakeLists.txt | 4 ++-- src/tests/redistribution/CMakeLists.txt | 2 +- src/tests/trans/CMakeLists.txt | 4 ++-- src/tests/util/CMakeLists.txt | 2 +- 7 files changed, 15 insertions(+), 15 deletions(-) diff --git a/src/tests/functionspace/CMakeLists.txt b/src/tests/functionspace/CMakeLists.txt index e5b49c6c7..cd4e50721 100644 --- a/src/tests/functionspace/CMakeLists.txt +++ b/src/tests/functionspace/CMakeLists.txt @@ -15,7 +15,7 @@ if( HAVE_FCTEST ) add_fctest( TARGET atlas_fctest_functionspace MPI 4 - CONDITION eckit_HAVE_MPI AND (transi_HAVE_MPI OR ectrans_HAVE_MPI) + CONDITION eckit_HAVE_MPI AND (transi_HAVE_MPI OR ectrans_HAVE_MPI) AND MPI_SLOTS GREATER_EQUAL 4 LINKER_LANGUAGE Fortran SOURCES fctest_functionspace.F90 LIBS atlas_f @@ -24,7 +24,7 @@ if( HAVE_FCTEST ) add_fctest( TARGET atlas_fctest_blockstructuredcolumns MPI 4 - CONDITION eckit_HAVE_MPI + CONDITION eckit_HAVE_MPI AND MPI_SLOTS GREATER_EQUAL 4 LINKER_LANGUAGE Fortran SOURCES fctest_blockstructuredcolumns.F90 LIBS atlas_f @@ -41,7 +41,7 @@ ecbuild_add_test( TARGET atlas_test_functionspace ecbuild_add_test( TARGET atlas_test_functionspace_splitcomm MPI 4 - CONDITION eckit_HAVE_MPI + CONDITION eckit_HAVE_MPI AND MPI_SLOTS GREATER_EQUAL 4 SOURCES test_functionspace_splitcomm.cc LIBS atlas ENVIRONMENT ${ATLAS_TEST_ENVIRONMENT} @@ -148,7 +148,7 @@ ecbuild_add_test( TARGET atlas_test_stencil_parallel_mpi4 COMMAND atlas_test_stencil_parallel MPI 4 ENVIRONMENT ${ATLAS_TEST_ENVIRONMENT} - CONDITION eckit_HAVE_MPI + CONDITION eckit_HAVE_MPI AND MPI_SLOTS GREATER_EQUAL 4 ) ecbuild_add_test( TARGET atlas_test_stencil_parallel_mpi16 @@ -160,7 +160,7 @@ ecbuild_add_test( TARGET atlas_test_stencil_parallel_mpi16 set( _WITH_MPI ) if( eckit_HAVE_MPI ) - set( _WITH_MPI MPI 4 ) + set( _WITH_MPI MPI 4 CONDITION MPI_SLOTS GREATER_EQUAL 4) endif() ecbuild_add_executable( TARGET atlas_test_polygons diff --git a/src/tests/grid/CMakeLists.txt b/src/tests/grid/CMakeLists.txt index d537efc71..6f178cab2 100644 --- a/src/tests/grid/CMakeLists.txt +++ b/src/tests/grid/CMakeLists.txt @@ -57,7 +57,7 @@ ecbuild_add_test( TARGET atlas_test_distribution_regular_bands SOURCES test_distribution_regular_bands.cc LIBS atlas ENVIRONMENT ${ATLAS_TEST_ENVIRONMENT} - CONDITION atlas_HAVE_ATLAS_FUNCTIONSPACE + CONDITION atlas_HAVE_ATLAS_FUNCTIONSPACE AND MPI_SLOTS GREATER_EQUAL 4 ) diff --git a/src/tests/interpolation/CMakeLists.txt b/src/tests/interpolation/CMakeLists.txt index f88c5f5fe..ac79687b8 100644 --- a/src/tests/interpolation/CMakeLists.txt +++ b/src/tests/interpolation/CMakeLists.txt @@ -85,7 +85,7 @@ ecbuild_add_test( TARGET atlas_test_interpolation_structured2D_regional SOURCES test_interpolation_structured2D_regional.cc LIBS atlas MPI 2 - CONDITION eckit_HAVE_MPI + CONDITION eckit_HAVE_MPI AND MPI_SLOTS GREATER_EQUAL 2 ENVIRONMENT ${ATLAS_TEST_ENVIRONMENT} ) @@ -114,7 +114,7 @@ ecbuild_add_test( TARGET atlas_test_interpolation_structured2D_to_unstructured SOURCES test_interpolation_structured2D_to_unstructured.cc LIBS atlas MPI 2 - CONDITION eckit_HAVE_MPI + CONDITION eckit_HAVE_MPI AND MPI_SLOTS GREATER_EQUAL 2 ENVIRONMENT ${ATLAS_TEST_ENVIRONMENT} ) @@ -122,7 +122,7 @@ ecbuild_add_test( TARGET atlas_test_interpolation_structured2D_to_points SOURCES test_interpolation_structured2D_to_points.cc LIBS atlas MPI 4 - CONDITION eckit_HAVE_MPI + CONDITION eckit_HAVE_MPI AND MPI_SLOTS GREATER_EQUAL 4 ENVIRONMENT ${ATLAS_TEST_ENVIRONMENT} ) diff --git a/src/tests/mesh/CMakeLists.txt b/src/tests/mesh/CMakeLists.txt index 95aa8916b..7d4e429f8 100644 --- a/src/tests/mesh/CMakeLists.txt +++ b/src/tests/mesh/CMakeLists.txt @@ -89,7 +89,7 @@ ecbuild_add_test( ecbuild_add_test( TARGET atlas_test_mesh_node2cell MPI 4 - CONDITION eckit_HAVE_MPI + CONDITION eckit_HAVE_MPI AND MPI_SLOTS GREATER_EQUAL 4 SOURCES test_mesh_node2cell.cc LIBS atlas ENVIRONMENT ${ATLAS_TEST_ENVIRONMENT} @@ -97,7 +97,7 @@ ecbuild_add_test( TARGET atlas_test_mesh_node2cell ecbuild_add_test( TARGET atlas_test_meshgen_splitcomm MPI 4 - CONDITION eckit_HAVE_MPI + CONDITION eckit_HAVE_MPI AND MPI_SLOTS GREATER_EQUAL 4 SOURCES test_meshgen_splitcomm.cc LIBS atlas ENVIRONMENT ${ATLAS_TEST_ENVIRONMENT} diff --git a/src/tests/redistribution/CMakeLists.txt b/src/tests/redistribution/CMakeLists.txt index 904fcadcd..dcc96c7c0 100644 --- a/src/tests/redistribution/CMakeLists.txt +++ b/src/tests/redistribution/CMakeLists.txt @@ -10,7 +10,7 @@ if( atlas_HAVE_ATLAS_FUNCTIONSPACE ) if( HAVE_FORTRAN ) add_fctest( TARGET atlas_fctest_redistribution MPI 4 - CONDITION eckit_HAVE_MPI + CONDITION eckit_HAVE_MPI AND MPI_SLOTS GREATER_EQUAL 4 LINKER_LANGUAGE Fortran SOURCES fctest_redistribution.F90 LIBS atlas_f diff --git a/src/tests/trans/CMakeLists.txt b/src/tests/trans/CMakeLists.txt index f58e8d49c..f80f5ebf5 100644 --- a/src/tests/trans/CMakeLists.txt +++ b/src/tests/trans/CMakeLists.txt @@ -14,7 +14,7 @@ if( HAVE_FCTEST ) LINKER_LANGUAGE Fortran SOURCES fctest_trans.F90 LIBS atlas_f - CONDITION eckit_HAVE_MPI AND ( transi_HAVE_MPI OR ectrans_HAVE_MPI ) + CONDITION eckit_HAVE_MPI AND ( transi_HAVE_MPI OR ectrans_HAVE_MPI ) AND MPI_SLOTS GREATER_EQUAL 4 MPI 4 ENVIRONMENT ${ATLAS_TEST_ENVIRONMENT} ) @@ -40,7 +40,7 @@ endif() ecbuild_add_test( TARGET atlas_test_trans MPI 4 SOURCES test_trans.cc - CONDITION atlas_HAVE_ECTRANS AND eckit_HAVE_MPI AND ( transi_HAVE_MPI OR ectrans_HAVE_MPI ) + CONDITION atlas_HAVE_ECTRANS AND eckit_HAVE_MPI AND ( transi_HAVE_MPI OR ectrans_HAVE_MPI ) AND MPI_SLOTS GREATER_EQUAL 4 LIBS atlas transi ENVIRONMENT ${ATLAS_TEST_ENVIRONMENT} # There seems to be a issue with vd2uv raising FE_INVALID, only on specific arch (bamboo-leap42-gnu63) diff --git a/src/tests/util/CMakeLists.txt b/src/tests/util/CMakeLists.txt index 7c7262ccf..249fc8ef5 100644 --- a/src/tests/util/CMakeLists.txt +++ b/src/tests/util/CMakeLists.txt @@ -69,7 +69,7 @@ ecbuild_add_test( TARGET atlas_test_vector ecbuild_add_test( TARGET atlas_test_metadata MPI 4 - CONDITION eckit_HAVE_MPI + CONDITION eckit_HAVE_MPI AND MPI_SLOTS GREATER_EQUAL 4 SOURCES test_metadata.cc LIBS atlas ENVIRONMENT ${ATLAS_TEST_ENVIRONMENT} From ce134a1990a5dc87de8e22598d3c2f0c629b7198 Mon Sep 17 00:00:00 2001 From: Willem Deconinck Date: Fri, 14 Feb 2025 14:50:59 +0100 Subject: [PATCH 07/17] Add cmake option WARNING_AS_ERROR to add -Werror as CXX flag --- cmake/atlas_compile_flags.cmake | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/cmake/atlas_compile_flags.cmake b/cmake/atlas_compile_flags.cmake index 73d756673..27da77271 100644 --- a/cmake/atlas_compile_flags.cmake +++ b/cmake/atlas_compile_flags.cmake @@ -9,6 +9,14 @@ set(CMAKE_CXX_STANDARD 17) set(CMAKE_CXX_STANDARD_REQUIRED ON) +ecbuild_add_option( FEATURE WARNING_AS_ERROR + DEFAULT OFF + DESCRIPTION "Treat compile warning as error" ) + +if(HAVE_WARNING_AS_ERROR) + ecbuild_add_cxx_flags("-Werror" NO_FAIL NAME atlas_cxx_warning_as_error) +endif() + ecbuild_add_option( FEATURE WARNINGS DEFAULT ON DESCRIPTION "Add warnings to compiler" ) @@ -30,7 +38,7 @@ if( CMAKE_CXX_COMPILER_ID STREQUAL Intel ) ecbuild_add_cxx_flags("-diag-disable=10441" NO_FAIL) # Deprecated classic compiler endif() -if( CMAKE_Fortran_COMPILER_ID STREQUAL Intel) +if( CMAKE_Fortran_COMPILER_ID MATCHES Intel) # Both for Intel and Intel-LLVM ecbuild_add_fortran_flags("-diag-disable=5462" NO_FAIL) # Global name too long, shortened endif() From edfef7761b315093febe85408fba62bd8635e310 Mon Sep 17 00:00:00 2001 From: Willem Deconinck Date: Wed, 12 Feb 2025 10:02:56 +0000 Subject: [PATCH 08/17] Add SKIP_TEST_ for atlas_test_field_foreach and atlas_test_array_foreach --- src/tests/array/CMakeLists.txt | 1 + src/tests/field/CMakeLists.txt | 1 + 2 files changed, 2 insertions(+) diff --git a/src/tests/array/CMakeLists.txt b/src/tests/array/CMakeLists.txt index bc44cbf68..fa289bafe 100644 --- a/src/tests/array/CMakeLists.txt +++ b/src/tests/array/CMakeLists.txt @@ -17,6 +17,7 @@ ecbuild_add_test( TARGET atlas_test_array_foreach SOURCES test_array_foreach.cc LIBS atlas ENVIRONMENT ${ATLAS_TEST_ENVIRONMENT} + CONDITION NOT SKIP_TEST_atlas_test_array_foreach ) ecbuild_add_test( TARGET atlas_test_array diff --git a/src/tests/field/CMakeLists.txt b/src/tests/field/CMakeLists.txt index c740187f8..54c5497be 100644 --- a/src/tests/field/CMakeLists.txt +++ b/src/tests/field/CMakeLists.txt @@ -23,6 +23,7 @@ ecbuild_add_test( TARGET atlas_test_field_foreach LIBS atlas OMP 4 ENVIRONMENT ${ATLAS_TEST_ENVIRONMENT} + CONDITION NOT SKIP_TEST_atlas_test_field_foreach ) ecbuild_add_test( TARGET atlas_test_field_acc From 81b994c0c367b9e355f4a3b41ef61171979f6315 Mon Sep 17 00:00:00 2001 From: Willem Deconinck Date: Thu, 13 Feb 2025 17:42:08 +0100 Subject: [PATCH 09/17] Add cmake option to SKIP_TEST_atlas_test_omp_sort --- src/tests/parallel/CMakeLists.txt | 1 + 1 file changed, 1 insertion(+) diff --git a/src/tests/parallel/CMakeLists.txt b/src/tests/parallel/CMakeLists.txt index 4824b9ce1..9b265aadc 100644 --- a/src/tests/parallel/CMakeLists.txt +++ b/src/tests/parallel/CMakeLists.txt @@ -54,6 +54,7 @@ ecbuild_add_test( TARGET atlas_test_omp_sort SOURCES test_omp_sort.cc LIBS atlas ENVIRONMENT ${ATLAS_TEST_ENVIRONMENT} + CONDITION NOT SKIP_TEST_atlas_test_omp_sort ) ecbuild_add_test( TARGET atlas_test_omp_copy From 5d410897a257880569c94247d043ef0fd6fcc602 Mon Sep 17 00:00:00 2001 From: Willem Deconinck Date: Fri, 14 Feb 2025 13:45:05 +0100 Subject: [PATCH 10/17] Fix warnings for atlas_io --- atlas_io/CMakeLists.txt | 23 +++++++++++++++++++++++ atlas_io/src/atlas_io/Trace.cc | 2 +- atlas_io/tests/TestEnvironment.h | 21 +++++++++------------ 3 files changed, 33 insertions(+), 13 deletions(-) diff --git a/atlas_io/CMakeLists.txt b/atlas_io/CMakeLists.txt index 2a821b761..bb69c22c9 100644 --- a/atlas_io/CMakeLists.txt +++ b/atlas_io/CMakeLists.txt @@ -48,6 +48,29 @@ ecbuild_add_option( FEATURE ECKIT_CODEC set(CMAKE_CXX_STANDARD 17) set(CMAKE_CXX_STANDARD_REQUIRED ON) +ecbuild_add_option( FEATURE WARNING_AS_ERROR + DEFAULT OFF + DESCRIPTION "Treat compile warning as error" ) + +if(HAVE_WARNING_AS_ERROR) + ecbuild_add_cxx_flags("-Werror" NO_FAIL NAME atlas_io_cxx_warning_as_error) +endif() + +ecbuild_add_option( FEATURE WARNINGS + DEFAULT ON + DESCRIPTION "Add warnings to compiler" ) + +if(HAVE_WARNINGS) + ecbuild_add_cxx_flags("-Wall" NO_FAIL) + ecbuild_add_cxx_flags("-Wextra" NO_FAIL) + ecbuild_add_cxx_flags("-Wno-unused-parameter" NO_FAIL) + +endif() + +if( CMAKE_CXX_COMPILER_ID STREQUAL Intel ) + ecbuild_add_cxx_flags("-diag-disable=10441" NO_FAIL) # Deprecated classic compiler +endif() + check_cxx_source_compiles( "#include \n int main() { char * type; int status; char * r = abi::__cxa_demangle(type, 0, 0, &status); }" ATLAS_IO_HAVE_CXXABI_H ) diff --git a/atlas_io/src/atlas_io/Trace.cc b/atlas_io/src/atlas_io/Trace.cc index 5e52b7dc9..96fadf06b 100644 --- a/atlas_io/src/atlas_io/Trace.cc +++ b/atlas_io/src/atlas_io/Trace.cc @@ -31,7 +31,7 @@ Trace::Trace(const eckit::CodeLocation& loc, const std::string& title) { } } -Trace::Trace(const eckit::CodeLocation& loc, const std::string& title, const Labels& labels) { +Trace::Trace(const eckit::CodeLocation& loc, const std::string& title, const Labels&) { for (size_t id = 0; id < TraceHookRegistry::size(); ++id) { if (TraceHookRegistry::enabled(id)) { hooks_.emplace_back(TraceHookRegistry::hook(id)(loc, title)); diff --git a/atlas_io/tests/TestEnvironment.h b/atlas_io/tests/TestEnvironment.h index 7b66cee8f..0eb104247 100644 --- a/atlas_io/tests/TestEnvironment.h +++ b/atlas_io/tests/TestEnvironment.h @@ -88,10 +88,7 @@ Test& current_test() { //---------------------------------------------------------------------------------------------------------------------- #ifdef MAYBE_UNUSED -#elif defined(__GNUC__) -#define MAYBE_UNUSED __attribute__((unused)) -#else -#define MAYBE_UNUSED +#define MAYBE_UNUSED [[maybe_unused]] #endif #ifdef EXPECT_EQ @@ -212,7 +209,7 @@ std::string expect_message(const std::string& condition, const T1& lhs, const T2 namespace { -int digits(int number) { +[[maybe_unused]] int digits(int number) { int d = 0; while (number) { number /= 10; @@ -221,14 +218,14 @@ int digits(int number) { return d; } -static std::string debug_prefix(const std::string& libname) { +[[maybe_unused]] std::string debug_prefix(const std::string& libname) { std::string s = libname; std::transform(s.begin(), s.end(), s.begin(), ::toupper); s += "_DEBUG"; return s; } -void debug_addTarget(eckit::LogTarget* target) { +[[maybe_unused]] void debug_addTarget(eckit::LogTarget* target) { for (std::string libname : eckit::system::Library::list()) { const eckit::system::Library& lib = eckit::system::Library::lookup(libname); if (lib.debug()) { @@ -239,7 +236,7 @@ void debug_addTarget(eckit::LogTarget* target) { eckit::Log::debug().addTarget(target); } -void debug_setTarget(eckit::LogTarget* target) { +[[maybe_unused]] void debug_setTarget(eckit::LogTarget* target) { for (std::string libname : eckit::system::Library::list()) { const eckit::system::Library& lib = eckit::system::Library::lookup(libname); if (lib.debug()) { @@ -250,7 +247,7 @@ void debug_setTarget(eckit::LogTarget* target) { eckit::Log::debug().setTarget(target); } -void debug_reset() { +[[maybe_unused]] void debug_reset() { for (std::string libname : eckit::system::Library::list()) { const eckit::system::Library& lib = eckit::system::Library::lookup(libname); if (lib.debug()) { @@ -261,21 +258,21 @@ void debug_reset() { eckit::Log::debug().reset(); } -bool getEnv(const std::string& env, bool default_value) { +[[maybe_unused]] bool getEnv(const std::string& env, bool default_value) { if (::getenv(env.c_str())) { return eckit::Translator()(::getenv(env.c_str())); } return default_value; } -int getEnv(const std::string& env, int default_value) { +[[maybe_unused]] int getEnv(const std::string& env, int default_value) { if (::getenv(env.c_str())) { return eckit::Translator()(::getenv(env.c_str())); } return default_value; } -void setEnv(const std::string& env, bool value) { +[[maybe_unused]] void setEnv(const std::string& env, bool value) { constexpr int DO_NOT_REPLACE_IF_EXISTS = 0; ::setenv(env.c_str(), eckit::Translator()(value).c_str(), DO_NOT_REPLACE_IF_EXISTS); } From b7c1e8e964753ef2e110cfd3a79d6299215aca02 Mon Sep 17 00:00:00 2001 From: Willem Deconinck Date: Fri, 14 Feb 2025 13:46:35 +0100 Subject: [PATCH 11/17] Fix warnings for hic --- hic/CMakeLists.txt | 21 +++++++++++++++++++++ hic/src/hic/hic_dummy/hic_dummy_runtime.h | 2 +- hic/tests/test_hic_dummy.cc | 2 +- 3 files changed, 23 insertions(+), 2 deletions(-) diff --git a/hic/CMakeLists.txt b/hic/CMakeLists.txt index a2f54ebb9..dc6b051a7 100644 --- a/hic/CMakeLists.txt +++ b/hic/CMakeLists.txt @@ -38,6 +38,27 @@ elseif( HAVE_HIP ) find_package(hipsparse CONFIG REQUIRED) endif() +ecbuild_add_option( FEATURE WARNING_AS_ERROR + DEFAULT OFF + DESCRIPTION "Treat compile warning as error" ) + +if(HAVE_WARNING_AS_ERROR) + ecbuild_add_cxx_flags("-Werror" NO_FAIL NAME hic_cxx_warning_as_error) +endif() + +ecbuild_add_option( FEATURE WARNINGS + DEFAULT ON + DESCRIPTION "Add warnings to compiler" ) + +if(HAVE_WARNINGS) + ecbuild_add_cxx_flags("-Wall" NO_FAIL) + ecbuild_add_cxx_flags("-Wextra" NO_FAIL) +endif() + +if( CMAKE_CXX_COMPILER_ID STREQUAL Intel ) + ecbuild_add_cxx_flags("-diag-disable=10441" NO_FAIL) # Deprecated classic compiler +endif() + add_subdirectory( src ) add_subdirectory( tests ) diff --git a/hic/src/hic/hic_dummy/hic_dummy_runtime.h b/hic/src/hic/hic_dummy/hic_dummy_runtime.h index bcf776926..9c560d609 100644 --- a/hic/src/hic/hic_dummy/hic_dummy_runtime.h +++ b/hic/src/hic/hic_dummy/hic_dummy_runtime.h @@ -13,7 +13,7 @@ #define DUMMY_SHOULD_NOT_BE_CALLED(SYMBOL) dummyShouldNotBeCalled( #SYMBOL ) #define DUMMY_FUNCTION(SYMBOL) \ template inline \ - dummyError_t dummy##SYMBOL(Args&&... args) { \ + dummyError_t dummy##SYMBOL(Args&&...) { \ DUMMY_SHOULD_NOT_BE_CALLED( hic##SYMBOL ); \ return dummyError_t{0}; \ } diff --git a/hic/tests/test_hic_dummy.cc b/hic/tests/test_hic_dummy.cc index cb78b8186..45f680c12 100644 --- a/hic/tests/test_hic_dummy.cc +++ b/hic/tests/test_hic_dummy.cc @@ -34,7 +34,7 @@ int test_throw() { std::vector> tests = { test_throw }; -int main(int argc, char* argv[]) { +int main(int /*argc*/, char** /*argv*/) { int error = 0; for( auto& test: tests) { error += test(); From 997ae0046a24071a96bd9b99bed2769f53f73f9a Mon Sep 17 00:00:00 2001 From: Willem Deconinck Date: Thu, 13 Feb 2025 13:20:33 +0100 Subject: [PATCH 12/17] GHA build: Update action (using github-hosted-runners) --- .github/workflows/build.yml | 134 +++++++++++++++++++----------------- tools/install-nvhpc.sh | 13 ++-- 2 files changed, 81 insertions(+), 66 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index b7037788f..f04960e7a 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -33,17 +33,18 @@ jobs: name: - linux gnu-10 - linux gnu-12 - - linux gnu-7 - - linux clang-12 -# - linux nvhpc-22.11 + - linux gnu-14 + - linux clang-13 + - linux clang-18 - linux intel - linux intel-classic + - linux nvhpc-25.1 - macos include: - name: linux gnu-10 - os: ubuntu-20.04 + os: ubuntu-22.04 compiler: gnu-10 compiler_cc: gcc-10 compiler_cxx: g++-10 @@ -52,57 +53,43 @@ jobs: coverage: true - name: linux gnu-12 - os: ubuntu-22.04 + os: ubuntu-24.04 compiler: gnu-12 compiler_cc: gcc-12 compiler_cxx: g++-12 compiler_fc: gfortran-12 - cmake_options: -DENABLE_OMP_CXX=OFF caching: true coverage: false - - name: linux gnu-7 - os: ubuntu-20.04 - compiler: gnu-7 - compiler_cc: gcc-7 - compiler_cxx: g++-7 - compiler_fc: gfortran-7 + - name: linux gnu-14 + os: ubuntu-24.04 + compiler: gnu-14 + compiler_cc: gcc-14 + compiler_cxx: g++-14 + compiler_fc: gfortran-14 caching: true coverage: false - - name: linux clang-12 - os: ubuntu-20.04 - compiler: clang-12 - compiler_cc: clang-12 - compiler_cxx: clang++-12 + - name: linux clang-13 + os: ubuntu-22.04 + compiler: clang-13 + compiler_cc: clang-13 + compiler_cxx: clang++-13 compiler_fc: gfortran-10 caching: true coverage: false - - name: linux clang-12 - build_type: Release - os: ubuntu-20.04 - compiler: clang-12 - compiler_cc: clang-12 - compiler_cxx: clang++-12 - compiler_fc: gfortran-10 - ctest_options: "-LE mpi" # For now until Checkerboard fixed + - name: linux clang-18 + os: ubuntu-24.04 + compiler: clang-18 + compiler_cc: clang-18 + compiler_cxx: clang++-18 + compiler_fc: gfortran-14 caching: true coverage: false -# - name: linux nvhpc-22.11 -# os: ubuntu-20.04 -# compiler: nvhpc-22.11 -# compiler_cc: nvc -# compiler_cxx: nvc++ -# compiler_fc: nvfortran -# cmake_options: -DCMAKE_CXX_FLAGS=--diag_suppress177 -# ctest_options: "-LE mpi" # For now until Checkerboard fixed -# caching: false -# coverage: false - - name : linux intel - os: ubuntu-20.04 + os: ubuntu-24.04 compiler: intel compiler_cc: icx compiler_cxx: icpx @@ -111,7 +98,7 @@ jobs: coverage: false - name : linux intel-classic - os: ubuntu-20.04 + os: ubuntu-22.04 compiler: intel-classic compiler_cc: icc compiler_cxx: icpc @@ -119,6 +106,15 @@ jobs: caching: true coverage: false + - name: linux nvhpc-25.1 + os: ubuntu-24.04 + compiler: nvhpc-25.1 + compiler_cc: nvc + compiler_cxx: nvc++ + compiler_fc: nvfortran + caching: true + coverage: false + - name: macos # Xcode compiler requires empty environment variables, so we pass null (~) here os: macos-14 @@ -157,28 +153,46 @@ jobs: brew install libomp else sudo apt-get update - if [[ "${{ matrix.compiler }}" =~ gnu-7 ]]; then - sudo apt-get install gcc-7 g++-7 gfortran-7 + if [[ "${{ matrix.compiler }}" =~ gnu ]]; then + sudo apt-get install -y libomp5 libomp-dev fi sudo apt-get install ninja-build fi printenv - - name: Cache Dependencies - # There seems to be a problem with cached NVHPC dependencies, leading to SIGILL perhaps due to slightly different architectures + - name: Free Disk Space (Ubuntu) + # Free up disk space for nvhpc + uses: jlumbroso/free-disk-space@main + if: contains( matrix.compiler, 'nvhpc' ) + continue-on-error: true + with: + # this might remove tools that are actually needed, + # if set to "true" but frees about 6 GB + tool-cache: false + + # all of these default to true, but feel free to set to + # "false" if necessary for your workflow + android: true + dotnet: true + haskell: true + large-packages: false # takes too long + docker-images: false # takes too long + swap-storage: true + + - name: Retrieve cached dependencies if: matrix.caching - id: deps-cache - uses: pat-s/always-upload-cache@v2.1.5 + id: deps-restore-cache + uses: actions/cache/restore@v4 with: path: ${{ env.DEPS_DIR }} - key: deps-${{ matrix.os }}-${{ matrix.compiler }}-v1 + key: deps-${{ matrix.os }}-${{ matrix.compiler }}-${{ env.CACHE_SUFFIX }} - name: Install NVHPC compiler if: contains( matrix.compiler, 'nvhpc' ) shell: bash -eux {0} run: | - ${ATLAS_TOOLS}/install-nvhpc.sh --prefix ${DEPS_DIR}/nvhpc --version 22.11 + ${ATLAS_TOOLS}/install-nvhpc.sh --prefix ${DEPS_DIR}/nvhpc --version 25.1 source ${DEPS_DIR}/nvhpc/env.sh echo "${NVHPC_DIR}/compilers/bin" >> $GITHUB_PATH [ -z ${MPI_HOME+x} ] || echo "MPI_HOME=${MPI_HOME}" >> $GITHUB_ENV @@ -205,6 +219,7 @@ jobs: echo "FFTW_ROOT=${DEPS_DIR}/fftw" >> $GITHUB_ENV - name: Install Qhull + if: "!contains( matrix.compiler, 'intel-classic' )" shell: bash -eux {0} run: | ${ATLAS_TOOLS}/install-qhull.sh --version 8.1-alpha3 --prefix ${DEPS_DIR}/qhull @@ -221,6 +236,15 @@ jobs: run: | brew install eigen + - name: Save cached dependencies + # There seems to be a problem with cached NVHPC dependencies, leading to SIGILL perhaps due to slightly different architectures + if: matrix.caching && matrix.build_type == 'Debug' + id: deps-save-cache + uses: actions/cache/save@v4 + with: + path: ${{ env.DEPS_DIR }} + key: ${{ steps.deps-restore-cache.outputs.cache-primary-key }} + - name: Set Build & Test Environment run: | @@ -230,20 +254,6 @@ jobs: # Add mpirun to path for testing [ -z ${MPI_HOME+x} ] || echo "${MPI_HOME}/bin" >> $GITHUB_PATH - if [[ "${{matrix.compiler}}" == intel-classic ]]; then - echo "CFLAGS=-diag-disable=10441" >> $GITHUB_ENV - echo "CXXFLAGS=-diag-disable=10441" >> $GITHUB_ENV - echo "FCFLAGS=-diag-disable=10441" >> $GITHUB_ENV - echo "FFLAGS=-diag-disable=10441" >> $GITHUB_ENV - fi - - if [[ "${{matrix.compiler}}" == intel ]]; then - echo "CFLAGS=-Rno-debug-disables-optimization" >> $GITHUB_ENV - echo "CXXFLAGS=-Rno-debug-disables-optimization" >> $GITHUB_ENV - fi - - - - name: Build & Test id: build-test uses: ecmwf-actions/build-package@v2 @@ -258,9 +268,9 @@ jobs: ecmwf/fckit dependency_branch: develop dependency_cmake_options: | - ecmwf/eckit: "-G Ninja -DCMAKE_BUILD_TYPE=${{ matrix.build_type }} -DENABLE_TESTS=OFF -DENABLE_ECKIT_CMD=OFF -DENABLE_ECKIT_SQL=OFF" + ecmwf/eckit: "-G Ninja -DCMAKE_BUILD_TYPE=${{ matrix.build_type }} -DENABLE_TESTS=OFF -DENABLE_ECKIT_CMD=OFF -DENABLE_ECKIT_SQL=OFF -DENABLE_WARNINGS=OFF" ecmwf/fckit: "-G Ninja -DCMAKE_BUILD_TYPE=${{ matrix.build_type }} -DENABLE_TESTS=OFF" - cmake_options: "-G Ninja -DCMAKE_BUILD_TYPE=${{ matrix.build_type }} -DATLAS_BITS_LOCAL=32 ${{ matrix.cmake_options }}" + cmake_options: "-G Ninja -DCMAKE_BUILD_TYPE=${{ matrix.build_type }} -DATLAS_BITS_LOCAL=64 -DENABLE_WARNING_AS_ERROR=ON ${{ matrix.cmake_options }}" ctest_options: "${{ matrix.ctest_options }}" - name: Verify tools diff --git a/tools/install-nvhpc.sh b/tools/install-nvhpc.sh index 8a8f33248..af0a0315f 100755 --- a/tools/install-nvhpc.sh +++ b/tools/install-nvhpc.sh @@ -1,4 +1,4 @@ -#!/bin/sh +#!/bin/bash # Install NVHPC # https://github.com/nemequ/pgi-travis @@ -12,7 +12,11 @@ # See for # details. -version=21.9 +set -e +set -u +set -o pipefail + +version=25.1 TEMPORARY_FILES="${TMPDIR:-/tmp}" export NVHPC_INSTALL_DIR=$(pwd)/nvhpc-install @@ -49,10 +53,10 @@ case "$(uname -m)" in esac if [ -d "${NVHPC_INSTALL_DIR}" ]; then - if [[ $(find "${NVHPC_INSTALL_DIR}" -name "nvc" | wc -l) == 1 ]]; then + #if [[ $(find "${NVHPC_INSTALL_DIR}" -name "nvc" | wc -l) == 1 ]]; then echo "NVHPC already installed at ${NVHPC_INSTALL_DIR}" exit - fi + #fi fi # Example download URL for version 21.9 @@ -105,3 +109,4 @@ EOF cat ${NVHPC_INSTALL_DIR}/env.sh +date '+%Y.%m.%d-%H:%M:%S' > install.timestamp From e53a53578d943950b313f58cd65411339a8b6fe7 Mon Sep 17 00:00:00 2001 From: Willem Deconinck Date: Fri, 14 Feb 2025 15:04:24 +0100 Subject: [PATCH 13/17] GHA build: Skip atlas_test_omp_sort for nvhpc 25.1 (problem in Release build only) --- .github/workflows/build.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index f04960e7a..e6cbfe5e2 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -114,6 +114,7 @@ jobs: compiler_fc: nvfortran caching: true coverage: false + cmake_options: -DSKIP_TEST_atlas_test_omp_sort=TRUE - name: macos # Xcode compiler requires empty environment variables, so we pass null (~) here From a067abc2fdf2a20ce3e4834230d53beacb6ca805 Mon Sep 17 00:00:00 2001 From: Willem Deconinck Date: Tue, 18 Feb 2025 09:11:54 +0100 Subject: [PATCH 14/17] GHA build: Add open-mpi version to CACHE_SUFFIX for macos to prevent failures with homebrew upgrades --- .github/workflows/build.yml | 3 +++ tools/install-mpi.sh | 2 +- 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index e6cbfe5e2..e2c9fa7db 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -210,6 +210,9 @@ jobs: shell: bash -eux {0} run: | FCFLAGS=-fPIC CFLAGS=-fPIC FFLAGS=-fPIC ${ATLAS_TOOLS}/install-mpi.sh --mpi openmpi --prefix ${DEPS_DIR}/openmpi + if [[ "${{ matrix.os }}" =~ macos ]]; then + echo "CACHE_SUFFIX=${CACHE_SUFFIX}-mpi_$(mpirun --version | head -1 | awk '{print $4}')" >> $GITHUB_ENV + fi [ -f ${DEPS_DIR}/openmpi/env.sh ] && source ${DEPS_DIR}/openmpi/env.sh [ -z ${MPI_HOME+x} ] || echo "MPI_HOME=${MPI_HOME}" >> $GITHUB_ENV diff --git a/tools/install-mpi.sh b/tools/install-mpi.sh index c5c1847ae..51573a256 100755 --- a/tools/install-mpi.sh +++ b/tools/install-mpi.sh @@ -60,7 +60,7 @@ case "$os" in brew ls --versions mpich || brew install mpich ;; openmpi) - brew ls --versions openmpi || brew install openmpi + brew ls --versions open-mpi || brew install open-mpi echo "localhost slots=72" >> $(brew --prefix)/etc/openmpi-default-hostfile echo "localhost slots=72" >> $(brew --prefix)/etc/prte-default-hostfile From bcb97f92ca6dd1a1536bb208b5a456db64c26554 Mon Sep 17 00:00:00 2001 From: Willem Deconinck Date: Fri, 7 Feb 2025 17:20:43 +0000 Subject: [PATCH 15/17] Add GHA build-hpc running on ECMWF GPU partition --- .github/workflows/build-hpc.yml | 222 ++++++++++++++++++++++++++++++++ 1 file changed, 222 insertions(+) create mode 100644 .github/workflows/build-hpc.yml diff --git a/.github/workflows/build-hpc.yml b/.github/workflows/build-hpc.yml new file mode 100644 index 000000000..740584e4e --- /dev/null +++ b/.github/workflows/build-hpc.yml @@ -0,0 +1,222 @@ +name: build-hpc + +# Controls when the action will run +on: + + # Trigger the workflow on all pushes to main and develop, except on tag creation + push: + branches: + - main + - develop + - ci + tags-ignore: + - '**' + + # Trigger the workflow on all pull requests + pull_request: ~ + + # Allow workflow to be dispatched on demand + workflow_dispatch: ~ + + # Trigger after public PR approved for CI + pull_request_target: + types: [labeled] + +env: + ATLAS_TOOLS: ${{ github.workspace }}/tools + CTEST_PARALLEL_LEVEL: 1 + CACHE_SUFFIX: v1 # Increase to force new cache to be created + +jobs: + ci-hpc: + name: ci-hpc + if: ${{ !github.event.pull_request.head.repo.fork && github.event.action != 'labeled' || github.event.label.name == 'approved-for-ci' }} + + strategy: + fail-fast: false # false: try to complete all jobs + + matrix: + name: + - ac-gpu nvhpc + + include: + - name: ac-gpu nvhpc + site: ac-batch + troika_user_secret: HPC_CI_GPU_SSH_USER + sbatch_options: | + #SBATCH --time=00:20:00 + #SBATCH --nodes=1 + #SBATCH --ntasks=4 + #SBATCH --cpus-per-task=32 + #SBATCH --gpus-per-task=1 + #SBATCH --mem=200G + #SBATCH --qos=dg + modules: + - cmake + - ninja + - prgenv/nvidia + - hpcx-openmpi/2.14.0-cuda + - fftw + - qhull + - eigen + cmake_options: -DMPI_SLOTS=4 -DENABLE_WARNING_AS_ERROR=ON + + runs-on: [self-hosted, linux, hpc] + env: + GH_TOKEN: ${{ github.token }} + steps: + - uses: ecmwf-actions/reusable-workflows/ci-hpc-generic@v2 + with: + site: ${{ matrix.site }} + troika_user: ${{ secrets[matrix.troika_user_secret] }} + sbatch_options: ${{ matrix.sbatch_options }} + output_dir: ${{ matrix.output_dir || '' }} + workdir: ${{ matrix.workdir || '' }} + template_data: | + cmake_options: + - -DENABLE_MPI=ON + - -DENABLE_ACC=ON + - -DENABLE_CUDA=ON + - -DSKIP_TEST_atlas_test_field_foreach=TRUE + - ${{ matrix.cmake_options || '' }} + ctest_options: ${{ matrix.ctest_options || '' }} + dependencies: + ecmwf/ecbuild: + version: develop + ecmwf/eckit: + version: develop + cmake_options: + - -DENABLE_MPI=ON + - -DENABLE_CUDA=OFF + - -DENABLE_TESTS=OFF + - -DENABLE_ECKIT_SQL=OFF + - -DENABLE_ECKIT_CMD=OFF + - -DENABLE_AIO=OFF + - -DENABLE_WARNINGS=OFF + - ${{ matrix.cmake_options || '' }} + ecmwf/fckit: + version: develop + cmake_options: + - -DENABLE_TESTS=OFF + - ${{ matrix.cmake_options || '' }} + ecmwf-ifs/fiat: + version: develop + cmake_options: + - -DENABLE_MPI=ON + - -DENABLE_TESTS=OFF + - ${{ matrix.cmake_options || '' }} + ecmwf-ifs/ectrans: + version: develop + cmake_options: + - -DENABLE_MPI=ON + - -DENABLE_ACC=ON + - -DENABLE_GPU=ON + - -DENABLE_TESTS=OFF + - ${{ matrix.cmake_options || '' }} + + template: | + set +x + module_load() { + echo "+ module load $1" + module load $1 + } + {% for module in "${{ join(matrix.modules, ',') }}".split(',') %} + module_load {{module}} + {% endfor %} + echo "+ module list" + module list + BASEDIR=$PWD + export CMAKE_TEST_LAUNCHER="srun;-n;1" + export CMAKE_PREFIX_PATH=$BASEDIR/install:$CMAKE_PREFIX_PATH + {% for repo_name, options in dependencies.items() %} + name=$(basename {{repo_name}}) + echo "::group::Get dependency $name" + echo "+ mkdir -p $name" + mkdir -p $name + echo "+ pushd $name" + pushd $name + echo "+ git init" + git init + echo "+ git remote add origin ${{ github.server_url }}/{{repo_name}}" + git remote add origin ${{ github.server_url }}/{{repo_name}} + echo "+ git fetch origin {{options['version']}}" + git fetch origin {{options['version']}} + echo "+ git reset --hard FETCH_HEAD" + git reset --hard FETCH_HEAD + echo "+ cmake -G Ninja -S . -B build {{ options['cmake_options']|join(' ') }}" + cmake -G Ninja -S . -B build {{ options['cmake_options']|join(' ') }} + start=`date +%s` + echo "+ cmake --build build" + cmake --build build + end=`date +%s` + runtime=$((end-start)) + echo "Build $name took $runtime seconds" + echo "+ cmake --install build --prefix \$BASEDIR/install/$name" + cmake --install build --prefix $BASEDIR/install/$name + echo "+ export PATH=\$BASEDIR/install/$name/bin:\$PATH" + export PATH=$BASEDIR/install/$name/bin:$PATH + echo "+ popd" + popd + echo "::endgroup::" + {% endfor %} + REPO=${{ github.event.pull_request.head.repo.full_name || github.repository }} + SHA=${{ github.event.pull_request.head.sha || github.sha }} + name=$(basename $REPO) + echo "::group::Checkout $name" + echo "+ mkdir -p $name" + mkdir -p $name + echo "+ pushd $name" + pushd $name + echo "+ git init" + git init + echo "+ git remote add origin ${{ github.server_url }}/$REPO" + git remote add origin ${{ github.server_url }}/$REPO + echo "+ git fetch origin $SHA" + git fetch origin $SHA + echo "+git reset --hard FETCH_HEAD" + git reset --hard FETCH_HEAD + echo "+ popd" + popd + echo "::endgroup::" + + echo "::group::Build $name" + echo "+ cmake -G Ninja -S $name -B build {{ cmake_options|join(' ') }}" + cmake -G Ninja -S $name -B build {{ cmake_options|join(' ') }} + start=`date +%s` + echo "+ cmake --build build" + cmake --build build + end=`date +%s` + runtime=$((end-start)) + echo "Build $name took $runtime seconds" + echo "::endgroup::" + + echo "::group::Test $name" + export ATLAS_FINALISES_MPI=1 + echo "+ ctest --test-dir build --output-on-failure {{ ctest_options }}" + ctest --test-dir build --output-on-failure {{ ctest_options }} + echo "::endgroup::" + + echo "::group::Install $name" + echo "+ cmake --install build --prefix $BASEDIR/install/$name" + cmake --install build --prefix $BASEDIR/install/$name + echo "+ export PATH=\$BASEDIR/install/$name/bin:\$PATH" + export PATH=$BASEDIR/install/$name/bin:$PATH + echo "::endgroup::" + + echo "::group::Verify $name installation" + echo "+ atlas --info" + atlas --info + echo "::endgroup::" + + echo "::group::Cleanup" + set -x + rm -r $name + rm -r build + rm -r $BASEDIR/install + {% for repo_name in dependencies.keys() %} + name=$(basename {{repo_name}}) + rm -r $name + {% endfor %} + + echo "::endgroup::" + set +x From 7e474ad7a6e31c8ab78bcd923fc1225b92c28330 Mon Sep 17 00:00:00 2001 From: Willem Deconinck Date: Mon, 17 Feb 2025 11:17:21 +0100 Subject: [PATCH 16/17] GHA: Run ci for ci branch --- .github/workflows/ci.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 791bee0c6..2027db2d9 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -6,6 +6,7 @@ on: branches: - 'master' - 'develop' + - 'ci' tags-ignore: - '**' From 360f43cf7a56777f6ebe472620d13771c7c97df4 Mon Sep 17 00:00:00 2001 From: Willem Deconinck Date: Mon, 17 Feb 2025 11:17:59 +0100 Subject: [PATCH 17/17] Version 0.41.1 --- CHANGELOG.md | 9 +++++++++ VERSION | 2 +- 2 files changed, 10 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 88182c3e8..ec8e88ff8 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -7,6 +7,14 @@ This project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0.html ## [Unreleased] +## [0.41.1] - 2025-02-18 + +### Fixed + +- 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 ### Added @@ -602,6 +610,7 @@ Fix StructuredInterpolation2D with retry for failed stencils ## 0.13.0 - 2018-02-16 [Unreleased]: https://github.com/ecmwf/atlas/compare/master...develop +[0.41.1]: https://github.com/ecmwf/atlas/compare/0.41.0...0.41.1 [0.41.0]: https://github.com/ecmwf/atlas/compare/0.40.0...0.41.0 [0.40.0]: https://github.com/ecmwf/atlas/compare/0.39.0...0.40.0 [0.39.0]: https://github.com/ecmwf/atlas/compare/0.38.1...0.39.0 diff --git a/VERSION b/VERSION index 72a8a6313..9ed317fb4 100644 --- a/VERSION +++ b/VERSION @@ -1 +1 @@ -0.41.0 +0.41.1