From d1221c1cd72bd2f929c25e80a621fc9a688fa61a Mon Sep 17 00:00:00 2001 From: Weiqun Zhang Date: Sat, 11 Jan 2025 16:22:16 -0800 Subject: [PATCH] std::clamp -> amrex::Clamp std::clamp is a constexpr function, and it is supposed to work in device code. However, std::clamp in gcc 14 seems to be incompatible with clang. This is causing clang based HIP compiler to fail on systems using gcc 14 libstd as reported by multiple users. Here we work around the issue by using amrex::Clamp instead. --- Src/EB/AMReX_EBDataCollection.cpp | 27 +++++++++++++-------------- 1 file changed, 13 insertions(+), 14 deletions(-) diff --git a/Src/EB/AMReX_EBDataCollection.cpp b/Src/EB/AMReX_EBDataCollection.cpp index f9b3d66c79c..1c6beabf4f1 100644 --- a/Src/EB/AMReX_EBDataCollection.cpp +++ b/Src/EB/AMReX_EBDataCollection.cpp @@ -3,9 +3,8 @@ #include #include #include - #include -#include +#include #include namespace amrex { @@ -128,13 +127,13 @@ void EBDataCollection::extendDataOutsideDomain (IntVect const& level_ng) amrex::ParallelFor(nbx, [=] AMREX_GPU_DEVICE (int i, int j, int k) { if (! level_nodal_domain.contains(i,j,k)) { - int ii = std::clamp(i, level_nodal_domain.smallEnd(0), - level_nodal_domain.bigEnd(0)); - int jj = std::clamp(j, level_nodal_domain.smallEnd(1), - level_nodal_domain.bigEnd(1)); + int ii = amrex::Clamp(i, level_nodal_domain.smallEnd(0), + level_nodal_domain.bigEnd (0)); + int jj = amrex::Clamp(j, level_nodal_domain.smallEnd(1), + level_nodal_domain.bigEnd (1)); #if (AMREX_SPACEDIM > 2) - int kk = std::clamp(k, level_nodal_domain.smallEnd(2), - level_nodal_domain.bigEnd(2)); + int kk = amrex::Clamp(k, level_nodal_domain.smallEnd(2), + level_nodal_domain.bigEnd (2)); #else int kk = 0; #endif @@ -145,13 +144,13 @@ void EBDataCollection::extendDataOutsideDomain (IntVect const& level_ng) { if (! level_domain.contains(i,j,k)) { EBCellFlag flag; - int ii = std::clamp(i, level_domain.smallEnd(0), - level_domain.bigEnd(0)); - int jj = std::clamp(j, level_domain.smallEnd(1), - level_domain.bigEnd(1)); + int ii = amrex::Clamp(i, level_domain.smallEnd(0), + level_domain.bigEnd (0)); + int jj = amrex::Clamp(j, level_domain.smallEnd(1), + level_domain.bigEnd (1)); #if (AMREX_SPACEDIM > 2) - int kk = std::clamp(k, level_domain.smallEnd(2), - level_domain.bigEnd(2)); + int kk = amrex::Clamp(k, level_domain.smallEnd(2), + level_domain.bigEnd (2)); #else int kk = 0; #endif