From c9dab843cfd923bf88a7fbcadb7c672fecb53966 Mon Sep 17 00:00:00 2001 From: rochi00 Date: Fri, 8 May 2026 15:04:37 -0600 Subject: [PATCH 01/46] Add Kokkos configuration and device plumbing --- include/base/libmesh_common.h | 45 ++++++++--- include/base/libmesh_device.h | 74 +++++++++++++++++ include/base/libmesh_exceptions.h | 7 ++ include/libmesh_config.h.in | 3 + m4/libmesh_optional_packages.m4 | 128 ++++++++++++++++++++++++++++++ 5 files changed, 245 insertions(+), 12 deletions(-) create mode 100644 include/base/libmesh_device.h diff --git a/include/base/libmesh_common.h b/include/base/libmesh_common.h index d907f4a5fe3..32f8820b4d6 100644 --- a/include/base/libmesh_common.h +++ b/include/base/libmesh_common.h @@ -30,6 +30,10 @@ // The library configuration options #include "libmesh/libmesh_config.h" +// Device compilation support — must be included before assert macros +// so that LIBMESH_DEVICE_ASSERT is available for the Kokkos path. +#include "libmesh/libmesh_device.h" + // Use actual timestamps or constant dummies (to aid ccache) #ifdef LIBMESH_ENABLE_TIMESTAMPS # define LIBMESH_TIME __TIME__ @@ -183,33 +187,33 @@ typedef std::complex COMPLEX; // Helper functions for complex/real numbers // to clean up #ifdef LIBMESH_USE_COMPLEX_NUMBERS elsewhere -template inline T libmesh_real(T a) { return a; } -template inline T libmesh_imag(T /*a*/) { return 0; } -template inline T libmesh_conj(T a) { return a; } +template LIBMESH_DEVICE_INLINE T libmesh_real(T a) { return a; } +template LIBMESH_DEVICE_INLINE T libmesh_imag(T /*a*/) { return 0; } +template LIBMESH_DEVICE_INLINE T libmesh_conj(T a) { return a; } template -inline T libmesh_real(std::complex a) { return std::real(a); } +LIBMESH_DEVICE_INLINE T libmesh_real(std::complex a) { return std::real(a); } template -inline T libmesh_imag(std::complex a) { return std::imag(a); } +LIBMESH_DEVICE_INLINE T libmesh_imag(std::complex a) { return std::imag(a); } template -inline std::complex libmesh_conj(std::complex a) { return std::conj(a); } +LIBMESH_DEVICE_INLINE std::complex libmesh_conj(std::complex a) { return std::conj(a); } // std::isnan() is in as of C++11. template -inline bool libmesh_isnan(T x) { return std::isnan(x); } +LIBMESH_DEVICE_INLINE bool libmesh_isnan(T x) { return std::isnan(x); } template -inline bool libmesh_isnan(std::complex a) +LIBMESH_DEVICE_INLINE bool libmesh_isnan(std::complex a) { return (std::isnan(std::real(a)) || std::isnan(std::imag(a))); } // std::isinf() is in as of C++11. template -inline bool libmesh_isinf(T x) { return std::isinf(x); } +LIBMESH_DEVICE_INLINE bool libmesh_isinf(T x) { return std::isinf(x); } template -inline bool libmesh_isinf(std::complex a) +LIBMESH_DEVICE_INLINE bool libmesh_isinf(std::complex a) { return (std::isinf(std::real(a)) || std::isinf(std::imag(a))); } // Define the value type for unknowns in simulations. @@ -287,7 +291,13 @@ extern bool warned_about_auto_ptr; #endif // The libmesh_assert() macro acts like C's assert(), but throws a -// libmesh_error() (including stack trace, etc) instead of just exiting +// libmesh_error() (including stack trace, etc) instead of just exiting. +// +// In .K translation units (LIBMESH_KOKKOS_COMPILATION defined), +// LIBMESH_DEVICE_ASSERT is provided by libmesh_device.h using +// printf + Kokkos::abort() — device-safe across CUDA/HIP/SYCL. +// The assert macros delegate to it so that both host and device +// code in the same file get assertion checking. #ifdef NDEBUG #define libmesh_assert_msg(asserted, msg) ((void) 0) @@ -299,6 +309,18 @@ extern bool warned_about_auto_ptr; #define libmesh_assert_less_equal_msg(expr1,expr2, msg) ((void) 0) #define libmesh_assert_greater_equal_msg(expr1,expr2, msg) ((void) 0) +#elif defined(LIBMESH_DEVICE_ASSERT) + +// Kokkos compilation: use the device-safe assert from libmesh_device.h. +#define libmesh_assert_msg(asserted, msg) LIBMESH_DEVICE_ASSERT(asserted) +#define libmesh_exceptionless_assert_msg(asserted, msg) LIBMESH_DEVICE_ASSERT(asserted) +#define libmesh_assert_equal_to_msg(expr1,expr2, msg) LIBMESH_DEVICE_ASSERT((expr1) == (expr2)) +#define libmesh_assert_not_equal_to_msg(expr1,expr2, msg) LIBMESH_DEVICE_ASSERT((expr1) != (expr2)) +#define libmesh_assert_less_msg(expr1,expr2, msg) LIBMESH_DEVICE_ASSERT((expr1) < (expr2)) +#define libmesh_assert_greater_msg(expr1,expr2, msg) LIBMESH_DEVICE_ASSERT((expr1) > (expr2)) +#define libmesh_assert_less_equal_msg(expr1,expr2, msg) LIBMESH_DEVICE_ASSERT((expr1) <= (expr2)) +#define libmesh_assert_greater_equal_msg(expr1,expr2, msg) LIBMESH_DEVICE_ASSERT((expr1) >= (expr2)) + #else #define libmesh_assertion_types(expr1,expr2) \ @@ -674,7 +696,6 @@ inline Tnew restrict_int (Told oldvar) return oldvar; } - /** * This is a helper variable template for cases when we want to use a default compile-time * error with constexpr-based if conditions. The templating delays the triggering diff --git a/include/base/libmesh_device.h b/include/base/libmesh_device.h new file mode 100644 index 00000000000..f41d4c70b01 --- /dev/null +++ b/include/base/libmesh_device.h @@ -0,0 +1,74 @@ +// The libMesh Finite Element Library. +// Copyright (C) 2002-2026 Benjamin S. Kirk, John W. Peterson, Roy H. Stogner + +// This library is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 2.1 of the License, or (at your option) any later version. + +// This library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +// Lesser General Public License for more details. + +// You should have received a copy of the GNU Lesser General Public +// License along with this library; if not, write to the Free Software +// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + +#ifndef LIBMESH_LIBMESH_DEVICE_H +#define LIBMESH_LIBMESH_DEVICE_H + +// Defines LIBMESH_DEVICE_INLINE, mirroring MetaPhysicL's METAPHYSICL_INLINE +// pattern (metaphysicl_device.h / METAPHYSICL_KOKKOS_COMPILATION). +// +// When compiling a .K translation unit (LIBMESH_KOKKOS_COMPILATION is defined +// by kokkos.mk), this expands to KOKKOS_INLINE_FUNCTION so that annotated +// methods are callable from both host and device code. In all other +// translation units it expands to plain `inline`. +#ifdef LIBMESH_KOKKOS_COMPILATION +# include +# include +# define LIBMESH_DEVICE_INLINE KOKKOS_INLINE_FUNCTION + +// Backend-neutral device-code detection for Kokkos .K translation units. +// This lets error/exception plumbing share a single predicate instead of +// hardcoding per-backend checks in multiple headers. +# if defined(__CUDA_ARCH__) || defined(__HIP_DEVICE_COMPILE__) || defined(__SYCL_DEVICE_ONLY__) +# define LIBMESH_IN_DEVICE_CODE 1 +# else +# define LIBMESH_IN_DEVICE_CODE 0 +# endif + +// Device-safe assert: uses printf (supported on CUDA/HIP) and +// Kokkos::abort() for backend-portable device termination. +// Defined here (not in libmesh_common.h) because Kokkos headers +// are only available in .K translation units. +# ifndef NDEBUG +# define LIBMESH_DEVICE_ASSERT(asserted) \ + do { if (!(asserted)) { \ + printf("libMesh assert failed: %s, file %s, line %d\n", \ + #asserted, __FILE__, __LINE__); \ + ::Kokkos::abort("libmesh_assert failed"); \ + } } while (0) +# else +# define LIBMESH_DEVICE_ASSERT(asserted) ((void) 0) +# endif + +# define LIBMESH_DEVICE_ERROR_MSG(msg) \ + do { \ + printf("libMesh error: %s, file %s, line %d\n", \ + msg, __FILE__, __LINE__); \ + ::Kokkos::abort(msg); \ + } while (0) + +# define LIBMESH_DEVICE_ERROR_MSG_IF(cond, msg) \ + do { if (cond) { LIBMESH_DEVICE_ERROR_MSG(msg); } } while (0) + +#else +# define LIBMESH_DEVICE_INLINE inline +# define LIBMESH_IN_DEVICE_CODE 0 +# define LIBMESH_DEVICE_ERROR_MSG(msg) libmesh_error_msg(msg) +# define LIBMESH_DEVICE_ERROR_MSG_IF(cond, msg) libmesh_error_msg_if(cond, msg) +#endif + +#endif // LIBMESH_LIBMESH_DEVICE_H diff --git a/include/base/libmesh_exceptions.h b/include/base/libmesh_exceptions.h index 6ca79b7b269..65237e1478f 100644 --- a/include/base/libmesh_exceptions.h +++ b/include/base/libmesh_exceptions.h @@ -23,6 +23,7 @@ #include "libmesh/libmesh_config.h" #include "libmesh/libmesh_abort.h" +#include "libmesh/libmesh_device.h" #include #include @@ -212,7 +213,13 @@ class TerminationException #ifdef LIBMESH_ENABLE_EXCEPTIONS #define libmesh_noexcept noexcept +#if LIBMESH_IN_DEVICE_CODE +// Kokkos device code does not support C++ exceptions. +#define LIBMESH_THROW(e) do { LIBMESH_DEVICE_ERROR_MSG((e).what()); } while (0) +#else #define LIBMESH_THROW(e) do { throw e; } while (0) +#endif + #define libmesh_rethrow throw #define libmesh_try try #define libmesh_catch(e) catch(e) diff --git a/include/libmesh_config.h.in b/include/libmesh_config.h.in index 9adaa9efe05..a8e72c8859c 100644 --- a/include/libmesh_config.h.in +++ b/include/libmesh_config.h.in @@ -434,6 +434,9 @@ /* Define to 1 if you have the header file. */ #undef HAVE_INTTYPES_H +/* Define if Kokkos support is enabled in libMesh */ +#undef HAVE_KOKKOS + /* Flag indicating whether the library will be compiled with LASPACK support */ #undef HAVE_LASPACK diff --git a/m4/libmesh_optional_packages.m4 b/m4/libmesh_optional_packages.m4 index 2c569d088c0..9fb641d1945 100644 --- a/m4/libmesh_optional_packages.m4 +++ b/m4/libmesh_optional_packages.m4 @@ -861,6 +861,134 @@ AM_CONDITIONAL(LIBMESH_ENABLE_METAPHYSICL, test x$enablemetaphysicl = xyes) +# ------------------------------------------------------------- +# Kokkos -- optional, enables the native Kokkos FE math path +# ------------------------------------------------------------- +AC_ARG_WITH([kokkos], + AS_HELP_STRING([--with-kokkos=DIR], + [Enable Kokkos support using the installation at DIR]), + [KOKKOS_DIR="$withval"], + [KOKKOS_DIR="no"]) + +AC_ARG_WITH([kokkos-backend], + AS_HELP_STRING([--with-kokkos-backend=BACKEND], + [cuda|hip|sycl|openmp|serial (default: auto-detect from KokkosCore_config.h)]), + [KOKKOS_BACKEND="$withval"], [KOKKOS_BACKEND="auto"]) + +dnl Allow the caller (e.g. MOOSE's configure_libmesh.sh) to pre-set the +dnl Kokkos compiler and flags via environment variables. If KOKKOS_CXX is +dnl already set, we skip auto-detection entirely — the caller knows best. +dnl We use AC_SUBST (not AC_ARG_VAR) so these flags stay scoped to .K +dnl compilation rules and don't leak into the main CPPFLAGS/CXXFLAGS. + +AS_IF([test "x$KOKKOS_DIR" != "xno"], + [ + AC_CHECK_FILE([$KOKKOS_DIR/include/Kokkos_Core.hpp], + [ + enablekokkos=yes + libmesh_optional_INCLUDES="$libmesh_optional_INCLUDES -I$KOKKOS_DIR/include" + libmesh_optional_LIBS="$libmesh_optional_LIBS -L$KOKKOS_DIR/lib -lkokkoscore" + + dnl Only auto-detect if KOKKOS_CXX was not pre-set by the caller + AS_IF([test "x$KOKKOS_CXX" = "x"], + [ + KOKKOS_CFG="$KOKKOS_DIR/include/KokkosCore_config.h" + + dnl Auto-detect backend + AS_IF([test "x$KOKKOS_BACKEND" = "xauto"], + [ + AS_IF([test -r "$KOKKOS_CFG"], + [ + AS_IF([grep -q 'KOKKOS_ENABLE_CUDA' "$KOKKOS_CFG"], + [KOKKOS_BACKEND=cuda], + [AS_IF([grep -q 'KOKKOS_ENABLE_HIP' "$KOKKOS_CFG"], + [KOKKOS_BACKEND=hip], + [AS_IF([grep -q 'KOKKOS_ENABLE_SYCL' "$KOKKOS_CFG"], + [KOKKOS_BACKEND=sycl], + [AS_IF([grep -q 'KOKKOS_ENABLE_OPENMP' "$KOKKOS_CFG"], + [KOKKOS_BACKEND=openmp], + [KOKKOS_BACKEND=serial])])])]) + ], + [KOKKOS_BACKEND=serial]) + ]) + + AC_MSG_RESULT([Kokkos backend: $KOKKOS_BACKEND]) + + dnl Check if Kokkos was built with OpenMP + have_kokkos_openmp=no + AS_IF([test -r "$KOKKOS_CFG"], + [AS_IF([grep -q 'KOKKOS_ENABLE_OPENMP' "$KOKKOS_CFG"], + [have_kokkos_openmp=yes])]) + + case "$KOKKOS_BACKEND" in + cuda) + AC_PATH_PROG([NVCC],[nvcc],[no],[$PATH]) + AS_IF([test "x$NVCC" = "xno"], + [AC_MSG_ERROR([nvcc not found but Kokkos CUDA backend requested])]) + KOKKOS_CXX="$NVCC" + KOKKOS_CXXFLAGS="--forward-unknown-to-host-compiler --extended-lambda --disable-warnings -x cu -ccbin $CXX" + KOKKOS_LDFLAGS="--forward-unknown-to-host-compiler -L$KOKKOS_DIR/lib" + AS_IF([test "x$have_kokkos_openmp" = "xyes"], + [ + KOKKOS_CXXFLAGS="$KOKKOS_CXXFLAGS -fopenmp" + KOKKOS_LDFLAGS="$KOKKOS_LDFLAGS -fopenmp" + ]) + ;; + hip) + AC_PATH_PROG([HIPCC],[hipcc],[no],[$PATH]) + AS_IF([test "x$HIPCC" = "xno"], + [AC_MSG_ERROR([hipcc not found but Kokkos HIP backend requested])]) + KOKKOS_CXX="$HIPCC" + KOKKOS_LDFLAGS="-L$KOKKOS_DIR/lib" + ;; + sycl) + AC_PATH_PROG([ICPX],[icpx],[no],[$PATH]) + AS_IF([test "x$ICPX" = "xno"], + [AC_MSG_ERROR([icpx not found but Kokkos SYCL backend requested])]) + KOKKOS_CXX="$ICPX" + KOKKOS_CXXFLAGS="-fsycl" + KOKKOS_LDFLAGS="-fsycl -L$KOKKOS_DIR/lib" + ;; + openmp) + KOKKOS_CXX="${CXX}" + KOKKOS_CXXFLAGS="-fopenmp -x c++" + KOKKOS_LDFLAGS="-fopenmp -L$KOKKOS_DIR/lib" + ;; + serial|*) + KOKKOS_CXX="${CXX}" + KOKKOS_CXXFLAGS="-x c++" + KOKKOS_LDFLAGS="-L$KOKKOS_DIR/lib" + ;; + esac + ], + [AC_MSG_RESULT([Using caller-provided KOKKOS_CXX=$KOKKOS_CXX])]) + + dnl Set defaults for any variables not provided by caller or auto-detect + KOKKOS_CPPFLAGS="${KOKKOS_CPPFLAGS:--DLIBMESH_KOKKOS_COMPILATION -I$KOKKOS_DIR/include}" + KOKKOS_LDFLAGS="${KOKKOS_LDFLAGS:--L$KOKKOS_DIR/lib}" + KOKKOS_LIBS="${KOKKOS_LIBS:--lkokkoscore}" + + AC_DEFINE([HAVE_KOKKOS], [1], + [Define if Kokkos support is enabled in libMesh]) + AC_MSG_RESULT(<<< Configuring library with Kokkos support >>>) + ], + [ + AC_MSG_WARN([Kokkos not found at $KOKKOS_DIR -- disabling Kokkos FE support]) + enablekokkos=no + ]) + ], + [enablekokkos=no]) + +AC_SUBST([KOKKOS_CXX]) +AC_SUBST([KOKKOS_CPPFLAGS]) +AC_SUBST([KOKKOS_CXXFLAGS]) +AC_SUBST([KOKKOS_LDFLAGS]) +AC_SUBST([KOKKOS_LIBS]) +AM_CONDITIONAL(LIBMESH_ENABLE_KOKKOS, test x$enablekokkos = xyes) +# ------------------------------------------------------------- + + + AS_IF([test "$enableoptional" != no], [ AC_MSG_RESULT(----------------------------------------------) From 3d8327ba85aac1a6a2bdf0e2ad2e527d93f1e780 Mon Sep 17 00:00:00 2001 From: rochi00 Date: Fri, 8 May 2026 15:04:41 -0600 Subject: [PATCH 02/46] Make vector and tensor value types device-usable --- include/numerics/tensor_tools.h | 36 +++++------ include/numerics/tensor_value.h | 24 ++++--- include/numerics/type_tensor.h | 110 +++++++++++++++++++------------- include/numerics/type_vector.h | 89 ++++++++++++++++---------- include/numerics/vector_value.h | 16 +++-- 5 files changed, 161 insertions(+), 114 deletions(-) diff --git a/include/numerics/tensor_tools.h b/include/numerics/tensor_tools.h index 7617116f10d..f183380a84d 100644 --- a/include/numerics/tensor_tools.h +++ b/include/numerics/tensor_tools.h @@ -45,92 +45,92 @@ namespace TensorTools // Vector specializations will follow. template -inline +LIBMESH_DEVICE_INLINE typename std::enable_if::value && ScalarTraits::value, typename CompareTypes::supertype>::type inner_product(const T & a, const T2& b) { return a * b; } template -inline +LIBMESH_DEVICE_INLINE typename CompareTypes::supertype inner_product(const TypeVector & a, const TypeVector & b) { return a * b; } template -inline +LIBMESH_DEVICE_INLINE typename CompareTypes::supertype inner_product(const TypeTensor & a, const TypeTensor & b) { return a.contract(b); } template -inline +LIBMESH_DEVICE_INLINE typename CompareTypes::supertype inner_product(const TypeNTensor & a, const TypeNTensor & b) { return a.contract(b); } template -inline +LIBMESH_DEVICE_INLINE auto norm(const T & a) { using std::abs; return abs(a); } template -inline +LIBMESH_DEVICE_INLINE T norm(std::complex a) { using std::abs; return abs(a); } template -inline +LIBMESH_DEVICE_INLINE auto norm(const TypeVector & a) -> decltype(TensorTools::norm(T())) {using std::sqrt; return sqrt(a.norm_sq());} template -inline +LIBMESH_DEVICE_INLINE auto norm(const VectorValue & a) -> decltype(TensorTools::norm(T())) {using std::sqrt; return sqrt(a.norm_sq());} template -inline +LIBMESH_DEVICE_INLINE auto norm(const TypeTensor & a) -> decltype(TensorTools::norm(T())) {using std::sqrt; return sqrt(a.norm_sq());} template -inline +LIBMESH_DEVICE_INLINE auto norm(const TensorValue & a) -> decltype(TensorTools::norm(T())) {using std::sqrt; return sqrt(a.norm_sq());} template -inline +LIBMESH_DEVICE_INLINE auto norm_sq(const T & a) -{ using std::norm; return norm(a); } +{ return a * libmesh_conj(a); } template -inline +LIBMESH_DEVICE_INLINE T norm_sq(std::complex a) { using std::norm; return norm(a); } template -inline +LIBMESH_DEVICE_INLINE auto norm_sq(const TypeVector & a) {return a.norm_sq();} template -inline +LIBMESH_DEVICE_INLINE auto norm_sq(const VectorValue & a) {return a.norm_sq();} template -inline +LIBMESH_DEVICE_INLINE auto norm_sq(const TypeTensor & a) {return a.norm_sq();} template -inline +LIBMESH_DEVICE_INLINE auto norm_sq(const TensorValue & a) {return a.norm_sq();} template -inline +LIBMESH_DEVICE_INLINE bool is_zero(const T & a){ return a.is_zero();} // Any tensor-rank-independent code will need to include diff --git a/include/numerics/tensor_value.h b/include/numerics/tensor_value.h index 3a0d680476d..c99e0cac003 100644 --- a/include/numerics/tensor_value.h +++ b/include/numerics/tensor_value.h @@ -22,6 +22,7 @@ // Local includes #include "libmesh/type_tensor.h" +#include "libmesh/libmesh_device.h" #include "libmesh/libmesh.h" // for pi #ifdef LIBMESH_HAVE_METAPHYSICL @@ -93,12 +94,14 @@ class TensorValue : public TypeTensor * Constructor. Takes 1 row vector for LIBMESH_DIM=1 */ template + LIBMESH_DEVICE_INLINE TensorValue (const TypeVector & vx); /** * Constructor. Takes 2 row vectors for LIBMESH_DIM=2 */ template + LIBMESH_DEVICE_INLINE TensorValue (const TypeVector & vx, const TypeVector & vy); @@ -106,6 +109,7 @@ class TensorValue : public TypeTensor * Constructor. Takes 3 row vectors for LIBMESH_DIM=3 */ template + LIBMESH_DEVICE_INLINE TensorValue (const TypeVector & vx, const TypeVector & vy, const TypeVector & vz); @@ -134,11 +138,11 @@ class TensorValue : public TypeTensor const TypeTensor & p_im); #endif - /** * Assignment-from-scalar operator. Used only to zero out tensors. */ template + LIBMESH_DEVICE_INLINE typename std::enable_if< ScalarTraits::value, TensorValue &>::type @@ -211,7 +215,7 @@ typedef NumberTensorValue Tensor; //------------------------------------------------------ // Inline functions template -inline +LIBMESH_DEVICE_INLINE TensorValue::TensorValue () : TypeTensor () { @@ -220,7 +224,7 @@ TensorValue::TensorValue () : template -inline +LIBMESH_DEVICE_INLINE TensorValue::TensorValue (const T & xx, const T & xy, const T & xz, @@ -237,7 +241,7 @@ TensorValue::TensorValue (const T & xx, template template -inline +LIBMESH_DEVICE_INLINE TensorValue::TensorValue (const Scalar & xx, const Scalar & xy, const Scalar & xz, @@ -257,7 +261,7 @@ TensorValue::TensorValue (const Scalar & xx, template template -inline +LIBMESH_DEVICE_INLINE TensorValue::TensorValue (const TensorValue & p) : TypeTensor (p) { @@ -267,7 +271,7 @@ TensorValue::TensorValue (const TensorValue & p) : template template -inline +LIBMESH_DEVICE_INLINE TensorValue::TensorValue (const TypeVector & vx) : TypeTensor (vx) { @@ -277,7 +281,7 @@ TensorValue::TensorValue (const TypeVector & vx) : template template -inline +LIBMESH_DEVICE_INLINE TensorValue::TensorValue (const TypeVector & vx, const TypeVector & vy) : TypeTensor (vx, vy) @@ -288,7 +292,7 @@ TensorValue::TensorValue (const TypeVector & vx, template template -inline +LIBMESH_DEVICE_INLINE TensorValue::TensorValue (const TypeVector & vx, const TypeVector & vy, const TypeVector & vz) : @@ -300,7 +304,7 @@ TensorValue::TensorValue (const TypeVector & vx, template template -inline +LIBMESH_DEVICE_INLINE TensorValue::TensorValue (const TypeTensor & p) : TypeTensor (p) { @@ -309,7 +313,7 @@ TensorValue::TensorValue (const TypeTensor & p) : #ifdef LIBMESH_USE_COMPLEX_NUMBERS template -inline +LIBMESH_DEVICE_INLINE TensorValue::TensorValue (const TypeTensor & p_re, const TypeTensor & p_im) : TypeTensor (Complex (p_re(0,0), p_im(0,0)), diff --git a/include/numerics/type_tensor.h b/include/numerics/type_tensor.h index 470b745f120..ac6dc145428 100644 --- a/include/numerics/type_tensor.h +++ b/include/numerics/type_tensor.h @@ -22,6 +22,7 @@ // Local includes #include "libmesh/libmesh_common.h" +#include "libmesh/libmesh_device.h" #include "libmesh/type_vector.h" // C++ includes @@ -101,13 +102,16 @@ class TypeTensor * many vectors are needed. */ template + LIBMESH_DEVICE_INLINE TypeTensor(const TypeVector & vx); template + LIBMESH_DEVICE_INLINE TypeTensor(const TypeVector & vx, const TypeVector & vy); template + LIBMESH_DEVICE_INLINE TypeTensor(const TypeVector & vx, const TypeVector & vy, const TypeVector & vz); @@ -133,12 +137,14 @@ class TypeTensor /** * Destructor. */ + LIBMESH_DEVICE_INLINE ~TypeTensor(); /** * Assign to this tensor without creating a temporary. */ template + LIBMESH_DEVICE_INLINE void assign (const TypeTensor &); /** @@ -147,6 +153,7 @@ class TypeTensor * \returns A reference to *this. */ template + LIBMESH_DEVICE_INLINE typename std::enable_if< ScalarTraits::value, TypeTensor &>::type @@ -166,11 +173,13 @@ class TypeTensor /** * \returns A proxy for the \f$ i^{th} \f$ column of the tensor. */ + LIBMESH_DEVICE_INLINE ConstTypeTensorColumn slice (const unsigned int i) const; /** * \returns A writable proxy for the \f$ i^{th} \f$ column of the tensor. */ + LIBMESH_DEVICE_INLINE TypeTensorColumn slice (const unsigned int i); /** @@ -181,6 +190,7 @@ class TypeTensor /** * \returns A copy of one column of the tensor as a TypeVector. */ + LIBMESH_DEVICE_INLINE TypeVector column(const unsigned int r) const; /** @@ -210,6 +220,7 @@ class TypeTensor * Add a scaled tensor to this tensor without creating a temporary. */ template + LIBMESH_DEVICE_INLINE void add_scaled (const TypeTensor &, const T &); /** @@ -240,6 +251,7 @@ class TypeTensor * temporary. */ template + LIBMESH_DEVICE_INLINE void subtract_scaled (const TypeTensor &, const T &); /** @@ -265,6 +277,7 @@ class TypeTensor */ template ::value, int>::type = 0> + LIBMESH_DEVICE_INLINE const TypeTensor & operator *= (const Scalar & factor) { for (unsigned int i=0; i + LIBMESH_DEVICE_INLINE typename CompareTypes::supertype contract (const TypeTensor &) const; @@ -339,6 +353,7 @@ class TypeTensor * \returns A copy of the result vector, this tensor is unchanged. */ template + LIBMESH_DEVICE_INLINE TypeVector::supertype> left_multiply (const TypeVector & p) const; @@ -358,6 +373,7 @@ class TypeTensor * * \returns The solution in the \p x vector. */ + LIBMESH_DEVICE_INLINE void solve(const TypeVector & b, TypeVector & x) const; /** @@ -375,6 +391,7 @@ class TypeTensor /** * \returns True if all values in the tensor are zero */ + LIBMESH_DEVICE_INLINE bool is_zero() const; /** @@ -393,11 +410,13 @@ class TypeTensor /** * Set all entries of the tensor to 0. */ + LIBMESH_DEVICE_INLINE void zero(); /** * \returns \p true if two tensors are equal, \p false otherwise. */ + LIBMESH_DEVICE_INLINE bool operator == (const TypeTensor & rhs) const; /** @@ -513,7 +532,7 @@ class ConstTypeTensorColumn //------------------------------------------------------ // Inline functions template -inline +LIBMESH_DEVICE_INLINE TypeTensor::TypeTensor () { _coords[0] = {}; @@ -536,7 +555,7 @@ TypeTensor::TypeTensor () template -inline +LIBMESH_DEVICE_INLINE TypeTensor::TypeTensor (const T & xx, const T & xy, const T & xz, @@ -582,7 +601,7 @@ TypeTensor::TypeTensor (const T & xx, template template -inline +LIBMESH_DEVICE_INLINE TypeTensor::TypeTensor (const Scalar & xx, const Scalar & xy, const Scalar & xz, @@ -631,7 +650,7 @@ TypeTensor::TypeTensor (const Scalar & xx, template template -inline +LIBMESH_DEVICE_INLINE TypeTensor::TypeTensor (const TypeTensor & p) { // copy the nodes from vector p to me @@ -642,6 +661,7 @@ TypeTensor::TypeTensor (const TypeTensor & p) template template +LIBMESH_DEVICE_INLINE TypeTensor::TypeTensor(const TypeVector & vx) { libmesh_assert_equal_to (LIBMESH_DIM, 1); @@ -650,6 +670,7 @@ TypeTensor::TypeTensor(const TypeVector & vx) template template +LIBMESH_DEVICE_INLINE TypeTensor::TypeTensor(const TypeVector & vx, const TypeVector & vy) { @@ -666,6 +687,7 @@ TypeTensor::TypeTensor(const TypeVector & vx, template template +LIBMESH_DEVICE_INLINE TypeTensor::TypeTensor(const TypeVector & vx, const TypeVector & vy, const TypeVector & vz) @@ -690,7 +712,7 @@ TypeTensor::TypeTensor(const TypeVector & vx, template -inline +LIBMESH_DEVICE_INLINE TypeTensor::~TypeTensor () { } @@ -699,7 +721,7 @@ TypeTensor::~TypeTensor () template template -inline +LIBMESH_DEVICE_INLINE void TypeTensor::assign (const TypeTensor & p) { for (unsigned int i=0; i::assign (const TypeTensor & p) template -inline +LIBMESH_DEVICE_INLINE const T & TypeTensor::operator () (const unsigned int i, const unsigned int j) const { @@ -728,14 +750,14 @@ const T & TypeTensor::operator () (const unsigned int i, template -inline +LIBMESH_DEVICE_INLINE T & TypeTensor::operator () (const unsigned int i, const unsigned int j) { #if LIBMESH_DIM < 3 - libmesh_error_msg_if(i >= LIBMESH_DIM || j >= LIBMESH_DIM, - "ERROR: You are assigning to a tensor component that is out of range for the compiled LIBMESH_DIM!"); + LIBMESH_DEVICE_ERROR_MSG_IF(i >= LIBMESH_DIM || j >= LIBMESH_DIM, + "ERROR: You are assigning to a tensor component that is out of range for the compiled LIBMESH_DIM!"); #endif @@ -747,7 +769,7 @@ T & TypeTensor::operator () (const unsigned int i, template -inline +LIBMESH_DEVICE_INLINE ConstTypeTensorColumn TypeTensor::slice (const unsigned int i) const { @@ -757,7 +779,7 @@ TypeTensor::slice (const unsigned int i) const template -inline +LIBMESH_DEVICE_INLINE TypeTensorColumn TypeTensor::slice (const unsigned int i) { @@ -767,7 +789,7 @@ TypeTensor::slice (const unsigned int i) template -inline +LIBMESH_DEVICE_INLINE TypeVector TypeTensor::row(const unsigned int r) const { @@ -781,7 +803,7 @@ TypeTensor::row(const unsigned int r) const template -inline +LIBMESH_DEVICE_INLINE TypeVector TypeTensor::column(const unsigned int r) const { @@ -796,7 +818,7 @@ TypeTensor::column(const unsigned int r) const template template -inline +LIBMESH_DEVICE_INLINE TypeTensor::supertype> TypeTensor::operator + (const TypeTensor & p) const { @@ -831,7 +853,7 @@ TypeTensor::operator + (const TypeTensor & p) const template template -inline +LIBMESH_DEVICE_INLINE const TypeTensor & TypeTensor::operator += (const TypeTensor & p) { this->add (p); @@ -843,7 +865,7 @@ const TypeTensor & TypeTensor::operator += (const TypeTensor & p) template template -inline +LIBMESH_DEVICE_INLINE void TypeTensor::add (const TypeTensor & p) { for (unsigned int i=0; i::add (const TypeTensor & p) template template -inline +LIBMESH_DEVICE_INLINE void TypeTensor::add_scaled (const TypeTensor & p, const T & factor) { for (unsigned int i=0; i::add_scaled (const TypeTensor & p, const T & factor) template template -inline +LIBMESH_DEVICE_INLINE TypeTensor::supertype> TypeTensor::operator - (const TypeTensor & p) const { @@ -901,7 +923,7 @@ TypeTensor::operator - (const TypeTensor & p) const template template -inline +LIBMESH_DEVICE_INLINE const TypeTensor & TypeTensor::operator -= (const TypeTensor & p) { this->subtract (p); @@ -913,7 +935,7 @@ const TypeTensor & TypeTensor::operator -= (const TypeTensor & p) template template -inline +LIBMESH_DEVICE_INLINE void TypeTensor::subtract (const TypeTensor & p) { for (unsigned int i=0; i::subtract (const TypeTensor & p) template template -inline +LIBMESH_DEVICE_INLINE void TypeTensor::subtract_scaled (const TypeTensor & p, const T & factor) { for (unsigned int i=0; i::subtract_scaled (const TypeTensor & p, const T & factor) template -inline +LIBMESH_DEVICE_INLINE TypeTensor TypeTensor::operator - () const { @@ -967,7 +989,7 @@ TypeTensor TypeTensor::operator - () const template template -inline +LIBMESH_DEVICE_INLINE auto TypeTensor::operator * (const Scalar & factor) const -> typename std::enable_if< ScalarTraits::value, @@ -1003,7 +1025,7 @@ TypeTensor::operator * (const Scalar & factor) const -> typename std::enable_ template -inline +LIBMESH_DEVICE_INLINE typename std::enable_if< ScalarTraits::value, TypeTensor::supertype>>::type @@ -1015,7 +1037,7 @@ operator * (const Scalar & factor, template template -inline +LIBMESH_DEVICE_INLINE typename std::enable_if< ScalarTraits::value, TypeTensor::supertype>>::type @@ -1053,7 +1075,7 @@ TypeTensor::operator / (const Scalar & factor) const template -inline +LIBMESH_DEVICE_INLINE TypeTensor TypeTensor::transpose() const { #if LIBMESH_DIM == 1 @@ -1083,7 +1105,7 @@ TypeTensor TypeTensor::transpose() const template -inline +LIBMESH_DEVICE_INLINE TypeTensor TypeTensor::inverse() const { #if LIBMESH_DIM == 1 @@ -1132,7 +1154,7 @@ TypeTensor TypeTensor::inverse() const template -inline +LIBMESH_DEVICE_INLINE void TypeTensor::solve(const TypeVector & b, TypeVector & x) const { #if LIBMESH_DIM == 1 @@ -1183,7 +1205,7 @@ void TypeTensor::solve(const TypeVector & b, TypeVector & x) const template -inline +LIBMESH_DEVICE_INLINE const TypeTensor & TypeTensor::operator /= (const T & factor) { libmesh_assert_not_equal_to (factor, static_cast(0.)); @@ -1199,7 +1221,7 @@ const TypeTensor & TypeTensor::operator /= (const T & factor) template template -inline +LIBMESH_DEVICE_INLINE TypeVector::supertype> TypeTensor::operator * (const TypeVector & p) const { @@ -1213,7 +1235,7 @@ TypeTensor::operator * (const TypeVector & p) const template template -inline +LIBMESH_DEVICE_INLINE TypeVector::supertype> TypeTensor::left_multiply (const TypeVector & p) const { @@ -1226,7 +1248,7 @@ TypeTensor::left_multiply (const TypeVector & p) const } template -inline +LIBMESH_DEVICE_INLINE TypeVector::supertype> operator * (const TypeVector & a, const TypeTensor & b) { @@ -1235,7 +1257,7 @@ operator * (const TypeVector & a, const TypeTensor & b) template template -inline +LIBMESH_DEVICE_INLINE TypeTensor::supertype> TypeTensor::operator * (const TypeTensor & p) const { @@ -1250,7 +1272,7 @@ TypeTensor::operator * (const TypeTensor & p) const template template -inline +LIBMESH_DEVICE_INLINE const TypeTensor & TypeTensor::operator *= (const TypeTensor & p) { TypeTensor temp; @@ -1270,7 +1292,7 @@ const TypeTensor & TypeTensor::operator *= (const TypeTensor & p) */ template template -inline +LIBMESH_DEVICE_INLINE typename CompareTypes::supertype TypeTensor::contract (const TypeTensor & t) const { @@ -1283,7 +1305,7 @@ TypeTensor::contract (const TypeTensor & t) const template -inline +LIBMESH_DEVICE_INLINE auto TypeTensor::norm() const { using std::sqrt; @@ -1292,7 +1314,7 @@ auto TypeTensor::norm() const template -inline +LIBMESH_DEVICE_INLINE bool TypeTensor::is_zero() const { for (const auto & val : _coords) @@ -1302,7 +1324,7 @@ bool TypeTensor::is_zero() const } template -inline +LIBMESH_DEVICE_INLINE T TypeTensor::det() const { #if LIBMESH_DIM == 1 @@ -1325,7 +1347,7 @@ T TypeTensor::det() const } template -inline +LIBMESH_DEVICE_INLINE T TypeTensor::tr() const { #if LIBMESH_DIM == 1 @@ -1342,7 +1364,7 @@ T TypeTensor::tr() const } template -inline +LIBMESH_DEVICE_INLINE void TypeTensor::zero() { for (unsigned int i=0; i::zero() template -inline +LIBMESH_DEVICE_INLINE auto TypeTensor::norm_sq () const { Real sum = 0.; @@ -1364,7 +1386,7 @@ auto TypeTensor::norm_sq () const template -inline +LIBMESH_DEVICE_INLINE bool TypeTensor::operator == (const TypeTensor & rhs) const { #if LIBMESH_DIM == 1 @@ -1436,7 +1458,7 @@ void TypeTensor::print(std::ostream & os) const } template -inline +LIBMESH_DEVICE_INLINE TypeTensor::supertype> outer_product(const TypeVector & a, const TypeVector & b) { diff --git a/include/numerics/type_vector.h b/include/numerics/type_vector.h index aaf79a9fd22..a9ae1bb2518 100644 --- a/include/numerics/type_vector.h +++ b/include/numerics/type_vector.h @@ -22,6 +22,7 @@ // Local includes #include "libmesh/libmesh_common.h" +#include "libmesh/libmesh_device.h" #include "libmesh/compare_types.h" #include "libmesh/tensor_tools.h" #include "libmesh/int_range.h" @@ -141,12 +142,14 @@ class TypeVector * Assign to this vector without creating a temporary. */ template + LIBMESH_DEVICE_INLINE void assign (const TypeVector &); /** * Assignment-from-scalar operator. Used only to zero out vectors. */ template + LIBMESH_DEVICE_INLINE typename std::enable_if< ScalarTraits::value, TypeVector &>::type @@ -157,12 +160,14 @@ class TypeVector * \returns A const reference to the \f$ i^{th} \f$ entry of the vector. */ const T & operator () (const unsigned int i) const; + LIBMESH_DEVICE_INLINE const T & slice (const unsigned int i) const { return (*this)(i); } /** * \returns A writable reference to the \f$ i^{th} \f$ entry of the vector. */ T & operator () (const unsigned int i); + LIBMESH_DEVICE_INLINE T & slice (const unsigned int i) { return (*this)(i); } /** @@ -192,6 +197,7 @@ class TypeVector * Add a scaled value to this vector without creating a temporary. */ template + LIBMESH_DEVICE_INLINE void add_scaled (const TypeVector &, const T &); /** @@ -222,6 +228,7 @@ class TypeVector * temporary. */ template + LIBMESH_DEVICE_INLINE void subtract_scaled (const TypeVector &, const T &); /** @@ -279,6 +286,7 @@ class TypeVector * \returns The result of TypeVector::operator*(). */ template + LIBMESH_DEVICE_INLINE typename CompareTypes::supertype contract (const TypeVector &) const; @@ -292,6 +300,7 @@ class TypeVector /** * \returns A unit vector in the direction of *this. */ + LIBMESH_DEVICE_INLINE TypeVector unit() const; /** @@ -309,16 +318,19 @@ class TypeVector /** * \returns The L1 norm of the vector */ + LIBMESH_DEVICE_INLINE auto l1_norm() const; /** * \returns True if all values in the vector are zero */ + LIBMESH_DEVICE_INLINE bool is_zero() const; /** * Set all entries of the vector to 0. */ + LIBMESH_DEVICE_INLINE void zero(); /** @@ -342,11 +354,13 @@ class TypeVector * \note For floating point types T, the function \p absolute_fuzzy_equals() * may be a more appropriate choice. */ + LIBMESH_DEVICE_INLINE bool operator == (const TypeVector & rhs) const; /** * \returns !(*this == rhs) */ + LIBMESH_DEVICE_INLINE bool operator != (const TypeVector & rhs) const; /** @@ -425,7 +439,7 @@ class TypeVector // Inline functions template -inline +LIBMESH_DEVICE_INLINE TypeVector::TypeVector () { _coords[0] = {}; @@ -442,7 +456,7 @@ TypeVector::TypeVector () template -inline +LIBMESH_DEVICE_INLINE TypeVector::TypeVector (const T & x, const T & y, const T & z) @@ -467,7 +481,7 @@ TypeVector::TypeVector (const T & x, template template -inline +LIBMESH_DEVICE_INLINE TypeVector::TypeVector (typename std::enable_if::value, const Scalar1>::type & x, @@ -497,7 +511,7 @@ TypeVector::TypeVector (typename template template -inline +LIBMESH_DEVICE_INLINE TypeVector::TypeVector (const Scalar & x, typename std::enable_if::value, @@ -518,7 +532,7 @@ TypeVector::TypeVector (const Scalar & x, template template -inline +LIBMESH_DEVICE_INLINE TypeVector::TypeVector (const TypeVector & p) { // copy the nodes from vector p to me @@ -530,7 +544,7 @@ TypeVector::TypeVector (const TypeVector & p) template template -inline +LIBMESH_DEVICE_INLINE void TypeVector::assign (const TypeVector & p) { for (unsigned int i=0; i::assign (const TypeVector & p) template -inline +LIBMESH_DEVICE_INLINE const T & TypeVector::operator () (const unsigned int i) const { libmesh_assert_less (i, LIBMESH_DIM); @@ -551,7 +565,7 @@ const T & TypeVector::operator () (const unsigned int i) const template -inline +LIBMESH_DEVICE_INLINE T & TypeVector::operator () (const unsigned int i) { libmesh_assert_less (i, LIBMESH_DIM); @@ -563,7 +577,7 @@ T & TypeVector::operator () (const unsigned int i) template template -inline +LIBMESH_DEVICE_INLINE TypeVector::supertype> TypeVector::operator + (const TypeVector & p) const { @@ -589,7 +603,7 @@ TypeVector::operator + (const TypeVector & p) const template template -inline +LIBMESH_DEVICE_INLINE const TypeVector & TypeVector::operator += (const TypeVector & p) { this->add (p); @@ -601,7 +615,7 @@ const TypeVector & TypeVector::operator += (const TypeVector & p) template template -inline +LIBMESH_DEVICE_INLINE void TypeVector::add (const TypeVector & p) { #if LIBMESH_DIM == 1 @@ -625,7 +639,7 @@ void TypeVector::add (const TypeVector & p) template template -inline +LIBMESH_DEVICE_INLINE void TypeVector::add_scaled (const TypeVector & p, const T & factor) { #if LIBMESH_DIM == 1 @@ -649,7 +663,7 @@ void TypeVector::add_scaled (const TypeVector & p, const T & factor) template template -inline +LIBMESH_DEVICE_INLINE TypeVector::supertype> TypeVector::operator - (const TypeVector & p) const { @@ -676,7 +690,7 @@ TypeVector::operator - (const TypeVector & p) const template template -inline +LIBMESH_DEVICE_INLINE const TypeVector & TypeVector::operator -= (const TypeVector & p) { this->subtract (p); @@ -688,7 +702,7 @@ const TypeVector & TypeVector::operator -= (const TypeVector & p) template template -inline +LIBMESH_DEVICE_INLINE void TypeVector::subtract (const TypeVector & p) { for (unsigned int i=0; i::subtract (const TypeVector & p) template template -inline +LIBMESH_DEVICE_INLINE void TypeVector::subtract_scaled (const TypeVector & p, const T & factor) { for (unsigned int i=0; i::subtract_scaled (const TypeVector & p, const T & factor) template -inline +LIBMESH_DEVICE_INLINE TypeVector TypeVector::operator - () const { @@ -734,7 +748,7 @@ TypeVector TypeVector::operator - () const template template -inline +LIBMESH_DEVICE_INLINE typename std::enable_if< ScalarTraits::value, TypeVector::supertype>>::type @@ -761,7 +775,7 @@ TypeVector::operator * (const Scalar & factor) const template -inline +LIBMESH_DEVICE_INLINE typename std::enable_if< ScalarTraits::value, TypeVector::supertype>>::type @@ -774,7 +788,7 @@ operator * (const Scalar & factor, template -inline +LIBMESH_DEVICE_INLINE const TypeVector & TypeVector::operator *= (const T & factor) { #if LIBMESH_DIM == 1 @@ -799,7 +813,7 @@ const TypeVector & TypeVector::operator *= (const T & factor) template template -inline +LIBMESH_DEVICE_INLINE typename std::enable_if< ScalarTraits::value, TypeVector::supertype>>::type @@ -830,7 +844,7 @@ TypeVector::operator / (const Scalar & factor) const template -inline +LIBMESH_DEVICE_INLINE const TypeVector & TypeVector::operator /= (const T & factor) { @@ -847,7 +861,7 @@ TypeVector::operator /= (const T & factor) template template -inline +LIBMESH_DEVICE_INLINE typename CompareTypes::supertype TypeVector::operator * (const TypeVector & p) const { @@ -869,7 +883,7 @@ TypeVector::operator * (const TypeVector & p) const template template -inline +LIBMESH_DEVICE_INLINE typename CompareTypes::supertype TypeVector::contract(const TypeVector & p) const { @@ -880,6 +894,7 @@ TypeVector::contract(const TypeVector & p) const template template +LIBMESH_DEVICE_INLINE TypeVector::supertype> TypeVector::cross(const TypeVector & p) const { @@ -903,7 +918,7 @@ TypeVector::cross(const TypeVector & p) const template -inline +LIBMESH_DEVICE_INLINE auto TypeVector::norm() const { using std::sqrt; @@ -913,7 +928,7 @@ auto TypeVector::norm() const template -inline +LIBMESH_DEVICE_INLINE void TypeVector::zero() { for (unsigned int i=0; i::zero() template -inline +LIBMESH_DEVICE_INLINE auto TypeVector::norm_sq() const { #if LIBMESH_DIM == 1 @@ -944,7 +959,7 @@ auto TypeVector::norm_sq() const template -inline +LIBMESH_DEVICE_INLINE bool TypeVector::is_zero() const { for (const auto & val : _coords) @@ -958,6 +973,7 @@ auto TypeVector::l1_norm() const; template +LIBMESH_DEVICE_INLINE auto TypeVector::l1_norm() const { @@ -988,7 +1004,7 @@ bool TypeVector::relative_fuzzy_equals(const TypeVector & rhs, Real tol) c template -inline +LIBMESH_DEVICE_INLINE bool TypeVector::operator == (const TypeVector & rhs) const { #if LIBMESH_DIM == 1 @@ -1010,7 +1026,7 @@ bool TypeVector::operator == (const TypeVector & rhs) const template -inline +LIBMESH_DEVICE_INLINE bool TypeVector::operator != (const TypeVector & rhs) const { return (!(*this == rhs)); @@ -1027,7 +1043,7 @@ bool TypeVector::operator != (const TypeVector & rhs) const // [b0, b1, b2] // [c0, c1, c2] template -inline +LIBMESH_DEVICE_INLINE T triple_product(const TypeVector & a, const TypeVector & b, const TypeVector & c) @@ -1049,7 +1065,7 @@ T triple_product(const TypeVector & a, // to be positive if the vectors are obey the right-hand rule, or // negative for a left-hand orientation. template -inline +LIBMESH_DEVICE_INLINE T solid_angle(const TypeVector & v01, const TypeVector & v02, const TypeVector & v03) @@ -1075,7 +1091,7 @@ T solid_angle(const TypeVector & v01, * calling b.cross(c).norm_sq(). */ template -inline +LIBMESH_DEVICE_INLINE T cross_norm_sq(const TypeVector & b, const TypeVector & c) { @@ -1096,7 +1112,7 @@ T cross_norm_sq(const TypeVector & b, * Calls cross_norm_sq() and takes the square root of the result. */ template -inline +LIBMESH_DEVICE_INLINE T cross_norm(const TypeVector & b, const TypeVector & c) { @@ -1105,7 +1121,7 @@ T cross_norm(const TypeVector & b, } template -inline +LIBMESH_DEVICE_INLINE TypeVector TypeVector::unit() const { @@ -1167,6 +1183,7 @@ struct CompareTypes, TypeVector> }; template ::value, int>::type = 0> +LIBMESH_DEVICE_INLINE TypeVector::supertype> outer_product(const T & a, const TypeVector & b) { @@ -1178,6 +1195,7 @@ outer_product(const T & a, const TypeVector & b) } template ::value, int>::type = 0> +LIBMESH_DEVICE_INLINE TypeVector::supertype> outer_product(const TypeVector & a, const T2 & b) { @@ -1208,6 +1226,7 @@ l1_norm_diff(const TypeVector & vec1, const TypeVector & vec2) namespace std { template +LIBMESH_DEVICE_INLINE auto norm(const libMesh::TypeVector & vector) -> decltype(std::norm(T())) { // Yea I agree it's dumb that the standard returns the square of the Euclidean norm diff --git a/include/numerics/vector_value.h b/include/numerics/vector_value.h index c93f17313dc..45116e1a737 100644 --- a/include/numerics/vector_value.h +++ b/include/numerics/vector_value.h @@ -22,6 +22,7 @@ // Local includes #include "libmesh/type_vector.h" +#include "libmesh/libmesh_device.h" #include "libmesh/compare_types.h" #ifdef LIBMESH_HAVE_METAPHYSICL @@ -124,6 +125,7 @@ class VectorValue : public TypeVector * Assignment-from-scalar operator. Used only to zero out vectors. */ template + LIBMESH_DEVICE_INLINE typename std::enable_if< ScalarTraits::value, VectorValue &>::type @@ -146,7 +148,7 @@ typedef NumberVectorValue Gradient; // Inline functions template -inline +LIBMESH_DEVICE_INLINE VectorValue::VectorValue () : TypeVector () { @@ -154,7 +156,7 @@ VectorValue::VectorValue () : template -inline +LIBMESH_DEVICE_INLINE VectorValue::VectorValue (const T & x, const T & y, const T & z) : @@ -166,7 +168,7 @@ VectorValue::VectorValue (const T & x, template template -inline +LIBMESH_DEVICE_INLINE VectorValue::VectorValue (typename std::enable_if::value, const Scalar1>::type & x, @@ -183,7 +185,7 @@ VectorValue::VectorValue (typename template template -inline +LIBMESH_DEVICE_INLINE VectorValue::VectorValue (const Scalar & x, typename std::enable_if::value, @@ -194,7 +196,7 @@ VectorValue::VectorValue (const Scalar & x, template template -inline +LIBMESH_DEVICE_INLINE VectorValue::VectorValue (const VectorValue & p) : TypeVector (p) { @@ -204,7 +206,7 @@ VectorValue::VectorValue (const VectorValue & p) : template template -inline +LIBMESH_DEVICE_INLINE VectorValue::VectorValue (const TypeVector & p) : TypeVector (p) { @@ -212,7 +214,7 @@ VectorValue::VectorValue (const TypeVector & p) : #ifdef LIBMESH_USE_COMPLEX_NUMBERS template -inline +LIBMESH_DEVICE_INLINE VectorValue::VectorValue (const TypeVector & p_re, const TypeVector & p_im) : TypeVector (Complex (p_re(0), p_im(0)), From ad6101f04bbd94e827794cf2bc292401160a8418 Mon Sep 17 00:00:00 2001 From: rochi00 Date: Fri, 8 May 2026 15:04:46 -0600 Subject: [PATCH 03/46] Add Kokkos numerics storage and operator headers --- include/gpu/kokkos_linalg_base.h | 472 ++++++++++++ include/gpu/kokkos_storage.h | 53 ++ include/gpu/kokkos_storage_policy.h | 124 ++++ include/gpu/kokkos_tensor_ops.h | 1033 +++++++++++++++++++++++++++ include/gpu/kokkos_vector_ops.h | 746 +++++++++++++++++++ include/include_HEADERS | 6 + include/libmesh/Makefile.am | 25 +- 7 files changed, 2458 insertions(+), 1 deletion(-) create mode 100644 include/gpu/kokkos_linalg_base.h create mode 100644 include/gpu/kokkos_storage.h create mode 100644 include/gpu/kokkos_storage_policy.h create mode 100644 include/gpu/kokkos_tensor_ops.h create mode 100644 include/gpu/kokkos_vector_ops.h diff --git a/include/gpu/kokkos_linalg_base.h b/include/gpu/kokkos_linalg_base.h new file mode 100644 index 00000000000..70a634f1f19 --- /dev/null +++ b/include/gpu/kokkos_linalg_base.h @@ -0,0 +1,472 @@ +// libMesh Kokkos compile-time linalg foundation. +// +// This header defines the small access/materialization layer that sits +// underneath richer vector/tensor algebra. It is intentionally limited to +// component access, storage-backed references, and conversion between +// vector-like/tensor-like objects and libMesh semantic types. + +#ifndef LIBMESH_KOKKOS_LINALG_BASE_H +#define LIBMESH_KOKKOS_LINALG_BASE_H + +#include "libmesh/libmesh_common.h" +#include "libmesh/libmesh_device.h" +#include "libmesh/point.h" +#include "libmesh/tensor_value.h" +#include "libmesh/type_tensor.h" +#include "libmesh/type_vector.h" +#include "libmesh/vector_value.h" + +#include +#include + +namespace libMesh::Kokkos +{ + +namespace detail +{ + +template +using remove_cvref_t = + typename std::remove_cv::type>::type; + +template +using remove_ref_t = typename std::remove_reference::type; + +template +using vector_view_value_t = + remove_cvref_t()(0, 0))>; + +template +using tensor_view_value_t = + remove_cvref_t()(0, 0, 0))>; + +} // namespace detail + +template +struct vector_traits; + +template +struct tensor_traits; + +template +struct is_vector_like : std::false_type +{ +}; + +template +struct is_tensor_like : std::false_type +{ +}; + +template +struct is_vector_ref : std::false_type +{ +}; + +template +struct is_tensor_ref : std::false_type +{ +}; + +template +inline constexpr bool is_vector_like_v = is_vector_like>::value; + +template +inline constexpr bool is_tensor_like_v = is_tensor_like>::value; + +template +inline constexpr bool is_vector_ref_v = is_vector_ref>::value; + +template +inline constexpr bool is_tensor_ref_v = is_tensor_ref>::value; + +template +class vector_ref +{ +public: + using view_type = ViewType; + using value_type = detail::vector_view_value_t; + + LIBMESH_DEVICE_INLINE + vector_ref(ViewType view, const unsigned int index) : _view(view), _index(index) {} + + LIBMESH_DEVICE_INLINE + decltype(auto) operator()(const unsigned int component) const + { + return _view(_index, component); + } + + template + LIBMESH_DEVICE_INLINE + void set(const unsigned int component, const Scalar & value) + { + static_assert(std::is_assignable::value, + "Cannot write through a vector_ref built from a read-only view"); + _view(_index, component) = value; + } + + template + LIBMESH_DEVICE_INLINE + void assign(const RightVector & right); + + template + LIBMESH_DEVICE_INLINE + void add(const RightVector & right); + + template + LIBMESH_DEVICE_INLINE + void add_scaled(const RightVector & right, const value_type & factor); + + template + LIBMESH_DEVICE_INLINE + void subtract(const RightVector & right); + + template + LIBMESH_DEVICE_INLINE + void subtract_scaled(const RightVector & right, const value_type & factor); + + LIBMESH_DEVICE_INLINE + void zero(); + + template + LIBMESH_DEVICE_INLINE + auto contract(const RightVector & right) const; + + LIBMESH_DEVICE_INLINE + auto norm() const; + + LIBMESH_DEVICE_INLINE + auto norm_sq() const; + + LIBMESH_DEVICE_INLINE + auto l1_norm() const; + + LIBMESH_DEVICE_INLINE + bool is_zero() const; + + LIBMESH_DEVICE_INLINE + auto unit() const; + + template + LIBMESH_DEVICE_INLINE + auto cross(const RightVector & right) const; + + LIBMESH_DEVICE_INLINE + unsigned int index() const + { + return _index; + } + +private: + ViewType _view; + unsigned int _index; +}; + +template +class tensor_ref +{ +public: + using view_type = ViewType; + using value_type = detail::tensor_view_value_t; + + LIBMESH_DEVICE_INLINE + tensor_ref(ViewType view, const unsigned int index) : _view(view), _index(index) {} + + LIBMESH_DEVICE_INLINE + decltype(auto) operator()(const unsigned int row, const unsigned int col) const + { + return _view(_index, row, col); + } + + template + LIBMESH_DEVICE_INLINE + void set(const unsigned int row, const unsigned int col, const Scalar & value) + { + static_assert(std::is_assignable::value, + "Cannot write through a tensor_ref built from a read-only view"); + _view(_index, row, col) = value; + } + + template + LIBMESH_DEVICE_INLINE + void assign(const RightTensor & right); + + template + LIBMESH_DEVICE_INLINE + void add(const RightTensor & right); + + template + LIBMESH_DEVICE_INLINE + void add_scaled(const RightTensor & right, const value_type & factor); + + template + LIBMESH_DEVICE_INLINE + void subtract(const RightTensor & right); + + template + LIBMESH_DEVICE_INLINE + void subtract_scaled(const RightTensor & right, const value_type & factor); + + LIBMESH_DEVICE_INLINE + void zero(); + + template + LIBMESH_DEVICE_INLINE + auto contract(const RightTensor & right) const; + + LIBMESH_DEVICE_INLINE + auto norm() const; + + LIBMESH_DEVICE_INLINE + auto norm_sq() const; + + LIBMESH_DEVICE_INLINE + bool is_zero() const; + + LIBMESH_DEVICE_INLINE + auto transpose() const; + + LIBMESH_DEVICE_INLINE + auto det(const unsigned int dim = LIBMESH_DIM) const; + + LIBMESH_DEVICE_INLINE + auto tr() const; + + LIBMESH_DEVICE_INLINE + auto inverse(const unsigned int dim = LIBMESH_DIM) const; + + template + LIBMESH_DEVICE_INLINE + void solve(const VectorLike & b, ResultVector & x) const; + + LIBMESH_DEVICE_INLINE + auto row(const unsigned int i) const; + + LIBMESH_DEVICE_INLINE + auto column(const unsigned int i) const; + + template + LIBMESH_DEVICE_INLINE + auto left_multiply(const VectorLike & v) const; + + LIBMESH_DEVICE_INLINE + unsigned int index() const + { + return _index; + } + +private: + ViewType _view; + unsigned int _index; +}; + +template +struct vector_traits> +{ + using value_type = T; + using semantic_type = libMesh::TypeVector; +}; + +template +struct vector_traits> +{ + using value_type = T; + using semantic_type = libMesh::VectorValue; +}; + +template <> +struct vector_traits +{ + using value_type = libMesh::Real; + using semantic_type = libMesh::Point; +}; + +template +struct vector_traits> +{ + using value_type = typename vector_ref::value_type; + using semantic_type = libMesh::TypeVector; +}; + +template +struct is_vector_like> : std::true_type +{ +}; + +template +struct is_vector_like> : std::true_type +{ +}; + +template <> +struct is_vector_like : std::true_type +{ +}; + +template +struct is_vector_like> : std::true_type +{ +}; + +template +struct is_vector_ref> : std::true_type +{ +}; + +template +struct tensor_traits> +{ + using value_type = T; + using semantic_type = libMesh::TypeTensor; +}; + +template +struct tensor_traits> +{ + using value_type = T; + using semantic_type = libMesh::TensorValue; +}; + +template +struct tensor_traits> +{ + using value_type = typename tensor_ref::value_type; + using semantic_type = libMesh::TypeTensor; +}; + +template +struct is_tensor_like> : std::true_type +{ +}; + +template +struct is_tensor_like> : std::true_type +{ +}; + +template +struct is_tensor_like> : std::true_type +{ +}; + +template +struct is_tensor_ref> : std::true_type +{ +}; + +template +using vector_value_type_t = typename vector_traits>::value_type; + +template +using tensor_value_type_t = typename tensor_traits>::value_type; + +template +using vector_semantic_type_t = typename vector_traits>::semantic_type; + +template +using tensor_semantic_type_t = typename tensor_traits>::semantic_type; + +template +LIBMESH_DEVICE_INLINE +decltype(auto) +vector_get_component(const T & v, const unsigned int component) +{ + return v(component); +} + +template +LIBMESH_DEVICE_INLINE +void vector_set_component(T & v, const unsigned int component, const Scalar & value) +{ + v(component) = value; +} + +template +LIBMESH_DEVICE_INLINE +void vector_set_component(vector_ref v, + const unsigned int component, + const Scalar & value) +{ + v.set(component, value); +} + +template +LIBMESH_DEVICE_INLINE +decltype(auto) +tensor_get_component(const T & T_in, const unsigned int row, const unsigned int col) +{ + return T_in(row, col); +} + +template +LIBMESH_DEVICE_INLINE +void tensor_set_component(T & T_out, + const unsigned int row, + const unsigned int col, + const Scalar & value) +{ + T_out(row, col) = value; +} + +template +LIBMESH_DEVICE_INLINE +void tensor_set_component(tensor_ref T_out, + const unsigned int row, + const unsigned int col, + const Scalar & value) +{ + T_out.set(row, col, value); +} + +template +LIBMESH_DEVICE_INLINE +vector_ref> +make_vector_ref(ViewType && view, const unsigned int index) +{ + return vector_ref>(std::forward(view), index); +} + +template +LIBMESH_DEVICE_INLINE +tensor_ref> +make_tensor_ref(ViewType && view, const unsigned int index) +{ + return tensor_ref>(std::forward(view), index); +} + +template +LIBMESH_DEVICE_INLINE +OutputVector materialize_vector(const VectorLike & v) +{ + static_assert(is_vector_like>::value, + "materialize_vector() requires a vector-like input type"); + + OutputVector out; + out.zero(); + + for (unsigned int component = 0; component < LIBMESH_DIM; ++component) + vector_set_component(out, component, vector_get_component(v, component)); + + return out; +} + +template +LIBMESH_DEVICE_INLINE +OutputTensor materialize_tensor(const TensorLike & T_in) +{ + static_assert(is_tensor_like>::value, + "materialize_tensor() requires a tensor-like input type"); + + OutputTensor out; + out.zero(); + + for (unsigned int row = 0; row < LIBMESH_DIM; ++row) + for (unsigned int col = 0; col < LIBMESH_DIM; ++col) + tensor_set_component(out, row, col, tensor_get_component(T_in, row, col)); + + return out; +} + +} // namespace libMesh::Kokkos + +#endif // LIBMESH_KOKKOS_LINALG_BASE_H diff --git a/include/gpu/kokkos_storage.h b/include/gpu/kokkos_storage.h new file mode 100644 index 00000000000..23e59aabf8c --- /dev/null +++ b/include/gpu/kokkos_storage.h @@ -0,0 +1,53 @@ +// libMesh Kokkos storage helpers for dimension-aware vector/tensor views. + +#ifndef LIBMESH_KOKKOS_STORAGE_H +#define LIBMESH_KOKKOS_STORAGE_H + +#include "libmesh/kokkos_linalg_base.h" + +#include "libmesh/libmesh_common.h" +#include "libmesh/libmesh_device.h" +#include "libmesh/type_tensor.h" +#include "libmesh/type_vector.h" + +namespace libMesh::Kokkos +{ + +template +LIBMESH_DEVICE_INLINE +VectorType load_vector(const ViewType & view, const unsigned int i) +{ + return materialize_vector(make_vector_ref(view, i)); +} + +template +LIBMESH_DEVICE_INLINE +void store_vector(const ViewType & view, const unsigned int i, const VectorType & v) +{ + auto out = make_vector_ref(view, i); + + for (unsigned int d = 0; d < LIBMESH_DIM; ++d) + vector_set_component(out, d, vector_get_component(v, d)); +} + +template +LIBMESH_DEVICE_INLINE +TensorType load_tensor(const ViewType & view, const unsigned int i) +{ + return materialize_tensor(make_tensor_ref(view, i)); +} + +template +LIBMESH_DEVICE_INLINE +void store_tensor(const ViewType & view, const unsigned int i, const TensorType & T) +{ + auto out = make_tensor_ref(view, i); + + for (unsigned int row = 0; row < LIBMESH_DIM; ++row) + for (unsigned int col = 0; col < LIBMESH_DIM; ++col) + tensor_set_component(out, row, col, tensor_get_component(T, row, col)); +} + +} // namespace libMesh::Kokkos + +#endif // LIBMESH_KOKKOS_STORAGE_H diff --git a/include/gpu/kokkos_storage_policy.h b/include/gpu/kokkos_storage_policy.h new file mode 100644 index 00000000000..6bfec5a6df0 --- /dev/null +++ b/include/gpu/kokkos_storage_policy.h @@ -0,0 +1,124 @@ +// libMesh Kokkos compile-time storage policies for fixed-dimension linalg data. +// +// These policies keep storage selection separate from the linalg algorithms: +// kernels operate on refs/materialized values, while the backend policy chooses +// the underlying Kokkos view layout. + +#ifndef LIBMESH_KOKKOS_STORAGE_POLICY_H +#define LIBMESH_KOKKOS_STORAGE_POLICY_H + +#include "libmesh/libmesh_common.h" + +#define PETSC_SKIP_CXX_COMPLEX_FIX 1 +#include +#undef __CUDACC_VER__ + +#include +#include +#include + +namespace libMesh::Kokkos +{ + +template +struct static_dim_storage_policy +{ + using scalar_type = Scalar; + using layout_type = Layout; + using vector_view = ::Kokkos::View; + using tensor_view = ::Kokkos::View; + + static constexpr const char * + name() + { + return std::is_same::value ? "layoutleft" : + std::is_same::value ? "layoutright" : + "layoutcustom"; + } +}; + +using layout_left_storage_policy = static_dim_storage_policy; +using layout_right_storage_policy = static_dim_storage_policy; +using default_storage_policy = layout_right_storage_policy; + +template +constexpr const char * +storage_policy_name() +{ + return StoragePolicy::name(); +} + +template +inline typename StoragePolicy::vector_view +make_vector_storage(const char * label, const std::size_t n) +{ + return typename StoragePolicy::vector_view(std::string(label), n); +} + +inline default_storage_policy::vector_view +make_vector_storage(const char * label, const std::size_t n) +{ + return make_vector_storage(label, n); +} + +template +inline typename StoragePolicy::tensor_view +make_tensor_storage(const char * label, const std::size_t n) +{ + return typename StoragePolicy::tensor_view(std::string(label), n); +} + +inline default_storage_policy::tensor_view +make_tensor_storage(const char * label, const std::size_t n) +{ + return make_tensor_storage(label, n); +} + +template +inline typename StoragePolicy::vector_view +upload_vector_storage(const std::vector & values, const char * label) +{ + auto d = make_vector_storage(label, values.size()); + auto h = ::Kokkos::create_mirror_view(d); + + for (std::size_t i = 0; i < values.size(); ++i) + for (unsigned int component = 0; component < LIBMESH_DIM; ++component) + h(i, component) = values[i](component); + + ::Kokkos::deep_copy(d, h); + return d; +} + +template +inline default_storage_policy::vector_view +upload_vector_storage(const std::vector & values, const char * label) +{ + return upload_vector_storage(values, label); +} + +template +inline typename StoragePolicy::tensor_view +upload_tensor_storage(const std::vector & values, const char * label) +{ + auto d = make_tensor_storage(label, values.size()); + auto h = ::Kokkos::create_mirror_view(d); + + for (std::size_t i = 0; i < values.size(); ++i) + for (unsigned int row = 0; row < LIBMESH_DIM; ++row) + for (unsigned int col = 0; col < LIBMESH_DIM; ++col) + h(i, row, col) = values[i](row, col); + + ::Kokkos::deep_copy(d, h); + return d; +} + +template +inline default_storage_policy::tensor_view +upload_tensor_storage(const std::vector & values, const char * label) +{ + return upload_tensor_storage(values, label); +} + +} // namespace libMesh::Kokkos + +#endif // LIBMESH_KOKKOS_STORAGE_POLICY_H diff --git a/include/gpu/kokkos_tensor_ops.h b/include/gpu/kokkos_tensor_ops.h new file mode 100644 index 00000000000..a08080405d6 --- /dev/null +++ b/include/gpu/kokkos_tensor_ops.h @@ -0,0 +1,1033 @@ +// libMesh Kokkos generic tensor operations. +// +// These free functions build tensor algebra on top of the primitive +// access/materialization layer in kokkos_linalg_base.h. They are written +// against tensor-like and vector-like inputs so both libMesh owning types and +// storage-backed refs can participate in the same math. + +#ifndef LIBMESH_KOKKOS_TENSOR_OPS_H +#define LIBMESH_KOKKOS_TENSOR_OPS_H + +#include "libmesh/kokkos_linalg_base.h" +#include "libmesh/kokkos_vector_ops.h" + +#include "libmesh/tensor_tools.h" + +#include + +namespace libMesh::Kokkos +{ + +// Construction and materialization + +template +LIBMESH_DEVICE_INLINE +ResultTensor zero_tensor_value() +{ + ResultTensor out; + out.zero(); + return out; +} + +template +LIBMESH_DEVICE_INLINE +ResultTensor tensor_identity(const unsigned int dim = LIBMESH_DIM) +{ + ResultTensor out; + out.zero(); + + for (unsigned int i = 0; i < dim; ++i) + tensor_set_component(out, i, i, tensor_value_type_t(1)); + + return out; +} + +template +LIBMESH_DEVICE_INLINE +ResultTensor copy_tensor(const TensorLike & T_in) +{ + return materialize_tensor(T_in); +} + +template ::value, int>::type = 0> +LIBMESH_DEVICE_INLINE +tensor_semantic_type_t copy_tensor(const TensorLike & T_in) +{ + return copy_tensor>(T_in); +} + +// Tensor reductions and predicates + +template +LIBMESH_DEVICE_INLINE +auto tensor_contract(const LeftTensor & left, const RightTensor & right) +{ + static_assert(is_tensor_like_v, "tensor_contract() requires a tensor-like left input"); + static_assert(is_tensor_like_v, "tensor_contract() requires a tensor-like right input"); + + using sum_type = + detail::remove_cvref_t; + + sum_type sum = sum_type(0); + for (unsigned int row = 0; row < LIBMESH_DIM; ++row) + for (unsigned int col = 0; col < LIBMESH_DIM; ++col) + sum += tensor_get_component(left, row, col) * tensor_get_component(right, row, col); + + return sum; +} + +template +LIBMESH_DEVICE_INLINE +auto tensor_norm_sq(const TensorLike & T_in) +{ + static_assert(is_tensor_like_v, "tensor_norm_sq() requires a tensor-like input"); + + using norm_type = detail::remove_cvref_t; + + norm_type sum = norm_type(0); + for (unsigned int row = 0; row < LIBMESH_DIM; ++row) + for (unsigned int col = 0; col < LIBMESH_DIM; ++col) + sum += libMesh::TensorTools::norm_sq(tensor_get_component(T_in, row, col)); + + return sum; +} + +template +LIBMESH_DEVICE_INLINE +auto tensor_norm(const TensorLike & T_in) +{ + using std::sqrt; + return sqrt(tensor_norm_sq(T_in)); +} + +template +LIBMESH_DEVICE_INLINE +auto tensor_trace(const TensorLike & T_in) +{ + static_assert(is_tensor_like_v, "tensor_trace() requires a tensor-like input"); + + using trace_type = detail::remove_cvref_t; + trace_type sum = trace_type(0); + for (unsigned int i = 0; i < LIBMESH_DIM; ++i) + sum += tensor_get_component(T_in, i, i); + + return sum; +} + +template +LIBMESH_DEVICE_INLINE +bool tensor_is_zero(const TensorLike & T_in) +{ + static_assert(is_tensor_like_v, "tensor_is_zero() requires a tensor-like input"); + + for (unsigned int row = 0; row < LIBMESH_DIM; ++row) + for (unsigned int col = 0; col < LIBMESH_DIM; ++col) + if (tensor_get_component(T_in, row, col) != tensor_value_type_t(0)) + return false; + + return true; +} + +template +LIBMESH_DEVICE_INLINE +bool tensor_equal(const LeftTensor & left, const RightTensor & right) +{ + static_assert(is_tensor_like_v, "tensor_equal() requires a tensor-like left input"); + static_assert(is_tensor_like_v, "tensor_equal() requires a tensor-like right input"); + + for (unsigned int row = 0; row < LIBMESH_DIM; ++row) + for (unsigned int col = 0; col < LIBMESH_DIM; ++col) + if (tensor_get_component(left, row, col) != tensor_get_component(right, row, col)) + return false; + + return true; +} + +template +LIBMESH_DEVICE_INLINE +bool tensor_not_equal(const LeftTensor & left, const RightTensor & right) +{ + return !tensor_equal(left, right); +} + +// Tensor arithmetic + +template +LIBMESH_DEVICE_INLINE +ResultTensor tensor_outer_product(const LeftVector & left, const RightVector & right) +{ + ResultTensor out; + out.zero(); + + for (unsigned int row = 0; row < LIBMESH_DIM; ++row) + for (unsigned int col = 0; col < LIBMESH_DIM; ++col) + tensor_set_component(out, + row, + col, + vector_get_component(left, row) * libmesh_conj(vector_get_component(right, col))); + + return out; +} + +template ::value, int>::type = 0> +LIBMESH_DEVICE_INLINE +libMesh::TypeTensor> +tensor_outer_product(const LeftVector & left, const RightVector & right) +{ + return tensor_outer_product>>(left, right); +} + +template +LIBMESH_DEVICE_INLINE +ResultTensor tensor_add(const LeftTensor & left, const RightTensor & right) +{ + ResultTensor out; + out.zero(); + + for (unsigned int row = 0; row < LIBMESH_DIM; ++row) + for (unsigned int col = 0; col < LIBMESH_DIM; ++col) + tensor_set_component(out, + row, + col, + tensor_get_component(left, row, col) + tensor_get_component(right, row, col)); + + return out; +} + +template ::value, int>::type = 0> +LIBMESH_DEVICE_INLINE +tensor_semantic_type_t tensor_add(const LeftTensor & left, const RightTensor & right) +{ + return tensor_add>(left, right); +} + +template +LIBMESH_DEVICE_INLINE +ResultTensor tensor_subtract(const LeftTensor & left, const RightTensor & right) +{ + ResultTensor out; + out.zero(); + + for (unsigned int row = 0; row < LIBMESH_DIM; ++row) + for (unsigned int col = 0; col < LIBMESH_DIM; ++col) + tensor_set_component(out, + row, + col, + tensor_get_component(left, row, col) - tensor_get_component(right, row, col)); + + return out; +} + +template ::value, int>::type = 0> +LIBMESH_DEVICE_INLINE +tensor_semantic_type_t tensor_subtract(const LeftTensor & left, const RightTensor & right) +{ + return tensor_subtract>(left, right); +} + +template +LIBMESH_DEVICE_INLINE +ResultTensor tensor_scale(const Scalar & alpha, const TensorLike & T_in) +{ + ResultTensor out; + out.zero(); + + for (unsigned int row = 0; row < LIBMESH_DIM; ++row) + for (unsigned int col = 0; col < LIBMESH_DIM; ++col) + tensor_set_component(out, row, col, alpha * tensor_get_component(T_in, row, col)); + + return out; +} + +template ::value, int>::type = 0> +LIBMESH_DEVICE_INLINE +tensor_semantic_type_t tensor_scale(const Scalar & alpha, const TensorLike & T_in) +{ + return tensor_scale>(alpha, T_in); +} + +template +LIBMESH_DEVICE_INLINE +ResultTensor tensor_divide(const TensorLike & T_in, const Scalar & alpha) +{ + ResultTensor out; + out.zero(); + + for (unsigned int row = 0; row < LIBMESH_DIM; ++row) + for (unsigned int col = 0; col < LIBMESH_DIM; ++col) + tensor_set_component(out, row, col, tensor_get_component(T_in, row, col) / alpha); + + return out; +} + +template ::value, int>::type = 0> +LIBMESH_DEVICE_INLINE +tensor_semantic_type_t tensor_divide(const TensorLike & T_in, const Scalar & alpha) +{ + return tensor_divide>(T_in, alpha); +} + +template +LIBMESH_DEVICE_INLINE +auto tensor_determinant(const TensorLike & T_in, const unsigned int dim = LIBMESH_DIM) +{ + static_assert(is_tensor_like_v, "tensor_determinant() requires a tensor-like input"); + + if (dim == 0) + return tensor_value_type_t(1); + + if (dim == 1) + return tensor_get_component(T_in, 0, 0); + + if (dim == 2) + return tensor_get_component(T_in, 0, 0) * tensor_get_component(T_in, 1, 1) - + tensor_get_component(T_in, 0, 1) * tensor_get_component(T_in, 1, 0); + +#if LIBMESH_DIM > 2 + const auto a00 = tensor_get_component(T_in, 0, 0); + const auto a01 = tensor_get_component(T_in, 0, 1); + const auto a02 = tensor_get_component(T_in, 0, 2); + const auto a10 = tensor_get_component(T_in, 1, 0); + const auto a11 = tensor_get_component(T_in, 1, 1); + const auto a12 = tensor_get_component(T_in, 1, 2); + const auto a20 = tensor_get_component(T_in, 2, 0); + const auto a21 = tensor_get_component(T_in, 2, 1); + const auto a22 = tensor_get_component(T_in, 2, 2); + + return a00 * (a11 * a22 - a12 * a21) - + a01 * (a10 * a22 - a12 * a20) + + a02 * (a10 * a21 - a11 * a20); +#else + libmesh_ignore(T_in); + return tensor_value_type_t(0); +#endif +} + +template +LIBMESH_DEVICE_INLINE +ResultTensor tensor_inverse(const TensorLike & T_in, const unsigned int dim = LIBMESH_DIM) +{ + static_assert(is_tensor_like_v, "tensor_inverse() requires a tensor-like input"); + + ResultTensor out; + out.zero(); + + if (dim == 0) + return out; + + if (dim == 1) + { + tensor_set_component(out, 0, 0, tensor_value_type_t(1) / tensor_get_component(T_in, 0, 0)); + return out; + } + + const auto det = tensor_determinant(T_in, dim); + + if (dim == 2) + { + tensor_set_component(out, 0, 0, tensor_get_component(T_in, 1, 1) / det); + tensor_set_component(out, 0, 1, -tensor_get_component(T_in, 0, 1) / det); + tensor_set_component(out, 1, 0, -tensor_get_component(T_in, 1, 0) / det); + tensor_set_component(out, 1, 1, tensor_get_component(T_in, 0, 0) / det); + return out; + } + +#if LIBMESH_DIM > 2 + const auto a00 = tensor_get_component(T_in, 0, 0); + const auto a01 = tensor_get_component(T_in, 0, 1); + const auto a02 = tensor_get_component(T_in, 0, 2); + const auto a10 = tensor_get_component(T_in, 1, 0); + const auto a11 = tensor_get_component(T_in, 1, 1); + const auto a12 = tensor_get_component(T_in, 1, 2); + const auto a20 = tensor_get_component(T_in, 2, 0); + const auto a21 = tensor_get_component(T_in, 2, 1); + const auto a22 = tensor_get_component(T_in, 2, 2); + + tensor_set_component(out, 0, 0, (a11 * a22 - a12 * a21) / det); + tensor_set_component(out, 0, 1, (a02 * a21 - a01 * a22) / det); + tensor_set_component(out, 0, 2, (a01 * a12 - a02 * a11) / det); + tensor_set_component(out, 1, 0, (a12 * a20 - a10 * a22) / det); + tensor_set_component(out, 1, 1, (a00 * a22 - a02 * a20) / det); + tensor_set_component(out, 1, 2, (a02 * a10 - a00 * a12) / det); + tensor_set_component(out, 2, 0, (a10 * a21 - a11 * a20) / det); + tensor_set_component(out, 2, 1, (a01 * a20 - a00 * a21) / det); + tensor_set_component(out, 2, 2, (a00 * a11 - a01 * a10) / det); +#else + libmesh_ignore(T_in); +#endif + + return out; +} + +template ::value, int>::type = 0> +LIBMESH_DEVICE_INLINE +tensor_semantic_type_t tensor_inverse(const TensorLike & T_in, const unsigned int dim = LIBMESH_DIM) +{ + return tensor_inverse>(T_in, dim); +} + +template +LIBMESH_DEVICE_INLINE +ResultTensor tensor_transpose(const TensorLike & T_in) +{ + ResultTensor out; + out.zero(); + + for (unsigned int row = 0; row < LIBMESH_DIM; ++row) + for (unsigned int col = 0; col < LIBMESH_DIM; ++col) + tensor_set_component(out, row, col, tensor_get_component(T_in, col, row)); + + return out; +} + +template ::value, int>::type = 0> +LIBMESH_DEVICE_INLINE +tensor_semantic_type_t tensor_transpose(const TensorLike & T_in) +{ + return tensor_transpose>(T_in); +} + +template +LIBMESH_DEVICE_INLINE +ResultTensor tensor_linear_combination(const ScalarA & alpha, + const TensorA & A, + const ScalarB & beta, + const TensorB & B) +{ + ResultTensor out; + out.zero(); + + for (unsigned int row = 0; row < LIBMESH_DIM; ++row) + for (unsigned int col = 0; col < LIBMESH_DIM; ++col) + tensor_set_component(out, + row, + col, + alpha * tensor_get_component(A, row, col) + + beta * tensor_get_component(B, row, col)); + + return out; +} + +template ::value, int>::type = 0> +LIBMESH_DEVICE_INLINE +tensor_semantic_type_t tensor_linear_combination(const ScalarA & alpha, + const TensorA & A, + const ScalarB & beta, + const TensorB & B) +{ + return tensor_linear_combination>(alpha, A, beta, B); +} + +template +LIBMESH_DEVICE_INLINE +ResultTensor tensor_multiply(const LeftTensor & left, const RightTensor & right) +{ + ResultTensor out; + out.zero(); + + for (unsigned int row = 0; row < LIBMESH_DIM; ++row) + for (unsigned int col = 0; col < LIBMESH_DIM; ++col) + { + auto value = tensor_get_component(left, row, 0) * tensor_get_component(right, 0, col); + for (unsigned int k = 1; k < LIBMESH_DIM; ++k) + value += tensor_get_component(left, row, k) * tensor_get_component(right, k, col); + tensor_set_component(out, row, col, value); + } + + return out; +} + +template ::value, int>::type = 0> +LIBMESH_DEVICE_INLINE +tensor_semantic_type_t tensor_multiply(const LeftTensor & left, const RightTensor & right) +{ + return tensor_multiply>(left, right); +} + +// Tensor/vector conversions + +template +LIBMESH_DEVICE_INLINE +ResultVector tensor_row(const TensorLike & T_in, const unsigned int row) +{ + ResultVector out; + out.zero(); + + for (unsigned int col = 0; col < LIBMESH_DIM; ++col) + vector_set_component(out, col, tensor_get_component(T_in, row, col)); + + return out; +} + +template ::value, int>::type = 0> +LIBMESH_DEVICE_INLINE +libMesh::TypeVector> +tensor_row(const TensorLike & T_in, const unsigned int row) +{ + return tensor_row>>(T_in, row); +} + +template +LIBMESH_DEVICE_INLINE +ResultVector tensor_column(const TensorLike & T_in, const unsigned int col) +{ + ResultVector out; + out.zero(); + + for (unsigned int row = 0; row < LIBMESH_DIM; ++row) + vector_set_component(out, row, tensor_get_component(T_in, row, col)); + + return out; +} + +template ::value, int>::type = 0> +LIBMESH_DEVICE_INLINE +libMesh::TypeVector> +tensor_column(const TensorLike & T_in, const unsigned int col) +{ + return tensor_column>>(T_in, col); +} + +template +LIBMESH_DEVICE_INLINE +ResultVector tensor_vector_multiply(const TensorLike & T_in, const VectorLike & v) +{ + ResultVector out; + out.zero(); + + for (unsigned int row = 0; row < LIBMESH_DIM; ++row) + { + auto value = tensor_get_component(T_in, row, 0) * vector_get_component(v, 0); + for (unsigned int col = 1; col < LIBMESH_DIM; ++col) + value += tensor_get_component(T_in, row, col) * vector_get_component(v, col); + vector_set_component(out, row, value); + } + + return out; +} + +template ::value, int>::type = 0> +LIBMESH_DEVICE_INLINE +vector_semantic_type_t tensor_vector_multiply(const TensorLike & T_in, const VectorLike & v) +{ + return tensor_vector_multiply>(T_in, v); +} + +template +LIBMESH_DEVICE_INLINE +ResultVector vector_tensor_multiply(const VectorLike & v, const TensorLike & T_in) +{ + ResultVector out; + out.zero(); + + for (unsigned int col = 0; col < LIBMESH_DIM; ++col) + { + auto value = vector_get_component(v, 0) * tensor_get_component(T_in, 0, col); + for (unsigned int row = 1; row < LIBMESH_DIM; ++row) + value += vector_get_component(v, row) * tensor_get_component(T_in, row, col); + vector_set_component(out, col, value); + } + + return out; +} + +template ::value, int>::type = 0> +LIBMESH_DEVICE_INLINE +vector_semantic_type_t vector_tensor_multiply(const VectorLike & v, const TensorLike & T_in) +{ + return vector_tensor_multiply>(v, T_in); +} + +// libMesh-like convenience wrappers + +template +LIBMESH_DEVICE_INLINE +auto contract(const LeftTensor & left, const RightTensor & right) + -> std::enable_if_t && is_tensor_like_v, + decltype(tensor_contract(left, right))> +{ + return tensor_contract(left, right); +} + +template +LIBMESH_DEVICE_INLINE +auto norm_sq(const TensorLike & T_in) + -> std::enable_if_t, decltype(tensor_norm_sq(T_in))> +{ + return tensor_norm_sq(T_in); +} + +template +LIBMESH_DEVICE_INLINE +auto norm(const TensorLike & T_in) + -> std::enable_if_t, decltype(tensor_norm(T_in))> +{ + return tensor_norm(T_in); +} + +template +LIBMESH_DEVICE_INLINE +auto is_zero(const TensorLike & T_in) + -> std::enable_if_t, bool> +{ + return tensor_is_zero(T_in); +} + +template +LIBMESH_DEVICE_INLINE +auto outer_product(const LeftVector & left, const RightVector & right) + -> std::enable_if_t && is_vector_like_v, + libMesh::TypeTensor>> +{ + return tensor_outer_product(left, right); +} + +template +LIBMESH_DEVICE_INLINE +auto transpose(const TensorLike & T_in) + -> std::enable_if_t, tensor_semantic_type_t> +{ + return tensor_transpose(T_in); +} + +template +LIBMESH_DEVICE_INLINE +auto det(const TensorLike & T_in) + -> std::enable_if_t, decltype(tensor_determinant(T_in))> +{ + return tensor_determinant(T_in); +} + +template +LIBMESH_DEVICE_INLINE +auto inverse(const TensorLike & T_in, const unsigned int dim = LIBMESH_DIM) + -> std::enable_if_t, tensor_semantic_type_t> +{ + return tensor_inverse(T_in, dim); +} + +template +LIBMESH_DEVICE_INLINE +auto row(const TensorLike & T_in, const unsigned int i) + -> std::enable_if_t, libMesh::TypeVector>> +{ + return tensor_row(T_in, i); +} + +template +LIBMESH_DEVICE_INLINE +auto column(const TensorLike & T_in, const unsigned int i) + -> std::enable_if_t, libMesh::TypeVector>> +{ + return tensor_column(T_in, i); +} + +template +LIBMESH_DEVICE_INLINE +auto multiply(const LeftTensor & left, const RightTensor & right) + -> std::enable_if_t && is_tensor_like_v, + tensor_semantic_type_t> +{ + return tensor_multiply(left, right); +} + +template +LIBMESH_DEVICE_INLINE +auto multiply(const TensorLike & T_in, const VectorLike & v) + -> std::enable_if_t && is_vector_like_v, + vector_semantic_type_t> +{ + return tensor_vector_multiply(T_in, v); +} + +template +LIBMESH_DEVICE_INLINE +auto multiply(const VectorLike & v, const TensorLike & T_in) + -> std::enable_if_t && is_tensor_like_v, + vector_semantic_type_t> +{ + return vector_tensor_multiply(v, T_in); +} + +template +template +LIBMESH_DEVICE_INLINE +void tensor_ref::assign(const RightTensor & right) +{ + for (unsigned int row = 0; row < LIBMESH_DIM; ++row) + for (unsigned int col = 0; col < LIBMESH_DIM; ++col) + tensor_set_component(*this, row, col, tensor_get_component(right, row, col)); +} + +template +template +LIBMESH_DEVICE_INLINE +void tensor_ref::add(const RightTensor & right) +{ + for (unsigned int row = 0; row < LIBMESH_DIM; ++row) + for (unsigned int col = 0; col < LIBMESH_DIM; ++col) + tensor_set_component(*this, + row, + col, + tensor_get_component(*this, row, col) + tensor_get_component(right, row, col)); +} + +template +template +LIBMESH_DEVICE_INLINE +void tensor_ref::add_scaled(const RightTensor & right, const value_type & factor) +{ + for (unsigned int row = 0; row < LIBMESH_DIM; ++row) + for (unsigned int col = 0; col < LIBMESH_DIM; ++col) + tensor_set_component(*this, + row, + col, + tensor_get_component(*this, row, col) + + factor * tensor_get_component(right, row, col)); +} + +template +template +LIBMESH_DEVICE_INLINE +void tensor_ref::subtract(const RightTensor & right) +{ + for (unsigned int row = 0; row < LIBMESH_DIM; ++row) + for (unsigned int col = 0; col < LIBMESH_DIM; ++col) + tensor_set_component(*this, + row, + col, + tensor_get_component(*this, row, col) - tensor_get_component(right, row, col)); +} + +template +template +LIBMESH_DEVICE_INLINE +void tensor_ref::subtract_scaled(const RightTensor & right, const value_type & factor) +{ + for (unsigned int row = 0; row < LIBMESH_DIM; ++row) + for (unsigned int col = 0; col < LIBMESH_DIM; ++col) + tensor_set_component(*this, + row, + col, + tensor_get_component(*this, row, col) - + factor * tensor_get_component(right, row, col)); +} + +template +LIBMESH_DEVICE_INLINE +void tensor_ref::zero() +{ + for (unsigned int row = 0; row < LIBMESH_DIM; ++row) + for (unsigned int col = 0; col < LIBMESH_DIM; ++col) + tensor_set_component(*this, row, col, value_type(0)); +} + +template +template +LIBMESH_DEVICE_INLINE +auto tensor_ref::contract(const RightTensor & right) const +{ + return tensor_contract(*this, right); +} + +template +LIBMESH_DEVICE_INLINE +auto tensor_ref::norm() const +{ + return tensor_norm(*this); +} + +template +LIBMESH_DEVICE_INLINE +auto tensor_ref::norm_sq() const +{ + return tensor_norm_sq(*this); +} + +template +LIBMESH_DEVICE_INLINE +bool tensor_ref::is_zero() const +{ + return tensor_is_zero(*this); +} + +template +LIBMESH_DEVICE_INLINE +auto tensor_ref::transpose() const +{ + return tensor_transpose(*this); +} + +template +LIBMESH_DEVICE_INLINE +auto tensor_ref::det(const unsigned int dim) const +{ + return tensor_determinant(*this, dim); +} + +template +LIBMESH_DEVICE_INLINE +auto tensor_ref::tr() const +{ + return tensor_trace(*this); +} + +template +LIBMESH_DEVICE_INLINE +auto tensor_ref::inverse(const unsigned int dim) const +{ + return tensor_inverse(*this, dim); +} + +template +template +LIBMESH_DEVICE_INLINE +void tensor_ref::solve(const VectorLike & b, ResultVector & x) const +{ + const auto solution = tensor_vector_multiply>(this->inverse(), b); + for (unsigned int component = 0; component < LIBMESH_DIM; ++component) + vector_set_component(x, component, vector_get_component(solution, component)); +} + +template +LIBMESH_DEVICE_INLINE +auto tensor_ref::row(const unsigned int i) const +{ + return tensor_row(*this, i); +} + +template +LIBMESH_DEVICE_INLINE +auto tensor_ref::column(const unsigned int i) const +{ + return tensor_column(*this, i); +} + +template +template +LIBMESH_DEVICE_INLINE +auto tensor_ref::left_multiply(const VectorLike & v) const +{ + return vector_tensor_multiply(v, *this); +} + +// Operator-compatible wrappers for storage-backed refs and mixed ref/owning math. + +template +LIBMESH_DEVICE_INLINE +auto operator-(const TensorLike & T_in) + -> std::enable_if_t && is_tensor_ref_v, + tensor_semantic_type_t> +{ + return tensor_scale(tensor_value_type_t(-1), T_in); +} + +template +LIBMESH_DEVICE_INLINE +auto operator+(const LeftTensor & left, const RightTensor & right) + -> std::enable_if_t && is_tensor_like_v && + (is_tensor_ref_v || is_tensor_ref_v), + tensor_semantic_type_t> +{ + return tensor_add(left, right); +} + +template +LIBMESH_DEVICE_INLINE +auto operator-(const LeftTensor & left, const RightTensor & right) + -> std::enable_if_t && is_tensor_like_v && + (is_tensor_ref_v || is_tensor_ref_v), + tensor_semantic_type_t> +{ + return tensor_subtract(left, right); +} + +template && !is_tensor_like_v && + is_tensor_like_v && is_tensor_ref_v, + int>::type = 0> +LIBMESH_DEVICE_INLINE +auto operator*(const Scalar & alpha, const TensorLike & T_in) +{ + return tensor_scale(alpha, T_in); +} + +template && is_tensor_ref_v && + !is_vector_like_v && !is_tensor_like_v, + int>::type = 0> +LIBMESH_DEVICE_INLINE +auto operator*(const TensorLike & T_in, const Scalar & alpha) +{ + return tensor_scale(alpha, T_in); +} + +template +LIBMESH_DEVICE_INLINE +auto operator/(const TensorLike & T_in, const Scalar & alpha) + -> std::enable_if_t && is_tensor_ref_v && + !is_vector_like_v && !is_tensor_like_v, + tensor_semantic_type_t> +{ + return tensor_divide(T_in, alpha); +} + +template && is_tensor_like_v && + (is_tensor_ref_v || is_tensor_ref_v), + int>::type = 0> +LIBMESH_DEVICE_INLINE +auto operator*(const LeftTensor & left, const RightTensor & right) +{ + return tensor_multiply(left, right); +} + +template && is_vector_like_v && + (is_tensor_ref_v || is_vector_ref_v), + int>::type = 0> +LIBMESH_DEVICE_INLINE +auto operator*(const TensorLike & T_in, const VectorLike & v) +{ + return tensor_vector_multiply(T_in, v); +} + +template && is_tensor_like_v && + (is_vector_ref_v || is_tensor_ref_v), + int>::type = 0> +LIBMESH_DEVICE_INLINE +auto operator*(const VectorLike & v, const TensorLike & T_in) +{ + return vector_tensor_multiply(v, T_in); +} + +template +LIBMESH_DEVICE_INLINE +auto operator==(const LeftTensor & left, const RightTensor & right) + -> std::enable_if_t && is_tensor_like_v && + (is_tensor_ref_v || is_tensor_ref_v), + bool> +{ + return tensor_equal(left, right); +} + +template +LIBMESH_DEVICE_INLINE +auto operator!=(const LeftTensor & left, const RightTensor & right) + -> std::enable_if_t && is_tensor_like_v && + (is_tensor_ref_v || is_tensor_ref_v), + bool> +{ + return tensor_not_equal(left, right); +} + +template +LIBMESH_DEVICE_INLINE +auto operator+=(LeftTensor & left, const RightTensor & right) + -> std::enable_if_t && is_tensor_like_v && + (is_tensor_ref_v || is_tensor_ref_v), + LeftTensor &> +{ + for (unsigned int row = 0; row < LIBMESH_DIM; ++row) + for (unsigned int col = 0; col < LIBMESH_DIM; ++col) + tensor_set_component(left, + row, + col, + tensor_get_component(left, row, col) + tensor_get_component(right, row, col)); + + return left; +} + +template +LIBMESH_DEVICE_INLINE +auto operator-=(LeftTensor & left, const RightTensor & right) + -> std::enable_if_t && is_tensor_like_v && + (is_tensor_ref_v || is_tensor_ref_v), + LeftTensor &> +{ + for (unsigned int row = 0; row < LIBMESH_DIM; ++row) + for (unsigned int col = 0; col < LIBMESH_DIM; ++col) + tensor_set_component(left, + row, + col, + tensor_get_component(left, row, col) - tensor_get_component(right, row, col)); + + return left; +} + +template +LIBMESH_DEVICE_INLINE +auto operator*=(LeftTensor & left, const Scalar & alpha) + -> std::enable_if_t && is_tensor_ref_v && + !is_vector_like_v && !is_tensor_like_v, + LeftTensor &> +{ + for (unsigned int row = 0; row < LIBMESH_DIM; ++row) + for (unsigned int col = 0; col < LIBMESH_DIM; ++col) + tensor_set_component(left, row, col, tensor_get_component(left, row, col) * alpha); + + return left; +} + +template +LIBMESH_DEVICE_INLINE +auto operator/=(LeftTensor & left, const Scalar & alpha) + -> std::enable_if_t && is_tensor_ref_v && + !is_vector_like_v && !is_tensor_like_v, + LeftTensor &> +{ + for (unsigned int row = 0; row < LIBMESH_DIM; ++row) + for (unsigned int col = 0; col < LIBMESH_DIM; ++col) + tensor_set_component(left, row, col, tensor_get_component(left, row, col) / alpha); + + return left; +} + +} // namespace libMesh::Kokkos + +#endif // LIBMESH_KOKKOS_TENSOR_OPS_H diff --git a/include/gpu/kokkos_vector_ops.h b/include/gpu/kokkos_vector_ops.h new file mode 100644 index 00000000000..3fb14068661 --- /dev/null +++ b/include/gpu/kokkos_vector_ops.h @@ -0,0 +1,746 @@ +// libMesh Kokkos generic vector operations. +// +// These free functions build vector algebra on top of the primitive +// access/materialization layer in kokkos_linalg_base.h. They are written +// against vector-like inputs so both libMesh owning types and storage-backed +// refs can participate in the same math. + +#ifndef LIBMESH_KOKKOS_VECTOR_OPS_H +#define LIBMESH_KOKKOS_VECTOR_OPS_H + +#include "libmesh/kokkos_linalg_base.h" + +#include "libmesh/tensor_tools.h" + +#include + +namespace libMesh::Kokkos +{ + +// Construction and materialization + +template +LIBMESH_DEVICE_INLINE +ResultVector zero_vector_value() +{ + ResultVector out; + out.zero(); + return out; +} + +template +LIBMESH_DEVICE_INLINE +ResultVector copy_vector(const VectorLike & v) +{ + return materialize_vector(v); +} + +template ::value, int>::type = 0> +LIBMESH_DEVICE_INLINE +vector_semantic_type_t copy_vector(const VectorLike & v) +{ + return copy_vector>(v); +} + +// Reductions and predicates + +template +LIBMESH_DEVICE_INLINE +auto vector_dot(const LeftVector & left, const RightVector & right) +{ + static_assert(is_vector_like_v, "vector_dot() requires a vector-like left input"); + static_assert(is_vector_like_v, "vector_dot() requires a vector-like right input"); + + using sum_type = + detail::remove_cvref_t; + + sum_type sum = sum_type(0); + for (unsigned int component = 0; component < LIBMESH_DIM; ++component) + sum += vector_get_component(left, component) * vector_get_component(right, component); + + return sum; +} + +template +LIBMESH_DEVICE_INLINE +auto vector_contract(const LeftVector & left, const RightVector & right) +{ + return vector_dot(left, right); +} + +template +LIBMESH_DEVICE_INLINE +auto vector_norm_sq(const VectorLike & v) +{ + static_assert(is_vector_like_v, "vector_norm_sq() requires a vector-like input"); + + using norm_type = detail::remove_cvref_t; + + norm_type sum = norm_type(0); + for (unsigned int component = 0; component < LIBMESH_DIM; ++component) + sum += libMesh::TensorTools::norm_sq(vector_get_component(v, component)); + + return sum; +} + +template +LIBMESH_DEVICE_INLINE +auto vector_norm(const VectorLike & v) +{ + using std::sqrt; + return sqrt(vector_norm_sq(v)); +} + +template +LIBMESH_DEVICE_INLINE +auto vector_l1_norm(const VectorLike & v) +{ + static_assert(is_vector_like_v, "vector_l1_norm() requires a vector-like input"); + + using std::abs; + using norm_type = detail::remove_cvref_t; + + norm_type sum = norm_type(0); + for (unsigned int component = 0; component < LIBMESH_DIM; ++component) + sum += abs(vector_get_component(v, component)); + + return sum; +} + +template +LIBMESH_DEVICE_INLINE +bool vector_is_zero(const VectorLike & v) +{ + static_assert(is_vector_like_v, "vector_is_zero() requires a vector-like input"); + + for (unsigned int component = 0; component < LIBMESH_DIM; ++component) + if (vector_get_component(v, component) != vector_value_type_t(0)) + return false; + + return true; +} + +template +LIBMESH_DEVICE_INLINE +bool vector_equal(const LeftVector & left, const RightVector & right) +{ + static_assert(is_vector_like_v, "vector_equal() requires a vector-like left input"); + static_assert(is_vector_like_v, "vector_equal() requires a vector-like right input"); + + for (unsigned int component = 0; component < LIBMESH_DIM; ++component) + if (vector_get_component(left, component) != vector_get_component(right, component)) + return false; + + return true; +} + +template +LIBMESH_DEVICE_INLINE +bool vector_not_equal(const LeftVector & left, const RightVector & right) +{ + return !vector_equal(left, right); +} + +// Arithmetic + +template +LIBMESH_DEVICE_INLINE +ResultVector vector_add(const LeftVector & left, const RightVector & right) +{ + ResultVector out; + out.zero(); + + for (unsigned int component = 0; component < LIBMESH_DIM; ++component) + vector_set_component(out, + component, + vector_get_component(left, component) + vector_get_component(right, component)); + + return out; +} + +template ::value, int>::type = 0> +LIBMESH_DEVICE_INLINE +vector_semantic_type_t vector_add(const LeftVector & left, const RightVector & right) +{ + return vector_add>(left, right); +} + +template +LIBMESH_DEVICE_INLINE +ResultVector vector_subtract(const LeftVector & left, const RightVector & right) +{ + ResultVector out; + out.zero(); + + for (unsigned int component = 0; component < LIBMESH_DIM; ++component) + vector_set_component(out, + component, + vector_get_component(left, component) - vector_get_component(right, component)); + + return out; +} + +template ::value, int>::type = 0> +LIBMESH_DEVICE_INLINE +vector_semantic_type_t vector_subtract(const LeftVector & left, const RightVector & right) +{ + return vector_subtract>(left, right); +} + +template +LIBMESH_DEVICE_INLINE +ResultVector vector_scale(const Scalar & alpha, const VectorLike & v) +{ + ResultVector out; + out.zero(); + + for (unsigned int component = 0; component < LIBMESH_DIM; ++component) + vector_set_component(out, component, alpha * vector_get_component(v, component)); + + return out; +} + +template ::value, int>::type = 0> +LIBMESH_DEVICE_INLINE +vector_semantic_type_t vector_scale(const Scalar & alpha, const VectorLike & v) +{ + return vector_scale>(alpha, v); +} + +template +LIBMESH_DEVICE_INLINE +ResultVector vector_divide(const VectorLike & v, const Scalar & alpha) +{ + ResultVector out; + out.zero(); + + for (unsigned int component = 0; component < LIBMESH_DIM; ++component) + vector_set_component(out, component, vector_get_component(v, component) / alpha); + + return out; +} + +template ::value, int>::type = 0> +LIBMESH_DEVICE_INLINE +vector_semantic_type_t vector_divide(const VectorLike & v, const Scalar & alpha) +{ + return vector_divide>(v, alpha); +} + +template +LIBMESH_DEVICE_INLINE +ResultVector vector_linear_combination(const ScalarA & alpha, + const VectorA & a, + const ScalarB & beta, + const VectorB & b) +{ + ResultVector out; + out.zero(); + + for (unsigned int component = 0; component < LIBMESH_DIM; ++component) + vector_set_component(out, + component, + alpha * vector_get_component(a, component) + + beta * vector_get_component(b, component)); + + return out; +} + +template ::value, int>::type = 0> +LIBMESH_DEVICE_INLINE +vector_semantic_type_t vector_linear_combination(const ScalarA & alpha, + const VectorA & a, + const ScalarB & beta, + const VectorB & b) +{ + return vector_linear_combination>(alpha, a, beta, b); +} + +template +LIBMESH_DEVICE_INLINE +ResultVector vector_linear_combination(const ScalarA & alpha, + const VectorA & a, + const ScalarB & beta, + const VectorB & b, + const ScalarC & gamma, + const VectorC & c) +{ + ResultVector out; + out.zero(); + + for (unsigned int component = 0; component < LIBMESH_DIM; ++component) + vector_set_component(out, + component, + alpha * vector_get_component(a, component) + + beta * vector_get_component(b, component) + + gamma * vector_get_component(c, component)); + + return out; +} + +template ::value, int>::type = 0> +LIBMESH_DEVICE_INLINE +vector_semantic_type_t vector_linear_combination(const ScalarA & alpha, + const VectorA & a, + const ScalarB & beta, + const VectorB & b, + const ScalarC & gamma, + const VectorC & c) +{ + return vector_linear_combination>(alpha, a, beta, b, gamma, c); +} + +template +LIBMESH_DEVICE_INLINE +ResultVector vector_unit(const VectorLike & v) +{ + const auto length = vector_norm(v); + libmesh_assert_not_equal_to(length, static_cast(0.)); + return vector_divide(v, length); +} + +template ::value, int>::type = 0> +LIBMESH_DEVICE_INLINE +vector_semantic_type_t vector_unit(const VectorLike & v) +{ + return vector_unit>(v); +} + +// Geometry + +template +LIBMESH_DEVICE_INLINE +ResultVector vector_cross(const LeftVector & left, const RightVector & right) +{ + ResultVector out; + out.zero(); + +#if LIBMESH_DIM == 3 + vector_set_component(out, + 0, + vector_get_component(left, 1) * vector_get_component(right, 2) - + vector_get_component(left, 2) * vector_get_component(right, 1)); + vector_set_component(out, + 1, + -vector_get_component(left, 0) * vector_get_component(right, 2) + + vector_get_component(left, 2) * vector_get_component(right, 0)); + vector_set_component(out, + 2, + vector_get_component(left, 0) * vector_get_component(right, 1) - + vector_get_component(left, 1) * vector_get_component(right, 0)); +#else + libmesh_ignore(left); + libmesh_ignore(right); +#endif + + return out; +} + +template ::value, int>::type = 0> +LIBMESH_DEVICE_INLINE +vector_semantic_type_t vector_cross(const LeftVector & left, const RightVector & right) +{ + return vector_cross>(left, right); +} + +template +LIBMESH_DEVICE_INLINE +auto vector_triple_product(const LeftVector & left, + const MiddleVector & middle, + const RightVector & right) +{ +#if LIBMESH_DIM == 3 + return vector_get_component(left, 0) * + (vector_get_component(middle, 1) * vector_get_component(right, 2) - + vector_get_component(middle, 2) * vector_get_component(right, 1)) - + vector_get_component(left, 1) * + (vector_get_component(middle, 0) * vector_get_component(right, 2) - + vector_get_component(middle, 2) * vector_get_component(right, 0)) + + vector_get_component(left, 2) * + (vector_get_component(middle, 0) * vector_get_component(right, 1) - + vector_get_component(middle, 1) * vector_get_component(right, 0)); +#else + libmesh_ignore(left, middle, right); + using value_type = + detail::remove_cvref_t; + return value_type(0); +#endif +} + +template +LIBMESH_DEVICE_INLINE +auto vector_cross_norm_sq(const LeftVector & left, const RightVector & right) +{ + const auto z = vector_get_component(left, 0) * vector_get_component(right, 1) - + vector_get_component(left, 1) * vector_get_component(right, 0); + +#if LIBMESH_DIM == 3 + const auto x = vector_get_component(left, 1) * vector_get_component(right, 2) - + vector_get_component(left, 2) * vector_get_component(right, 1); + const auto y = vector_get_component(left, 0) * vector_get_component(right, 2) - + vector_get_component(left, 2) * vector_get_component(right, 0); + return x * x + y * y + z * z; +#else + return z * z; +#endif +} + +template +LIBMESH_DEVICE_INLINE +auto vector_solid_angle(const VectorA & v01, const VectorB & v02, const VectorC & v03) +{ + using std::atan; + + const auto norm01 = vector_norm(v01); + const auto norm02 = vector_norm(v02); + const auto norm03 = vector_norm(v03); + const auto tan_half_angle = + vector_triple_product(v01, v02, v03) / + (vector_dot(v01, v02) * norm03 + + vector_dot(v01, v03) * norm02 + + vector_dot(v02, v03) * norm01 + + norm01 * norm02 * norm03); + + return Real(2) * atan(tan_half_angle); +} + +// libMesh-like convenience wrappers + +template +LIBMESH_DEVICE_INLINE +auto contract(const LeftVector & left, const RightVector & right) + -> std::enable_if_t && is_vector_like_v, + decltype(vector_contract(left, right))> +{ + return vector_contract(left, right); +} + +template +LIBMESH_DEVICE_INLINE +auto norm_sq(const VectorLike & v) + -> std::enable_if_t, decltype(vector_norm_sq(v))> +{ + return vector_norm_sq(v); +} + +template +LIBMESH_DEVICE_INLINE +auto norm(const VectorLike & v) + -> std::enable_if_t, decltype(vector_norm(v))> +{ + return vector_norm(v); +} + +template +LIBMESH_DEVICE_INLINE +auto is_zero(const VectorLike & v) + -> std::enable_if_t, bool> +{ + return vector_is_zero(v); +} + +template +template +LIBMESH_DEVICE_INLINE +void vector_ref::assign(const RightVector & right) +{ + for (unsigned int component = 0; component < LIBMESH_DIM; ++component) + vector_set_component(*this, component, vector_get_component(right, component)); +} + +template +template +LIBMESH_DEVICE_INLINE +void vector_ref::add(const RightVector & right) +{ + for (unsigned int component = 0; component < LIBMESH_DIM; ++component) + vector_set_component(*this, + component, + vector_get_component(*this, component) + vector_get_component(right, component)); +} + +template +template +LIBMESH_DEVICE_INLINE +void vector_ref::add_scaled(const RightVector & right, const value_type & factor) +{ + for (unsigned int component = 0; component < LIBMESH_DIM; ++component) + vector_set_component(*this, + component, + vector_get_component(*this, component) + + factor * vector_get_component(right, component)); +} + +template +template +LIBMESH_DEVICE_INLINE +void vector_ref::subtract(const RightVector & right) +{ + for (unsigned int component = 0; component < LIBMESH_DIM; ++component) + vector_set_component(*this, + component, + vector_get_component(*this, component) - vector_get_component(right, component)); +} + +template +template +LIBMESH_DEVICE_INLINE +void vector_ref::subtract_scaled(const RightVector & right, const value_type & factor) +{ + for (unsigned int component = 0; component < LIBMESH_DIM; ++component) + vector_set_component(*this, + component, + vector_get_component(*this, component) - + factor * vector_get_component(right, component)); +} + +template +LIBMESH_DEVICE_INLINE +void vector_ref::zero() +{ + for (unsigned int component = 0; component < LIBMESH_DIM; ++component) + vector_set_component(*this, component, value_type(0)); +} + +template +template +LIBMESH_DEVICE_INLINE +auto vector_ref::contract(const RightVector & right) const +{ + return vector_contract(*this, right); +} + +template +LIBMESH_DEVICE_INLINE +auto vector_ref::norm() const +{ + return vector_norm(*this); +} + +template +LIBMESH_DEVICE_INLINE +auto vector_ref::norm_sq() const +{ + return vector_norm_sq(*this); +} + +template +LIBMESH_DEVICE_INLINE +auto vector_ref::l1_norm() const +{ + return vector_l1_norm(*this); +} + +template +LIBMESH_DEVICE_INLINE +bool vector_ref::is_zero() const +{ + return vector_is_zero(*this); +} + +template +LIBMESH_DEVICE_INLINE +auto vector_ref::unit() const +{ + return vector_unit(*this); +} + +template +template +LIBMESH_DEVICE_INLINE +auto vector_ref::cross(const RightVector & right) const +{ + return vector_cross(*this, right); +} + +// Operator-compatible wrappers for storage-backed refs and mixed ref/owning math. + +template +LIBMESH_DEVICE_INLINE +auto operator-(const VectorLike & v) + -> std::enable_if_t && is_vector_ref_v, + vector_semantic_type_t> +{ + return vector_scale(vector_value_type_t(-1), v); +} + +template +LIBMESH_DEVICE_INLINE +auto operator+(const LeftVector & left, const RightVector & right) + -> std::enable_if_t && is_vector_like_v && + (is_vector_ref_v || is_vector_ref_v), + vector_semantic_type_t> +{ + return vector_add(left, right); +} + +template +LIBMESH_DEVICE_INLINE +auto operator-(const LeftVector & left, const RightVector & right) + -> std::enable_if_t && is_vector_like_v && + (is_vector_ref_v || is_vector_ref_v), + vector_semantic_type_t> +{ + return vector_subtract(left, right); +} + +template && is_vector_like_v && + (is_vector_ref_v || is_vector_ref_v), + int>::type = 0> +LIBMESH_DEVICE_INLINE +auto operator*(const LeftVector & left, const RightVector & right) +{ + return vector_dot(left, right); +} + +template && !is_tensor_like_v && + is_vector_like_v && is_vector_ref_v, + int>::type = 0> +LIBMESH_DEVICE_INLINE +auto operator*(const Scalar & alpha, const VectorLike & v) +{ + return vector_scale(alpha, v); +} + +template && is_vector_ref_v && + !is_vector_like_v && !is_tensor_like_v, + int>::type = 0> +LIBMESH_DEVICE_INLINE +auto operator*(const VectorLike & v, const Scalar & alpha) +{ + return vector_scale(alpha, v); +} + +template && is_vector_ref_v && + !is_vector_like_v && !is_tensor_like_v, + int>::type = 0> +LIBMESH_DEVICE_INLINE +auto operator/(const VectorLike & v, const Scalar & alpha) +{ + return vector_divide(v, alpha); +} + +template +LIBMESH_DEVICE_INLINE +auto operator==(const LeftVector & left, const RightVector & right) + -> std::enable_if_t && is_vector_like_v && + (is_vector_ref_v || is_vector_ref_v), + bool> +{ + return vector_equal(left, right); +} + +template +LIBMESH_DEVICE_INLINE +auto operator!=(const LeftVector & left, const RightVector & right) + -> std::enable_if_t && is_vector_like_v && + (is_vector_ref_v || is_vector_ref_v), + bool> +{ + return vector_not_equal(left, right); +} + +template +LIBMESH_DEVICE_INLINE +auto operator+=(LeftVector & left, const RightVector & right) + -> std::enable_if_t && is_vector_like_v && + (is_vector_ref_v || is_vector_ref_v), + LeftVector &> +{ + for (unsigned int component = 0; component < LIBMESH_DIM; ++component) + vector_set_component(left, + component, + vector_get_component(left, component) + vector_get_component(right, component)); + + return left; +} + +template +LIBMESH_DEVICE_INLINE +auto operator-=(LeftVector & left, const RightVector & right) + -> std::enable_if_t && is_vector_like_v && + (is_vector_ref_v || is_vector_ref_v), + LeftVector &> +{ + for (unsigned int component = 0; component < LIBMESH_DIM; ++component) + vector_set_component(left, + component, + vector_get_component(left, component) - vector_get_component(right, component)); + + return left; +} + +template +LIBMESH_DEVICE_INLINE +auto operator*=(LeftVector & left, const Scalar & alpha) + -> std::enable_if_t && is_vector_ref_v && + !is_vector_like_v && !is_tensor_like_v, + LeftVector &> +{ + for (unsigned int component = 0; component < LIBMESH_DIM; ++component) + vector_set_component(left, component, vector_get_component(left, component) * alpha); + + return left; +} + +template +LIBMESH_DEVICE_INLINE +auto operator/=(LeftVector & left, const Scalar & alpha) + -> std::enable_if_t && is_vector_ref_v && + !is_vector_like_v && !is_tensor_like_v, + LeftVector &> +{ + for (unsigned int component = 0; component < LIBMESH_DIM; ++component) + vector_set_component(left, component, vector_get_component(left, component) / alpha); + + return left; +} + +} // namespace libMesh::Kokkos + +#endif // LIBMESH_KOKKOS_VECTOR_OPS_H diff --git a/include/include_HEADERS b/include/include_HEADERS index 115b473ba2e..a08484a3083 100644 --- a/include/include_HEADERS +++ b/include/include_HEADERS @@ -28,6 +28,7 @@ include_HEADERS = \ base/libmesh_abort.h \ base/libmesh_base.h \ base/libmesh_common.h \ + base/libmesh_device.h \ base/libmesh_documentation.h \ base/libmesh_exceptions.h \ base/libmesh_logging.h \ @@ -174,6 +175,11 @@ include_HEADERS = \ geom/sphere.h \ geom/stored_range.h \ geom/surface.h \ + gpu/kokkos_linalg_base.h \ + gpu/kokkos_storage.h \ + gpu/kokkos_storage_policy.h \ + gpu/kokkos_tensor_ops.h \ + gpu/kokkos_vector_ops.h \ ghosting/default_coupling.h \ ghosting/ghost_point_neighbors.h \ ghosting/ghosting_functor.h \ diff --git a/include/libmesh/Makefile.am b/include/libmesh/Makefile.am index 7b8880c3a42..25470b1ea0e 100644 --- a/include/libmesh/Makefile.am +++ b/include/libmesh/Makefile.am @@ -19,6 +19,7 @@ BUILT_SOURCES = \ libmesh_augment_std_namespace.h \ libmesh_base.h \ libmesh_common.h \ + libmesh_device.h \ libmesh_documentation.h \ libmesh_exceptions.h \ libmesh_logging.h \ @@ -172,6 +173,11 @@ BUILT_SOURCES = \ overlap_coupling.h \ point_neighbor_coupling.h \ sibling_coupling.h \ + kokkos_linalg_base.h \ + kokkos_storage.h \ + kokkos_storage_policy.h \ + kokkos_tensor_ops.h \ + kokkos_vector_ops.h \ abaqus_io.h \ boundary_info.h \ boundary_mesh.h \ @@ -657,6 +663,9 @@ libmesh_base.h: $(top_srcdir)/include/base/libmesh_base.h libmesh_common.h: $(top_srcdir)/include/base/libmesh_common.h $(AM_V_GEN)rm -f $@ && $(LN_S) -f $< $@ +libmesh_device.h: $(top_srcdir)/include/base/libmesh_device.h + $(AM_V_GEN)rm -f $@ && $(LN_S) -f $< $@ + libmesh_documentation.h: $(top_srcdir)/include/base/libmesh_documentation.h $(AM_V_GEN)rm -f $@ && $(LN_S) -f $< $@ @@ -1116,6 +1125,21 @@ point_neighbor_coupling.h: $(top_srcdir)/include/ghosting/point_neighbor_couplin sibling_coupling.h: $(top_srcdir)/include/ghosting/sibling_coupling.h $(AM_V_GEN)rm -f $@ && $(LN_S) -f $< $@ +kokkos_linalg_base.h: $(top_srcdir)/include/gpu/kokkos_linalg_base.h + $(AM_V_GEN)rm -f $@ && $(LN_S) -f $< $@ + +kokkos_storage.h: $(top_srcdir)/include/gpu/kokkos_storage.h + $(AM_V_GEN)rm -f $@ && $(LN_S) -f $< $@ + +kokkos_storage_policy.h: $(top_srcdir)/include/gpu/kokkos_storage_policy.h + $(AM_V_GEN)rm -f $@ && $(LN_S) -f $< $@ + +kokkos_tensor_ops.h: $(top_srcdir)/include/gpu/kokkos_tensor_ops.h + $(AM_V_GEN)rm -f $@ && $(LN_S) -f $< $@ + +kokkos_vector_ops.h: $(top_srcdir)/include/gpu/kokkos_vector_ops.h + $(AM_V_GEN)rm -f $@ && $(LN_S) -f $< $@ + abaqus_io.h: $(top_srcdir)/include/mesh/abaqus_io.h $(AM_V_GEN)rm -f $@ && $(LN_S) -f $< $@ @@ -2138,4 +2162,3 @@ xdr_cxx.h: $(top_srcdir)/include/utils/xdr_cxx.h parallel_communicator_specializations: $(top_srcdir)/include/timpi_shims/parallel_communicator_specializations $(AM_V_GEN)rm -f $@ && $(LN_S) -f $< $@ - From de66cbdb1e51d4cb1000c855c252a297074a7e66 Mon Sep 17 00:00:00 2001 From: rochi00 Date: Fri, 8 May 2026 15:04:52 -0600 Subject: [PATCH 04/46] Add Kokkos numerics oracle test infrastructure --- tests/Makefile.am | 41 +- .../kokkos_numerics_oracle_test_utils.h | 90 ++++ .../kokkos_tensor_ops_oracle_fixtures.h | 161 ++++++ .../kokkos_tensor_ops_oracle_runners.h | 482 ++++++++++++++++++ .../kokkos_vector_ops_oracle_fixtures.h | 223 ++++++++ .../kokkos_vector_ops_oracle_runners.h | 327 ++++++++++++ 6 files changed, 1323 insertions(+), 1 deletion(-) create mode 100644 tests/numerics/kokkos_numerics_oracle_test_utils.h create mode 100644 tests/numerics/kokkos_tensor_ops_oracle_fixtures.h create mode 100644 tests/numerics/kokkos_tensor_ops_oracle_runners.h create mode 100644 tests/numerics/kokkos_vector_ops_oracle_fixtures.h create mode 100644 tests/numerics/kokkos_vector_ops_oracle_runners.h diff --git a/tests/Makefile.am b/tests/Makefile.am index bb12f424833..6efb6d23e88 100644 --- a/tests/Makefile.am +++ b/tests/Makefile.am @@ -7,6 +7,7 @@ AM_CPPFLAGS = $(libmesh_optional_INCLUDES) -I$(top_builddir)/include \ -DLIBMESH_IS_UNIT_TESTING AM_LDFLAGS = $(libmesh_LDFLAGS) $(libmesh_contrib_LDFLAGS) LIBS = $(libmesh_optional_LIBS) $(CPPUNIT_LIBS) +KOKKOS_TEST_CPPFLAGS = # We might have turned on -Werror and/or paranoid warnings CXXFLAGS_DBG += $(ACSM_ANY_WERROR_FLAG) $(ACSM_ANY_PARANOID_FLAGS) @@ -248,6 +249,26 @@ if LIBMESH_ENABLE_FPARSER endif check_PROGRAMS = # empty, append below +TESTS = + +if LIBMESH_ENABLE_KOKKOS + KOKKOS_TEST_CPPFLAGS += -I$(top_srcdir)/include $(KOKKOS_CPPFLAGS) + + check_PROGRAMS += kokkos_vector_ops_oracle_unit kokkos_tensor_ops_oracle_unit + TESTS += kokkos_vector_ops_oracle_unit kokkos_tensor_ops_oracle_unit + + kokkos_vector_ops_oracle_unit_SOURCES = numerics/kokkos_vector_ops_oracle_test.K + kokkos_vector_ops_oracle_unit_CPPFLAGS = $(AM_CPPFLAGS) $(KOKKOS_TEST_CPPFLAGS) + kokkos_vector_ops_oracle_unit_CXXFLAGS = $(AM_CXXFLAGS) $(KOKKOS_CXXFLAGS) + kokkos_vector_ops_oracle_unit_LDFLAGS = $(AM_LDFLAGS) $(KOKKOS_LDFLAGS) + kokkos_vector_ops_oracle_unit_LDADD = $(top_builddir)/libmesh_opt.la $(KOKKOS_LIBS) $(libmesh_optional_LIBS) + + kokkos_tensor_ops_oracle_unit_SOURCES = numerics/kokkos_tensor_ops_oracle_test.K + kokkos_tensor_ops_oracle_unit_CPPFLAGS = $(AM_CPPFLAGS) $(KOKKOS_TEST_CPPFLAGS) + kokkos_tensor_ops_oracle_unit_CXXFLAGS = $(AM_CXXFLAGS) $(KOKKOS_CXXFLAGS) + kokkos_tensor_ops_oracle_unit_LDFLAGS = $(AM_LDFLAGS) $(KOKKOS_LDFLAGS) + kokkos_tensor_ops_oracle_unit_LDADD = $(top_builddir)/libmesh_opt.la $(KOKKOS_LIBS) $(libmesh_optional_LIBS) +endif # our GLIBC debugging preprocessor flags seem to potentially conflict # with libcppunit binaries. Some cppunit versions work fine for us, @@ -358,9 +379,27 @@ $(top_builddir)/libmesh_oprof.la: FORCE if LIBMESH_ENABLE_CPPUNIT -TESTS = run_unit_tests.sh +TESTS += run_unit_tests.sh endif +# Compile .K translation units with the Kokkos device compiler. +# $(MPI_INCLUDES) is needed because KOKKOS_CXX may be nvcc/hipcc +# instead of the MPI compiler wrapper, so mpi.h won't be found implicitly. +.K.o: + $(KOKKOS_CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ + $(MPI_INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(KOKKOS_TEST_CPPFLAGS) \ + $(AM_CXXFLAGS) $(CXXFLAGS) $(KOKKOS_CXXFLAGS) \ + -c $< -o $@ + +# Custom link rules so the Kokkos compiler drives the final link step. +kokkos_vector_ops_oracle_unit_LINK = \ + $(LIBTOOL) --tag=CXX --mode=link $(KOKKOS_CXX) \ + $(LDFLAGS) $(kokkos_vector_ops_oracle_unit_LDFLAGS) -o $@ + +kokkos_tensor_ops_oracle_unit_LINK = \ + $(LIBTOOL) --tag=CXX --mode=link $(KOKKOS_CXX) \ + $(LDFLAGS) $(kokkos_tensor_ops_oracle_unit_LDFLAGS) -o $@ + CLEANFILES = cube_mesh.xda \ slit_mesh.xda \ slit_solution.xda \ diff --git a/tests/numerics/kokkos_numerics_oracle_test_utils.h b/tests/numerics/kokkos_numerics_oracle_test_utils.h new file mode 100644 index 00000000000..c25ce2a056e --- /dev/null +++ b/tests/numerics/kokkos_numerics_oracle_test_utils.h @@ -0,0 +1,90 @@ +#ifndef KOKKOS_NUMERICS_ORACLE_TEST_UTILS_H +#define KOKKOS_NUMERICS_ORACLE_TEST_UTILS_H + +#include "libmesh/libmesh.h" + +// Avoid conflicting complex operators between CUDA and PETSc +#define PETSC_SKIP_CXX_COMPLEX_FIX 1 +#include +#undef __CUDACC_VER__ + +#include +#include +#include + +namespace libMeshTest +{ +namespace KokkosOracle +{ + +using libMesh::Real; + +template +inline ::Kokkos::View +upload_objects(const std::vector & values, const char * label) +{ + ::Kokkos::View d(std::string(label), values.size()); + auto h = ::Kokkos::create_mirror_view(d); + for (std::size_t i = 0; i < values.size(); ++i) + h(i) = values[i]; + ::Kokkos::deep_copy(d, h); + return d; +} + +inline int +compare_device_scalars(const ::Kokkos::View & d_values, + const std::vector & ref_values, + const double tol) +{ + auto h_values = ::Kokkos::create_mirror_view(d_values); + ::Kokkos::deep_copy(h_values, d_values); + + int fail = 0; + for (std::size_t i = 0; i < ref_values.size(); ++i) + if (std::fabs(h_values(i) - ref_values[i]) > tol) + ++fail; + + return fail; +} + +template +inline int +compare_device_vectors(const ViewType & d_values, + const std::vector & ref_values, + const double tol) +{ + auto h_values = ::Kokkos::create_mirror_view(d_values); + ::Kokkos::deep_copy(h_values, d_values); + + int fail = 0; + for (std::size_t i = 0; i < ref_values.size(); ++i) + for (unsigned int d = 0; d < LIBMESH_DIM; ++d) + if (std::fabs(h_values(i, d) - ref_values[i](d)) > tol) + ++fail; + + return fail; +} + +template +inline int +compare_device_tensors(const ViewType & d_values, + const std::vector & ref_values, + const double tol) +{ + auto h_values = ::Kokkos::create_mirror_view(d_values); + ::Kokkos::deep_copy(h_values, d_values); + + int fail = 0; + for (std::size_t i = 0; i < ref_values.size(); ++i) + for (unsigned int row = 0; row < LIBMESH_DIM; ++row) + for (unsigned int col = 0; col < LIBMESH_DIM; ++col) + if (std::fabs(h_values(i, row, col) - ref_values[i](row, col)) > tol) + ++fail; + + return fail; +} + +} // namespace KokkosOracle +} // namespace libMeshTest + +#endif diff --git a/tests/numerics/kokkos_tensor_ops_oracle_fixtures.h b/tests/numerics/kokkos_tensor_ops_oracle_fixtures.h new file mode 100644 index 00000000000..8a53f37bd83 --- /dev/null +++ b/tests/numerics/kokkos_tensor_ops_oracle_fixtures.h @@ -0,0 +1,161 @@ +#ifndef KOKKOS_TENSOR_OPS_ORACLE_FIXTURES_H +#define KOKKOS_TENSOR_OPS_ORACLE_FIXTURES_H + +#include "libmesh/libmesh.h" +#include "libmesh/point.h" +#include "libmesh/tensor_value.h" +#include "libmesh/type_n_tensor.h" +#include "libmesh/vector_value.h" +#include "gpu/kokkos_tensor_ops.h" +#include "gpu/kokkos_storage.h" +#include "gpu/kokkos_storage_policy.h" + +#include "kokkos_numerics_oracle_test_utils.h" + +#include +#include + +namespace libMeshTest +{ +namespace KokkosTensorOracle +{ + +using libMesh::Real; + +static constexpr double tol = 2.0e-13; + +using oracle_vector = libMesh::TypeVector; +using oracle_tensor = libMesh::TypeTensor; + +inline oracle_vector +make_host_vector(const Real x, const Real y = 0, const Real z = 0) +{ + oracle_vector v; + v.zero(); + v(0) = x; +#if LIBMESH_DIM > 1 + v(1) = y; +#endif +#if LIBMESH_DIM > 2 + v(2) = z; +#endif + return v; +} + +inline oracle_tensor +make_host_tensor(const Real xx, + const Real xy = 0, + const Real xz = 0, + const Real yx = 0, + const Real yy = 0, + const Real yz = 0, + const Real zx = 0, + const Real zy = 0, + const Real zz = 0) +{ + oracle_tensor T; + T.zero(); + T(0, 0) = xx; +#if LIBMESH_DIM > 1 + T(0, 1) = xy; + T(1, 0) = yx; + T(1, 1) = yy; +#endif +#if LIBMESH_DIM > 2 + T(0, 2) = xz; + T(1, 2) = yz; + T(2, 0) = zx; + T(2, 1) = zy; + T(2, 2) = zz; +#endif + return T; +} + +struct tensor_dim_case +{ + oracle_tensor J; + unsigned int dim; + const char * name; +}; + +static const tensor_dim_case dim_cases[] = { + { make_host_tensor(1.7, -0.2, 0.5, + 0.3, 1.1, -0.4, + -0.6, 0.8, 0.9), + 1, + "leading_1d" }, +#if LIBMESH_DIM > 1 + { make_host_tensor(2.5, -0.75, 0.4, + 1.2, 1.8, -0.6, + -0.3, 0.9, 1.4), + 2, + "leading_2d" }, +#endif +#if LIBMESH_DIM > 2 + { make_host_tensor(9.08973348886179e-01, 3.36455579239923e-01, 5.16389236893863e-01, + 9.44156071777472e-01, 1.35610910092516e-01, 1.49881119060538e-02, + 1.15988384086146e-01, 6.79845197685518e-03, 3.77028969454745e-01), + 3, + "leading_3d" } +#endif +}; + +inline oracle_tensor +build_identity_tensor(const unsigned int dim) +{ + oracle_tensor I; + I.zero(); + for (unsigned int i = 0; i < dim; ++i) + I(i, i) = Real(1); + return I; +} + +inline Real +host_leading_determinant(const oracle_tensor & J, const unsigned int dim) +{ + if (dim == 0) + return Real(1); + if (dim == 1) + return J(0, 0); + if (dim == 2) + return J(0, 0) * J(1, 1) - J(0, 1) * J(1, 0); +#if LIBMESH_DIM > 2 + return J.det(); +#else + return Real(0); +#endif +} + +inline oracle_tensor +host_leading_inverse(const oracle_tensor & J, const unsigned int dim) +{ + oracle_tensor inv; + inv.zero(); + + if (dim == 1) + { + inv(0, 0) = Real(1) / J(0, 0); + return inv; + } + + if (dim == 2) + { + const Real det = host_leading_determinant(J, dim); + inv(0, 0) = J(1, 1) / det; + inv(0, 1) = -J(0, 1) / det; + inv(1, 0) = -J(1, 0) / det; + inv(1, 1) = J(0, 0) / det; + return inv; + } + +#if LIBMESH_DIM > 2 + return oracle_tensor(J.inverse()); +#else + return inv; +#endif +} + +} // namespace KokkosTensorOracle +} // namespace libMeshTest + +#endif diff --git a/tests/numerics/kokkos_tensor_ops_oracle_runners.h b/tests/numerics/kokkos_tensor_ops_oracle_runners.h new file mode 100644 index 00000000000..cad772919a0 --- /dev/null +++ b/tests/numerics/kokkos_tensor_ops_oracle_runners.h @@ -0,0 +1,482 @@ +#ifndef KOKKOS_TENSOR_OPS_ORACLE_RUNNERS_H +#define KOKKOS_TENSOR_OPS_ORACLE_RUNNERS_H + +#include "kokkos_tensor_ops_oracle_fixtures.h" + +#include +#include + +namespace libMeshTest +{ +namespace KokkosTensorOracle +{ + +template +static int +test_dim_ops() +{ + const unsigned int ncases = sizeof(dim_cases) / sizeof(dim_cases[0]); + + std::vector J_values(ncases); + std::vector dims(ncases); + std::vector ref_det(ncases); + std::vector ref_inv(ncases); + std::vector ref_I(ncases); + std::vector ref_prod_left(ncases); + std::vector ref_prod_right(ncases); + + for (unsigned int c = 0; c < ncases; ++c) + { + const auto & info = dim_cases[c]; + J_values[c] = info.J; + dims[c] = info.dim; + + ref_det[c] = host_leading_determinant(info.J, info.dim); + ref_inv[c] = host_leading_inverse(info.J, info.dim); + ref_I[c] = build_identity_tensor(info.dim); + ref_prod_left[c] = info.J * ref_inv[c]; + ref_prod_right[c] = ref_inv[c] * info.J; + } + + auto d_J = libMesh::Kokkos::upload_tensor_storage(J_values, "tensor_dim_ops_J"); + auto d_dims = libMeshTest::KokkosOracle::upload_objects(dims, "tensor_dim_ops_dim"); + ::Kokkos::View d_det("tensor_dim_ops_det", ncases); + auto d_inv = libMesh::Kokkos::make_tensor_storage("tensor_dim_ops_inv", ncases); + auto d_I = libMesh::Kokkos::make_tensor_storage("tensor_dim_ops_I", ncases); + auto d_prod_left = libMesh::Kokkos::make_tensor_storage("tensor_dim_ops_prod_left", ncases); + auto d_prod_right = libMesh::Kokkos::make_tensor_storage("tensor_dim_ops_prod_right", ncases); + + ::Kokkos::parallel_for( + static_cast(ncases), + KOKKOS_LAMBDA(int c) { + const auto J_ref = libMesh::Kokkos::make_tensor_ref(d_J, c); + const unsigned int dim = d_dims(c); + const Real det = libMesh::Kokkos::tensor_determinant(J_ref, dim); + const auto inv = J_ref.inverse(dim); + const auto I = libMesh::Kokkos::tensor_identity(dim); + const auto prod_left = J_ref * inv; + const auto prod_right = inv * J_ref; + + d_det(c) = det; + libMesh::Kokkos::store_tensor(d_inv, c, inv); + libMesh::Kokkos::store_tensor(d_I, c, I); + libMesh::Kokkos::store_tensor(d_prod_left, c, prod_left); + libMesh::Kokkos::store_tensor(d_prod_right, c, prod_right); + }); + ::Kokkos::fence(); + + return libMeshTest::KokkosOracle::compare_device_scalars(d_det, ref_det, tol) + + libMeshTest::KokkosOracle::compare_device_tensors(d_inv, ref_inv, tol) + + libMeshTest::KokkosOracle::compare_device_tensors(d_I, ref_I, tol) + + libMeshTest::KokkosOracle::compare_device_tensors(d_prod_left, ref_prod_left, tol) + + libMeshTest::KokkosOracle::compare_device_tensors(d_prod_right, ref_prod_right, tol); +} + +template +static int +test_tensor_ops() +{ + const auto A = make_host_tensor(1.1, -0.4, 0.7, + 0.3, 1.9, -1.2, + -0.8, 0.5, 2.2); + const auto a = make_host_vector(2.0, 3.0, 4.0); + const auto b = make_host_vector(5.0, -6.0, 7.0); + const auto c = make_host_vector(1.25, -0.5, 2.0); + + const auto outer = libMesh::outer_product(a, b); + const auto transpose = A.transpose(); + const auto mix = 1.5 * A - 0.25 * outer; + const auto right = A * c; + const auto left = c * A; + const Real contract = A.contract(outer); + const Real norm = A.norm(); + const auto zero = libMesh::Kokkos::zero_tensor_value(); + + std::vector ref_outer(1, outer); + std::vector ref_transpose(1, transpose); + std::vector ref_mix(1, mix); + std::vector ref_rows(LIBMESH_DIM); + std::vector ref_columns(LIBMESH_DIM); + for (unsigned int i = 0; i < LIBMESH_DIM; ++i) + { + ref_rows[i] = A.row(i); + ref_columns[i] = A.column(i); + } + std::vector ref_right(1, right); + std::vector ref_left(1, left); + std::vector ref_scalars = {contract, norm, zero.is_zero() ? 1.0 : 0.0, A.is_zero() ? 1.0 : 0.0}; + + auto d_A = libMesh::Kokkos::upload_tensor_storage(std::vector{A}, "tensor_ops_A"); + auto d_a = libMesh::Kokkos::upload_vector_storage(std::vector{a}, "tensor_ops_a"); + auto d_b = libMesh::Kokkos::upload_vector_storage(std::vector{b}, "tensor_ops_b"); + auto d_c = libMesh::Kokkos::upload_vector_storage(std::vector{c}, "tensor_ops_c"); + auto d_outer = libMesh::Kokkos::make_tensor_storage("tensor_ops_outer", 1); + auto d_transpose = libMesh::Kokkos::make_tensor_storage("tensor_ops_transpose", 1); + auto d_mix = libMesh::Kokkos::make_tensor_storage("tensor_ops_mix", 1); + auto d_rows = libMesh::Kokkos::make_vector_storage("tensor_ops_rows", LIBMESH_DIM); + auto d_columns = libMesh::Kokkos::make_vector_storage("tensor_ops_columns", LIBMESH_DIM); + auto d_right = libMesh::Kokkos::make_vector_storage("tensor_ops_right", 1); + auto d_left = libMesh::Kokkos::make_vector_storage("tensor_ops_left", 1); + ::Kokkos::View d_scalars("tensor_ops_scalars", 4); + + ::Kokkos::parallel_for( + 1, + KOKKOS_LAMBDA(int) { + const auto A_ref = libMesh::Kokkos::make_tensor_ref(d_A, 0); + const auto a_ref = libMesh::Kokkos::make_vector_ref(d_a, 0); + const auto b_ref = libMesh::Kokkos::make_vector_ref(d_b, 0); + const auto c_ref = libMesh::Kokkos::make_vector_ref(d_c, 0); + const auto outer_d = libMesh::Kokkos::tensor_outer_product(a_ref, b_ref); + const auto transpose_d = A_ref.transpose(); + const auto mix_d = Real(1.5) * A_ref - Real(0.25) * outer_d; + const auto right_d = A_ref * c_ref; + const auto left_d = c_ref * A_ref; + const Real contract_d = A_ref.contract(outer_d); + const Real norm_d = A_ref.norm(); + const bool zero_is_zero_d = libMesh::Kokkos::zero_tensor_value().is_zero(); + const bool A_is_zero_d = A_ref.is_zero(); + + for (unsigned int i = 0; i < LIBMESH_DIM; ++i) + { + libMesh::Kokkos::store_vector(d_rows, i, A_ref.row(i)); + libMesh::Kokkos::store_vector(d_columns, i, A_ref.column(i)); + } + + libMesh::Kokkos::store_tensor(d_outer, 0, outer_d); + libMesh::Kokkos::store_tensor(d_transpose, 0, transpose_d); + libMesh::Kokkos::store_tensor(d_mix, 0, mix_d); + libMesh::Kokkos::store_vector(d_right, 0, right_d); + libMesh::Kokkos::store_vector(d_left, 0, left_d); + d_scalars(0) = contract_d; + d_scalars(1) = norm_d; + d_scalars(2) = zero_is_zero_d ? 1.0 : 0.0; + d_scalars(3) = A_is_zero_d ? 1.0 : 0.0; + }); + ::Kokkos::fence(); + + return libMeshTest::KokkosOracle::compare_device_tensors(d_outer, ref_outer, tol) + + libMeshTest::KokkosOracle::compare_device_tensors(d_transpose, ref_transpose, tol) + + libMeshTest::KokkosOracle::compare_device_tensors(d_mix, ref_mix, tol) + + libMeshTest::KokkosOracle::compare_device_vectors(d_rows, ref_rows, tol) + + libMeshTest::KokkosOracle::compare_device_vectors(d_columns, ref_columns, tol) + + libMeshTest::KokkosOracle::compare_device_vectors(d_right, ref_right, tol) + + libMeshTest::KokkosOracle::compare_device_vectors(d_left, ref_left, tol) + + libMeshTest::KokkosOracle::compare_device_scalars(d_scalars, ref_scalars, tol); +} + +inline int +test_tensor_host_only_ops() +{ + int fail = 0; + +#if LIBMESH_DIM > 2 + { + libMesh::TensorValue tensor(2., 1., 0., + 1., 2., 1., + 0., 1., 2.); + fail += tensor.is_hpd(/*rel_tol=*/0.) ? 0 : 1; + } + + { + libMesh::TensorValue tensor(1., 0., 0., + 0., 0., 1., + 0., 1., 0.); + fail += tensor.is_hpd() ? 1 : 0; + } + + { + const libMesh::Point x(1., 0., 0.); + const auto R = libMesh::RealTensorValue::extrinsic_rotation_matrix(90., 0., 0.); + const auto rotated = R * x; + fail += (std::fabs(rotated(0)) <= tol) ? 0 : 1; + fail += (std::fabs(rotated(1) - 1.) <= tol) ? 0 : 1; + fail += (std::fabs(rotated(2)) <= tol) ? 0 : 1; + + const auto invR = libMesh::RealTensorValue::inverse_extrinsic_rotation_matrix(90., 0., 0.); + const auto unrotated = invR * rotated; + fail += (std::fabs(unrotated(0) - 1.) <= tol) ? 0 : 1; + fail += (std::fabs(unrotated(1)) <= tol) ? 0 : 1; + fail += (std::fabs(unrotated(2)) <= tol) ? 0 : 1; + } + + { + const libMesh::Point x(1., 1., 1.); + const auto R = libMesh::RealTensorValue::extrinsic_rotation_matrix(90., 90., 90.); + const auto rotated = R * x; + fail += (std::fabs(rotated(0) - 1.) <= tol) ? 0 : 1; + fail += (std::fabs(rotated(1) + 1.) <= tol) ? 0 : 1; + fail += (std::fabs(rotated(2) - 1.) <= tol) ? 0 : 1; + + const auto invR = libMesh::RealTensorValue::inverse_extrinsic_rotation_matrix(90., 90., 90.); + const auto unrotated = invR * rotated; + fail += (std::fabs(unrotated(0) - 1.) <= tol) ? 0 : 1; + fail += (std::fabs(unrotated(1) - 1.) <= tol) ? 0 : 1; + fail += (std::fabs(unrotated(2) - 1.) <= tol) ? 0 : 1; + } +#endif + +#ifdef LIBMESH_HAVE_METAPHYSICL + typedef typename MetaPhysicL::ReplaceAlgebraicType< + std::vector>, + typename libMesh::TensorTools::IncrementRank< + typename MetaPhysicL::ValueType>>::type>::type>::type + ReplacedType; + constexpr bool assertion = + std::is_same>>::value; + fail += assertion ? 0 : 1; +#endif + + return fail; +} + +template +static int +test_linalg_foundation_storage_roundtrip() +{ + int fail = 0; + + auto d_vector = libMesh::Kokkos::make_vector_storage("foundation_vector", 1); + auto d_tensor = libMesh::Kokkos::make_tensor_storage("foundation_tensor", 1); + + { + auto h_vector = ::Kokkos::create_mirror_view(d_vector); + auto h_tensor = ::Kokkos::create_mirror_view(d_tensor); + + for (unsigned int d = 0; d < LIBMESH_DIM; ++d) + h_vector(0, d) = Real(d + 1) * Real(0.5); + + for (unsigned int row = 0; row < LIBMESH_DIM; ++row) + for (unsigned int col = 0; col < LIBMESH_DIM; ++col) + h_tensor(0, row, col) = Real(10 * row + col + 1) * Real(0.25); + + ::Kokkos::deep_copy(d_vector, h_vector); + ::Kokkos::deep_copy(d_tensor, h_tensor); + } + + const auto vector_in = libMesh::Kokkos::make_vector_ref(d_vector, 0); + const auto tensor_in = libMesh::Kokkos::make_tensor_ref(d_tensor, 0); + + const auto as_point = libMesh::Kokkos::materialize_vector(vector_in); + const auto as_vector_value = + libMesh::Kokkos::materialize_vector>(vector_in); + const auto as_type_vector = + libMesh::Kokkos::materialize_vector>(vector_in); + + for (unsigned int d = 0; d < LIBMESH_DIM; ++d) + { + const Real expected = Real(d + 1) * Real(0.5); + fail += (std::fabs(as_point(d) - expected) <= tol) ? 0 : 1; + fail += (std::fabs(as_vector_value(d) - expected) <= tol) ? 0 : 1; + fail += (std::fabs(as_type_vector(d) - expected) <= tol) ? 0 : 1; + } + + const auto as_tensor_value = + libMesh::Kokkos::materialize_tensor>(tensor_in); + const auto as_type_tensor = + libMesh::Kokkos::materialize_tensor>(tensor_in); + + for (unsigned int row = 0; row < LIBMESH_DIM; ++row) + for (unsigned int col = 0; col < LIBMESH_DIM; ++col) + { + const Real expected = Real(10 * row + col + 1) * Real(0.25); + fail += (std::fabs(as_tensor_value(row, col) - expected) <= tol) ? 0 : 1; + fail += (std::fabs(as_type_tensor(row, col) - expected) <= tol) ? 0 : 1; + } + + auto d_vector_out = libMesh::Kokkos::make_vector_storage("foundation_vector_out", 1); + auto d_tensor_out = libMesh::Kokkos::make_tensor_storage("foundation_tensor_out", 1); + + auto vector_out = libMesh::Kokkos::make_vector_ref(d_vector_out, 0); + auto tensor_out = libMesh::Kokkos::make_tensor_ref(d_tensor_out, 0); + + vector_out.zero(); + vector_out.assign(as_vector_value); + vector_out.add_scaled(as_type_vector, Real(0)); + vector_out.subtract_scaled(as_type_vector, Real(0)); + + tensor_out.zero(); + tensor_out.assign(as_tensor_value); + tensor_out.add_scaled(as_type_tensor, Real(0)); + tensor_out.subtract_scaled(as_type_tensor, Real(0)); + + { + auto h_vector_out = ::Kokkos::create_mirror_view(d_vector_out); + auto h_tensor_out = ::Kokkos::create_mirror_view(d_tensor_out); + ::Kokkos::deep_copy(h_vector_out, d_vector_out); + ::Kokkos::deep_copy(h_tensor_out, d_tensor_out); + + for (unsigned int d = 0; d < LIBMESH_DIM; ++d) + fail += (std::fabs(h_vector_out(0, d) - as_vector_value(d)) <= tol) ? 0 : 1; + + for (unsigned int row = 0; row < LIBMESH_DIM; ++row) + for (unsigned int col = 0; col < LIBMESH_DIM; ++col) + fail += (std::fabs(h_tensor_out(0, row, col) - as_tensor_value(row, col)) <= tol) ? 0 : 1; + } + + return fail; +} + +template +static int +test_mixed_representation_ops() +{ + int fail = 0; + + const auto a = make_host_vector(2.0, 3.0, 4.0); + const auto b = make_host_vector(5.0, -6.0, 7.0); + const auto c = make_host_vector(1.25, -0.5, 2.0); + const auto A = make_host_tensor(1.1, -0.4, 0.7, + 0.3, 1.9, -1.2, + -0.8, 0.5, 2.2); + + auto d_a = libMesh::Kokkos::upload_vector_storage(std::vector{a}, "mixed_ops_a"); + auto d_A = libMesh::Kokkos::upload_tensor_storage(std::vector{A}, "mixed_ops_A"); + + ::Kokkos::View d_scalars("mixed_ops_scalars", 8); + auto d_vectors = libMesh::Kokkos::make_vector_storage("mixed_ops_vectors", 5); + auto d_tensors = libMesh::Kokkos::make_tensor_storage("mixed_ops_tensors", 4); + + const auto ref_dot = a * b; + const auto ref_contract = A.contract(libMesh::outer_product(a, b)); + const auto ref_det = host_leading_determinant(A, LIBMESH_DIM); + const auto ref_right = A * c; + const auto ref_left = A.left_multiply(c); + const auto ref_mix = a + b; + const auto ref_row0 = A.row(0); + const auto ref_col0 = A.column(0); + const auto ref_transpose = A.transpose(); + const auto ref_inverse = host_leading_inverse(A, LIBMESH_DIM); + const auto ref_add = A + ref_transpose; + const auto ref_scaled = 0.5 * A; + const auto ref_trace = A.tr(); + + ::Kokkos::parallel_for( + 1, + KOKKOS_LAMBDA(int) { + const auto a_ref = libMesh::Kokkos::make_vector_ref(d_a, 0); + const auto A_ref = libMesh::Kokkos::make_tensor_ref(d_A, 0); + + const auto mix = a_ref + b; + const auto right = A_ref * c; + const auto left = A_ref.left_multiply(c); + const auto row0 = A_ref.row(0); + const auto col0 = A_ref.column(0); + const auto transpose = A_ref.transpose(); + const auto inverse = A_ref.inverse(); + const auto add = A_ref + ref_transpose; + const auto scaled = Real(0.5) * A_ref; + const auto outer = libMesh::Kokkos::tensor_outer_product(a_ref, b); + + d_scalars(0) = a_ref * b; + d_scalars(1) = A_ref.contract(outer); + d_scalars(2) = A_ref.det(); + d_scalars(3) = (A_ref == A) ? 1.0 : 0.0; + d_scalars(4) = (A_ref != inverse) ? 1.0 : 0.0; + d_scalars(5) = libMesh::Kokkos::vector_equal(row0, ref_row0) ? 1.0 : 0.0; + d_scalars(6) = libMesh::Kokkos::vector_equal(col0, ref_col0) ? 1.0 : 0.0; + d_scalars(7) = A_ref.tr(); + + libMesh::Kokkos::store_vector(d_vectors, 0, right); + libMesh::Kokkos::store_vector(d_vectors, 1, left); + libMesh::Kokkos::store_vector(d_vectors, 2, mix); + libMesh::Kokkos::store_vector(d_vectors, 3, row0); + libMesh::Kokkos::store_vector(d_vectors, 4, col0); + libMesh::Kokkos::store_tensor(d_tensors, 0, transpose); + libMesh::Kokkos::store_tensor(d_tensors, 1, inverse); + libMesh::Kokkos::store_tensor(d_tensors, 2, add); + libMesh::Kokkos::store_tensor(d_tensors, 3, scaled); + }); + ::Kokkos::fence(); + + fail += libMeshTest::KokkosOracle::compare_device_scalars( + d_scalars, + std::vector{ref_dot, ref_contract, ref_det, 1.0, 1.0, 1.0, 1.0, ref_trace}, + tol); + fail += libMeshTest::KokkosOracle::compare_device_vectors( + d_vectors, + std::vector{ref_right, ref_left, ref_mix, ref_row0, ref_col0}, + tol); + fail += libMeshTest::KokkosOracle::compare_device_tensors( + d_tensors, + std::vector{ref_transpose, ref_inverse, ref_add, ref_scaled}, + tol); + + return fail; +} + +inline int +run_all_oracles() +{ + int total_fail = 0; + + const int dim_fail_left = test_dim_ops(); + std::printf("[tensor_dim_kernel_oracle] [%s] %s (%d failures)\n", + libMesh::Kokkos::storage_policy_name(), + dim_fail_left ? "FAIL" : "PASS", + dim_fail_left); + total_fail += dim_fail_left; + + const int dim_fail_right = test_dim_ops(); + std::printf("[tensor_dim_kernel_oracle] [%s] %s (%d failures)\n", + libMesh::Kokkos::storage_policy_name(), + dim_fail_right ? "FAIL" : "PASS", + dim_fail_right); + total_fail += dim_fail_right; + + const int tensor_fail_left = test_tensor_ops(); + std::printf("[tensor_ops_kernel_oracle] [%s] %s (%d failures)\n", + libMesh::Kokkos::storage_policy_name(), + tensor_fail_left ? "FAIL" : "PASS", + tensor_fail_left); + total_fail += tensor_fail_left; + + const int tensor_fail_right = test_tensor_ops(); + std::printf("[tensor_ops_kernel_oracle] [%s] %s (%d failures)\n", + libMesh::Kokkos::storage_policy_name(), + tensor_fail_right ? "FAIL" : "PASS", + tensor_fail_right); + total_fail += tensor_fail_right; + + const int host_fail = test_tensor_host_only_ops(); + std::printf("[tensor_host_ops_oracle] %s (%d failures)\n", + host_fail ? "FAIL" : "PASS", + host_fail); + total_fail += host_fail; + + const int foundation_fail_left = + test_linalg_foundation_storage_roundtrip(); + std::printf("[kokkos_linalg_foundation_oracle] [%s] %s (%d failures)\n", + libMesh::Kokkos::storage_policy_name(), + foundation_fail_left ? "FAIL" : "PASS", + foundation_fail_left); + total_fail += foundation_fail_left; + + const int foundation_fail_right = + test_linalg_foundation_storage_roundtrip(); + std::printf("[kokkos_linalg_foundation_oracle] [%s] %s (%d failures)\n", + libMesh::Kokkos::storage_policy_name(), + foundation_fail_right ? "FAIL" : "PASS", + foundation_fail_right); + total_fail += foundation_fail_right; + + const int mixed_fail_left = test_mixed_representation_ops(); + std::printf("[kokkos_linalg_mixed_representation_oracle] [%s] %s (%d failures)\n", + libMesh::Kokkos::storage_policy_name(), + mixed_fail_left ? "FAIL" : "PASS", + mixed_fail_left); + total_fail += mixed_fail_left; + + const int mixed_fail_right = test_mixed_representation_ops(); + std::printf("[kokkos_linalg_mixed_representation_oracle] [%s] %s (%d failures)\n", + libMesh::Kokkos::storage_policy_name(), + mixed_fail_right ? "FAIL" : "PASS", + mixed_fail_right); + total_fail += mixed_fail_right; + + return total_fail; +} + +} // namespace KokkosTensorOracle +} // namespace libMeshTest + +#endif diff --git a/tests/numerics/kokkos_vector_ops_oracle_fixtures.h b/tests/numerics/kokkos_vector_ops_oracle_fixtures.h new file mode 100644 index 00000000000..5bce52de341 --- /dev/null +++ b/tests/numerics/kokkos_vector_ops_oracle_fixtures.h @@ -0,0 +1,223 @@ +#ifndef KOKKOS_VECTOR_OPS_ORACLE_FIXTURES_H +#define KOKKOS_VECTOR_OPS_ORACLE_FIXTURES_H + +#include "libmesh/libmesh.h" +#include "libmesh/tensor_value.h" +#include "libmesh/type_vector.h" +#include "libmesh/vector_value.h" +#include "gpu/kokkos_vector_ops.h" +#include "gpu/kokkos_storage.h" +#include "gpu/kokkos_storage_policy.h" + +#include "kokkos_numerics_oracle_test_utils.h" + +#include +#include + +namespace libMeshTest +{ +namespace KokkosVectorOracle +{ + +using libMesh::Real; + +static constexpr double tol = 2.0e-13; +static constexpr double unit_tol = 1.0e-14; +static constexpr Real golden_ratio = 1.6180339887498948482; +static constexpr unsigned int solid_angle_results = + 1 + ((LIBMESH_DIM > 1) ? 2u : 0u) + ((LIBMESH_DIM > 2) ? 4u : 0u); +static constexpr unsigned int vector_results = + 11 + ((LIBMESH_DIM > 2) ? 2u : 0u); +static constexpr unsigned int scalar_results = 11 + solid_angle_results; + +template +LIBMESH_DEVICE_INLINE +Vec +make_vector(const Real x, const Real y = 0, const Real z = 0) +{ + Vec v; + v.zero(); + v(0) = x; +#if LIBMESH_DIM > 1 + v(1) = y; +#endif +#if LIBMESH_DIM > 2 + v(2) = z; +#endif + return v; +} + +inline libMesh::TypeVector +as_type_vector(const libMesh::TypeVector & v) +{ + return v; +} + +inline libMesh::TypeVector +as_type_vector(const libMesh::VectorValue & v) +{ + return make_vector>(v(0) +#if LIBMESH_DIM > 1 + , + v(1) +#endif +#if LIBMESH_DIM > 2 + , + v(2) +#endif + ); +} + +template +struct host_oracle +{ + std::vector vectors; + std::vector scalars; +}; + +struct vector_case +{ + const char * name; + Real ax, ay, az; + Real bx, by, bz; + Real cx, cy, cz; +}; + +static const vector_case cases[] = { +#if LIBMESH_DIM >= 1 + { "line_case_a", 2.0, 0.0, 0.0, -3.0, 0.0, 0.0, 0.5, 0.0, 0.0 }, + { "line_case_b", -1.25, 0.0, 0.0, 4.5, 0.0, 0.0, -2.0, 0.0, 0.0 }, +#endif +#if LIBMESH_DIM >= 2 + { "plane_case_a", 2.0, 3.0, 0.0, 5.0, -6.0, 0.0, 1.25, -0.5, 0.0 }, + { "plane_case_b", -1.0, 4.0, 0.0, 0.5, 2.5, 0.0, -3.0, 1.5, 0.0 }, +#endif +#if LIBMESH_DIM >= 3 + { "space_case_a", 2.0, 3.0, 4.0, 5.0, -6.0, 7.0, 1.25, -0.5, 2.0 }, + { "space_case_b", -1.0, 4.0, 0.75, 0.5, 2.5, -3.5, -3.0, 1.5, 2.25 }, +#endif +}; + +template +inline host_oracle +build_host_oracle(const Vec & a, const Vec & b, const Vec & c) +{ + host_oracle result; + result.vectors.reserve(vector_results); + result.scalars.reserve(scalar_results); + + const auto copied = a; + + Vec mix = a + b; + mix -= c; + + Vec scaled = 1.25 * a; + scaled += (-0.5) * b; + scaled += (0.25) * c; + + Vec plus_assign = a; + plus_assign += b; + + Vec minus_assign = a; + minus_assign -= b; + + Vec accum; + accum.zero(); + accum.add_scaled(a, 1.25); + accum.add_scaled(b, -0.5); + accum.subtract_scaled(c, -0.25); + + const auto divided = a / 5.0; + const auto outer_right = libMesh::outer_product(a, 5.0); + const auto outer_left = libMesh::outer_product(5.0, a); + + Vec mult_assign = a; + mult_assign *= 5.0; + + Vec div_assign = a; + div_assign /= 5.0; + + Vec assign_zero = a; + assign_zero = 0.0; + + result.vectors.push_back(copied); + result.vectors.push_back(mix); + result.vectors.push_back(scaled); + result.vectors.push_back(accum); + result.vectors.push_back(plus_assign); + result.vectors.push_back(minus_assign); + result.vectors.push_back(divided); + result.vectors.push_back(outer_right); + result.vectors.push_back(outer_left); + result.vectors.push_back(mult_assign); + result.vectors.push_back(div_assign); + + result.scalars.push_back(a * b); + result.scalars.push_back(a.contract(b)); + result.scalars.push_back(mix.norm()); + result.scalars.push_back(mix.norm_sq()); + result.scalars.push_back(make_vector(0.0, 0.0, 0.0).is_zero() ? 1.0 : 0.0); + result.scalars.push_back(mix.is_zero() ? 1.0 : 0.0); + result.scalars.push_back((a == a) ? 1.0 : 0.0); + result.scalars.push_back((a == b) ? 1.0 : 0.0); + result.scalars.push_back((a != a) ? 1.0 : 0.0); + result.scalars.push_back((a != b) ? 1.0 : 0.0); + result.scalars.push_back(assign_zero.is_zero() ? 1.0 : 0.0); + + const auto xvec = make_vector(1.3); + result.scalars.push_back(libMesh::solid_angle(as_type_vector(xvec), + as_type_vector(xvec), + as_type_vector(xvec))); + +#if LIBMESH_DIM > 1 + const auto yvec = make_vector(0.0, 2.7); + const auto xydiag = make_vector(3.1, 3.1); + result.scalars.push_back(libMesh::solid_angle(as_type_vector(xvec), + as_type_vector(xvec), + as_type_vector(yvec))); + result.scalars.push_back(libMesh::solid_angle(as_type_vector(xvec), + as_type_vector(yvec), + as_type_vector(xydiag))); +#endif + +#if LIBMESH_DIM > 2 + const auto xypdiag = make_vector(0.8, -0.8); + const auto zvec = make_vector(0.0, 0.0, 1.1); + const auto xzdiag = make_vector(0.0, 0.7, 0.7); + const auto icosa1 = make_vector(1.0, golden_ratio, 0.0); + const auto icosa2 = make_vector(-1.0, golden_ratio, 0.0); + const auto icosa3 = make_vector(0.0, 1.0, golden_ratio); + result.scalars.push_back(libMesh::solid_angle(as_type_vector(xydiag), + as_type_vector(yvec), + as_type_vector(zvec))); + result.scalars.push_back(libMesh::solid_angle(as_type_vector(xvec), + as_type_vector(yvec), + as_type_vector(xzdiag))); + result.scalars.push_back(libMesh::solid_angle(as_type_vector(xypdiag), + as_type_vector(xydiag), + as_type_vector(zvec))); + result.scalars.push_back(libMesh::solid_angle(as_type_vector(icosa1), + as_type_vector(icosa2), + as_type_vector(icosa3))); +#endif + +#if LIBMESH_DIM > 2 + const auto cross = a.cross(b); + auto unit_cross = cross; + if (cross.norm() > unit_tol) + unit_cross = cross.unit(); + + result.vectors.push_back(cross); + result.vectors.push_back(unit_cross); +#endif + + libmesh_assert_equal_to(result.vectors.size(), vector_results); + libmesh_assert_equal_to(result.scalars.size(), scalar_results); + + return result; +} + +} // namespace KokkosVectorOracle +} // namespace libMeshTest + +#endif diff --git a/tests/numerics/kokkos_vector_ops_oracle_runners.h b/tests/numerics/kokkos_vector_ops_oracle_runners.h new file mode 100644 index 00000000000..73fbbe7834a --- /dev/null +++ b/tests/numerics/kokkos_vector_ops_oracle_runners.h @@ -0,0 +1,327 @@ +#ifndef KOKKOS_VECTOR_OPS_ORACLE_RUNNERS_H +#define KOKKOS_VECTOR_OPS_ORACLE_RUNNERS_H + +#include "kokkos_vector_ops_oracle_fixtures.h" + +#include + +namespace libMeshTest +{ +namespace KokkosVectorOracle +{ + +template +static int +test_vector_ops_case(const vector_case & info) +{ + const auto a = make_vector(info.ax, info.ay, info.az); + const auto b = make_vector(info.bx, info.by, info.bz); + const auto c = make_vector(info.cx, info.cy, info.cz); + + const auto expected = build_host_oracle(a, b, c); + + auto d_a = libMesh::Kokkos::upload_vector_storage(std::vector{a}, "vector_ops_a"); + auto d_b = libMesh::Kokkos::upload_vector_storage(std::vector{b}, "vector_ops_b"); + auto d_c = libMesh::Kokkos::upload_vector_storage(std::vector{c}, "vector_ops_c"); + auto d_vectors = libMesh::Kokkos::make_vector_storage("vector_ops_vectors", vector_results); + ::Kokkos::View d_scalars("vector_ops_scalars", scalar_results); + + ::Kokkos::parallel_for( + 1, + KOKKOS_LAMBDA(int) { + const auto a_ref = libMesh::Kokkos::make_vector_ref(d_a, 0); + const auto b_ref = libMesh::Kokkos::make_vector_ref(d_b, 0); + const auto c_ref = libMesh::Kokkos::make_vector_ref(d_c, 0); + + const Vec copied = libMesh::Kokkos::copy_vector(a_ref); + const Vec mix = libMesh::Kokkos::vector_linear_combination( + Real(1), a_ref, Real(1), b_ref, Real(-1), c_ref); + const Vec scaled = libMesh::Kokkos::vector_linear_combination( + Real(1.25), a_ref, Real(-0.5), b_ref, Real(0.25), c_ref); + const Vec plus_assign = a_ref + b_ref; + const Vec minus_assign = a_ref - b_ref; + const Vec accum = libMesh::Kokkos::vector_linear_combination( + Real(1.25), a_ref, Real(-0.5), b_ref, Real(0.25), c_ref); + const Vec divided = a_ref / Real(5.0); + const Vec outer_right = Real(5.0) * a_ref; + const Vec outer_left = a_ref * Real(5.0); + const Vec mult_assign = a_ref * Real(5.0); + const Vec div_assign = a_ref / Real(5.0); + const Vec assign_zero = libMesh::Kokkos::zero_vector_value(); + + const Real dot = libMesh::Kokkos::vector_dot(a_ref, b_ref); + const Real contract = a_ref.contract(b_ref); + const Real norm = mix.norm(); + const Real norm_sq = mix.norm_sq(); + const Vec zero = libMesh::Kokkos::zero_vector_value(); + + unsigned int vector_offset = 0; + libMesh::Kokkos::store_vector(d_vectors, vector_offset++, copied); + libMesh::Kokkos::store_vector(d_vectors, vector_offset++, mix); + libMesh::Kokkos::store_vector(d_vectors, vector_offset++, scaled); + libMesh::Kokkos::store_vector(d_vectors, vector_offset++, accum); + libMesh::Kokkos::store_vector(d_vectors, vector_offset++, plus_assign); + libMesh::Kokkos::store_vector(d_vectors, vector_offset++, minus_assign); + libMesh::Kokkos::store_vector(d_vectors, vector_offset++, divided); + libMesh::Kokkos::store_vector(d_vectors, vector_offset++, outer_right); + libMesh::Kokkos::store_vector(d_vectors, vector_offset++, outer_left); + libMesh::Kokkos::store_vector(d_vectors, vector_offset++, mult_assign); + libMesh::Kokkos::store_vector(d_vectors, vector_offset++, div_assign); + + unsigned int scalar_offset = 0; + d_scalars(scalar_offset++) = a_ref * b_ref; + d_scalars(scalar_offset++) = contract; + d_scalars(scalar_offset++) = norm; + d_scalars(scalar_offset++) = norm_sq; + d_scalars(scalar_offset++) = zero.is_zero() ? 1.0 : 0.0; + d_scalars(scalar_offset++) = mix.is_zero() ? 1.0 : 0.0; + d_scalars(scalar_offset++) = (a_ref == a_ref) ? 1.0 : 0.0; + d_scalars(scalar_offset++) = (a_ref == b_ref) ? 1.0 : 0.0; + d_scalars(scalar_offset++) = (a_ref != a_ref) ? 1.0 : 0.0; + d_scalars(scalar_offset++) = (a_ref != b_ref) ? 1.0 : 0.0; + d_scalars(scalar_offset++) = assign_zero.is_zero() ? 1.0 : 0.0; + + const Vec xvec = make_vector(1.3); + d_scalars(scalar_offset++) = libMesh::Kokkos::vector_solid_angle(xvec, xvec, xvec); + +#if LIBMESH_DIM > 1 + const Vec yvec = make_vector(0.0, 2.7); + const Vec xydiag = make_vector(3.1, 3.1); + d_scalars(scalar_offset++) = libMesh::Kokkos::vector_solid_angle(xvec, xvec, yvec); + d_scalars(scalar_offset++) = libMesh::Kokkos::vector_solid_angle(xvec, yvec, xydiag); +#endif + +#if LIBMESH_DIM > 2 + const Vec xypdiag = make_vector(0.8, -0.8); + const Vec zvec = make_vector(0.0, 0.0, 1.1); + const Vec xzdiag = make_vector(0.0, 0.7, 0.7); + const Vec icosa1 = make_vector(1.0, golden_ratio, 0.0); + const Vec icosa2 = make_vector(-1.0, golden_ratio, 0.0); + const Vec icosa3 = make_vector(0.0, 1.0, golden_ratio); + d_scalars(scalar_offset++) = libMesh::Kokkos::vector_solid_angle(xydiag, yvec, zvec); + d_scalars(scalar_offset++) = libMesh::Kokkos::vector_solid_angle(xvec, yvec, xzdiag); + d_scalars(scalar_offset++) = libMesh::Kokkos::vector_solid_angle(xypdiag, xydiag, zvec); + d_scalars(scalar_offset++) = libMesh::Kokkos::vector_solid_angle(icosa1, icosa2, icosa3); +#endif + +#if LIBMESH_DIM > 2 + const Vec cross = a_ref.cross(b_ref); + Vec unit_cross = cross; + if (libMesh::Kokkos::vector_norm(cross) > unit_tol) + unit_cross = libMesh::Kokkos::vector_unit(cross); + + libMesh::Kokkos::store_vector(d_vectors, vector_offset++, cross); + libMesh::Kokkos::store_vector(d_vectors, vector_offset++, unit_cross); +#endif + + libmesh_assert_equal_to(vector_offset, vector_results); + libmesh_assert_equal_to(scalar_offset, scalar_results); + }); + ::Kokkos::fence(); + + return libMeshTest::KokkosOracle::compare_device_vectors(d_vectors, expected.vectors, tol) + + libMeshTest::KokkosOracle::compare_device_scalars(d_scalars, expected.scalars, tol); +} + +template +int +run_vector_cases(const char * suite_name) +{ + int fail = 0; + + for (const auto & info : cases) + { + const int f = test_vector_ops_case(info); + std::printf("[%s] [%s] [%s] %s (%d failures)\n", + suite_name, + libMesh::Kokkos::storage_policy_name(), + info.name, + f ? "FAIL" : "PASS", + f); + fail += f; + } + + return fail; +} + +inline int +test_vector_host_only_traits() +{ + int fail = 0; + +#ifdef LIBMESH_HAVE_METAPHYSICL + typedef typename MetaPhysicL::ReplaceAlgebraicType< + std::vector>, + typename libMesh::TensorTools::IncrementRank< + typename MetaPhysicL::ValueType>>::type>::type>::type + ReplacedType; + constexpr bool typevector_assertion = + std::is_same>>::value; + fail += typevector_assertion ? 0 : 1; + + typedef typename MetaPhysicL::ReplaceAlgebraicType< + std::vector>, + typename libMesh::TensorTools::IncrementRank< + typename MetaPhysicL::ValueType>>::type>::type>::type + ReplacedValueType; + constexpr bool vectorvalue_assertion = + std::is_same>>::value; + fail += vectorvalue_assertion ? 0 : 1; +#endif + + return fail; +} + +template +static int +test_mixed_representation_ops() +{ + int fail = 0; + + const auto a = make_vector(2.0, 3.0, 4.0); + const auto b = make_vector(5.0, -6.0, 7.0); + const auto c = make_vector(1.25, -0.5, 2.0); + + auto d_a = libMesh::Kokkos::upload_vector_storage(std::vector{a}, "mixed_vector_a"); + auto d_b = libMesh::Kokkos::upload_vector_storage(std::vector{b}, "mixed_vector_b"); + + auto d_vectors = + libMesh::Kokkos::make_vector_storage("mixed_vector_vectors", (LIBMESH_DIM > 2) ? 5 : 3); + ::Kokkos::View d_scalars("mixed_vector_scalars", (LIBMESH_DIM > 2) ? 7 : 5); + + const auto ref_sum = a + b; + const auto ref_diff = a - b; + const auto ref_scaled = 1.5 * a; + const auto ref_dot = a * b; + const auto ref_contract = a.contract(b); + const auto ref_solid_angle = + libMesh::solid_angle(as_type_vector(a), as_type_vector(b), as_type_vector(c)); + const auto ref_cross_norm_sq = libMesh::cross_norm_sq(as_type_vector(a), as_type_vector(b)); + +#if LIBMESH_DIM > 2 + const auto ref_cross = a.cross(b); + auto ref_unit_cross = ref_cross; + if (ref_cross.norm() > unit_tol) + ref_unit_cross = ref_cross.unit(); +#endif + + ::Kokkos::parallel_for( + 1, + KOKKOS_LAMBDA(int) { + const auto a_ref = libMesh::Kokkos::make_vector_ref(d_a, 0); + const auto b_ref = libMesh::Kokkos::make_vector_ref(d_b, 0); + + const auto sum = a_ref + b; + const auto diff = a - b_ref; + const auto scaled = Real(1.5) * a_ref; + + libMesh::Kokkos::store_vector(d_vectors, 0, sum); + libMesh::Kokkos::store_vector(d_vectors, 1, diff); + libMesh::Kokkos::store_vector(d_vectors, 2, scaled); + + d_scalars(0) = a_ref * b; + d_scalars(1) = b_ref.contract(a); + d_scalars(2) = (a_ref == a) ? 1.0 : 0.0; + d_scalars(3) = (a_ref != b) ? 1.0 : 0.0; + d_scalars(4) = libMesh::Kokkos::vector_solid_angle(a_ref, b, c); + +#if LIBMESH_DIM > 2 + const auto cross = a_ref.cross(b); + Vec unit_cross = cross; + if (libMesh::Kokkos::vector_norm(cross) > unit_tol) + unit_cross = libMesh::Kokkos::vector_unit(cross); + + libMesh::Kokkos::store_vector(d_vectors, 3, cross); + libMesh::Kokkos::store_vector(d_vectors, 4, unit_cross); + d_scalars(5) = libMesh::Kokkos::vector_cross_norm_sq(a_ref, b); + d_scalars(6) = (cross == libMesh::Kokkos::vector_cross(a, b_ref)) ? 1.0 : 0.0; +#endif + }); + ::Kokkos::fence(); + + fail += libMeshTest::KokkosOracle::compare_device_vectors( + d_vectors, + [&]() { + std::vector ref = {ref_sum, ref_diff, ref_scaled}; +#if LIBMESH_DIM > 2 + ref.push_back(ref_cross); + ref.push_back(ref_unit_cross); +#endif + return ref; + }(), + tol); + + fail += libMeshTest::KokkosOracle::compare_device_scalars( + d_scalars, + [&]() { + std::vector ref = {ref_dot, ref_contract, 1.0, 1.0, ref_solid_angle}; +#if LIBMESH_DIM > 2 + ref.push_back(ref_cross_norm_sq); + ref.push_back(1.0); +#endif + return ref; + }(), + tol); + + return fail; +} + +inline int +run_all_oracles() +{ + int total_fail = 0; + + total_fail += run_vector_cases>( + "typevector_kernel_oracle"); + total_fail += run_vector_cases>( + "typevector_kernel_oracle"); + total_fail += run_vector_cases>( + "vectorvalue_kernel_oracle"); + total_fail += run_vector_cases>( + "vectorvalue_kernel_oracle"); + + const int mixed_typevector_left = + test_mixed_representation_ops>(); + std::printf("[vector_mixed_representation_oracle] [%s] [typevector] %s (%d failures)\n", + libMesh::Kokkos::storage_policy_name(), + mixed_typevector_left ? "FAIL" : "PASS", + mixed_typevector_left); + total_fail += mixed_typevector_left; + + const int mixed_typevector_right = + test_mixed_representation_ops>(); + std::printf("[vector_mixed_representation_oracle] [%s] [typevector] %s (%d failures)\n", + libMesh::Kokkos::storage_policy_name(), + mixed_typevector_right ? "FAIL" : "PASS", + mixed_typevector_right); + total_fail += mixed_typevector_right; + + const int mixed_vectorvalue_left = + test_mixed_representation_ops>(); + std::printf("[vector_mixed_representation_oracle] [%s] [vectorvalue] %s (%d failures)\n", + libMesh::Kokkos::storage_policy_name(), + mixed_vectorvalue_left ? "FAIL" : "PASS", + mixed_vectorvalue_left); + total_fail += mixed_vectorvalue_left; + + const int mixed_vectorvalue_right = + test_mixed_representation_ops>(); + std::printf("[vector_mixed_representation_oracle] [%s] [vectorvalue] %s (%d failures)\n", + libMesh::Kokkos::storage_policy_name(), + mixed_vectorvalue_right ? "FAIL" : "PASS", + mixed_vectorvalue_right); + total_fail += mixed_vectorvalue_right; + + const int host_fail = test_vector_host_only_traits(); + std::printf("[vector_host_traits_oracle] %s (%d failures)\n", + host_fail ? "FAIL" : "PASS", + host_fail); + total_fail += host_fail; + + return total_fail; +} + +} // namespace KokkosVectorOracle +} // namespace libMeshTest + +#endif From acb22ee6f68ffc504e707c0ce0dca19668141141 Mon Sep 17 00:00:00 2001 From: rochi00 Date: Fri, 8 May 2026 15:04:55 -0600 Subject: [PATCH 05/46] Add Kokkos vector and tensor oracle tests --- .../numerics/kokkos_tensor_ops_oracle_test.K | 20 +++++++++++++++++++ .../numerics/kokkos_vector_ops_oracle_test.K | 20 +++++++++++++++++++ 2 files changed, 40 insertions(+) create mode 100644 tests/numerics/kokkos_tensor_ops_oracle_test.K create mode 100644 tests/numerics/kokkos_vector_ops_oracle_test.K diff --git a/tests/numerics/kokkos_tensor_ops_oracle_test.K b/tests/numerics/kokkos_tensor_ops_oracle_test.K new file mode 100644 index 00000000000..858d4773690 --- /dev/null +++ b/tests/numerics/kokkos_tensor_ops_oracle_test.K @@ -0,0 +1,20 @@ +#include "libmesh/libmesh_config.h" +#include "kokkos_tensor_ops_oracle_runners.h" + +int +main(int argc, char ** argv) +{ + Kokkos::initialize(argc, argv); + libMesh::LibMeshInit init(argc, argv); + + const int total_fail = libMeshTest::KokkosTensorOracle::run_all_oracles(); + + Kokkos::finalize(); + + if (total_fail == 0) + std::printf("ALL TESTS PASSED\n"); + else + std::printf("%d TEST(S) FAILED\n", total_fail); + + return total_fail ? 1 : 0; +} diff --git a/tests/numerics/kokkos_vector_ops_oracle_test.K b/tests/numerics/kokkos_vector_ops_oracle_test.K new file mode 100644 index 00000000000..fedc7651ff5 --- /dev/null +++ b/tests/numerics/kokkos_vector_ops_oracle_test.K @@ -0,0 +1,20 @@ +#include "libmesh/libmesh_config.h" +#include "kokkos_vector_ops_oracle_runners.h" + +int +main(int argc, char ** argv) +{ + Kokkos::initialize(argc, argv); + libMesh::LibMeshInit init(argc, argv); + + const int total_fail = libMeshTest::KokkosVectorOracle::run_all_oracles(); + + Kokkos::finalize(); + + if (total_fail == 0) + std::printf("ALL TESTS PASSED\n"); + else + std::printf("%d TEST(S) FAILED\n", total_fail); + + return total_fail ? 1 : 0; +} From 63d0098bcd104cae7d68988c26ab06558d18c454 Mon Sep 17 00:00:00 2001 From: rochi00 Date: Fri, 8 May 2026 15:05:03 -0600 Subject: [PATCH 06/46] Regenerate configure and Makefile.in files --- Makefile.in | 8 + configure | 366 ++++++++++++++++++ contrib/Makefile.in | 8 + contrib/capnproto/Makefile.in | 8 + contrib/eigen/gitshim/Makefile.in | 8 + contrib/exodusii/5.22b/exodus/Makefile.in | 8 + contrib/exodusii/5.22b/nemesis/Makefile.in | 8 + contrib/exodusii/Lib/Makefile.in | 8 + contrib/exodusii/v8.11/exodus/Makefile.in | 8 + contrib/exodusii/v8.11/nemesis/Makefile.in | 8 + contrib/fparser/Makefile.in | 8 + contrib/fparser/extrasrc/Makefile.in | 8 + contrib/gmv/Makefile.in | 8 + contrib/gzstream/Makefile.in | 8 + contrib/laspack/Makefile.in | 8 + contrib/libHilbert/Makefile.in | 8 + contrib/metis/Makefile.in | 8 + contrib/nanoflann/Makefile.in | 8 + contrib/nemesis/Lib/Makefile.in | 8 + contrib/netgen/Makefile.in | 10 +- contrib/parmetis/Makefile.in | 8 + contrib/poly2tri/modified/Makefile.in | 8 + contrib/qhull/2012.1/Makefile.in | 8 + contrib/sfcurves/Makefile.in | 8 + contrib/tecplot/binary/Makefile.in | 8 + contrib/tecplot/tecio/Makefile.in | 8 + contrib/tetgen/Makefile.in | 8 + contrib/triangle/Makefile.in | 8 + doc/Makefile.in | 8 + doc/html/Makefile.in | 8 + examples/Makefile.in | 8 + .../adaptivity/adaptivity_ex1/Makefile.in | 8 + .../adaptivity/adaptivity_ex2/Makefile.in | 8 + .../adaptivity/adaptivity_ex3/Makefile.in | 8 + .../adaptivity/adaptivity_ex4/Makefile.in | 8 + .../adaptivity/adaptivity_ex5/Makefile.in | 8 + examples/adjoints/adjoints_ex1/Makefile.in | 8 + examples/adjoints/adjoints_ex2/Makefile.in | 8 + examples/adjoints/adjoints_ex3/Makefile.in | 8 + examples/adjoints/adjoints_ex4/Makefile.in | 8 + examples/adjoints/adjoints_ex5/Makefile.in | 8 + examples/adjoints/adjoints_ex6/Makefile.in | 8 + examples/adjoints/adjoints_ex7/Makefile.in | 8 + .../eigenproblems_ex1/Makefile.in | 8 + .../eigenproblems_ex2/Makefile.in | 8 + .../eigenproblems_ex3/Makefile.in | 8 + .../eigenproblems_ex4/Makefile.in | 8 + .../fem_system/fem_system_ex1/Makefile.in | 8 + .../fem_system/fem_system_ex2/Makefile.in | 8 + .../fem_system/fem_system_ex3/Makefile.in | 8 + .../fem_system/fem_system_ex4/Makefile.in | 8 + .../fem_system/fem_system_ex5/Makefile.in | 8 + .../introduction/introduction_ex1/Makefile.in | 8 + .../introduction/introduction_ex2/Makefile.in | 8 + .../introduction/introduction_ex3/Makefile.in | 8 + .../introduction/introduction_ex4/Makefile.in | 8 + .../introduction/introduction_ex5/Makefile.in | 8 + .../miscellaneous_ex1/Makefile.in | 8 + .../miscellaneous_ex10/Makefile.in | 8 + .../miscellaneous_ex11/Makefile.in | 8 + .../miscellaneous_ex12/Makefile.in | 8 + .../miscellaneous_ex13/Makefile.in | 8 + .../miscellaneous_ex14/Makefile.in | 8 + .../miscellaneous_ex15/Makefile.in | 8 + .../miscellaneous_ex16/Makefile.in | 8 + .../miscellaneous_ex17/Makefile.in | 8 + .../miscellaneous_ex2/Makefile.in | 8 + .../miscellaneous_ex3/Makefile.in | 8 + .../miscellaneous_ex4/Makefile.in | 8 + .../miscellaneous_ex5/Makefile.in | 8 + .../miscellaneous_ex6/Makefile.in | 8 + .../miscellaneous_ex7/Makefile.in | 8 + .../miscellaneous_ex8/Makefile.in | 8 + .../miscellaneous_ex9/Makefile.in | 8 + .../optimization/optimization_ex1/Makefile.in | 8 + .../optimization/optimization_ex2/Makefile.in | 8 + .../reduced_basis_ex1/Makefile.in | 8 + .../reduced_basis_ex2/Makefile.in | 8 + .../reduced_basis_ex3/Makefile.in | 8 + .../reduced_basis_ex4/Makefile.in | 8 + .../reduced_basis_ex5/Makefile.in | 8 + .../reduced_basis_ex6/Makefile.in | 8 + .../reduced_basis_ex7/Makefile.in | 8 + .../solution_transfer_ex1/Makefile.in | 8 + .../subdomains/subdomains_ex1/Makefile.in | 8 + .../subdomains/subdomains_ex2/Makefile.in | 8 + .../subdomains/subdomains_ex3/Makefile.in | 8 + .../systems_of_equations_ex1/Makefile.in | 8 + .../systems_of_equations_ex2/Makefile.in | 8 + .../systems_of_equations_ex3/Makefile.in | 8 + .../systems_of_equations_ex4/Makefile.in | 8 + .../systems_of_equations_ex5/Makefile.in | 8 + .../systems_of_equations_ex6/Makefile.in | 8 + .../systems_of_equations_ex7/Makefile.in | 8 + .../systems_of_equations_ex8/Makefile.in | 8 + .../systems_of_equations_ex9/Makefile.in | 8 + examples/transient/transient_ex1/Makefile.in | 8 + examples/transient/transient_ex2/Makefile.in | 8 + examples/transient/transient_ex3/Makefile.in | 8 + examples/vector_fe/vector_fe_ex1/Makefile.in | 8 + examples/vector_fe/vector_fe_ex10/Makefile.in | 8 + examples/vector_fe/vector_fe_ex2/Makefile.in | 8 + examples/vector_fe/vector_fe_ex3/Makefile.in | 8 + examples/vector_fe/vector_fe_ex4/Makefile.in | 8 + examples/vector_fe/vector_fe_ex5/Makefile.in | 8 + examples/vector_fe/vector_fe_ex6/Makefile.in | 8 + examples/vector_fe/vector_fe_ex7/Makefile.in | 8 + examples/vector_fe/vector_fe_ex8/Makefile.in | 8 + examples/vector_fe/vector_fe_ex9/Makefile.in | 8 + include/Makefile.in | 14 + include/libmesh/Makefile.in | 39 +- tests/Makefile.in | 136 +++++-- 112 files changed, 1387 insertions(+), 34 deletions(-) diff --git a/Makefile.in b/Makefile.in index cec62a434fa..186be47b152 100644 --- a/Makefile.in +++ b/Makefile.in @@ -7517,11 +7517,18 @@ HDF5_DIR = @HDF5_DIR@ HDF5_LDFLAGS = @HDF5_LDFLAGS@ HDF5_LIBS = @HDF5_LIBS@ HDF5_PREFIX = @HDF5_PREFIX@ +HIPCC = @HIPCC@ +ICPX = @ICPX@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +KOKKOS_CPPFLAGS = @KOKKOS_CPPFLAGS@ +KOKKOS_CXX = @KOKKOS_CXX@ +KOKKOS_CXXFLAGS = @KOKKOS_CXXFLAGS@ +KOKKOS_LDFLAGS = @KOKKOS_LDFLAGS@ +KOKKOS_LIBS = @KOKKOS_LIBS@ LASPACK_INCLUDE = @LASPACK_INCLUDE@ LASPACK_LIB = @LASPACK_LIB@ LD = @LD@ @@ -7569,6 +7576,7 @@ NODEPRECATEDFLAG = @NODEPRECATEDFLAG@ NOX_INCLUDES = @NOX_INCLUDES@ NOX_LIBS = @NOX_LIBS@ NOX_MAKEFILE_EXPORT = @NOX_MAKEFILE_EXPORT@ +NVCC = @NVCC@ NVTX_INCLUDE = @NVTX_INCLUDE@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ diff --git a/configure b/configure index 33ff470d60a..91b72819aca 100755 --- a/configure +++ b/configure @@ -672,6 +672,16 @@ libmesh_contrib_LDFLAGS libmesh_contrib_INCLUDES libmesh_optional_LIBS libmesh_optional_INCLUDES +LIBMESH_ENABLE_KOKKOS_FALSE +LIBMESH_ENABLE_KOKKOS_TRUE +KOKKOS_LIBS +KOKKOS_LDFLAGS +KOKKOS_CXXFLAGS +KOKKOS_CPPFLAGS +KOKKOS_CXX +ICPX +HIPCC +NVCC LIBMESH_ENABLE_METAPHYSICL_FALSE LIBMESH_ENABLE_METAPHYSICL_TRUE METAPHYSICL_INCLUDE @@ -1347,6 +1357,8 @@ enable_metaphysicl with_metaphysicl with_metaphysicl_include enable_metaphysicl_required +with_kokkos +with_kokkos_backend ' ac_precious_vars='build_alias host_alias @@ -2273,6 +2285,10 @@ Optional Packages: internal: build from contrib --with-metaphysicl-include= + --with-kokkos=DIR Enable Kokkos support using the installation at DIR + --with-kokkos-backend=BACKEND + cuda|hip|sycl|openmp|serial (default: auto-detect + from KokkosCore_config.h) Some influential environment variables: PETSC_DIR path to PETSc installation @@ -63913,6 +63929,352 @@ fi +# ------------------------------------------------------------- +# Kokkos -- optional, enables the native Kokkos FE math path +# ------------------------------------------------------------- + +# Check whether --with-kokkos was given. +if test ${with_kokkos+y} +then : + withval=$with_kokkos; KOKKOS_DIR="$withval" +else case e in #( + e) KOKKOS_DIR="no" ;; +esac +fi + + + +# Check whether --with-kokkos-backend was given. +if test ${with_kokkos_backend+y} +then : + withval=$with_kokkos_backend; KOKKOS_BACKEND="$withval" +else case e in #( + e) KOKKOS_BACKEND="auto" ;; +esac +fi + + + +if test "x$KOKKOS_DIR" != "xno" +then : + + as_ac_File=`printf "%s\n" "ac_cv_file_$KOKKOS_DIR/include/Kokkos_Core.hpp" | sed "$as_sed_sh"` +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $KOKKOS_DIR/include/Kokkos_Core.hpp" >&5 +printf %s "checking for $KOKKOS_DIR/include/Kokkos_Core.hpp... " >&6; } +if eval test \${$as_ac_File+y} +then : + printf %s "(cached) " >&6 +else case e in #( + e) test "$cross_compiling" = yes && + as_fn_error $? "cannot check for file existence when cross compiling" "$LINENO" 5 +if test -r "$KOKKOS_DIR/include/Kokkos_Core.hpp"; then + eval "$as_ac_File=yes" +else + eval "$as_ac_File=no" +fi ;; +esac +fi +eval ac_res=\$$as_ac_File + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 +printf "%s\n" "$ac_res" >&6; } +if eval test \"x\$"$as_ac_File"\" = x"yes" +then : + + enablekokkos=yes + libmesh_optional_INCLUDES="$libmesh_optional_INCLUDES -I$KOKKOS_DIR/include" + libmesh_optional_LIBS="$libmesh_optional_LIBS -L$KOKKOS_DIR/lib -lkokkoscore" + + if test "x$KOKKOS_CXX" = "x" +then : + + KOKKOS_CFG="$KOKKOS_DIR/include/KokkosCore_config.h" + + if test "x$KOKKOS_BACKEND" = "xauto" +then : + + if test -r "$KOKKOS_CFG" +then : + + if grep -q 'KOKKOS_ENABLE_CUDA' "$KOKKOS_CFG" +then : + KOKKOS_BACKEND=cuda +else case e in #( + e) if grep -q 'KOKKOS_ENABLE_HIP' "$KOKKOS_CFG" +then : + KOKKOS_BACKEND=hip +else case e in #( + e) if grep -q 'KOKKOS_ENABLE_SYCL' "$KOKKOS_CFG" +then : + KOKKOS_BACKEND=sycl +else case e in #( + e) if grep -q 'KOKKOS_ENABLE_OPENMP' "$KOKKOS_CFG" +then : + KOKKOS_BACKEND=openmp +else case e in #( + e) KOKKOS_BACKEND=serial ;; +esac +fi ;; +esac +fi ;; +esac +fi ;; +esac +fi + +else case e in #( + e) KOKKOS_BACKEND=serial ;; +esac +fi + +fi + + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: Kokkos backend: $KOKKOS_BACKEND" >&5 +printf "%s\n" "Kokkos backend: $KOKKOS_BACKEND" >&6; } + + have_kokkos_openmp=no + if test -r "$KOKKOS_CFG" +then : + if grep -q 'KOKKOS_ENABLE_OPENMP' "$KOKKOS_CFG" +then : + have_kokkos_openmp=yes +fi +fi + + case "$KOKKOS_BACKEND" in + cuda) + # Extract the first word of "nvcc", so it can be a program name with args. +set dummy nvcc; ac_word=$2 +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_path_NVCC+y} +then : + printf %s "(cached) " >&6 +else case e in #( + e) case $NVCC in + [\\/]* | ?:[\\/]*) + ac_cv_path_NVCC="$NVCC" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then + ac_cv_path_NVCC="$as_dir$ac_word$ac_exec_ext" + printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + test -z "$ac_cv_path_NVCC" && ac_cv_path_NVCC="no" + ;; +esac ;; +esac +fi +NVCC=$ac_cv_path_NVCC +if test -n "$NVCC"; then + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $NVCC" >&5 +printf "%s\n" "$NVCC" >&6; } +else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } +fi + + + if test "x$NVCC" = "xno" +then : + as_fn_error $? "nvcc not found but Kokkos CUDA backend requested" "$LINENO" 5 +fi + KOKKOS_CXX="$NVCC" + KOKKOS_CXXFLAGS="--forward-unknown-to-host-compiler --extended-lambda --disable-warnings -x cu -ccbin $CXX" + KOKKOS_LDFLAGS="--forward-unknown-to-host-compiler -L$KOKKOS_DIR/lib" + if test "x$have_kokkos_openmp" = "xyes" +then : + + KOKKOS_CXXFLAGS="$KOKKOS_CXXFLAGS -fopenmp" + KOKKOS_LDFLAGS="$KOKKOS_LDFLAGS -fopenmp" + +fi + ;; + hip) + # Extract the first word of "hipcc", so it can be a program name with args. +set dummy hipcc; ac_word=$2 +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_path_HIPCC+y} +then : + printf %s "(cached) " >&6 +else case e in #( + e) case $HIPCC in + [\\/]* | ?:[\\/]*) + ac_cv_path_HIPCC="$HIPCC" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then + ac_cv_path_HIPCC="$as_dir$ac_word$ac_exec_ext" + printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + test -z "$ac_cv_path_HIPCC" && ac_cv_path_HIPCC="no" + ;; +esac ;; +esac +fi +HIPCC=$ac_cv_path_HIPCC +if test -n "$HIPCC"; then + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $HIPCC" >&5 +printf "%s\n" "$HIPCC" >&6; } +else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } +fi + + + if test "x$HIPCC" = "xno" +then : + as_fn_error $? "hipcc not found but Kokkos HIP backend requested" "$LINENO" 5 +fi + KOKKOS_CXX="$HIPCC" + KOKKOS_LDFLAGS="-L$KOKKOS_DIR/lib" + ;; + sycl) + # Extract the first word of "icpx", so it can be a program name with args. +set dummy icpx; ac_word=$2 +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_path_ICPX+y} +then : + printf %s "(cached) " >&6 +else case e in #( + e) case $ICPX in + [\\/]* | ?:[\\/]*) + ac_cv_path_ICPX="$ICPX" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then + ac_cv_path_ICPX="$as_dir$ac_word$ac_exec_ext" + printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + test -z "$ac_cv_path_ICPX" && ac_cv_path_ICPX="no" + ;; +esac ;; +esac +fi +ICPX=$ac_cv_path_ICPX +if test -n "$ICPX"; then + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ICPX" >&5 +printf "%s\n" "$ICPX" >&6; } +else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } +fi + + + if test "x$ICPX" = "xno" +then : + as_fn_error $? "icpx not found but Kokkos SYCL backend requested" "$LINENO" 5 +fi + KOKKOS_CXX="$ICPX" + KOKKOS_CXXFLAGS="-fsycl" + KOKKOS_LDFLAGS="-fsycl -L$KOKKOS_DIR/lib" + ;; + openmp) + KOKKOS_CXX="${CXX}" + KOKKOS_CXXFLAGS="-fopenmp -x c++" + KOKKOS_LDFLAGS="-fopenmp -L$KOKKOS_DIR/lib" + ;; + serial|*) + KOKKOS_CXX="${CXX}" + KOKKOS_CXXFLAGS="-x c++" + KOKKOS_LDFLAGS="-L$KOKKOS_DIR/lib" + ;; + esac + +else case e in #( + e) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: Using caller-provided KOKKOS_CXX=$KOKKOS_CXX" >&5 +printf "%s\n" "Using caller-provided KOKKOS_CXX=$KOKKOS_CXX" >&6; } ;; +esac +fi + + KOKKOS_CPPFLAGS="${KOKKOS_CPPFLAGS:--DLIBMESH_KOKKOS_COMPILATION -I$KOKKOS_DIR/include}" + KOKKOS_LDFLAGS="${KOKKOS_LDFLAGS:--L$KOKKOS_DIR/lib}" + KOKKOS_LIBS="${KOKKOS_LIBS:--lkokkoscore}" + + +printf "%s\n" "#define HAVE_KOKKOS 1" >>confdefs.h + + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: <<< Configuring library with Kokkos support >>>" >&5 +printf "%s\n" "<<< Configuring library with Kokkos support >>>" >&6; } + +else case e in #( + e) + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: Kokkos not found at $KOKKOS_DIR -- disabling Kokkos FE support" >&5 +printf "%s\n" "$as_me: WARNING: Kokkos not found at $KOKKOS_DIR -- disabling Kokkos FE support" >&2;} + enablekokkos=no + ;; +esac +fi + + +else case e in #( + e) enablekokkos=no ;; +esac +fi + + + + + + + if test x$enablekokkos = xyes; then + LIBMESH_ENABLE_KOKKOS_TRUE= + LIBMESH_ENABLE_KOKKOS_FALSE='#' +else + LIBMESH_ENABLE_KOKKOS_TRUE='#' + LIBMESH_ENABLE_KOKKOS_FALSE= +fi + +# ------------------------------------------------------------- + + + if test "$enableoptional" != no then : @@ -65182,6 +65544,10 @@ if test -z "${LIBMESH_ENABLE_METAPHYSICL_TRUE}" && test -z "${LIBMESH_ENABLE_MET as_fn_error $? "conditional \"LIBMESH_ENABLE_METAPHYSICL\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi +if test -z "${LIBMESH_ENABLE_KOKKOS_TRUE}" && test -z "${LIBMESH_ENABLE_KOKKOS_FALSE}"; then + as_fn_error $? "conditional \"LIBMESH_ENABLE_KOKKOS\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi if test -z "${GIT_CHECKOUT_TRUE}" && test -z "${GIT_CHECKOUT_FALSE}"; then as_fn_error $? "conditional \"GIT_CHECKOUT\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 diff --git a/contrib/Makefile.in b/contrib/Makefile.in index 6c8d8649cdc..668594d8c04 100644 --- a/contrib/Makefile.in +++ b/contrib/Makefile.in @@ -604,11 +604,18 @@ HDF5_DIR = @HDF5_DIR@ HDF5_LDFLAGS = @HDF5_LDFLAGS@ HDF5_LIBS = @HDF5_LIBS@ HDF5_PREFIX = @HDF5_PREFIX@ +HIPCC = @HIPCC@ +ICPX = @ICPX@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +KOKKOS_CPPFLAGS = @KOKKOS_CPPFLAGS@ +KOKKOS_CXX = @KOKKOS_CXX@ +KOKKOS_CXXFLAGS = @KOKKOS_CXXFLAGS@ +KOKKOS_LDFLAGS = @KOKKOS_LDFLAGS@ +KOKKOS_LIBS = @KOKKOS_LIBS@ LASPACK_INCLUDE = @LASPACK_INCLUDE@ LASPACK_LIB = @LASPACK_LIB@ LD = @LD@ @@ -656,6 +663,7 @@ NODEPRECATEDFLAG = @NODEPRECATEDFLAG@ NOX_INCLUDES = @NOX_INCLUDES@ NOX_LIBS = @NOX_LIBS@ NOX_MAKEFILE_EXPORT = @NOX_MAKEFILE_EXPORT@ +NVCC = @NVCC@ NVTX_INCLUDE = @NVTX_INCLUDE@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ diff --git a/contrib/capnproto/Makefile.in b/contrib/capnproto/Makefile.in index 43bfdcb44d5..56c7844f40d 100644 --- a/contrib/capnproto/Makefile.in +++ b/contrib/capnproto/Makefile.in @@ -453,11 +453,18 @@ HDF5_DIR = @HDF5_DIR@ HDF5_LDFLAGS = @HDF5_LDFLAGS@ HDF5_LIBS = @HDF5_LIBS@ HDF5_PREFIX = @HDF5_PREFIX@ +HIPCC = @HIPCC@ +ICPX = @ICPX@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +KOKKOS_CPPFLAGS = @KOKKOS_CPPFLAGS@ +KOKKOS_CXX = @KOKKOS_CXX@ +KOKKOS_CXXFLAGS = @KOKKOS_CXXFLAGS@ +KOKKOS_LDFLAGS = @KOKKOS_LDFLAGS@ +KOKKOS_LIBS = @KOKKOS_LIBS@ LASPACK_INCLUDE = @LASPACK_INCLUDE@ LASPACK_LIB = @LASPACK_LIB@ LD = @LD@ @@ -505,6 +512,7 @@ NODEPRECATEDFLAG = @NODEPRECATEDFLAG@ NOX_INCLUDES = @NOX_INCLUDES@ NOX_LIBS = @NOX_LIBS@ NOX_MAKEFILE_EXPORT = @NOX_MAKEFILE_EXPORT@ +NVCC = @NVCC@ NVTX_INCLUDE = @NVTX_INCLUDE@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ diff --git a/contrib/eigen/gitshim/Makefile.in b/contrib/eigen/gitshim/Makefile.in index cd83617aabb..bab4d953ac5 100644 --- a/contrib/eigen/gitshim/Makefile.in +++ b/contrib/eigen/gitshim/Makefile.in @@ -337,11 +337,18 @@ HDF5_DIR = @HDF5_DIR@ HDF5_LDFLAGS = @HDF5_LDFLAGS@ HDF5_LIBS = @HDF5_LIBS@ HDF5_PREFIX = @HDF5_PREFIX@ +HIPCC = @HIPCC@ +ICPX = @ICPX@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +KOKKOS_CPPFLAGS = @KOKKOS_CPPFLAGS@ +KOKKOS_CXX = @KOKKOS_CXX@ +KOKKOS_CXXFLAGS = @KOKKOS_CXXFLAGS@ +KOKKOS_LDFLAGS = @KOKKOS_LDFLAGS@ +KOKKOS_LIBS = @KOKKOS_LIBS@ LASPACK_INCLUDE = @LASPACK_INCLUDE@ LASPACK_LIB = @LASPACK_LIB@ LD = @LD@ @@ -389,6 +396,7 @@ NODEPRECATEDFLAG = @NODEPRECATEDFLAG@ NOX_INCLUDES = @NOX_INCLUDES@ NOX_LIBS = @NOX_LIBS@ NOX_MAKEFILE_EXPORT = @NOX_MAKEFILE_EXPORT@ +NVCC = @NVCC@ NVTX_INCLUDE = @NVTX_INCLUDE@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ diff --git a/contrib/exodusii/5.22b/exodus/Makefile.in b/contrib/exodusii/5.22b/exodus/Makefile.in index d6f576d1a90..66a5e6a0357 100644 --- a/contrib/exodusii/5.22b/exodus/Makefile.in +++ b/contrib/exodusii/5.22b/exodus/Makefile.in @@ -3320,11 +3320,18 @@ HDF5_DIR = @HDF5_DIR@ HDF5_LDFLAGS = @HDF5_LDFLAGS@ HDF5_LIBS = @HDF5_LIBS@ HDF5_PREFIX = @HDF5_PREFIX@ +HIPCC = @HIPCC@ +ICPX = @ICPX@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +KOKKOS_CPPFLAGS = @KOKKOS_CPPFLAGS@ +KOKKOS_CXX = @KOKKOS_CXX@ +KOKKOS_CXXFLAGS = @KOKKOS_CXXFLAGS@ +KOKKOS_LDFLAGS = @KOKKOS_LDFLAGS@ +KOKKOS_LIBS = @KOKKOS_LIBS@ LASPACK_INCLUDE = @LASPACK_INCLUDE@ LASPACK_LIB = @LASPACK_LIB@ LD = @LD@ @@ -3372,6 +3379,7 @@ NODEPRECATEDFLAG = @NODEPRECATEDFLAG@ NOX_INCLUDES = @NOX_INCLUDES@ NOX_LIBS = @NOX_LIBS@ NOX_MAKEFILE_EXPORT = @NOX_MAKEFILE_EXPORT@ +NVCC = @NVCC@ NVTX_INCLUDE = @NVTX_INCLUDE@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ diff --git a/contrib/exodusii/5.22b/nemesis/Makefile.in b/contrib/exodusii/5.22b/nemesis/Makefile.in index 8538cdc184f..17636fa0144 100644 --- a/contrib/exodusii/5.22b/nemesis/Makefile.in +++ b/contrib/exodusii/5.22b/nemesis/Makefile.in @@ -399,11 +399,18 @@ HDF5_DIR = @HDF5_DIR@ HDF5_LDFLAGS = @HDF5_LDFLAGS@ HDF5_LIBS = @HDF5_LIBS@ HDF5_PREFIX = @HDF5_PREFIX@ +HIPCC = @HIPCC@ +ICPX = @ICPX@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +KOKKOS_CPPFLAGS = @KOKKOS_CPPFLAGS@ +KOKKOS_CXX = @KOKKOS_CXX@ +KOKKOS_CXXFLAGS = @KOKKOS_CXXFLAGS@ +KOKKOS_LDFLAGS = @KOKKOS_LDFLAGS@ +KOKKOS_LIBS = @KOKKOS_LIBS@ LASPACK_INCLUDE = @LASPACK_INCLUDE@ LASPACK_LIB = @LASPACK_LIB@ LD = @LD@ @@ -451,6 +458,7 @@ NODEPRECATEDFLAG = @NODEPRECATEDFLAG@ NOX_INCLUDES = @NOX_INCLUDES@ NOX_LIBS = @NOX_LIBS@ NOX_MAKEFILE_EXPORT = @NOX_MAKEFILE_EXPORT@ +NVCC = @NVCC@ NVTX_INCLUDE = @NVTX_INCLUDE@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ diff --git a/contrib/exodusii/Lib/Makefile.in b/contrib/exodusii/Lib/Makefile.in index 4c6ef829ed5..59c360d8928 100644 --- a/contrib/exodusii/Lib/Makefile.in +++ b/contrib/exodusii/Lib/Makefile.in @@ -1955,11 +1955,18 @@ HDF5_DIR = @HDF5_DIR@ HDF5_LDFLAGS = @HDF5_LDFLAGS@ HDF5_LIBS = @HDF5_LIBS@ HDF5_PREFIX = @HDF5_PREFIX@ +HIPCC = @HIPCC@ +ICPX = @ICPX@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +KOKKOS_CPPFLAGS = @KOKKOS_CPPFLAGS@ +KOKKOS_CXX = @KOKKOS_CXX@ +KOKKOS_CXXFLAGS = @KOKKOS_CXXFLAGS@ +KOKKOS_LDFLAGS = @KOKKOS_LDFLAGS@ +KOKKOS_LIBS = @KOKKOS_LIBS@ LASPACK_INCLUDE = @LASPACK_INCLUDE@ LASPACK_LIB = @LASPACK_LIB@ LD = @LD@ @@ -2007,6 +2014,7 @@ NODEPRECATEDFLAG = @NODEPRECATEDFLAG@ NOX_INCLUDES = @NOX_INCLUDES@ NOX_LIBS = @NOX_LIBS@ NOX_MAKEFILE_EXPORT = @NOX_MAKEFILE_EXPORT@ +NVCC = @NVCC@ NVTX_INCLUDE = @NVTX_INCLUDE@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ diff --git a/contrib/exodusii/v8.11/exodus/Makefile.in b/contrib/exodusii/v8.11/exodus/Makefile.in index 826c62c23e0..6c21419de79 100644 --- a/contrib/exodusii/v8.11/exodus/Makefile.in +++ b/contrib/exodusii/v8.11/exodus/Makefile.in @@ -4248,11 +4248,18 @@ HDF5_DIR = @HDF5_DIR@ HDF5_LDFLAGS = @HDF5_LDFLAGS@ HDF5_LIBS = @HDF5_LIBS@ HDF5_PREFIX = @HDF5_PREFIX@ +HIPCC = @HIPCC@ +ICPX = @ICPX@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +KOKKOS_CPPFLAGS = @KOKKOS_CPPFLAGS@ +KOKKOS_CXX = @KOKKOS_CXX@ +KOKKOS_CXXFLAGS = @KOKKOS_CXXFLAGS@ +KOKKOS_LDFLAGS = @KOKKOS_LDFLAGS@ +KOKKOS_LIBS = @KOKKOS_LIBS@ LASPACK_INCLUDE = @LASPACK_INCLUDE@ LASPACK_LIB = @LASPACK_LIB@ LD = @LD@ @@ -4300,6 +4307,7 @@ NODEPRECATEDFLAG = @NODEPRECATEDFLAG@ NOX_INCLUDES = @NOX_INCLUDES@ NOX_LIBS = @NOX_LIBS@ NOX_MAKEFILE_EXPORT = @NOX_MAKEFILE_EXPORT@ +NVCC = @NVCC@ NVTX_INCLUDE = @NVTX_INCLUDE@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ diff --git a/contrib/exodusii/v8.11/nemesis/Makefile.in b/contrib/exodusii/v8.11/nemesis/Makefile.in index d1909c9f1d5..715ed90b4fe 100644 --- a/contrib/exodusii/v8.11/nemesis/Makefile.in +++ b/contrib/exodusii/v8.11/nemesis/Makefile.in @@ -409,11 +409,18 @@ HDF5_DIR = @HDF5_DIR@ HDF5_LDFLAGS = @HDF5_LDFLAGS@ HDF5_LIBS = @HDF5_LIBS@ HDF5_PREFIX = @HDF5_PREFIX@ +HIPCC = @HIPCC@ +ICPX = @ICPX@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +KOKKOS_CPPFLAGS = @KOKKOS_CPPFLAGS@ +KOKKOS_CXX = @KOKKOS_CXX@ +KOKKOS_CXXFLAGS = @KOKKOS_CXXFLAGS@ +KOKKOS_LDFLAGS = @KOKKOS_LDFLAGS@ +KOKKOS_LIBS = @KOKKOS_LIBS@ LASPACK_INCLUDE = @LASPACK_INCLUDE@ LASPACK_LIB = @LASPACK_LIB@ LD = @LD@ @@ -461,6 +468,7 @@ NODEPRECATEDFLAG = @NODEPRECATEDFLAG@ NOX_INCLUDES = @NOX_INCLUDES@ NOX_LIBS = @NOX_LIBS@ NOX_MAKEFILE_EXPORT = @NOX_MAKEFILE_EXPORT@ +NVCC = @NVCC@ NVTX_INCLUDE = @NVTX_INCLUDE@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ diff --git a/contrib/fparser/Makefile.in b/contrib/fparser/Makefile.in index a9a20542d31..dd6e31b0e76 100644 --- a/contrib/fparser/Makefile.in +++ b/contrib/fparser/Makefile.in @@ -867,11 +867,18 @@ HDF5_DIR = @HDF5_DIR@ HDF5_LDFLAGS = @HDF5_LDFLAGS@ HDF5_LIBS = @HDF5_LIBS@ HDF5_PREFIX = @HDF5_PREFIX@ +HIPCC = @HIPCC@ +ICPX = @ICPX@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +KOKKOS_CPPFLAGS = @KOKKOS_CPPFLAGS@ +KOKKOS_CXX = @KOKKOS_CXX@ +KOKKOS_CXXFLAGS = @KOKKOS_CXXFLAGS@ +KOKKOS_LDFLAGS = @KOKKOS_LDFLAGS@ +KOKKOS_LIBS = @KOKKOS_LIBS@ LASPACK_INCLUDE = @LASPACK_INCLUDE@ LASPACK_LIB = @LASPACK_LIB@ LD = @LD@ @@ -919,6 +926,7 @@ NODEPRECATEDFLAG = @NODEPRECATEDFLAG@ NOX_INCLUDES = @NOX_INCLUDES@ NOX_LIBS = @NOX_LIBS@ NOX_MAKEFILE_EXPORT = @NOX_MAKEFILE_EXPORT@ +NVCC = @NVCC@ NVTX_INCLUDE = @NVTX_INCLUDE@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ diff --git a/contrib/fparser/extrasrc/Makefile.in b/contrib/fparser/extrasrc/Makefile.in index f257d59051c..3eafacaf7a0 100644 --- a/contrib/fparser/extrasrc/Makefile.in +++ b/contrib/fparser/extrasrc/Makefile.in @@ -339,11 +339,18 @@ HDF5_DIR = @HDF5_DIR@ HDF5_LDFLAGS = @HDF5_LDFLAGS@ HDF5_LIBS = @HDF5_LIBS@ HDF5_PREFIX = @HDF5_PREFIX@ +HIPCC = @HIPCC@ +ICPX = @ICPX@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +KOKKOS_CPPFLAGS = @KOKKOS_CPPFLAGS@ +KOKKOS_CXX = @KOKKOS_CXX@ +KOKKOS_CXXFLAGS = @KOKKOS_CXXFLAGS@ +KOKKOS_LDFLAGS = @KOKKOS_LDFLAGS@ +KOKKOS_LIBS = @KOKKOS_LIBS@ LASPACK_INCLUDE = @LASPACK_INCLUDE@ LASPACK_LIB = @LASPACK_LIB@ LD = @LD@ @@ -391,6 +398,7 @@ NODEPRECATEDFLAG = @NODEPRECATEDFLAG@ NOX_INCLUDES = @NOX_INCLUDES@ NOX_LIBS = @NOX_LIBS@ NOX_MAKEFILE_EXPORT = @NOX_MAKEFILE_EXPORT@ +NVCC = @NVCC@ NVTX_INCLUDE = @NVTX_INCLUDE@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ diff --git a/contrib/gmv/Makefile.in b/contrib/gmv/Makefile.in index 1043f694cf0..249f658088a 100644 --- a/contrib/gmv/Makefile.in +++ b/contrib/gmv/Makefile.in @@ -394,11 +394,18 @@ HDF5_DIR = @HDF5_DIR@ HDF5_LDFLAGS = @HDF5_LDFLAGS@ HDF5_LIBS = @HDF5_LIBS@ HDF5_PREFIX = @HDF5_PREFIX@ +HIPCC = @HIPCC@ +ICPX = @ICPX@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +KOKKOS_CPPFLAGS = @KOKKOS_CPPFLAGS@ +KOKKOS_CXX = @KOKKOS_CXX@ +KOKKOS_CXXFLAGS = @KOKKOS_CXXFLAGS@ +KOKKOS_LDFLAGS = @KOKKOS_LDFLAGS@ +KOKKOS_LIBS = @KOKKOS_LIBS@ LASPACK_INCLUDE = @LASPACK_INCLUDE@ LASPACK_LIB = @LASPACK_LIB@ LD = @LD@ @@ -446,6 +453,7 @@ NODEPRECATEDFLAG = @NODEPRECATEDFLAG@ NOX_INCLUDES = @NOX_INCLUDES@ NOX_LIBS = @NOX_LIBS@ NOX_MAKEFILE_EXPORT = @NOX_MAKEFILE_EXPORT@ +NVCC = @NVCC@ NVTX_INCLUDE = @NVTX_INCLUDE@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ diff --git a/contrib/gzstream/Makefile.in b/contrib/gzstream/Makefile.in index 26d9c6a99cd..d7694ab76c8 100644 --- a/contrib/gzstream/Makefile.in +++ b/contrib/gzstream/Makefile.in @@ -446,11 +446,18 @@ HDF5_DIR = @HDF5_DIR@ HDF5_LDFLAGS = @HDF5_LDFLAGS@ HDF5_LIBS = @HDF5_LIBS@ HDF5_PREFIX = @HDF5_PREFIX@ +HIPCC = @HIPCC@ +ICPX = @ICPX@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +KOKKOS_CPPFLAGS = @KOKKOS_CPPFLAGS@ +KOKKOS_CXX = @KOKKOS_CXX@ +KOKKOS_CXXFLAGS = @KOKKOS_CXXFLAGS@ +KOKKOS_LDFLAGS = @KOKKOS_LDFLAGS@ +KOKKOS_LIBS = @KOKKOS_LIBS@ LASPACK_INCLUDE = @LASPACK_INCLUDE@ LASPACK_LIB = @LASPACK_LIB@ LD = @LD@ @@ -498,6 +505,7 @@ NODEPRECATEDFLAG = @NODEPRECATEDFLAG@ NOX_INCLUDES = @NOX_INCLUDES@ NOX_LIBS = @NOX_LIBS@ NOX_MAKEFILE_EXPORT = @NOX_MAKEFILE_EXPORT@ +NVCC = @NVCC@ NVTX_INCLUDE = @NVTX_INCLUDE@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ diff --git a/contrib/laspack/Makefile.in b/contrib/laspack/Makefile.in index a921519ee01..125376d4347 100644 --- a/contrib/laspack/Makefile.in +++ b/contrib/laspack/Makefile.in @@ -504,11 +504,18 @@ HDF5_DIR = @HDF5_DIR@ HDF5_LDFLAGS = @HDF5_LDFLAGS@ HDF5_LIBS = @HDF5_LIBS@ HDF5_PREFIX = @HDF5_PREFIX@ +HIPCC = @HIPCC@ +ICPX = @ICPX@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +KOKKOS_CPPFLAGS = @KOKKOS_CPPFLAGS@ +KOKKOS_CXX = @KOKKOS_CXX@ +KOKKOS_CXXFLAGS = @KOKKOS_CXXFLAGS@ +KOKKOS_LDFLAGS = @KOKKOS_LDFLAGS@ +KOKKOS_LIBS = @KOKKOS_LIBS@ LASPACK_INCLUDE = @LASPACK_INCLUDE@ LASPACK_LIB = @LASPACK_LIB@ LD = @LD@ @@ -556,6 +563,7 @@ NODEPRECATEDFLAG = @NODEPRECATEDFLAG@ NOX_INCLUDES = @NOX_INCLUDES@ NOX_LIBS = @NOX_LIBS@ NOX_MAKEFILE_EXPORT = @NOX_MAKEFILE_EXPORT@ +NVCC = @NVCC@ NVTX_INCLUDE = @NVTX_INCLUDE@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ diff --git a/contrib/libHilbert/Makefile.in b/contrib/libHilbert/Makefile.in index 92b7a8a5c6e..35d049071ec 100644 --- a/contrib/libHilbert/Makefile.in +++ b/contrib/libHilbert/Makefile.in @@ -477,11 +477,18 @@ HDF5_DIR = @HDF5_DIR@ HDF5_LDFLAGS = @HDF5_LDFLAGS@ HDF5_LIBS = @HDF5_LIBS@ HDF5_PREFIX = @HDF5_PREFIX@ +HIPCC = @HIPCC@ +ICPX = @ICPX@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +KOKKOS_CPPFLAGS = @KOKKOS_CPPFLAGS@ +KOKKOS_CXX = @KOKKOS_CXX@ +KOKKOS_CXXFLAGS = @KOKKOS_CXXFLAGS@ +KOKKOS_LDFLAGS = @KOKKOS_LDFLAGS@ +KOKKOS_LIBS = @KOKKOS_LIBS@ LASPACK_INCLUDE = @LASPACK_INCLUDE@ LASPACK_LIB = @LASPACK_LIB@ LD = @LD@ @@ -529,6 +536,7 @@ NODEPRECATEDFLAG = @NODEPRECATEDFLAG@ NOX_INCLUDES = @NOX_INCLUDES@ NOX_LIBS = @NOX_LIBS@ NOX_MAKEFILE_EXPORT = @NOX_MAKEFILE_EXPORT@ +NVCC = @NVCC@ NVTX_INCLUDE = @NVTX_INCLUDE@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ diff --git a/contrib/metis/Makefile.in b/contrib/metis/Makefile.in index 2167e22fd72..5e8047805b9 100644 --- a/contrib/metis/Makefile.in +++ b/contrib/metis/Makefile.in @@ -1021,11 +1021,18 @@ HDF5_DIR = @HDF5_DIR@ HDF5_LDFLAGS = @HDF5_LDFLAGS@ HDF5_LIBS = @HDF5_LIBS@ HDF5_PREFIX = @HDF5_PREFIX@ +HIPCC = @HIPCC@ +ICPX = @ICPX@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +KOKKOS_CPPFLAGS = @KOKKOS_CPPFLAGS@ +KOKKOS_CXX = @KOKKOS_CXX@ +KOKKOS_CXXFLAGS = @KOKKOS_CXXFLAGS@ +KOKKOS_LDFLAGS = @KOKKOS_LDFLAGS@ +KOKKOS_LIBS = @KOKKOS_LIBS@ LASPACK_INCLUDE = @LASPACK_INCLUDE@ LASPACK_LIB = @LASPACK_LIB@ LD = @LD@ @@ -1073,6 +1080,7 @@ NODEPRECATEDFLAG = @NODEPRECATEDFLAG@ NOX_INCLUDES = @NOX_INCLUDES@ NOX_LIBS = @NOX_LIBS@ NOX_MAKEFILE_EXPORT = @NOX_MAKEFILE_EXPORT@ +NVCC = @NVCC@ NVTX_INCLUDE = @NVTX_INCLUDE@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ diff --git a/contrib/nanoflann/Makefile.in b/contrib/nanoflann/Makefile.in index cb6fb5b1e25..94694c9b03c 100644 --- a/contrib/nanoflann/Makefile.in +++ b/contrib/nanoflann/Makefile.in @@ -443,11 +443,18 @@ HDF5_DIR = @HDF5_DIR@ HDF5_LDFLAGS = @HDF5_LDFLAGS@ HDF5_LIBS = @HDF5_LIBS@ HDF5_PREFIX = @HDF5_PREFIX@ +HIPCC = @HIPCC@ +ICPX = @ICPX@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +KOKKOS_CPPFLAGS = @KOKKOS_CPPFLAGS@ +KOKKOS_CXX = @KOKKOS_CXX@ +KOKKOS_CXXFLAGS = @KOKKOS_CXXFLAGS@ +KOKKOS_LDFLAGS = @KOKKOS_LDFLAGS@ +KOKKOS_LIBS = @KOKKOS_LIBS@ LASPACK_INCLUDE = @LASPACK_INCLUDE@ LASPACK_LIB = @LASPACK_LIB@ LD = @LD@ @@ -495,6 +502,7 @@ NODEPRECATEDFLAG = @NODEPRECATEDFLAG@ NOX_INCLUDES = @NOX_INCLUDES@ NOX_LIBS = @NOX_LIBS@ NOX_MAKEFILE_EXPORT = @NOX_MAKEFILE_EXPORT@ +NVCC = @NVCC@ NVTX_INCLUDE = @NVTX_INCLUDE@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ diff --git a/contrib/nemesis/Lib/Makefile.in b/contrib/nemesis/Lib/Makefile.in index 30e196af739..722bf4b86f0 100644 --- a/contrib/nemesis/Lib/Makefile.in +++ b/contrib/nemesis/Lib/Makefile.in @@ -789,11 +789,18 @@ HDF5_DIR = @HDF5_DIR@ HDF5_LDFLAGS = @HDF5_LDFLAGS@ HDF5_LIBS = @HDF5_LIBS@ HDF5_PREFIX = @HDF5_PREFIX@ +HIPCC = @HIPCC@ +ICPX = @ICPX@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +KOKKOS_CPPFLAGS = @KOKKOS_CPPFLAGS@ +KOKKOS_CXX = @KOKKOS_CXX@ +KOKKOS_CXXFLAGS = @KOKKOS_CXXFLAGS@ +KOKKOS_LDFLAGS = @KOKKOS_LDFLAGS@ +KOKKOS_LIBS = @KOKKOS_LIBS@ LASPACK_INCLUDE = @LASPACK_INCLUDE@ LASPACK_LIB = @LASPACK_LIB@ LD = @LD@ @@ -841,6 +848,7 @@ NODEPRECATEDFLAG = @NODEPRECATEDFLAG@ NOX_INCLUDES = @NOX_INCLUDES@ NOX_LIBS = @NOX_LIBS@ NOX_MAKEFILE_EXPORT = @NOX_MAKEFILE_EXPORT@ +NVCC = @NVCC@ NVTX_INCLUDE = @NVTX_INCLUDE@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ diff --git a/contrib/netgen/Makefile.in b/contrib/netgen/Makefile.in index f7db0d91967..931be784598 100644 --- a/contrib/netgen/Makefile.in +++ b/contrib/netgen/Makefile.in @@ -341,11 +341,18 @@ HDF5_DIR = @HDF5_DIR@ HDF5_LDFLAGS = @HDF5_LDFLAGS@ HDF5_LIBS = @HDF5_LIBS@ HDF5_PREFIX = @HDF5_PREFIX@ +HIPCC = @HIPCC@ +ICPX = @ICPX@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +KOKKOS_CPPFLAGS = @KOKKOS_CPPFLAGS@ +KOKKOS_CXX = @KOKKOS_CXX@ +KOKKOS_CXXFLAGS = @KOKKOS_CXXFLAGS@ +KOKKOS_LDFLAGS = @KOKKOS_LDFLAGS@ +KOKKOS_LIBS = @KOKKOS_LIBS@ LASPACK_INCLUDE = @LASPACK_INCLUDE@ LASPACK_LIB = @LASPACK_LIB@ LD = @LD@ @@ -393,6 +400,7 @@ NODEPRECATEDFLAG = @NODEPRECATEDFLAG@ NOX_INCLUDES = @NOX_INCLUDES@ NOX_LIBS = @NOX_LIBS@ NOX_MAKEFILE_EXPORT = @NOX_MAKEFILE_EXPORT@ +NVCC = @NVCC@ NVTX_INCLUDE = @NVTX_INCLUDE@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ @@ -934,7 +942,7 @@ vtkversion = @vtkversion@ @LIBMESH_ENABLE_NETGEN_TRUE@ netgen/nglib/nglib.h \ @LIBMESH_ENABLE_NETGEN_TRUE@ netgen/nglib/nglib_occ.cpp \ @LIBMESH_ENABLE_NETGEN_TRUE@ netgen/nglib/nglib_occ.h \ -@LIBMESH_ENABLE_NETGEN_TRUE@ netgen/nglib/parallelfunc.cpp +@LIBMESH_ENABLE_NETGEN_TRUE@ netgen/nglib/parallelfunc.cpp @LIBMESH_ENABLE_NETGEN_TRUE@netgenincludedir = $(includedir)/netgen @LIBMESH_ENABLE_NETGEN_TRUE@nglibincludedir = $(includedir)/netgen/nglib diff --git a/contrib/parmetis/Makefile.in b/contrib/parmetis/Makefile.in index 70875e6ff39..cde4b12aab9 100644 --- a/contrib/parmetis/Makefile.in +++ b/contrib/parmetis/Makefile.in @@ -855,11 +855,18 @@ HDF5_DIR = @HDF5_DIR@ HDF5_LDFLAGS = @HDF5_LDFLAGS@ HDF5_LIBS = @HDF5_LIBS@ HDF5_PREFIX = @HDF5_PREFIX@ +HIPCC = @HIPCC@ +ICPX = @ICPX@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +KOKKOS_CPPFLAGS = @KOKKOS_CPPFLAGS@ +KOKKOS_CXX = @KOKKOS_CXX@ +KOKKOS_CXXFLAGS = @KOKKOS_CXXFLAGS@ +KOKKOS_LDFLAGS = @KOKKOS_LDFLAGS@ +KOKKOS_LIBS = @KOKKOS_LIBS@ LASPACK_INCLUDE = @LASPACK_INCLUDE@ LASPACK_LIB = @LASPACK_LIB@ LD = @LD@ @@ -907,6 +914,7 @@ NODEPRECATEDFLAG = @NODEPRECATEDFLAG@ NOX_INCLUDES = @NOX_INCLUDES@ NOX_LIBS = @NOX_LIBS@ NOX_MAKEFILE_EXPORT = @NOX_MAKEFILE_EXPORT@ +NVCC = @NVCC@ NVTX_INCLUDE = @NVTX_INCLUDE@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ diff --git a/contrib/poly2tri/modified/Makefile.in b/contrib/poly2tri/modified/Makefile.in index abb0c8cffa6..514fd6a38a6 100644 --- a/contrib/poly2tri/modified/Makefile.in +++ b/contrib/poly2tri/modified/Makefile.in @@ -541,11 +541,18 @@ HDF5_DIR = @HDF5_DIR@ HDF5_LDFLAGS = @HDF5_LDFLAGS@ HDF5_LIBS = @HDF5_LIBS@ HDF5_PREFIX = @HDF5_PREFIX@ +HIPCC = @HIPCC@ +ICPX = @ICPX@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +KOKKOS_CPPFLAGS = @KOKKOS_CPPFLAGS@ +KOKKOS_CXX = @KOKKOS_CXX@ +KOKKOS_CXXFLAGS = @KOKKOS_CXXFLAGS@ +KOKKOS_LDFLAGS = @KOKKOS_LDFLAGS@ +KOKKOS_LIBS = @KOKKOS_LIBS@ LASPACK_INCLUDE = @LASPACK_INCLUDE@ LASPACK_LIB = @LASPACK_LIB@ LD = @LD@ @@ -593,6 +600,7 @@ NODEPRECATEDFLAG = @NODEPRECATEDFLAG@ NOX_INCLUDES = @NOX_INCLUDES@ NOX_LIBS = @NOX_LIBS@ NOX_MAKEFILE_EXPORT = @NOX_MAKEFILE_EXPORT@ +NVCC = @NVCC@ NVTX_INCLUDE = @NVTX_INCLUDE@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ diff --git a/contrib/qhull/2012.1/Makefile.in b/contrib/qhull/2012.1/Makefile.in index d9910cea212..03f2cbcb819 100644 --- a/contrib/qhull/2012.1/Makefile.in +++ b/contrib/qhull/2012.1/Makefile.in @@ -1164,11 +1164,18 @@ HDF5_DIR = @HDF5_DIR@ HDF5_LDFLAGS = @HDF5_LDFLAGS@ HDF5_LIBS = @HDF5_LIBS@ HDF5_PREFIX = @HDF5_PREFIX@ +HIPCC = @HIPCC@ +ICPX = @ICPX@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +KOKKOS_CPPFLAGS = @KOKKOS_CPPFLAGS@ +KOKKOS_CXX = @KOKKOS_CXX@ +KOKKOS_CXXFLAGS = @KOKKOS_CXXFLAGS@ +KOKKOS_LDFLAGS = @KOKKOS_LDFLAGS@ +KOKKOS_LIBS = @KOKKOS_LIBS@ LASPACK_INCLUDE = @LASPACK_INCLUDE@ LASPACK_LIB = @LASPACK_LIB@ LD = @LD@ @@ -1216,6 +1223,7 @@ NODEPRECATEDFLAG = @NODEPRECATEDFLAG@ NOX_INCLUDES = @NOX_INCLUDES@ NOX_LIBS = @NOX_LIBS@ NOX_MAKEFILE_EXPORT = @NOX_MAKEFILE_EXPORT@ +NVCC = @NVCC@ NVTX_INCLUDE = @NVTX_INCLUDE@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ diff --git a/contrib/sfcurves/Makefile.in b/contrib/sfcurves/Makefile.in index 453e333f449..18be38e4660 100644 --- a/contrib/sfcurves/Makefile.in +++ b/contrib/sfcurves/Makefile.in @@ -414,11 +414,18 @@ HDF5_DIR = @HDF5_DIR@ HDF5_LDFLAGS = @HDF5_LDFLAGS@ HDF5_LIBS = @HDF5_LIBS@ HDF5_PREFIX = @HDF5_PREFIX@ +HIPCC = @HIPCC@ +ICPX = @ICPX@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +KOKKOS_CPPFLAGS = @KOKKOS_CPPFLAGS@ +KOKKOS_CXX = @KOKKOS_CXX@ +KOKKOS_CXXFLAGS = @KOKKOS_CXXFLAGS@ +KOKKOS_LDFLAGS = @KOKKOS_LDFLAGS@ +KOKKOS_LIBS = @KOKKOS_LIBS@ LASPACK_INCLUDE = @LASPACK_INCLUDE@ LASPACK_LIB = @LASPACK_LIB@ LD = @LD@ @@ -466,6 +473,7 @@ NODEPRECATEDFLAG = @NODEPRECATEDFLAG@ NOX_INCLUDES = @NOX_INCLUDES@ NOX_LIBS = @NOX_LIBS@ NOX_MAKEFILE_EXPORT = @NOX_MAKEFILE_EXPORT@ +NVCC = @NVCC@ NVTX_INCLUDE = @NVTX_INCLUDE@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ diff --git a/contrib/tecplot/binary/Makefile.in b/contrib/tecplot/binary/Makefile.in index 9c918125c59..9a13af38818 100644 --- a/contrib/tecplot/binary/Makefile.in +++ b/contrib/tecplot/binary/Makefile.in @@ -384,11 +384,18 @@ HDF5_DIR = @HDF5_DIR@ HDF5_LDFLAGS = @HDF5_LDFLAGS@ HDF5_LIBS = @HDF5_LIBS@ HDF5_PREFIX = @HDF5_PREFIX@ +HIPCC = @HIPCC@ +ICPX = @ICPX@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +KOKKOS_CPPFLAGS = @KOKKOS_CPPFLAGS@ +KOKKOS_CXX = @KOKKOS_CXX@ +KOKKOS_CXXFLAGS = @KOKKOS_CXXFLAGS@ +KOKKOS_LDFLAGS = @KOKKOS_LDFLAGS@ +KOKKOS_LIBS = @KOKKOS_LIBS@ LASPACK_INCLUDE = @LASPACK_INCLUDE@ LASPACK_LIB = @LASPACK_LIB@ LD = @LD@ @@ -436,6 +443,7 @@ NODEPRECATEDFLAG = @NODEPRECATEDFLAG@ NOX_INCLUDES = @NOX_INCLUDES@ NOX_LIBS = @NOX_LIBS@ NOX_MAKEFILE_EXPORT = @NOX_MAKEFILE_EXPORT@ +NVCC = @NVCC@ NVTX_INCLUDE = @NVTX_INCLUDE@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ diff --git a/contrib/tecplot/tecio/Makefile.in b/contrib/tecplot/tecio/Makefile.in index 0ca8d9faaf2..f937b27b6db 100644 --- a/contrib/tecplot/tecio/Makefile.in +++ b/contrib/tecplot/tecio/Makefile.in @@ -623,11 +623,18 @@ HDF5_DIR = @HDF5_DIR@ HDF5_LDFLAGS = @HDF5_LDFLAGS@ HDF5_LIBS = @HDF5_LIBS@ HDF5_PREFIX = @HDF5_PREFIX@ +HIPCC = @HIPCC@ +ICPX = @ICPX@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +KOKKOS_CPPFLAGS = @KOKKOS_CPPFLAGS@ +KOKKOS_CXX = @KOKKOS_CXX@ +KOKKOS_CXXFLAGS = @KOKKOS_CXXFLAGS@ +KOKKOS_LDFLAGS = @KOKKOS_LDFLAGS@ +KOKKOS_LIBS = @KOKKOS_LIBS@ LASPACK_INCLUDE = @LASPACK_INCLUDE@ LASPACK_LIB = @LASPACK_LIB@ LD = @LD@ @@ -675,6 +682,7 @@ NODEPRECATEDFLAG = @NODEPRECATEDFLAG@ NOX_INCLUDES = @NOX_INCLUDES@ NOX_LIBS = @NOX_LIBS@ NOX_MAKEFILE_EXPORT = @NOX_MAKEFILE_EXPORT@ +NVCC = @NVCC@ NVTX_INCLUDE = @NVTX_INCLUDE@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ diff --git a/contrib/tetgen/Makefile.in b/contrib/tetgen/Makefile.in index b3035e72b2b..725d7a30d36 100644 --- a/contrib/tetgen/Makefile.in +++ b/contrib/tetgen/Makefile.in @@ -429,11 +429,18 @@ HDF5_DIR = @HDF5_DIR@ HDF5_LDFLAGS = @HDF5_LDFLAGS@ HDF5_LIBS = @HDF5_LIBS@ HDF5_PREFIX = @HDF5_PREFIX@ +HIPCC = @HIPCC@ +ICPX = @ICPX@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +KOKKOS_CPPFLAGS = @KOKKOS_CPPFLAGS@ +KOKKOS_CXX = @KOKKOS_CXX@ +KOKKOS_CXXFLAGS = @KOKKOS_CXXFLAGS@ +KOKKOS_LDFLAGS = @KOKKOS_LDFLAGS@ +KOKKOS_LIBS = @KOKKOS_LIBS@ LASPACK_INCLUDE = @LASPACK_INCLUDE@ LASPACK_LIB = @LASPACK_LIB@ LD = @LD@ @@ -481,6 +488,7 @@ NODEPRECATEDFLAG = @NODEPRECATEDFLAG@ NOX_INCLUDES = @NOX_INCLUDES@ NOX_LIBS = @NOX_LIBS@ NOX_MAKEFILE_EXPORT = @NOX_MAKEFILE_EXPORT@ +NVCC = @NVCC@ NVTX_INCLUDE = @NVTX_INCLUDE@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ diff --git a/contrib/triangle/Makefile.in b/contrib/triangle/Makefile.in index a63cb31454c..f87cb42296f 100644 --- a/contrib/triangle/Makefile.in +++ b/contrib/triangle/Makefile.in @@ -424,11 +424,18 @@ HDF5_DIR = @HDF5_DIR@ HDF5_LDFLAGS = @HDF5_LDFLAGS@ HDF5_LIBS = @HDF5_LIBS@ HDF5_PREFIX = @HDF5_PREFIX@ +HIPCC = @HIPCC@ +ICPX = @ICPX@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +KOKKOS_CPPFLAGS = @KOKKOS_CPPFLAGS@ +KOKKOS_CXX = @KOKKOS_CXX@ +KOKKOS_CXXFLAGS = @KOKKOS_CXXFLAGS@ +KOKKOS_LDFLAGS = @KOKKOS_LDFLAGS@ +KOKKOS_LIBS = @KOKKOS_LIBS@ LASPACK_INCLUDE = @LASPACK_INCLUDE@ LASPACK_LIB = @LASPACK_LIB@ LD = @LD@ @@ -476,6 +483,7 @@ NODEPRECATEDFLAG = @NODEPRECATEDFLAG@ NOX_INCLUDES = @NOX_INCLUDES@ NOX_LIBS = @NOX_LIBS@ NOX_MAKEFILE_EXPORT = @NOX_MAKEFILE_EXPORT@ +NVCC = @NVCC@ NVTX_INCLUDE = @NVTX_INCLUDE@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ diff --git a/doc/Makefile.in b/doc/Makefile.in index 42ba76ef15b..812994568fe 100644 --- a/doc/Makefile.in +++ b/doc/Makefile.in @@ -347,11 +347,18 @@ HDF5_DIR = @HDF5_DIR@ HDF5_LDFLAGS = @HDF5_LDFLAGS@ HDF5_LIBS = @HDF5_LIBS@ HDF5_PREFIX = @HDF5_PREFIX@ +HIPCC = @HIPCC@ +ICPX = @ICPX@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +KOKKOS_CPPFLAGS = @KOKKOS_CPPFLAGS@ +KOKKOS_CXX = @KOKKOS_CXX@ +KOKKOS_CXXFLAGS = @KOKKOS_CXXFLAGS@ +KOKKOS_LDFLAGS = @KOKKOS_LDFLAGS@ +KOKKOS_LIBS = @KOKKOS_LIBS@ LASPACK_INCLUDE = @LASPACK_INCLUDE@ LASPACK_LIB = @LASPACK_LIB@ LD = @LD@ @@ -399,6 +406,7 @@ NODEPRECATEDFLAG = @NODEPRECATEDFLAG@ NOX_INCLUDES = @NOX_INCLUDES@ NOX_LIBS = @NOX_LIBS@ NOX_MAKEFILE_EXPORT = @NOX_MAKEFILE_EXPORT@ +NVCC = @NVCC@ NVTX_INCLUDE = @NVTX_INCLUDE@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ diff --git a/doc/html/Makefile.in b/doc/html/Makefile.in index ea0e18aacb4..d3e9103668c 100644 --- a/doc/html/Makefile.in +++ b/doc/html/Makefile.in @@ -307,11 +307,18 @@ HDF5_DIR = @HDF5_DIR@ HDF5_LDFLAGS = @HDF5_LDFLAGS@ HDF5_LIBS = @HDF5_LIBS@ HDF5_PREFIX = @HDF5_PREFIX@ +HIPCC = @HIPCC@ +ICPX = @ICPX@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +KOKKOS_CPPFLAGS = @KOKKOS_CPPFLAGS@ +KOKKOS_CXX = @KOKKOS_CXX@ +KOKKOS_CXXFLAGS = @KOKKOS_CXXFLAGS@ +KOKKOS_LDFLAGS = @KOKKOS_LDFLAGS@ +KOKKOS_LIBS = @KOKKOS_LIBS@ LASPACK_INCLUDE = @LASPACK_INCLUDE@ LASPACK_LIB = @LASPACK_LIB@ LD = @LD@ @@ -359,6 +366,7 @@ NODEPRECATEDFLAG = @NODEPRECATEDFLAG@ NOX_INCLUDES = @NOX_INCLUDES@ NOX_LIBS = @NOX_LIBS@ NOX_MAKEFILE_EXPORT = @NOX_MAKEFILE_EXPORT@ +NVCC = @NVCC@ NVTX_INCLUDE = @NVTX_INCLUDE@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ diff --git a/examples/Makefile.in b/examples/Makefile.in index d16d580d3a2..27a8db4d760 100644 --- a/examples/Makefile.in +++ b/examples/Makefile.in @@ -375,11 +375,18 @@ HDF5_DIR = @HDF5_DIR@ HDF5_LDFLAGS = @HDF5_LDFLAGS@ HDF5_LIBS = @HDF5_LIBS@ HDF5_PREFIX = @HDF5_PREFIX@ +HIPCC = @HIPCC@ +ICPX = @ICPX@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +KOKKOS_CPPFLAGS = @KOKKOS_CPPFLAGS@ +KOKKOS_CXX = @KOKKOS_CXX@ +KOKKOS_CXXFLAGS = @KOKKOS_CXXFLAGS@ +KOKKOS_LDFLAGS = @KOKKOS_LDFLAGS@ +KOKKOS_LIBS = @KOKKOS_LIBS@ LASPACK_INCLUDE = @LASPACK_INCLUDE@ LASPACK_LIB = @LASPACK_LIB@ LD = @LD@ @@ -427,6 +434,7 @@ NODEPRECATEDFLAG = @NODEPRECATEDFLAG@ NOX_INCLUDES = @NOX_INCLUDES@ NOX_LIBS = @NOX_LIBS@ NOX_MAKEFILE_EXPORT = @NOX_MAKEFILE_EXPORT@ +NVCC = @NVCC@ NVTX_INCLUDE = @NVTX_INCLUDE@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ diff --git a/examples/adaptivity/adaptivity_ex1/Makefile.in b/examples/adaptivity/adaptivity_ex1/Makefile.in index 156523e9faa..3dc4c77a9dd 100644 --- a/examples/adaptivity/adaptivity_ex1/Makefile.in +++ b/examples/adaptivity/adaptivity_ex1/Makefile.in @@ -465,11 +465,18 @@ HDF5_DIR = @HDF5_DIR@ HDF5_LDFLAGS = @HDF5_LDFLAGS@ HDF5_LIBS = @HDF5_LIBS@ HDF5_PREFIX = @HDF5_PREFIX@ +HIPCC = @HIPCC@ +ICPX = @ICPX@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +KOKKOS_CPPFLAGS = @KOKKOS_CPPFLAGS@ +KOKKOS_CXX = @KOKKOS_CXX@ +KOKKOS_CXXFLAGS = @KOKKOS_CXXFLAGS@ +KOKKOS_LDFLAGS = @KOKKOS_LDFLAGS@ +KOKKOS_LIBS = @KOKKOS_LIBS@ LASPACK_INCLUDE = @LASPACK_INCLUDE@ LASPACK_LIB = @LASPACK_LIB@ LD = @LD@ @@ -517,6 +524,7 @@ NODEPRECATEDFLAG = @NODEPRECATEDFLAG@ NOX_INCLUDES = @NOX_INCLUDES@ NOX_LIBS = @NOX_LIBS@ NOX_MAKEFILE_EXPORT = @NOX_MAKEFILE_EXPORT@ +NVCC = @NVCC@ NVTX_INCLUDE = @NVTX_INCLUDE@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ diff --git a/examples/adaptivity/adaptivity_ex2/Makefile.in b/examples/adaptivity/adaptivity_ex2/Makefile.in index be5308ddd74..04c82fb9137 100644 --- a/examples/adaptivity/adaptivity_ex2/Makefile.in +++ b/examples/adaptivity/adaptivity_ex2/Makefile.in @@ -484,11 +484,18 @@ HDF5_DIR = @HDF5_DIR@ HDF5_LDFLAGS = @HDF5_LDFLAGS@ HDF5_LIBS = @HDF5_LIBS@ HDF5_PREFIX = @HDF5_PREFIX@ +HIPCC = @HIPCC@ +ICPX = @ICPX@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +KOKKOS_CPPFLAGS = @KOKKOS_CPPFLAGS@ +KOKKOS_CXX = @KOKKOS_CXX@ +KOKKOS_CXXFLAGS = @KOKKOS_CXXFLAGS@ +KOKKOS_LDFLAGS = @KOKKOS_LDFLAGS@ +KOKKOS_LIBS = @KOKKOS_LIBS@ LASPACK_INCLUDE = @LASPACK_INCLUDE@ LASPACK_LIB = @LASPACK_LIB@ LD = @LD@ @@ -536,6 +543,7 @@ NODEPRECATEDFLAG = @NODEPRECATEDFLAG@ NOX_INCLUDES = @NOX_INCLUDES@ NOX_LIBS = @NOX_LIBS@ NOX_MAKEFILE_EXPORT = @NOX_MAKEFILE_EXPORT@ +NVCC = @NVCC@ NVTX_INCLUDE = @NVTX_INCLUDE@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ diff --git a/examples/adaptivity/adaptivity_ex3/Makefile.in b/examples/adaptivity/adaptivity_ex3/Makefile.in index 0a64440aa41..7e31802fa14 100644 --- a/examples/adaptivity/adaptivity_ex3/Makefile.in +++ b/examples/adaptivity/adaptivity_ex3/Makefile.in @@ -471,11 +471,18 @@ HDF5_DIR = @HDF5_DIR@ HDF5_LDFLAGS = @HDF5_LDFLAGS@ HDF5_LIBS = @HDF5_LIBS@ HDF5_PREFIX = @HDF5_PREFIX@ +HIPCC = @HIPCC@ +ICPX = @ICPX@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +KOKKOS_CPPFLAGS = @KOKKOS_CPPFLAGS@ +KOKKOS_CXX = @KOKKOS_CXX@ +KOKKOS_CXXFLAGS = @KOKKOS_CXXFLAGS@ +KOKKOS_LDFLAGS = @KOKKOS_LDFLAGS@ +KOKKOS_LIBS = @KOKKOS_LIBS@ LASPACK_INCLUDE = @LASPACK_INCLUDE@ LASPACK_LIB = @LASPACK_LIB@ LD = @LD@ @@ -523,6 +530,7 @@ NODEPRECATEDFLAG = @NODEPRECATEDFLAG@ NOX_INCLUDES = @NOX_INCLUDES@ NOX_LIBS = @NOX_LIBS@ NOX_MAKEFILE_EXPORT = @NOX_MAKEFILE_EXPORT@ +NVCC = @NVCC@ NVTX_INCLUDE = @NVTX_INCLUDE@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ diff --git a/examples/adaptivity/adaptivity_ex4/Makefile.in b/examples/adaptivity/adaptivity_ex4/Makefile.in index b25aca31264..e155bc31268 100644 --- a/examples/adaptivity/adaptivity_ex4/Makefile.in +++ b/examples/adaptivity/adaptivity_ex4/Makefile.in @@ -471,11 +471,18 @@ HDF5_DIR = @HDF5_DIR@ HDF5_LDFLAGS = @HDF5_LDFLAGS@ HDF5_LIBS = @HDF5_LIBS@ HDF5_PREFIX = @HDF5_PREFIX@ +HIPCC = @HIPCC@ +ICPX = @ICPX@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +KOKKOS_CPPFLAGS = @KOKKOS_CPPFLAGS@ +KOKKOS_CXX = @KOKKOS_CXX@ +KOKKOS_CXXFLAGS = @KOKKOS_CXXFLAGS@ +KOKKOS_LDFLAGS = @KOKKOS_LDFLAGS@ +KOKKOS_LIBS = @KOKKOS_LIBS@ LASPACK_INCLUDE = @LASPACK_INCLUDE@ LASPACK_LIB = @LASPACK_LIB@ LD = @LD@ @@ -523,6 +530,7 @@ NODEPRECATEDFLAG = @NODEPRECATEDFLAG@ NOX_INCLUDES = @NOX_INCLUDES@ NOX_LIBS = @NOX_LIBS@ NOX_MAKEFILE_EXPORT = @NOX_MAKEFILE_EXPORT@ +NVCC = @NVCC@ NVTX_INCLUDE = @NVTX_INCLUDE@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ diff --git a/examples/adaptivity/adaptivity_ex5/Makefile.in b/examples/adaptivity/adaptivity_ex5/Makefile.in index b419dc98312..50cfa24eefd 100644 --- a/examples/adaptivity/adaptivity_ex5/Makefile.in +++ b/examples/adaptivity/adaptivity_ex5/Makefile.in @@ -480,11 +480,18 @@ HDF5_DIR = @HDF5_DIR@ HDF5_LDFLAGS = @HDF5_LDFLAGS@ HDF5_LIBS = @HDF5_LIBS@ HDF5_PREFIX = @HDF5_PREFIX@ +HIPCC = @HIPCC@ +ICPX = @ICPX@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +KOKKOS_CPPFLAGS = @KOKKOS_CPPFLAGS@ +KOKKOS_CXX = @KOKKOS_CXX@ +KOKKOS_CXXFLAGS = @KOKKOS_CXXFLAGS@ +KOKKOS_LDFLAGS = @KOKKOS_LDFLAGS@ +KOKKOS_LIBS = @KOKKOS_LIBS@ LASPACK_INCLUDE = @LASPACK_INCLUDE@ LASPACK_LIB = @LASPACK_LIB@ LD = @LD@ @@ -532,6 +539,7 @@ NODEPRECATEDFLAG = @NODEPRECATEDFLAG@ NOX_INCLUDES = @NOX_INCLUDES@ NOX_LIBS = @NOX_LIBS@ NOX_MAKEFILE_EXPORT = @NOX_MAKEFILE_EXPORT@ +NVCC = @NVCC@ NVTX_INCLUDE = @NVTX_INCLUDE@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ diff --git a/examples/adjoints/adjoints_ex1/Makefile.in b/examples/adjoints/adjoints_ex1/Makefile.in index a174eb3b2fe..f658f98c231 100644 --- a/examples/adjoints/adjoints_ex1/Makefile.in +++ b/examples/adjoints/adjoints_ex1/Makefile.in @@ -559,11 +559,18 @@ HDF5_DIR = @HDF5_DIR@ HDF5_LDFLAGS = @HDF5_LDFLAGS@ HDF5_LIBS = @HDF5_LIBS@ HDF5_PREFIX = @HDF5_PREFIX@ +HIPCC = @HIPCC@ +ICPX = @ICPX@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +KOKKOS_CPPFLAGS = @KOKKOS_CPPFLAGS@ +KOKKOS_CXX = @KOKKOS_CXX@ +KOKKOS_CXXFLAGS = @KOKKOS_CXXFLAGS@ +KOKKOS_LDFLAGS = @KOKKOS_LDFLAGS@ +KOKKOS_LIBS = @KOKKOS_LIBS@ LASPACK_INCLUDE = @LASPACK_INCLUDE@ LASPACK_LIB = @LASPACK_LIB@ LD = @LD@ @@ -611,6 +618,7 @@ NODEPRECATEDFLAG = @NODEPRECATEDFLAG@ NOX_INCLUDES = @NOX_INCLUDES@ NOX_LIBS = @NOX_LIBS@ NOX_MAKEFILE_EXPORT = @NOX_MAKEFILE_EXPORT@ +NVCC = @NVCC@ NVTX_INCLUDE = @NVTX_INCLUDE@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ diff --git a/examples/adjoints/adjoints_ex2/Makefile.in b/examples/adjoints/adjoints_ex2/Makefile.in index d0ac7f06aeb..1583e06ba69 100644 --- a/examples/adjoints/adjoints_ex2/Makefile.in +++ b/examples/adjoints/adjoints_ex2/Makefile.in @@ -527,11 +527,18 @@ HDF5_DIR = @HDF5_DIR@ HDF5_LDFLAGS = @HDF5_LDFLAGS@ HDF5_LIBS = @HDF5_LIBS@ HDF5_PREFIX = @HDF5_PREFIX@ +HIPCC = @HIPCC@ +ICPX = @ICPX@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +KOKKOS_CPPFLAGS = @KOKKOS_CPPFLAGS@ +KOKKOS_CXX = @KOKKOS_CXX@ +KOKKOS_CXXFLAGS = @KOKKOS_CXXFLAGS@ +KOKKOS_LDFLAGS = @KOKKOS_LDFLAGS@ +KOKKOS_LIBS = @KOKKOS_LIBS@ LASPACK_INCLUDE = @LASPACK_INCLUDE@ LASPACK_LIB = @LASPACK_LIB@ LD = @LD@ @@ -579,6 +586,7 @@ NODEPRECATEDFLAG = @NODEPRECATEDFLAG@ NOX_INCLUDES = @NOX_INCLUDES@ NOX_LIBS = @NOX_LIBS@ NOX_MAKEFILE_EXPORT = @NOX_MAKEFILE_EXPORT@ +NVCC = @NVCC@ NVTX_INCLUDE = @NVTX_INCLUDE@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ diff --git a/examples/adjoints/adjoints_ex3/Makefile.in b/examples/adjoints/adjoints_ex3/Makefile.in index af52a508f53..8e744ca96ee 100644 --- a/examples/adjoints/adjoints_ex3/Makefile.in +++ b/examples/adjoints/adjoints_ex3/Makefile.in @@ -562,11 +562,18 @@ HDF5_DIR = @HDF5_DIR@ HDF5_LDFLAGS = @HDF5_LDFLAGS@ HDF5_LIBS = @HDF5_LIBS@ HDF5_PREFIX = @HDF5_PREFIX@ +HIPCC = @HIPCC@ +ICPX = @ICPX@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +KOKKOS_CPPFLAGS = @KOKKOS_CPPFLAGS@ +KOKKOS_CXX = @KOKKOS_CXX@ +KOKKOS_CXXFLAGS = @KOKKOS_CXXFLAGS@ +KOKKOS_LDFLAGS = @KOKKOS_LDFLAGS@ +KOKKOS_LIBS = @KOKKOS_LIBS@ LASPACK_INCLUDE = @LASPACK_INCLUDE@ LASPACK_LIB = @LASPACK_LIB@ LD = @LD@ @@ -614,6 +621,7 @@ NODEPRECATEDFLAG = @NODEPRECATEDFLAG@ NOX_INCLUDES = @NOX_INCLUDES@ NOX_LIBS = @NOX_LIBS@ NOX_MAKEFILE_EXPORT = @NOX_MAKEFILE_EXPORT@ +NVCC = @NVCC@ NVTX_INCLUDE = @NVTX_INCLUDE@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ diff --git a/examples/adjoints/adjoints_ex4/Makefile.in b/examples/adjoints/adjoints_ex4/Makefile.in index 6721b984eb7..8ff3dceb0f3 100644 --- a/examples/adjoints/adjoints_ex4/Makefile.in +++ b/examples/adjoints/adjoints_ex4/Makefile.in @@ -562,11 +562,18 @@ HDF5_DIR = @HDF5_DIR@ HDF5_LDFLAGS = @HDF5_LDFLAGS@ HDF5_LIBS = @HDF5_LIBS@ HDF5_PREFIX = @HDF5_PREFIX@ +HIPCC = @HIPCC@ +ICPX = @ICPX@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +KOKKOS_CPPFLAGS = @KOKKOS_CPPFLAGS@ +KOKKOS_CXX = @KOKKOS_CXX@ +KOKKOS_CXXFLAGS = @KOKKOS_CXXFLAGS@ +KOKKOS_LDFLAGS = @KOKKOS_LDFLAGS@ +KOKKOS_LIBS = @KOKKOS_LIBS@ LASPACK_INCLUDE = @LASPACK_INCLUDE@ LASPACK_LIB = @LASPACK_LIB@ LD = @LD@ @@ -614,6 +621,7 @@ NODEPRECATEDFLAG = @NODEPRECATEDFLAG@ NOX_INCLUDES = @NOX_INCLUDES@ NOX_LIBS = @NOX_LIBS@ NOX_MAKEFILE_EXPORT = @NOX_MAKEFILE_EXPORT@ +NVCC = @NVCC@ NVTX_INCLUDE = @NVTX_INCLUDE@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ diff --git a/examples/adjoints/adjoints_ex5/Makefile.in b/examples/adjoints/adjoints_ex5/Makefile.in index 5dcc545ab49..f4bdc7d11ae 100644 --- a/examples/adjoints/adjoints_ex5/Makefile.in +++ b/examples/adjoints/adjoints_ex5/Makefile.in @@ -562,11 +562,18 @@ HDF5_DIR = @HDF5_DIR@ HDF5_LDFLAGS = @HDF5_LDFLAGS@ HDF5_LIBS = @HDF5_LIBS@ HDF5_PREFIX = @HDF5_PREFIX@ +HIPCC = @HIPCC@ +ICPX = @ICPX@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +KOKKOS_CPPFLAGS = @KOKKOS_CPPFLAGS@ +KOKKOS_CXX = @KOKKOS_CXX@ +KOKKOS_CXXFLAGS = @KOKKOS_CXXFLAGS@ +KOKKOS_LDFLAGS = @KOKKOS_LDFLAGS@ +KOKKOS_LIBS = @KOKKOS_LIBS@ LASPACK_INCLUDE = @LASPACK_INCLUDE@ LASPACK_LIB = @LASPACK_LIB@ LD = @LD@ @@ -614,6 +621,7 @@ NODEPRECATEDFLAG = @NODEPRECATEDFLAG@ NOX_INCLUDES = @NOX_INCLUDES@ NOX_LIBS = @NOX_LIBS@ NOX_MAKEFILE_EXPORT = @NOX_MAKEFILE_EXPORT@ +NVCC = @NVCC@ NVTX_INCLUDE = @NVTX_INCLUDE@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ diff --git a/examples/adjoints/adjoints_ex6/Makefile.in b/examples/adjoints/adjoints_ex6/Makefile.in index f8568140952..43ada1d6034 100644 --- a/examples/adjoints/adjoints_ex6/Makefile.in +++ b/examples/adjoints/adjoints_ex6/Makefile.in @@ -527,11 +527,18 @@ HDF5_DIR = @HDF5_DIR@ HDF5_LDFLAGS = @HDF5_LDFLAGS@ HDF5_LIBS = @HDF5_LIBS@ HDF5_PREFIX = @HDF5_PREFIX@ +HIPCC = @HIPCC@ +ICPX = @ICPX@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +KOKKOS_CPPFLAGS = @KOKKOS_CPPFLAGS@ +KOKKOS_CXX = @KOKKOS_CXX@ +KOKKOS_CXXFLAGS = @KOKKOS_CXXFLAGS@ +KOKKOS_LDFLAGS = @KOKKOS_LDFLAGS@ +KOKKOS_LIBS = @KOKKOS_LIBS@ LASPACK_INCLUDE = @LASPACK_INCLUDE@ LASPACK_LIB = @LASPACK_LIB@ LD = @LD@ @@ -579,6 +586,7 @@ NODEPRECATEDFLAG = @NODEPRECATEDFLAG@ NOX_INCLUDES = @NOX_INCLUDES@ NOX_LIBS = @NOX_LIBS@ NOX_MAKEFILE_EXPORT = @NOX_MAKEFILE_EXPORT@ +NVCC = @NVCC@ NVTX_INCLUDE = @NVTX_INCLUDE@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ diff --git a/examples/adjoints/adjoints_ex7/Makefile.in b/examples/adjoints/adjoints_ex7/Makefile.in index 793d69f1149..c807bd13682 100644 --- a/examples/adjoints/adjoints_ex7/Makefile.in +++ b/examples/adjoints/adjoints_ex7/Makefile.in @@ -577,11 +577,18 @@ HDF5_DIR = @HDF5_DIR@ HDF5_LDFLAGS = @HDF5_LDFLAGS@ HDF5_LIBS = @HDF5_LIBS@ HDF5_PREFIX = @HDF5_PREFIX@ +HIPCC = @HIPCC@ +ICPX = @ICPX@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +KOKKOS_CPPFLAGS = @KOKKOS_CPPFLAGS@ +KOKKOS_CXX = @KOKKOS_CXX@ +KOKKOS_CXXFLAGS = @KOKKOS_CXXFLAGS@ +KOKKOS_LDFLAGS = @KOKKOS_LDFLAGS@ +KOKKOS_LIBS = @KOKKOS_LIBS@ LASPACK_INCLUDE = @LASPACK_INCLUDE@ LASPACK_LIB = @LASPACK_LIB@ LD = @LD@ @@ -629,6 +636,7 @@ NODEPRECATEDFLAG = @NODEPRECATEDFLAG@ NOX_INCLUDES = @NOX_INCLUDES@ NOX_LIBS = @NOX_LIBS@ NOX_MAKEFILE_EXPORT = @NOX_MAKEFILE_EXPORT@ +NVCC = @NVCC@ NVTX_INCLUDE = @NVTX_INCLUDE@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ diff --git a/examples/eigenproblems/eigenproblems_ex1/Makefile.in b/examples/eigenproblems/eigenproblems_ex1/Makefile.in index a23b7ec4684..b2aeeba0c70 100644 --- a/examples/eigenproblems/eigenproblems_ex1/Makefile.in +++ b/examples/eigenproblems/eigenproblems_ex1/Makefile.in @@ -465,11 +465,18 @@ HDF5_DIR = @HDF5_DIR@ HDF5_LDFLAGS = @HDF5_LDFLAGS@ HDF5_LIBS = @HDF5_LIBS@ HDF5_PREFIX = @HDF5_PREFIX@ +HIPCC = @HIPCC@ +ICPX = @ICPX@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +KOKKOS_CPPFLAGS = @KOKKOS_CPPFLAGS@ +KOKKOS_CXX = @KOKKOS_CXX@ +KOKKOS_CXXFLAGS = @KOKKOS_CXXFLAGS@ +KOKKOS_LDFLAGS = @KOKKOS_LDFLAGS@ +KOKKOS_LIBS = @KOKKOS_LIBS@ LASPACK_INCLUDE = @LASPACK_INCLUDE@ LASPACK_LIB = @LASPACK_LIB@ LD = @LD@ @@ -517,6 +524,7 @@ NODEPRECATEDFLAG = @NODEPRECATEDFLAG@ NOX_INCLUDES = @NOX_INCLUDES@ NOX_LIBS = @NOX_LIBS@ NOX_MAKEFILE_EXPORT = @NOX_MAKEFILE_EXPORT@ +NVCC = @NVCC@ NVTX_INCLUDE = @NVTX_INCLUDE@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ diff --git a/examples/eigenproblems/eigenproblems_ex2/Makefile.in b/examples/eigenproblems/eigenproblems_ex2/Makefile.in index 5ef2c3bc3ec..e4584dfbd8f 100644 --- a/examples/eigenproblems/eigenproblems_ex2/Makefile.in +++ b/examples/eigenproblems/eigenproblems_ex2/Makefile.in @@ -465,11 +465,18 @@ HDF5_DIR = @HDF5_DIR@ HDF5_LDFLAGS = @HDF5_LDFLAGS@ HDF5_LIBS = @HDF5_LIBS@ HDF5_PREFIX = @HDF5_PREFIX@ +HIPCC = @HIPCC@ +ICPX = @ICPX@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +KOKKOS_CPPFLAGS = @KOKKOS_CPPFLAGS@ +KOKKOS_CXX = @KOKKOS_CXX@ +KOKKOS_CXXFLAGS = @KOKKOS_CXXFLAGS@ +KOKKOS_LDFLAGS = @KOKKOS_LDFLAGS@ +KOKKOS_LIBS = @KOKKOS_LIBS@ LASPACK_INCLUDE = @LASPACK_INCLUDE@ LASPACK_LIB = @LASPACK_LIB@ LD = @LD@ @@ -517,6 +524,7 @@ NODEPRECATEDFLAG = @NODEPRECATEDFLAG@ NOX_INCLUDES = @NOX_INCLUDES@ NOX_LIBS = @NOX_LIBS@ NOX_MAKEFILE_EXPORT = @NOX_MAKEFILE_EXPORT@ +NVCC = @NVCC@ NVTX_INCLUDE = @NVTX_INCLUDE@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ diff --git a/examples/eigenproblems/eigenproblems_ex3/Makefile.in b/examples/eigenproblems/eigenproblems_ex3/Makefile.in index 4a060dc7358..1bb7ca59f97 100644 --- a/examples/eigenproblems/eigenproblems_ex3/Makefile.in +++ b/examples/eigenproblems/eigenproblems_ex3/Makefile.in @@ -471,11 +471,18 @@ HDF5_DIR = @HDF5_DIR@ HDF5_LDFLAGS = @HDF5_LDFLAGS@ HDF5_LIBS = @HDF5_LIBS@ HDF5_PREFIX = @HDF5_PREFIX@ +HIPCC = @HIPCC@ +ICPX = @ICPX@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +KOKKOS_CPPFLAGS = @KOKKOS_CPPFLAGS@ +KOKKOS_CXX = @KOKKOS_CXX@ +KOKKOS_CXXFLAGS = @KOKKOS_CXXFLAGS@ +KOKKOS_LDFLAGS = @KOKKOS_LDFLAGS@ +KOKKOS_LIBS = @KOKKOS_LIBS@ LASPACK_INCLUDE = @LASPACK_INCLUDE@ LASPACK_LIB = @LASPACK_LIB@ LD = @LD@ @@ -523,6 +530,7 @@ NODEPRECATEDFLAG = @NODEPRECATEDFLAG@ NOX_INCLUDES = @NOX_INCLUDES@ NOX_LIBS = @NOX_LIBS@ NOX_MAKEFILE_EXPORT = @NOX_MAKEFILE_EXPORT@ +NVCC = @NVCC@ NVTX_INCLUDE = @NVTX_INCLUDE@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ diff --git a/examples/eigenproblems/eigenproblems_ex4/Makefile.in b/examples/eigenproblems/eigenproblems_ex4/Makefile.in index eb92f3d91f8..becef7ee553 100644 --- a/examples/eigenproblems/eigenproblems_ex4/Makefile.in +++ b/examples/eigenproblems/eigenproblems_ex4/Makefile.in @@ -465,11 +465,18 @@ HDF5_DIR = @HDF5_DIR@ HDF5_LDFLAGS = @HDF5_LDFLAGS@ HDF5_LIBS = @HDF5_LIBS@ HDF5_PREFIX = @HDF5_PREFIX@ +HIPCC = @HIPCC@ +ICPX = @ICPX@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +KOKKOS_CPPFLAGS = @KOKKOS_CPPFLAGS@ +KOKKOS_CXX = @KOKKOS_CXX@ +KOKKOS_CXXFLAGS = @KOKKOS_CXXFLAGS@ +KOKKOS_LDFLAGS = @KOKKOS_LDFLAGS@ +KOKKOS_LIBS = @KOKKOS_LIBS@ LASPACK_INCLUDE = @LASPACK_INCLUDE@ LASPACK_LIB = @LASPACK_LIB@ LD = @LD@ @@ -517,6 +524,7 @@ NODEPRECATEDFLAG = @NODEPRECATEDFLAG@ NOX_INCLUDES = @NOX_INCLUDES@ NOX_LIBS = @NOX_LIBS@ NOX_MAKEFILE_EXPORT = @NOX_MAKEFILE_EXPORT@ +NVCC = @NVCC@ NVTX_INCLUDE = @NVTX_INCLUDE@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ diff --git a/examples/fem_system/fem_system_ex1/Makefile.in b/examples/fem_system/fem_system_ex1/Makefile.in index 47f9d7e206f..ab49a448096 100644 --- a/examples/fem_system/fem_system_ex1/Makefile.in +++ b/examples/fem_system/fem_system_ex1/Makefile.in @@ -499,11 +499,18 @@ HDF5_DIR = @HDF5_DIR@ HDF5_LDFLAGS = @HDF5_LDFLAGS@ HDF5_LIBS = @HDF5_LIBS@ HDF5_PREFIX = @HDF5_PREFIX@ +HIPCC = @HIPCC@ +ICPX = @ICPX@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +KOKKOS_CPPFLAGS = @KOKKOS_CPPFLAGS@ +KOKKOS_CXX = @KOKKOS_CXX@ +KOKKOS_CXXFLAGS = @KOKKOS_CXXFLAGS@ +KOKKOS_LDFLAGS = @KOKKOS_LDFLAGS@ +KOKKOS_LIBS = @KOKKOS_LIBS@ LASPACK_INCLUDE = @LASPACK_INCLUDE@ LASPACK_LIB = @LASPACK_LIB@ LD = @LD@ @@ -551,6 +558,7 @@ NODEPRECATEDFLAG = @NODEPRECATEDFLAG@ NOX_INCLUDES = @NOX_INCLUDES@ NOX_LIBS = @NOX_LIBS@ NOX_MAKEFILE_EXPORT = @NOX_MAKEFILE_EXPORT@ +NVCC = @NVCC@ NVTX_INCLUDE = @NVTX_INCLUDE@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ diff --git a/examples/fem_system/fem_system_ex2/Makefile.in b/examples/fem_system/fem_system_ex2/Makefile.in index d1357da5ca8..5990a9ddcc7 100644 --- a/examples/fem_system/fem_system_ex2/Makefile.in +++ b/examples/fem_system/fem_system_ex2/Makefile.in @@ -514,11 +514,18 @@ HDF5_DIR = @HDF5_DIR@ HDF5_LDFLAGS = @HDF5_LDFLAGS@ HDF5_LIBS = @HDF5_LIBS@ HDF5_PREFIX = @HDF5_PREFIX@ +HIPCC = @HIPCC@ +ICPX = @ICPX@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +KOKKOS_CPPFLAGS = @KOKKOS_CPPFLAGS@ +KOKKOS_CXX = @KOKKOS_CXX@ +KOKKOS_CXXFLAGS = @KOKKOS_CXXFLAGS@ +KOKKOS_LDFLAGS = @KOKKOS_LDFLAGS@ +KOKKOS_LIBS = @KOKKOS_LIBS@ LASPACK_INCLUDE = @LASPACK_INCLUDE@ LASPACK_LIB = @LASPACK_LIB@ LD = @LD@ @@ -566,6 +573,7 @@ NODEPRECATEDFLAG = @NODEPRECATEDFLAG@ NOX_INCLUDES = @NOX_INCLUDES@ NOX_LIBS = @NOX_LIBS@ NOX_MAKEFILE_EXPORT = @NOX_MAKEFILE_EXPORT@ +NVCC = @NVCC@ NVTX_INCLUDE = @NVTX_INCLUDE@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ diff --git a/examples/fem_system/fem_system_ex3/Makefile.in b/examples/fem_system/fem_system_ex3/Makefile.in index 6783edf17bd..614048a0e48 100644 --- a/examples/fem_system/fem_system_ex3/Makefile.in +++ b/examples/fem_system/fem_system_ex3/Makefile.in @@ -499,11 +499,18 @@ HDF5_DIR = @HDF5_DIR@ HDF5_LDFLAGS = @HDF5_LDFLAGS@ HDF5_LIBS = @HDF5_LIBS@ HDF5_PREFIX = @HDF5_PREFIX@ +HIPCC = @HIPCC@ +ICPX = @ICPX@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +KOKKOS_CPPFLAGS = @KOKKOS_CPPFLAGS@ +KOKKOS_CXX = @KOKKOS_CXX@ +KOKKOS_CXXFLAGS = @KOKKOS_CXXFLAGS@ +KOKKOS_LDFLAGS = @KOKKOS_LDFLAGS@ +KOKKOS_LIBS = @KOKKOS_LIBS@ LASPACK_INCLUDE = @LASPACK_INCLUDE@ LASPACK_LIB = @LASPACK_LIB@ LD = @LD@ @@ -551,6 +558,7 @@ NODEPRECATEDFLAG = @NODEPRECATEDFLAG@ NOX_INCLUDES = @NOX_INCLUDES@ NOX_LIBS = @NOX_LIBS@ NOX_MAKEFILE_EXPORT = @NOX_MAKEFILE_EXPORT@ +NVCC = @NVCC@ NVTX_INCLUDE = @NVTX_INCLUDE@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ diff --git a/examples/fem_system/fem_system_ex4/Makefile.in b/examples/fem_system/fem_system_ex4/Makefile.in index 8e6296abb4e..1a31f0ddab4 100644 --- a/examples/fem_system/fem_system_ex4/Makefile.in +++ b/examples/fem_system/fem_system_ex4/Makefile.in @@ -499,11 +499,18 @@ HDF5_DIR = @HDF5_DIR@ HDF5_LDFLAGS = @HDF5_LDFLAGS@ HDF5_LIBS = @HDF5_LIBS@ HDF5_PREFIX = @HDF5_PREFIX@ +HIPCC = @HIPCC@ +ICPX = @ICPX@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +KOKKOS_CPPFLAGS = @KOKKOS_CPPFLAGS@ +KOKKOS_CXX = @KOKKOS_CXX@ +KOKKOS_CXXFLAGS = @KOKKOS_CXXFLAGS@ +KOKKOS_LDFLAGS = @KOKKOS_LDFLAGS@ +KOKKOS_LIBS = @KOKKOS_LIBS@ LASPACK_INCLUDE = @LASPACK_INCLUDE@ LASPACK_LIB = @LASPACK_LIB@ LD = @LD@ @@ -551,6 +558,7 @@ NODEPRECATEDFLAG = @NODEPRECATEDFLAG@ NOX_INCLUDES = @NOX_INCLUDES@ NOX_LIBS = @NOX_LIBS@ NOX_MAKEFILE_EXPORT = @NOX_MAKEFILE_EXPORT@ +NVCC = @NVCC@ NVTX_INCLUDE = @NVTX_INCLUDE@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ diff --git a/examples/fem_system/fem_system_ex5/Makefile.in b/examples/fem_system/fem_system_ex5/Makefile.in index 00224c8d1c2..2526a04fe16 100644 --- a/examples/fem_system/fem_system_ex5/Makefile.in +++ b/examples/fem_system/fem_system_ex5/Makefile.in @@ -514,11 +514,18 @@ HDF5_DIR = @HDF5_DIR@ HDF5_LDFLAGS = @HDF5_LDFLAGS@ HDF5_LIBS = @HDF5_LIBS@ HDF5_PREFIX = @HDF5_PREFIX@ +HIPCC = @HIPCC@ +ICPX = @ICPX@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +KOKKOS_CPPFLAGS = @KOKKOS_CPPFLAGS@ +KOKKOS_CXX = @KOKKOS_CXX@ +KOKKOS_CXXFLAGS = @KOKKOS_CXXFLAGS@ +KOKKOS_LDFLAGS = @KOKKOS_LDFLAGS@ +KOKKOS_LIBS = @KOKKOS_LIBS@ LASPACK_INCLUDE = @LASPACK_INCLUDE@ LASPACK_LIB = @LASPACK_LIB@ LD = @LD@ @@ -566,6 +573,7 @@ NODEPRECATEDFLAG = @NODEPRECATEDFLAG@ NOX_INCLUDES = @NOX_INCLUDES@ NOX_LIBS = @NOX_LIBS@ NOX_MAKEFILE_EXPORT = @NOX_MAKEFILE_EXPORT@ +NVCC = @NVCC@ NVTX_INCLUDE = @NVTX_INCLUDE@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ diff --git a/examples/introduction/introduction_ex1/Makefile.in b/examples/introduction/introduction_ex1/Makefile.in index 59920135dfb..13087163eff 100644 --- a/examples/introduction/introduction_ex1/Makefile.in +++ b/examples/introduction/introduction_ex1/Makefile.in @@ -465,11 +465,18 @@ HDF5_DIR = @HDF5_DIR@ HDF5_LDFLAGS = @HDF5_LDFLAGS@ HDF5_LIBS = @HDF5_LIBS@ HDF5_PREFIX = @HDF5_PREFIX@ +HIPCC = @HIPCC@ +ICPX = @ICPX@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +KOKKOS_CPPFLAGS = @KOKKOS_CPPFLAGS@ +KOKKOS_CXX = @KOKKOS_CXX@ +KOKKOS_CXXFLAGS = @KOKKOS_CXXFLAGS@ +KOKKOS_LDFLAGS = @KOKKOS_LDFLAGS@ +KOKKOS_LIBS = @KOKKOS_LIBS@ LASPACK_INCLUDE = @LASPACK_INCLUDE@ LASPACK_LIB = @LASPACK_LIB@ LD = @LD@ @@ -517,6 +524,7 @@ NODEPRECATEDFLAG = @NODEPRECATEDFLAG@ NOX_INCLUDES = @NOX_INCLUDES@ NOX_LIBS = @NOX_LIBS@ NOX_MAKEFILE_EXPORT = @NOX_MAKEFILE_EXPORT@ +NVCC = @NVCC@ NVTX_INCLUDE = @NVTX_INCLUDE@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ diff --git a/examples/introduction/introduction_ex2/Makefile.in b/examples/introduction/introduction_ex2/Makefile.in index 4168b619aa4..5e11b336ef9 100644 --- a/examples/introduction/introduction_ex2/Makefile.in +++ b/examples/introduction/introduction_ex2/Makefile.in @@ -465,11 +465,18 @@ HDF5_DIR = @HDF5_DIR@ HDF5_LDFLAGS = @HDF5_LDFLAGS@ HDF5_LIBS = @HDF5_LIBS@ HDF5_PREFIX = @HDF5_PREFIX@ +HIPCC = @HIPCC@ +ICPX = @ICPX@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +KOKKOS_CPPFLAGS = @KOKKOS_CPPFLAGS@ +KOKKOS_CXX = @KOKKOS_CXX@ +KOKKOS_CXXFLAGS = @KOKKOS_CXXFLAGS@ +KOKKOS_LDFLAGS = @KOKKOS_LDFLAGS@ +KOKKOS_LIBS = @KOKKOS_LIBS@ LASPACK_INCLUDE = @LASPACK_INCLUDE@ LASPACK_LIB = @LASPACK_LIB@ LD = @LD@ @@ -517,6 +524,7 @@ NODEPRECATEDFLAG = @NODEPRECATEDFLAG@ NOX_INCLUDES = @NOX_INCLUDES@ NOX_LIBS = @NOX_LIBS@ NOX_MAKEFILE_EXPORT = @NOX_MAKEFILE_EXPORT@ +NVCC = @NVCC@ NVTX_INCLUDE = @NVTX_INCLUDE@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ diff --git a/examples/introduction/introduction_ex3/Makefile.in b/examples/introduction/introduction_ex3/Makefile.in index 859921ed0fa..bb24117c806 100644 --- a/examples/introduction/introduction_ex3/Makefile.in +++ b/examples/introduction/introduction_ex3/Makefile.in @@ -480,11 +480,18 @@ HDF5_DIR = @HDF5_DIR@ HDF5_LDFLAGS = @HDF5_LDFLAGS@ HDF5_LIBS = @HDF5_LIBS@ HDF5_PREFIX = @HDF5_PREFIX@ +HIPCC = @HIPCC@ +ICPX = @ICPX@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +KOKKOS_CPPFLAGS = @KOKKOS_CPPFLAGS@ +KOKKOS_CXX = @KOKKOS_CXX@ +KOKKOS_CXXFLAGS = @KOKKOS_CXXFLAGS@ +KOKKOS_LDFLAGS = @KOKKOS_LDFLAGS@ +KOKKOS_LIBS = @KOKKOS_LIBS@ LASPACK_INCLUDE = @LASPACK_INCLUDE@ LASPACK_LIB = @LASPACK_LIB@ LD = @LD@ @@ -532,6 +539,7 @@ NODEPRECATEDFLAG = @NODEPRECATEDFLAG@ NOX_INCLUDES = @NOX_INCLUDES@ NOX_LIBS = @NOX_LIBS@ NOX_MAKEFILE_EXPORT = @NOX_MAKEFILE_EXPORT@ +NVCC = @NVCC@ NVTX_INCLUDE = @NVTX_INCLUDE@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ diff --git a/examples/introduction/introduction_ex4/Makefile.in b/examples/introduction/introduction_ex4/Makefile.in index 3572fea8ef5..efdd5b9b127 100644 --- a/examples/introduction/introduction_ex4/Makefile.in +++ b/examples/introduction/introduction_ex4/Makefile.in @@ -480,11 +480,18 @@ HDF5_DIR = @HDF5_DIR@ HDF5_LDFLAGS = @HDF5_LDFLAGS@ HDF5_LIBS = @HDF5_LIBS@ HDF5_PREFIX = @HDF5_PREFIX@ +HIPCC = @HIPCC@ +ICPX = @ICPX@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +KOKKOS_CPPFLAGS = @KOKKOS_CPPFLAGS@ +KOKKOS_CXX = @KOKKOS_CXX@ +KOKKOS_CXXFLAGS = @KOKKOS_CXXFLAGS@ +KOKKOS_LDFLAGS = @KOKKOS_LDFLAGS@ +KOKKOS_LIBS = @KOKKOS_LIBS@ LASPACK_INCLUDE = @LASPACK_INCLUDE@ LASPACK_LIB = @LASPACK_LIB@ LD = @LD@ @@ -532,6 +539,7 @@ NODEPRECATEDFLAG = @NODEPRECATEDFLAG@ NOX_INCLUDES = @NOX_INCLUDES@ NOX_LIBS = @NOX_LIBS@ NOX_MAKEFILE_EXPORT = @NOX_MAKEFILE_EXPORT@ +NVCC = @NVCC@ NVTX_INCLUDE = @NVTX_INCLUDE@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ diff --git a/examples/introduction/introduction_ex5/Makefile.in b/examples/introduction/introduction_ex5/Makefile.in index 3ae3f4020fe..b08a51822e9 100644 --- a/examples/introduction/introduction_ex5/Makefile.in +++ b/examples/introduction/introduction_ex5/Makefile.in @@ -480,11 +480,18 @@ HDF5_DIR = @HDF5_DIR@ HDF5_LDFLAGS = @HDF5_LDFLAGS@ HDF5_LIBS = @HDF5_LIBS@ HDF5_PREFIX = @HDF5_PREFIX@ +HIPCC = @HIPCC@ +ICPX = @ICPX@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +KOKKOS_CPPFLAGS = @KOKKOS_CPPFLAGS@ +KOKKOS_CXX = @KOKKOS_CXX@ +KOKKOS_CXXFLAGS = @KOKKOS_CXXFLAGS@ +KOKKOS_LDFLAGS = @KOKKOS_LDFLAGS@ +KOKKOS_LIBS = @KOKKOS_LIBS@ LASPACK_INCLUDE = @LASPACK_INCLUDE@ LASPACK_LIB = @LASPACK_LIB@ LD = @LD@ @@ -532,6 +539,7 @@ NODEPRECATEDFLAG = @NODEPRECATEDFLAG@ NOX_INCLUDES = @NOX_INCLUDES@ NOX_LIBS = @NOX_LIBS@ NOX_MAKEFILE_EXPORT = @NOX_MAKEFILE_EXPORT@ +NVCC = @NVCC@ NVTX_INCLUDE = @NVTX_INCLUDE@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ diff --git a/examples/miscellaneous/miscellaneous_ex1/Makefile.in b/examples/miscellaneous/miscellaneous_ex1/Makefile.in index d0de4bad619..fa1d6604c10 100644 --- a/examples/miscellaneous/miscellaneous_ex1/Makefile.in +++ b/examples/miscellaneous/miscellaneous_ex1/Makefile.in @@ -465,11 +465,18 @@ HDF5_DIR = @HDF5_DIR@ HDF5_LDFLAGS = @HDF5_LDFLAGS@ HDF5_LIBS = @HDF5_LIBS@ HDF5_PREFIX = @HDF5_PREFIX@ +HIPCC = @HIPCC@ +ICPX = @ICPX@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +KOKKOS_CPPFLAGS = @KOKKOS_CPPFLAGS@ +KOKKOS_CXX = @KOKKOS_CXX@ +KOKKOS_CXXFLAGS = @KOKKOS_CXXFLAGS@ +KOKKOS_LDFLAGS = @KOKKOS_LDFLAGS@ +KOKKOS_LIBS = @KOKKOS_LIBS@ LASPACK_INCLUDE = @LASPACK_INCLUDE@ LASPACK_LIB = @LASPACK_LIB@ LD = @LD@ @@ -517,6 +524,7 @@ NODEPRECATEDFLAG = @NODEPRECATEDFLAG@ NOX_INCLUDES = @NOX_INCLUDES@ NOX_LIBS = @NOX_LIBS@ NOX_MAKEFILE_EXPORT = @NOX_MAKEFILE_EXPORT@ +NVCC = @NVCC@ NVTX_INCLUDE = @NVTX_INCLUDE@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ diff --git a/examples/miscellaneous/miscellaneous_ex10/Makefile.in b/examples/miscellaneous/miscellaneous_ex10/Makefile.in index 1afb2f88961..4ceaf8ccf94 100644 --- a/examples/miscellaneous/miscellaneous_ex10/Makefile.in +++ b/examples/miscellaneous/miscellaneous_ex10/Makefile.in @@ -465,11 +465,18 @@ HDF5_DIR = @HDF5_DIR@ HDF5_LDFLAGS = @HDF5_LDFLAGS@ HDF5_LIBS = @HDF5_LIBS@ HDF5_PREFIX = @HDF5_PREFIX@ +HIPCC = @HIPCC@ +ICPX = @ICPX@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +KOKKOS_CPPFLAGS = @KOKKOS_CPPFLAGS@ +KOKKOS_CXX = @KOKKOS_CXX@ +KOKKOS_CXXFLAGS = @KOKKOS_CXXFLAGS@ +KOKKOS_LDFLAGS = @KOKKOS_LDFLAGS@ +KOKKOS_LIBS = @KOKKOS_LIBS@ LASPACK_INCLUDE = @LASPACK_INCLUDE@ LASPACK_LIB = @LASPACK_LIB@ LD = @LD@ @@ -517,6 +524,7 @@ NODEPRECATEDFLAG = @NODEPRECATEDFLAG@ NOX_INCLUDES = @NOX_INCLUDES@ NOX_LIBS = @NOX_LIBS@ NOX_MAKEFILE_EXPORT = @NOX_MAKEFILE_EXPORT@ +NVCC = @NVCC@ NVTX_INCLUDE = @NVTX_INCLUDE@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ diff --git a/examples/miscellaneous/miscellaneous_ex11/Makefile.in b/examples/miscellaneous/miscellaneous_ex11/Makefile.in index de80da2aab8..e36b21636b2 100644 --- a/examples/miscellaneous/miscellaneous_ex11/Makefile.in +++ b/examples/miscellaneous/miscellaneous_ex11/Makefile.in @@ -471,11 +471,18 @@ HDF5_DIR = @HDF5_DIR@ HDF5_LDFLAGS = @HDF5_LDFLAGS@ HDF5_LIBS = @HDF5_LIBS@ HDF5_PREFIX = @HDF5_PREFIX@ +HIPCC = @HIPCC@ +ICPX = @ICPX@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +KOKKOS_CPPFLAGS = @KOKKOS_CPPFLAGS@ +KOKKOS_CXX = @KOKKOS_CXX@ +KOKKOS_CXXFLAGS = @KOKKOS_CXXFLAGS@ +KOKKOS_LDFLAGS = @KOKKOS_LDFLAGS@ +KOKKOS_LIBS = @KOKKOS_LIBS@ LASPACK_INCLUDE = @LASPACK_INCLUDE@ LASPACK_LIB = @LASPACK_LIB@ LD = @LD@ @@ -523,6 +530,7 @@ NODEPRECATEDFLAG = @NODEPRECATEDFLAG@ NOX_INCLUDES = @NOX_INCLUDES@ NOX_LIBS = @NOX_LIBS@ NOX_MAKEFILE_EXPORT = @NOX_MAKEFILE_EXPORT@ +NVCC = @NVCC@ NVTX_INCLUDE = @NVTX_INCLUDE@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ diff --git a/examples/miscellaneous/miscellaneous_ex12/Makefile.in b/examples/miscellaneous/miscellaneous_ex12/Makefile.in index 99775b9b0b9..2c4c4fc193d 100644 --- a/examples/miscellaneous/miscellaneous_ex12/Makefile.in +++ b/examples/miscellaneous/miscellaneous_ex12/Makefile.in @@ -471,11 +471,18 @@ HDF5_DIR = @HDF5_DIR@ HDF5_LDFLAGS = @HDF5_LDFLAGS@ HDF5_LIBS = @HDF5_LIBS@ HDF5_PREFIX = @HDF5_PREFIX@ +HIPCC = @HIPCC@ +ICPX = @ICPX@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +KOKKOS_CPPFLAGS = @KOKKOS_CPPFLAGS@ +KOKKOS_CXX = @KOKKOS_CXX@ +KOKKOS_CXXFLAGS = @KOKKOS_CXXFLAGS@ +KOKKOS_LDFLAGS = @KOKKOS_LDFLAGS@ +KOKKOS_LIBS = @KOKKOS_LIBS@ LASPACK_INCLUDE = @LASPACK_INCLUDE@ LASPACK_LIB = @LASPACK_LIB@ LD = @LD@ @@ -523,6 +530,7 @@ NODEPRECATEDFLAG = @NODEPRECATEDFLAG@ NOX_INCLUDES = @NOX_INCLUDES@ NOX_LIBS = @NOX_LIBS@ NOX_MAKEFILE_EXPORT = @NOX_MAKEFILE_EXPORT@ +NVCC = @NVCC@ NVTX_INCLUDE = @NVTX_INCLUDE@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ diff --git a/examples/miscellaneous/miscellaneous_ex13/Makefile.in b/examples/miscellaneous/miscellaneous_ex13/Makefile.in index d6f6a103170..4f0080367ed 100644 --- a/examples/miscellaneous/miscellaneous_ex13/Makefile.in +++ b/examples/miscellaneous/miscellaneous_ex13/Makefile.in @@ -471,11 +471,18 @@ HDF5_DIR = @HDF5_DIR@ HDF5_LDFLAGS = @HDF5_LDFLAGS@ HDF5_LIBS = @HDF5_LIBS@ HDF5_PREFIX = @HDF5_PREFIX@ +HIPCC = @HIPCC@ +ICPX = @ICPX@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +KOKKOS_CPPFLAGS = @KOKKOS_CPPFLAGS@ +KOKKOS_CXX = @KOKKOS_CXX@ +KOKKOS_CXXFLAGS = @KOKKOS_CXXFLAGS@ +KOKKOS_LDFLAGS = @KOKKOS_LDFLAGS@ +KOKKOS_LIBS = @KOKKOS_LIBS@ LASPACK_INCLUDE = @LASPACK_INCLUDE@ LASPACK_LIB = @LASPACK_LIB@ LD = @LD@ @@ -523,6 +530,7 @@ NODEPRECATEDFLAG = @NODEPRECATEDFLAG@ NOX_INCLUDES = @NOX_INCLUDES@ NOX_LIBS = @NOX_LIBS@ NOX_MAKEFILE_EXPORT = @NOX_MAKEFILE_EXPORT@ +NVCC = @NVCC@ NVTX_INCLUDE = @NVTX_INCLUDE@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ diff --git a/examples/miscellaneous/miscellaneous_ex14/Makefile.in b/examples/miscellaneous/miscellaneous_ex14/Makefile.in index feb36eea1f3..768948775af 100644 --- a/examples/miscellaneous/miscellaneous_ex14/Makefile.in +++ b/examples/miscellaneous/miscellaneous_ex14/Makefile.in @@ -465,11 +465,18 @@ HDF5_DIR = @HDF5_DIR@ HDF5_LDFLAGS = @HDF5_LDFLAGS@ HDF5_LIBS = @HDF5_LIBS@ HDF5_PREFIX = @HDF5_PREFIX@ +HIPCC = @HIPCC@ +ICPX = @ICPX@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +KOKKOS_CPPFLAGS = @KOKKOS_CPPFLAGS@ +KOKKOS_CXX = @KOKKOS_CXX@ +KOKKOS_CXXFLAGS = @KOKKOS_CXXFLAGS@ +KOKKOS_LDFLAGS = @KOKKOS_LDFLAGS@ +KOKKOS_LIBS = @KOKKOS_LIBS@ LASPACK_INCLUDE = @LASPACK_INCLUDE@ LASPACK_LIB = @LASPACK_LIB@ LD = @LD@ @@ -517,6 +524,7 @@ NODEPRECATEDFLAG = @NODEPRECATEDFLAG@ NOX_INCLUDES = @NOX_INCLUDES@ NOX_LIBS = @NOX_LIBS@ NOX_MAKEFILE_EXPORT = @NOX_MAKEFILE_EXPORT@ +NVCC = @NVCC@ NVTX_INCLUDE = @NVTX_INCLUDE@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ diff --git a/examples/miscellaneous/miscellaneous_ex15/Makefile.in b/examples/miscellaneous/miscellaneous_ex15/Makefile.in index 504236ef024..438762128b7 100644 --- a/examples/miscellaneous/miscellaneous_ex15/Makefile.in +++ b/examples/miscellaneous/miscellaneous_ex15/Makefile.in @@ -465,11 +465,18 @@ HDF5_DIR = @HDF5_DIR@ HDF5_LDFLAGS = @HDF5_LDFLAGS@ HDF5_LIBS = @HDF5_LIBS@ HDF5_PREFIX = @HDF5_PREFIX@ +HIPCC = @HIPCC@ +ICPX = @ICPX@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +KOKKOS_CPPFLAGS = @KOKKOS_CPPFLAGS@ +KOKKOS_CXX = @KOKKOS_CXX@ +KOKKOS_CXXFLAGS = @KOKKOS_CXXFLAGS@ +KOKKOS_LDFLAGS = @KOKKOS_LDFLAGS@ +KOKKOS_LIBS = @KOKKOS_LIBS@ LASPACK_INCLUDE = @LASPACK_INCLUDE@ LASPACK_LIB = @LASPACK_LIB@ LD = @LD@ @@ -517,6 +524,7 @@ NODEPRECATEDFLAG = @NODEPRECATEDFLAG@ NOX_INCLUDES = @NOX_INCLUDES@ NOX_LIBS = @NOX_LIBS@ NOX_MAKEFILE_EXPORT = @NOX_MAKEFILE_EXPORT@ +NVCC = @NVCC@ NVTX_INCLUDE = @NVTX_INCLUDE@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ diff --git a/examples/miscellaneous/miscellaneous_ex16/Makefile.in b/examples/miscellaneous/miscellaneous_ex16/Makefile.in index 816dc5777b4..acaecda9d82 100644 --- a/examples/miscellaneous/miscellaneous_ex16/Makefile.in +++ b/examples/miscellaneous/miscellaneous_ex16/Makefile.in @@ -481,11 +481,18 @@ HDF5_DIR = @HDF5_DIR@ HDF5_LDFLAGS = @HDF5_LDFLAGS@ HDF5_LIBS = @HDF5_LIBS@ HDF5_PREFIX = @HDF5_PREFIX@ +HIPCC = @HIPCC@ +ICPX = @ICPX@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +KOKKOS_CPPFLAGS = @KOKKOS_CPPFLAGS@ +KOKKOS_CXX = @KOKKOS_CXX@ +KOKKOS_CXXFLAGS = @KOKKOS_CXXFLAGS@ +KOKKOS_LDFLAGS = @KOKKOS_LDFLAGS@ +KOKKOS_LIBS = @KOKKOS_LIBS@ LASPACK_INCLUDE = @LASPACK_INCLUDE@ LASPACK_LIB = @LASPACK_LIB@ LD = @LD@ @@ -533,6 +540,7 @@ NODEPRECATEDFLAG = @NODEPRECATEDFLAG@ NOX_INCLUDES = @NOX_INCLUDES@ NOX_LIBS = @NOX_LIBS@ NOX_MAKEFILE_EXPORT = @NOX_MAKEFILE_EXPORT@ +NVCC = @NVCC@ NVTX_INCLUDE = @NVTX_INCLUDE@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ diff --git a/examples/miscellaneous/miscellaneous_ex17/Makefile.in b/examples/miscellaneous/miscellaneous_ex17/Makefile.in index d7264bce057..8ab2dc797f8 100644 --- a/examples/miscellaneous/miscellaneous_ex17/Makefile.in +++ b/examples/miscellaneous/miscellaneous_ex17/Makefile.in @@ -480,11 +480,18 @@ HDF5_DIR = @HDF5_DIR@ HDF5_LDFLAGS = @HDF5_LDFLAGS@ HDF5_LIBS = @HDF5_LIBS@ HDF5_PREFIX = @HDF5_PREFIX@ +HIPCC = @HIPCC@ +ICPX = @ICPX@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +KOKKOS_CPPFLAGS = @KOKKOS_CPPFLAGS@ +KOKKOS_CXX = @KOKKOS_CXX@ +KOKKOS_CXXFLAGS = @KOKKOS_CXXFLAGS@ +KOKKOS_LDFLAGS = @KOKKOS_LDFLAGS@ +KOKKOS_LIBS = @KOKKOS_LIBS@ LASPACK_INCLUDE = @LASPACK_INCLUDE@ LASPACK_LIB = @LASPACK_LIB@ LD = @LD@ @@ -532,6 +539,7 @@ NODEPRECATEDFLAG = @NODEPRECATEDFLAG@ NOX_INCLUDES = @NOX_INCLUDES@ NOX_LIBS = @NOX_LIBS@ NOX_MAKEFILE_EXPORT = @NOX_MAKEFILE_EXPORT@ +NVCC = @NVCC@ NVTX_INCLUDE = @NVTX_INCLUDE@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ diff --git a/examples/miscellaneous/miscellaneous_ex2/Makefile.in b/examples/miscellaneous/miscellaneous_ex2/Makefile.in index bc5b0d64089..5e2d6279049 100644 --- a/examples/miscellaneous/miscellaneous_ex2/Makefile.in +++ b/examples/miscellaneous/miscellaneous_ex2/Makefile.in @@ -471,11 +471,18 @@ HDF5_DIR = @HDF5_DIR@ HDF5_LDFLAGS = @HDF5_LDFLAGS@ HDF5_LIBS = @HDF5_LIBS@ HDF5_PREFIX = @HDF5_PREFIX@ +HIPCC = @HIPCC@ +ICPX = @ICPX@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +KOKKOS_CPPFLAGS = @KOKKOS_CPPFLAGS@ +KOKKOS_CXX = @KOKKOS_CXX@ +KOKKOS_CXXFLAGS = @KOKKOS_CXXFLAGS@ +KOKKOS_LDFLAGS = @KOKKOS_LDFLAGS@ +KOKKOS_LIBS = @KOKKOS_LIBS@ LASPACK_INCLUDE = @LASPACK_INCLUDE@ LASPACK_LIB = @LASPACK_LIB@ LD = @LD@ @@ -523,6 +530,7 @@ NODEPRECATEDFLAG = @NODEPRECATEDFLAG@ NOX_INCLUDES = @NOX_INCLUDES@ NOX_LIBS = @NOX_LIBS@ NOX_MAKEFILE_EXPORT = @NOX_MAKEFILE_EXPORT@ +NVCC = @NVCC@ NVTX_INCLUDE = @NVTX_INCLUDE@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ diff --git a/examples/miscellaneous/miscellaneous_ex3/Makefile.in b/examples/miscellaneous/miscellaneous_ex3/Makefile.in index 2f5e956a6ae..d58bfb75a85 100644 --- a/examples/miscellaneous/miscellaneous_ex3/Makefile.in +++ b/examples/miscellaneous/miscellaneous_ex3/Makefile.in @@ -470,11 +470,18 @@ HDF5_DIR = @HDF5_DIR@ HDF5_LDFLAGS = @HDF5_LDFLAGS@ HDF5_LIBS = @HDF5_LIBS@ HDF5_PREFIX = @HDF5_PREFIX@ +HIPCC = @HIPCC@ +ICPX = @ICPX@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +KOKKOS_CPPFLAGS = @KOKKOS_CPPFLAGS@ +KOKKOS_CXX = @KOKKOS_CXX@ +KOKKOS_CXXFLAGS = @KOKKOS_CXXFLAGS@ +KOKKOS_LDFLAGS = @KOKKOS_LDFLAGS@ +KOKKOS_LIBS = @KOKKOS_LIBS@ LASPACK_INCLUDE = @LASPACK_INCLUDE@ LASPACK_LIB = @LASPACK_LIB@ LD = @LD@ @@ -522,6 +529,7 @@ NODEPRECATEDFLAG = @NODEPRECATEDFLAG@ NOX_INCLUDES = @NOX_INCLUDES@ NOX_LIBS = @NOX_LIBS@ NOX_MAKEFILE_EXPORT = @NOX_MAKEFILE_EXPORT@ +NVCC = @NVCC@ NVTX_INCLUDE = @NVTX_INCLUDE@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ diff --git a/examples/miscellaneous/miscellaneous_ex4/Makefile.in b/examples/miscellaneous/miscellaneous_ex4/Makefile.in index d9d6f954cbc..f35a439ba5f 100644 --- a/examples/miscellaneous/miscellaneous_ex4/Makefile.in +++ b/examples/miscellaneous/miscellaneous_ex4/Makefile.in @@ -465,11 +465,18 @@ HDF5_DIR = @HDF5_DIR@ HDF5_LDFLAGS = @HDF5_LDFLAGS@ HDF5_LIBS = @HDF5_LIBS@ HDF5_PREFIX = @HDF5_PREFIX@ +HIPCC = @HIPCC@ +ICPX = @ICPX@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +KOKKOS_CPPFLAGS = @KOKKOS_CPPFLAGS@ +KOKKOS_CXX = @KOKKOS_CXX@ +KOKKOS_CXXFLAGS = @KOKKOS_CXXFLAGS@ +KOKKOS_LDFLAGS = @KOKKOS_LDFLAGS@ +KOKKOS_LIBS = @KOKKOS_LIBS@ LASPACK_INCLUDE = @LASPACK_INCLUDE@ LASPACK_LIB = @LASPACK_LIB@ LD = @LD@ @@ -517,6 +524,7 @@ NODEPRECATEDFLAG = @NODEPRECATEDFLAG@ NOX_INCLUDES = @NOX_INCLUDES@ NOX_LIBS = @NOX_LIBS@ NOX_MAKEFILE_EXPORT = @NOX_MAKEFILE_EXPORT@ +NVCC = @NVCC@ NVTX_INCLUDE = @NVTX_INCLUDE@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ diff --git a/examples/miscellaneous/miscellaneous_ex5/Makefile.in b/examples/miscellaneous/miscellaneous_ex5/Makefile.in index 719d522a31a..dc7dbeeef7b 100644 --- a/examples/miscellaneous/miscellaneous_ex5/Makefile.in +++ b/examples/miscellaneous/miscellaneous_ex5/Makefile.in @@ -479,11 +479,18 @@ HDF5_DIR = @HDF5_DIR@ HDF5_LDFLAGS = @HDF5_LDFLAGS@ HDF5_LIBS = @HDF5_LIBS@ HDF5_PREFIX = @HDF5_PREFIX@ +HIPCC = @HIPCC@ +ICPX = @ICPX@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +KOKKOS_CPPFLAGS = @KOKKOS_CPPFLAGS@ +KOKKOS_CXX = @KOKKOS_CXX@ +KOKKOS_CXXFLAGS = @KOKKOS_CXXFLAGS@ +KOKKOS_LDFLAGS = @KOKKOS_LDFLAGS@ +KOKKOS_LIBS = @KOKKOS_LIBS@ LASPACK_INCLUDE = @LASPACK_INCLUDE@ LASPACK_LIB = @LASPACK_LIB@ LD = @LD@ @@ -531,6 +538,7 @@ NODEPRECATEDFLAG = @NODEPRECATEDFLAG@ NOX_INCLUDES = @NOX_INCLUDES@ NOX_LIBS = @NOX_LIBS@ NOX_MAKEFILE_EXPORT = @NOX_MAKEFILE_EXPORT@ +NVCC = @NVCC@ NVTX_INCLUDE = @NVTX_INCLUDE@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ diff --git a/examples/miscellaneous/miscellaneous_ex6/Makefile.in b/examples/miscellaneous/miscellaneous_ex6/Makefile.in index a5a756000c3..a985950b56d 100644 --- a/examples/miscellaneous/miscellaneous_ex6/Makefile.in +++ b/examples/miscellaneous/miscellaneous_ex6/Makefile.in @@ -465,11 +465,18 @@ HDF5_DIR = @HDF5_DIR@ HDF5_LDFLAGS = @HDF5_LDFLAGS@ HDF5_LIBS = @HDF5_LIBS@ HDF5_PREFIX = @HDF5_PREFIX@ +HIPCC = @HIPCC@ +ICPX = @ICPX@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +KOKKOS_CPPFLAGS = @KOKKOS_CPPFLAGS@ +KOKKOS_CXX = @KOKKOS_CXX@ +KOKKOS_CXXFLAGS = @KOKKOS_CXXFLAGS@ +KOKKOS_LDFLAGS = @KOKKOS_LDFLAGS@ +KOKKOS_LIBS = @KOKKOS_LIBS@ LASPACK_INCLUDE = @LASPACK_INCLUDE@ LASPACK_LIB = @LASPACK_LIB@ LD = @LD@ @@ -517,6 +524,7 @@ NODEPRECATEDFLAG = @NODEPRECATEDFLAG@ NOX_INCLUDES = @NOX_INCLUDES@ NOX_LIBS = @NOX_LIBS@ NOX_MAKEFILE_EXPORT = @NOX_MAKEFILE_EXPORT@ +NVCC = @NVCC@ NVTX_INCLUDE = @NVTX_INCLUDE@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ diff --git a/examples/miscellaneous/miscellaneous_ex7/Makefile.in b/examples/miscellaneous/miscellaneous_ex7/Makefile.in index d0115c3cac9..e3515b9f785 100644 --- a/examples/miscellaneous/miscellaneous_ex7/Makefile.in +++ b/examples/miscellaneous/miscellaneous_ex7/Makefile.in @@ -508,11 +508,18 @@ HDF5_DIR = @HDF5_DIR@ HDF5_LDFLAGS = @HDF5_LDFLAGS@ HDF5_LIBS = @HDF5_LIBS@ HDF5_PREFIX = @HDF5_PREFIX@ +HIPCC = @HIPCC@ +ICPX = @ICPX@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +KOKKOS_CPPFLAGS = @KOKKOS_CPPFLAGS@ +KOKKOS_CXX = @KOKKOS_CXX@ +KOKKOS_CXXFLAGS = @KOKKOS_CXXFLAGS@ +KOKKOS_LDFLAGS = @KOKKOS_LDFLAGS@ +KOKKOS_LIBS = @KOKKOS_LIBS@ LASPACK_INCLUDE = @LASPACK_INCLUDE@ LASPACK_LIB = @LASPACK_LIB@ LD = @LD@ @@ -560,6 +567,7 @@ NODEPRECATEDFLAG = @NODEPRECATEDFLAG@ NOX_INCLUDES = @NOX_INCLUDES@ NOX_LIBS = @NOX_LIBS@ NOX_MAKEFILE_EXPORT = @NOX_MAKEFILE_EXPORT@ +NVCC = @NVCC@ NVTX_INCLUDE = @NVTX_INCLUDE@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ diff --git a/examples/miscellaneous/miscellaneous_ex8/Makefile.in b/examples/miscellaneous/miscellaneous_ex8/Makefile.in index 270aa93b899..d990641f148 100644 --- a/examples/miscellaneous/miscellaneous_ex8/Makefile.in +++ b/examples/miscellaneous/miscellaneous_ex8/Makefile.in @@ -471,11 +471,18 @@ HDF5_DIR = @HDF5_DIR@ HDF5_LDFLAGS = @HDF5_LDFLAGS@ HDF5_LIBS = @HDF5_LIBS@ HDF5_PREFIX = @HDF5_PREFIX@ +HIPCC = @HIPCC@ +ICPX = @ICPX@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +KOKKOS_CPPFLAGS = @KOKKOS_CPPFLAGS@ +KOKKOS_CXX = @KOKKOS_CXX@ +KOKKOS_CXXFLAGS = @KOKKOS_CXXFLAGS@ +KOKKOS_LDFLAGS = @KOKKOS_LDFLAGS@ +KOKKOS_LIBS = @KOKKOS_LIBS@ LASPACK_INCLUDE = @LASPACK_INCLUDE@ LASPACK_LIB = @LASPACK_LIB@ LD = @LD@ @@ -523,6 +530,7 @@ NODEPRECATEDFLAG = @NODEPRECATEDFLAG@ NOX_INCLUDES = @NOX_INCLUDES@ NOX_LIBS = @NOX_LIBS@ NOX_MAKEFILE_EXPORT = @NOX_MAKEFILE_EXPORT@ +NVCC = @NVCC@ NVTX_INCLUDE = @NVTX_INCLUDE@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ diff --git a/examples/miscellaneous/miscellaneous_ex9/Makefile.in b/examples/miscellaneous/miscellaneous_ex9/Makefile.in index 46f5b5339d5..3860b7d8388 100644 --- a/examples/miscellaneous/miscellaneous_ex9/Makefile.in +++ b/examples/miscellaneous/miscellaneous_ex9/Makefile.in @@ -505,11 +505,18 @@ HDF5_DIR = @HDF5_DIR@ HDF5_LDFLAGS = @HDF5_LDFLAGS@ HDF5_LIBS = @HDF5_LIBS@ HDF5_PREFIX = @HDF5_PREFIX@ +HIPCC = @HIPCC@ +ICPX = @ICPX@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +KOKKOS_CPPFLAGS = @KOKKOS_CPPFLAGS@ +KOKKOS_CXX = @KOKKOS_CXX@ +KOKKOS_CXXFLAGS = @KOKKOS_CXXFLAGS@ +KOKKOS_LDFLAGS = @KOKKOS_LDFLAGS@ +KOKKOS_LIBS = @KOKKOS_LIBS@ LASPACK_INCLUDE = @LASPACK_INCLUDE@ LASPACK_LIB = @LASPACK_LIB@ LD = @LD@ @@ -557,6 +564,7 @@ NODEPRECATEDFLAG = @NODEPRECATEDFLAG@ NOX_INCLUDES = @NOX_INCLUDES@ NOX_LIBS = @NOX_LIBS@ NOX_MAKEFILE_EXPORT = @NOX_MAKEFILE_EXPORT@ +NVCC = @NVCC@ NVTX_INCLUDE = @NVTX_INCLUDE@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ diff --git a/examples/optimization/optimization_ex1/Makefile.in b/examples/optimization/optimization_ex1/Makefile.in index cf5012ab431..fb3baf00e2d 100644 --- a/examples/optimization/optimization_ex1/Makefile.in +++ b/examples/optimization/optimization_ex1/Makefile.in @@ -471,11 +471,18 @@ HDF5_DIR = @HDF5_DIR@ HDF5_LDFLAGS = @HDF5_LDFLAGS@ HDF5_LIBS = @HDF5_LIBS@ HDF5_PREFIX = @HDF5_PREFIX@ +HIPCC = @HIPCC@ +ICPX = @ICPX@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +KOKKOS_CPPFLAGS = @KOKKOS_CPPFLAGS@ +KOKKOS_CXX = @KOKKOS_CXX@ +KOKKOS_CXXFLAGS = @KOKKOS_CXXFLAGS@ +KOKKOS_LDFLAGS = @KOKKOS_LDFLAGS@ +KOKKOS_LIBS = @KOKKOS_LIBS@ LASPACK_INCLUDE = @LASPACK_INCLUDE@ LASPACK_LIB = @LASPACK_LIB@ LD = @LD@ @@ -523,6 +530,7 @@ NODEPRECATEDFLAG = @NODEPRECATEDFLAG@ NOX_INCLUDES = @NOX_INCLUDES@ NOX_LIBS = @NOX_LIBS@ NOX_MAKEFILE_EXPORT = @NOX_MAKEFILE_EXPORT@ +NVCC = @NVCC@ NVTX_INCLUDE = @NVTX_INCLUDE@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ diff --git a/examples/optimization/optimization_ex2/Makefile.in b/examples/optimization/optimization_ex2/Makefile.in index f3065b739c7..c7816e72654 100644 --- a/examples/optimization/optimization_ex2/Makefile.in +++ b/examples/optimization/optimization_ex2/Makefile.in @@ -471,11 +471,18 @@ HDF5_DIR = @HDF5_DIR@ HDF5_LDFLAGS = @HDF5_LDFLAGS@ HDF5_LIBS = @HDF5_LIBS@ HDF5_PREFIX = @HDF5_PREFIX@ +HIPCC = @HIPCC@ +ICPX = @ICPX@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +KOKKOS_CPPFLAGS = @KOKKOS_CPPFLAGS@ +KOKKOS_CXX = @KOKKOS_CXX@ +KOKKOS_CXXFLAGS = @KOKKOS_CXXFLAGS@ +KOKKOS_LDFLAGS = @KOKKOS_LDFLAGS@ +KOKKOS_LIBS = @KOKKOS_LIBS@ LASPACK_INCLUDE = @LASPACK_INCLUDE@ LASPACK_LIB = @LASPACK_LIB@ LD = @LD@ @@ -523,6 +530,7 @@ NODEPRECATEDFLAG = @NODEPRECATEDFLAG@ NOX_INCLUDES = @NOX_INCLUDES@ NOX_LIBS = @NOX_LIBS@ NOX_MAKEFILE_EXPORT = @NOX_MAKEFILE_EXPORT@ +NVCC = @NVCC@ NVTX_INCLUDE = @NVTX_INCLUDE@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ diff --git a/examples/reduced_basis/reduced_basis_ex1/Makefile.in b/examples/reduced_basis/reduced_basis_ex1/Makefile.in index 0879171980e..fa1d195a31a 100644 --- a/examples/reduced_basis/reduced_basis_ex1/Makefile.in +++ b/examples/reduced_basis/reduced_basis_ex1/Makefile.in @@ -489,11 +489,18 @@ HDF5_DIR = @HDF5_DIR@ HDF5_LDFLAGS = @HDF5_LDFLAGS@ HDF5_LIBS = @HDF5_LIBS@ HDF5_PREFIX = @HDF5_PREFIX@ +HIPCC = @HIPCC@ +ICPX = @ICPX@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +KOKKOS_CPPFLAGS = @KOKKOS_CPPFLAGS@ +KOKKOS_CXX = @KOKKOS_CXX@ +KOKKOS_CXXFLAGS = @KOKKOS_CXXFLAGS@ +KOKKOS_LDFLAGS = @KOKKOS_LDFLAGS@ +KOKKOS_LIBS = @KOKKOS_LIBS@ LASPACK_INCLUDE = @LASPACK_INCLUDE@ LASPACK_LIB = @LASPACK_LIB@ LD = @LD@ @@ -541,6 +548,7 @@ NODEPRECATEDFLAG = @NODEPRECATEDFLAG@ NOX_INCLUDES = @NOX_INCLUDES@ NOX_LIBS = @NOX_LIBS@ NOX_MAKEFILE_EXPORT = @NOX_MAKEFILE_EXPORT@ +NVCC = @NVCC@ NVTX_INCLUDE = @NVTX_INCLUDE@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ diff --git a/examples/reduced_basis/reduced_basis_ex2/Makefile.in b/examples/reduced_basis/reduced_basis_ex2/Makefile.in index 986069c3c25..2c34d349aeb 100644 --- a/examples/reduced_basis/reduced_basis_ex2/Makefile.in +++ b/examples/reduced_basis/reduced_basis_ex2/Makefile.in @@ -489,11 +489,18 @@ HDF5_DIR = @HDF5_DIR@ HDF5_LDFLAGS = @HDF5_LDFLAGS@ HDF5_LIBS = @HDF5_LIBS@ HDF5_PREFIX = @HDF5_PREFIX@ +HIPCC = @HIPCC@ +ICPX = @ICPX@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +KOKKOS_CPPFLAGS = @KOKKOS_CPPFLAGS@ +KOKKOS_CXX = @KOKKOS_CXX@ +KOKKOS_CXXFLAGS = @KOKKOS_CXXFLAGS@ +KOKKOS_LDFLAGS = @KOKKOS_LDFLAGS@ +KOKKOS_LIBS = @KOKKOS_LIBS@ LASPACK_INCLUDE = @LASPACK_INCLUDE@ LASPACK_LIB = @LASPACK_LIB@ LD = @LD@ @@ -541,6 +548,7 @@ NODEPRECATEDFLAG = @NODEPRECATEDFLAG@ NOX_INCLUDES = @NOX_INCLUDES@ NOX_LIBS = @NOX_LIBS@ NOX_MAKEFILE_EXPORT = @NOX_MAKEFILE_EXPORT@ +NVCC = @NVCC@ NVTX_INCLUDE = @NVTX_INCLUDE@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ diff --git a/examples/reduced_basis/reduced_basis_ex3/Makefile.in b/examples/reduced_basis/reduced_basis_ex3/Makefile.in index f68264db04e..41d6871eef3 100644 --- a/examples/reduced_basis/reduced_basis_ex3/Makefile.in +++ b/examples/reduced_basis/reduced_basis_ex3/Makefile.in @@ -489,11 +489,18 @@ HDF5_DIR = @HDF5_DIR@ HDF5_LDFLAGS = @HDF5_LDFLAGS@ HDF5_LIBS = @HDF5_LIBS@ HDF5_PREFIX = @HDF5_PREFIX@ +HIPCC = @HIPCC@ +ICPX = @ICPX@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +KOKKOS_CPPFLAGS = @KOKKOS_CPPFLAGS@ +KOKKOS_CXX = @KOKKOS_CXX@ +KOKKOS_CXXFLAGS = @KOKKOS_CXXFLAGS@ +KOKKOS_LDFLAGS = @KOKKOS_LDFLAGS@ +KOKKOS_LIBS = @KOKKOS_LIBS@ LASPACK_INCLUDE = @LASPACK_INCLUDE@ LASPACK_LIB = @LASPACK_LIB@ LD = @LD@ @@ -541,6 +548,7 @@ NODEPRECATEDFLAG = @NODEPRECATEDFLAG@ NOX_INCLUDES = @NOX_INCLUDES@ NOX_LIBS = @NOX_LIBS@ NOX_MAKEFILE_EXPORT = @NOX_MAKEFILE_EXPORT@ +NVCC = @NVCC@ NVTX_INCLUDE = @NVTX_INCLUDE@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ diff --git a/examples/reduced_basis/reduced_basis_ex4/Makefile.in b/examples/reduced_basis/reduced_basis_ex4/Makefile.in index 2c3343c83e8..a7bd31cb843 100644 --- a/examples/reduced_basis/reduced_basis_ex4/Makefile.in +++ b/examples/reduced_basis/reduced_basis_ex4/Makefile.in @@ -494,11 +494,18 @@ HDF5_DIR = @HDF5_DIR@ HDF5_LDFLAGS = @HDF5_LDFLAGS@ HDF5_LIBS = @HDF5_LIBS@ HDF5_PREFIX = @HDF5_PREFIX@ +HIPCC = @HIPCC@ +ICPX = @ICPX@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +KOKKOS_CPPFLAGS = @KOKKOS_CPPFLAGS@ +KOKKOS_CXX = @KOKKOS_CXX@ +KOKKOS_CXXFLAGS = @KOKKOS_CXXFLAGS@ +KOKKOS_LDFLAGS = @KOKKOS_LDFLAGS@ +KOKKOS_LIBS = @KOKKOS_LIBS@ LASPACK_INCLUDE = @LASPACK_INCLUDE@ LASPACK_LIB = @LASPACK_LIB@ LD = @LD@ @@ -546,6 +553,7 @@ NODEPRECATEDFLAG = @NODEPRECATEDFLAG@ NOX_INCLUDES = @NOX_INCLUDES@ NOX_LIBS = @NOX_LIBS@ NOX_MAKEFILE_EXPORT = @NOX_MAKEFILE_EXPORT@ +NVCC = @NVCC@ NVTX_INCLUDE = @NVTX_INCLUDE@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ diff --git a/examples/reduced_basis/reduced_basis_ex5/Makefile.in b/examples/reduced_basis/reduced_basis_ex5/Makefile.in index 238b469fe39..82b5b2fbc05 100644 --- a/examples/reduced_basis/reduced_basis_ex5/Makefile.in +++ b/examples/reduced_basis/reduced_basis_ex5/Makefile.in @@ -504,11 +504,18 @@ HDF5_DIR = @HDF5_DIR@ HDF5_LDFLAGS = @HDF5_LDFLAGS@ HDF5_LIBS = @HDF5_LIBS@ HDF5_PREFIX = @HDF5_PREFIX@ +HIPCC = @HIPCC@ +ICPX = @ICPX@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +KOKKOS_CPPFLAGS = @KOKKOS_CPPFLAGS@ +KOKKOS_CXX = @KOKKOS_CXX@ +KOKKOS_CXXFLAGS = @KOKKOS_CXXFLAGS@ +KOKKOS_LDFLAGS = @KOKKOS_LDFLAGS@ +KOKKOS_LIBS = @KOKKOS_LIBS@ LASPACK_INCLUDE = @LASPACK_INCLUDE@ LASPACK_LIB = @LASPACK_LIB@ LD = @LD@ @@ -556,6 +563,7 @@ NODEPRECATEDFLAG = @NODEPRECATEDFLAG@ NOX_INCLUDES = @NOX_INCLUDES@ NOX_LIBS = @NOX_LIBS@ NOX_MAKEFILE_EXPORT = @NOX_MAKEFILE_EXPORT@ +NVCC = @NVCC@ NVTX_INCLUDE = @NVTX_INCLUDE@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ diff --git a/examples/reduced_basis/reduced_basis_ex6/Makefile.in b/examples/reduced_basis/reduced_basis_ex6/Makefile.in index 50076f35515..dbc24072e30 100644 --- a/examples/reduced_basis/reduced_basis_ex6/Makefile.in +++ b/examples/reduced_basis/reduced_basis_ex6/Makefile.in @@ -494,11 +494,18 @@ HDF5_DIR = @HDF5_DIR@ HDF5_LDFLAGS = @HDF5_LDFLAGS@ HDF5_LIBS = @HDF5_LIBS@ HDF5_PREFIX = @HDF5_PREFIX@ +HIPCC = @HIPCC@ +ICPX = @ICPX@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +KOKKOS_CPPFLAGS = @KOKKOS_CPPFLAGS@ +KOKKOS_CXX = @KOKKOS_CXX@ +KOKKOS_CXXFLAGS = @KOKKOS_CXXFLAGS@ +KOKKOS_LDFLAGS = @KOKKOS_LDFLAGS@ +KOKKOS_LIBS = @KOKKOS_LIBS@ LASPACK_INCLUDE = @LASPACK_INCLUDE@ LASPACK_LIB = @LASPACK_LIB@ LD = @LD@ @@ -546,6 +553,7 @@ NODEPRECATEDFLAG = @NODEPRECATEDFLAG@ NOX_INCLUDES = @NOX_INCLUDES@ NOX_LIBS = @NOX_LIBS@ NOX_MAKEFILE_EXPORT = @NOX_MAKEFILE_EXPORT@ +NVCC = @NVCC@ NVTX_INCLUDE = @NVTX_INCLUDE@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ diff --git a/examples/reduced_basis/reduced_basis_ex7/Makefile.in b/examples/reduced_basis/reduced_basis_ex7/Makefile.in index 3817bee46df..a8446610838 100644 --- a/examples/reduced_basis/reduced_basis_ex7/Makefile.in +++ b/examples/reduced_basis/reduced_basis_ex7/Makefile.in @@ -489,11 +489,18 @@ HDF5_DIR = @HDF5_DIR@ HDF5_LDFLAGS = @HDF5_LDFLAGS@ HDF5_LIBS = @HDF5_LIBS@ HDF5_PREFIX = @HDF5_PREFIX@ +HIPCC = @HIPCC@ +ICPX = @ICPX@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +KOKKOS_CPPFLAGS = @KOKKOS_CPPFLAGS@ +KOKKOS_CXX = @KOKKOS_CXX@ +KOKKOS_CXXFLAGS = @KOKKOS_CXXFLAGS@ +KOKKOS_LDFLAGS = @KOKKOS_LDFLAGS@ +KOKKOS_LIBS = @KOKKOS_LIBS@ LASPACK_INCLUDE = @LASPACK_INCLUDE@ LASPACK_LIB = @LASPACK_LIB@ LD = @LD@ @@ -541,6 +548,7 @@ NODEPRECATEDFLAG = @NODEPRECATEDFLAG@ NOX_INCLUDES = @NOX_INCLUDES@ NOX_LIBS = @NOX_LIBS@ NOX_MAKEFILE_EXPORT = @NOX_MAKEFILE_EXPORT@ +NVCC = @NVCC@ NVTX_INCLUDE = @NVTX_INCLUDE@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ diff --git a/examples/solution_transfer/solution_transfer_ex1/Makefile.in b/examples/solution_transfer/solution_transfer_ex1/Makefile.in index cd7613f44f7..5a0d14c6136 100644 --- a/examples/solution_transfer/solution_transfer_ex1/Makefile.in +++ b/examples/solution_transfer/solution_transfer_ex1/Makefile.in @@ -465,11 +465,18 @@ HDF5_DIR = @HDF5_DIR@ HDF5_LDFLAGS = @HDF5_LDFLAGS@ HDF5_LIBS = @HDF5_LIBS@ HDF5_PREFIX = @HDF5_PREFIX@ +HIPCC = @HIPCC@ +ICPX = @ICPX@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +KOKKOS_CPPFLAGS = @KOKKOS_CPPFLAGS@ +KOKKOS_CXX = @KOKKOS_CXX@ +KOKKOS_CXXFLAGS = @KOKKOS_CXXFLAGS@ +KOKKOS_LDFLAGS = @KOKKOS_LDFLAGS@ +KOKKOS_LIBS = @KOKKOS_LIBS@ LASPACK_INCLUDE = @LASPACK_INCLUDE@ LASPACK_LIB = @LASPACK_LIB@ LD = @LD@ @@ -517,6 +524,7 @@ NODEPRECATEDFLAG = @NODEPRECATEDFLAG@ NOX_INCLUDES = @NOX_INCLUDES@ NOX_LIBS = @NOX_LIBS@ NOX_MAKEFILE_EXPORT = @NOX_MAKEFILE_EXPORT@ +NVCC = @NVCC@ NVTX_INCLUDE = @NVTX_INCLUDE@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ diff --git a/examples/subdomains/subdomains_ex1/Makefile.in b/examples/subdomains/subdomains_ex1/Makefile.in index f6238ba3205..52deb3d0ade 100644 --- a/examples/subdomains/subdomains_ex1/Makefile.in +++ b/examples/subdomains/subdomains_ex1/Makefile.in @@ -480,11 +480,18 @@ HDF5_DIR = @HDF5_DIR@ HDF5_LDFLAGS = @HDF5_LDFLAGS@ HDF5_LIBS = @HDF5_LIBS@ HDF5_PREFIX = @HDF5_PREFIX@ +HIPCC = @HIPCC@ +ICPX = @ICPX@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +KOKKOS_CPPFLAGS = @KOKKOS_CPPFLAGS@ +KOKKOS_CXX = @KOKKOS_CXX@ +KOKKOS_CXXFLAGS = @KOKKOS_CXXFLAGS@ +KOKKOS_LDFLAGS = @KOKKOS_LDFLAGS@ +KOKKOS_LIBS = @KOKKOS_LIBS@ LASPACK_INCLUDE = @LASPACK_INCLUDE@ LASPACK_LIB = @LASPACK_LIB@ LD = @LD@ @@ -532,6 +539,7 @@ NODEPRECATEDFLAG = @NODEPRECATEDFLAG@ NOX_INCLUDES = @NOX_INCLUDES@ NOX_LIBS = @NOX_LIBS@ NOX_MAKEFILE_EXPORT = @NOX_MAKEFILE_EXPORT@ +NVCC = @NVCC@ NVTX_INCLUDE = @NVTX_INCLUDE@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ diff --git a/examples/subdomains/subdomains_ex2/Makefile.in b/examples/subdomains/subdomains_ex2/Makefile.in index 5c20167218c..b32dcd0e3c9 100644 --- a/examples/subdomains/subdomains_ex2/Makefile.in +++ b/examples/subdomains/subdomains_ex2/Makefile.in @@ -480,11 +480,18 @@ HDF5_DIR = @HDF5_DIR@ HDF5_LDFLAGS = @HDF5_LDFLAGS@ HDF5_LIBS = @HDF5_LIBS@ HDF5_PREFIX = @HDF5_PREFIX@ +HIPCC = @HIPCC@ +ICPX = @ICPX@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +KOKKOS_CPPFLAGS = @KOKKOS_CPPFLAGS@ +KOKKOS_CXX = @KOKKOS_CXX@ +KOKKOS_CXXFLAGS = @KOKKOS_CXXFLAGS@ +KOKKOS_LDFLAGS = @KOKKOS_LDFLAGS@ +KOKKOS_LIBS = @KOKKOS_LIBS@ LASPACK_INCLUDE = @LASPACK_INCLUDE@ LASPACK_LIB = @LASPACK_LIB@ LD = @LD@ @@ -532,6 +539,7 @@ NODEPRECATEDFLAG = @NODEPRECATEDFLAG@ NOX_INCLUDES = @NOX_INCLUDES@ NOX_LIBS = @NOX_LIBS@ NOX_MAKEFILE_EXPORT = @NOX_MAKEFILE_EXPORT@ +NVCC = @NVCC@ NVTX_INCLUDE = @NVTX_INCLUDE@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ diff --git a/examples/subdomains/subdomains_ex3/Makefile.in b/examples/subdomains/subdomains_ex3/Makefile.in index 3a83f502b61..a3d5c4a101d 100644 --- a/examples/subdomains/subdomains_ex3/Makefile.in +++ b/examples/subdomains/subdomains_ex3/Makefile.in @@ -474,11 +474,18 @@ HDF5_DIR = @HDF5_DIR@ HDF5_LDFLAGS = @HDF5_LDFLAGS@ HDF5_LIBS = @HDF5_LIBS@ HDF5_PREFIX = @HDF5_PREFIX@ +HIPCC = @HIPCC@ +ICPX = @ICPX@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +KOKKOS_CPPFLAGS = @KOKKOS_CPPFLAGS@ +KOKKOS_CXX = @KOKKOS_CXX@ +KOKKOS_CXXFLAGS = @KOKKOS_CXXFLAGS@ +KOKKOS_LDFLAGS = @KOKKOS_LDFLAGS@ +KOKKOS_LIBS = @KOKKOS_LIBS@ LASPACK_INCLUDE = @LASPACK_INCLUDE@ LASPACK_LIB = @LASPACK_LIB@ LD = @LD@ @@ -526,6 +533,7 @@ NODEPRECATEDFLAG = @NODEPRECATEDFLAG@ NOX_INCLUDES = @NOX_INCLUDES@ NOX_LIBS = @NOX_LIBS@ NOX_MAKEFILE_EXPORT = @NOX_MAKEFILE_EXPORT@ +NVCC = @NVCC@ NVTX_INCLUDE = @NVTX_INCLUDE@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ diff --git a/examples/systems_of_equations/systems_of_equations_ex1/Makefile.in b/examples/systems_of_equations/systems_of_equations_ex1/Makefile.in index 3add79bf28a..c0fc74e97bf 100644 --- a/examples/systems_of_equations/systems_of_equations_ex1/Makefile.in +++ b/examples/systems_of_equations/systems_of_equations_ex1/Makefile.in @@ -466,11 +466,18 @@ HDF5_DIR = @HDF5_DIR@ HDF5_LDFLAGS = @HDF5_LDFLAGS@ HDF5_LIBS = @HDF5_LIBS@ HDF5_PREFIX = @HDF5_PREFIX@ +HIPCC = @HIPCC@ +ICPX = @ICPX@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +KOKKOS_CPPFLAGS = @KOKKOS_CPPFLAGS@ +KOKKOS_CXX = @KOKKOS_CXX@ +KOKKOS_CXXFLAGS = @KOKKOS_CXXFLAGS@ +KOKKOS_LDFLAGS = @KOKKOS_LDFLAGS@ +KOKKOS_LIBS = @KOKKOS_LIBS@ LASPACK_INCLUDE = @LASPACK_INCLUDE@ LASPACK_LIB = @LASPACK_LIB@ LD = @LD@ @@ -518,6 +525,7 @@ NODEPRECATEDFLAG = @NODEPRECATEDFLAG@ NOX_INCLUDES = @NOX_INCLUDES@ NOX_LIBS = @NOX_LIBS@ NOX_MAKEFILE_EXPORT = @NOX_MAKEFILE_EXPORT@ +NVCC = @NVCC@ NVTX_INCLUDE = @NVTX_INCLUDE@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ diff --git a/examples/systems_of_equations/systems_of_equations_ex2/Makefile.in b/examples/systems_of_equations/systems_of_equations_ex2/Makefile.in index cd44f4a5603..a89c3ec3026 100644 --- a/examples/systems_of_equations/systems_of_equations_ex2/Makefile.in +++ b/examples/systems_of_equations/systems_of_equations_ex2/Makefile.in @@ -471,11 +471,18 @@ HDF5_DIR = @HDF5_DIR@ HDF5_LDFLAGS = @HDF5_LDFLAGS@ HDF5_LIBS = @HDF5_LIBS@ HDF5_PREFIX = @HDF5_PREFIX@ +HIPCC = @HIPCC@ +ICPX = @ICPX@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +KOKKOS_CPPFLAGS = @KOKKOS_CPPFLAGS@ +KOKKOS_CXX = @KOKKOS_CXX@ +KOKKOS_CXXFLAGS = @KOKKOS_CXXFLAGS@ +KOKKOS_LDFLAGS = @KOKKOS_LDFLAGS@ +KOKKOS_LIBS = @KOKKOS_LIBS@ LASPACK_INCLUDE = @LASPACK_INCLUDE@ LASPACK_LIB = @LASPACK_LIB@ LD = @LD@ @@ -523,6 +530,7 @@ NODEPRECATEDFLAG = @NODEPRECATEDFLAG@ NOX_INCLUDES = @NOX_INCLUDES@ NOX_LIBS = @NOX_LIBS@ NOX_MAKEFILE_EXPORT = @NOX_MAKEFILE_EXPORT@ +NVCC = @NVCC@ NVTX_INCLUDE = @NVTX_INCLUDE@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ diff --git a/examples/systems_of_equations/systems_of_equations_ex3/Makefile.in b/examples/systems_of_equations/systems_of_equations_ex3/Makefile.in index f5c4ff69de1..f0afcad3be3 100644 --- a/examples/systems_of_equations/systems_of_equations_ex3/Makefile.in +++ b/examples/systems_of_equations/systems_of_equations_ex3/Makefile.in @@ -466,11 +466,18 @@ HDF5_DIR = @HDF5_DIR@ HDF5_LDFLAGS = @HDF5_LDFLAGS@ HDF5_LIBS = @HDF5_LIBS@ HDF5_PREFIX = @HDF5_PREFIX@ +HIPCC = @HIPCC@ +ICPX = @ICPX@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +KOKKOS_CPPFLAGS = @KOKKOS_CPPFLAGS@ +KOKKOS_CXX = @KOKKOS_CXX@ +KOKKOS_CXXFLAGS = @KOKKOS_CXXFLAGS@ +KOKKOS_LDFLAGS = @KOKKOS_LDFLAGS@ +KOKKOS_LIBS = @KOKKOS_LIBS@ LASPACK_INCLUDE = @LASPACK_INCLUDE@ LASPACK_LIB = @LASPACK_LIB@ LD = @LD@ @@ -518,6 +525,7 @@ NODEPRECATEDFLAG = @NODEPRECATEDFLAG@ NOX_INCLUDES = @NOX_INCLUDES@ NOX_LIBS = @NOX_LIBS@ NOX_MAKEFILE_EXPORT = @NOX_MAKEFILE_EXPORT@ +NVCC = @NVCC@ NVTX_INCLUDE = @NVTX_INCLUDE@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ diff --git a/examples/systems_of_equations/systems_of_equations_ex4/Makefile.in b/examples/systems_of_equations/systems_of_equations_ex4/Makefile.in index 0fbdb133bf1..dcdbbe495d2 100644 --- a/examples/systems_of_equations/systems_of_equations_ex4/Makefile.in +++ b/examples/systems_of_equations/systems_of_equations_ex4/Makefile.in @@ -466,11 +466,18 @@ HDF5_DIR = @HDF5_DIR@ HDF5_LDFLAGS = @HDF5_LDFLAGS@ HDF5_LIBS = @HDF5_LIBS@ HDF5_PREFIX = @HDF5_PREFIX@ +HIPCC = @HIPCC@ +ICPX = @ICPX@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +KOKKOS_CPPFLAGS = @KOKKOS_CPPFLAGS@ +KOKKOS_CXX = @KOKKOS_CXX@ +KOKKOS_CXXFLAGS = @KOKKOS_CXXFLAGS@ +KOKKOS_LDFLAGS = @KOKKOS_LDFLAGS@ +KOKKOS_LIBS = @KOKKOS_LIBS@ LASPACK_INCLUDE = @LASPACK_INCLUDE@ LASPACK_LIB = @LASPACK_LIB@ LD = @LD@ @@ -518,6 +525,7 @@ NODEPRECATEDFLAG = @NODEPRECATEDFLAG@ NOX_INCLUDES = @NOX_INCLUDES@ NOX_LIBS = @NOX_LIBS@ NOX_MAKEFILE_EXPORT = @NOX_MAKEFILE_EXPORT@ +NVCC = @NVCC@ NVTX_INCLUDE = @NVTX_INCLUDE@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ diff --git a/examples/systems_of_equations/systems_of_equations_ex5/Makefile.in b/examples/systems_of_equations/systems_of_equations_ex5/Makefile.in index d1f25e7dc8b..ff6e7676c11 100644 --- a/examples/systems_of_equations/systems_of_equations_ex5/Makefile.in +++ b/examples/systems_of_equations/systems_of_equations_ex5/Makefile.in @@ -466,11 +466,18 @@ HDF5_DIR = @HDF5_DIR@ HDF5_LDFLAGS = @HDF5_LDFLAGS@ HDF5_LIBS = @HDF5_LIBS@ HDF5_PREFIX = @HDF5_PREFIX@ +HIPCC = @HIPCC@ +ICPX = @ICPX@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +KOKKOS_CPPFLAGS = @KOKKOS_CPPFLAGS@ +KOKKOS_CXX = @KOKKOS_CXX@ +KOKKOS_CXXFLAGS = @KOKKOS_CXXFLAGS@ +KOKKOS_LDFLAGS = @KOKKOS_LDFLAGS@ +KOKKOS_LIBS = @KOKKOS_LIBS@ LASPACK_INCLUDE = @LASPACK_INCLUDE@ LASPACK_LIB = @LASPACK_LIB@ LD = @LD@ @@ -518,6 +525,7 @@ NODEPRECATEDFLAG = @NODEPRECATEDFLAG@ NOX_INCLUDES = @NOX_INCLUDES@ NOX_LIBS = @NOX_LIBS@ NOX_MAKEFILE_EXPORT = @NOX_MAKEFILE_EXPORT@ +NVCC = @NVCC@ NVTX_INCLUDE = @NVTX_INCLUDE@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ diff --git a/examples/systems_of_equations/systems_of_equations_ex6/Makefile.in b/examples/systems_of_equations/systems_of_equations_ex6/Makefile.in index 5712834b887..da837f22e98 100644 --- a/examples/systems_of_equations/systems_of_equations_ex6/Makefile.in +++ b/examples/systems_of_equations/systems_of_equations_ex6/Makefile.in @@ -466,11 +466,18 @@ HDF5_DIR = @HDF5_DIR@ HDF5_LDFLAGS = @HDF5_LDFLAGS@ HDF5_LIBS = @HDF5_LIBS@ HDF5_PREFIX = @HDF5_PREFIX@ +HIPCC = @HIPCC@ +ICPX = @ICPX@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +KOKKOS_CPPFLAGS = @KOKKOS_CPPFLAGS@ +KOKKOS_CXX = @KOKKOS_CXX@ +KOKKOS_CXXFLAGS = @KOKKOS_CXXFLAGS@ +KOKKOS_LDFLAGS = @KOKKOS_LDFLAGS@ +KOKKOS_LIBS = @KOKKOS_LIBS@ LASPACK_INCLUDE = @LASPACK_INCLUDE@ LASPACK_LIB = @LASPACK_LIB@ LD = @LD@ @@ -518,6 +525,7 @@ NODEPRECATEDFLAG = @NODEPRECATEDFLAG@ NOX_INCLUDES = @NOX_INCLUDES@ NOX_LIBS = @NOX_LIBS@ NOX_MAKEFILE_EXPORT = @NOX_MAKEFILE_EXPORT@ +NVCC = @NVCC@ NVTX_INCLUDE = @NVTX_INCLUDE@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ diff --git a/examples/systems_of_equations/systems_of_equations_ex7/Makefile.in b/examples/systems_of_equations/systems_of_equations_ex7/Makefile.in index 15445020704..4ef11376ea4 100644 --- a/examples/systems_of_equations/systems_of_equations_ex7/Makefile.in +++ b/examples/systems_of_equations/systems_of_equations_ex7/Makefile.in @@ -472,11 +472,18 @@ HDF5_DIR = @HDF5_DIR@ HDF5_LDFLAGS = @HDF5_LDFLAGS@ HDF5_LIBS = @HDF5_LIBS@ HDF5_PREFIX = @HDF5_PREFIX@ +HIPCC = @HIPCC@ +ICPX = @ICPX@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +KOKKOS_CPPFLAGS = @KOKKOS_CPPFLAGS@ +KOKKOS_CXX = @KOKKOS_CXX@ +KOKKOS_CXXFLAGS = @KOKKOS_CXXFLAGS@ +KOKKOS_LDFLAGS = @KOKKOS_LDFLAGS@ +KOKKOS_LIBS = @KOKKOS_LIBS@ LASPACK_INCLUDE = @LASPACK_INCLUDE@ LASPACK_LIB = @LASPACK_LIB@ LD = @LD@ @@ -524,6 +531,7 @@ NODEPRECATEDFLAG = @NODEPRECATEDFLAG@ NOX_INCLUDES = @NOX_INCLUDES@ NOX_LIBS = @NOX_LIBS@ NOX_MAKEFILE_EXPORT = @NOX_MAKEFILE_EXPORT@ +NVCC = @NVCC@ NVTX_INCLUDE = @NVTX_INCLUDE@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ diff --git a/examples/systems_of_equations/systems_of_equations_ex8/Makefile.in b/examples/systems_of_equations/systems_of_equations_ex8/Makefile.in index abcd909b40d..e5c7279beb3 100644 --- a/examples/systems_of_equations/systems_of_equations_ex8/Makefile.in +++ b/examples/systems_of_equations/systems_of_equations_ex8/Makefile.in @@ -510,11 +510,18 @@ HDF5_DIR = @HDF5_DIR@ HDF5_LDFLAGS = @HDF5_LDFLAGS@ HDF5_LIBS = @HDF5_LIBS@ HDF5_PREFIX = @HDF5_PREFIX@ +HIPCC = @HIPCC@ +ICPX = @ICPX@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +KOKKOS_CPPFLAGS = @KOKKOS_CPPFLAGS@ +KOKKOS_CXX = @KOKKOS_CXX@ +KOKKOS_CXXFLAGS = @KOKKOS_CXXFLAGS@ +KOKKOS_LDFLAGS = @KOKKOS_LDFLAGS@ +KOKKOS_LIBS = @KOKKOS_LIBS@ LASPACK_INCLUDE = @LASPACK_INCLUDE@ LASPACK_LIB = @LASPACK_LIB@ LD = @LD@ @@ -562,6 +569,7 @@ NODEPRECATEDFLAG = @NODEPRECATEDFLAG@ NOX_INCLUDES = @NOX_INCLUDES@ NOX_LIBS = @NOX_LIBS@ NOX_MAKEFILE_EXPORT = @NOX_MAKEFILE_EXPORT@ +NVCC = @NVCC@ NVTX_INCLUDE = @NVTX_INCLUDE@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ diff --git a/examples/systems_of_equations/systems_of_equations_ex9/Makefile.in b/examples/systems_of_equations/systems_of_equations_ex9/Makefile.in index a497c06f581..495f1b401f7 100644 --- a/examples/systems_of_equations/systems_of_equations_ex9/Makefile.in +++ b/examples/systems_of_equations/systems_of_equations_ex9/Makefile.in @@ -472,11 +472,18 @@ HDF5_DIR = @HDF5_DIR@ HDF5_LDFLAGS = @HDF5_LDFLAGS@ HDF5_LIBS = @HDF5_LIBS@ HDF5_PREFIX = @HDF5_PREFIX@ +HIPCC = @HIPCC@ +ICPX = @ICPX@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +KOKKOS_CPPFLAGS = @KOKKOS_CPPFLAGS@ +KOKKOS_CXX = @KOKKOS_CXX@ +KOKKOS_CXXFLAGS = @KOKKOS_CXXFLAGS@ +KOKKOS_LDFLAGS = @KOKKOS_LDFLAGS@ +KOKKOS_LIBS = @KOKKOS_LIBS@ LASPACK_INCLUDE = @LASPACK_INCLUDE@ LASPACK_LIB = @LASPACK_LIB@ LD = @LD@ @@ -524,6 +531,7 @@ NODEPRECATEDFLAG = @NODEPRECATEDFLAG@ NOX_INCLUDES = @NOX_INCLUDES@ NOX_LIBS = @NOX_LIBS@ NOX_MAKEFILE_EXPORT = @NOX_MAKEFILE_EXPORT@ +NVCC = @NVCC@ NVTX_INCLUDE = @NVTX_INCLUDE@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ diff --git a/examples/transient/transient_ex1/Makefile.in b/examples/transient/transient_ex1/Makefile.in index 288208b4c6c..cb1f7123cd7 100644 --- a/examples/transient/transient_ex1/Makefile.in +++ b/examples/transient/transient_ex1/Makefile.in @@ -480,11 +480,18 @@ HDF5_DIR = @HDF5_DIR@ HDF5_LDFLAGS = @HDF5_LDFLAGS@ HDF5_LIBS = @HDF5_LIBS@ HDF5_PREFIX = @HDF5_PREFIX@ +HIPCC = @HIPCC@ +ICPX = @ICPX@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +KOKKOS_CPPFLAGS = @KOKKOS_CPPFLAGS@ +KOKKOS_CXX = @KOKKOS_CXX@ +KOKKOS_CXXFLAGS = @KOKKOS_CXXFLAGS@ +KOKKOS_LDFLAGS = @KOKKOS_LDFLAGS@ +KOKKOS_LIBS = @KOKKOS_LIBS@ LASPACK_INCLUDE = @LASPACK_INCLUDE@ LASPACK_LIB = @LASPACK_LIB@ LD = @LD@ @@ -532,6 +539,7 @@ NODEPRECATEDFLAG = @NODEPRECATEDFLAG@ NOX_INCLUDES = @NOX_INCLUDES@ NOX_LIBS = @NOX_LIBS@ NOX_MAKEFILE_EXPORT = @NOX_MAKEFILE_EXPORT@ +NVCC = @NVCC@ NVTX_INCLUDE = @NVTX_INCLUDE@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ diff --git a/examples/transient/transient_ex2/Makefile.in b/examples/transient/transient_ex2/Makefile.in index bae2b2fcc21..3a5648a9715 100644 --- a/examples/transient/transient_ex2/Makefile.in +++ b/examples/transient/transient_ex2/Makefile.in @@ -466,11 +466,18 @@ HDF5_DIR = @HDF5_DIR@ HDF5_LDFLAGS = @HDF5_LDFLAGS@ HDF5_LIBS = @HDF5_LIBS@ HDF5_PREFIX = @HDF5_PREFIX@ +HIPCC = @HIPCC@ +ICPX = @ICPX@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +KOKKOS_CPPFLAGS = @KOKKOS_CPPFLAGS@ +KOKKOS_CXX = @KOKKOS_CXX@ +KOKKOS_CXXFLAGS = @KOKKOS_CXXFLAGS@ +KOKKOS_LDFLAGS = @KOKKOS_LDFLAGS@ +KOKKOS_LIBS = @KOKKOS_LIBS@ LASPACK_INCLUDE = @LASPACK_INCLUDE@ LASPACK_LIB = @LASPACK_LIB@ LD = @LD@ @@ -518,6 +525,7 @@ NODEPRECATEDFLAG = @NODEPRECATEDFLAG@ NOX_INCLUDES = @NOX_INCLUDES@ NOX_LIBS = @NOX_LIBS@ NOX_MAKEFILE_EXPORT = @NOX_MAKEFILE_EXPORT@ +NVCC = @NVCC@ NVTX_INCLUDE = @NVTX_INCLUDE@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ diff --git a/examples/transient/transient_ex3/Makefile.in b/examples/transient/transient_ex3/Makefile.in index 031ab6ae7a6..418ce7dfed8 100644 --- a/examples/transient/transient_ex3/Makefile.in +++ b/examples/transient/transient_ex3/Makefile.in @@ -514,11 +514,18 @@ HDF5_DIR = @HDF5_DIR@ HDF5_LDFLAGS = @HDF5_LDFLAGS@ HDF5_LIBS = @HDF5_LIBS@ HDF5_PREFIX = @HDF5_PREFIX@ +HIPCC = @HIPCC@ +ICPX = @ICPX@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +KOKKOS_CPPFLAGS = @KOKKOS_CPPFLAGS@ +KOKKOS_CXX = @KOKKOS_CXX@ +KOKKOS_CXXFLAGS = @KOKKOS_CXXFLAGS@ +KOKKOS_LDFLAGS = @KOKKOS_LDFLAGS@ +KOKKOS_LIBS = @KOKKOS_LIBS@ LASPACK_INCLUDE = @LASPACK_INCLUDE@ LASPACK_LIB = @LASPACK_LIB@ LD = @LD@ @@ -566,6 +573,7 @@ NODEPRECATEDFLAG = @NODEPRECATEDFLAG@ NOX_INCLUDES = @NOX_INCLUDES@ NOX_LIBS = @NOX_LIBS@ NOX_MAKEFILE_EXPORT = @NOX_MAKEFILE_EXPORT@ +NVCC = @NVCC@ NVTX_INCLUDE = @NVTX_INCLUDE@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ diff --git a/examples/vector_fe/vector_fe_ex1/Makefile.in b/examples/vector_fe/vector_fe_ex1/Makefile.in index c474401c7ad..66462dd6f04 100644 --- a/examples/vector_fe/vector_fe_ex1/Makefile.in +++ b/examples/vector_fe/vector_fe_ex1/Makefile.in @@ -478,11 +478,18 @@ HDF5_DIR = @HDF5_DIR@ HDF5_LDFLAGS = @HDF5_LDFLAGS@ HDF5_LIBS = @HDF5_LIBS@ HDF5_PREFIX = @HDF5_PREFIX@ +HIPCC = @HIPCC@ +ICPX = @ICPX@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +KOKKOS_CPPFLAGS = @KOKKOS_CPPFLAGS@ +KOKKOS_CXX = @KOKKOS_CXX@ +KOKKOS_CXXFLAGS = @KOKKOS_CXXFLAGS@ +KOKKOS_LDFLAGS = @KOKKOS_LDFLAGS@ +KOKKOS_LIBS = @KOKKOS_LIBS@ LASPACK_INCLUDE = @LASPACK_INCLUDE@ LASPACK_LIB = @LASPACK_LIB@ LD = @LD@ @@ -530,6 +537,7 @@ NODEPRECATEDFLAG = @NODEPRECATEDFLAG@ NOX_INCLUDES = @NOX_INCLUDES@ NOX_LIBS = @NOX_LIBS@ NOX_MAKEFILE_EXPORT = @NOX_MAKEFILE_EXPORT@ +NVCC = @NVCC@ NVTX_INCLUDE = @NVTX_INCLUDE@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ diff --git a/examples/vector_fe/vector_fe_ex10/Makefile.in b/examples/vector_fe/vector_fe_ex10/Makefile.in index c2a3aa0dd15..97e297f7568 100644 --- a/examples/vector_fe/vector_fe_ex10/Makefile.in +++ b/examples/vector_fe/vector_fe_ex10/Makefile.in @@ -489,11 +489,18 @@ HDF5_DIR = @HDF5_DIR@ HDF5_LDFLAGS = @HDF5_LDFLAGS@ HDF5_LIBS = @HDF5_LIBS@ HDF5_PREFIX = @HDF5_PREFIX@ +HIPCC = @HIPCC@ +ICPX = @ICPX@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +KOKKOS_CPPFLAGS = @KOKKOS_CPPFLAGS@ +KOKKOS_CXX = @KOKKOS_CXX@ +KOKKOS_CXXFLAGS = @KOKKOS_CXXFLAGS@ +KOKKOS_LDFLAGS = @KOKKOS_LDFLAGS@ +KOKKOS_LIBS = @KOKKOS_LIBS@ LASPACK_INCLUDE = @LASPACK_INCLUDE@ LASPACK_LIB = @LASPACK_LIB@ LD = @LD@ @@ -541,6 +548,7 @@ NODEPRECATEDFLAG = @NODEPRECATEDFLAG@ NOX_INCLUDES = @NOX_INCLUDES@ NOX_LIBS = @NOX_LIBS@ NOX_MAKEFILE_EXPORT = @NOX_MAKEFILE_EXPORT@ +NVCC = @NVCC@ NVTX_INCLUDE = @NVTX_INCLUDE@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ diff --git a/examples/vector_fe/vector_fe_ex2/Makefile.in b/examples/vector_fe/vector_fe_ex2/Makefile.in index 1aca800f63c..ad09c3743fa 100644 --- a/examples/vector_fe/vector_fe_ex2/Makefile.in +++ b/examples/vector_fe/vector_fe_ex2/Makefile.in @@ -504,11 +504,18 @@ HDF5_DIR = @HDF5_DIR@ HDF5_LDFLAGS = @HDF5_LDFLAGS@ HDF5_LIBS = @HDF5_LIBS@ HDF5_PREFIX = @HDF5_PREFIX@ +HIPCC = @HIPCC@ +ICPX = @ICPX@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +KOKKOS_CPPFLAGS = @KOKKOS_CPPFLAGS@ +KOKKOS_CXX = @KOKKOS_CXX@ +KOKKOS_CXXFLAGS = @KOKKOS_CXXFLAGS@ +KOKKOS_LDFLAGS = @KOKKOS_LDFLAGS@ +KOKKOS_LIBS = @KOKKOS_LIBS@ LASPACK_INCLUDE = @LASPACK_INCLUDE@ LASPACK_LIB = @LASPACK_LIB@ LD = @LD@ @@ -556,6 +563,7 @@ NODEPRECATEDFLAG = @NODEPRECATEDFLAG@ NOX_INCLUDES = @NOX_INCLUDES@ NOX_LIBS = @NOX_LIBS@ NOX_MAKEFILE_EXPORT = @NOX_MAKEFILE_EXPORT@ +NVCC = @NVCC@ NVTX_INCLUDE = @NVTX_INCLUDE@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ diff --git a/examples/vector_fe/vector_fe_ex3/Makefile.in b/examples/vector_fe/vector_fe_ex3/Makefile.in index b033d436f7d..5994d90a2bf 100644 --- a/examples/vector_fe/vector_fe_ex3/Makefile.in +++ b/examples/vector_fe/vector_fe_ex3/Makefile.in @@ -504,11 +504,18 @@ HDF5_DIR = @HDF5_DIR@ HDF5_LDFLAGS = @HDF5_LDFLAGS@ HDF5_LIBS = @HDF5_LIBS@ HDF5_PREFIX = @HDF5_PREFIX@ +HIPCC = @HIPCC@ +ICPX = @ICPX@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +KOKKOS_CPPFLAGS = @KOKKOS_CPPFLAGS@ +KOKKOS_CXX = @KOKKOS_CXX@ +KOKKOS_CXXFLAGS = @KOKKOS_CXXFLAGS@ +KOKKOS_LDFLAGS = @KOKKOS_LDFLAGS@ +KOKKOS_LIBS = @KOKKOS_LIBS@ LASPACK_INCLUDE = @LASPACK_INCLUDE@ LASPACK_LIB = @LASPACK_LIB@ LD = @LD@ @@ -556,6 +563,7 @@ NODEPRECATEDFLAG = @NODEPRECATEDFLAG@ NOX_INCLUDES = @NOX_INCLUDES@ NOX_LIBS = @NOX_LIBS@ NOX_MAKEFILE_EXPORT = @NOX_MAKEFILE_EXPORT@ +NVCC = @NVCC@ NVTX_INCLUDE = @NVTX_INCLUDE@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ diff --git a/examples/vector_fe/vector_fe_ex4/Makefile.in b/examples/vector_fe/vector_fe_ex4/Makefile.in index b2320fc3c58..91be49794d4 100644 --- a/examples/vector_fe/vector_fe_ex4/Makefile.in +++ b/examples/vector_fe/vector_fe_ex4/Makefile.in @@ -504,11 +504,18 @@ HDF5_DIR = @HDF5_DIR@ HDF5_LDFLAGS = @HDF5_LDFLAGS@ HDF5_LIBS = @HDF5_LIBS@ HDF5_PREFIX = @HDF5_PREFIX@ +HIPCC = @HIPCC@ +ICPX = @ICPX@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +KOKKOS_CPPFLAGS = @KOKKOS_CPPFLAGS@ +KOKKOS_CXX = @KOKKOS_CXX@ +KOKKOS_CXXFLAGS = @KOKKOS_CXXFLAGS@ +KOKKOS_LDFLAGS = @KOKKOS_LDFLAGS@ +KOKKOS_LIBS = @KOKKOS_LIBS@ LASPACK_INCLUDE = @LASPACK_INCLUDE@ LASPACK_LIB = @LASPACK_LIB@ LD = @LD@ @@ -556,6 +563,7 @@ NODEPRECATEDFLAG = @NODEPRECATEDFLAG@ NOX_INCLUDES = @NOX_INCLUDES@ NOX_LIBS = @NOX_LIBS@ NOX_MAKEFILE_EXPORT = @NOX_MAKEFILE_EXPORT@ +NVCC = @NVCC@ NVTX_INCLUDE = @NVTX_INCLUDE@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ diff --git a/examples/vector_fe/vector_fe_ex5/Makefile.in b/examples/vector_fe/vector_fe_ex5/Makefile.in index 21a71638e6e..62b45033645 100644 --- a/examples/vector_fe/vector_fe_ex5/Makefile.in +++ b/examples/vector_fe/vector_fe_ex5/Makefile.in @@ -491,11 +491,18 @@ HDF5_DIR = @HDF5_DIR@ HDF5_LDFLAGS = @HDF5_LDFLAGS@ HDF5_LIBS = @HDF5_LIBS@ HDF5_PREFIX = @HDF5_PREFIX@ +HIPCC = @HIPCC@ +ICPX = @ICPX@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +KOKKOS_CPPFLAGS = @KOKKOS_CPPFLAGS@ +KOKKOS_CXX = @KOKKOS_CXX@ +KOKKOS_CXXFLAGS = @KOKKOS_CXXFLAGS@ +KOKKOS_LDFLAGS = @KOKKOS_LDFLAGS@ +KOKKOS_LIBS = @KOKKOS_LIBS@ LASPACK_INCLUDE = @LASPACK_INCLUDE@ LASPACK_LIB = @LASPACK_LIB@ LD = @LD@ @@ -543,6 +550,7 @@ NODEPRECATEDFLAG = @NODEPRECATEDFLAG@ NOX_INCLUDES = @NOX_INCLUDES@ NOX_LIBS = @NOX_LIBS@ NOX_MAKEFILE_EXPORT = @NOX_MAKEFILE_EXPORT@ +NVCC = @NVCC@ NVTX_INCLUDE = @NVTX_INCLUDE@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ diff --git a/examples/vector_fe/vector_fe_ex6/Makefile.in b/examples/vector_fe/vector_fe_ex6/Makefile.in index cb550f280e4..d092712abe2 100644 --- a/examples/vector_fe/vector_fe_ex6/Makefile.in +++ b/examples/vector_fe/vector_fe_ex6/Makefile.in @@ -489,11 +489,18 @@ HDF5_DIR = @HDF5_DIR@ HDF5_LDFLAGS = @HDF5_LDFLAGS@ HDF5_LIBS = @HDF5_LIBS@ HDF5_PREFIX = @HDF5_PREFIX@ +HIPCC = @HIPCC@ +ICPX = @ICPX@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +KOKKOS_CPPFLAGS = @KOKKOS_CPPFLAGS@ +KOKKOS_CXX = @KOKKOS_CXX@ +KOKKOS_CXXFLAGS = @KOKKOS_CXXFLAGS@ +KOKKOS_LDFLAGS = @KOKKOS_LDFLAGS@ +KOKKOS_LIBS = @KOKKOS_LIBS@ LASPACK_INCLUDE = @LASPACK_INCLUDE@ LASPACK_LIB = @LASPACK_LIB@ LD = @LD@ @@ -541,6 +548,7 @@ NODEPRECATEDFLAG = @NODEPRECATEDFLAG@ NOX_INCLUDES = @NOX_INCLUDES@ NOX_LIBS = @NOX_LIBS@ NOX_MAKEFILE_EXPORT = @NOX_MAKEFILE_EXPORT@ +NVCC = @NVCC@ NVTX_INCLUDE = @NVTX_INCLUDE@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ diff --git a/examples/vector_fe/vector_fe_ex7/Makefile.in b/examples/vector_fe/vector_fe_ex7/Makefile.in index 6ae32888b36..65dce847a17 100644 --- a/examples/vector_fe/vector_fe_ex7/Makefile.in +++ b/examples/vector_fe/vector_fe_ex7/Makefile.in @@ -489,11 +489,18 @@ HDF5_DIR = @HDF5_DIR@ HDF5_LDFLAGS = @HDF5_LDFLAGS@ HDF5_LIBS = @HDF5_LIBS@ HDF5_PREFIX = @HDF5_PREFIX@ +HIPCC = @HIPCC@ +ICPX = @ICPX@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +KOKKOS_CPPFLAGS = @KOKKOS_CPPFLAGS@ +KOKKOS_CXX = @KOKKOS_CXX@ +KOKKOS_CXXFLAGS = @KOKKOS_CXXFLAGS@ +KOKKOS_LDFLAGS = @KOKKOS_LDFLAGS@ +KOKKOS_LIBS = @KOKKOS_LIBS@ LASPACK_INCLUDE = @LASPACK_INCLUDE@ LASPACK_LIB = @LASPACK_LIB@ LD = @LD@ @@ -541,6 +548,7 @@ NODEPRECATEDFLAG = @NODEPRECATEDFLAG@ NOX_INCLUDES = @NOX_INCLUDES@ NOX_LIBS = @NOX_LIBS@ NOX_MAKEFILE_EXPORT = @NOX_MAKEFILE_EXPORT@ +NVCC = @NVCC@ NVTX_INCLUDE = @NVTX_INCLUDE@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ diff --git a/examples/vector_fe/vector_fe_ex8/Makefile.in b/examples/vector_fe/vector_fe_ex8/Makefile.in index fe881610825..d5c542a648e 100644 --- a/examples/vector_fe/vector_fe_ex8/Makefile.in +++ b/examples/vector_fe/vector_fe_ex8/Makefile.in @@ -489,11 +489,18 @@ HDF5_DIR = @HDF5_DIR@ HDF5_LDFLAGS = @HDF5_LDFLAGS@ HDF5_LIBS = @HDF5_LIBS@ HDF5_PREFIX = @HDF5_PREFIX@ +HIPCC = @HIPCC@ +ICPX = @ICPX@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +KOKKOS_CPPFLAGS = @KOKKOS_CPPFLAGS@ +KOKKOS_CXX = @KOKKOS_CXX@ +KOKKOS_CXXFLAGS = @KOKKOS_CXXFLAGS@ +KOKKOS_LDFLAGS = @KOKKOS_LDFLAGS@ +KOKKOS_LIBS = @KOKKOS_LIBS@ LASPACK_INCLUDE = @LASPACK_INCLUDE@ LASPACK_LIB = @LASPACK_LIB@ LD = @LD@ @@ -541,6 +548,7 @@ NODEPRECATEDFLAG = @NODEPRECATEDFLAG@ NOX_INCLUDES = @NOX_INCLUDES@ NOX_LIBS = @NOX_LIBS@ NOX_MAKEFILE_EXPORT = @NOX_MAKEFILE_EXPORT@ +NVCC = @NVCC@ NVTX_INCLUDE = @NVTX_INCLUDE@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ diff --git a/examples/vector_fe/vector_fe_ex9/Makefile.in b/examples/vector_fe/vector_fe_ex9/Makefile.in index 34e5092c976..0e362c7a3f8 100644 --- a/examples/vector_fe/vector_fe_ex9/Makefile.in +++ b/examples/vector_fe/vector_fe_ex9/Makefile.in @@ -499,11 +499,18 @@ HDF5_DIR = @HDF5_DIR@ HDF5_LDFLAGS = @HDF5_LDFLAGS@ HDF5_LIBS = @HDF5_LIBS@ HDF5_PREFIX = @HDF5_PREFIX@ +HIPCC = @HIPCC@ +ICPX = @ICPX@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +KOKKOS_CPPFLAGS = @KOKKOS_CPPFLAGS@ +KOKKOS_CXX = @KOKKOS_CXX@ +KOKKOS_CXXFLAGS = @KOKKOS_CXXFLAGS@ +KOKKOS_LDFLAGS = @KOKKOS_LDFLAGS@ +KOKKOS_LIBS = @KOKKOS_LIBS@ LASPACK_INCLUDE = @LASPACK_INCLUDE@ LASPACK_LIB = @LASPACK_LIB@ LD = @LD@ @@ -551,6 +558,7 @@ NODEPRECATEDFLAG = @NODEPRECATEDFLAG@ NOX_INCLUDES = @NOX_INCLUDES@ NOX_LIBS = @NOX_LIBS@ NOX_MAKEFILE_EXPORT = @NOX_MAKEFILE_EXPORT@ +NVCC = @NVCC@ NVTX_INCLUDE = @NVTX_INCLUDE@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ diff --git a/include/Makefile.in b/include/Makefile.in index 15e2ded0d9e..a68272a0d25 100644 --- a/include/Makefile.in +++ b/include/Makefile.in @@ -380,11 +380,18 @@ HDF5_DIR = @HDF5_DIR@ HDF5_LDFLAGS = @HDF5_LDFLAGS@ HDF5_LIBS = @HDF5_LIBS@ HDF5_PREFIX = @HDF5_PREFIX@ +HIPCC = @HIPCC@ +ICPX = @ICPX@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +KOKKOS_CPPFLAGS = @KOKKOS_CPPFLAGS@ +KOKKOS_CXX = @KOKKOS_CXX@ +KOKKOS_CXXFLAGS = @KOKKOS_CXXFLAGS@ +KOKKOS_LDFLAGS = @KOKKOS_LDFLAGS@ +KOKKOS_LIBS = @KOKKOS_LIBS@ LASPACK_INCLUDE = @LASPACK_INCLUDE@ LASPACK_LIB = @LASPACK_LIB@ LD = @LD@ @@ -432,6 +439,7 @@ NODEPRECATEDFLAG = @NODEPRECATEDFLAG@ NOX_INCLUDES = @NOX_INCLUDES@ NOX_LIBS = @NOX_LIBS@ NOX_MAKEFILE_EXPORT = @NOX_MAKEFILE_EXPORT@ +NVCC = @NVCC@ NVTX_INCLUDE = @NVTX_INCLUDE@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ @@ -635,6 +643,7 @@ include_HEADERS = \ base/libmesh_abort.h \ base/libmesh_base.h \ base/libmesh_common.h \ + base/libmesh_device.h \ base/libmesh_documentation.h \ base/libmesh_exceptions.h \ base/libmesh_logging.h \ @@ -781,6 +790,11 @@ include_HEADERS = \ geom/sphere.h \ geom/stored_range.h \ geom/surface.h \ + gpu/kokkos_linalg_base.h \ + gpu/kokkos_storage.h \ + gpu/kokkos_storage_policy.h \ + gpu/kokkos_tensor_ops.h \ + gpu/kokkos_vector_ops.h \ ghosting/default_coupling.h \ ghosting/ghost_point_neighbors.h \ ghosting/ghosting_functor.h \ diff --git a/include/libmesh/Makefile.in b/include/libmesh/Makefile.in index 0e95a2a8ef6..c2ff4cf1b7c 100644 --- a/include/libmesh/Makefile.in +++ b/include/libmesh/Makefile.in @@ -309,11 +309,18 @@ HDF5_DIR = @HDF5_DIR@ HDF5_LDFLAGS = @HDF5_LDFLAGS@ HDF5_LIBS = @HDF5_LIBS@ HDF5_PREFIX = @HDF5_PREFIX@ +HIPCC = @HIPCC@ +ICPX = @ICPX@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +KOKKOS_CPPFLAGS = @KOKKOS_CPPFLAGS@ +KOKKOS_CXX = @KOKKOS_CXX@ +KOKKOS_CXXFLAGS = @KOKKOS_CXXFLAGS@ +KOKKOS_LDFLAGS = @KOKKOS_LDFLAGS@ +KOKKOS_LIBS = @KOKKOS_LIBS@ LASPACK_INCLUDE = @LASPACK_INCLUDE@ LASPACK_LIB = @LASPACK_LIB@ LD = @LD@ @@ -361,6 +368,7 @@ NODEPRECATEDFLAG = @NODEPRECATEDFLAG@ NOX_INCLUDES = @NOX_INCLUDES@ NOX_LIBS = @NOX_LIBS@ NOX_MAKEFILE_EXPORT = @NOX_MAKEFILE_EXPORT@ +NVCC = @NVCC@ NVTX_INCLUDE = @NVTX_INCLUDE@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ @@ -530,10 +538,11 @@ EXTRA_DIST = rebuild_makefile.sh BUILT_SOURCES = dirichlet_boundaries.h dof_map.h dof_map_base.h \ dof_object.h factory.h float128_shims.h getpot.h id_types.h \ libmesh.h libmesh_abort.h libmesh_augment_std_namespace.h \ - libmesh_base.h libmesh_common.h libmesh_documentation.h \ - libmesh_exceptions.h libmesh_logging.h libmesh_singleton.h \ - libmesh_version.h multi_predicates.h periodic_boundaries.h \ - periodic_boundary.h periodic_boundary_base.h print_trace.h \ + libmesh_base.h libmesh_common.h libmesh_device.h \ + libmesh_documentation.h libmesh_exceptions.h libmesh_logging.h \ + libmesh_singleton.h libmesh_version.h multi_predicates.h \ + periodic_boundaries.h periodic_boundary.h \ + periodic_boundary_base.h print_trace.h \ reference_counted_object.h reference_counter.h \ single_predicates.h sparsity_pattern.h variable.h \ variant_filter_iterator.h enum_convergence_flags.h \ @@ -580,7 +589,9 @@ BUILT_SOURCES = dirichlet_boundaries.h dof_map.h dof_map_base.h \ remote_elem.h sphere.h stored_range.h surface.h \ default_coupling.h ghost_point_neighbors.h ghosting_functor.h \ non_manifold_coupling.h overlap_coupling.h \ - point_neighbor_coupling.h sibling_coupling.h abaqus_io.h \ + point_neighbor_coupling.h sibling_coupling.h \ + kokkos_linalg_base.h kokkos_storage.h kokkos_storage_policy.h \ + kokkos_tensor_ops.h kokkos_vector_ops.h abaqus_io.h \ boundary_info.h boundary_mesh.h checkpoint_io.h \ distributed_mesh.h dyna_io.h ensight_io.h exodusII_io.h \ exodusII_io_helper.h exodus_header_info.h fro_io.h gmsh_io.h \ @@ -992,6 +1003,9 @@ libmesh_base.h: $(top_srcdir)/include/base/libmesh_base.h libmesh_common.h: $(top_srcdir)/include/base/libmesh_common.h $(AM_V_GEN)rm -f $@ && $(LN_S) -f $< $@ +libmesh_device.h: $(top_srcdir)/include/base/libmesh_device.h + $(AM_V_GEN)rm -f $@ && $(LN_S) -f $< $@ + libmesh_documentation.h: $(top_srcdir)/include/base/libmesh_documentation.h $(AM_V_GEN)rm -f $@ && $(LN_S) -f $< $@ @@ -1451,6 +1465,21 @@ point_neighbor_coupling.h: $(top_srcdir)/include/ghosting/point_neighbor_couplin sibling_coupling.h: $(top_srcdir)/include/ghosting/sibling_coupling.h $(AM_V_GEN)rm -f $@ && $(LN_S) -f $< $@ +kokkos_linalg_base.h: $(top_srcdir)/include/gpu/kokkos_linalg_base.h + $(AM_V_GEN)rm -f $@ && $(LN_S) -f $< $@ + +kokkos_storage.h: $(top_srcdir)/include/gpu/kokkos_storage.h + $(AM_V_GEN)rm -f $@ && $(LN_S) -f $< $@ + +kokkos_storage_policy.h: $(top_srcdir)/include/gpu/kokkos_storage_policy.h + $(AM_V_GEN)rm -f $@ && $(LN_S) -f $< $@ + +kokkos_tensor_ops.h: $(top_srcdir)/include/gpu/kokkos_tensor_ops.h + $(AM_V_GEN)rm -f $@ && $(LN_S) -f $< $@ + +kokkos_vector_ops.h: $(top_srcdir)/include/gpu/kokkos_vector_ops.h + $(AM_V_GEN)rm -f $@ && $(LN_S) -f $< $@ + abaqus_io.h: $(top_srcdir)/include/mesh/abaqus_io.h $(AM_V_GEN)rm -f $@ && $(LN_S) -f $< $@ diff --git a/tests/Makefile.in b/tests/Makefile.in index 59ed2e7641e..d94f4b9384d 100644 --- a/tests/Makefile.in +++ b/tests/Makefile.in @@ -95,25 +95,31 @@ target_triplet = @target@ @LIBMESH_ENABLE_FPARSER_TRUE@ fparser/autodiff.C check_PROGRAMS = $(am__EXEEXT_1) $(am__EXEEXT_2) $(am__EXEEXT_3) \ - $(am__EXEEXT_4) $(am__EXEEXT_5) $(am__EXEEXT_6) + $(am__EXEEXT_4) $(am__EXEEXT_5) $(am__EXEEXT_6) \ + $(am__EXEEXT_7) +TESTS = $(am__EXEEXT_1) $(am__append_11) +@LIBMESH_ENABLE_KOKKOS_TRUE@am__append_2 = -I$(top_srcdir)/include $(KOKKOS_CPPFLAGS) +@LIBMESH_ENABLE_KOKKOS_TRUE@am__append_3 = kokkos_vector_ops_oracle_unit kokkos_tensor_ops_oracle_unit +@LIBMESH_ENABLE_KOKKOS_TRUE@am__append_4 = kokkos_vector_ops_oracle_unit kokkos_tensor_ops_oracle_unit # our GLIBC debugging preprocessor flags seem to potentially conflict # with libcppunit binaries. Some cppunit versions work fine for us, # others segfault and/or hang. By default we will not run # GLIBCXX-debugging builds with cppunit unless specifically # configured to. -@ACSM_ENABLE_GLIBCXX_DEBUGGING_CPPUNIT_TRUE@@ACSM_ENABLE_GLIBCXX_DEBUGGING_TRUE@@LIBMESH_DBG_MODE_TRUE@@LIBMESH_ENABLE_CPPUNIT_TRUE@am__append_2 = unit_tests-dbg -@ACSM_ENABLE_GLIBCXX_DEBUGGING_FALSE@@LIBMESH_DBG_MODE_TRUE@@LIBMESH_ENABLE_CPPUNIT_TRUE@am__append_3 = unit_tests-dbg -@LIBMESH_DEVEL_MODE_TRUE@@LIBMESH_ENABLE_CPPUNIT_TRUE@am__append_4 = unit_tests-devel -@LIBMESH_ENABLE_CPPUNIT_TRUE@@LIBMESH_PROF_MODE_TRUE@am__append_5 = unit_tests-prof -@LIBMESH_ENABLE_CPPUNIT_TRUE@@LIBMESH_OPROF_MODE_TRUE@am__append_6 = unit_tests-oprof -@LIBMESH_ENABLE_CPPUNIT_TRUE@@LIBMESH_OPT_MODE_TRUE@am__append_7 = unit_tests-opt -@LIBMESH_VPATH_BUILD_TRUE@am__append_8 = .linkstamp +@ACSM_ENABLE_GLIBCXX_DEBUGGING_CPPUNIT_TRUE@@ACSM_ENABLE_GLIBCXX_DEBUGGING_TRUE@@LIBMESH_DBG_MODE_TRUE@@LIBMESH_ENABLE_CPPUNIT_TRUE@am__append_5 = unit_tests-dbg +@ACSM_ENABLE_GLIBCXX_DEBUGGING_FALSE@@LIBMESH_DBG_MODE_TRUE@@LIBMESH_ENABLE_CPPUNIT_TRUE@am__append_6 = unit_tests-dbg +@LIBMESH_DEVEL_MODE_TRUE@@LIBMESH_ENABLE_CPPUNIT_TRUE@am__append_7 = unit_tests-devel +@LIBMESH_ENABLE_CPPUNIT_TRUE@@LIBMESH_PROF_MODE_TRUE@am__append_8 = unit_tests-prof +@LIBMESH_ENABLE_CPPUNIT_TRUE@@LIBMESH_OPROF_MODE_TRUE@am__append_9 = unit_tests-oprof +@LIBMESH_ENABLE_CPPUNIT_TRUE@@LIBMESH_OPT_MODE_TRUE@am__append_10 = unit_tests-opt +@LIBMESH_ENABLE_CPPUNIT_TRUE@am__append_11 = run_unit_tests.sh +@LIBMESH_VPATH_BUILD_TRUE@am__append_12 = .linkstamp ###################################################################### # # Don't leave code coverage outputs lying around -@CODE_COVERAGE_ENABLED_TRUE@am__append_9 = */*.gcda */*.gcno +@CODE_COVERAGE_ENABLED_TRUE@am__append_13 = */*.gcda */*.gcno subdir = tests ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = \ @@ -182,12 +188,34 @@ mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/include/libmesh_config.h.tmp CONFIG_CLEAN_FILES = run_unit_tests.sh CONFIG_CLEAN_VPATH_FILES = -@ACSM_ENABLE_GLIBCXX_DEBUGGING_CPPUNIT_TRUE@@ACSM_ENABLE_GLIBCXX_DEBUGGING_TRUE@@LIBMESH_DBG_MODE_TRUE@@LIBMESH_ENABLE_CPPUNIT_TRUE@am__EXEEXT_1 = unit_tests-dbg$(EXEEXT) -@ACSM_ENABLE_GLIBCXX_DEBUGGING_FALSE@@LIBMESH_DBG_MODE_TRUE@@LIBMESH_ENABLE_CPPUNIT_TRUE@am__EXEEXT_2 = unit_tests-dbg$(EXEEXT) -@LIBMESH_DEVEL_MODE_TRUE@@LIBMESH_ENABLE_CPPUNIT_TRUE@am__EXEEXT_3 = unit_tests-devel$(EXEEXT) -@LIBMESH_ENABLE_CPPUNIT_TRUE@@LIBMESH_PROF_MODE_TRUE@am__EXEEXT_4 = unit_tests-prof$(EXEEXT) -@LIBMESH_ENABLE_CPPUNIT_TRUE@@LIBMESH_OPROF_MODE_TRUE@am__EXEEXT_5 = unit_tests-oprof$(EXEEXT) -@LIBMESH_ENABLE_CPPUNIT_TRUE@@LIBMESH_OPT_MODE_TRUE@am__EXEEXT_6 = unit_tests-opt$(EXEEXT) +@LIBMESH_ENABLE_KOKKOS_TRUE@am__EXEEXT_1 = kokkos_vector_ops_oracle_unit$(EXEEXT) \ +@LIBMESH_ENABLE_KOKKOS_TRUE@ kokkos_tensor_ops_oracle_unit$(EXEEXT) +@ACSM_ENABLE_GLIBCXX_DEBUGGING_CPPUNIT_TRUE@@ACSM_ENABLE_GLIBCXX_DEBUGGING_TRUE@@LIBMESH_DBG_MODE_TRUE@@LIBMESH_ENABLE_CPPUNIT_TRUE@am__EXEEXT_2 = unit_tests-dbg$(EXEEXT) +@ACSM_ENABLE_GLIBCXX_DEBUGGING_FALSE@@LIBMESH_DBG_MODE_TRUE@@LIBMESH_ENABLE_CPPUNIT_TRUE@am__EXEEXT_3 = unit_tests-dbg$(EXEEXT) +@LIBMESH_DEVEL_MODE_TRUE@@LIBMESH_ENABLE_CPPUNIT_TRUE@am__EXEEXT_4 = unit_tests-devel$(EXEEXT) +@LIBMESH_ENABLE_CPPUNIT_TRUE@@LIBMESH_PROF_MODE_TRUE@am__EXEEXT_5 = unit_tests-prof$(EXEEXT) +@LIBMESH_ENABLE_CPPUNIT_TRUE@@LIBMESH_OPROF_MODE_TRUE@am__EXEEXT_6 = unit_tests-oprof$(EXEEXT) +@LIBMESH_ENABLE_CPPUNIT_TRUE@@LIBMESH_OPT_MODE_TRUE@am__EXEEXT_7 = unit_tests-opt$(EXEEXT) +am__kokkos_tensor_ops_oracle_unit_SOURCES_DIST = \ + numerics/kokkos_tensor_ops_oracle_test.K +am__dirstamp = $(am__leading_dot)dirstamp +@LIBMESH_ENABLE_KOKKOS_TRUE@am_kokkos_tensor_ops_oracle_unit_OBJECTS = numerics/kokkos_tensor_ops_oracle_test.$(OBJEXT) +kokkos_tensor_ops_oracle_unit_OBJECTS = \ + $(am_kokkos_tensor_ops_oracle_unit_OBJECTS) +am__DEPENDENCIES_1 = +@LIBMESH_ENABLE_KOKKOS_TRUE@kokkos_tensor_ops_oracle_unit_DEPENDENCIES = \ +@LIBMESH_ENABLE_KOKKOS_TRUE@ $(top_builddir)/libmesh_opt.la \ +@LIBMESH_ENABLE_KOKKOS_TRUE@ $(am__DEPENDENCIES_1) \ +@LIBMESH_ENABLE_KOKKOS_TRUE@ $(am__DEPENDENCIES_1) +am__kokkos_vector_ops_oracle_unit_SOURCES_DIST = \ + numerics/kokkos_vector_ops_oracle_test.K +@LIBMESH_ENABLE_KOKKOS_TRUE@am_kokkos_vector_ops_oracle_unit_OBJECTS = numerics/kokkos_vector_ops_oracle_test.$(OBJEXT) +kokkos_vector_ops_oracle_unit_OBJECTS = \ + $(am_kokkos_vector_ops_oracle_unit_OBJECTS) +@LIBMESH_ENABLE_KOKKOS_TRUE@kokkos_vector_ops_oracle_unit_DEPENDENCIES = \ +@LIBMESH_ENABLE_KOKKOS_TRUE@ $(top_builddir)/libmesh_opt.la \ +@LIBMESH_ENABLE_KOKKOS_TRUE@ $(am__DEPENDENCIES_1) \ +@LIBMESH_ENABLE_KOKKOS_TRUE@ $(am__DEPENDENCIES_1) am__unit_tests_dbg_SOURCES_DIST = driver.C libmesh_cppunit.h \ stream_redirector.h test_comm.h base/dof_object_test.h \ base/dof_map_test.C base/default_coupling_test.C \ @@ -262,7 +290,6 @@ am__unit_tests_dbg_SOURCES_DIST = driver.C libmesh_cppunit.h \ utils/parameters_test.C utils/point_locator_test.C \ utils/rb_parameters_test.C utils/transparent_comparator.C \ utils/vectormap_test.C utils/xdr_test.C fparser/autodiff.C -am__dirstamp = $(am__leading_dot)dirstamp @LIBMESH_ENABLE_FPARSER_TRUE@am__objects_1 = fparser/unit_tests_dbg-autodiff.$(OBJEXT) am__objects_2 = unit_tests_dbg-driver.$(OBJEXT) \ base/unit_tests_dbg-dof_map_test.$(OBJEXT) \ @@ -1860,10 +1887,14 @@ AM_V_CCLD = $(am__v_CCLD_@AM_V@) am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@) am__v_CCLD_0 = @echo " CCLD " $@; am__v_CCLD_1 = -SOURCES = $(unit_tests_dbg_SOURCES) $(unit_tests_devel_SOURCES) \ +SOURCES = $(kokkos_tensor_ops_oracle_unit_SOURCES) \ + $(kokkos_vector_ops_oracle_unit_SOURCES) \ + $(unit_tests_dbg_SOURCES) $(unit_tests_devel_SOURCES) \ $(unit_tests_oprof_SOURCES) $(unit_tests_opt_SOURCES) \ $(unit_tests_prof_SOURCES) -DIST_SOURCES = $(am__unit_tests_dbg_SOURCES_DIST) \ +DIST_SOURCES = $(am__kokkos_tensor_ops_oracle_unit_SOURCES_DIST) \ + $(am__kokkos_vector_ops_oracle_unit_SOURCES_DIST) \ + $(am__unit_tests_dbg_SOURCES_DIST) \ $(am__unit_tests_devel_SOURCES_DIST) \ $(am__unit_tests_oprof_SOURCES_DIST) \ $(am__unit_tests_opt_SOURCES_DIST) \ @@ -2064,11 +2095,18 @@ HDF5_DIR = @HDF5_DIR@ HDF5_LDFLAGS = @HDF5_LDFLAGS@ HDF5_LIBS = @HDF5_LIBS@ HDF5_PREFIX = @HDF5_PREFIX@ +HIPCC = @HIPCC@ +ICPX = @ICPX@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +KOKKOS_CPPFLAGS = @KOKKOS_CPPFLAGS@ +KOKKOS_CXX = @KOKKOS_CXX@ +KOKKOS_CXXFLAGS = @KOKKOS_CXXFLAGS@ +KOKKOS_LDFLAGS = @KOKKOS_LDFLAGS@ +KOKKOS_LIBS = @KOKKOS_LIBS@ LASPACK_INCLUDE = @LASPACK_INCLUDE@ LASPACK_LIB = @LASPACK_LIB@ LD = @LD@ @@ -2116,6 +2154,7 @@ NODEPRECATEDFLAG = @NODEPRECATEDFLAG@ NOX_INCLUDES = @NOX_INCLUDES@ NOX_LIBS = @NOX_LIBS@ NOX_MAKEFILE_EXPORT = @NOX_MAKEFILE_EXPORT@ +NVCC = @NVCC@ NVTX_INCLUDE = @NVTX_INCLUDE@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ @@ -2288,6 +2327,7 @@ AM_CPPFLAGS = $(libmesh_optional_INCLUDES) -I$(top_builddir)/include \ -DLIBMESH_IS_UNIT_TESTING AM_LDFLAGS = $(libmesh_LDFLAGS) $(libmesh_contrib_LDFLAGS) +KOKKOS_TEST_CPPFLAGS = $(am__append_2) unit_tests_sources = driver.C libmesh_cppunit.h stream_redirector.h \ test_comm.h base/dof_object_test.h base/dof_map_test.C \ base/default_coupling_test.C base/getpot_test.C \ @@ -2450,6 +2490,16 @@ unit_tests_data = $(data) # Why isn't this working automatically? EXTRA_DIST = $(data) +@LIBMESH_ENABLE_KOKKOS_TRUE@kokkos_vector_ops_oracle_unit_SOURCES = numerics/kokkos_vector_ops_oracle_test.K +@LIBMESH_ENABLE_KOKKOS_TRUE@kokkos_vector_ops_oracle_unit_CPPFLAGS = $(AM_CPPFLAGS) $(KOKKOS_TEST_CPPFLAGS) +@LIBMESH_ENABLE_KOKKOS_TRUE@kokkos_vector_ops_oracle_unit_CXXFLAGS = $(AM_CXXFLAGS) $(KOKKOS_CXXFLAGS) +@LIBMESH_ENABLE_KOKKOS_TRUE@kokkos_vector_ops_oracle_unit_LDFLAGS = $(AM_LDFLAGS) $(KOKKOS_LDFLAGS) +@LIBMESH_ENABLE_KOKKOS_TRUE@kokkos_vector_ops_oracle_unit_LDADD = $(top_builddir)/libmesh_opt.la $(KOKKOS_LIBS) $(libmesh_optional_LIBS) +@LIBMESH_ENABLE_KOKKOS_TRUE@kokkos_tensor_ops_oracle_unit_SOURCES = numerics/kokkos_tensor_ops_oracle_test.K +@LIBMESH_ENABLE_KOKKOS_TRUE@kokkos_tensor_ops_oracle_unit_CPPFLAGS = $(AM_CPPFLAGS) $(KOKKOS_TEST_CPPFLAGS) +@LIBMESH_ENABLE_KOKKOS_TRUE@kokkos_tensor_ops_oracle_unit_CXXFLAGS = $(AM_CXXFLAGS) $(KOKKOS_CXXFLAGS) +@LIBMESH_ENABLE_KOKKOS_TRUE@kokkos_tensor_ops_oracle_unit_LDFLAGS = $(AM_LDFLAGS) $(KOKKOS_LDFLAGS) +@LIBMESH_ENABLE_KOKKOS_TRUE@kokkos_tensor_ops_oracle_unit_LDADD = $(top_builddir)/libmesh_opt.la $(KOKKOS_LIBS) $(libmesh_optional_LIBS) @LIBMESH_DBG_MODE_TRUE@@LIBMESH_ENABLE_CPPUNIT_TRUE@unit_tests_dbg_SOURCES = $(unit_tests_sources) @LIBMESH_DBG_MODE_TRUE@@LIBMESH_ENABLE_CPPUNIT_TRUE@unit_tests_dbg_CPPFLAGS = $(CPPFLAGS_DBG) $(AM_CPPFLAGS) @LIBMESH_DBG_MODE_TRUE@@LIBMESH_ENABLE_CPPUNIT_TRUE@unit_tests_dbg_CXXFLAGS = $(CXXFLAGS_DBG) @@ -2480,7 +2530,16 @@ EXTRA_DIST = $(data) @LIBMESH_ENABLE_CPPUNIT_TRUE@@LIBMESH_OPT_MODE_TRUE@unit_tests_opt_LDADD = $(top_builddir)/libmesh_opt.la @LIBMESH_ENABLE_CPPUNIT_TRUE@@LIBMESH_OPT_MODE_TRUE@unit_tests_optdir = $(datadir) @LIBMESH_ENABLE_CPPUNIT_TRUE@@LIBMESH_OPT_MODE_TRUE@unit_tests_opt_DATA = $(data) -@LIBMESH_ENABLE_CPPUNIT_TRUE@TESTS = run_unit_tests.sh + +# Custom link rules so the Kokkos compiler drives the final link step. +kokkos_vector_ops_oracle_unit_LINK = \ + $(LIBTOOL) --tag=CXX --mode=link $(KOKKOS_CXX) \ + $(LDFLAGS) $(kokkos_vector_ops_oracle_unit_LDFLAGS) -o $@ + +kokkos_tensor_ops_oracle_unit_LINK = \ + $(LIBTOOL) --tag=CXX --mode=link $(KOKKOS_CXX) \ + $(LDFLAGS) $(kokkos_tensor_ops_oracle_unit_LDFLAGS) -o $@ + CLEANFILES = cube_mesh.xda slit_mesh.xda slit_solution.xda out.e \ mesh_with_soln.e elemental_from_nodal.e write_elemset_data.e \ write_sideset_data.e write_nodeset_data.e write_edgeset_data.e \ @@ -2514,8 +2573,8 @@ CLEANFILES = cube_mesh.xda slit_mesh.xda slit_solution.xda out.e \ write_exodus_QUADSHELL9.e write_exodus_TET10.e \ write_exodus_TET14.e write_exodus_TET4.e write_exodus_TRI3.e \ write_exodus_TRI6.e write_exodus_TRI7.e \ - write_exodus_TRISHELL3.e smoother.out $(am__append_8) \ - $(am__append_9) + write_exodus_TRISHELL3.e smoother.out $(am__append_12) \ + $(am__append_13) # need to link any data files for VPATH builds @LIBMESH_VPATH_BUILD_TRUE@BUILT_SOURCES = .linkstamp @@ -2523,7 +2582,7 @@ all: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) all-am .SUFFIXES: -.SUFFIXES: .C .lo .o .obj +.SUFFIXES: .C .K .lo .o .obj $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ @@ -2559,6 +2618,24 @@ run_unit_tests.sh: $(top_builddir)/config.status $(srcdir)/run_unit_tests.sh.in clean-checkPROGRAMS: $(am__rm_f) $(check_PROGRAMS) test -z "$(EXEEXT)" || $(am__rm_f) $(check_PROGRAMS:$(EXEEXT)=) +numerics/$(am__dirstamp): + @$(MKDIR_P) numerics + @: >>numerics/$(am__dirstamp) +numerics/$(DEPDIR)/$(am__dirstamp): + @$(MKDIR_P) numerics/$(DEPDIR) + @: >>numerics/$(DEPDIR)/$(am__dirstamp) +numerics/kokkos_tensor_ops_oracle_test.$(OBJEXT): \ + numerics/$(am__dirstamp) numerics/$(DEPDIR)/$(am__dirstamp) + +kokkos_tensor_ops_oracle_unit$(EXEEXT): $(kokkos_tensor_ops_oracle_unit_OBJECTS) $(kokkos_tensor_ops_oracle_unit_DEPENDENCIES) $(EXTRA_kokkos_tensor_ops_oracle_unit_DEPENDENCIES) + @rm -f kokkos_tensor_ops_oracle_unit$(EXEEXT) + $(AM_V_GEN)$(kokkos_tensor_ops_oracle_unit_LINK) $(kokkos_tensor_ops_oracle_unit_OBJECTS) $(kokkos_tensor_ops_oracle_unit_LDADD) $(LIBS) +numerics/kokkos_vector_ops_oracle_test.$(OBJEXT): \ + numerics/$(am__dirstamp) numerics/$(DEPDIR)/$(am__dirstamp) + +kokkos_vector_ops_oracle_unit$(EXEEXT): $(kokkos_vector_ops_oracle_unit_OBJECTS) $(kokkos_vector_ops_oracle_unit_DEPENDENCIES) $(EXTRA_kokkos_vector_ops_oracle_unit_DEPENDENCIES) + @rm -f kokkos_vector_ops_oracle_unit$(EXEEXT) + $(AM_V_GEN)$(kokkos_vector_ops_oracle_unit_LINK) $(kokkos_vector_ops_oracle_unit_OBJECTS) $(kokkos_vector_ops_oracle_unit_LDADD) $(LIBS) base/$(am__dirstamp): @$(MKDIR_P) base @: >>base/$(am__dirstamp) @@ -2727,12 +2804,6 @@ mesh/unit_tests_dbg-project_solution_test.$(OBJEXT): \ mesh/$(am__dirstamp) mesh/$(DEPDIR)/$(am__dirstamp) mesh/unit_tests_dbg-xdrio_test.$(OBJEXT): mesh/$(am__dirstamp) \ mesh/$(DEPDIR)/$(am__dirstamp) -numerics/$(am__dirstamp): - @$(MKDIR_P) numerics - @: >>numerics/$(am__dirstamp) -numerics/$(DEPDIR)/$(am__dirstamp): - @$(MKDIR_P) numerics/$(DEPDIR) - @: >>numerics/$(DEPDIR)/$(am__dirstamp) numerics/unit_tests_dbg-composite_function_test.$(OBJEXT): \ numerics/$(am__dirstamp) numerics/$(DEPDIR)/$(am__dirstamp) numerics/unit_tests_dbg-coupling_matrix_test.$(OBJEXT): \ @@ -14717,6 +14788,15 @@ $(top_builddir)/libmesh_prof.la: FORCE $(top_builddir)/libmesh_oprof.la: FORCE (cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) libmesh_oprof.la) +# Compile .K translation units with the Kokkos device compiler. +# $(MPI_INCLUDES) is needed because KOKKOS_CXX may be nvcc/hipcc +# instead of the MPI compiler wrapper, so mpi.h won't be found implicitly. +.K.o: + $(KOKKOS_CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ + $(MPI_INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(KOKKOS_TEST_CPPFLAGS) \ + $(AM_CXXFLAGS) $(CXXFLAGS) $(KOKKOS_CXXFLAGS) \ + -c $< -o $@ + @LIBMESH_VPATH_BUILD_TRUE@.linkstamp: @LIBMESH_VPATH_BUILD_TRUE@ -rm -f solutions && $(LN_S) -f $(srcdir)/solutions . @LIBMESH_VPATH_BUILD_TRUE@ -rm -f meshes && $(LN_S) -f $(srcdir)/meshes . From 7daa2e616a5bc42abe10d0fd2db6e24b5f834939 Mon Sep 17 00:00:00 2001 From: rochi00 Date: Mon, 11 May 2026 12:45:53 -0600 Subject: [PATCH 07/46] Include method CXX flags in pkg-config cflags --- contrib/bin/test_installed_examples.sh | 8 ++++++-- contrib/bin/test_installed_headers.sh | 6 +++++- contrib/utils/libmesh-dbg.pc.in | 1 + contrib/utils/libmesh-devel.pc.in | 1 + contrib/utils/libmesh-oprof.pc.in | 1 + contrib/utils/libmesh-opt.pc.in | 1 + contrib/utils/libmesh-prof.pc.in | 1 + 7 files changed, 16 insertions(+), 3 deletions(-) diff --git a/contrib/bin/test_installed_examples.sh b/contrib/bin/test_installed_examples.sh index 8be94eccde2..c255be44304 100755 --- a/contrib/bin/test_installed_examples.sh +++ b/contrib/bin/test_installed_examples.sh @@ -29,9 +29,13 @@ fi echo "Testing examples in $examples_install_path" +if test "$PKG_CONFIG" = ""; then + PKG_CONFIG=pkg-config +fi + if test "$PKG_CONFIG" != "no"; then - installed_CXXFLAGS=$(pkg-config libmesh --cflags) - installed_LIBS=$(pkg-config libmesh --libs) + installed_CXXFLAGS=$($PKG_CONFIG libmesh --cflags) + installed_LIBS=$($PKG_CONFIG libmesh --libs) elif test -x $LIBMESH_CONFIG_PATH/libmesh-config; then installed_CXXFLAGS=$($LIBMESH_CONFIG_PATH/libmesh-config --cppflags --cxxflags --include) diff --git a/contrib/bin/test_installed_headers.sh b/contrib/bin/test_installed_headers.sh index 2154bc19c20..645ba266a49 100755 --- a/contrib/bin/test_installed_headers.sh +++ b/contrib/bin/test_installed_headers.sh @@ -49,12 +49,16 @@ fi # Variable is set but not used # testing_installed_tree="no" +if test "$PKG_CONFIG" = ""; then + PKG_CONFIG=pkg-config +fi + if test "$test_CXXFLAGS" = ""; then # testing_installed_tree="yes" if test "$PKG_CONFIG" != "no"; then - test_CXXFLAGS=$(pkg-config libmesh --cflags) + test_CXXFLAGS=$($PKG_CONFIG libmesh --cflags) elif test -x $LIBMESH_CONFIG_PATH/libmesh-config; then test_CXXFLAGS=$($LIBMESH_CONFIG_PATH/libmesh-config --cppflags --cxxflags --include) diff --git a/contrib/utils/libmesh-dbg.pc.in b/contrib/utils/libmesh-dbg.pc.in index ab532d664c1..b4a29f1156f 100644 --- a/contrib/utils/libmesh-dbg.pc.in +++ b/contrib/utils/libmesh-dbg.pc.in @@ -12,5 +12,6 @@ Libs: -Wl,-rpath,${libdir} -L${libdir} -lmesh_dbg -ltimpi_dbg \ @libmesh_installed_LIBS@ @libmesh_optional_LIBS@ Libs.private: Cflags: @CPPFLAGS_DBG@ \ + ${cxxflags_extra} \ -I${includedir} \ @libmesh_optional_INCLUDES@ diff --git a/contrib/utils/libmesh-devel.pc.in b/contrib/utils/libmesh-devel.pc.in index 63b3d6c8097..4614467f5d9 100644 --- a/contrib/utils/libmesh-devel.pc.in +++ b/contrib/utils/libmesh-devel.pc.in @@ -12,5 +12,6 @@ Libs: -Wl,-rpath,${libdir} -L${libdir} -lmesh_devel -ltimpi_devel \ @libmesh_installed_LIBS@ @libmesh_optional_LIBS@ Libs.private: Cflags: @CPPFLAGS_DEVEL@ \ + ${cxxflags_extra} \ -I${includedir} \ @libmesh_optional_INCLUDES@ diff --git a/contrib/utils/libmesh-oprof.pc.in b/contrib/utils/libmesh-oprof.pc.in index 1184f433eb5..0a1fbd47e25 100644 --- a/contrib/utils/libmesh-oprof.pc.in +++ b/contrib/utils/libmesh-oprof.pc.in @@ -12,5 +12,6 @@ Libs: -Wl,-rpath,${libdir} -L${libdir} -lmesh_oprof -ltimpi_oprof \ @libmesh_installed_LIBS@ @libmesh_optional_LIBS@ Libs.private: Cflags: @CPPFLAGS_OPROF@ \ + ${cxxflags_extra} \ -I${includedir} \ @libmesh_optional_INCLUDES@ diff --git a/contrib/utils/libmesh-opt.pc.in b/contrib/utils/libmesh-opt.pc.in index 10deb13ec50..cbb9529da5b 100644 --- a/contrib/utils/libmesh-opt.pc.in +++ b/contrib/utils/libmesh-opt.pc.in @@ -12,5 +12,6 @@ Libs: -Wl,-rpath,${libdir} -L${libdir} -lmesh_opt -ltimpi_opt \ @libmesh_installed_LIBS@ @libmesh_optional_LIBS@ Libs.private: Cflags: @CPPFLAGS_OPT@ \ + ${cxxflags_extra} \ -I${includedir} \ @libmesh_optional_INCLUDES@ diff --git a/contrib/utils/libmesh-prof.pc.in b/contrib/utils/libmesh-prof.pc.in index 213601d795a..333dcaa92b6 100644 --- a/contrib/utils/libmesh-prof.pc.in +++ b/contrib/utils/libmesh-prof.pc.in @@ -12,5 +12,6 @@ Libs: -Wl,-rpath,${libdir} -L${libdir} -lmesh_prof -ltimpi_prof \ @libmesh_installed_LIBS@ @libmesh_optional_LIBS@ Libs.private: Cflags: @CPPFLAGS_PROF@ \ + ${cxxflags_extra} \ -I${includedir} \ @libmesh_optional_INCLUDES@ From 57b4840cd01c185c6ce56ca4a187a2eda44a61dd Mon Sep 17 00:00:00 2001 From: rochi00 Date: Mon, 11 May 2026 15:44:23 -0600 Subject: [PATCH 08/46] Run tensor foundation oracle on device --- .../kokkos_tensor_ops_oracle_runners.h | 103 ++++++++++-------- 1 file changed, 60 insertions(+), 43 deletions(-) diff --git a/tests/numerics/kokkos_tensor_ops_oracle_runners.h b/tests/numerics/kokkos_tensor_ops_oracle_runners.h index cad772919a0..07670821baa 100644 --- a/tests/numerics/kokkos_tensor_ops_oracle_runners.h +++ b/tests/numerics/kokkos_tensor_ops_oracle_runners.h @@ -233,8 +233,6 @@ template static int test_linalg_foundation_storage_roundtrip() { - int fail = 0; - auto d_vector = libMesh::Kokkos::make_vector_storage("foundation_vector", 1); auto d_tensor = libMesh::Kokkos::make_tensor_storage("foundation_tensor", 1); @@ -253,51 +251,64 @@ test_linalg_foundation_storage_roundtrip() ::Kokkos::deep_copy(d_tensor, h_tensor); } - const auto vector_in = libMesh::Kokkos::make_vector_ref(d_vector, 0); - const auto tensor_in = libMesh::Kokkos::make_tensor_ref(d_tensor, 0); - - const auto as_point = libMesh::Kokkos::materialize_vector(vector_in); - const auto as_vector_value = - libMesh::Kokkos::materialize_vector>(vector_in); - const auto as_type_vector = - libMesh::Kokkos::materialize_vector>(vector_in); - - for (unsigned int d = 0; d < LIBMESH_DIM; ++d) - { - const Real expected = Real(d + 1) * Real(0.5); - fail += (std::fabs(as_point(d) - expected) <= tol) ? 0 : 1; - fail += (std::fabs(as_vector_value(d) - expected) <= tol) ? 0 : 1; - fail += (std::fabs(as_type_vector(d) - expected) <= tol) ? 0 : 1; - } + auto d_vector_out = libMesh::Kokkos::make_vector_storage("foundation_vector_out", 1); + auto d_tensor_out = libMesh::Kokkos::make_tensor_storage("foundation_tensor_out", 1); + ::Kokkos::View d_fail("foundation_fail"); - const auto as_tensor_value = - libMesh::Kokkos::materialize_tensor>(tensor_in); - const auto as_type_tensor = - libMesh::Kokkos::materialize_tensor>(tensor_in); + ::Kokkos::parallel_for( + 1, + KOKKOS_LAMBDA(int) { + int local_fail = 0; - for (unsigned int row = 0; row < LIBMESH_DIM; ++row) - for (unsigned int col = 0; col < LIBMESH_DIM; ++col) - { - const Real expected = Real(10 * row + col + 1) * Real(0.25); - fail += (std::fabs(as_tensor_value(row, col) - expected) <= tol) ? 0 : 1; - fail += (std::fabs(as_type_tensor(row, col) - expected) <= tol) ? 0 : 1; - } + const auto vector_in = libMesh::Kokkos::make_vector_ref(d_vector, 0); + const auto tensor_in = libMesh::Kokkos::make_tensor_ref(d_tensor, 0); - auto d_vector_out = libMesh::Kokkos::make_vector_storage("foundation_vector_out", 1); - auto d_tensor_out = libMesh::Kokkos::make_tensor_storage("foundation_tensor_out", 1); + const auto as_point = libMesh::Kokkos::materialize_vector(vector_in); + const auto as_vector_value = + libMesh::Kokkos::materialize_vector>(vector_in); + const auto as_type_vector = + libMesh::Kokkos::materialize_vector>(vector_in); - auto vector_out = libMesh::Kokkos::make_vector_ref(d_vector_out, 0); - auto tensor_out = libMesh::Kokkos::make_tensor_ref(d_tensor_out, 0); + for (unsigned int d = 0; d < LIBMESH_DIM; ++d) + { + const Real expected = Real(d + 1) * Real(0.5); + local_fail += (std::fabs(as_point(d) - expected) <= tol) ? 0 : 1; + local_fail += (std::fabs(as_vector_value(d) - expected) <= tol) ? 0 : 1; + local_fail += (std::fabs(as_type_vector(d) - expected) <= tol) ? 0 : 1; + } - vector_out.zero(); - vector_out.assign(as_vector_value); - vector_out.add_scaled(as_type_vector, Real(0)); - vector_out.subtract_scaled(as_type_vector, Real(0)); + const auto as_tensor_value = + libMesh::Kokkos::materialize_tensor>(tensor_in); + const auto as_type_tensor = + libMesh::Kokkos::materialize_tensor>(tensor_in); + + for (unsigned int row = 0; row < LIBMESH_DIM; ++row) + for (unsigned int col = 0; col < LIBMESH_DIM; ++col) + { + const Real expected = Real(10 * row + col + 1) * Real(0.25); + local_fail += (std::fabs(as_tensor_value(row, col) - expected) <= tol) ? 0 : 1; + local_fail += (std::fabs(as_type_tensor(row, col) - expected) <= tol) ? 0 : 1; + } + + auto vector_out = libMesh::Kokkos::make_vector_ref(d_vector_out, 0); + auto tensor_out = libMesh::Kokkos::make_tensor_ref(d_tensor_out, 0); + + vector_out.zero(); + vector_out.assign(as_vector_value); + vector_out.add_scaled(as_type_vector, Real(0)); + vector_out.subtract_scaled(as_type_vector, Real(0)); + + tensor_out.zero(); + tensor_out.assign(as_tensor_value); + tensor_out.add_scaled(as_type_tensor, Real(0)); + tensor_out.subtract_scaled(as_type_tensor, Real(0)); + + d_fail() = local_fail; + }); + ::Kokkos::fence(); - tensor_out.zero(); - tensor_out.assign(as_tensor_value); - tensor_out.add_scaled(as_type_tensor, Real(0)); - tensor_out.subtract_scaled(as_type_tensor, Real(0)); + int fail = 0; + ::Kokkos::deep_copy(fail, d_fail); { auto h_vector_out = ::Kokkos::create_mirror_view(d_vector_out); @@ -306,11 +317,17 @@ test_linalg_foundation_storage_roundtrip() ::Kokkos::deep_copy(h_tensor_out, d_tensor_out); for (unsigned int d = 0; d < LIBMESH_DIM; ++d) - fail += (std::fabs(h_vector_out(0, d) - as_vector_value(d)) <= tol) ? 0 : 1; + { + const Real expected = Real(d + 1) * Real(0.5); + fail += (std::fabs(h_vector_out(0, d) - expected) <= tol) ? 0 : 1; + } for (unsigned int row = 0; row < LIBMESH_DIM; ++row) for (unsigned int col = 0; col < LIBMESH_DIM; ++col) - fail += (std::fabs(h_tensor_out(0, row, col) - as_tensor_value(row, col)) <= tol) ? 0 : 1; + { + const Real expected = Real(10 * row + col + 1) * Real(0.25); + fail += (std::fabs(h_tensor_out(0, row, col) - expected) <= tol) ? 0 : 1; + } } return fail; From 93fee21645efffa368e5bc27e94ee1875b014564 Mon Sep 17 00:00:00 2001 From: rochi00 Date: Mon, 11 May 2026 16:01:50 -0600 Subject: [PATCH 09/46] Make Point constructors device-callable --- include/geom/point.h | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/include/geom/point.h b/include/geom/point.h index a305deea3a7..57796757869 100644 --- a/include/geom/point.h +++ b/include/geom/point.h @@ -22,6 +22,7 @@ // Local includes #include "libmesh/hashing.h" +#include "libmesh/libmesh_device.h" #include "libmesh/type_vector.h" namespace libMesh @@ -44,6 +45,7 @@ class Point : public TypeVector * Constructor. By default sets all entries to 0. Gives the point * 0 in \p LIBMESH_DIM dimensions. */ + LIBMESH_DEVICE_INLINE Point (const Real x=0., const Real y=0., const Real z=0.) : @@ -53,11 +55,13 @@ class Point : public TypeVector /** * Trivial copy-constructor. */ + LIBMESH_DEVICE_INLINE Point (const Point & p) = default; /** * Copy-constructor from non-point Typevector. */ + LIBMESH_DEVICE_INLINE Point (const TypeVector & p) : TypeVector (p) {} @@ -65,6 +69,7 @@ class Point : public TypeVector /** * Copy-assignment operator. */ + LIBMESH_DEVICE_INLINE Point& operator=(const Point & p) = default; /** @@ -73,6 +78,7 @@ class Point : public TypeVector template ::value,void>::type> + LIBMESH_DEVICE_INLINE Point (const T x) : TypeVector (x,0,0) {} From 77d03330221e65bc364bb8ebac50563a2391617b Mon Sep 17 00:00:00 2001 From: rochi00 Date: Tue, 12 May 2026 07:50:39 -0600 Subject: [PATCH 10/46] Inline tensor equality into constrained operators --- include/gpu/kokkos_tensor_ops.h | 31 +++++++------------------------ 1 file changed, 7 insertions(+), 24 deletions(-) diff --git a/include/gpu/kokkos_tensor_ops.h b/include/gpu/kokkos_tensor_ops.h index a08080405d6..f251b6d9e4e 100644 --- a/include/gpu/kokkos_tensor_ops.h +++ b/include/gpu/kokkos_tensor_ops.h @@ -130,28 +130,6 @@ bool tensor_is_zero(const TensorLike & T_in) return true; } -template -LIBMESH_DEVICE_INLINE -bool tensor_equal(const LeftTensor & left, const RightTensor & right) -{ - static_assert(is_tensor_like_v, "tensor_equal() requires a tensor-like left input"); - static_assert(is_tensor_like_v, "tensor_equal() requires a tensor-like right input"); - - for (unsigned int row = 0; row < LIBMESH_DIM; ++row) - for (unsigned int col = 0; col < LIBMESH_DIM; ++col) - if (tensor_get_component(left, row, col) != tensor_get_component(right, row, col)) - return false; - - return true; -} - -template -LIBMESH_DEVICE_INLINE -bool tensor_not_equal(const LeftTensor & left, const RightTensor & right) -{ - return !tensor_equal(left, right); -} - // Tensor arithmetic template @@ -953,7 +931,12 @@ auto operator==(const LeftTensor & left, const RightTensor & right) (is_tensor_ref_v || is_tensor_ref_v), bool> { - return tensor_equal(left, right); + for (unsigned int row = 0; row < LIBMESH_DIM; ++row) + for (unsigned int col = 0; col < LIBMESH_DIM; ++col) + if (tensor_get_component(left, row, col) != tensor_get_component(right, row, col)) + return false; + + return true; } template @@ -963,7 +946,7 @@ auto operator!=(const LeftTensor & left, const RightTensor & right) (is_tensor_ref_v || is_tensor_ref_v), bool> { - return tensor_not_equal(left, right); + return !(left == right); } template From d26c43ac01b5a532160a1679f5af6854ee6544ea Mon Sep 17 00:00:00 2001 From: rochi00 Date: Tue, 12 May 2026 07:52:10 -0600 Subject: [PATCH 11/46] Differentiate leading tensor determinant helper --- include/gpu/kokkos_tensor_ops.h | 13 +++++++------ tests/numerics/kokkos_tensor_ops_oracle_runners.h | 2 +- 2 files changed, 8 insertions(+), 7 deletions(-) diff --git a/include/gpu/kokkos_tensor_ops.h b/include/gpu/kokkos_tensor_ops.h index f251b6d9e4e..b124fd212d6 100644 --- a/include/gpu/kokkos_tensor_ops.h +++ b/include/gpu/kokkos_tensor_ops.h @@ -264,9 +264,10 @@ tensor_semantic_type_t tensor_divide(const TensorLike & T_in, const template LIBMESH_DEVICE_INLINE -auto tensor_determinant(const TensorLike & T_in, const unsigned int dim = LIBMESH_DIM) +auto tensor_leading_determinant(const TensorLike & T_in, const unsigned int dim = LIBMESH_DIM) { - static_assert(is_tensor_like_v, "tensor_determinant() requires a tensor-like input"); + static_assert(is_tensor_like_v, + "tensor_leading_determinant() requires a tensor-like input"); if (dim == 0) return tensor_value_type_t(1); @@ -316,7 +317,7 @@ ResultTensor tensor_inverse(const TensorLike & T_in, const unsigned int dim = LI return out; } - const auto det = tensor_determinant(T_in, dim); + const auto det = tensor_leading_determinant(T_in, dim); if (dim == 2) { @@ -610,9 +611,9 @@ auto transpose(const TensorLike & T_in) template LIBMESH_DEVICE_INLINE auto det(const TensorLike & T_in) - -> std::enable_if_t, decltype(tensor_determinant(T_in))> + -> std::enable_if_t, decltype(T_in.det())> { - return tensor_determinant(T_in); + return T_in.det(); } template @@ -779,7 +780,7 @@ template LIBMESH_DEVICE_INLINE auto tensor_ref::det(const unsigned int dim) const { - return tensor_determinant(*this, dim); + return tensor_leading_determinant(*this, dim); } template diff --git a/tests/numerics/kokkos_tensor_ops_oracle_runners.h b/tests/numerics/kokkos_tensor_ops_oracle_runners.h index 07670821baa..a12cec13ab9 100644 --- a/tests/numerics/kokkos_tensor_ops_oracle_runners.h +++ b/tests/numerics/kokkos_tensor_ops_oracle_runners.h @@ -51,7 +51,7 @@ test_dim_ops() KOKKOS_LAMBDA(int c) { const auto J_ref = libMesh::Kokkos::make_tensor_ref(d_J, c); const unsigned int dim = d_dims(c); - const Real det = libMesh::Kokkos::tensor_determinant(J_ref, dim); + const Real det = J_ref.det(dim); const auto inv = J_ref.inverse(dim); const auto I = libMesh::Kokkos::tensor_identity(dim); const auto prod_left = J_ref * inv; From ac897f283ad46d0ff5d54bf14afc2285bfdfaf3b Mon Sep 17 00:00:00 2001 From: rochi00 Date: Tue, 12 May 2026 08:08:04 -0600 Subject: [PATCH 12/46] Inline vector equality and remove contract shim --- include/gpu/kokkos_vector_ops.h | 42 ++++--------------- .../kokkos_tensor_ops_oracle_runners.h | 4 +- 2 files changed, 11 insertions(+), 35 deletions(-) diff --git a/include/gpu/kokkos_vector_ops.h b/include/gpu/kokkos_vector_ops.h index 3fb14068661..fffbf789da7 100644 --- a/include/gpu/kokkos_vector_ops.h +++ b/include/gpu/kokkos_vector_ops.h @@ -63,13 +63,6 @@ auto vector_dot(const LeftVector & left, const RightVector & right) return sum; } -template -LIBMESH_DEVICE_INLINE -auto vector_contract(const LeftVector & left, const RightVector & right) -{ - return vector_dot(left, right); -} - template LIBMESH_DEVICE_INLINE auto vector_norm_sq(const VectorLike & v) @@ -122,27 +115,6 @@ bool vector_is_zero(const VectorLike & v) return true; } -template -LIBMESH_DEVICE_INLINE -bool vector_equal(const LeftVector & left, const RightVector & right) -{ - static_assert(is_vector_like_v, "vector_equal() requires a vector-like left input"); - static_assert(is_vector_like_v, "vector_equal() requires a vector-like right input"); - - for (unsigned int component = 0; component < LIBMESH_DIM; ++component) - if (vector_get_component(left, component) != vector_get_component(right, component)) - return false; - - return true; -} - -template -LIBMESH_DEVICE_INLINE -bool vector_not_equal(const LeftVector & left, const RightVector & right) -{ - return !vector_equal(left, right); -} - // Arithmetic template @@ -447,9 +419,9 @@ template LIBMESH_DEVICE_INLINE auto contract(const LeftVector & left, const RightVector & right) -> std::enable_if_t && is_vector_like_v, - decltype(vector_contract(left, right))> + decltype(vector_dot(left, right))> { - return vector_contract(left, right); + return vector_dot(left, right); } template @@ -544,7 +516,7 @@ template LIBMESH_DEVICE_INLINE auto vector_ref::contract(const RightVector & right) const { - return vector_contract(*this, right); + return vector_dot(*this, right); } template @@ -672,7 +644,11 @@ auto operator==(const LeftVector & left, const RightVector & right) (is_vector_ref_v || is_vector_ref_v), bool> { - return vector_equal(left, right); + for (unsigned int component = 0; component < LIBMESH_DIM; ++component) + if (vector_get_component(left, component) != vector_get_component(right, component)) + return false; + + return true; } template @@ -682,7 +658,7 @@ auto operator!=(const LeftVector & left, const RightVector & right) (is_vector_ref_v || is_vector_ref_v), bool> { - return vector_not_equal(left, right); + return !(left == right); } template diff --git a/tests/numerics/kokkos_tensor_ops_oracle_runners.h b/tests/numerics/kokkos_tensor_ops_oracle_runners.h index a12cec13ab9..59aadda6a4f 100644 --- a/tests/numerics/kokkos_tensor_ops_oracle_runners.h +++ b/tests/numerics/kokkos_tensor_ops_oracle_runners.h @@ -389,8 +389,8 @@ test_mixed_representation_ops() d_scalars(2) = A_ref.det(); d_scalars(3) = (A_ref == A) ? 1.0 : 0.0; d_scalars(4) = (A_ref != inverse) ? 1.0 : 0.0; - d_scalars(5) = libMesh::Kokkos::vector_equal(row0, ref_row0) ? 1.0 : 0.0; - d_scalars(6) = libMesh::Kokkos::vector_equal(col0, ref_col0) ? 1.0 : 0.0; + d_scalars(5) = (row0 == ref_row0) ? 1.0 : 0.0; + d_scalars(6) = (col0 == ref_col0) ? 1.0 : 0.0; d_scalars(7) = A_ref.tr(); libMesh::Kokkos::store_vector(d_vectors, 0, right); From e83887cd9deaf1a88c407920f57e2c45cb3159cd Mon Sep 17 00:00:00 2001 From: rochi00 Date: Tue, 12 May 2026 08:19:45 -0600 Subject: [PATCH 13/46] Hide tensor helper API and share in-place Kokkos ops --- include/gpu/kokkos_tensor_ops.h | 756 +++++++++--------- include/gpu/kokkos_vector_ops.h | 127 ++- .../kokkos_tensor_ops_oracle_runners.h | 4 +- 3 files changed, 485 insertions(+), 402 deletions(-) diff --git a/include/gpu/kokkos_tensor_ops.h b/include/gpu/kokkos_tensor_ops.h index b124fd212d6..c20ade2661e 100644 --- a/include/gpu/kokkos_tensor_ops.h +++ b/include/gpu/kokkos_tensor_ops.h @@ -58,386 +58,389 @@ tensor_semantic_type_t copy_tensor(const TensorLike & T_in) return copy_tensor>(T_in); } -// Tensor reductions and predicates +namespace detail +{ -template +template LIBMESH_DEVICE_INLINE -auto tensor_contract(const LeftTensor & left, const RightTensor & right) +auto leading_determinant(const TensorLike & T_in, const unsigned int dim = LIBMESH_DIM) { - static_assert(is_tensor_like_v, "tensor_contract() requires a tensor-like left input"); - static_assert(is_tensor_like_v, "tensor_contract() requires a tensor-like right input"); + static_assert(is_tensor_like_v, + "detail::leading_determinant() requires a tensor-like input"); - using sum_type = - detail::remove_cvref_t; + if (dim == 0) + return tensor_value_type_t(1); - sum_type sum = sum_type(0); - for (unsigned int row = 0; row < LIBMESH_DIM; ++row) - for (unsigned int col = 0; col < LIBMESH_DIM; ++col) - sum += tensor_get_component(left, row, col) * tensor_get_component(right, row, col); + if (dim == 1) + return tensor_get_component(T_in, 0, 0); - return sum; + if (dim == 2) + return tensor_get_component(T_in, 0, 0) * tensor_get_component(T_in, 1, 1) - + tensor_get_component(T_in, 0, 1) * tensor_get_component(T_in, 1, 0); + +#if LIBMESH_DIM > 2 + const auto a00 = tensor_get_component(T_in, 0, 0); + const auto a01 = tensor_get_component(T_in, 0, 1); + const auto a02 = tensor_get_component(T_in, 0, 2); + const auto a10 = tensor_get_component(T_in, 1, 0); + const auto a11 = tensor_get_component(T_in, 1, 1); + const auto a12 = tensor_get_component(T_in, 1, 2); + const auto a20 = tensor_get_component(T_in, 2, 0); + const auto a21 = tensor_get_component(T_in, 2, 1); + const auto a22 = tensor_get_component(T_in, 2, 2); + + return a00 * (a11 * a22 - a12 * a21) - + a01 * (a10 * a22 - a12 * a20) + + a02 * (a10 * a21 - a11 * a20); +#else + libmesh_ignore(T_in); + return tensor_value_type_t(0); +#endif } -template +template LIBMESH_DEVICE_INLINE -auto tensor_norm_sq(const TensorLike & T_in) +ResultTensor outer_product(const LeftVector & left, const RightVector & right) { - static_assert(is_tensor_like_v, "tensor_norm_sq() requires a tensor-like input"); - - using norm_type = detail::remove_cvref_t; + ResultTensor out; + out.zero(); - norm_type sum = norm_type(0); for (unsigned int row = 0; row < LIBMESH_DIM; ++row) for (unsigned int col = 0; col < LIBMESH_DIM; ++col) - sum += libMesh::TensorTools::norm_sq(tensor_get_component(T_in, row, col)); + tensor_set_component(out, + row, + col, + vector_get_component(left, row) * libmesh_conj(vector_get_component(right, col))); - return sum; + return out; } -template +template LIBMESH_DEVICE_INLINE -auto tensor_norm(const TensorLike & T_in) +ResultTensor inverse(const TensorLike & T_in, const unsigned int dim = LIBMESH_DIM) { - using std::sqrt; - return sqrt(tensor_norm_sq(T_in)); -} + static_assert(is_tensor_like_v, "detail::inverse() requires a tensor-like input"); -template -LIBMESH_DEVICE_INLINE -auto tensor_trace(const TensorLike & T_in) -{ - static_assert(is_tensor_like_v, "tensor_trace() requires a tensor-like input"); + ResultTensor out; + out.zero(); - using trace_type = detail::remove_cvref_t; - trace_type sum = trace_type(0); - for (unsigned int i = 0; i < LIBMESH_DIM; ++i) - sum += tensor_get_component(T_in, i, i); + if (dim == 0) + return out; - return sum; + if (dim == 1) + { + tensor_set_component(out, 0, 0, tensor_value_type_t(1) / tensor_get_component(T_in, 0, 0)); + return out; + } + + const auto det = leading_determinant(T_in, dim); + + if (dim == 2) + { + tensor_set_component(out, 0, 0, tensor_get_component(T_in, 1, 1) / det); + tensor_set_component(out, 0, 1, -tensor_get_component(T_in, 0, 1) / det); + tensor_set_component(out, 1, 0, -tensor_get_component(T_in, 1, 0) / det); + tensor_set_component(out, 1, 1, tensor_get_component(T_in, 0, 0) / det); + return out; + } + +#if LIBMESH_DIM > 2 + const auto a00 = tensor_get_component(T_in, 0, 0); + const auto a01 = tensor_get_component(T_in, 0, 1); + const auto a02 = tensor_get_component(T_in, 0, 2); + const auto a10 = tensor_get_component(T_in, 1, 0); + const auto a11 = tensor_get_component(T_in, 1, 1); + const auto a12 = tensor_get_component(T_in, 1, 2); + const auto a20 = tensor_get_component(T_in, 2, 0); + const auto a21 = tensor_get_component(T_in, 2, 1); + const auto a22 = tensor_get_component(T_in, 2, 2); + + tensor_set_component(out, 0, 0, (a11 * a22 - a12 * a21) / det); + tensor_set_component(out, 0, 1, (a02 * a21 - a01 * a22) / det); + tensor_set_component(out, 0, 2, (a01 * a12 - a02 * a11) / det); + tensor_set_component(out, 1, 0, (a12 * a20 - a10 * a22) / det); + tensor_set_component(out, 1, 1, (a00 * a22 - a02 * a20) / det); + tensor_set_component(out, 1, 2, (a02 * a10 - a00 * a12) / det); + tensor_set_component(out, 2, 0, (a10 * a21 - a11 * a20) / det); + tensor_set_component(out, 2, 1, (a01 * a20 - a00 * a21) / det); + tensor_set_component(out, 2, 2, (a00 * a11 - a01 * a10) / det); +#else + libmesh_ignore(T_in); +#endif + + return out; } -template +template LIBMESH_DEVICE_INLINE -bool tensor_is_zero(const TensorLike & T_in) +ResultTensor transpose(const TensorLike & T_in) { - static_assert(is_tensor_like_v, "tensor_is_zero() requires a tensor-like input"); + ResultTensor out; + out.zero(); for (unsigned int row = 0; row < LIBMESH_DIM; ++row) for (unsigned int col = 0; col < LIBMESH_DIM; ++col) - if (tensor_get_component(T_in, row, col) != tensor_value_type_t(0)) - return false; + tensor_set_component(out, row, col, tensor_get_component(T_in, col, row)); - return true; + return out; } -// Tensor arithmetic - -template +template LIBMESH_DEVICE_INLINE -ResultTensor tensor_outer_product(const LeftVector & left, const RightVector & right) +ResultTensor multiply(const LeftTensor & left, const RightTensor & right) { ResultTensor out; out.zero(); for (unsigned int row = 0; row < LIBMESH_DIM; ++row) for (unsigned int col = 0; col < LIBMESH_DIM; ++col) - tensor_set_component(out, - row, - col, - vector_get_component(left, row) * libmesh_conj(vector_get_component(right, col))); + { + auto value = tensor_get_component(left, row, 0) * tensor_get_component(right, 0, col); + for (unsigned int k = 1; k < LIBMESH_DIM; ++k) + value += tensor_get_component(left, row, k) * tensor_get_component(right, k, col); + tensor_set_component(out, row, col, value); + } return out; } -template ::value, int>::type = 0> +template LIBMESH_DEVICE_INLINE -libMesh::TypeTensor> -tensor_outer_product(const LeftVector & left, const RightVector & right) +ResultVector row(const TensorLike & T_in, const unsigned int row_index) { - return tensor_outer_product>>(left, right); + ResultVector out; + out.zero(); + + for (unsigned int col = 0; col < LIBMESH_DIM; ++col) + vector_set_component(out, col, tensor_get_component(T_in, row_index, col)); + + return out; } -template +template LIBMESH_DEVICE_INLINE -ResultTensor tensor_add(const LeftTensor & left, const RightTensor & right) +ResultVector column(const TensorLike & T_in, const unsigned int col_index) { - ResultTensor out; + ResultVector out; out.zero(); - for (unsigned int row = 0; row < LIBMESH_DIM; ++row) - for (unsigned int col = 0; col < LIBMESH_DIM; ++col) - tensor_set_component(out, - row, - col, - tensor_get_component(left, row, col) + tensor_get_component(right, row, col)); + for (unsigned int row_index = 0; row_index < LIBMESH_DIM; ++row_index) + vector_set_component(out, row_index, tensor_get_component(T_in, row_index, col_index)); return out; } -template ::value, int>::type = 0> +template LIBMESH_DEVICE_INLINE -tensor_semantic_type_t tensor_add(const LeftTensor & left, const RightTensor & right) +ResultVector multiply(const TensorLike & T_in, const VectorLike & v) { - return tensor_add>(left, right); + ResultVector out; + out.zero(); + + for (unsigned int row = 0; row < LIBMESH_DIM; ++row) + { + auto value = tensor_get_component(T_in, row, 0) * vector_get_component(v, 0); + for (unsigned int col = 1; col < LIBMESH_DIM; ++col) + value += tensor_get_component(T_in, row, col) * vector_get_component(v, col); + vector_set_component(out, row, value); + } + + return out; } -template +template LIBMESH_DEVICE_INLINE -ResultTensor tensor_subtract(const LeftTensor & left, const RightTensor & right) +ResultVector multiply(const VectorLike & v, const TensorLike & T_in) { - ResultTensor out; + ResultVector out; out.zero(); - for (unsigned int row = 0; row < LIBMESH_DIM; ++row) - for (unsigned int col = 0; col < LIBMESH_DIM; ++col) - tensor_set_component(out, - row, - col, - tensor_get_component(left, row, col) - tensor_get_component(right, row, col)); + for (unsigned int col = 0; col < LIBMESH_DIM; ++col) + { + auto value = vector_get_component(v, 0) * tensor_get_component(T_in, 0, col); + for (unsigned int row = 1; row < LIBMESH_DIM; ++row) + value += vector_get_component(v, row) * tensor_get_component(T_in, row, col); + vector_set_component(out, col, value); + } return out; } -template ::value, int>::type = 0> +template LIBMESH_DEVICE_INLINE -tensor_semantic_type_t tensor_subtract(const LeftTensor & left, const RightTensor & right) +void assign_tensor_components(LeftTensor & left, const RightTensor & right) { - return tensor_subtract>(left, right); + for (unsigned int row = 0; row < LIBMESH_DIM; ++row) + for (unsigned int col = 0; col < LIBMESH_DIM; ++col) + tensor_set_component(left, row, col, tensor_get_component(right, row, col)); } -template +template LIBMESH_DEVICE_INLINE -ResultTensor tensor_scale(const Scalar & alpha, const TensorLike & T_in) +void add_tensor_components(LeftTensor & left, const RightTensor & right) { - ResultTensor out; - out.zero(); - for (unsigned int row = 0; row < LIBMESH_DIM; ++row) for (unsigned int col = 0; col < LIBMESH_DIM; ++col) - tensor_set_component(out, row, col, alpha * tensor_get_component(T_in, row, col)); - - return out; + tensor_set_component(left, + row, + col, + tensor_get_component(left, row, col) + tensor_get_component(right, row, col)); } -template ::value, int>::type = 0> +template LIBMESH_DEVICE_INLINE -tensor_semantic_type_t tensor_scale(const Scalar & alpha, const TensorLike & T_in) +void add_scaled_tensor_components(LeftTensor & left, const RightTensor & right, const Scalar & factor) { - return tensor_scale>(alpha, T_in); + for (unsigned int row = 0; row < LIBMESH_DIM; ++row) + for (unsigned int col = 0; col < LIBMESH_DIM; ++col) + tensor_set_component(left, + row, + col, + tensor_get_component(left, row, col) + + factor * tensor_get_component(right, row, col)); } -template +template LIBMESH_DEVICE_INLINE -ResultTensor tensor_divide(const TensorLike & T_in, const Scalar & alpha) +void subtract_tensor_components(LeftTensor & left, const RightTensor & right) { - ResultTensor out; - out.zero(); - for (unsigned int row = 0; row < LIBMESH_DIM; ++row) for (unsigned int col = 0; col < LIBMESH_DIM; ++col) - tensor_set_component(out, row, col, tensor_get_component(T_in, row, col) / alpha); - - return out; + tensor_set_component(left, + row, + col, + tensor_get_component(left, row, col) - tensor_get_component(right, row, col)); } -template ::value, int>::type = 0> +template LIBMESH_DEVICE_INLINE -tensor_semantic_type_t tensor_divide(const TensorLike & T_in, const Scalar & alpha) +void subtract_scaled_tensor_components(LeftTensor & left, const RightTensor & right, const Scalar & factor) { - return tensor_divide>(T_in, alpha); + for (unsigned int row = 0; row < LIBMESH_DIM; ++row) + for (unsigned int col = 0; col < LIBMESH_DIM; ++col) + tensor_set_component(left, + row, + col, + tensor_get_component(left, row, col) - + factor * tensor_get_component(right, row, col)); } template LIBMESH_DEVICE_INLINE -auto tensor_leading_determinant(const TensorLike & T_in, const unsigned int dim = LIBMESH_DIM) +void zero_tensor_components(TensorLike & T_in) { - static_assert(is_tensor_like_v, - "tensor_leading_determinant() requires a tensor-like input"); - - if (dim == 0) - return tensor_value_type_t(1); - - if (dim == 1) - return tensor_get_component(T_in, 0, 0); - - if (dim == 2) - return tensor_get_component(T_in, 0, 0) * tensor_get_component(T_in, 1, 1) - - tensor_get_component(T_in, 0, 1) * tensor_get_component(T_in, 1, 0); - -#if LIBMESH_DIM > 2 - const auto a00 = tensor_get_component(T_in, 0, 0); - const auto a01 = tensor_get_component(T_in, 0, 1); - const auto a02 = tensor_get_component(T_in, 0, 2); - const auto a10 = tensor_get_component(T_in, 1, 0); - const auto a11 = tensor_get_component(T_in, 1, 1); - const auto a12 = tensor_get_component(T_in, 1, 2); - const auto a20 = tensor_get_component(T_in, 2, 0); - const auto a21 = tensor_get_component(T_in, 2, 1); - const auto a22 = tensor_get_component(T_in, 2, 2); - - return a00 * (a11 * a22 - a12 * a21) - - a01 * (a10 * a22 - a12 * a20) + - a02 * (a10 * a21 - a11 * a20); -#else - libmesh_ignore(T_in); - return tensor_value_type_t(0); -#endif + for (unsigned int row = 0; row < LIBMESH_DIM; ++row) + for (unsigned int col = 0; col < LIBMESH_DIM; ++col) + tensor_set_component(T_in, row, col, tensor_value_type_t(0)); } -template +template LIBMESH_DEVICE_INLINE -ResultTensor tensor_inverse(const TensorLike & T_in, const unsigned int dim = LIBMESH_DIM) +void scale_tensor_components(TensorLike & T_in, const Scalar & alpha) { - static_assert(is_tensor_like_v, "tensor_inverse() requires a tensor-like input"); - - ResultTensor out; - out.zero(); - - if (dim == 0) - return out; + for (unsigned int row = 0; row < LIBMESH_DIM; ++row) + for (unsigned int col = 0; col < LIBMESH_DIM; ++col) + tensor_set_component(T_in, row, col, tensor_get_component(T_in, row, col) * alpha); +} - if (dim == 1) - { - tensor_set_component(out, 0, 0, tensor_value_type_t(1) / tensor_get_component(T_in, 0, 0)); - return out; - } +template +LIBMESH_DEVICE_INLINE +void divide_tensor_components(TensorLike & T_in, const Scalar & alpha) +{ + for (unsigned int row = 0; row < LIBMESH_DIM; ++row) + for (unsigned int col = 0; col < LIBMESH_DIM; ++col) + tensor_set_component(T_in, row, col, tensor_get_component(T_in, row, col) / alpha); +} - const auto det = tensor_leading_determinant(T_in, dim); +} // namespace detail - if (dim == 2) - { - tensor_set_component(out, 0, 0, tensor_get_component(T_in, 1, 1) / det); - tensor_set_component(out, 0, 1, -tensor_get_component(T_in, 0, 1) / det); - tensor_set_component(out, 1, 0, -tensor_get_component(T_in, 1, 0) / det); - tensor_set_component(out, 1, 1, tensor_get_component(T_in, 0, 0) / det); - return out; - } +// Tensor reductions and predicates -#if LIBMESH_DIM > 2 - const auto a00 = tensor_get_component(T_in, 0, 0); - const auto a01 = tensor_get_component(T_in, 0, 1); - const auto a02 = tensor_get_component(T_in, 0, 2); - const auto a10 = tensor_get_component(T_in, 1, 0); - const auto a11 = tensor_get_component(T_in, 1, 1); - const auto a12 = tensor_get_component(T_in, 1, 2); - const auto a20 = tensor_get_component(T_in, 2, 0); - const auto a21 = tensor_get_component(T_in, 2, 1); - const auto a22 = tensor_get_component(T_in, 2, 2); +template +LIBMESH_DEVICE_INLINE +auto tensor_contract(const LeftTensor & left, const RightTensor & right) +{ + static_assert(is_tensor_like_v, "tensor_contract() requires a tensor-like left input"); + static_assert(is_tensor_like_v, "tensor_contract() requires a tensor-like right input"); - tensor_set_component(out, 0, 0, (a11 * a22 - a12 * a21) / det); - tensor_set_component(out, 0, 1, (a02 * a21 - a01 * a22) / det); - tensor_set_component(out, 0, 2, (a01 * a12 - a02 * a11) / det); - tensor_set_component(out, 1, 0, (a12 * a20 - a10 * a22) / det); - tensor_set_component(out, 1, 1, (a00 * a22 - a02 * a20) / det); - tensor_set_component(out, 1, 2, (a02 * a10 - a00 * a12) / det); - tensor_set_component(out, 2, 0, (a10 * a21 - a11 * a20) / det); - tensor_set_component(out, 2, 1, (a01 * a20 - a00 * a21) / det); - tensor_set_component(out, 2, 2, (a00 * a11 - a01 * a10) / det); -#else - libmesh_ignore(T_in); -#endif + using sum_type = + detail::remove_cvref_t; - return out; -} + sum_type sum = sum_type(0); + for (unsigned int row = 0; row < LIBMESH_DIM; ++row) + for (unsigned int col = 0; col < LIBMESH_DIM; ++col) + sum += tensor_get_component(left, row, col) * tensor_get_component(right, row, col); -template ::value, int>::type = 0> -LIBMESH_DEVICE_INLINE -tensor_semantic_type_t tensor_inverse(const TensorLike & T_in, const unsigned int dim = LIBMESH_DIM) -{ - return tensor_inverse>(T_in, dim); + return sum; } -template +template LIBMESH_DEVICE_INLINE -ResultTensor tensor_transpose(const TensorLike & T_in) +auto tensor_norm_sq(const TensorLike & T_in) { - ResultTensor out; - out.zero(); + static_assert(is_tensor_like_v, "tensor_norm_sq() requires a tensor-like input"); + using norm_type = detail::remove_cvref_t; + + norm_type sum = norm_type(0); for (unsigned int row = 0; row < LIBMESH_DIM; ++row) for (unsigned int col = 0; col < LIBMESH_DIM; ++col) - tensor_set_component(out, row, col, tensor_get_component(T_in, col, row)); + sum += libMesh::TensorTools::norm_sq(tensor_get_component(T_in, row, col)); - return out; + return sum; } -template ::value, int>::type = 0> +template LIBMESH_DEVICE_INLINE -tensor_semantic_type_t tensor_transpose(const TensorLike & T_in) +auto tensor_norm(const TensorLike & T_in) { - return tensor_transpose>(T_in); + using std::sqrt; + return sqrt(tensor_norm_sq(T_in)); } -template +template LIBMESH_DEVICE_INLINE -ResultTensor tensor_linear_combination(const ScalarA & alpha, - const TensorA & A, - const ScalarB & beta, - const TensorB & B) +auto tensor_trace(const TensorLike & T_in) { - ResultTensor out; - out.zero(); + static_assert(is_tensor_like_v, "tensor_trace() requires a tensor-like input"); - for (unsigned int row = 0; row < LIBMESH_DIM; ++row) - for (unsigned int col = 0; col < LIBMESH_DIM; ++col) - tensor_set_component(out, - row, - col, - alpha * tensor_get_component(A, row, col) + - beta * tensor_get_component(B, row, col)); + using trace_type = detail::remove_cvref_t; + trace_type sum = trace_type(0); + for (unsigned int i = 0; i < LIBMESH_DIM; ++i) + sum += tensor_get_component(T_in, i, i); - return out; + return sum; } -template ::value, int>::type = 0> +template LIBMESH_DEVICE_INLINE -tensor_semantic_type_t tensor_linear_combination(const ScalarA & alpha, - const TensorA & A, - const ScalarB & beta, - const TensorB & B) +bool tensor_is_zero(const TensorLike & T_in) { - return tensor_linear_combination>(alpha, A, beta, B); + static_assert(is_tensor_like_v, "tensor_is_zero() requires a tensor-like input"); + + for (unsigned int row = 0; row < LIBMESH_DIM; ++row) + for (unsigned int col = 0; col < LIBMESH_DIM; ++col) + if (tensor_get_component(T_in, row, col) != tensor_value_type_t(0)) + return false; + + return true; } +// Tensor arithmetic + template LIBMESH_DEVICE_INLINE -ResultTensor tensor_multiply(const LeftTensor & left, const RightTensor & right) +ResultTensor tensor_add(const LeftTensor & left, const RightTensor & right) { ResultTensor out; out.zero(); for (unsigned int row = 0; row < LIBMESH_DIM; ++row) for (unsigned int col = 0; col < LIBMESH_DIM; ++col) - { - auto value = tensor_get_component(left, row, 0) * tensor_get_component(right, 0, col); - for (unsigned int k = 1; k < LIBMESH_DIM; ++k) - value += tensor_get_component(left, row, k) * tensor_get_component(right, k, col); - tensor_set_component(out, row, col, value); - } + tensor_set_component(out, + row, + col, + tensor_get_component(left, row, col) + tensor_get_component(right, row, col)); return out; } @@ -447,115 +450,124 @@ template ::value, int>::type = 0> LIBMESH_DEVICE_INLINE -tensor_semantic_type_t tensor_multiply(const LeftTensor & left, const RightTensor & right) +tensor_semantic_type_t tensor_add(const LeftTensor & left, const RightTensor & right) { - return tensor_multiply>(left, right); + return tensor_add>(left, right); } -// Tensor/vector conversions - -template +template LIBMESH_DEVICE_INLINE -ResultVector tensor_row(const TensorLike & T_in, const unsigned int row) +ResultTensor tensor_subtract(const LeftTensor & left, const RightTensor & right) { - ResultVector out; + ResultTensor out; out.zero(); - for (unsigned int col = 0; col < LIBMESH_DIM; ++col) - vector_set_component(out, col, tensor_get_component(T_in, row, col)); + for (unsigned int row = 0; row < LIBMESH_DIM; ++row) + for (unsigned int col = 0; col < LIBMESH_DIM; ++col) + tensor_set_component(out, + row, + col, + tensor_get_component(left, row, col) - tensor_get_component(right, row, col)); return out; } template ::value, int>::type = 0> LIBMESH_DEVICE_INLINE -libMesh::TypeVector> -tensor_row(const TensorLike & T_in, const unsigned int row) +tensor_semantic_type_t tensor_subtract(const LeftTensor & left, const RightTensor & right) { - return tensor_row>>(T_in, row); + return tensor_subtract>(left, right); } -template +template LIBMESH_DEVICE_INLINE -ResultVector tensor_column(const TensorLike & T_in, const unsigned int col) +ResultTensor tensor_scale(const Scalar & alpha, const TensorLike & T_in) { - ResultVector out; + ResultTensor out; out.zero(); for (unsigned int row = 0; row < LIBMESH_DIM; ++row) - vector_set_component(out, row, tensor_get_component(T_in, row, col)); + for (unsigned int col = 0; col < LIBMESH_DIM; ++col) + tensor_set_component(out, row, col, alpha * tensor_get_component(T_in, row, col)); return out; } template ::value, int>::type = 0> LIBMESH_DEVICE_INLINE -libMesh::TypeVector> -tensor_column(const TensorLike & T_in, const unsigned int col) +tensor_semantic_type_t tensor_scale(const Scalar & alpha, const TensorLike & T_in) { - return tensor_column>>(T_in, col); + return tensor_scale>(alpha, T_in); } -template +template LIBMESH_DEVICE_INLINE -ResultVector tensor_vector_multiply(const TensorLike & T_in, const VectorLike & v) +ResultTensor tensor_divide(const TensorLike & T_in, const Scalar & alpha) { - ResultVector out; + ResultTensor out; out.zero(); for (unsigned int row = 0; row < LIBMESH_DIM; ++row) - { - auto value = tensor_get_component(T_in, row, 0) * vector_get_component(v, 0); - for (unsigned int col = 1; col < LIBMESH_DIM; ++col) - value += tensor_get_component(T_in, row, col) * vector_get_component(v, col); - vector_set_component(out, row, value); - } + for (unsigned int col = 0; col < LIBMESH_DIM; ++col) + tensor_set_component(out, row, col, tensor_get_component(T_in, row, col) / alpha); return out; } template ::value, int>::type = 0> LIBMESH_DEVICE_INLINE -vector_semantic_type_t tensor_vector_multiply(const TensorLike & T_in, const VectorLike & v) +tensor_semantic_type_t tensor_divide(const TensorLike & T_in, const Scalar & alpha) { - return tensor_vector_multiply>(T_in, v); + return tensor_divide>(T_in, alpha); } -template +template LIBMESH_DEVICE_INLINE -ResultVector vector_tensor_multiply(const VectorLike & v, const TensorLike & T_in) +ResultTensor tensor_linear_combination(const ScalarA & alpha, + const TensorA & A, + const ScalarB & beta, + const TensorB & B) { - ResultVector out; + ResultTensor out; out.zero(); - for (unsigned int col = 0; col < LIBMESH_DIM; ++col) - { - auto value = vector_get_component(v, 0) * tensor_get_component(T_in, 0, col); - for (unsigned int row = 1; row < LIBMESH_DIM; ++row) - value += vector_get_component(v, row) * tensor_get_component(T_in, row, col); - vector_set_component(out, col, value); - } + for (unsigned int row = 0; row < LIBMESH_DIM; ++row) + for (unsigned int col = 0; col < LIBMESH_DIM; ++col) + tensor_set_component(out, + row, + col, + alpha * tensor_get_component(A, row, col) + + beta * tensor_get_component(B, row, col)); return out; } template ::value, int>::type = 0> LIBMESH_DEVICE_INLINE -vector_semantic_type_t vector_tensor_multiply(const VectorLike & v, const TensorLike & T_in) +tensor_semantic_type_t tensor_linear_combination(const ScalarA & alpha, + const TensorA & A, + const ScalarB & beta, + const TensorB & B) { - return vector_tensor_multiply>(v, T_in); + return tensor_linear_combination>(alpha, A, beta, B); } +// Tensor/vector conversions + // libMesh-like convenience wrappers template @@ -591,13 +603,29 @@ auto is_zero(const TensorLike & T_in) return tensor_is_zero(T_in); } +template +LIBMESH_DEVICE_INLINE +auto outer_product(const LeftVector & left, const RightVector & right) + -> std::enable_if_t && is_vector_like_v, ResultTensor> +{ + return detail::outer_product(left, right); +} + template LIBMESH_DEVICE_INLINE auto outer_product(const LeftVector & left, const RightVector & right) -> std::enable_if_t && is_vector_like_v, libMesh::TypeTensor>> { - return tensor_outer_product(left, right); + return outer_product>>(left, right); +} + +template +LIBMESH_DEVICE_INLINE +auto transpose(const TensorLike & T_in) + -> std::enable_if_t, ResultTensor> +{ + return detail::transpose(T_in); } template @@ -605,7 +633,7 @@ LIBMESH_DEVICE_INLINE auto transpose(const TensorLike & T_in) -> std::enable_if_t, tensor_semantic_type_t> { - return tensor_transpose(T_in); + return transpose>(T_in); } template @@ -616,12 +644,28 @@ auto det(const TensorLike & T_in) return T_in.det(); } +template +LIBMESH_DEVICE_INLINE +auto inverse(const TensorLike & T_in, const unsigned int dim = LIBMESH_DIM) + -> std::enable_if_t, ResultTensor> +{ + return detail::inverse(T_in, dim); +} + template LIBMESH_DEVICE_INLINE auto inverse(const TensorLike & T_in, const unsigned int dim = LIBMESH_DIM) -> std::enable_if_t, tensor_semantic_type_t> { - return tensor_inverse(T_in, dim); + return inverse>(T_in, dim); +} + +template +LIBMESH_DEVICE_INLINE +auto row(const TensorLike & T_in, const unsigned int i) + -> std::enable_if_t, ResultVector> +{ + return detail::row(T_in, i); } template @@ -629,7 +673,15 @@ LIBMESH_DEVICE_INLINE auto row(const TensorLike & T_in, const unsigned int i) -> std::enable_if_t, libMesh::TypeVector>> { - return tensor_row(T_in, i); + return row>>(T_in, i); +} + +template +LIBMESH_DEVICE_INLINE +auto column(const TensorLike & T_in, const unsigned int i) + -> std::enable_if_t, ResultVector> +{ + return detail::column(T_in, i); } template @@ -637,7 +689,15 @@ LIBMESH_DEVICE_INLINE auto column(const TensorLike & T_in, const unsigned int i) -> std::enable_if_t, libMesh::TypeVector>> { - return tensor_column(T_in, i); + return column>>(T_in, i); +} + +template +LIBMESH_DEVICE_INLINE +auto multiply(const LeftTensor & left, const RightTensor & right) + -> std::enable_if_t && is_tensor_like_v, ResultTensor> +{ + return detail::multiply(left, right); } template @@ -646,7 +706,15 @@ auto multiply(const LeftTensor & left, const RightTensor & right) -> std::enable_if_t && is_tensor_like_v, tensor_semantic_type_t> { - return tensor_multiply(left, right); + return multiply>(left, right); +} + +template +LIBMESH_DEVICE_INLINE +auto multiply(const TensorLike & T_in, const VectorLike & v) + -> std::enable_if_t && is_vector_like_v, ResultVector> +{ + return detail::multiply(T_in, v); } template @@ -655,7 +723,15 @@ auto multiply(const TensorLike & T_in, const VectorLike & v) -> std::enable_if_t && is_vector_like_v, vector_semantic_type_t> { - return tensor_vector_multiply(T_in, v); + return multiply>(T_in, v); +} + +template +LIBMESH_DEVICE_INLINE +auto multiply(const VectorLike & v, const TensorLike & T_in) + -> std::enable_if_t && is_tensor_like_v, ResultVector> +{ + return detail::multiply(v, T_in); } template @@ -664,7 +740,7 @@ auto multiply(const VectorLike & v, const TensorLike & T_in) -> std::enable_if_t && is_tensor_like_v, vector_semantic_type_t> { - return vector_tensor_multiply(v, T_in); + return multiply>(v, T_in); } template @@ -672,9 +748,7 @@ template LIBMESH_DEVICE_INLINE void tensor_ref::assign(const RightTensor & right) { - for (unsigned int row = 0; row < LIBMESH_DIM; ++row) - for (unsigned int col = 0; col < LIBMESH_DIM; ++col) - tensor_set_component(*this, row, col, tensor_get_component(right, row, col)); + detail::assign_tensor_components(*this, right); } template @@ -682,12 +756,7 @@ template LIBMESH_DEVICE_INLINE void tensor_ref::add(const RightTensor & right) { - for (unsigned int row = 0; row < LIBMESH_DIM; ++row) - for (unsigned int col = 0; col < LIBMESH_DIM; ++col) - tensor_set_component(*this, - row, - col, - tensor_get_component(*this, row, col) + tensor_get_component(right, row, col)); + detail::add_tensor_components(*this, right); } template @@ -695,13 +764,7 @@ template LIBMESH_DEVICE_INLINE void tensor_ref::add_scaled(const RightTensor & right, const value_type & factor) { - for (unsigned int row = 0; row < LIBMESH_DIM; ++row) - for (unsigned int col = 0; col < LIBMESH_DIM; ++col) - tensor_set_component(*this, - row, - col, - tensor_get_component(*this, row, col) + - factor * tensor_get_component(right, row, col)); + detail::add_scaled_tensor_components(*this, right, factor); } template @@ -709,12 +772,7 @@ template LIBMESH_DEVICE_INLINE void tensor_ref::subtract(const RightTensor & right) { - for (unsigned int row = 0; row < LIBMESH_DIM; ++row) - for (unsigned int col = 0; col < LIBMESH_DIM; ++col) - tensor_set_component(*this, - row, - col, - tensor_get_component(*this, row, col) - tensor_get_component(right, row, col)); + detail::subtract_tensor_components(*this, right); } template @@ -722,22 +780,14 @@ template LIBMESH_DEVICE_INLINE void tensor_ref::subtract_scaled(const RightTensor & right, const value_type & factor) { - for (unsigned int row = 0; row < LIBMESH_DIM; ++row) - for (unsigned int col = 0; col < LIBMESH_DIM; ++col) - tensor_set_component(*this, - row, - col, - tensor_get_component(*this, row, col) - - factor * tensor_get_component(right, row, col)); + detail::subtract_scaled_tensor_components(*this, right, factor); } template LIBMESH_DEVICE_INLINE void tensor_ref::zero() { - for (unsigned int row = 0; row < LIBMESH_DIM; ++row) - for (unsigned int col = 0; col < LIBMESH_DIM; ++col) - tensor_set_component(*this, row, col, value_type(0)); + detail::zero_tensor_components(*this); } template @@ -773,14 +823,14 @@ template LIBMESH_DEVICE_INLINE auto tensor_ref::transpose() const { - return tensor_transpose(*this); + return libMesh::Kokkos::transpose(*this); } template LIBMESH_DEVICE_INLINE auto tensor_ref::det(const unsigned int dim) const { - return tensor_leading_determinant(*this, dim); + return detail::leading_determinant(*this, dim); } template @@ -794,7 +844,7 @@ template LIBMESH_DEVICE_INLINE auto tensor_ref::inverse(const unsigned int dim) const { - return tensor_inverse(*this, dim); + return libMesh::Kokkos::inverse(*this, dim); } template @@ -802,7 +852,7 @@ template LIBMESH_DEVICE_INLINE void tensor_ref::solve(const VectorLike & b, ResultVector & x) const { - const auto solution = tensor_vector_multiply>(this->inverse(), b); + const auto solution = libMesh::Kokkos::multiply>(this->inverse(), b); for (unsigned int component = 0; component < LIBMESH_DIM; ++component) vector_set_component(x, component, vector_get_component(solution, component)); } @@ -811,14 +861,14 @@ template LIBMESH_DEVICE_INLINE auto tensor_ref::row(const unsigned int i) const { - return tensor_row(*this, i); + return libMesh::Kokkos::row(*this, i); } template LIBMESH_DEVICE_INLINE auto tensor_ref::column(const unsigned int i) const { - return tensor_column(*this, i); + return libMesh::Kokkos::column(*this, i); } template @@ -826,7 +876,7 @@ template LIBMESH_DEVICE_INLINE auto tensor_ref::left_multiply(const VectorLike & v) const { - return vector_tensor_multiply(v, *this); + return libMesh::Kokkos::multiply(v, *this); } // Operator-compatible wrappers for storage-backed refs and mixed ref/owning math. @@ -900,7 +950,7 @@ template @@ -957,13 +1007,7 @@ auto operator+=(LeftTensor & left, const RightTensor & right) (is_tensor_ref_v || is_tensor_ref_v), LeftTensor &> { - for (unsigned int row = 0; row < LIBMESH_DIM; ++row) - for (unsigned int col = 0; col < LIBMESH_DIM; ++col) - tensor_set_component(left, - row, - col, - tensor_get_component(left, row, col) + tensor_get_component(right, row, col)); - + detail::add_tensor_components(left, right); return left; } @@ -974,13 +1018,7 @@ auto operator-=(LeftTensor & left, const RightTensor & right) (is_tensor_ref_v || is_tensor_ref_v), LeftTensor &> { - for (unsigned int row = 0; row < LIBMESH_DIM; ++row) - for (unsigned int col = 0; col < LIBMESH_DIM; ++col) - tensor_set_component(left, - row, - col, - tensor_get_component(left, row, col) - tensor_get_component(right, row, col)); - + detail::subtract_tensor_components(left, right); return left; } @@ -991,10 +1029,7 @@ auto operator*=(LeftTensor & left, const Scalar & alpha) !is_vector_like_v && !is_tensor_like_v, LeftTensor &> { - for (unsigned int row = 0; row < LIBMESH_DIM; ++row) - for (unsigned int col = 0; col < LIBMESH_DIM; ++col) - tensor_set_component(left, row, col, tensor_get_component(left, row, col) * alpha); - + detail::scale_tensor_components(left, alpha); return left; } @@ -1005,10 +1040,7 @@ auto operator/=(LeftTensor & left, const Scalar & alpha) !is_vector_like_v && !is_tensor_like_v, LeftTensor &> { - for (unsigned int row = 0; row < LIBMESH_DIM; ++row) - for (unsigned int col = 0; col < LIBMESH_DIM; ++col) - tensor_set_component(left, row, col, tensor_get_component(left, row, col) / alpha); - + detail::divide_tensor_components(left, alpha); return left; } diff --git a/include/gpu/kokkos_vector_ops.h b/include/gpu/kokkos_vector_ops.h index fffbf789da7..591b4d051b1 100644 --- a/include/gpu/kokkos_vector_ops.h +++ b/include/gpu/kokkos_vector_ops.h @@ -44,6 +44,85 @@ vector_semantic_type_t copy_vector(const VectorLike & v) return copy_vector>(v); } +namespace detail +{ + +template +LIBMESH_DEVICE_INLINE +void assign_vector_components(LeftVector & left, const RightVector & right) +{ + for (unsigned int component = 0; component < LIBMESH_DIM; ++component) + vector_set_component(left, component, vector_get_component(right, component)); +} + +template +LIBMESH_DEVICE_INLINE +void add_vector_components(LeftVector & left, const RightVector & right) +{ + for (unsigned int component = 0; component < LIBMESH_DIM; ++component) + vector_set_component(left, + component, + vector_get_component(left, component) + vector_get_component(right, component)); +} + +template +LIBMESH_DEVICE_INLINE +void add_scaled_vector_components(LeftVector & left, const RightVector & right, const Scalar & factor) +{ + for (unsigned int component = 0; component < LIBMESH_DIM; ++component) + vector_set_component(left, + component, + vector_get_component(left, component) + + factor * vector_get_component(right, component)); +} + +template +LIBMESH_DEVICE_INLINE +void subtract_vector_components(LeftVector & left, const RightVector & right) +{ + for (unsigned int component = 0; component < LIBMESH_DIM; ++component) + vector_set_component(left, + component, + vector_get_component(left, component) - vector_get_component(right, component)); +} + +template +LIBMESH_DEVICE_INLINE +void subtract_scaled_vector_components(LeftVector & left, const RightVector & right, const Scalar & factor) +{ + for (unsigned int component = 0; component < LIBMESH_DIM; ++component) + vector_set_component(left, + component, + vector_get_component(left, component) - + factor * vector_get_component(right, component)); +} + +template +LIBMESH_DEVICE_INLINE +void zero_vector_components(VectorLike & v) +{ + for (unsigned int component = 0; component < LIBMESH_DIM; ++component) + vector_set_component(v, component, vector_value_type_t(0)); +} + +template +LIBMESH_DEVICE_INLINE +void scale_vector_components(VectorLike & v, const Scalar & alpha) +{ + for (unsigned int component = 0; component < LIBMESH_DIM; ++component) + vector_set_component(v, component, vector_get_component(v, component) * alpha); +} + +template +LIBMESH_DEVICE_INLINE +void divide_vector_components(VectorLike & v, const Scalar & alpha) +{ + for (unsigned int component = 0; component < LIBMESH_DIM; ++component) + vector_set_component(v, component, vector_get_component(v, component) / alpha); +} + +} // namespace detail + // Reductions and predicates template @@ -453,8 +532,7 @@ template LIBMESH_DEVICE_INLINE void vector_ref::assign(const RightVector & right) { - for (unsigned int component = 0; component < LIBMESH_DIM; ++component) - vector_set_component(*this, component, vector_get_component(right, component)); + detail::assign_vector_components(*this, right); } template @@ -462,10 +540,7 @@ template LIBMESH_DEVICE_INLINE void vector_ref::add(const RightVector & right) { - for (unsigned int component = 0; component < LIBMESH_DIM; ++component) - vector_set_component(*this, - component, - vector_get_component(*this, component) + vector_get_component(right, component)); + detail::add_vector_components(*this, right); } template @@ -473,11 +548,7 @@ template LIBMESH_DEVICE_INLINE void vector_ref::add_scaled(const RightVector & right, const value_type & factor) { - for (unsigned int component = 0; component < LIBMESH_DIM; ++component) - vector_set_component(*this, - component, - vector_get_component(*this, component) + - factor * vector_get_component(right, component)); + detail::add_scaled_vector_components(*this, right, factor); } template @@ -485,10 +556,7 @@ template LIBMESH_DEVICE_INLINE void vector_ref::subtract(const RightVector & right) { - for (unsigned int component = 0; component < LIBMESH_DIM; ++component) - vector_set_component(*this, - component, - vector_get_component(*this, component) - vector_get_component(right, component)); + detail::subtract_vector_components(*this, right); } template @@ -496,19 +564,14 @@ template LIBMESH_DEVICE_INLINE void vector_ref::subtract_scaled(const RightVector & right, const value_type & factor) { - for (unsigned int component = 0; component < LIBMESH_DIM; ++component) - vector_set_component(*this, - component, - vector_get_component(*this, component) - - factor * vector_get_component(right, component)); + detail::subtract_scaled_vector_components(*this, right, factor); } template LIBMESH_DEVICE_INLINE void vector_ref::zero() { - for (unsigned int component = 0; component < LIBMESH_DIM; ++component) - vector_set_component(*this, component, value_type(0)); + detail::zero_vector_components(*this); } template @@ -668,11 +731,7 @@ auto operator+=(LeftVector & left, const RightVector & right) (is_vector_ref_v || is_vector_ref_v), LeftVector &> { - for (unsigned int component = 0; component < LIBMESH_DIM; ++component) - vector_set_component(left, - component, - vector_get_component(left, component) + vector_get_component(right, component)); - + detail::add_vector_components(left, right); return left; } @@ -683,11 +742,7 @@ auto operator-=(LeftVector & left, const RightVector & right) (is_vector_ref_v || is_vector_ref_v), LeftVector &> { - for (unsigned int component = 0; component < LIBMESH_DIM; ++component) - vector_set_component(left, - component, - vector_get_component(left, component) - vector_get_component(right, component)); - + detail::subtract_vector_components(left, right); return left; } @@ -698,9 +753,7 @@ auto operator*=(LeftVector & left, const Scalar & alpha) !is_vector_like_v && !is_tensor_like_v, LeftVector &> { - for (unsigned int component = 0; component < LIBMESH_DIM; ++component) - vector_set_component(left, component, vector_get_component(left, component) * alpha); - + detail::scale_vector_components(left, alpha); return left; } @@ -711,9 +764,7 @@ auto operator/=(LeftVector & left, const Scalar & alpha) !is_vector_like_v && !is_tensor_like_v, LeftVector &> { - for (unsigned int component = 0; component < LIBMESH_DIM; ++component) - vector_set_component(left, component, vector_get_component(left, component) / alpha); - + detail::divide_vector_components(left, alpha); return left; } diff --git a/tests/numerics/kokkos_tensor_ops_oracle_runners.h b/tests/numerics/kokkos_tensor_ops_oracle_runners.h index 59aadda6a4f..de867d59f6d 100644 --- a/tests/numerics/kokkos_tensor_ops_oracle_runners.h +++ b/tests/numerics/kokkos_tensor_ops_oracle_runners.h @@ -126,7 +126,7 @@ test_tensor_ops() const auto a_ref = libMesh::Kokkos::make_vector_ref(d_a, 0); const auto b_ref = libMesh::Kokkos::make_vector_ref(d_b, 0); const auto c_ref = libMesh::Kokkos::make_vector_ref(d_c, 0); - const auto outer_d = libMesh::Kokkos::tensor_outer_product(a_ref, b_ref); + const auto outer_d = libMesh::Kokkos::outer_product(a_ref, b_ref); const auto transpose_d = A_ref.transpose(); const auto mix_d = Real(1.5) * A_ref - Real(0.25) * outer_d; const auto right_d = A_ref * c_ref; @@ -382,7 +382,7 @@ test_mixed_representation_ops() const auto inverse = A_ref.inverse(); const auto add = A_ref + ref_transpose; const auto scaled = Real(0.5) * A_ref; - const auto outer = libMesh::Kokkos::tensor_outer_product(a_ref, b); + const auto outer = libMesh::Kokkos::outer_product(a_ref, b); d_scalars(0) = a_ref * b; d_scalars(1) = A_ref.contract(outer); From b4d13365dc0b77ab9b1320df16d7f7c1f3768478 Mon Sep 17 00:00:00 2001 From: rochi00 Date: Tue, 12 May 2026 08:32:34 -0600 Subject: [PATCH 14/46] Make remaining tensor helpers internal-only --- include/gpu/kokkos_tensor_ops.h | 64 +++++++++++++++++++++++---------- 1 file changed, 46 insertions(+), 18 deletions(-) diff --git a/include/gpu/kokkos_tensor_ops.h b/include/gpu/kokkos_tensor_ops.h index c20ade2661e..c820eacd616 100644 --- a/include/gpu/kokkos_tensor_ops.h +++ b/include/gpu/kokkos_tensor_ops.h @@ -354,6 +354,9 @@ void divide_tensor_components(TensorLike & T_in, const Scalar & alpha) } // namespace detail +namespace detail +{ + // Tensor reductions and predicates template @@ -568,31 +571,33 @@ tensor_semantic_type_t tensor_linear_combination(const ScalarA & alpha, // Tensor/vector conversions +} // namespace detail + // libMesh-like convenience wrappers template LIBMESH_DEVICE_INLINE auto contract(const LeftTensor & left, const RightTensor & right) -> std::enable_if_t && is_tensor_like_v, - decltype(tensor_contract(left, right))> + decltype(detail::tensor_contract(left, right))> { - return tensor_contract(left, right); + return detail::tensor_contract(left, right); } template LIBMESH_DEVICE_INLINE auto norm_sq(const TensorLike & T_in) - -> std::enable_if_t, decltype(tensor_norm_sq(T_in))> + -> std::enable_if_t, decltype(detail::tensor_norm_sq(T_in))> { - return tensor_norm_sq(T_in); + return detail::tensor_norm_sq(T_in); } template LIBMESH_DEVICE_INLINE auto norm(const TensorLike & T_in) - -> std::enable_if_t, decltype(tensor_norm(T_in))> + -> std::enable_if_t, decltype(detail::tensor_norm(T_in))> { - return tensor_norm(T_in); + return detail::tensor_norm(T_in); } template @@ -600,7 +605,7 @@ LIBMESH_DEVICE_INLINE auto is_zero(const TensorLike & T_in) -> std::enable_if_t, bool> { - return tensor_is_zero(T_in); + return detail::tensor_is_zero(T_in); } template @@ -743,6 +748,29 @@ auto multiply(const VectorLike & v, const TensorLike & T_in) return multiply>(v, T_in); } +template +LIBMESH_DEVICE_INLINE +auto linear_combination(const ScalarA & alpha, + const TensorA & A, + const ScalarB & beta, + const TensorB & B) + -> std::enable_if_t && is_tensor_like_v, ResultTensor> +{ + return detail::tensor_linear_combination(alpha, A, beta, B); +} + +template +LIBMESH_DEVICE_INLINE +auto linear_combination(const ScalarA & alpha, + const TensorA & A, + const ScalarB & beta, + const TensorB & B) + -> std::enable_if_t && is_tensor_like_v, + tensor_semantic_type_t> +{ + return linear_combination>(alpha, A, beta, B); +} + template template LIBMESH_DEVICE_INLINE @@ -795,28 +823,28 @@ template LIBMESH_DEVICE_INLINE auto tensor_ref::contract(const RightTensor & right) const { - return tensor_contract(*this, right); + return detail::tensor_contract(*this, right); } template LIBMESH_DEVICE_INLINE auto tensor_ref::norm() const { - return tensor_norm(*this); + return detail::tensor_norm(*this); } template LIBMESH_DEVICE_INLINE auto tensor_ref::norm_sq() const { - return tensor_norm_sq(*this); + return detail::tensor_norm_sq(*this); } template LIBMESH_DEVICE_INLINE bool tensor_ref::is_zero() const { - return tensor_is_zero(*this); + return detail::tensor_is_zero(*this); } template @@ -837,7 +865,7 @@ template LIBMESH_DEVICE_INLINE auto tensor_ref::tr() const { - return tensor_trace(*this); + return detail::tensor_trace(*this); } template @@ -887,7 +915,7 @@ auto operator-(const TensorLike & T_in) -> std::enable_if_t && is_tensor_ref_v, tensor_semantic_type_t> { - return tensor_scale(tensor_value_type_t(-1), T_in); + return detail::tensor_scale(tensor_value_type_t(-1), T_in); } template @@ -897,7 +925,7 @@ auto operator+(const LeftTensor & left, const RightTensor & right) (is_tensor_ref_v || is_tensor_ref_v), tensor_semantic_type_t> { - return tensor_add(left, right); + return detail::tensor_add(left, right); } template @@ -907,7 +935,7 @@ auto operator-(const LeftTensor & left, const RightTensor & right) (is_tensor_ref_v || is_tensor_ref_v), tensor_semantic_type_t> { - return tensor_subtract(left, right); + return detail::tensor_subtract(left, right); } template @@ -939,7 +967,7 @@ auto operator/(const TensorLike & T_in, const Scalar & alpha) !is_vector_like_v && !is_tensor_like_v, tensor_semantic_type_t> { - return tensor_divide(T_in, alpha); + return detail::tensor_divide(T_in, alpha); } template Date: Tue, 12 May 2026 09:19:25 -0600 Subject: [PATCH 15/46] Reduce Kokkos algebra wrapper layers --- include/gpu/kokkos_tensor_ops.h | 320 ++++++-------------------------- include/gpu/kokkos_vector_ops.h | 282 +++++++--------------------- 2 files changed, 128 insertions(+), 474 deletions(-) diff --git a/include/gpu/kokkos_tensor_ops.h b/include/gpu/kokkos_tensor_ops.h index c820eacd616..2d94cb53443 100644 --- a/include/gpu/kokkos_tensor_ops.h +++ b/include/gpu/kokkos_tensor_ops.h @@ -187,7 +187,7 @@ ResultTensor transpose(const TensorLike & T_in) template LIBMESH_DEVICE_INLINE -ResultTensor multiply(const LeftTensor & left, const RightTensor & right) +ResultTensor multiply_tensors(const LeftTensor & left, const RightTensor & right) { ResultTensor out; out.zero(); @@ -232,7 +232,7 @@ ResultVector column(const TensorLike & T_in, const unsigned int col_index) template LIBMESH_DEVICE_INLINE -ResultVector multiply(const TensorLike & T_in, const VectorLike & v) +ResultVector multiply_tensor_vector(const TensorLike & T_in, const VectorLike & v) { ResultVector out; out.zero(); @@ -250,7 +250,7 @@ ResultVector multiply(const TensorLike & T_in, const VectorLike & v) template LIBMESH_DEVICE_INLINE -ResultVector multiply(const VectorLike & v, const TensorLike & T_in) +ResultVector multiply_vector_tensor(const VectorLike & v, const TensorLike & T_in) { ResultVector out; out.zero(); @@ -275,21 +275,18 @@ void assign_tensor_components(LeftTensor & left, const RightTensor & right) tensor_set_component(left, row, col, tensor_get_component(right, row, col)); } -template +template LIBMESH_DEVICE_INLINE -void add_tensor_components(LeftTensor & left, const RightTensor & right) +void fill_tensor_components(TensorLike & T_in, const Scalar & value) { for (unsigned int row = 0; row < LIBMESH_DIM; ++row) for (unsigned int col = 0; col < LIBMESH_DIM; ++col) - tensor_set_component(left, - row, - col, - tensor_get_component(left, row, col) + tensor_get_component(right, row, col)); + tensor_set_component(T_in, row, col, value); } template LIBMESH_DEVICE_INLINE -void add_scaled_tensor_components(LeftTensor & left, const RightTensor & right, const Scalar & factor) +void update_tensor_components(LeftTensor & left, const RightTensor & right, const Scalar & factor) { for (unsigned int row = 0; row < LIBMESH_DIM; ++row) for (unsigned int col = 0; col < LIBMESH_DIM; ++col) @@ -300,38 +297,53 @@ void add_scaled_tensor_components(LeftTensor & left, const RightTensor & right, factor * tensor_get_component(right, row, col)); } -template +template LIBMESH_DEVICE_INLINE -void subtract_tensor_components(LeftTensor & left, const RightTensor & right) +ResultTensor linear_combination(const ScalarA & alpha, + const TensorA & A, + const ScalarB & beta, + const TensorB & B) { + ResultTensor out; + out.zero(); + for (unsigned int row = 0; row < LIBMESH_DIM; ++row) for (unsigned int col = 0; col < LIBMESH_DIM; ++col) - tensor_set_component(left, + tensor_set_component(out, row, col, - tensor_get_component(left, row, col) - tensor_get_component(right, row, col)); + alpha * tensor_get_component(A, row, col) + + beta * tensor_get_component(B, row, col)); + + return out; } -template +template LIBMESH_DEVICE_INLINE -void subtract_scaled_tensor_components(LeftTensor & left, const RightTensor & right, const Scalar & factor) +ResultTensor scale_tensor(const Scalar & alpha, const TensorLike & T_in) { + ResultTensor out; + out.zero(); + for (unsigned int row = 0; row < LIBMESH_DIM; ++row) for (unsigned int col = 0; col < LIBMESH_DIM; ++col) - tensor_set_component(left, - row, - col, - tensor_get_component(left, row, col) - - factor * tensor_get_component(right, row, col)); + tensor_set_component(out, row, col, alpha * tensor_get_component(T_in, row, col)); + + return out; } -template +template LIBMESH_DEVICE_INLINE -void zero_tensor_components(TensorLike & T_in) +ResultTensor divide_tensor(const TensorLike & T_in, const Scalar & alpha) { + ResultTensor out; + out.zero(); + for (unsigned int row = 0; row < LIBMESH_DIM; ++row) for (unsigned int col = 0; col < LIBMESH_DIM; ++col) - tensor_set_component(T_in, row, col, tensor_value_type_t(0)); + tensor_set_component(out, row, col, tensor_get_component(T_in, row, col) / alpha); + + return out; } template @@ -352,11 +364,6 @@ void divide_tensor_components(TensorLike & T_in, const Scalar & alpha) tensor_set_component(T_in, row, col, tensor_get_component(T_in, row, col) / alpha); } -} // namespace detail - -namespace detail -{ - // Tensor reductions and predicates template @@ -429,148 +436,6 @@ bool tensor_is_zero(const TensorLike & T_in) return true; } -// Tensor arithmetic - -template -LIBMESH_DEVICE_INLINE -ResultTensor tensor_add(const LeftTensor & left, const RightTensor & right) -{ - ResultTensor out; - out.zero(); - - for (unsigned int row = 0; row < LIBMESH_DIM; ++row) - for (unsigned int col = 0; col < LIBMESH_DIM; ++col) - tensor_set_component(out, - row, - col, - tensor_get_component(left, row, col) + tensor_get_component(right, row, col)); - - return out; -} - -template ::value, int>::type = 0> -LIBMESH_DEVICE_INLINE -tensor_semantic_type_t tensor_add(const LeftTensor & left, const RightTensor & right) -{ - return tensor_add>(left, right); -} - -template -LIBMESH_DEVICE_INLINE -ResultTensor tensor_subtract(const LeftTensor & left, const RightTensor & right) -{ - ResultTensor out; - out.zero(); - - for (unsigned int row = 0; row < LIBMESH_DIM; ++row) - for (unsigned int col = 0; col < LIBMESH_DIM; ++col) - tensor_set_component(out, - row, - col, - tensor_get_component(left, row, col) - tensor_get_component(right, row, col)); - - return out; -} - -template ::value, int>::type = 0> -LIBMESH_DEVICE_INLINE -tensor_semantic_type_t tensor_subtract(const LeftTensor & left, const RightTensor & right) -{ - return tensor_subtract>(left, right); -} - -template -LIBMESH_DEVICE_INLINE -ResultTensor tensor_scale(const Scalar & alpha, const TensorLike & T_in) -{ - ResultTensor out; - out.zero(); - - for (unsigned int row = 0; row < LIBMESH_DIM; ++row) - for (unsigned int col = 0; col < LIBMESH_DIM; ++col) - tensor_set_component(out, row, col, alpha * tensor_get_component(T_in, row, col)); - - return out; -} - -template ::value, int>::type = 0> -LIBMESH_DEVICE_INLINE -tensor_semantic_type_t tensor_scale(const Scalar & alpha, const TensorLike & T_in) -{ - return tensor_scale>(alpha, T_in); -} - -template -LIBMESH_DEVICE_INLINE -ResultTensor tensor_divide(const TensorLike & T_in, const Scalar & alpha) -{ - ResultTensor out; - out.zero(); - - for (unsigned int row = 0; row < LIBMESH_DIM; ++row) - for (unsigned int col = 0; col < LIBMESH_DIM; ++col) - tensor_set_component(out, row, col, tensor_get_component(T_in, row, col) / alpha); - - return out; -} - -template ::value, int>::type = 0> -LIBMESH_DEVICE_INLINE -tensor_semantic_type_t tensor_divide(const TensorLike & T_in, const Scalar & alpha) -{ - return tensor_divide>(T_in, alpha); -} - -template -LIBMESH_DEVICE_INLINE -ResultTensor tensor_linear_combination(const ScalarA & alpha, - const TensorA & A, - const ScalarB & beta, - const TensorB & B) -{ - ResultTensor out; - out.zero(); - - for (unsigned int row = 0; row < LIBMESH_DIM; ++row) - for (unsigned int col = 0; col < LIBMESH_DIM; ++col) - tensor_set_component(out, - row, - col, - alpha * tensor_get_component(A, row, col) + - beta * tensor_get_component(B, row, col)); - - return out; -} - -template ::value, int>::type = 0> -LIBMESH_DEVICE_INLINE -tensor_semantic_type_t tensor_linear_combination(const ScalarA & alpha, - const TensorA & A, - const ScalarB & beta, - const TensorB & B) -{ - return tensor_linear_combination>(alpha, A, beta, B); -} - -// Tensor/vector conversions - } // namespace detail // libMesh-like convenience wrappers @@ -697,80 +562,6 @@ auto column(const TensorLike & T_in, const unsigned int i) return column>>(T_in, i); } -template -LIBMESH_DEVICE_INLINE -auto multiply(const LeftTensor & left, const RightTensor & right) - -> std::enable_if_t && is_tensor_like_v, ResultTensor> -{ - return detail::multiply(left, right); -} - -template -LIBMESH_DEVICE_INLINE -auto multiply(const LeftTensor & left, const RightTensor & right) - -> std::enable_if_t && is_tensor_like_v, - tensor_semantic_type_t> -{ - return multiply>(left, right); -} - -template -LIBMESH_DEVICE_INLINE -auto multiply(const TensorLike & T_in, const VectorLike & v) - -> std::enable_if_t && is_vector_like_v, ResultVector> -{ - return detail::multiply(T_in, v); -} - -template -LIBMESH_DEVICE_INLINE -auto multiply(const TensorLike & T_in, const VectorLike & v) - -> std::enable_if_t && is_vector_like_v, - vector_semantic_type_t> -{ - return multiply>(T_in, v); -} - -template -LIBMESH_DEVICE_INLINE -auto multiply(const VectorLike & v, const TensorLike & T_in) - -> std::enable_if_t && is_tensor_like_v, ResultVector> -{ - return detail::multiply(v, T_in); -} - -template -LIBMESH_DEVICE_INLINE -auto multiply(const VectorLike & v, const TensorLike & T_in) - -> std::enable_if_t && is_tensor_like_v, - vector_semantic_type_t> -{ - return multiply>(v, T_in); -} - -template -LIBMESH_DEVICE_INLINE -auto linear_combination(const ScalarA & alpha, - const TensorA & A, - const ScalarB & beta, - const TensorB & B) - -> std::enable_if_t && is_tensor_like_v, ResultTensor> -{ - return detail::tensor_linear_combination(alpha, A, beta, B); -} - -template -LIBMESH_DEVICE_INLINE -auto linear_combination(const ScalarA & alpha, - const TensorA & A, - const ScalarB & beta, - const TensorB & B) - -> std::enable_if_t && is_tensor_like_v, - tensor_semantic_type_t> -{ - return linear_combination>(alpha, A, beta, B); -} - template template LIBMESH_DEVICE_INLINE @@ -784,7 +575,7 @@ template LIBMESH_DEVICE_INLINE void tensor_ref::add(const RightTensor & right) { - detail::add_tensor_components(*this, right); + detail::update_tensor_components(*this, right, value_type(1)); } template @@ -792,7 +583,7 @@ template LIBMESH_DEVICE_INLINE void tensor_ref::add_scaled(const RightTensor & right, const value_type & factor) { - detail::add_scaled_tensor_components(*this, right, factor); + detail::update_tensor_components(*this, right, factor); } template @@ -800,7 +591,7 @@ template LIBMESH_DEVICE_INLINE void tensor_ref::subtract(const RightTensor & right) { - detail::subtract_tensor_components(*this, right); + detail::update_tensor_components(*this, right, value_type(-1)); } template @@ -808,14 +599,14 @@ template LIBMESH_DEVICE_INLINE void tensor_ref::subtract_scaled(const RightTensor & right, const value_type & factor) { - detail::subtract_scaled_tensor_components(*this, right, factor); + detail::update_tensor_components(*this, right, -factor); } template LIBMESH_DEVICE_INLINE void tensor_ref::zero() { - detail::zero_tensor_components(*this); + detail::fill_tensor_components(*this, value_type(0)); } template @@ -880,7 +671,8 @@ template LIBMESH_DEVICE_INLINE void tensor_ref::solve(const VectorLike & b, ResultVector & x) const { - const auto solution = libMesh::Kokkos::multiply>(this->inverse(), b); + const auto solution = + detail::multiply_tensor_vector>(this->inverse(), b); for (unsigned int component = 0; component < LIBMESH_DIM; ++component) vector_set_component(x, component, vector_get_component(solution, component)); } @@ -904,7 +696,7 @@ template LIBMESH_DEVICE_INLINE auto tensor_ref::left_multiply(const VectorLike & v) const { - return libMesh::Kokkos::multiply(v, *this); + return v * *this; } // Operator-compatible wrappers for storage-backed refs and mixed ref/owning math. @@ -915,7 +707,7 @@ auto operator-(const TensorLike & T_in) -> std::enable_if_t && is_tensor_ref_v, tensor_semantic_type_t> { - return detail::tensor_scale(tensor_value_type_t(-1), T_in); + return detail::scale_tensor>(tensor_value_type_t(-1), T_in); } template @@ -925,7 +717,8 @@ auto operator+(const LeftTensor & left, const RightTensor & right) (is_tensor_ref_v || is_tensor_ref_v), tensor_semantic_type_t> { - return detail::tensor_add(left, right); + return detail::linear_combination>( + tensor_value_type_t(1), left, tensor_value_type_t(1), right); } template @@ -935,7 +728,8 @@ auto operator-(const LeftTensor & left, const RightTensor & right) (is_tensor_ref_v || is_tensor_ref_v), tensor_semantic_type_t> { - return detail::tensor_subtract(left, right); + return detail::linear_combination>( + tensor_value_type_t(1), left, tensor_value_type_t(-1), right); } template >(alpha, T_in); } template >(alpha, T_in); } template @@ -967,7 +761,7 @@ auto operator/(const TensorLike & T_in, const Scalar & alpha) !is_vector_like_v && !is_tensor_like_v, tensor_semantic_type_t> { - return detail::tensor_divide(T_in, alpha); + return detail::divide_tensor>(T_in, alpha); } template >(left, right); } template >(T_in, v); } template >(v, T_in); } template @@ -1035,7 +829,7 @@ auto operator+=(LeftTensor & left, const RightTensor & right) (is_tensor_ref_v || is_tensor_ref_v), LeftTensor &> { - detail::add_tensor_components(left, right); + detail::update_tensor_components(left, right, tensor_value_type_t(1)); return left; } @@ -1046,7 +840,7 @@ auto operator-=(LeftTensor & left, const RightTensor & right) (is_tensor_ref_v || is_tensor_ref_v), LeftTensor &> { - detail::subtract_tensor_components(left, right); + detail::update_tensor_components(left, right, tensor_value_type_t(-1)); return left; } diff --git a/include/gpu/kokkos_vector_ops.h b/include/gpu/kokkos_vector_ops.h index 591b4d051b1..2c68a0341f2 100644 --- a/include/gpu/kokkos_vector_ops.h +++ b/include/gpu/kokkos_vector_ops.h @@ -55,19 +55,17 @@ void assign_vector_components(LeftVector & left, const RightVector & right) vector_set_component(left, component, vector_get_component(right, component)); } -template +template LIBMESH_DEVICE_INLINE -void add_vector_components(LeftVector & left, const RightVector & right) +void fill_vector_components(VectorLike & v, const Scalar & value) { for (unsigned int component = 0; component < LIBMESH_DIM; ++component) - vector_set_component(left, - component, - vector_get_component(left, component) + vector_get_component(right, component)); + vector_set_component(v, component, value); } template LIBMESH_DEVICE_INLINE -void add_scaled_vector_components(LeftVector & left, const RightVector & right, const Scalar & factor) +void update_vector_components(LeftVector & left, const RightVector & right, const Scalar & factor) { for (unsigned int component = 0; component < LIBMESH_DIM; ++component) vector_set_component(left, @@ -76,33 +74,72 @@ void add_scaled_vector_components(LeftVector & left, const RightVector & right, factor * vector_get_component(right, component)); } -template +template LIBMESH_DEVICE_INLINE -void subtract_vector_components(LeftVector & left, const RightVector & right) +ResultVector linear_combination(const ScalarA & alpha, + const VectorA & a, + const ScalarB & beta, + const VectorB & b) { + ResultVector out; + out.zero(); + for (unsigned int component = 0; component < LIBMESH_DIM; ++component) - vector_set_component(left, + vector_set_component(out, component, - vector_get_component(left, component) - vector_get_component(right, component)); + alpha * vector_get_component(a, component) + + beta * vector_get_component(b, component)); + + return out; } -template +template LIBMESH_DEVICE_INLINE -void subtract_scaled_vector_components(LeftVector & left, const RightVector & right, const Scalar & factor) +ResultVector linear_combination(const ScalarA & alpha, + const VectorA & a, + const ScalarB & beta, + const VectorB & b, + const ScalarC & gamma, + const VectorC & c) { + ResultVector out; + out.zero(); + for (unsigned int component = 0; component < LIBMESH_DIM; ++component) - vector_set_component(left, + vector_set_component(out, component, - vector_get_component(left, component) - - factor * vector_get_component(right, component)); + alpha * vector_get_component(a, component) + + beta * vector_get_component(b, component) + + gamma * vector_get_component(c, component)); + + return out; } -template +template LIBMESH_DEVICE_INLINE -void zero_vector_components(VectorLike & v) +ResultVector scale_vector(const Scalar & alpha, const VectorLike & v) { + ResultVector out; + out.zero(); + + for (unsigned int component = 0; component < LIBMESH_DIM; ++component) + vector_set_component(out, component, alpha * vector_get_component(v, component)); + + return out; +} + +template +LIBMESH_DEVICE_INLINE +ResultVector divide_vector(const VectorLike & v, const Scalar & alpha) +{ + ResultVector out; + out.zero(); + for (unsigned int component = 0; component < LIBMESH_DIM; ++component) - vector_set_component(v, component, vector_value_type_t(0)); + vector_set_component(out, component, vector_get_component(v, component) / alpha); + + return out; } template @@ -194,192 +231,13 @@ bool vector_is_zero(const VectorLike & v) return true; } -// Arithmetic - -template -LIBMESH_DEVICE_INLINE -ResultVector vector_add(const LeftVector & left, const RightVector & right) -{ - ResultVector out; - out.zero(); - - for (unsigned int component = 0; component < LIBMESH_DIM; ++component) - vector_set_component(out, - component, - vector_get_component(left, component) + vector_get_component(right, component)); - - return out; -} - -template ::value, int>::type = 0> -LIBMESH_DEVICE_INLINE -vector_semantic_type_t vector_add(const LeftVector & left, const RightVector & right) -{ - return vector_add>(left, right); -} - -template -LIBMESH_DEVICE_INLINE -ResultVector vector_subtract(const LeftVector & left, const RightVector & right) -{ - ResultVector out; - out.zero(); - - for (unsigned int component = 0; component < LIBMESH_DIM; ++component) - vector_set_component(out, - component, - vector_get_component(left, component) - vector_get_component(right, component)); - - return out; -} - -template ::value, int>::type = 0> -LIBMESH_DEVICE_INLINE -vector_semantic_type_t vector_subtract(const LeftVector & left, const RightVector & right) -{ - return vector_subtract>(left, right); -} - -template -LIBMESH_DEVICE_INLINE -ResultVector vector_scale(const Scalar & alpha, const VectorLike & v) -{ - ResultVector out; - out.zero(); - - for (unsigned int component = 0; component < LIBMESH_DIM; ++component) - vector_set_component(out, component, alpha * vector_get_component(v, component)); - - return out; -} - -template ::value, int>::type = 0> -LIBMESH_DEVICE_INLINE -vector_semantic_type_t vector_scale(const Scalar & alpha, const VectorLike & v) -{ - return vector_scale>(alpha, v); -} - -template -LIBMESH_DEVICE_INLINE -ResultVector vector_divide(const VectorLike & v, const Scalar & alpha) -{ - ResultVector out; - out.zero(); - - for (unsigned int component = 0; component < LIBMESH_DIM; ++component) - vector_set_component(out, component, vector_get_component(v, component) / alpha); - - return out; -} - -template ::value, int>::type = 0> -LIBMESH_DEVICE_INLINE -vector_semantic_type_t vector_divide(const VectorLike & v, const Scalar & alpha) -{ - return vector_divide>(v, alpha); -} - -template -LIBMESH_DEVICE_INLINE -ResultVector vector_linear_combination(const ScalarA & alpha, - const VectorA & a, - const ScalarB & beta, - const VectorB & b) -{ - ResultVector out; - out.zero(); - - for (unsigned int component = 0; component < LIBMESH_DIM; ++component) - vector_set_component(out, - component, - alpha * vector_get_component(a, component) + - beta * vector_get_component(b, component)); - - return out; -} - -template ::value, int>::type = 0> -LIBMESH_DEVICE_INLINE -vector_semantic_type_t vector_linear_combination(const ScalarA & alpha, - const VectorA & a, - const ScalarB & beta, - const VectorB & b) -{ - return vector_linear_combination>(alpha, a, beta, b); -} - -template -LIBMESH_DEVICE_INLINE -ResultVector vector_linear_combination(const ScalarA & alpha, - const VectorA & a, - const ScalarB & beta, - const VectorB & b, - const ScalarC & gamma, - const VectorC & c) -{ - ResultVector out; - out.zero(); - - for (unsigned int component = 0; component < LIBMESH_DIM; ++component) - vector_set_component(out, - component, - alpha * vector_get_component(a, component) + - beta * vector_get_component(b, component) + - gamma * vector_get_component(c, component)); - - return out; -} - -template ::value, int>::type = 0> -LIBMESH_DEVICE_INLINE -vector_semantic_type_t vector_linear_combination(const ScalarA & alpha, - const VectorA & a, - const ScalarB & beta, - const VectorB & b, - const ScalarC & gamma, - const VectorC & c) -{ - return vector_linear_combination>(alpha, a, beta, b, gamma, c); -} - template LIBMESH_DEVICE_INLINE ResultVector vector_unit(const VectorLike & v) { const auto length = vector_norm(v); libmesh_assert_not_equal_to(length, static_cast(0.)); - return vector_divide(v, length); + return detail::divide_vector(v, length); } template LIBMESH_DEVICE_INLINE void vector_ref::add(const RightVector & right) { - detail::add_vector_components(*this, right); + detail::update_vector_components(*this, right, value_type(1)); } template @@ -548,7 +406,7 @@ template LIBMESH_DEVICE_INLINE void vector_ref::add_scaled(const RightVector & right, const value_type & factor) { - detail::add_scaled_vector_components(*this, right, factor); + detail::update_vector_components(*this, right, factor); } template @@ -556,7 +414,7 @@ template LIBMESH_DEVICE_INLINE void vector_ref::subtract(const RightVector & right) { - detail::subtract_vector_components(*this, right); + detail::update_vector_components(*this, right, value_type(-1)); } template @@ -564,14 +422,14 @@ template LIBMESH_DEVICE_INLINE void vector_ref::subtract_scaled(const RightVector & right, const value_type & factor) { - detail::subtract_scaled_vector_components(*this, right, factor); + detail::update_vector_components(*this, right, -factor); } template LIBMESH_DEVICE_INLINE void vector_ref::zero() { - detail::zero_vector_components(*this); + detail::fill_vector_components(*this, value_type(0)); } template @@ -633,7 +491,7 @@ auto operator-(const VectorLike & v) -> std::enable_if_t && is_vector_ref_v, vector_semantic_type_t> { - return vector_scale(vector_value_type_t(-1), v); + return detail::scale_vector>(vector_value_type_t(-1), v); } template @@ -643,7 +501,8 @@ auto operator+(const LeftVector & left, const RightVector & right) (is_vector_ref_v || is_vector_ref_v), vector_semantic_type_t> { - return vector_add(left, right); + return detail::linear_combination>( + vector_value_type_t(1), left, vector_value_type_t(1), right); } template @@ -653,7 +512,8 @@ auto operator-(const LeftVector & left, const RightVector & right) (is_vector_ref_v || is_vector_ref_v), vector_semantic_type_t> { - return vector_subtract(left, right); + return detail::linear_combination>( + vector_value_type_t(1), left, vector_value_type_t(-1), right); } template >(alpha, v); } template >(alpha, v); } template >(v, alpha); } template @@ -731,7 +591,7 @@ auto operator+=(LeftVector & left, const RightVector & right) (is_vector_ref_v || is_vector_ref_v), LeftVector &> { - detail::add_vector_components(left, right); + detail::update_vector_components(left, right, vector_value_type_t(1)); return left; } @@ -742,7 +602,7 @@ auto operator-=(LeftVector & left, const RightVector & right) (is_vector_ref_v || is_vector_ref_v), LeftVector &> { - detail::subtract_vector_components(left, right); + detail::update_vector_components(left, right, vector_value_type_t(-1)); return left; } From b93e873c351f78d92fa51195b21d26554d86c15c Mon Sep 17 00:00:00 2001 From: rochi00 Date: Tue, 12 May 2026 09:42:50 -0600 Subject: [PATCH 16/46] Update vector oracle to use Kokkos ref operators --- tests/numerics/kokkos_vector_ops_oracle_runners.h | 9 +++------ 1 file changed, 3 insertions(+), 6 deletions(-) diff --git a/tests/numerics/kokkos_vector_ops_oracle_runners.h b/tests/numerics/kokkos_vector_ops_oracle_runners.h index 73fbbe7834a..5fcd7e45a5e 100644 --- a/tests/numerics/kokkos_vector_ops_oracle_runners.h +++ b/tests/numerics/kokkos_vector_ops_oracle_runners.h @@ -34,14 +34,11 @@ test_vector_ops_case(const vector_case & info) const auto c_ref = libMesh::Kokkos::make_vector_ref(d_c, 0); const Vec copied = libMesh::Kokkos::copy_vector(a_ref); - const Vec mix = libMesh::Kokkos::vector_linear_combination( - Real(1), a_ref, Real(1), b_ref, Real(-1), c_ref); - const Vec scaled = libMesh::Kokkos::vector_linear_combination( - Real(1.25), a_ref, Real(-0.5), b_ref, Real(0.25), c_ref); + const Vec mix = a_ref + b_ref - c_ref; + const Vec scaled = Real(1.25) * a_ref + Real(-0.5) * b_ref + Real(0.25) * c_ref; const Vec plus_assign = a_ref + b_ref; const Vec minus_assign = a_ref - b_ref; - const Vec accum = libMesh::Kokkos::vector_linear_combination( - Real(1.25), a_ref, Real(-0.5), b_ref, Real(0.25), c_ref); + const Vec accum = Real(1.25) * a_ref + Real(-0.5) * b_ref + Real(0.25) * c_ref; const Vec divided = a_ref / Real(5.0); const Vec outer_right = Real(5.0) * a_ref; const Vec outer_left = a_ref * Real(5.0); From c8427b115dac751acb76f5151c7614f5292f18f1 Mon Sep 17 00:00:00 2001 From: rochi00 Date: Tue, 12 May 2026 09:48:58 -0600 Subject: [PATCH 17/46] Rename tensor combination kernel --- include/gpu/kokkos_tensor_ops.h | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/include/gpu/kokkos_tensor_ops.h b/include/gpu/kokkos_tensor_ops.h index 2d94cb53443..71926b92b1f 100644 --- a/include/gpu/kokkos_tensor_ops.h +++ b/include/gpu/kokkos_tensor_ops.h @@ -299,10 +299,10 @@ void update_tensor_components(LeftTensor & left, const RightTensor & right, cons template LIBMESH_DEVICE_INLINE -ResultTensor linear_combination(const ScalarA & alpha, - const TensorA & A, - const ScalarB & beta, - const TensorB & B) +ResultTensor combine_tensors(const ScalarA & alpha, + const TensorA & A, + const ScalarB & beta, + const TensorB & B) { ResultTensor out; out.zero(); @@ -717,7 +717,7 @@ auto operator+(const LeftTensor & left, const RightTensor & right) (is_tensor_ref_v || is_tensor_ref_v), tensor_semantic_type_t> { - return detail::linear_combination>( + return detail::combine_tensors>( tensor_value_type_t(1), left, tensor_value_type_t(1), right); } @@ -728,7 +728,7 @@ auto operator-(const LeftTensor & left, const RightTensor & right) (is_tensor_ref_v || is_tensor_ref_v), tensor_semantic_type_t> { - return detail::linear_combination>( + return detail::combine_tensors>( tensor_value_type_t(1), left, tensor_value_type_t(-1), right); } From 37230df2d73ab13488614ef83cc840b7e62bb18f Mon Sep 17 00:00:00 2001 From: rochi00 Date: Tue, 12 May 2026 10:27:16 -0600 Subject: [PATCH 18/46] Forward libMesh error macros into device code --- include/base/libmesh_common.h | 9 ++++++++- include/base/libmesh_device.h | 2 -- include/base/libmesh_exceptions.h | 4 ++++ include/numerics/type_tensor.h | 4 ++-- 4 files changed, 14 insertions(+), 5 deletions(-) diff --git a/include/base/libmesh_common.h b/include/base/libmesh_common.h index 32f8820b4d6..7e663098df1 100644 --- a/include/base/libmesh_common.h +++ b/include/base/libmesh_common.h @@ -309,7 +309,7 @@ extern bool warned_about_auto_ptr; #define libmesh_assert_less_equal_msg(expr1,expr2, msg) ((void) 0) #define libmesh_assert_greater_equal_msg(expr1,expr2, msg) ((void) 0) -#elif defined(LIBMESH_DEVICE_ASSERT) +#elif defined(LIBMESH_KOKKOS_COMPILATION) // Kokkos compilation: use the device-safe assert from libmesh_device.h. #define libmesh_assert_msg(asserted, msg) LIBMESH_DEVICE_ASSERT(asserted) @@ -426,6 +426,12 @@ struct casting_compare { // // The libmesh_terminate() macro prints a message and throws a // TerminationException exception +#if LIBMESH_IN_DEVICE_CODE +#define libmesh_error_msg(msg) \ + do { \ + LIBMESH_DEVICE_ERROR_MSG(msg); \ + } while (0) +#else #define libmesh_error_msg(msg) \ do { \ std::stringstream message_stream; \ @@ -433,6 +439,7 @@ struct casting_compare { libMesh::MacroFunctions::report_error(__FILE__, __LINE__, LIBMESH_DATE, LIBMESH_TIME, message_stream); \ LIBMESH_THROW(libMesh::LogicError(message_stream.str())); \ } while (0) +#endif #define libmesh_error() libmesh_error_msg("") diff --git a/include/base/libmesh_device.h b/include/base/libmesh_device.h index f41d4c70b01..87388289b80 100644 --- a/include/base/libmesh_device.h +++ b/include/base/libmesh_device.h @@ -67,8 +67,6 @@ #else # define LIBMESH_DEVICE_INLINE inline # define LIBMESH_IN_DEVICE_CODE 0 -# define LIBMESH_DEVICE_ERROR_MSG(msg) libmesh_error_msg(msg) -# define LIBMESH_DEVICE_ERROR_MSG_IF(cond, msg) libmesh_error_msg_if(cond, msg) #endif #endif // LIBMESH_LIBMESH_DEVICE_H diff --git a/include/base/libmesh_exceptions.h b/include/base/libmesh_exceptions.h index 65237e1478f..8db27cd83d2 100644 --- a/include/base/libmesh_exceptions.h +++ b/include/base/libmesh_exceptions.h @@ -226,7 +226,11 @@ class TerminationException #else +#if LIBMESH_IN_DEVICE_CODE +#define LIBMESH_THROW(e) do { LIBMESH_DEVICE_ERROR_MSG((e).what()); } while (0) +#else #define LIBMESH_THROW(e) do { libMesh::err << e.what(); libMesh::libmesh_abort(); } while (0) +#endif #define libmesh_rethrow #define libmesh_try #define libmesh_catch(e) if (0) diff --git a/include/numerics/type_tensor.h b/include/numerics/type_tensor.h index ac6dc145428..04f4b5bad8f 100644 --- a/include/numerics/type_tensor.h +++ b/include/numerics/type_tensor.h @@ -756,8 +756,8 @@ T & TypeTensor::operator () (const unsigned int i, { #if LIBMESH_DIM < 3 - LIBMESH_DEVICE_ERROR_MSG_IF(i >= LIBMESH_DIM || j >= LIBMESH_DIM, - "ERROR: You are assigning to a tensor component that is out of range for the compiled LIBMESH_DIM!"); + libmesh_error_msg_if(i >= LIBMESH_DIM || j >= LIBMESH_DIM, + "ERROR: You are assigning to a tensor component that is out of range for the compiled LIBMESH_DIM!"); #endif From 1b773eaa80604e4a1a5da4a3db594043ff7ab118 Mon Sep 17 00:00:00 2001 From: rochi00 Date: Tue, 12 May 2026 10:31:09 -0600 Subject: [PATCH 19/46] Probe Kokkos toolchain configuration --- m4/libmesh_optional_packages.m4 | 81 +++++++++++++++++++++++++++++++++ tests/Makefile.am | 7 +-- 2 files changed, 85 insertions(+), 3 deletions(-) diff --git a/m4/libmesh_optional_packages.m4 b/m4/libmesh_optional_packages.m4 index 9fb641d1945..64e0863398c 100644 --- a/m4/libmesh_optional_packages.m4 +++ b/m4/libmesh_optional_packages.m4 @@ -968,6 +968,86 @@ AS_IF([test "x$KOKKOS_DIR" != "xno"], KOKKOS_LDFLAGS="${KOKKOS_LDFLAGS:--L$KOKKOS_DIR/lib}" KOKKOS_LIBS="${KOKKOS_LIBS:--lkokkoscore}" + dnl If KOKKOS_CXX differs from the main compiler, it may not be the MPI + dnl wrapper and thus may need the wrapper's compile flags explicitly in + dnl order to find mpi.h. Query the primary CXX wrapper for compile-time + dnl flags and fall back to MPI_INCLUDES when probing is unavailable. + KOKKOS_MPI_CPPFLAGS="" + AS_IF([test "x$enablempi" = "xyes" && test "x$KOKKOS_CXX" != "x$CXX"], + [ + AC_MSG_CHECKING([for MPI compile flags usable with KOKKOS_CXX]) + KOKKOS_MPI_CPPFLAGS=`$CXX -showme:compile 2>/dev/null` + AS_IF([test "x$KOKKOS_MPI_CPPFLAGS" = "x"], + [KOKKOS_MPI_CPPFLAGS=`$CXX -compile_info 2>/dev/null`]) + AS_IF([test "x$KOKKOS_MPI_CPPFLAGS" = "x"], + [KOKKOS_MPI_CPPFLAGS=`$CXX -show 2>/dev/null | sed 's/^[^ ]* //'`]) + AS_IF([test "x$KOKKOS_MPI_CPPFLAGS" = "x"], + [KOKKOS_MPI_CPPFLAGS="$MPI_INCLUDES"]) + AS_IF([test "x$KOKKOS_MPI_CPPFLAGS" = "x"], + [AC_MSG_RESULT([not found])], + [AC_MSG_RESULT([$KOKKOS_MPI_CPPFLAGS])]) + ]) + + dnl Fail configure early if the chosen Kokkos compiler/flags/libs cannot + dnl actually compile and link a minimal Kokkos program. + AC_MSG_CHECKING([whether the Kokkos compiler configuration works]) + libmesh_save_CXX="$CXX" + libmesh_save_CPPFLAGS="$CPPFLAGS" + libmesh_save_CXXFLAGS="$CXXFLAGS" + libmesh_save_LDFLAGS="$LDFLAGS" + libmesh_save_LIBS="$LIBS" + + CXX="$KOKKOS_CXX" + CPPFLAGS="$CPPFLAGS $KOKKOS_CPPFLAGS $KOKKOS_MPI_CPPFLAGS" + CXXFLAGS="$CXXFLAGS $KOKKOS_CXXFLAGS" + LDFLAGS="$LDFLAGS $KOKKOS_LDFLAGS" + LIBS="$LIBS $KOKKOS_LIBS" + + AS_IF([test "x$enablempi" = "xyes"], + [ + LDFLAGS="$LDFLAGS $MPI_LDFLAGS" + LIBS="$LIBS $MPI_LIBS" + AC_LINK_IFELSE( + [AC_LANG_SOURCE([[ +#include +#include +int main(int argc, char ** argv) +{ + MPI_Init(&argc, &argv); + Kokkos::initialize(argc, argv); + Kokkos::finalize(); + MPI_Finalize(); + return 0; +} +]])], + [kokkos_config_works=yes], + [kokkos_config_works=no]) + ], + [ + AC_LINK_IFELSE( + [AC_LANG_SOURCE([[ +#include +int main(int argc, char ** argv) +{ + Kokkos::initialize(argc, argv); + Kokkos::finalize(); + return 0; +} +]])], + [kokkos_config_works=yes], + [kokkos_config_works=no]) + ]) + + CXX="$libmesh_save_CXX" + CPPFLAGS="$libmesh_save_CPPFLAGS" + CXXFLAGS="$libmesh_save_CXXFLAGS" + LDFLAGS="$libmesh_save_LDFLAGS" + LIBS="$libmesh_save_LIBS" + + AS_IF([test "x$kokkos_config_works" = "xyes"], + [AC_MSG_RESULT([yes])], + [AC_MSG_ERROR([configured Kokkos compiler/flags failed to compile and link a minimal test program])]) + AC_DEFINE([HAVE_KOKKOS], [1], [Define if Kokkos support is enabled in libMesh]) AC_MSG_RESULT(<<< Configuring library with Kokkos support >>>) @@ -984,6 +1064,7 @@ AC_SUBST([KOKKOS_CPPFLAGS]) AC_SUBST([KOKKOS_CXXFLAGS]) AC_SUBST([KOKKOS_LDFLAGS]) AC_SUBST([KOKKOS_LIBS]) +AC_SUBST([KOKKOS_MPI_CPPFLAGS]) AM_CONDITIONAL(LIBMESH_ENABLE_KOKKOS, test x$enablekokkos = xyes) # ------------------------------------------------------------- diff --git a/tests/Makefile.am b/tests/Makefile.am index 6efb6d23e88..85d686408c7 100644 --- a/tests/Makefile.am +++ b/tests/Makefile.am @@ -383,11 +383,12 @@ TESTS += run_unit_tests.sh endif # Compile .K translation units with the Kokkos device compiler. -# $(MPI_INCLUDES) is needed because KOKKOS_CXX may be nvcc/hipcc -# instead of the MPI compiler wrapper, so mpi.h won't be found implicitly. +# If KOKKOS_CXX is not the MPI wrapper, configure populates +# $(KOKKOS_MPI_CPPFLAGS) from the wrapper's compile flags so mpi.h and +# any wrapper-provided defines remain visible. .K.o: $(KOKKOS_CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ - $(MPI_INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(KOKKOS_TEST_CPPFLAGS) \ + $(KOKKOS_MPI_CPPFLAGS) $(AM_CPPFLAGS) $(CPPFLAGS) $(KOKKOS_TEST_CPPFLAGS) \ $(AM_CXXFLAGS) $(CXXFLAGS) $(KOKKOS_CXXFLAGS) \ -c $< -o $@ From 2ca983df55fcc5f20ef9922ea130cb117b5c229a Mon Sep 17 00:00:00 2001 From: rochi00 Date: Tue, 12 May 2026 10:31:27 -0600 Subject: [PATCH 20/46] Regenerate configure and tests Makefile.in --- configure | 125 +++++++++++++++++++++++++++++++++++++++++++++- tests/Makefile.in | 8 +-- 2 files changed, 129 insertions(+), 4 deletions(-) diff --git a/configure b/configure index 91b72819aca..35af44a56c6 100755 --- a/configure +++ b/configure @@ -678,6 +678,7 @@ KOKKOS_LIBS KOKKOS_LDFLAGS KOKKOS_CXXFLAGS KOKKOS_CPPFLAGS +KOKKOS_MPI_CPPFLAGS KOKKOS_CXX ICPX HIPCC @@ -64237,6 +64238,129 @@ fi KOKKOS_LDFLAGS="${KOKKOS_LDFLAGS:--L$KOKKOS_DIR/lib}" KOKKOS_LIBS="${KOKKOS_LIBS:--lkokkoscore}" + KOKKOS_MPI_CPPFLAGS="" + if test "x$enablempi" = "xyes" && test "x$KOKKOS_CXX" != "x$CXX" +then : + + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for MPI compile flags usable with KOKKOS_CXX" >&5 +printf %s "checking for MPI compile flags usable with KOKKOS_CXX... " >&6; } + KOKKOS_MPI_CPPFLAGS=`$CXX -showme:compile 2>/dev/null` + if test "x$KOKKOS_MPI_CPPFLAGS" = "x" +then : + KOKKOS_MPI_CPPFLAGS=`$CXX -compile_info 2>/dev/null` +fi + if test "x$KOKKOS_MPI_CPPFLAGS" = "x" +then : + KOKKOS_MPI_CPPFLAGS=`$CXX -show 2>/dev/null | sed 's/^[^ ]* //'` +fi + if test "x$KOKKOS_MPI_CPPFLAGS" = "x" +then : + KOKKOS_MPI_CPPFLAGS="$MPI_INCLUDES" +fi + if test "x$KOKKOS_MPI_CPPFLAGS" = "x" +then : + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: not found" >&5 +printf "%s\n" "not found" >&6; } +else case e in #( + e) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $KOKKOS_MPI_CPPFLAGS" >&5 +printf "%s\n" "$KOKKOS_MPI_CPPFLAGS" >&6; } ;; +esac +fi + +fi + + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether the Kokkos compiler configuration works" >&5 +printf %s "checking whether the Kokkos compiler configuration works... " >&6; } + libmesh_save_CXX="$CXX" + libmesh_save_CPPFLAGS="$CPPFLAGS" + libmesh_save_CXXFLAGS="$CXXFLAGS" + libmesh_save_LDFLAGS="$LDFLAGS" + libmesh_save_LIBS="$LIBS" + + CXX="$KOKKOS_CXX" + CPPFLAGS="$CPPFLAGS $KOKKOS_CPPFLAGS $KOKKOS_MPI_CPPFLAGS" + CXXFLAGS="$CXXFLAGS $KOKKOS_CXXFLAGS" + LDFLAGS="$LDFLAGS $KOKKOS_LDFLAGS" + LIBS="$LIBS $KOKKOS_LIBS" + + if test "x$enablempi" = "xyes" +then : + + LDFLAGS="$LDFLAGS $MPI_LDFLAGS" + LIBS="$LIBS $MPI_LIBS" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +#include +#include +int +main (int argc, char ** argv) +{ + + MPI_Init(&argc, &argv); + Kokkos::initialize(argc, argv); + Kokkos::finalize(); + MPI_Finalize(); + + ; + return 0; +} +_ACEOF +if ac_fn_cxx_try_link "$LINENO" +then : + kokkos_config_works=yes +else case e in #( + e) kokkos_config_works=no ;; +esac +fi +rm -f core conftest.err conftest.$ac_objext conftest.beam \ + conftest$ac_exeext conftest.$ac_ext + +else case e in #( + e) + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +#include +int +main (int argc, char ** argv) +{ + + Kokkos::initialize(argc, argv); + Kokkos::finalize(); + + ; + return 0; +} +_ACEOF +if ac_fn_cxx_try_link "$LINENO" +then : + kokkos_config_works=yes +else case e in #( + e) kokkos_config_works=no ;; +esac +fi +rm -f core conftest.err conftest.$ac_objext conftest.beam \ + conftest$ac_exeext conftest.$ac_ext + ;; +esac +fi + + CXX="$libmesh_save_CXX" + CPPFLAGS="$libmesh_save_CPPFLAGS" + CXXFLAGS="$libmesh_save_CXXFLAGS" + LDFLAGS="$libmesh_save_LDFLAGS" + LIBS="$libmesh_save_LIBS" + + if test "x$kokkos_config_works" = "xyes" +then : + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +printf "%s\n" "yes" >&6; } +else case e in #( + e) as_fn_error $? "configured Kokkos compiler/flags failed to compile and link a minimal test program" "$LINENO" 5 ;; +esac +fi + printf "%s\n" "#define HAVE_KOKKOS 1" >>confdefs.h @@ -68934,4 +69058,3 @@ printf "%s\n" "--------- Done Configuring libMesh ----------" >&6; } { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: ---------------------------------------------" >&5 printf "%s\n" "---------------------------------------------" >&6; } # rm -f -r conftest* config.cache include/libmesh/libmesh_config.h.tmp - diff --git a/tests/Makefile.in b/tests/Makefile.in index d94f4b9384d..96c87de5252 100644 --- a/tests/Makefile.in +++ b/tests/Makefile.in @@ -2103,6 +2103,7 @@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ KOKKOS_CPPFLAGS = @KOKKOS_CPPFLAGS@ +KOKKOS_MPI_CPPFLAGS = @KOKKOS_MPI_CPPFLAGS@ KOKKOS_CXX = @KOKKOS_CXX@ KOKKOS_CXXFLAGS = @KOKKOS_CXXFLAGS@ KOKKOS_LDFLAGS = @KOKKOS_LDFLAGS@ @@ -14789,11 +14790,12 @@ $(top_builddir)/libmesh_oprof.la: FORCE (cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) libmesh_oprof.la) # Compile .K translation units with the Kokkos device compiler. -# $(MPI_INCLUDES) is needed because KOKKOS_CXX may be nvcc/hipcc -# instead of the MPI compiler wrapper, so mpi.h won't be found implicitly. +# If KOKKOS_CXX is not the MPI wrapper, configure populates +# $(KOKKOS_MPI_CPPFLAGS) from the wrapper's compile flags so mpi.h and +# any wrapper-provided defines remain visible. .K.o: $(KOKKOS_CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ - $(MPI_INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(KOKKOS_TEST_CPPFLAGS) \ + $(KOKKOS_MPI_CPPFLAGS) $(AM_CPPFLAGS) $(CPPFLAGS) $(KOKKOS_TEST_CPPFLAGS) \ $(AM_CXXFLAGS) $(CXXFLAGS) $(KOKKOS_CXXFLAGS) \ -c $< -o $@ From 3a89c4c9955a94f8b9b348a0b97b5952fb0f664a Mon Sep 17 00:00:00 2001 From: rochi00 Date: Tue, 12 May 2026 11:00:02 -0600 Subject: [PATCH 21/46] Force C++ mode for Kokkos configure probe --- configure | 39 +++++++++++++++++++-------------- m4/libmesh_optional_packages.m4 | 2 ++ 2 files changed, 24 insertions(+), 17 deletions(-) diff --git a/configure b/configure index 35af44a56c6..481367f38f0 100755 --- a/configure +++ b/configure @@ -674,11 +674,11 @@ libmesh_optional_LIBS libmesh_optional_INCLUDES LIBMESH_ENABLE_KOKKOS_FALSE LIBMESH_ENABLE_KOKKOS_TRUE +KOKKOS_MPI_CPPFLAGS KOKKOS_LIBS KOKKOS_LDFLAGS KOKKOS_CXXFLAGS KOKKOS_CPPFLAGS -KOKKOS_MPI_CPPFLAGS KOKKOS_CXX ICPX HIPCC @@ -64238,7 +64238,7 @@ fi KOKKOS_LDFLAGS="${KOKKOS_LDFLAGS:--L$KOKKOS_DIR/lib}" KOKKOS_LIBS="${KOKKOS_LIBS:--lkokkoscore}" - KOKKOS_MPI_CPPFLAGS="" + KOKKOS_MPI_CPPFLAGS="" if test "x$enablempi" = "xyes" && test "x$KOKKOS_CXX" != "x$CXX" then : @@ -64251,7 +64251,7 @@ then : fi if test "x$KOKKOS_MPI_CPPFLAGS" = "x" then : - KOKKOS_MPI_CPPFLAGS=`$CXX -show 2>/dev/null | sed 's/^[^ ]* //'` + KOKKOS_MPI_CPPFLAGS=`$CXX -show 2>/dev/null | sed 's/^^ * //'` fi if test "x$KOKKOS_MPI_CPPFLAGS" = "x" then : @@ -64269,7 +64269,7 @@ fi fi - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether the Kokkos compiler configuration works" >&5 + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether the Kokkos compiler configuration works" >&5 printf %s "checking whether the Kokkos compiler configuration works... " >&6; } libmesh_save_CXX="$CXX" libmesh_save_CPPFLAGS="$CPPFLAGS" @@ -64282,6 +64282,11 @@ printf %s "checking whether the Kokkos compiler configuration works... " >&6; } CXXFLAGS="$CXXFLAGS $KOKKOS_CXXFLAGS" LDFLAGS="$LDFLAGS $KOKKOS_LDFLAGS" LIBS="$LIBS $KOKKOS_LIBS" + ac_ext=cpp +ac_cpp='$CXXCPP $CPPFLAGS' +ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_cxx_compiler_gnu if test "x$enablempi" = "xyes" then : @@ -64293,20 +64298,17 @@ then : #include #include -int -main (int argc, char ** argv) +int main(int argc, char ** argv) { - MPI_Init(&argc, &argv); Kokkos::initialize(argc, argv); Kokkos::finalize(); MPI_Finalize(); - - ; return 0; } + _ACEOF -if ac_fn_cxx_try_link "$LINENO" +if ac_fn_c_try_link "$LINENO" then : kokkos_config_works=yes else case e in #( @@ -64322,18 +64324,15 @@ else case e in #( /* end confdefs.h. */ #include -int -main (int argc, char ** argv) +int main(int argc, char ** argv) { - Kokkos::initialize(argc, argv); Kokkos::finalize(); - - ; return 0; } + _ACEOF -if ac_fn_cxx_try_link "$LINENO" +if ac_fn_c_try_link "$LINENO" then : kokkos_config_works=yes else case e in #( @@ -64342,7 +64341,7 @@ esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext - ;; + ;; esac fi @@ -64351,6 +64350,11 @@ fi CXXFLAGS="$libmesh_save_CXXFLAGS" LDFLAGS="$libmesh_save_LDFLAGS" LIBS="$libmesh_save_LIBS" + ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu if test "x$kokkos_config_works" = "xyes" then : @@ -64387,6 +64391,7 @@ fi + if test x$enablekokkos = xyes; then LIBMESH_ENABLE_KOKKOS_TRUE= LIBMESH_ENABLE_KOKKOS_FALSE='#' diff --git a/m4/libmesh_optional_packages.m4 b/m4/libmesh_optional_packages.m4 index 64e0863398c..190a90c824e 100644 --- a/m4/libmesh_optional_packages.m4 +++ b/m4/libmesh_optional_packages.m4 @@ -1002,6 +1002,7 @@ AS_IF([test "x$KOKKOS_DIR" != "xno"], CXXFLAGS="$CXXFLAGS $KOKKOS_CXXFLAGS" LDFLAGS="$LDFLAGS $KOKKOS_LDFLAGS" LIBS="$LIBS $KOKKOS_LIBS" + AC_LANG_PUSH([C++]) AS_IF([test "x$enablempi" = "xyes"], [ @@ -1037,6 +1038,7 @@ int main(int argc, char ** argv) [kokkos_config_works=yes], [kokkos_config_works=no]) ]) + AC_LANG_POP([C++]) CXX="$libmesh_save_CXX" CPPFLAGS="$libmesh_save_CPPFLAGS" From 38afbb40db90f91e09cf51c30dc02c7a3174eb84 Mon Sep 17 00:00:00 2001 From: rochi00 Date: Mon, 18 May 2026 09:44:04 -0600 Subject: [PATCH 22/46] Compact Kokkos numerics operator shims --- include/gpu/kokkos_tensor_ops.h | 227 +++++++++++++------------------- include/gpu/kokkos_vector_ops.h | 225 +++++++++++++++---------------- 2 files changed, 197 insertions(+), 255 deletions(-) diff --git a/include/gpu/kokkos_tensor_ops.h b/include/gpu/kokkos_tensor_ops.h index 71926b92b1f..783cea91b66 100644 --- a/include/gpu/kokkos_tensor_ops.h +++ b/include/gpu/kokkos_tensor_ops.h @@ -42,20 +42,17 @@ ResultTensor tensor_identity(const unsigned int dim = LIBMESH_DIM) return out; } -template -LIBMESH_DEVICE_INLINE -ResultTensor copy_tensor(const TensorLike & T_in) -{ - return materialize_tensor(T_in); -} - -template ::value, int>::type = 0> +template LIBMESH_DEVICE_INLINE -tensor_semantic_type_t copy_tensor(const TensorLike & T_in) +auto copy_tensor(const TensorLike & T_in) + -> std::conditional_t::value, + tensor_semantic_type_t, + ResultTensor> { - return copy_tensor>(T_in); + using output_type = std::conditional_t::value, + tensor_semantic_type_t, + ResultTensor>; + return materialize_tensor(T_in); } namespace detail @@ -297,71 +294,13 @@ void update_tensor_components(LeftTensor & left, const RightTensor & right, cons factor * tensor_get_component(right, row, col)); } -template -LIBMESH_DEVICE_INLINE -ResultTensor combine_tensors(const ScalarA & alpha, - const TensorA & A, - const ScalarB & beta, - const TensorB & B) -{ - ResultTensor out; - out.zero(); - - for (unsigned int row = 0; row < LIBMESH_DIM; ++row) - for (unsigned int col = 0; col < LIBMESH_DIM; ++col) - tensor_set_component(out, - row, - col, - alpha * tensor_get_component(A, row, col) + - beta * tensor_get_component(B, row, col)); - - return out; -} - -template -LIBMESH_DEVICE_INLINE -ResultTensor scale_tensor(const Scalar & alpha, const TensorLike & T_in) -{ - ResultTensor out; - out.zero(); - - for (unsigned int row = 0; row < LIBMESH_DIM; ++row) - for (unsigned int col = 0; col < LIBMESH_DIM; ++col) - tensor_set_component(out, row, col, alpha * tensor_get_component(T_in, row, col)); - - return out; -} - -template -LIBMESH_DEVICE_INLINE -ResultTensor divide_tensor(const TensorLike & T_in, const Scalar & alpha) -{ - ResultTensor out; - out.zero(); - - for (unsigned int row = 0; row < LIBMESH_DIM; ++row) - for (unsigned int col = 0; col < LIBMESH_DIM; ++col) - tensor_set_component(out, row, col, tensor_get_component(T_in, row, col) / alpha); - - return out; -} - -template +template LIBMESH_DEVICE_INLINE -void scale_tensor_components(TensorLike & T_in, const Scalar & alpha) +void transform_tensor_components(OutputTensor & out, const InputTensor & in, const TransformOp & op) { for (unsigned int row = 0; row < LIBMESH_DIM; ++row) for (unsigned int col = 0; col < LIBMESH_DIM; ++col) - tensor_set_component(T_in, row, col, tensor_get_component(T_in, row, col) * alpha); -} - -template -LIBMESH_DEVICE_INLINE -void divide_tensor_components(TensorLike & T_in, const Scalar & alpha) -{ - for (unsigned int row = 0; row < LIBMESH_DIM; ++row) - for (unsigned int col = 0; col < LIBMESH_DIM; ++col) - tensor_set_component(T_in, row, col, tensor_get_component(T_in, row, col) / alpha); + tensor_set_component(out, row, col, op(tensor_get_component(in, row, col))); } // Tensor reductions and predicates @@ -473,37 +412,32 @@ auto is_zero(const TensorLike & T_in) return detail::tensor_is_zero(T_in); } -template -LIBMESH_DEVICE_INLINE -auto outer_product(const LeftVector & left, const RightVector & right) - -> std::enable_if_t && is_vector_like_v, ResultTensor> -{ - return detail::outer_product(left, right); -} - -template +template LIBMESH_DEVICE_INLINE auto outer_product(const LeftVector & left, const RightVector & right) -> std::enable_if_t && is_vector_like_v, - libMesh::TypeTensor>> -{ - return outer_product>>(left, right); -} - -template -LIBMESH_DEVICE_INLINE -auto transpose(const TensorLike & T_in) - -> std::enable_if_t, ResultTensor> + std::conditional_t::value, + libMesh::TypeTensor>, + ResultTensor>> { - return detail::transpose(T_in); + using output_type = std::conditional_t::value, + libMesh::TypeTensor>, + ResultTensor>; + return detail::outer_product(left, right); } -template +template LIBMESH_DEVICE_INLINE auto transpose(const TensorLike & T_in) - -> std::enable_if_t, tensor_semantic_type_t> + -> std::enable_if_t, + std::conditional_t::value, + tensor_semantic_type_t, + ResultTensor>> { - return transpose>(T_in); + using output_type = std::conditional_t::value, + tensor_semantic_type_t, + ResultTensor>; + return detail::transpose(T_in); } template @@ -514,53 +448,61 @@ auto det(const TensorLike & T_in) return T_in.det(); } -template -LIBMESH_DEVICE_INLINE -auto inverse(const TensorLike & T_in, const unsigned int dim = LIBMESH_DIM) - -> std::enable_if_t, ResultTensor> -{ - return detail::inverse(T_in, dim); -} - -template +template LIBMESH_DEVICE_INLINE auto inverse(const TensorLike & T_in, const unsigned int dim = LIBMESH_DIM) - -> std::enable_if_t, tensor_semantic_type_t> + -> std::enable_if_t, + std::conditional_t::value, + tensor_semantic_type_t, + ResultTensor>> { - return inverse>(T_in, dim); + using output_type = std::conditional_t::value, + tensor_semantic_type_t, + ResultTensor>; + return detail::inverse(T_in, dim); } -template +template LIBMESH_DEVICE_INLINE auto row(const TensorLike & T_in, const unsigned int i) - -> std::enable_if_t, ResultVector> + -> std::enable_if_t, + std::conditional_t::value, + libMesh::TypeVector>, + ResultVector>> { - return detail::row(T_in, i); + using output_type = std::conditional_t::value, + libMesh::TypeVector>, + ResultVector>; + return detail::row(T_in, i); } -template +template LIBMESH_DEVICE_INLINE -auto row(const TensorLike & T_in, const unsigned int i) - -> std::enable_if_t, libMesh::TypeVector>> +auto column(const TensorLike & T_in, const unsigned int i) + -> std::enable_if_t, + std::conditional_t::value, + libMesh::TypeVector>, + ResultVector>> { - return row>>(T_in, i); + using output_type = std::conditional_t::value, + libMesh::TypeVector>, + ResultVector>; + return detail::column(T_in, i); } -template +template LIBMESH_DEVICE_INLINE -auto column(const TensorLike & T_in, const unsigned int i) - -> std::enable_if_t, ResultVector> -{ - return detail::column(T_in, i); -} +auto operator+=(LeftTensor & left, const RightTensor & right) + -> std::enable_if_t && is_tensor_like_v && + (is_tensor_ref_v || is_tensor_ref_v), + LeftTensor &>; -template +template LIBMESH_DEVICE_INLINE -auto column(const TensorLike & T_in, const unsigned int i) - -> std::enable_if_t, libMesh::TypeVector>> -{ - return column>>(T_in, i); -} +auto operator-=(LeftTensor & left, const RightTensor & right) + -> std::enable_if_t && is_tensor_like_v && + (is_tensor_ref_v || is_tensor_ref_v), + LeftTensor &>; template template @@ -575,7 +517,7 @@ template LIBMESH_DEVICE_INLINE void tensor_ref::add(const RightTensor & right) { - detail::update_tensor_components(*this, right, value_type(1)); + libMesh::Kokkos::operator+=(*this, right); } template @@ -591,7 +533,7 @@ template LIBMESH_DEVICE_INLINE void tensor_ref::subtract(const RightTensor & right) { - detail::update_tensor_components(*this, right, value_type(-1)); + libMesh::Kokkos::operator-=(*this, right); } template @@ -707,7 +649,12 @@ auto operator-(const TensorLike & T_in) -> std::enable_if_t && is_tensor_ref_v, tensor_semantic_type_t> { - return detail::scale_tensor>(tensor_value_type_t(-1), T_in); + auto out = copy_tensor>(T_in); + detail::transform_tensor_components( + out, + T_in, + detail::negate_value>{}); + return out; } template @@ -717,8 +664,9 @@ auto operator+(const LeftTensor & left, const RightTensor & right) (is_tensor_ref_v || is_tensor_ref_v), tensor_semantic_type_t> { - return detail::combine_tensors>( - tensor_value_type_t(1), left, tensor_value_type_t(1), right); + auto out = copy_tensor>(left); + out += right; + return out; } template @@ -728,8 +676,9 @@ auto operator-(const LeftTensor & left, const RightTensor & right) (is_tensor_ref_v || is_tensor_ref_v), tensor_semantic_type_t> { - return detail::combine_tensors>( - tensor_value_type_t(1), left, tensor_value_type_t(-1), right); + auto out = copy_tensor>(left); + out -= right; + return out; } template >(alpha, T_in); + return T_in * alpha; } template >(alpha, T_in); + auto out = copy_tensor>(T_in); + detail::transform_tensor_components(out, T_in, detail::scale_value{alpha}); + return out; } template @@ -761,7 +712,9 @@ auto operator/(const TensorLike & T_in, const Scalar & alpha) !is_vector_like_v && !is_tensor_like_v, tensor_semantic_type_t> { - return detail::divide_tensor>(T_in, alpha); + auto out = copy_tensor>(T_in); + detail::transform_tensor_components(out, T_in, detail::divide_value{alpha}); + return out; } template && !is_tensor_like_v, LeftTensor &> { - detail::scale_tensor_components(left, alpha); + detail::transform_tensor_components(left, left, detail::scale_value{alpha}); return left; } @@ -862,7 +815,7 @@ auto operator/=(LeftTensor & left, const Scalar & alpha) !is_vector_like_v && !is_tensor_like_v, LeftTensor &> { - detail::divide_tensor_components(left, alpha); + detail::transform_tensor_components(left, left, detail::divide_value{alpha}); return left; } diff --git a/include/gpu/kokkos_vector_ops.h b/include/gpu/kokkos_vector_ops.h index 2c68a0341f2..f5f99adaa6c 100644 --- a/include/gpu/kokkos_vector_ops.h +++ b/include/gpu/kokkos_vector_ops.h @@ -28,20 +28,17 @@ ResultVector zero_vector_value() return out; } -template +template LIBMESH_DEVICE_INLINE -ResultVector copy_vector(const VectorLike & v) +auto copy_vector(const VectorLike & v) + -> std::conditional_t::value, + vector_semantic_type_t, + ResultVector> { - return materialize_vector(v); -} - -template ::value, int>::type = 0> -LIBMESH_DEVICE_INLINE -vector_semantic_type_t copy_vector(const VectorLike & v) -{ - return copy_vector>(v); + using output_type = std::conditional_t::value, + vector_semantic_type_t, + ResultVector>; + return materialize_vector(v); } namespace detail @@ -74,89 +71,61 @@ void update_vector_components(LeftVector & left, const RightVector & right, cons factor * vector_get_component(right, component)); } -template +template LIBMESH_DEVICE_INLINE -ResultVector linear_combination(const ScalarA & alpha, - const VectorA & a, - const ScalarB & beta, - const VectorB & b) +void transform_vector_components(OutputVector & out, const InputVector & in, const TransformOp & op) { - ResultVector out; - out.zero(); - for (unsigned int component = 0; component < LIBMESH_DIM; ++component) - vector_set_component(out, - component, - alpha * vector_get_component(a, component) + - beta * vector_get_component(b, component)); - - return out; + vector_set_component(out, component, op(vector_get_component(in, component))); } -template -LIBMESH_DEVICE_INLINE -ResultVector linear_combination(const ScalarA & alpha, - const VectorA & a, - const ScalarB & beta, - const VectorB & b, - const ScalarC & gamma, - const VectorC & c) +template +struct negate_value { - ResultVector out; - out.zero(); + LIBMESH_DEVICE_INLINE + auto operator()(const ValueType & value) const + { + return -value; + } +}; - for (unsigned int component = 0; component < LIBMESH_DIM; ++component) - vector_set_component(out, - component, - alpha * vector_get_component(a, component) + - beta * vector_get_component(b, component) + - gamma * vector_get_component(c, component)); - - return out; -} - -template -LIBMESH_DEVICE_INLINE -ResultVector scale_vector(const Scalar & alpha, const VectorLike & v) +template +struct scale_value { - ResultVector out; - out.zero(); + const Scalar & alpha; - for (unsigned int component = 0; component < LIBMESH_DIM; ++component) - vector_set_component(out, component, alpha * vector_get_component(v, component)); + LIBMESH_DEVICE_INLINE + auto operator()(const Scalar & value) const -> decltype(value * alpha) + { + return value * alpha; + } - return out; -} + template + LIBMESH_DEVICE_INLINE + auto operator()(const ValueType & value) const -> decltype(value * alpha) + { + return value * alpha; + } +}; -template -LIBMESH_DEVICE_INLINE -ResultVector divide_vector(const VectorLike & v, const Scalar & alpha) +template +struct divide_value { - ResultVector out; - out.zero(); + const Scalar & alpha; - for (unsigned int component = 0; component < LIBMESH_DIM; ++component) - vector_set_component(out, component, vector_get_component(v, component) / alpha); + LIBMESH_DEVICE_INLINE + auto operator()(const Scalar & value) const -> decltype(value / alpha) + { + return value / alpha; + } - return out; -} - -template -LIBMESH_DEVICE_INLINE -void scale_vector_components(VectorLike & v, const Scalar & alpha) -{ - for (unsigned int component = 0; component < LIBMESH_DIM; ++component) - vector_set_component(v, component, vector_get_component(v, component) * alpha); -} - -template -LIBMESH_DEVICE_INLINE -void divide_vector_components(VectorLike & v, const Scalar & alpha) -{ - for (unsigned int component = 0; component < LIBMESH_DIM; ++component) - vector_set_component(v, component, vector_get_component(v, component) / alpha); -} + template + LIBMESH_DEVICE_INLINE + auto operator()(const ValueType & value) const -> decltype(value / alpha) + { + return value / alpha; + } +}; } // namespace detail @@ -231,31 +200,36 @@ bool vector_is_zero(const VectorLike & v) return true; } -template +template LIBMESH_DEVICE_INLINE -ResultVector vector_unit(const VectorLike & v) +auto vector_unit(const VectorLike & v) + -> std::conditional_t::value, + vector_semantic_type_t, + ResultVector> { const auto length = vector_norm(v); libmesh_assert_not_equal_to(length, static_cast(0.)); - return detail::divide_vector(v, length); -} - -template ::value, int>::type = 0> -LIBMESH_DEVICE_INLINE -vector_semantic_type_t vector_unit(const VectorLike & v) -{ - return vector_unit>(v); + using output_type = std::conditional_t::value, + vector_semantic_type_t, + ResultVector>; + auto out = copy_vector(v); + detail::transform_vector_components(out, v, detail::divide_value{length}); + return out; } // Geometry -template +template LIBMESH_DEVICE_INLINE -ResultVector vector_cross(const LeftVector & left, const RightVector & right) +auto vector_cross(const LeftVector & left, const RightVector & right) + -> std::conditional_t::value, + vector_semantic_type_t, + ResultVector> { - ResultVector out; + using output_type = std::conditional_t::value, + vector_semantic_type_t, + ResultVector>; + output_type out; out.zero(); #if LIBMESH_DIM == 3 @@ -279,16 +253,6 @@ ResultVector vector_cross(const LeftVector & left, const RightVector & right) return out; } -template ::value, int>::type = 0> -LIBMESH_DEVICE_INLINE -vector_semantic_type_t vector_cross(const LeftVector & left, const RightVector & right) -{ - return vector_cross>(left, right); -} - template LIBMESH_DEVICE_INLINE auto vector_triple_product(const LeftVector & left, @@ -385,6 +349,20 @@ auto is_zero(const VectorLike & v) return vector_is_zero(v); } +template +LIBMESH_DEVICE_INLINE +auto operator+=(LeftVector & left, const RightVector & right) + -> std::enable_if_t && is_vector_like_v && + (is_vector_ref_v || is_vector_ref_v), + LeftVector &>; + +template +LIBMESH_DEVICE_INLINE +auto operator-=(LeftVector & left, const RightVector & right) + -> std::enable_if_t && is_vector_like_v && + (is_vector_ref_v || is_vector_ref_v), + LeftVector &>; + template template LIBMESH_DEVICE_INLINE @@ -398,7 +376,7 @@ template LIBMESH_DEVICE_INLINE void vector_ref::add(const RightVector & right) { - detail::update_vector_components(*this, right, value_type(1)); + libMesh::Kokkos::operator+=(*this, right); } template @@ -414,7 +392,7 @@ template LIBMESH_DEVICE_INLINE void vector_ref::subtract(const RightVector & right) { - detail::update_vector_components(*this, right, value_type(-1)); + libMesh::Kokkos::operator-=(*this, right); } template @@ -491,7 +469,12 @@ auto operator-(const VectorLike & v) -> std::enable_if_t && is_vector_ref_v, vector_semantic_type_t> { - return detail::scale_vector>(vector_value_type_t(-1), v); + auto out = copy_vector>(v); + detail::transform_vector_components( + out, + v, + detail::negate_value>{}); + return out; } template @@ -501,8 +484,9 @@ auto operator+(const LeftVector & left, const RightVector & right) (is_vector_ref_v || is_vector_ref_v), vector_semantic_type_t> { - return detail::linear_combination>( - vector_value_type_t(1), left, vector_value_type_t(1), right); + auto out = copy_vector>(left); + out += right; + return out; } template @@ -512,8 +496,9 @@ auto operator-(const LeftVector & left, const RightVector & right) (is_vector_ref_v || is_vector_ref_v), vector_semantic_type_t> { - return detail::linear_combination>( - vector_value_type_t(1), left, vector_value_type_t(-1), right); + auto out = copy_vector>(left); + out -= right; + return out; } template >(alpha, v); + return v * alpha; } template >(alpha, v); + auto out = copy_vector>(v); + detail::transform_vector_components(out, v, detail::scale_value{alpha}); + return out; } template >(v, alpha); + auto out = copy_vector>(v); + detail::transform_vector_components(out, v, detail::divide_value{alpha}); + return out; } template @@ -613,7 +602,7 @@ auto operator*=(LeftVector & left, const Scalar & alpha) !is_vector_like_v && !is_tensor_like_v, LeftVector &> { - detail::scale_vector_components(left, alpha); + detail::transform_vector_components(left, left, detail::scale_value{alpha}); return left; } @@ -624,7 +613,7 @@ auto operator/=(LeftVector & left, const Scalar & alpha) !is_vector_like_v && !is_tensor_like_v, LeftVector &> { - detail::divide_vector_components(left, alpha); + detail::transform_vector_components(left, left, detail::divide_value{alpha}); return left; } From d5e22fb20cb7f2ed7e21d5d75d7e411983e21989 Mon Sep 17 00:00:00 2001 From: rochi00 Date: Mon, 18 May 2026 09:44:11 -0600 Subject: [PATCH 23/46] Refresh generated autotools files --- Makefile.in | 1 + configure | 17 ++++++++++------- contrib/Makefile.in | 1 + contrib/capnproto/Makefile.in | 1 + contrib/eigen/gitshim/Makefile.in | 1 + contrib/exodusii/5.22b/exodus/Makefile.in | 1 + contrib/exodusii/5.22b/nemesis/Makefile.in | 1 + contrib/exodusii/Lib/Makefile.in | 1 + contrib/exodusii/v8.11/exodus/Makefile.in | 1 + contrib/exodusii/v8.11/nemesis/Makefile.in | 1 + contrib/fparser/Makefile.in | 1 + contrib/fparser/extrasrc/Makefile.in | 1 + contrib/gmv/Makefile.in | 1 + contrib/gzstream/Makefile.in | 1 + contrib/laspack/Makefile.in | 1 + contrib/libHilbert/Makefile.in | 1 + contrib/metis/Makefile.in | 1 + contrib/nanoflann/Makefile.in | 1 + contrib/nemesis/Lib/Makefile.in | 1 + contrib/netgen/Makefile.in | 3 ++- contrib/parmetis/Makefile.in | 1 + contrib/poly2tri/modified/Makefile.in | 1 + contrib/qhull/2012.1/Makefile.in | 1 + contrib/sfcurves/Makefile.in | 1 + contrib/tecplot/binary/Makefile.in | 1 + contrib/tecplot/tecio/Makefile.in | 1 + contrib/tetgen/Makefile.in | 1 + contrib/triangle/Makefile.in | 1 + doc/Makefile.in | 1 + doc/html/Makefile.in | 1 + examples/Makefile.in | 1 + examples/adaptivity/adaptivity_ex1/Makefile.in | 1 + examples/adaptivity/adaptivity_ex2/Makefile.in | 1 + examples/adaptivity/adaptivity_ex3/Makefile.in | 1 + examples/adaptivity/adaptivity_ex4/Makefile.in | 1 + examples/adaptivity/adaptivity_ex5/Makefile.in | 1 + examples/adjoints/adjoints_ex1/Makefile.in | 1 + examples/adjoints/adjoints_ex2/Makefile.in | 1 + examples/adjoints/adjoints_ex3/Makefile.in | 1 + examples/adjoints/adjoints_ex4/Makefile.in | 1 + examples/adjoints/adjoints_ex5/Makefile.in | 1 + examples/adjoints/adjoints_ex6/Makefile.in | 1 + examples/adjoints/adjoints_ex7/Makefile.in | 1 + .../eigenproblems/eigenproblems_ex1/Makefile.in | 1 + .../eigenproblems/eigenproblems_ex2/Makefile.in | 1 + .../eigenproblems/eigenproblems_ex3/Makefile.in | 1 + .../eigenproblems/eigenproblems_ex4/Makefile.in | 1 + examples/fem_system/fem_system_ex1/Makefile.in | 1 + examples/fem_system/fem_system_ex2/Makefile.in | 1 + examples/fem_system/fem_system_ex3/Makefile.in | 1 + examples/fem_system/fem_system_ex4/Makefile.in | 1 + examples/fem_system/fem_system_ex5/Makefile.in | 1 + .../introduction/introduction_ex1/Makefile.in | 1 + .../introduction/introduction_ex2/Makefile.in | 1 + .../introduction/introduction_ex3/Makefile.in | 1 + .../introduction/introduction_ex4/Makefile.in | 1 + .../introduction/introduction_ex5/Makefile.in | 1 + .../miscellaneous/miscellaneous_ex1/Makefile.in | 1 + .../miscellaneous_ex10/Makefile.in | 1 + .../miscellaneous_ex11/Makefile.in | 1 + .../miscellaneous_ex12/Makefile.in | 1 + .../miscellaneous_ex13/Makefile.in | 1 + .../miscellaneous_ex14/Makefile.in | 1 + .../miscellaneous_ex15/Makefile.in | 1 + .../miscellaneous_ex16/Makefile.in | 1 + .../miscellaneous_ex17/Makefile.in | 1 + .../miscellaneous/miscellaneous_ex2/Makefile.in | 1 + .../miscellaneous/miscellaneous_ex3/Makefile.in | 1 + .../miscellaneous/miscellaneous_ex4/Makefile.in | 1 + .../miscellaneous/miscellaneous_ex5/Makefile.in | 1 + .../miscellaneous/miscellaneous_ex6/Makefile.in | 1 + .../miscellaneous/miscellaneous_ex7/Makefile.in | 1 + .../miscellaneous/miscellaneous_ex8/Makefile.in | 1 + .../miscellaneous/miscellaneous_ex9/Makefile.in | 1 + .../optimization/optimization_ex1/Makefile.in | 1 + .../optimization/optimization_ex2/Makefile.in | 1 + .../reduced_basis/reduced_basis_ex1/Makefile.in | 1 + .../reduced_basis/reduced_basis_ex2/Makefile.in | 1 + .../reduced_basis/reduced_basis_ex3/Makefile.in | 1 + .../reduced_basis/reduced_basis_ex4/Makefile.in | 1 + .../reduced_basis/reduced_basis_ex5/Makefile.in | 1 + .../reduced_basis/reduced_basis_ex6/Makefile.in | 1 + .../reduced_basis/reduced_basis_ex7/Makefile.in | 1 + .../solution_transfer_ex1/Makefile.in | 1 + examples/subdomains/subdomains_ex1/Makefile.in | 1 + examples/subdomains/subdomains_ex2/Makefile.in | 1 + examples/subdomains/subdomains_ex3/Makefile.in | 1 + .../systems_of_equations_ex1/Makefile.in | 1 + .../systems_of_equations_ex2/Makefile.in | 1 + .../systems_of_equations_ex3/Makefile.in | 1 + .../systems_of_equations_ex4/Makefile.in | 1 + .../systems_of_equations_ex5/Makefile.in | 1 + .../systems_of_equations_ex6/Makefile.in | 1 + .../systems_of_equations_ex7/Makefile.in | 1 + .../systems_of_equations_ex8/Makefile.in | 1 + .../systems_of_equations_ex9/Makefile.in | 1 + examples/transient/transient_ex1/Makefile.in | 1 + examples/transient/transient_ex2/Makefile.in | 1 + examples/transient/transient_ex3/Makefile.in | 1 + examples/vector_fe/vector_fe_ex1/Makefile.in | 1 + examples/vector_fe/vector_fe_ex10/Makefile.in | 1 + examples/vector_fe/vector_fe_ex2/Makefile.in | 1 + examples/vector_fe/vector_fe_ex3/Makefile.in | 1 + examples/vector_fe/vector_fe_ex4/Makefile.in | 1 + examples/vector_fe/vector_fe_ex5/Makefile.in | 1 + examples/vector_fe/vector_fe_ex6/Makefile.in | 1 + examples/vector_fe/vector_fe_ex7/Makefile.in | 1 + examples/vector_fe/vector_fe_ex8/Makefile.in | 1 + examples/vector_fe/vector_fe_ex9/Makefile.in | 1 + include/Makefile.in | 1 + include/libmesh/Makefile.in | 1 + tests/Makefile.in | 2 +- 112 files changed, 122 insertions(+), 9 deletions(-) diff --git a/Makefile.in b/Makefile.in index 186be47b152..a828d28e8a0 100644 --- a/Makefile.in +++ b/Makefile.in @@ -7529,6 +7529,7 @@ KOKKOS_CXX = @KOKKOS_CXX@ KOKKOS_CXXFLAGS = @KOKKOS_CXXFLAGS@ KOKKOS_LDFLAGS = @KOKKOS_LDFLAGS@ KOKKOS_LIBS = @KOKKOS_LIBS@ +KOKKOS_MPI_CPPFLAGS = @KOKKOS_MPI_CPPFLAGS@ LASPACK_INCLUDE = @LASPACK_INCLUDE@ LASPACK_LIB = @LASPACK_LIB@ LD = @LD@ diff --git a/configure b/configure index 481367f38f0..c0250de457a 100755 --- a/configure +++ b/configure @@ -64288,6 +64288,7 @@ ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_cxx_compiler_gnu + if test "x$enablempi" = "xyes" then : @@ -64308,7 +64309,7 @@ int main(int argc, char ** argv) } _ACEOF -if ac_fn_c_try_link "$LINENO" +if ac_fn_cxx_try_link "$LINENO" then : kokkos_config_works=yes else case e in #( @@ -64332,7 +64333,7 @@ int main(int argc, char ** argv) } _ACEOF -if ac_fn_c_try_link "$LINENO" +if ac_fn_cxx_try_link "$LINENO" then : kokkos_config_works=yes else case e in #( @@ -64344,17 +64345,18 @@ rm -f core conftest.err conftest.$ac_objext conftest.beam \ ;; esac fi + ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + CXX="$libmesh_save_CXX" CPPFLAGS="$libmesh_save_CPPFLAGS" CXXFLAGS="$libmesh_save_CXXFLAGS" LDFLAGS="$libmesh_save_LDFLAGS" LIBS="$libmesh_save_LIBS" - ac_ext=c -ac_cpp='$CPP $CPPFLAGS' -ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_c_compiler_gnu if test "x$kokkos_config_works" = "xyes" then : @@ -69063,3 +69065,4 @@ printf "%s\n" "--------- Done Configuring libMesh ----------" >&6; } { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: ---------------------------------------------" >&5 printf "%s\n" "---------------------------------------------" >&6; } # rm -f -r conftest* config.cache include/libmesh/libmesh_config.h.tmp + diff --git a/contrib/Makefile.in b/contrib/Makefile.in index 668594d8c04..8f435734690 100644 --- a/contrib/Makefile.in +++ b/contrib/Makefile.in @@ -616,6 +616,7 @@ KOKKOS_CXX = @KOKKOS_CXX@ KOKKOS_CXXFLAGS = @KOKKOS_CXXFLAGS@ KOKKOS_LDFLAGS = @KOKKOS_LDFLAGS@ KOKKOS_LIBS = @KOKKOS_LIBS@ +KOKKOS_MPI_CPPFLAGS = @KOKKOS_MPI_CPPFLAGS@ LASPACK_INCLUDE = @LASPACK_INCLUDE@ LASPACK_LIB = @LASPACK_LIB@ LD = @LD@ diff --git a/contrib/capnproto/Makefile.in b/contrib/capnproto/Makefile.in index 56c7844f40d..baef088d0b1 100644 --- a/contrib/capnproto/Makefile.in +++ b/contrib/capnproto/Makefile.in @@ -465,6 +465,7 @@ KOKKOS_CXX = @KOKKOS_CXX@ KOKKOS_CXXFLAGS = @KOKKOS_CXXFLAGS@ KOKKOS_LDFLAGS = @KOKKOS_LDFLAGS@ KOKKOS_LIBS = @KOKKOS_LIBS@ +KOKKOS_MPI_CPPFLAGS = @KOKKOS_MPI_CPPFLAGS@ LASPACK_INCLUDE = @LASPACK_INCLUDE@ LASPACK_LIB = @LASPACK_LIB@ LD = @LD@ diff --git a/contrib/eigen/gitshim/Makefile.in b/contrib/eigen/gitshim/Makefile.in index bab4d953ac5..9fb8ce682e8 100644 --- a/contrib/eigen/gitshim/Makefile.in +++ b/contrib/eigen/gitshim/Makefile.in @@ -349,6 +349,7 @@ KOKKOS_CXX = @KOKKOS_CXX@ KOKKOS_CXXFLAGS = @KOKKOS_CXXFLAGS@ KOKKOS_LDFLAGS = @KOKKOS_LDFLAGS@ KOKKOS_LIBS = @KOKKOS_LIBS@ +KOKKOS_MPI_CPPFLAGS = @KOKKOS_MPI_CPPFLAGS@ LASPACK_INCLUDE = @LASPACK_INCLUDE@ LASPACK_LIB = @LASPACK_LIB@ LD = @LD@ diff --git a/contrib/exodusii/5.22b/exodus/Makefile.in b/contrib/exodusii/5.22b/exodus/Makefile.in index 66a5e6a0357..9d470e1a03f 100644 --- a/contrib/exodusii/5.22b/exodus/Makefile.in +++ b/contrib/exodusii/5.22b/exodus/Makefile.in @@ -3332,6 +3332,7 @@ KOKKOS_CXX = @KOKKOS_CXX@ KOKKOS_CXXFLAGS = @KOKKOS_CXXFLAGS@ KOKKOS_LDFLAGS = @KOKKOS_LDFLAGS@ KOKKOS_LIBS = @KOKKOS_LIBS@ +KOKKOS_MPI_CPPFLAGS = @KOKKOS_MPI_CPPFLAGS@ LASPACK_INCLUDE = @LASPACK_INCLUDE@ LASPACK_LIB = @LASPACK_LIB@ LD = @LD@ diff --git a/contrib/exodusii/5.22b/nemesis/Makefile.in b/contrib/exodusii/5.22b/nemesis/Makefile.in index 17636fa0144..40204256e72 100644 --- a/contrib/exodusii/5.22b/nemesis/Makefile.in +++ b/contrib/exodusii/5.22b/nemesis/Makefile.in @@ -411,6 +411,7 @@ KOKKOS_CXX = @KOKKOS_CXX@ KOKKOS_CXXFLAGS = @KOKKOS_CXXFLAGS@ KOKKOS_LDFLAGS = @KOKKOS_LDFLAGS@ KOKKOS_LIBS = @KOKKOS_LIBS@ +KOKKOS_MPI_CPPFLAGS = @KOKKOS_MPI_CPPFLAGS@ LASPACK_INCLUDE = @LASPACK_INCLUDE@ LASPACK_LIB = @LASPACK_LIB@ LD = @LD@ diff --git a/contrib/exodusii/Lib/Makefile.in b/contrib/exodusii/Lib/Makefile.in index 59c360d8928..b4f9a349981 100644 --- a/contrib/exodusii/Lib/Makefile.in +++ b/contrib/exodusii/Lib/Makefile.in @@ -1967,6 +1967,7 @@ KOKKOS_CXX = @KOKKOS_CXX@ KOKKOS_CXXFLAGS = @KOKKOS_CXXFLAGS@ KOKKOS_LDFLAGS = @KOKKOS_LDFLAGS@ KOKKOS_LIBS = @KOKKOS_LIBS@ +KOKKOS_MPI_CPPFLAGS = @KOKKOS_MPI_CPPFLAGS@ LASPACK_INCLUDE = @LASPACK_INCLUDE@ LASPACK_LIB = @LASPACK_LIB@ LD = @LD@ diff --git a/contrib/exodusii/v8.11/exodus/Makefile.in b/contrib/exodusii/v8.11/exodus/Makefile.in index 6c21419de79..2d72bdbc847 100644 --- a/contrib/exodusii/v8.11/exodus/Makefile.in +++ b/contrib/exodusii/v8.11/exodus/Makefile.in @@ -4260,6 +4260,7 @@ KOKKOS_CXX = @KOKKOS_CXX@ KOKKOS_CXXFLAGS = @KOKKOS_CXXFLAGS@ KOKKOS_LDFLAGS = @KOKKOS_LDFLAGS@ KOKKOS_LIBS = @KOKKOS_LIBS@ +KOKKOS_MPI_CPPFLAGS = @KOKKOS_MPI_CPPFLAGS@ LASPACK_INCLUDE = @LASPACK_INCLUDE@ LASPACK_LIB = @LASPACK_LIB@ LD = @LD@ diff --git a/contrib/exodusii/v8.11/nemesis/Makefile.in b/contrib/exodusii/v8.11/nemesis/Makefile.in index 715ed90b4fe..a6197c64b1f 100644 --- a/contrib/exodusii/v8.11/nemesis/Makefile.in +++ b/contrib/exodusii/v8.11/nemesis/Makefile.in @@ -421,6 +421,7 @@ KOKKOS_CXX = @KOKKOS_CXX@ KOKKOS_CXXFLAGS = @KOKKOS_CXXFLAGS@ KOKKOS_LDFLAGS = @KOKKOS_LDFLAGS@ KOKKOS_LIBS = @KOKKOS_LIBS@ +KOKKOS_MPI_CPPFLAGS = @KOKKOS_MPI_CPPFLAGS@ LASPACK_INCLUDE = @LASPACK_INCLUDE@ LASPACK_LIB = @LASPACK_LIB@ LD = @LD@ diff --git a/contrib/fparser/Makefile.in b/contrib/fparser/Makefile.in index dd6e31b0e76..325e1c48d59 100644 --- a/contrib/fparser/Makefile.in +++ b/contrib/fparser/Makefile.in @@ -879,6 +879,7 @@ KOKKOS_CXX = @KOKKOS_CXX@ KOKKOS_CXXFLAGS = @KOKKOS_CXXFLAGS@ KOKKOS_LDFLAGS = @KOKKOS_LDFLAGS@ KOKKOS_LIBS = @KOKKOS_LIBS@ +KOKKOS_MPI_CPPFLAGS = @KOKKOS_MPI_CPPFLAGS@ LASPACK_INCLUDE = @LASPACK_INCLUDE@ LASPACK_LIB = @LASPACK_LIB@ LD = @LD@ diff --git a/contrib/fparser/extrasrc/Makefile.in b/contrib/fparser/extrasrc/Makefile.in index 3eafacaf7a0..9bd3bff32c8 100644 --- a/contrib/fparser/extrasrc/Makefile.in +++ b/contrib/fparser/extrasrc/Makefile.in @@ -351,6 +351,7 @@ KOKKOS_CXX = @KOKKOS_CXX@ KOKKOS_CXXFLAGS = @KOKKOS_CXXFLAGS@ KOKKOS_LDFLAGS = @KOKKOS_LDFLAGS@ KOKKOS_LIBS = @KOKKOS_LIBS@ +KOKKOS_MPI_CPPFLAGS = @KOKKOS_MPI_CPPFLAGS@ LASPACK_INCLUDE = @LASPACK_INCLUDE@ LASPACK_LIB = @LASPACK_LIB@ LD = @LD@ diff --git a/contrib/gmv/Makefile.in b/contrib/gmv/Makefile.in index 249f658088a..51d91b1684d 100644 --- a/contrib/gmv/Makefile.in +++ b/contrib/gmv/Makefile.in @@ -406,6 +406,7 @@ KOKKOS_CXX = @KOKKOS_CXX@ KOKKOS_CXXFLAGS = @KOKKOS_CXXFLAGS@ KOKKOS_LDFLAGS = @KOKKOS_LDFLAGS@ KOKKOS_LIBS = @KOKKOS_LIBS@ +KOKKOS_MPI_CPPFLAGS = @KOKKOS_MPI_CPPFLAGS@ LASPACK_INCLUDE = @LASPACK_INCLUDE@ LASPACK_LIB = @LASPACK_LIB@ LD = @LD@ diff --git a/contrib/gzstream/Makefile.in b/contrib/gzstream/Makefile.in index d7694ab76c8..d5c845abf3d 100644 --- a/contrib/gzstream/Makefile.in +++ b/contrib/gzstream/Makefile.in @@ -458,6 +458,7 @@ KOKKOS_CXX = @KOKKOS_CXX@ KOKKOS_CXXFLAGS = @KOKKOS_CXXFLAGS@ KOKKOS_LDFLAGS = @KOKKOS_LDFLAGS@ KOKKOS_LIBS = @KOKKOS_LIBS@ +KOKKOS_MPI_CPPFLAGS = @KOKKOS_MPI_CPPFLAGS@ LASPACK_INCLUDE = @LASPACK_INCLUDE@ LASPACK_LIB = @LASPACK_LIB@ LD = @LD@ diff --git a/contrib/laspack/Makefile.in b/contrib/laspack/Makefile.in index 125376d4347..47a8abd00be 100644 --- a/contrib/laspack/Makefile.in +++ b/contrib/laspack/Makefile.in @@ -516,6 +516,7 @@ KOKKOS_CXX = @KOKKOS_CXX@ KOKKOS_CXXFLAGS = @KOKKOS_CXXFLAGS@ KOKKOS_LDFLAGS = @KOKKOS_LDFLAGS@ KOKKOS_LIBS = @KOKKOS_LIBS@ +KOKKOS_MPI_CPPFLAGS = @KOKKOS_MPI_CPPFLAGS@ LASPACK_INCLUDE = @LASPACK_INCLUDE@ LASPACK_LIB = @LASPACK_LIB@ LD = @LD@ diff --git a/contrib/libHilbert/Makefile.in b/contrib/libHilbert/Makefile.in index 35d049071ec..2c594e8ad9b 100644 --- a/contrib/libHilbert/Makefile.in +++ b/contrib/libHilbert/Makefile.in @@ -489,6 +489,7 @@ KOKKOS_CXX = @KOKKOS_CXX@ KOKKOS_CXXFLAGS = @KOKKOS_CXXFLAGS@ KOKKOS_LDFLAGS = @KOKKOS_LDFLAGS@ KOKKOS_LIBS = @KOKKOS_LIBS@ +KOKKOS_MPI_CPPFLAGS = @KOKKOS_MPI_CPPFLAGS@ LASPACK_INCLUDE = @LASPACK_INCLUDE@ LASPACK_LIB = @LASPACK_LIB@ LD = @LD@ diff --git a/contrib/metis/Makefile.in b/contrib/metis/Makefile.in index 5e8047805b9..642793791bf 100644 --- a/contrib/metis/Makefile.in +++ b/contrib/metis/Makefile.in @@ -1033,6 +1033,7 @@ KOKKOS_CXX = @KOKKOS_CXX@ KOKKOS_CXXFLAGS = @KOKKOS_CXXFLAGS@ KOKKOS_LDFLAGS = @KOKKOS_LDFLAGS@ KOKKOS_LIBS = @KOKKOS_LIBS@ +KOKKOS_MPI_CPPFLAGS = @KOKKOS_MPI_CPPFLAGS@ LASPACK_INCLUDE = @LASPACK_INCLUDE@ LASPACK_LIB = @LASPACK_LIB@ LD = @LD@ diff --git a/contrib/nanoflann/Makefile.in b/contrib/nanoflann/Makefile.in index 94694c9b03c..0ebeeff7406 100644 --- a/contrib/nanoflann/Makefile.in +++ b/contrib/nanoflann/Makefile.in @@ -455,6 +455,7 @@ KOKKOS_CXX = @KOKKOS_CXX@ KOKKOS_CXXFLAGS = @KOKKOS_CXXFLAGS@ KOKKOS_LDFLAGS = @KOKKOS_LDFLAGS@ KOKKOS_LIBS = @KOKKOS_LIBS@ +KOKKOS_MPI_CPPFLAGS = @KOKKOS_MPI_CPPFLAGS@ LASPACK_INCLUDE = @LASPACK_INCLUDE@ LASPACK_LIB = @LASPACK_LIB@ LD = @LD@ diff --git a/contrib/nemesis/Lib/Makefile.in b/contrib/nemesis/Lib/Makefile.in index 722bf4b86f0..122bd09254d 100644 --- a/contrib/nemesis/Lib/Makefile.in +++ b/contrib/nemesis/Lib/Makefile.in @@ -801,6 +801,7 @@ KOKKOS_CXX = @KOKKOS_CXX@ KOKKOS_CXXFLAGS = @KOKKOS_CXXFLAGS@ KOKKOS_LDFLAGS = @KOKKOS_LDFLAGS@ KOKKOS_LIBS = @KOKKOS_LIBS@ +KOKKOS_MPI_CPPFLAGS = @KOKKOS_MPI_CPPFLAGS@ LASPACK_INCLUDE = @LASPACK_INCLUDE@ LASPACK_LIB = @LASPACK_LIB@ LD = @LD@ diff --git a/contrib/netgen/Makefile.in b/contrib/netgen/Makefile.in index 931be784598..5044c6fd1a9 100644 --- a/contrib/netgen/Makefile.in +++ b/contrib/netgen/Makefile.in @@ -353,6 +353,7 @@ KOKKOS_CXX = @KOKKOS_CXX@ KOKKOS_CXXFLAGS = @KOKKOS_CXXFLAGS@ KOKKOS_LDFLAGS = @KOKKOS_LDFLAGS@ KOKKOS_LIBS = @KOKKOS_LIBS@ +KOKKOS_MPI_CPPFLAGS = @KOKKOS_MPI_CPPFLAGS@ LASPACK_INCLUDE = @LASPACK_INCLUDE@ LASPACK_LIB = @LASPACK_LIB@ LD = @LD@ @@ -942,7 +943,7 @@ vtkversion = @vtkversion@ @LIBMESH_ENABLE_NETGEN_TRUE@ netgen/nglib/nglib.h \ @LIBMESH_ENABLE_NETGEN_TRUE@ netgen/nglib/nglib_occ.cpp \ @LIBMESH_ENABLE_NETGEN_TRUE@ netgen/nglib/nglib_occ.h \ -@LIBMESH_ENABLE_NETGEN_TRUE@ netgen/nglib/parallelfunc.cpp +@LIBMESH_ENABLE_NETGEN_TRUE@ netgen/nglib/parallelfunc.cpp @LIBMESH_ENABLE_NETGEN_TRUE@netgenincludedir = $(includedir)/netgen @LIBMESH_ENABLE_NETGEN_TRUE@nglibincludedir = $(includedir)/netgen/nglib diff --git a/contrib/parmetis/Makefile.in b/contrib/parmetis/Makefile.in index cde4b12aab9..c7935e17638 100644 --- a/contrib/parmetis/Makefile.in +++ b/contrib/parmetis/Makefile.in @@ -867,6 +867,7 @@ KOKKOS_CXX = @KOKKOS_CXX@ KOKKOS_CXXFLAGS = @KOKKOS_CXXFLAGS@ KOKKOS_LDFLAGS = @KOKKOS_LDFLAGS@ KOKKOS_LIBS = @KOKKOS_LIBS@ +KOKKOS_MPI_CPPFLAGS = @KOKKOS_MPI_CPPFLAGS@ LASPACK_INCLUDE = @LASPACK_INCLUDE@ LASPACK_LIB = @LASPACK_LIB@ LD = @LD@ diff --git a/contrib/poly2tri/modified/Makefile.in b/contrib/poly2tri/modified/Makefile.in index 514fd6a38a6..8ea3f7cd8cf 100644 --- a/contrib/poly2tri/modified/Makefile.in +++ b/contrib/poly2tri/modified/Makefile.in @@ -553,6 +553,7 @@ KOKKOS_CXX = @KOKKOS_CXX@ KOKKOS_CXXFLAGS = @KOKKOS_CXXFLAGS@ KOKKOS_LDFLAGS = @KOKKOS_LDFLAGS@ KOKKOS_LIBS = @KOKKOS_LIBS@ +KOKKOS_MPI_CPPFLAGS = @KOKKOS_MPI_CPPFLAGS@ LASPACK_INCLUDE = @LASPACK_INCLUDE@ LASPACK_LIB = @LASPACK_LIB@ LD = @LD@ diff --git a/contrib/qhull/2012.1/Makefile.in b/contrib/qhull/2012.1/Makefile.in index 03f2cbcb819..e84b600ef25 100644 --- a/contrib/qhull/2012.1/Makefile.in +++ b/contrib/qhull/2012.1/Makefile.in @@ -1176,6 +1176,7 @@ KOKKOS_CXX = @KOKKOS_CXX@ KOKKOS_CXXFLAGS = @KOKKOS_CXXFLAGS@ KOKKOS_LDFLAGS = @KOKKOS_LDFLAGS@ KOKKOS_LIBS = @KOKKOS_LIBS@ +KOKKOS_MPI_CPPFLAGS = @KOKKOS_MPI_CPPFLAGS@ LASPACK_INCLUDE = @LASPACK_INCLUDE@ LASPACK_LIB = @LASPACK_LIB@ LD = @LD@ diff --git a/contrib/sfcurves/Makefile.in b/contrib/sfcurves/Makefile.in index 18be38e4660..ed6554d0ba3 100644 --- a/contrib/sfcurves/Makefile.in +++ b/contrib/sfcurves/Makefile.in @@ -426,6 +426,7 @@ KOKKOS_CXX = @KOKKOS_CXX@ KOKKOS_CXXFLAGS = @KOKKOS_CXXFLAGS@ KOKKOS_LDFLAGS = @KOKKOS_LDFLAGS@ KOKKOS_LIBS = @KOKKOS_LIBS@ +KOKKOS_MPI_CPPFLAGS = @KOKKOS_MPI_CPPFLAGS@ LASPACK_INCLUDE = @LASPACK_INCLUDE@ LASPACK_LIB = @LASPACK_LIB@ LD = @LD@ diff --git a/contrib/tecplot/binary/Makefile.in b/contrib/tecplot/binary/Makefile.in index 9a13af38818..ec79f2ea10a 100644 --- a/contrib/tecplot/binary/Makefile.in +++ b/contrib/tecplot/binary/Makefile.in @@ -396,6 +396,7 @@ KOKKOS_CXX = @KOKKOS_CXX@ KOKKOS_CXXFLAGS = @KOKKOS_CXXFLAGS@ KOKKOS_LDFLAGS = @KOKKOS_LDFLAGS@ KOKKOS_LIBS = @KOKKOS_LIBS@ +KOKKOS_MPI_CPPFLAGS = @KOKKOS_MPI_CPPFLAGS@ LASPACK_INCLUDE = @LASPACK_INCLUDE@ LASPACK_LIB = @LASPACK_LIB@ LD = @LD@ diff --git a/contrib/tecplot/tecio/Makefile.in b/contrib/tecplot/tecio/Makefile.in index f937b27b6db..1edfb7397dd 100644 --- a/contrib/tecplot/tecio/Makefile.in +++ b/contrib/tecplot/tecio/Makefile.in @@ -635,6 +635,7 @@ KOKKOS_CXX = @KOKKOS_CXX@ KOKKOS_CXXFLAGS = @KOKKOS_CXXFLAGS@ KOKKOS_LDFLAGS = @KOKKOS_LDFLAGS@ KOKKOS_LIBS = @KOKKOS_LIBS@ +KOKKOS_MPI_CPPFLAGS = @KOKKOS_MPI_CPPFLAGS@ LASPACK_INCLUDE = @LASPACK_INCLUDE@ LASPACK_LIB = @LASPACK_LIB@ LD = @LD@ diff --git a/contrib/tetgen/Makefile.in b/contrib/tetgen/Makefile.in index 725d7a30d36..fdecf33a03f 100644 --- a/contrib/tetgen/Makefile.in +++ b/contrib/tetgen/Makefile.in @@ -441,6 +441,7 @@ KOKKOS_CXX = @KOKKOS_CXX@ KOKKOS_CXXFLAGS = @KOKKOS_CXXFLAGS@ KOKKOS_LDFLAGS = @KOKKOS_LDFLAGS@ KOKKOS_LIBS = @KOKKOS_LIBS@ +KOKKOS_MPI_CPPFLAGS = @KOKKOS_MPI_CPPFLAGS@ LASPACK_INCLUDE = @LASPACK_INCLUDE@ LASPACK_LIB = @LASPACK_LIB@ LD = @LD@ diff --git a/contrib/triangle/Makefile.in b/contrib/triangle/Makefile.in index f87cb42296f..1e25b331714 100644 --- a/contrib/triangle/Makefile.in +++ b/contrib/triangle/Makefile.in @@ -436,6 +436,7 @@ KOKKOS_CXX = @KOKKOS_CXX@ KOKKOS_CXXFLAGS = @KOKKOS_CXXFLAGS@ KOKKOS_LDFLAGS = @KOKKOS_LDFLAGS@ KOKKOS_LIBS = @KOKKOS_LIBS@ +KOKKOS_MPI_CPPFLAGS = @KOKKOS_MPI_CPPFLAGS@ LASPACK_INCLUDE = @LASPACK_INCLUDE@ LASPACK_LIB = @LASPACK_LIB@ LD = @LD@ diff --git a/doc/Makefile.in b/doc/Makefile.in index 812994568fe..472cd35389b 100644 --- a/doc/Makefile.in +++ b/doc/Makefile.in @@ -359,6 +359,7 @@ KOKKOS_CXX = @KOKKOS_CXX@ KOKKOS_CXXFLAGS = @KOKKOS_CXXFLAGS@ KOKKOS_LDFLAGS = @KOKKOS_LDFLAGS@ KOKKOS_LIBS = @KOKKOS_LIBS@ +KOKKOS_MPI_CPPFLAGS = @KOKKOS_MPI_CPPFLAGS@ LASPACK_INCLUDE = @LASPACK_INCLUDE@ LASPACK_LIB = @LASPACK_LIB@ LD = @LD@ diff --git a/doc/html/Makefile.in b/doc/html/Makefile.in index d3e9103668c..302703289ee 100644 --- a/doc/html/Makefile.in +++ b/doc/html/Makefile.in @@ -319,6 +319,7 @@ KOKKOS_CXX = @KOKKOS_CXX@ KOKKOS_CXXFLAGS = @KOKKOS_CXXFLAGS@ KOKKOS_LDFLAGS = @KOKKOS_LDFLAGS@ KOKKOS_LIBS = @KOKKOS_LIBS@ +KOKKOS_MPI_CPPFLAGS = @KOKKOS_MPI_CPPFLAGS@ LASPACK_INCLUDE = @LASPACK_INCLUDE@ LASPACK_LIB = @LASPACK_LIB@ LD = @LD@ diff --git a/examples/Makefile.in b/examples/Makefile.in index 27a8db4d760..a662cf88a28 100644 --- a/examples/Makefile.in +++ b/examples/Makefile.in @@ -387,6 +387,7 @@ KOKKOS_CXX = @KOKKOS_CXX@ KOKKOS_CXXFLAGS = @KOKKOS_CXXFLAGS@ KOKKOS_LDFLAGS = @KOKKOS_LDFLAGS@ KOKKOS_LIBS = @KOKKOS_LIBS@ +KOKKOS_MPI_CPPFLAGS = @KOKKOS_MPI_CPPFLAGS@ LASPACK_INCLUDE = @LASPACK_INCLUDE@ LASPACK_LIB = @LASPACK_LIB@ LD = @LD@ diff --git a/examples/adaptivity/adaptivity_ex1/Makefile.in b/examples/adaptivity/adaptivity_ex1/Makefile.in index 3dc4c77a9dd..cc396d29f42 100644 --- a/examples/adaptivity/adaptivity_ex1/Makefile.in +++ b/examples/adaptivity/adaptivity_ex1/Makefile.in @@ -477,6 +477,7 @@ KOKKOS_CXX = @KOKKOS_CXX@ KOKKOS_CXXFLAGS = @KOKKOS_CXXFLAGS@ KOKKOS_LDFLAGS = @KOKKOS_LDFLAGS@ KOKKOS_LIBS = @KOKKOS_LIBS@ +KOKKOS_MPI_CPPFLAGS = @KOKKOS_MPI_CPPFLAGS@ LASPACK_INCLUDE = @LASPACK_INCLUDE@ LASPACK_LIB = @LASPACK_LIB@ LD = @LD@ diff --git a/examples/adaptivity/adaptivity_ex2/Makefile.in b/examples/adaptivity/adaptivity_ex2/Makefile.in index 04c82fb9137..9c39660be70 100644 --- a/examples/adaptivity/adaptivity_ex2/Makefile.in +++ b/examples/adaptivity/adaptivity_ex2/Makefile.in @@ -496,6 +496,7 @@ KOKKOS_CXX = @KOKKOS_CXX@ KOKKOS_CXXFLAGS = @KOKKOS_CXXFLAGS@ KOKKOS_LDFLAGS = @KOKKOS_LDFLAGS@ KOKKOS_LIBS = @KOKKOS_LIBS@ +KOKKOS_MPI_CPPFLAGS = @KOKKOS_MPI_CPPFLAGS@ LASPACK_INCLUDE = @LASPACK_INCLUDE@ LASPACK_LIB = @LASPACK_LIB@ LD = @LD@ diff --git a/examples/adaptivity/adaptivity_ex3/Makefile.in b/examples/adaptivity/adaptivity_ex3/Makefile.in index 7e31802fa14..5f7d55a3477 100644 --- a/examples/adaptivity/adaptivity_ex3/Makefile.in +++ b/examples/adaptivity/adaptivity_ex3/Makefile.in @@ -483,6 +483,7 @@ KOKKOS_CXX = @KOKKOS_CXX@ KOKKOS_CXXFLAGS = @KOKKOS_CXXFLAGS@ KOKKOS_LDFLAGS = @KOKKOS_LDFLAGS@ KOKKOS_LIBS = @KOKKOS_LIBS@ +KOKKOS_MPI_CPPFLAGS = @KOKKOS_MPI_CPPFLAGS@ LASPACK_INCLUDE = @LASPACK_INCLUDE@ LASPACK_LIB = @LASPACK_LIB@ LD = @LD@ diff --git a/examples/adaptivity/adaptivity_ex4/Makefile.in b/examples/adaptivity/adaptivity_ex4/Makefile.in index e155bc31268..f013de36926 100644 --- a/examples/adaptivity/adaptivity_ex4/Makefile.in +++ b/examples/adaptivity/adaptivity_ex4/Makefile.in @@ -483,6 +483,7 @@ KOKKOS_CXX = @KOKKOS_CXX@ KOKKOS_CXXFLAGS = @KOKKOS_CXXFLAGS@ KOKKOS_LDFLAGS = @KOKKOS_LDFLAGS@ KOKKOS_LIBS = @KOKKOS_LIBS@ +KOKKOS_MPI_CPPFLAGS = @KOKKOS_MPI_CPPFLAGS@ LASPACK_INCLUDE = @LASPACK_INCLUDE@ LASPACK_LIB = @LASPACK_LIB@ LD = @LD@ diff --git a/examples/adaptivity/adaptivity_ex5/Makefile.in b/examples/adaptivity/adaptivity_ex5/Makefile.in index 50cfa24eefd..7deb22866e0 100644 --- a/examples/adaptivity/adaptivity_ex5/Makefile.in +++ b/examples/adaptivity/adaptivity_ex5/Makefile.in @@ -492,6 +492,7 @@ KOKKOS_CXX = @KOKKOS_CXX@ KOKKOS_CXXFLAGS = @KOKKOS_CXXFLAGS@ KOKKOS_LDFLAGS = @KOKKOS_LDFLAGS@ KOKKOS_LIBS = @KOKKOS_LIBS@ +KOKKOS_MPI_CPPFLAGS = @KOKKOS_MPI_CPPFLAGS@ LASPACK_INCLUDE = @LASPACK_INCLUDE@ LASPACK_LIB = @LASPACK_LIB@ LD = @LD@ diff --git a/examples/adjoints/adjoints_ex1/Makefile.in b/examples/adjoints/adjoints_ex1/Makefile.in index f658f98c231..9559de61b70 100644 --- a/examples/adjoints/adjoints_ex1/Makefile.in +++ b/examples/adjoints/adjoints_ex1/Makefile.in @@ -571,6 +571,7 @@ KOKKOS_CXX = @KOKKOS_CXX@ KOKKOS_CXXFLAGS = @KOKKOS_CXXFLAGS@ KOKKOS_LDFLAGS = @KOKKOS_LDFLAGS@ KOKKOS_LIBS = @KOKKOS_LIBS@ +KOKKOS_MPI_CPPFLAGS = @KOKKOS_MPI_CPPFLAGS@ LASPACK_INCLUDE = @LASPACK_INCLUDE@ LASPACK_LIB = @LASPACK_LIB@ LD = @LD@ diff --git a/examples/adjoints/adjoints_ex2/Makefile.in b/examples/adjoints/adjoints_ex2/Makefile.in index 1583e06ba69..1ed48513c88 100644 --- a/examples/adjoints/adjoints_ex2/Makefile.in +++ b/examples/adjoints/adjoints_ex2/Makefile.in @@ -539,6 +539,7 @@ KOKKOS_CXX = @KOKKOS_CXX@ KOKKOS_CXXFLAGS = @KOKKOS_CXXFLAGS@ KOKKOS_LDFLAGS = @KOKKOS_LDFLAGS@ KOKKOS_LIBS = @KOKKOS_LIBS@ +KOKKOS_MPI_CPPFLAGS = @KOKKOS_MPI_CPPFLAGS@ LASPACK_INCLUDE = @LASPACK_INCLUDE@ LASPACK_LIB = @LASPACK_LIB@ LD = @LD@ diff --git a/examples/adjoints/adjoints_ex3/Makefile.in b/examples/adjoints/adjoints_ex3/Makefile.in index 8e744ca96ee..32dac179bc2 100644 --- a/examples/adjoints/adjoints_ex3/Makefile.in +++ b/examples/adjoints/adjoints_ex3/Makefile.in @@ -574,6 +574,7 @@ KOKKOS_CXX = @KOKKOS_CXX@ KOKKOS_CXXFLAGS = @KOKKOS_CXXFLAGS@ KOKKOS_LDFLAGS = @KOKKOS_LDFLAGS@ KOKKOS_LIBS = @KOKKOS_LIBS@ +KOKKOS_MPI_CPPFLAGS = @KOKKOS_MPI_CPPFLAGS@ LASPACK_INCLUDE = @LASPACK_INCLUDE@ LASPACK_LIB = @LASPACK_LIB@ LD = @LD@ diff --git a/examples/adjoints/adjoints_ex4/Makefile.in b/examples/adjoints/adjoints_ex4/Makefile.in index 8ff3dceb0f3..2b6f750b92c 100644 --- a/examples/adjoints/adjoints_ex4/Makefile.in +++ b/examples/adjoints/adjoints_ex4/Makefile.in @@ -574,6 +574,7 @@ KOKKOS_CXX = @KOKKOS_CXX@ KOKKOS_CXXFLAGS = @KOKKOS_CXXFLAGS@ KOKKOS_LDFLAGS = @KOKKOS_LDFLAGS@ KOKKOS_LIBS = @KOKKOS_LIBS@ +KOKKOS_MPI_CPPFLAGS = @KOKKOS_MPI_CPPFLAGS@ LASPACK_INCLUDE = @LASPACK_INCLUDE@ LASPACK_LIB = @LASPACK_LIB@ LD = @LD@ diff --git a/examples/adjoints/adjoints_ex5/Makefile.in b/examples/adjoints/adjoints_ex5/Makefile.in index f4bdc7d11ae..077e3ba31f9 100644 --- a/examples/adjoints/adjoints_ex5/Makefile.in +++ b/examples/adjoints/adjoints_ex5/Makefile.in @@ -574,6 +574,7 @@ KOKKOS_CXX = @KOKKOS_CXX@ KOKKOS_CXXFLAGS = @KOKKOS_CXXFLAGS@ KOKKOS_LDFLAGS = @KOKKOS_LDFLAGS@ KOKKOS_LIBS = @KOKKOS_LIBS@ +KOKKOS_MPI_CPPFLAGS = @KOKKOS_MPI_CPPFLAGS@ LASPACK_INCLUDE = @LASPACK_INCLUDE@ LASPACK_LIB = @LASPACK_LIB@ LD = @LD@ diff --git a/examples/adjoints/adjoints_ex6/Makefile.in b/examples/adjoints/adjoints_ex6/Makefile.in index 43ada1d6034..e8a09524ff0 100644 --- a/examples/adjoints/adjoints_ex6/Makefile.in +++ b/examples/adjoints/adjoints_ex6/Makefile.in @@ -539,6 +539,7 @@ KOKKOS_CXX = @KOKKOS_CXX@ KOKKOS_CXXFLAGS = @KOKKOS_CXXFLAGS@ KOKKOS_LDFLAGS = @KOKKOS_LDFLAGS@ KOKKOS_LIBS = @KOKKOS_LIBS@ +KOKKOS_MPI_CPPFLAGS = @KOKKOS_MPI_CPPFLAGS@ LASPACK_INCLUDE = @LASPACK_INCLUDE@ LASPACK_LIB = @LASPACK_LIB@ LD = @LD@ diff --git a/examples/adjoints/adjoints_ex7/Makefile.in b/examples/adjoints/adjoints_ex7/Makefile.in index c807bd13682..e5a98c02318 100644 --- a/examples/adjoints/adjoints_ex7/Makefile.in +++ b/examples/adjoints/adjoints_ex7/Makefile.in @@ -589,6 +589,7 @@ KOKKOS_CXX = @KOKKOS_CXX@ KOKKOS_CXXFLAGS = @KOKKOS_CXXFLAGS@ KOKKOS_LDFLAGS = @KOKKOS_LDFLAGS@ KOKKOS_LIBS = @KOKKOS_LIBS@ +KOKKOS_MPI_CPPFLAGS = @KOKKOS_MPI_CPPFLAGS@ LASPACK_INCLUDE = @LASPACK_INCLUDE@ LASPACK_LIB = @LASPACK_LIB@ LD = @LD@ diff --git a/examples/eigenproblems/eigenproblems_ex1/Makefile.in b/examples/eigenproblems/eigenproblems_ex1/Makefile.in index b2aeeba0c70..d6696c9657b 100644 --- a/examples/eigenproblems/eigenproblems_ex1/Makefile.in +++ b/examples/eigenproblems/eigenproblems_ex1/Makefile.in @@ -477,6 +477,7 @@ KOKKOS_CXX = @KOKKOS_CXX@ KOKKOS_CXXFLAGS = @KOKKOS_CXXFLAGS@ KOKKOS_LDFLAGS = @KOKKOS_LDFLAGS@ KOKKOS_LIBS = @KOKKOS_LIBS@ +KOKKOS_MPI_CPPFLAGS = @KOKKOS_MPI_CPPFLAGS@ LASPACK_INCLUDE = @LASPACK_INCLUDE@ LASPACK_LIB = @LASPACK_LIB@ LD = @LD@ diff --git a/examples/eigenproblems/eigenproblems_ex2/Makefile.in b/examples/eigenproblems/eigenproblems_ex2/Makefile.in index e4584dfbd8f..b2a5fb48010 100644 --- a/examples/eigenproblems/eigenproblems_ex2/Makefile.in +++ b/examples/eigenproblems/eigenproblems_ex2/Makefile.in @@ -477,6 +477,7 @@ KOKKOS_CXX = @KOKKOS_CXX@ KOKKOS_CXXFLAGS = @KOKKOS_CXXFLAGS@ KOKKOS_LDFLAGS = @KOKKOS_LDFLAGS@ KOKKOS_LIBS = @KOKKOS_LIBS@ +KOKKOS_MPI_CPPFLAGS = @KOKKOS_MPI_CPPFLAGS@ LASPACK_INCLUDE = @LASPACK_INCLUDE@ LASPACK_LIB = @LASPACK_LIB@ LD = @LD@ diff --git a/examples/eigenproblems/eigenproblems_ex3/Makefile.in b/examples/eigenproblems/eigenproblems_ex3/Makefile.in index 1bb7ca59f97..33072d3d79b 100644 --- a/examples/eigenproblems/eigenproblems_ex3/Makefile.in +++ b/examples/eigenproblems/eigenproblems_ex3/Makefile.in @@ -483,6 +483,7 @@ KOKKOS_CXX = @KOKKOS_CXX@ KOKKOS_CXXFLAGS = @KOKKOS_CXXFLAGS@ KOKKOS_LDFLAGS = @KOKKOS_LDFLAGS@ KOKKOS_LIBS = @KOKKOS_LIBS@ +KOKKOS_MPI_CPPFLAGS = @KOKKOS_MPI_CPPFLAGS@ LASPACK_INCLUDE = @LASPACK_INCLUDE@ LASPACK_LIB = @LASPACK_LIB@ LD = @LD@ diff --git a/examples/eigenproblems/eigenproblems_ex4/Makefile.in b/examples/eigenproblems/eigenproblems_ex4/Makefile.in index becef7ee553..585db452640 100644 --- a/examples/eigenproblems/eigenproblems_ex4/Makefile.in +++ b/examples/eigenproblems/eigenproblems_ex4/Makefile.in @@ -477,6 +477,7 @@ KOKKOS_CXX = @KOKKOS_CXX@ KOKKOS_CXXFLAGS = @KOKKOS_CXXFLAGS@ KOKKOS_LDFLAGS = @KOKKOS_LDFLAGS@ KOKKOS_LIBS = @KOKKOS_LIBS@ +KOKKOS_MPI_CPPFLAGS = @KOKKOS_MPI_CPPFLAGS@ LASPACK_INCLUDE = @LASPACK_INCLUDE@ LASPACK_LIB = @LASPACK_LIB@ LD = @LD@ diff --git a/examples/fem_system/fem_system_ex1/Makefile.in b/examples/fem_system/fem_system_ex1/Makefile.in index ab49a448096..25e7f610ded 100644 --- a/examples/fem_system/fem_system_ex1/Makefile.in +++ b/examples/fem_system/fem_system_ex1/Makefile.in @@ -511,6 +511,7 @@ KOKKOS_CXX = @KOKKOS_CXX@ KOKKOS_CXXFLAGS = @KOKKOS_CXXFLAGS@ KOKKOS_LDFLAGS = @KOKKOS_LDFLAGS@ KOKKOS_LIBS = @KOKKOS_LIBS@ +KOKKOS_MPI_CPPFLAGS = @KOKKOS_MPI_CPPFLAGS@ LASPACK_INCLUDE = @LASPACK_INCLUDE@ LASPACK_LIB = @LASPACK_LIB@ LD = @LD@ diff --git a/examples/fem_system/fem_system_ex2/Makefile.in b/examples/fem_system/fem_system_ex2/Makefile.in index 5990a9ddcc7..8b30230a3b1 100644 --- a/examples/fem_system/fem_system_ex2/Makefile.in +++ b/examples/fem_system/fem_system_ex2/Makefile.in @@ -526,6 +526,7 @@ KOKKOS_CXX = @KOKKOS_CXX@ KOKKOS_CXXFLAGS = @KOKKOS_CXXFLAGS@ KOKKOS_LDFLAGS = @KOKKOS_LDFLAGS@ KOKKOS_LIBS = @KOKKOS_LIBS@ +KOKKOS_MPI_CPPFLAGS = @KOKKOS_MPI_CPPFLAGS@ LASPACK_INCLUDE = @LASPACK_INCLUDE@ LASPACK_LIB = @LASPACK_LIB@ LD = @LD@ diff --git a/examples/fem_system/fem_system_ex3/Makefile.in b/examples/fem_system/fem_system_ex3/Makefile.in index 614048a0e48..2d141f77288 100644 --- a/examples/fem_system/fem_system_ex3/Makefile.in +++ b/examples/fem_system/fem_system_ex3/Makefile.in @@ -511,6 +511,7 @@ KOKKOS_CXX = @KOKKOS_CXX@ KOKKOS_CXXFLAGS = @KOKKOS_CXXFLAGS@ KOKKOS_LDFLAGS = @KOKKOS_LDFLAGS@ KOKKOS_LIBS = @KOKKOS_LIBS@ +KOKKOS_MPI_CPPFLAGS = @KOKKOS_MPI_CPPFLAGS@ LASPACK_INCLUDE = @LASPACK_INCLUDE@ LASPACK_LIB = @LASPACK_LIB@ LD = @LD@ diff --git a/examples/fem_system/fem_system_ex4/Makefile.in b/examples/fem_system/fem_system_ex4/Makefile.in index 1a31f0ddab4..522bb49f8e9 100644 --- a/examples/fem_system/fem_system_ex4/Makefile.in +++ b/examples/fem_system/fem_system_ex4/Makefile.in @@ -511,6 +511,7 @@ KOKKOS_CXX = @KOKKOS_CXX@ KOKKOS_CXXFLAGS = @KOKKOS_CXXFLAGS@ KOKKOS_LDFLAGS = @KOKKOS_LDFLAGS@ KOKKOS_LIBS = @KOKKOS_LIBS@ +KOKKOS_MPI_CPPFLAGS = @KOKKOS_MPI_CPPFLAGS@ LASPACK_INCLUDE = @LASPACK_INCLUDE@ LASPACK_LIB = @LASPACK_LIB@ LD = @LD@ diff --git a/examples/fem_system/fem_system_ex5/Makefile.in b/examples/fem_system/fem_system_ex5/Makefile.in index 2526a04fe16..01fb482aa91 100644 --- a/examples/fem_system/fem_system_ex5/Makefile.in +++ b/examples/fem_system/fem_system_ex5/Makefile.in @@ -526,6 +526,7 @@ KOKKOS_CXX = @KOKKOS_CXX@ KOKKOS_CXXFLAGS = @KOKKOS_CXXFLAGS@ KOKKOS_LDFLAGS = @KOKKOS_LDFLAGS@ KOKKOS_LIBS = @KOKKOS_LIBS@ +KOKKOS_MPI_CPPFLAGS = @KOKKOS_MPI_CPPFLAGS@ LASPACK_INCLUDE = @LASPACK_INCLUDE@ LASPACK_LIB = @LASPACK_LIB@ LD = @LD@ diff --git a/examples/introduction/introduction_ex1/Makefile.in b/examples/introduction/introduction_ex1/Makefile.in index 13087163eff..e8308c46d86 100644 --- a/examples/introduction/introduction_ex1/Makefile.in +++ b/examples/introduction/introduction_ex1/Makefile.in @@ -477,6 +477,7 @@ KOKKOS_CXX = @KOKKOS_CXX@ KOKKOS_CXXFLAGS = @KOKKOS_CXXFLAGS@ KOKKOS_LDFLAGS = @KOKKOS_LDFLAGS@ KOKKOS_LIBS = @KOKKOS_LIBS@ +KOKKOS_MPI_CPPFLAGS = @KOKKOS_MPI_CPPFLAGS@ LASPACK_INCLUDE = @LASPACK_INCLUDE@ LASPACK_LIB = @LASPACK_LIB@ LD = @LD@ diff --git a/examples/introduction/introduction_ex2/Makefile.in b/examples/introduction/introduction_ex2/Makefile.in index 5e11b336ef9..36d5f45eee7 100644 --- a/examples/introduction/introduction_ex2/Makefile.in +++ b/examples/introduction/introduction_ex2/Makefile.in @@ -477,6 +477,7 @@ KOKKOS_CXX = @KOKKOS_CXX@ KOKKOS_CXXFLAGS = @KOKKOS_CXXFLAGS@ KOKKOS_LDFLAGS = @KOKKOS_LDFLAGS@ KOKKOS_LIBS = @KOKKOS_LIBS@ +KOKKOS_MPI_CPPFLAGS = @KOKKOS_MPI_CPPFLAGS@ LASPACK_INCLUDE = @LASPACK_INCLUDE@ LASPACK_LIB = @LASPACK_LIB@ LD = @LD@ diff --git a/examples/introduction/introduction_ex3/Makefile.in b/examples/introduction/introduction_ex3/Makefile.in index bb24117c806..f9d6287a98e 100644 --- a/examples/introduction/introduction_ex3/Makefile.in +++ b/examples/introduction/introduction_ex3/Makefile.in @@ -492,6 +492,7 @@ KOKKOS_CXX = @KOKKOS_CXX@ KOKKOS_CXXFLAGS = @KOKKOS_CXXFLAGS@ KOKKOS_LDFLAGS = @KOKKOS_LDFLAGS@ KOKKOS_LIBS = @KOKKOS_LIBS@ +KOKKOS_MPI_CPPFLAGS = @KOKKOS_MPI_CPPFLAGS@ LASPACK_INCLUDE = @LASPACK_INCLUDE@ LASPACK_LIB = @LASPACK_LIB@ LD = @LD@ diff --git a/examples/introduction/introduction_ex4/Makefile.in b/examples/introduction/introduction_ex4/Makefile.in index efdd5b9b127..2d2474a658f 100644 --- a/examples/introduction/introduction_ex4/Makefile.in +++ b/examples/introduction/introduction_ex4/Makefile.in @@ -492,6 +492,7 @@ KOKKOS_CXX = @KOKKOS_CXX@ KOKKOS_CXXFLAGS = @KOKKOS_CXXFLAGS@ KOKKOS_LDFLAGS = @KOKKOS_LDFLAGS@ KOKKOS_LIBS = @KOKKOS_LIBS@ +KOKKOS_MPI_CPPFLAGS = @KOKKOS_MPI_CPPFLAGS@ LASPACK_INCLUDE = @LASPACK_INCLUDE@ LASPACK_LIB = @LASPACK_LIB@ LD = @LD@ diff --git a/examples/introduction/introduction_ex5/Makefile.in b/examples/introduction/introduction_ex5/Makefile.in index b08a51822e9..437ce7b05f2 100644 --- a/examples/introduction/introduction_ex5/Makefile.in +++ b/examples/introduction/introduction_ex5/Makefile.in @@ -492,6 +492,7 @@ KOKKOS_CXX = @KOKKOS_CXX@ KOKKOS_CXXFLAGS = @KOKKOS_CXXFLAGS@ KOKKOS_LDFLAGS = @KOKKOS_LDFLAGS@ KOKKOS_LIBS = @KOKKOS_LIBS@ +KOKKOS_MPI_CPPFLAGS = @KOKKOS_MPI_CPPFLAGS@ LASPACK_INCLUDE = @LASPACK_INCLUDE@ LASPACK_LIB = @LASPACK_LIB@ LD = @LD@ diff --git a/examples/miscellaneous/miscellaneous_ex1/Makefile.in b/examples/miscellaneous/miscellaneous_ex1/Makefile.in index fa1d6604c10..9bcaf44480c 100644 --- a/examples/miscellaneous/miscellaneous_ex1/Makefile.in +++ b/examples/miscellaneous/miscellaneous_ex1/Makefile.in @@ -477,6 +477,7 @@ KOKKOS_CXX = @KOKKOS_CXX@ KOKKOS_CXXFLAGS = @KOKKOS_CXXFLAGS@ KOKKOS_LDFLAGS = @KOKKOS_LDFLAGS@ KOKKOS_LIBS = @KOKKOS_LIBS@ +KOKKOS_MPI_CPPFLAGS = @KOKKOS_MPI_CPPFLAGS@ LASPACK_INCLUDE = @LASPACK_INCLUDE@ LASPACK_LIB = @LASPACK_LIB@ LD = @LD@ diff --git a/examples/miscellaneous/miscellaneous_ex10/Makefile.in b/examples/miscellaneous/miscellaneous_ex10/Makefile.in index 4ceaf8ccf94..bf721ec793f 100644 --- a/examples/miscellaneous/miscellaneous_ex10/Makefile.in +++ b/examples/miscellaneous/miscellaneous_ex10/Makefile.in @@ -477,6 +477,7 @@ KOKKOS_CXX = @KOKKOS_CXX@ KOKKOS_CXXFLAGS = @KOKKOS_CXXFLAGS@ KOKKOS_LDFLAGS = @KOKKOS_LDFLAGS@ KOKKOS_LIBS = @KOKKOS_LIBS@ +KOKKOS_MPI_CPPFLAGS = @KOKKOS_MPI_CPPFLAGS@ LASPACK_INCLUDE = @LASPACK_INCLUDE@ LASPACK_LIB = @LASPACK_LIB@ LD = @LD@ diff --git a/examples/miscellaneous/miscellaneous_ex11/Makefile.in b/examples/miscellaneous/miscellaneous_ex11/Makefile.in index e36b21636b2..8db1b8690a6 100644 --- a/examples/miscellaneous/miscellaneous_ex11/Makefile.in +++ b/examples/miscellaneous/miscellaneous_ex11/Makefile.in @@ -483,6 +483,7 @@ KOKKOS_CXX = @KOKKOS_CXX@ KOKKOS_CXXFLAGS = @KOKKOS_CXXFLAGS@ KOKKOS_LDFLAGS = @KOKKOS_LDFLAGS@ KOKKOS_LIBS = @KOKKOS_LIBS@ +KOKKOS_MPI_CPPFLAGS = @KOKKOS_MPI_CPPFLAGS@ LASPACK_INCLUDE = @LASPACK_INCLUDE@ LASPACK_LIB = @LASPACK_LIB@ LD = @LD@ diff --git a/examples/miscellaneous/miscellaneous_ex12/Makefile.in b/examples/miscellaneous/miscellaneous_ex12/Makefile.in index 2c4c4fc193d..2d6c2fbd728 100644 --- a/examples/miscellaneous/miscellaneous_ex12/Makefile.in +++ b/examples/miscellaneous/miscellaneous_ex12/Makefile.in @@ -483,6 +483,7 @@ KOKKOS_CXX = @KOKKOS_CXX@ KOKKOS_CXXFLAGS = @KOKKOS_CXXFLAGS@ KOKKOS_LDFLAGS = @KOKKOS_LDFLAGS@ KOKKOS_LIBS = @KOKKOS_LIBS@ +KOKKOS_MPI_CPPFLAGS = @KOKKOS_MPI_CPPFLAGS@ LASPACK_INCLUDE = @LASPACK_INCLUDE@ LASPACK_LIB = @LASPACK_LIB@ LD = @LD@ diff --git a/examples/miscellaneous/miscellaneous_ex13/Makefile.in b/examples/miscellaneous/miscellaneous_ex13/Makefile.in index 4f0080367ed..b76863f34c0 100644 --- a/examples/miscellaneous/miscellaneous_ex13/Makefile.in +++ b/examples/miscellaneous/miscellaneous_ex13/Makefile.in @@ -483,6 +483,7 @@ KOKKOS_CXX = @KOKKOS_CXX@ KOKKOS_CXXFLAGS = @KOKKOS_CXXFLAGS@ KOKKOS_LDFLAGS = @KOKKOS_LDFLAGS@ KOKKOS_LIBS = @KOKKOS_LIBS@ +KOKKOS_MPI_CPPFLAGS = @KOKKOS_MPI_CPPFLAGS@ LASPACK_INCLUDE = @LASPACK_INCLUDE@ LASPACK_LIB = @LASPACK_LIB@ LD = @LD@ diff --git a/examples/miscellaneous/miscellaneous_ex14/Makefile.in b/examples/miscellaneous/miscellaneous_ex14/Makefile.in index 768948775af..e4cef4ae163 100644 --- a/examples/miscellaneous/miscellaneous_ex14/Makefile.in +++ b/examples/miscellaneous/miscellaneous_ex14/Makefile.in @@ -477,6 +477,7 @@ KOKKOS_CXX = @KOKKOS_CXX@ KOKKOS_CXXFLAGS = @KOKKOS_CXXFLAGS@ KOKKOS_LDFLAGS = @KOKKOS_LDFLAGS@ KOKKOS_LIBS = @KOKKOS_LIBS@ +KOKKOS_MPI_CPPFLAGS = @KOKKOS_MPI_CPPFLAGS@ LASPACK_INCLUDE = @LASPACK_INCLUDE@ LASPACK_LIB = @LASPACK_LIB@ LD = @LD@ diff --git a/examples/miscellaneous/miscellaneous_ex15/Makefile.in b/examples/miscellaneous/miscellaneous_ex15/Makefile.in index 438762128b7..643317916e6 100644 --- a/examples/miscellaneous/miscellaneous_ex15/Makefile.in +++ b/examples/miscellaneous/miscellaneous_ex15/Makefile.in @@ -477,6 +477,7 @@ KOKKOS_CXX = @KOKKOS_CXX@ KOKKOS_CXXFLAGS = @KOKKOS_CXXFLAGS@ KOKKOS_LDFLAGS = @KOKKOS_LDFLAGS@ KOKKOS_LIBS = @KOKKOS_LIBS@ +KOKKOS_MPI_CPPFLAGS = @KOKKOS_MPI_CPPFLAGS@ LASPACK_INCLUDE = @LASPACK_INCLUDE@ LASPACK_LIB = @LASPACK_LIB@ LD = @LD@ diff --git a/examples/miscellaneous/miscellaneous_ex16/Makefile.in b/examples/miscellaneous/miscellaneous_ex16/Makefile.in index acaecda9d82..ecd2b7973a7 100644 --- a/examples/miscellaneous/miscellaneous_ex16/Makefile.in +++ b/examples/miscellaneous/miscellaneous_ex16/Makefile.in @@ -493,6 +493,7 @@ KOKKOS_CXX = @KOKKOS_CXX@ KOKKOS_CXXFLAGS = @KOKKOS_CXXFLAGS@ KOKKOS_LDFLAGS = @KOKKOS_LDFLAGS@ KOKKOS_LIBS = @KOKKOS_LIBS@ +KOKKOS_MPI_CPPFLAGS = @KOKKOS_MPI_CPPFLAGS@ LASPACK_INCLUDE = @LASPACK_INCLUDE@ LASPACK_LIB = @LASPACK_LIB@ LD = @LD@ diff --git a/examples/miscellaneous/miscellaneous_ex17/Makefile.in b/examples/miscellaneous/miscellaneous_ex17/Makefile.in index 8ab2dc797f8..6d61cb4ed36 100644 --- a/examples/miscellaneous/miscellaneous_ex17/Makefile.in +++ b/examples/miscellaneous/miscellaneous_ex17/Makefile.in @@ -492,6 +492,7 @@ KOKKOS_CXX = @KOKKOS_CXX@ KOKKOS_CXXFLAGS = @KOKKOS_CXXFLAGS@ KOKKOS_LDFLAGS = @KOKKOS_LDFLAGS@ KOKKOS_LIBS = @KOKKOS_LIBS@ +KOKKOS_MPI_CPPFLAGS = @KOKKOS_MPI_CPPFLAGS@ LASPACK_INCLUDE = @LASPACK_INCLUDE@ LASPACK_LIB = @LASPACK_LIB@ LD = @LD@ diff --git a/examples/miscellaneous/miscellaneous_ex2/Makefile.in b/examples/miscellaneous/miscellaneous_ex2/Makefile.in index 5e2d6279049..8e59e6ad478 100644 --- a/examples/miscellaneous/miscellaneous_ex2/Makefile.in +++ b/examples/miscellaneous/miscellaneous_ex2/Makefile.in @@ -483,6 +483,7 @@ KOKKOS_CXX = @KOKKOS_CXX@ KOKKOS_CXXFLAGS = @KOKKOS_CXXFLAGS@ KOKKOS_LDFLAGS = @KOKKOS_LDFLAGS@ KOKKOS_LIBS = @KOKKOS_LIBS@ +KOKKOS_MPI_CPPFLAGS = @KOKKOS_MPI_CPPFLAGS@ LASPACK_INCLUDE = @LASPACK_INCLUDE@ LASPACK_LIB = @LASPACK_LIB@ LD = @LD@ diff --git a/examples/miscellaneous/miscellaneous_ex3/Makefile.in b/examples/miscellaneous/miscellaneous_ex3/Makefile.in index d58bfb75a85..5146d27ca1f 100644 --- a/examples/miscellaneous/miscellaneous_ex3/Makefile.in +++ b/examples/miscellaneous/miscellaneous_ex3/Makefile.in @@ -482,6 +482,7 @@ KOKKOS_CXX = @KOKKOS_CXX@ KOKKOS_CXXFLAGS = @KOKKOS_CXXFLAGS@ KOKKOS_LDFLAGS = @KOKKOS_LDFLAGS@ KOKKOS_LIBS = @KOKKOS_LIBS@ +KOKKOS_MPI_CPPFLAGS = @KOKKOS_MPI_CPPFLAGS@ LASPACK_INCLUDE = @LASPACK_INCLUDE@ LASPACK_LIB = @LASPACK_LIB@ LD = @LD@ diff --git a/examples/miscellaneous/miscellaneous_ex4/Makefile.in b/examples/miscellaneous/miscellaneous_ex4/Makefile.in index f35a439ba5f..2b48571cd36 100644 --- a/examples/miscellaneous/miscellaneous_ex4/Makefile.in +++ b/examples/miscellaneous/miscellaneous_ex4/Makefile.in @@ -477,6 +477,7 @@ KOKKOS_CXX = @KOKKOS_CXX@ KOKKOS_CXXFLAGS = @KOKKOS_CXXFLAGS@ KOKKOS_LDFLAGS = @KOKKOS_LDFLAGS@ KOKKOS_LIBS = @KOKKOS_LIBS@ +KOKKOS_MPI_CPPFLAGS = @KOKKOS_MPI_CPPFLAGS@ LASPACK_INCLUDE = @LASPACK_INCLUDE@ LASPACK_LIB = @LASPACK_LIB@ LD = @LD@ diff --git a/examples/miscellaneous/miscellaneous_ex5/Makefile.in b/examples/miscellaneous/miscellaneous_ex5/Makefile.in index dc7dbeeef7b..707ea4dc6e1 100644 --- a/examples/miscellaneous/miscellaneous_ex5/Makefile.in +++ b/examples/miscellaneous/miscellaneous_ex5/Makefile.in @@ -491,6 +491,7 @@ KOKKOS_CXX = @KOKKOS_CXX@ KOKKOS_CXXFLAGS = @KOKKOS_CXXFLAGS@ KOKKOS_LDFLAGS = @KOKKOS_LDFLAGS@ KOKKOS_LIBS = @KOKKOS_LIBS@ +KOKKOS_MPI_CPPFLAGS = @KOKKOS_MPI_CPPFLAGS@ LASPACK_INCLUDE = @LASPACK_INCLUDE@ LASPACK_LIB = @LASPACK_LIB@ LD = @LD@ diff --git a/examples/miscellaneous/miscellaneous_ex6/Makefile.in b/examples/miscellaneous/miscellaneous_ex6/Makefile.in index a985950b56d..aa8bc685743 100644 --- a/examples/miscellaneous/miscellaneous_ex6/Makefile.in +++ b/examples/miscellaneous/miscellaneous_ex6/Makefile.in @@ -477,6 +477,7 @@ KOKKOS_CXX = @KOKKOS_CXX@ KOKKOS_CXXFLAGS = @KOKKOS_CXXFLAGS@ KOKKOS_LDFLAGS = @KOKKOS_LDFLAGS@ KOKKOS_LIBS = @KOKKOS_LIBS@ +KOKKOS_MPI_CPPFLAGS = @KOKKOS_MPI_CPPFLAGS@ LASPACK_INCLUDE = @LASPACK_INCLUDE@ LASPACK_LIB = @LASPACK_LIB@ LD = @LD@ diff --git a/examples/miscellaneous/miscellaneous_ex7/Makefile.in b/examples/miscellaneous/miscellaneous_ex7/Makefile.in index e3515b9f785..9ac39bc4084 100644 --- a/examples/miscellaneous/miscellaneous_ex7/Makefile.in +++ b/examples/miscellaneous/miscellaneous_ex7/Makefile.in @@ -520,6 +520,7 @@ KOKKOS_CXX = @KOKKOS_CXX@ KOKKOS_CXXFLAGS = @KOKKOS_CXXFLAGS@ KOKKOS_LDFLAGS = @KOKKOS_LDFLAGS@ KOKKOS_LIBS = @KOKKOS_LIBS@ +KOKKOS_MPI_CPPFLAGS = @KOKKOS_MPI_CPPFLAGS@ LASPACK_INCLUDE = @LASPACK_INCLUDE@ LASPACK_LIB = @LASPACK_LIB@ LD = @LD@ diff --git a/examples/miscellaneous/miscellaneous_ex8/Makefile.in b/examples/miscellaneous/miscellaneous_ex8/Makefile.in index d990641f148..939249e5570 100644 --- a/examples/miscellaneous/miscellaneous_ex8/Makefile.in +++ b/examples/miscellaneous/miscellaneous_ex8/Makefile.in @@ -483,6 +483,7 @@ KOKKOS_CXX = @KOKKOS_CXX@ KOKKOS_CXXFLAGS = @KOKKOS_CXXFLAGS@ KOKKOS_LDFLAGS = @KOKKOS_LDFLAGS@ KOKKOS_LIBS = @KOKKOS_LIBS@ +KOKKOS_MPI_CPPFLAGS = @KOKKOS_MPI_CPPFLAGS@ LASPACK_INCLUDE = @LASPACK_INCLUDE@ LASPACK_LIB = @LASPACK_LIB@ LD = @LD@ diff --git a/examples/miscellaneous/miscellaneous_ex9/Makefile.in b/examples/miscellaneous/miscellaneous_ex9/Makefile.in index 3860b7d8388..66bcac9673a 100644 --- a/examples/miscellaneous/miscellaneous_ex9/Makefile.in +++ b/examples/miscellaneous/miscellaneous_ex9/Makefile.in @@ -517,6 +517,7 @@ KOKKOS_CXX = @KOKKOS_CXX@ KOKKOS_CXXFLAGS = @KOKKOS_CXXFLAGS@ KOKKOS_LDFLAGS = @KOKKOS_LDFLAGS@ KOKKOS_LIBS = @KOKKOS_LIBS@ +KOKKOS_MPI_CPPFLAGS = @KOKKOS_MPI_CPPFLAGS@ LASPACK_INCLUDE = @LASPACK_INCLUDE@ LASPACK_LIB = @LASPACK_LIB@ LD = @LD@ diff --git a/examples/optimization/optimization_ex1/Makefile.in b/examples/optimization/optimization_ex1/Makefile.in index fb3baf00e2d..50737c7c35f 100644 --- a/examples/optimization/optimization_ex1/Makefile.in +++ b/examples/optimization/optimization_ex1/Makefile.in @@ -483,6 +483,7 @@ KOKKOS_CXX = @KOKKOS_CXX@ KOKKOS_CXXFLAGS = @KOKKOS_CXXFLAGS@ KOKKOS_LDFLAGS = @KOKKOS_LDFLAGS@ KOKKOS_LIBS = @KOKKOS_LIBS@ +KOKKOS_MPI_CPPFLAGS = @KOKKOS_MPI_CPPFLAGS@ LASPACK_INCLUDE = @LASPACK_INCLUDE@ LASPACK_LIB = @LASPACK_LIB@ LD = @LD@ diff --git a/examples/optimization/optimization_ex2/Makefile.in b/examples/optimization/optimization_ex2/Makefile.in index c7816e72654..16f38051df1 100644 --- a/examples/optimization/optimization_ex2/Makefile.in +++ b/examples/optimization/optimization_ex2/Makefile.in @@ -483,6 +483,7 @@ KOKKOS_CXX = @KOKKOS_CXX@ KOKKOS_CXXFLAGS = @KOKKOS_CXXFLAGS@ KOKKOS_LDFLAGS = @KOKKOS_LDFLAGS@ KOKKOS_LIBS = @KOKKOS_LIBS@ +KOKKOS_MPI_CPPFLAGS = @KOKKOS_MPI_CPPFLAGS@ LASPACK_INCLUDE = @LASPACK_INCLUDE@ LASPACK_LIB = @LASPACK_LIB@ LD = @LD@ diff --git a/examples/reduced_basis/reduced_basis_ex1/Makefile.in b/examples/reduced_basis/reduced_basis_ex1/Makefile.in index fa1d195a31a..b33bf22f98c 100644 --- a/examples/reduced_basis/reduced_basis_ex1/Makefile.in +++ b/examples/reduced_basis/reduced_basis_ex1/Makefile.in @@ -501,6 +501,7 @@ KOKKOS_CXX = @KOKKOS_CXX@ KOKKOS_CXXFLAGS = @KOKKOS_CXXFLAGS@ KOKKOS_LDFLAGS = @KOKKOS_LDFLAGS@ KOKKOS_LIBS = @KOKKOS_LIBS@ +KOKKOS_MPI_CPPFLAGS = @KOKKOS_MPI_CPPFLAGS@ LASPACK_INCLUDE = @LASPACK_INCLUDE@ LASPACK_LIB = @LASPACK_LIB@ LD = @LD@ diff --git a/examples/reduced_basis/reduced_basis_ex2/Makefile.in b/examples/reduced_basis/reduced_basis_ex2/Makefile.in index 2c34d349aeb..fb18b6c3a8b 100644 --- a/examples/reduced_basis/reduced_basis_ex2/Makefile.in +++ b/examples/reduced_basis/reduced_basis_ex2/Makefile.in @@ -501,6 +501,7 @@ KOKKOS_CXX = @KOKKOS_CXX@ KOKKOS_CXXFLAGS = @KOKKOS_CXXFLAGS@ KOKKOS_LDFLAGS = @KOKKOS_LDFLAGS@ KOKKOS_LIBS = @KOKKOS_LIBS@ +KOKKOS_MPI_CPPFLAGS = @KOKKOS_MPI_CPPFLAGS@ LASPACK_INCLUDE = @LASPACK_INCLUDE@ LASPACK_LIB = @LASPACK_LIB@ LD = @LD@ diff --git a/examples/reduced_basis/reduced_basis_ex3/Makefile.in b/examples/reduced_basis/reduced_basis_ex3/Makefile.in index 41d6871eef3..66e9889d4e6 100644 --- a/examples/reduced_basis/reduced_basis_ex3/Makefile.in +++ b/examples/reduced_basis/reduced_basis_ex3/Makefile.in @@ -501,6 +501,7 @@ KOKKOS_CXX = @KOKKOS_CXX@ KOKKOS_CXXFLAGS = @KOKKOS_CXXFLAGS@ KOKKOS_LDFLAGS = @KOKKOS_LDFLAGS@ KOKKOS_LIBS = @KOKKOS_LIBS@ +KOKKOS_MPI_CPPFLAGS = @KOKKOS_MPI_CPPFLAGS@ LASPACK_INCLUDE = @LASPACK_INCLUDE@ LASPACK_LIB = @LASPACK_LIB@ LD = @LD@ diff --git a/examples/reduced_basis/reduced_basis_ex4/Makefile.in b/examples/reduced_basis/reduced_basis_ex4/Makefile.in index a7bd31cb843..4018e00c9b7 100644 --- a/examples/reduced_basis/reduced_basis_ex4/Makefile.in +++ b/examples/reduced_basis/reduced_basis_ex4/Makefile.in @@ -506,6 +506,7 @@ KOKKOS_CXX = @KOKKOS_CXX@ KOKKOS_CXXFLAGS = @KOKKOS_CXXFLAGS@ KOKKOS_LDFLAGS = @KOKKOS_LDFLAGS@ KOKKOS_LIBS = @KOKKOS_LIBS@ +KOKKOS_MPI_CPPFLAGS = @KOKKOS_MPI_CPPFLAGS@ LASPACK_INCLUDE = @LASPACK_INCLUDE@ LASPACK_LIB = @LASPACK_LIB@ LD = @LD@ diff --git a/examples/reduced_basis/reduced_basis_ex5/Makefile.in b/examples/reduced_basis/reduced_basis_ex5/Makefile.in index 82b5b2fbc05..f5c5f996a49 100644 --- a/examples/reduced_basis/reduced_basis_ex5/Makefile.in +++ b/examples/reduced_basis/reduced_basis_ex5/Makefile.in @@ -516,6 +516,7 @@ KOKKOS_CXX = @KOKKOS_CXX@ KOKKOS_CXXFLAGS = @KOKKOS_CXXFLAGS@ KOKKOS_LDFLAGS = @KOKKOS_LDFLAGS@ KOKKOS_LIBS = @KOKKOS_LIBS@ +KOKKOS_MPI_CPPFLAGS = @KOKKOS_MPI_CPPFLAGS@ LASPACK_INCLUDE = @LASPACK_INCLUDE@ LASPACK_LIB = @LASPACK_LIB@ LD = @LD@ diff --git a/examples/reduced_basis/reduced_basis_ex6/Makefile.in b/examples/reduced_basis/reduced_basis_ex6/Makefile.in index dbc24072e30..704b9196cf4 100644 --- a/examples/reduced_basis/reduced_basis_ex6/Makefile.in +++ b/examples/reduced_basis/reduced_basis_ex6/Makefile.in @@ -506,6 +506,7 @@ KOKKOS_CXX = @KOKKOS_CXX@ KOKKOS_CXXFLAGS = @KOKKOS_CXXFLAGS@ KOKKOS_LDFLAGS = @KOKKOS_LDFLAGS@ KOKKOS_LIBS = @KOKKOS_LIBS@ +KOKKOS_MPI_CPPFLAGS = @KOKKOS_MPI_CPPFLAGS@ LASPACK_INCLUDE = @LASPACK_INCLUDE@ LASPACK_LIB = @LASPACK_LIB@ LD = @LD@ diff --git a/examples/reduced_basis/reduced_basis_ex7/Makefile.in b/examples/reduced_basis/reduced_basis_ex7/Makefile.in index a8446610838..88b4bb8693a 100644 --- a/examples/reduced_basis/reduced_basis_ex7/Makefile.in +++ b/examples/reduced_basis/reduced_basis_ex7/Makefile.in @@ -501,6 +501,7 @@ KOKKOS_CXX = @KOKKOS_CXX@ KOKKOS_CXXFLAGS = @KOKKOS_CXXFLAGS@ KOKKOS_LDFLAGS = @KOKKOS_LDFLAGS@ KOKKOS_LIBS = @KOKKOS_LIBS@ +KOKKOS_MPI_CPPFLAGS = @KOKKOS_MPI_CPPFLAGS@ LASPACK_INCLUDE = @LASPACK_INCLUDE@ LASPACK_LIB = @LASPACK_LIB@ LD = @LD@ diff --git a/examples/solution_transfer/solution_transfer_ex1/Makefile.in b/examples/solution_transfer/solution_transfer_ex1/Makefile.in index 5a0d14c6136..0cf9f53ad59 100644 --- a/examples/solution_transfer/solution_transfer_ex1/Makefile.in +++ b/examples/solution_transfer/solution_transfer_ex1/Makefile.in @@ -477,6 +477,7 @@ KOKKOS_CXX = @KOKKOS_CXX@ KOKKOS_CXXFLAGS = @KOKKOS_CXXFLAGS@ KOKKOS_LDFLAGS = @KOKKOS_LDFLAGS@ KOKKOS_LIBS = @KOKKOS_LIBS@ +KOKKOS_MPI_CPPFLAGS = @KOKKOS_MPI_CPPFLAGS@ LASPACK_INCLUDE = @LASPACK_INCLUDE@ LASPACK_LIB = @LASPACK_LIB@ LD = @LD@ diff --git a/examples/subdomains/subdomains_ex1/Makefile.in b/examples/subdomains/subdomains_ex1/Makefile.in index 52deb3d0ade..799e2edc23d 100644 --- a/examples/subdomains/subdomains_ex1/Makefile.in +++ b/examples/subdomains/subdomains_ex1/Makefile.in @@ -492,6 +492,7 @@ KOKKOS_CXX = @KOKKOS_CXX@ KOKKOS_CXXFLAGS = @KOKKOS_CXXFLAGS@ KOKKOS_LDFLAGS = @KOKKOS_LDFLAGS@ KOKKOS_LIBS = @KOKKOS_LIBS@ +KOKKOS_MPI_CPPFLAGS = @KOKKOS_MPI_CPPFLAGS@ LASPACK_INCLUDE = @LASPACK_INCLUDE@ LASPACK_LIB = @LASPACK_LIB@ LD = @LD@ diff --git a/examples/subdomains/subdomains_ex2/Makefile.in b/examples/subdomains/subdomains_ex2/Makefile.in index b32dcd0e3c9..e81cd89393f 100644 --- a/examples/subdomains/subdomains_ex2/Makefile.in +++ b/examples/subdomains/subdomains_ex2/Makefile.in @@ -492,6 +492,7 @@ KOKKOS_CXX = @KOKKOS_CXX@ KOKKOS_CXXFLAGS = @KOKKOS_CXXFLAGS@ KOKKOS_LDFLAGS = @KOKKOS_LDFLAGS@ KOKKOS_LIBS = @KOKKOS_LIBS@ +KOKKOS_MPI_CPPFLAGS = @KOKKOS_MPI_CPPFLAGS@ LASPACK_INCLUDE = @LASPACK_INCLUDE@ LASPACK_LIB = @LASPACK_LIB@ LD = @LD@ diff --git a/examples/subdomains/subdomains_ex3/Makefile.in b/examples/subdomains/subdomains_ex3/Makefile.in index a3d5c4a101d..303ef37b9d2 100644 --- a/examples/subdomains/subdomains_ex3/Makefile.in +++ b/examples/subdomains/subdomains_ex3/Makefile.in @@ -486,6 +486,7 @@ KOKKOS_CXX = @KOKKOS_CXX@ KOKKOS_CXXFLAGS = @KOKKOS_CXXFLAGS@ KOKKOS_LDFLAGS = @KOKKOS_LDFLAGS@ KOKKOS_LIBS = @KOKKOS_LIBS@ +KOKKOS_MPI_CPPFLAGS = @KOKKOS_MPI_CPPFLAGS@ LASPACK_INCLUDE = @LASPACK_INCLUDE@ LASPACK_LIB = @LASPACK_LIB@ LD = @LD@ diff --git a/examples/systems_of_equations/systems_of_equations_ex1/Makefile.in b/examples/systems_of_equations/systems_of_equations_ex1/Makefile.in index c0fc74e97bf..bff0732e60d 100644 --- a/examples/systems_of_equations/systems_of_equations_ex1/Makefile.in +++ b/examples/systems_of_equations/systems_of_equations_ex1/Makefile.in @@ -478,6 +478,7 @@ KOKKOS_CXX = @KOKKOS_CXX@ KOKKOS_CXXFLAGS = @KOKKOS_CXXFLAGS@ KOKKOS_LDFLAGS = @KOKKOS_LDFLAGS@ KOKKOS_LIBS = @KOKKOS_LIBS@ +KOKKOS_MPI_CPPFLAGS = @KOKKOS_MPI_CPPFLAGS@ LASPACK_INCLUDE = @LASPACK_INCLUDE@ LASPACK_LIB = @LASPACK_LIB@ LD = @LD@ diff --git a/examples/systems_of_equations/systems_of_equations_ex2/Makefile.in b/examples/systems_of_equations/systems_of_equations_ex2/Makefile.in index a89c3ec3026..5e5a2e62e27 100644 --- a/examples/systems_of_equations/systems_of_equations_ex2/Makefile.in +++ b/examples/systems_of_equations/systems_of_equations_ex2/Makefile.in @@ -483,6 +483,7 @@ KOKKOS_CXX = @KOKKOS_CXX@ KOKKOS_CXXFLAGS = @KOKKOS_CXXFLAGS@ KOKKOS_LDFLAGS = @KOKKOS_LDFLAGS@ KOKKOS_LIBS = @KOKKOS_LIBS@ +KOKKOS_MPI_CPPFLAGS = @KOKKOS_MPI_CPPFLAGS@ LASPACK_INCLUDE = @LASPACK_INCLUDE@ LASPACK_LIB = @LASPACK_LIB@ LD = @LD@ diff --git a/examples/systems_of_equations/systems_of_equations_ex3/Makefile.in b/examples/systems_of_equations/systems_of_equations_ex3/Makefile.in index f0afcad3be3..776822ee34e 100644 --- a/examples/systems_of_equations/systems_of_equations_ex3/Makefile.in +++ b/examples/systems_of_equations/systems_of_equations_ex3/Makefile.in @@ -478,6 +478,7 @@ KOKKOS_CXX = @KOKKOS_CXX@ KOKKOS_CXXFLAGS = @KOKKOS_CXXFLAGS@ KOKKOS_LDFLAGS = @KOKKOS_LDFLAGS@ KOKKOS_LIBS = @KOKKOS_LIBS@ +KOKKOS_MPI_CPPFLAGS = @KOKKOS_MPI_CPPFLAGS@ LASPACK_INCLUDE = @LASPACK_INCLUDE@ LASPACK_LIB = @LASPACK_LIB@ LD = @LD@ diff --git a/examples/systems_of_equations/systems_of_equations_ex4/Makefile.in b/examples/systems_of_equations/systems_of_equations_ex4/Makefile.in index dcdbbe495d2..4626e3bedea 100644 --- a/examples/systems_of_equations/systems_of_equations_ex4/Makefile.in +++ b/examples/systems_of_equations/systems_of_equations_ex4/Makefile.in @@ -478,6 +478,7 @@ KOKKOS_CXX = @KOKKOS_CXX@ KOKKOS_CXXFLAGS = @KOKKOS_CXXFLAGS@ KOKKOS_LDFLAGS = @KOKKOS_LDFLAGS@ KOKKOS_LIBS = @KOKKOS_LIBS@ +KOKKOS_MPI_CPPFLAGS = @KOKKOS_MPI_CPPFLAGS@ LASPACK_INCLUDE = @LASPACK_INCLUDE@ LASPACK_LIB = @LASPACK_LIB@ LD = @LD@ diff --git a/examples/systems_of_equations/systems_of_equations_ex5/Makefile.in b/examples/systems_of_equations/systems_of_equations_ex5/Makefile.in index ff6e7676c11..22fe2d48bf0 100644 --- a/examples/systems_of_equations/systems_of_equations_ex5/Makefile.in +++ b/examples/systems_of_equations/systems_of_equations_ex5/Makefile.in @@ -478,6 +478,7 @@ KOKKOS_CXX = @KOKKOS_CXX@ KOKKOS_CXXFLAGS = @KOKKOS_CXXFLAGS@ KOKKOS_LDFLAGS = @KOKKOS_LDFLAGS@ KOKKOS_LIBS = @KOKKOS_LIBS@ +KOKKOS_MPI_CPPFLAGS = @KOKKOS_MPI_CPPFLAGS@ LASPACK_INCLUDE = @LASPACK_INCLUDE@ LASPACK_LIB = @LASPACK_LIB@ LD = @LD@ diff --git a/examples/systems_of_equations/systems_of_equations_ex6/Makefile.in b/examples/systems_of_equations/systems_of_equations_ex6/Makefile.in index da837f22e98..b6b15092aba 100644 --- a/examples/systems_of_equations/systems_of_equations_ex6/Makefile.in +++ b/examples/systems_of_equations/systems_of_equations_ex6/Makefile.in @@ -478,6 +478,7 @@ KOKKOS_CXX = @KOKKOS_CXX@ KOKKOS_CXXFLAGS = @KOKKOS_CXXFLAGS@ KOKKOS_LDFLAGS = @KOKKOS_LDFLAGS@ KOKKOS_LIBS = @KOKKOS_LIBS@ +KOKKOS_MPI_CPPFLAGS = @KOKKOS_MPI_CPPFLAGS@ LASPACK_INCLUDE = @LASPACK_INCLUDE@ LASPACK_LIB = @LASPACK_LIB@ LD = @LD@ diff --git a/examples/systems_of_equations/systems_of_equations_ex7/Makefile.in b/examples/systems_of_equations/systems_of_equations_ex7/Makefile.in index 4ef11376ea4..9c036b14331 100644 --- a/examples/systems_of_equations/systems_of_equations_ex7/Makefile.in +++ b/examples/systems_of_equations/systems_of_equations_ex7/Makefile.in @@ -484,6 +484,7 @@ KOKKOS_CXX = @KOKKOS_CXX@ KOKKOS_CXXFLAGS = @KOKKOS_CXXFLAGS@ KOKKOS_LDFLAGS = @KOKKOS_LDFLAGS@ KOKKOS_LIBS = @KOKKOS_LIBS@ +KOKKOS_MPI_CPPFLAGS = @KOKKOS_MPI_CPPFLAGS@ LASPACK_INCLUDE = @LASPACK_INCLUDE@ LASPACK_LIB = @LASPACK_LIB@ LD = @LD@ diff --git a/examples/systems_of_equations/systems_of_equations_ex8/Makefile.in b/examples/systems_of_equations/systems_of_equations_ex8/Makefile.in index e5c7279beb3..50acb9ef0a2 100644 --- a/examples/systems_of_equations/systems_of_equations_ex8/Makefile.in +++ b/examples/systems_of_equations/systems_of_equations_ex8/Makefile.in @@ -522,6 +522,7 @@ KOKKOS_CXX = @KOKKOS_CXX@ KOKKOS_CXXFLAGS = @KOKKOS_CXXFLAGS@ KOKKOS_LDFLAGS = @KOKKOS_LDFLAGS@ KOKKOS_LIBS = @KOKKOS_LIBS@ +KOKKOS_MPI_CPPFLAGS = @KOKKOS_MPI_CPPFLAGS@ LASPACK_INCLUDE = @LASPACK_INCLUDE@ LASPACK_LIB = @LASPACK_LIB@ LD = @LD@ diff --git a/examples/systems_of_equations/systems_of_equations_ex9/Makefile.in b/examples/systems_of_equations/systems_of_equations_ex9/Makefile.in index 495f1b401f7..b6f6ee6544e 100644 --- a/examples/systems_of_equations/systems_of_equations_ex9/Makefile.in +++ b/examples/systems_of_equations/systems_of_equations_ex9/Makefile.in @@ -484,6 +484,7 @@ KOKKOS_CXX = @KOKKOS_CXX@ KOKKOS_CXXFLAGS = @KOKKOS_CXXFLAGS@ KOKKOS_LDFLAGS = @KOKKOS_LDFLAGS@ KOKKOS_LIBS = @KOKKOS_LIBS@ +KOKKOS_MPI_CPPFLAGS = @KOKKOS_MPI_CPPFLAGS@ LASPACK_INCLUDE = @LASPACK_INCLUDE@ LASPACK_LIB = @LASPACK_LIB@ LD = @LD@ diff --git a/examples/transient/transient_ex1/Makefile.in b/examples/transient/transient_ex1/Makefile.in index cb1f7123cd7..0e39e5979cf 100644 --- a/examples/transient/transient_ex1/Makefile.in +++ b/examples/transient/transient_ex1/Makefile.in @@ -492,6 +492,7 @@ KOKKOS_CXX = @KOKKOS_CXX@ KOKKOS_CXXFLAGS = @KOKKOS_CXXFLAGS@ KOKKOS_LDFLAGS = @KOKKOS_LDFLAGS@ KOKKOS_LIBS = @KOKKOS_LIBS@ +KOKKOS_MPI_CPPFLAGS = @KOKKOS_MPI_CPPFLAGS@ LASPACK_INCLUDE = @LASPACK_INCLUDE@ LASPACK_LIB = @LASPACK_LIB@ LD = @LD@ diff --git a/examples/transient/transient_ex2/Makefile.in b/examples/transient/transient_ex2/Makefile.in index 3a5648a9715..19c83b89de5 100644 --- a/examples/transient/transient_ex2/Makefile.in +++ b/examples/transient/transient_ex2/Makefile.in @@ -478,6 +478,7 @@ KOKKOS_CXX = @KOKKOS_CXX@ KOKKOS_CXXFLAGS = @KOKKOS_CXXFLAGS@ KOKKOS_LDFLAGS = @KOKKOS_LDFLAGS@ KOKKOS_LIBS = @KOKKOS_LIBS@ +KOKKOS_MPI_CPPFLAGS = @KOKKOS_MPI_CPPFLAGS@ LASPACK_INCLUDE = @LASPACK_INCLUDE@ LASPACK_LIB = @LASPACK_LIB@ LD = @LD@ diff --git a/examples/transient/transient_ex3/Makefile.in b/examples/transient/transient_ex3/Makefile.in index 418ce7dfed8..f79116ac7dc 100644 --- a/examples/transient/transient_ex3/Makefile.in +++ b/examples/transient/transient_ex3/Makefile.in @@ -526,6 +526,7 @@ KOKKOS_CXX = @KOKKOS_CXX@ KOKKOS_CXXFLAGS = @KOKKOS_CXXFLAGS@ KOKKOS_LDFLAGS = @KOKKOS_LDFLAGS@ KOKKOS_LIBS = @KOKKOS_LIBS@ +KOKKOS_MPI_CPPFLAGS = @KOKKOS_MPI_CPPFLAGS@ LASPACK_INCLUDE = @LASPACK_INCLUDE@ LASPACK_LIB = @LASPACK_LIB@ LD = @LD@ diff --git a/examples/vector_fe/vector_fe_ex1/Makefile.in b/examples/vector_fe/vector_fe_ex1/Makefile.in index 66462dd6f04..25a34ed4414 100644 --- a/examples/vector_fe/vector_fe_ex1/Makefile.in +++ b/examples/vector_fe/vector_fe_ex1/Makefile.in @@ -490,6 +490,7 @@ KOKKOS_CXX = @KOKKOS_CXX@ KOKKOS_CXXFLAGS = @KOKKOS_CXXFLAGS@ KOKKOS_LDFLAGS = @KOKKOS_LDFLAGS@ KOKKOS_LIBS = @KOKKOS_LIBS@ +KOKKOS_MPI_CPPFLAGS = @KOKKOS_MPI_CPPFLAGS@ LASPACK_INCLUDE = @LASPACK_INCLUDE@ LASPACK_LIB = @LASPACK_LIB@ LD = @LD@ diff --git a/examples/vector_fe/vector_fe_ex10/Makefile.in b/examples/vector_fe/vector_fe_ex10/Makefile.in index 97e297f7568..6242a9689e2 100644 --- a/examples/vector_fe/vector_fe_ex10/Makefile.in +++ b/examples/vector_fe/vector_fe_ex10/Makefile.in @@ -501,6 +501,7 @@ KOKKOS_CXX = @KOKKOS_CXX@ KOKKOS_CXXFLAGS = @KOKKOS_CXXFLAGS@ KOKKOS_LDFLAGS = @KOKKOS_LDFLAGS@ KOKKOS_LIBS = @KOKKOS_LIBS@ +KOKKOS_MPI_CPPFLAGS = @KOKKOS_MPI_CPPFLAGS@ LASPACK_INCLUDE = @LASPACK_INCLUDE@ LASPACK_LIB = @LASPACK_LIB@ LD = @LD@ diff --git a/examples/vector_fe/vector_fe_ex2/Makefile.in b/examples/vector_fe/vector_fe_ex2/Makefile.in index ad09c3743fa..bcc7bda8e92 100644 --- a/examples/vector_fe/vector_fe_ex2/Makefile.in +++ b/examples/vector_fe/vector_fe_ex2/Makefile.in @@ -516,6 +516,7 @@ KOKKOS_CXX = @KOKKOS_CXX@ KOKKOS_CXXFLAGS = @KOKKOS_CXXFLAGS@ KOKKOS_LDFLAGS = @KOKKOS_LDFLAGS@ KOKKOS_LIBS = @KOKKOS_LIBS@ +KOKKOS_MPI_CPPFLAGS = @KOKKOS_MPI_CPPFLAGS@ LASPACK_INCLUDE = @LASPACK_INCLUDE@ LASPACK_LIB = @LASPACK_LIB@ LD = @LD@ diff --git a/examples/vector_fe/vector_fe_ex3/Makefile.in b/examples/vector_fe/vector_fe_ex3/Makefile.in index 5994d90a2bf..76252e51ad4 100644 --- a/examples/vector_fe/vector_fe_ex3/Makefile.in +++ b/examples/vector_fe/vector_fe_ex3/Makefile.in @@ -516,6 +516,7 @@ KOKKOS_CXX = @KOKKOS_CXX@ KOKKOS_CXXFLAGS = @KOKKOS_CXXFLAGS@ KOKKOS_LDFLAGS = @KOKKOS_LDFLAGS@ KOKKOS_LIBS = @KOKKOS_LIBS@ +KOKKOS_MPI_CPPFLAGS = @KOKKOS_MPI_CPPFLAGS@ LASPACK_INCLUDE = @LASPACK_INCLUDE@ LASPACK_LIB = @LASPACK_LIB@ LD = @LD@ diff --git a/examples/vector_fe/vector_fe_ex4/Makefile.in b/examples/vector_fe/vector_fe_ex4/Makefile.in index 91be49794d4..c88ea1a27c9 100644 --- a/examples/vector_fe/vector_fe_ex4/Makefile.in +++ b/examples/vector_fe/vector_fe_ex4/Makefile.in @@ -516,6 +516,7 @@ KOKKOS_CXX = @KOKKOS_CXX@ KOKKOS_CXXFLAGS = @KOKKOS_CXXFLAGS@ KOKKOS_LDFLAGS = @KOKKOS_LDFLAGS@ KOKKOS_LIBS = @KOKKOS_LIBS@ +KOKKOS_MPI_CPPFLAGS = @KOKKOS_MPI_CPPFLAGS@ LASPACK_INCLUDE = @LASPACK_INCLUDE@ LASPACK_LIB = @LASPACK_LIB@ LD = @LD@ diff --git a/examples/vector_fe/vector_fe_ex5/Makefile.in b/examples/vector_fe/vector_fe_ex5/Makefile.in index 62b45033645..4464f32ec13 100644 --- a/examples/vector_fe/vector_fe_ex5/Makefile.in +++ b/examples/vector_fe/vector_fe_ex5/Makefile.in @@ -503,6 +503,7 @@ KOKKOS_CXX = @KOKKOS_CXX@ KOKKOS_CXXFLAGS = @KOKKOS_CXXFLAGS@ KOKKOS_LDFLAGS = @KOKKOS_LDFLAGS@ KOKKOS_LIBS = @KOKKOS_LIBS@ +KOKKOS_MPI_CPPFLAGS = @KOKKOS_MPI_CPPFLAGS@ LASPACK_INCLUDE = @LASPACK_INCLUDE@ LASPACK_LIB = @LASPACK_LIB@ LD = @LD@ diff --git a/examples/vector_fe/vector_fe_ex6/Makefile.in b/examples/vector_fe/vector_fe_ex6/Makefile.in index d092712abe2..89576c57f18 100644 --- a/examples/vector_fe/vector_fe_ex6/Makefile.in +++ b/examples/vector_fe/vector_fe_ex6/Makefile.in @@ -501,6 +501,7 @@ KOKKOS_CXX = @KOKKOS_CXX@ KOKKOS_CXXFLAGS = @KOKKOS_CXXFLAGS@ KOKKOS_LDFLAGS = @KOKKOS_LDFLAGS@ KOKKOS_LIBS = @KOKKOS_LIBS@ +KOKKOS_MPI_CPPFLAGS = @KOKKOS_MPI_CPPFLAGS@ LASPACK_INCLUDE = @LASPACK_INCLUDE@ LASPACK_LIB = @LASPACK_LIB@ LD = @LD@ diff --git a/examples/vector_fe/vector_fe_ex7/Makefile.in b/examples/vector_fe/vector_fe_ex7/Makefile.in index 65dce847a17..d45faaa9f85 100644 --- a/examples/vector_fe/vector_fe_ex7/Makefile.in +++ b/examples/vector_fe/vector_fe_ex7/Makefile.in @@ -501,6 +501,7 @@ KOKKOS_CXX = @KOKKOS_CXX@ KOKKOS_CXXFLAGS = @KOKKOS_CXXFLAGS@ KOKKOS_LDFLAGS = @KOKKOS_LDFLAGS@ KOKKOS_LIBS = @KOKKOS_LIBS@ +KOKKOS_MPI_CPPFLAGS = @KOKKOS_MPI_CPPFLAGS@ LASPACK_INCLUDE = @LASPACK_INCLUDE@ LASPACK_LIB = @LASPACK_LIB@ LD = @LD@ diff --git a/examples/vector_fe/vector_fe_ex8/Makefile.in b/examples/vector_fe/vector_fe_ex8/Makefile.in index d5c542a648e..2ea4632110f 100644 --- a/examples/vector_fe/vector_fe_ex8/Makefile.in +++ b/examples/vector_fe/vector_fe_ex8/Makefile.in @@ -501,6 +501,7 @@ KOKKOS_CXX = @KOKKOS_CXX@ KOKKOS_CXXFLAGS = @KOKKOS_CXXFLAGS@ KOKKOS_LDFLAGS = @KOKKOS_LDFLAGS@ KOKKOS_LIBS = @KOKKOS_LIBS@ +KOKKOS_MPI_CPPFLAGS = @KOKKOS_MPI_CPPFLAGS@ LASPACK_INCLUDE = @LASPACK_INCLUDE@ LASPACK_LIB = @LASPACK_LIB@ LD = @LD@ diff --git a/examples/vector_fe/vector_fe_ex9/Makefile.in b/examples/vector_fe/vector_fe_ex9/Makefile.in index 0e362c7a3f8..3f031e8bf29 100644 --- a/examples/vector_fe/vector_fe_ex9/Makefile.in +++ b/examples/vector_fe/vector_fe_ex9/Makefile.in @@ -511,6 +511,7 @@ KOKKOS_CXX = @KOKKOS_CXX@ KOKKOS_CXXFLAGS = @KOKKOS_CXXFLAGS@ KOKKOS_LDFLAGS = @KOKKOS_LDFLAGS@ KOKKOS_LIBS = @KOKKOS_LIBS@ +KOKKOS_MPI_CPPFLAGS = @KOKKOS_MPI_CPPFLAGS@ LASPACK_INCLUDE = @LASPACK_INCLUDE@ LASPACK_LIB = @LASPACK_LIB@ LD = @LD@ diff --git a/include/Makefile.in b/include/Makefile.in index a68272a0d25..9f3532120fd 100644 --- a/include/Makefile.in +++ b/include/Makefile.in @@ -392,6 +392,7 @@ KOKKOS_CXX = @KOKKOS_CXX@ KOKKOS_CXXFLAGS = @KOKKOS_CXXFLAGS@ KOKKOS_LDFLAGS = @KOKKOS_LDFLAGS@ KOKKOS_LIBS = @KOKKOS_LIBS@ +KOKKOS_MPI_CPPFLAGS = @KOKKOS_MPI_CPPFLAGS@ LASPACK_INCLUDE = @LASPACK_INCLUDE@ LASPACK_LIB = @LASPACK_LIB@ LD = @LD@ diff --git a/include/libmesh/Makefile.in b/include/libmesh/Makefile.in index c2ff4cf1b7c..20ffe3646e2 100644 --- a/include/libmesh/Makefile.in +++ b/include/libmesh/Makefile.in @@ -321,6 +321,7 @@ KOKKOS_CXX = @KOKKOS_CXX@ KOKKOS_CXXFLAGS = @KOKKOS_CXXFLAGS@ KOKKOS_LDFLAGS = @KOKKOS_LDFLAGS@ KOKKOS_LIBS = @KOKKOS_LIBS@ +KOKKOS_MPI_CPPFLAGS = @KOKKOS_MPI_CPPFLAGS@ LASPACK_INCLUDE = @LASPACK_INCLUDE@ LASPACK_LIB = @LASPACK_LIB@ LD = @LD@ diff --git a/tests/Makefile.in b/tests/Makefile.in index 96c87de5252..e4613fe6858 100644 --- a/tests/Makefile.in +++ b/tests/Makefile.in @@ -2103,11 +2103,11 @@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ KOKKOS_CPPFLAGS = @KOKKOS_CPPFLAGS@ -KOKKOS_MPI_CPPFLAGS = @KOKKOS_MPI_CPPFLAGS@ KOKKOS_CXX = @KOKKOS_CXX@ KOKKOS_CXXFLAGS = @KOKKOS_CXXFLAGS@ KOKKOS_LDFLAGS = @KOKKOS_LDFLAGS@ KOKKOS_LIBS = @KOKKOS_LIBS@ +KOKKOS_MPI_CPPFLAGS = @KOKKOS_MPI_CPPFLAGS@ LASPACK_INCLUDE = @LASPACK_INCLUDE@ LASPACK_LIB = @LASPACK_LIB@ LD = @LD@ From 11aaaf0e069f645f9cebcfca4319405c3d65c9dc Mon Sep 17 00:00:00 2001 From: Roy Stogner Date: Wed, 20 May 2026 10:59:18 -0500 Subject: [PATCH 24/46] Move Kokkos configuration to its own m4 --- m4/kokkos.m4 | 211 ++++++++++++++++++++++++++++++++ m4/libmesh_optional_packages.m4 | 208 +------------------------------ 2 files changed, 213 insertions(+), 206 deletions(-) create mode 100644 m4/kokkos.m4 diff --git a/m4/kokkos.m4 b/m4/kokkos.m4 new file mode 100644 index 00000000000..e9b53c71571 --- /dev/null +++ b/m4/kokkos.m4 @@ -0,0 +1,211 @@ +dnl ------------------------------------------------------------- +dnl Kokkos -- optional, enables the native Kokkos FE math path +dnl ------------------------------------------------------------- +AC_DEFUN([CONFIGURE_KOKKOS], +[ + AC_ARG_WITH([kokkos], + AS_HELP_STRING([--with-kokkos=DIR], + [Enable Kokkos support using the installation at DIR]), + [KOKKOS_DIR="$withval"], + [KOKKOS_DIR="no"]) + + AC_ARG_WITH([kokkos-backend], + AS_HELP_STRING([--with-kokkos-backend=BACKEND], + [cuda|hip|sycl|openmp|serial (default: auto-detect from KokkosCore_config.h)]), + [KOKKOS_BACKEND="$withval"], [KOKKOS_BACKEND="auto"]) + + dnl Allow the caller (e.g. MOOSE's configure_libmesh.sh) to pre-set the + dnl Kokkos compiler and flags via environment variables. If KOKKOS_CXX is + dnl already set, we skip auto-detection entirely — the caller knows best. + dnl We use AC_SUBST (not AC_ARG_VAR) so these flags stay scoped to .K + dnl compilation rules and don't leak into the main CPPFLAGS/CXXFLAGS. + + AS_IF([test "x$KOKKOS_DIR" != "xno"], + [ + AC_CHECK_FILE([$KOKKOS_DIR/include/Kokkos_Core.hpp], + [ + enablekokkos=yes + libmesh_optional_INCLUDES="$libmesh_optional_INCLUDES -I$KOKKOS_DIR/include" + libmesh_optional_LIBS="$libmesh_optional_LIBS -L$KOKKOS_DIR/lib -lkokkoscore" + + dnl Only auto-detect if KOKKOS_CXX was not pre-set by the caller + AS_IF([test "x$KOKKOS_CXX" = "x"], + [ + KOKKOS_CFG="$KOKKOS_DIR/include/KokkosCore_config.h" + + dnl Auto-detect backend + AS_IF([test "x$KOKKOS_BACKEND" = "xauto"], + [ + AS_IF([test -r "$KOKKOS_CFG"], + [ + AS_IF([grep -q 'KOKKOS_ENABLE_CUDA' "$KOKKOS_CFG"], + [KOKKOS_BACKEND=cuda], + [AS_IF([grep -q 'KOKKOS_ENABLE_HIP' "$KOKKOS_CFG"], + [KOKKOS_BACKEND=hip], + [AS_IF([grep -q 'KOKKOS_ENABLE_SYCL' "$KOKKOS_CFG"], + [KOKKOS_BACKEND=sycl], + [AS_IF([grep -q 'KOKKOS_ENABLE_OPENMP' "$KOKKOS_CFG"], + [KOKKOS_BACKEND=openmp], + [KOKKOS_BACKEND=serial])])])]) + ], + [KOKKOS_BACKEND=serial]) + ]) + + AC_MSG_RESULT([Kokkos backend: $KOKKOS_BACKEND]) + + dnl Check if Kokkos was built with OpenMP + have_kokkos_openmp=no + AS_IF([test -r "$KOKKOS_CFG"], + [AS_IF([grep -q 'KOKKOS_ENABLE_OPENMP' "$KOKKOS_CFG"], + [have_kokkos_openmp=yes])]) + + case "$KOKKOS_BACKEND" in + cuda) + AC_PATH_PROG([NVCC],[nvcc],[no],[$PATH]) + AS_IF([test "x$NVCC" = "xno"], + [AC_MSG_ERROR([nvcc not found but Kokkos CUDA backend requested])]) + KOKKOS_CXX="$NVCC" + KOKKOS_CXXFLAGS="--forward-unknown-to-host-compiler --extended-lambda --disable-warnings -x cu -ccbin $CXX" + KOKKOS_LDFLAGS="--forward-unknown-to-host-compiler -L$KOKKOS_DIR/lib" + AS_IF([test "x$have_kokkos_openmp" = "xyes"], + [ + KOKKOS_CXXFLAGS="$KOKKOS_CXXFLAGS -fopenmp" + KOKKOS_LDFLAGS="$KOKKOS_LDFLAGS -fopenmp" + ]) + ;; + hip) + AC_PATH_PROG([HIPCC],[hipcc],[no],[$PATH]) + AS_IF([test "x$HIPCC" = "xno"], + [AC_MSG_ERROR([hipcc not found but Kokkos HIP backend requested])]) + KOKKOS_CXX="$HIPCC" + KOKKOS_LDFLAGS="-L$KOKKOS_DIR/lib" + ;; + sycl) + AC_PATH_PROG([ICPX],[icpx],[no],[$PATH]) + AS_IF([test "x$ICPX" = "xno"], + [AC_MSG_ERROR([icpx not found but Kokkos SYCL backend requested])]) + KOKKOS_CXX="$ICPX" + KOKKOS_CXXFLAGS="-fsycl" + KOKKOS_LDFLAGS="-fsycl -L$KOKKOS_DIR/lib" + ;; + openmp) + KOKKOS_CXX="${CXX}" + KOKKOS_CXXFLAGS="-fopenmp -x c++" + KOKKOS_LDFLAGS="-fopenmp -L$KOKKOS_DIR/lib" + ;; + serial|*) + KOKKOS_CXX="${CXX}" + KOKKOS_CXXFLAGS="-x c++" + KOKKOS_LDFLAGS="-L$KOKKOS_DIR/lib" + ;; + esac + ], + [AC_MSG_RESULT([Using caller-provided KOKKOS_CXX=$KOKKOS_CXX])]) + + dnl Set defaults for any variables not provided by caller or auto-detect + KOKKOS_CPPFLAGS="${KOKKOS_CPPFLAGS:--DLIBMESH_KOKKOS_COMPILATION -I$KOKKOS_DIR/include}" + KOKKOS_LDFLAGS="${KOKKOS_LDFLAGS:--L$KOKKOS_DIR/lib}" + KOKKOS_LIBS="${KOKKOS_LIBS:--lkokkoscore}" + + dnl If KOKKOS_CXX differs from the main compiler, it may not be the MPI + dnl wrapper and thus may need the wrapper's compile flags explicitly in + dnl order to find mpi.h. Query the primary CXX wrapper for compile-time + dnl flags and fall back to MPI_INCLUDES when probing is unavailable. + KOKKOS_MPI_CPPFLAGS="" + AS_IF([test "x$enablempi" = "xyes" && test "x$KOKKOS_CXX" != "x$CXX"], + [ + AC_MSG_CHECKING([for MPI compile flags usable with KOKKOS_CXX]) + KOKKOS_MPI_CPPFLAGS=`$CXX -showme:compile 2>/dev/null` + AS_IF([test "x$KOKKOS_MPI_CPPFLAGS" = "x"], + [KOKKOS_MPI_CPPFLAGS=`$CXX -compile_info 2>/dev/null`]) + AS_IF([test "x$KOKKOS_MPI_CPPFLAGS" = "x"], + [KOKKOS_MPI_CPPFLAGS=`$CXX -show 2>/dev/null | sed 's/^[^ ]* //'`]) + AS_IF([test "x$KOKKOS_MPI_CPPFLAGS" = "x"], + [KOKKOS_MPI_CPPFLAGS="$MPI_INCLUDES"]) + AS_IF([test "x$KOKKOS_MPI_CPPFLAGS" = "x"], + [AC_MSG_RESULT([not found])], + [AC_MSG_RESULT([$KOKKOS_MPI_CPPFLAGS])]) + ]) + + dnl Fail configure early if the chosen Kokkos compiler/flags/libs cannot + dnl actually compile and link a minimal Kokkos program. + AC_MSG_CHECKING([whether the Kokkos compiler configuration works]) + libmesh_save_CXX="$CXX" + libmesh_save_CPPFLAGS="$CPPFLAGS" + libmesh_save_CXXFLAGS="$CXXFLAGS" + libmesh_save_LDFLAGS="$LDFLAGS" + libmesh_save_LIBS="$LIBS" + + CXX="$KOKKOS_CXX" + CPPFLAGS="$CPPFLAGS $KOKKOS_CPPFLAGS $KOKKOS_MPI_CPPFLAGS" + CXXFLAGS="$CXXFLAGS $KOKKOS_CXXFLAGS" + LDFLAGS="$LDFLAGS $KOKKOS_LDFLAGS" + LIBS="$LIBS $KOKKOS_LIBS" + AC_LANG_PUSH([C++]) + + AS_IF([test "x$enablempi" = "xyes"], + [ + LDFLAGS="$LDFLAGS $MPI_LDFLAGS" + LIBS="$LIBS $MPI_LIBS" + AC_LINK_IFELSE( + [AC_LANG_SOURCE([[ + #include + #include + int main(int argc, char ** argv) + { + MPI_Init(&argc, &argv); + Kokkos::initialize(argc, argv); + Kokkos::finalize(); + MPI_Finalize(); + return 0; + } + ]])], + [kokkos_config_works=yes], + [kokkos_config_works=no]) + ], + [ + AC_LINK_IFELSE( + [AC_LANG_SOURCE([[ + #include + int main(int argc, char ** argv) + { + Kokkos::initialize(argc, argv); + Kokkos::finalize(); + return 0; + } + ]])], + [kokkos_config_works=yes], + [kokkos_config_works=no]) + ]) + AC_LANG_POP([C++]) + + CXX="$libmesh_save_CXX" + CPPFLAGS="$libmesh_save_CPPFLAGS" + CXXFLAGS="$libmesh_save_CXXFLAGS" + LDFLAGS="$libmesh_save_LDFLAGS" + LIBS="$libmesh_save_LIBS" + + AS_IF([test "x$kokkos_config_works" = "xyes"], + [AC_MSG_RESULT([yes])], + [AC_MSG_ERROR([configured Kokkos compiler/flags failed to compile and link a minimal test program])]) + + AC_DEFINE([HAVE_KOKKOS], [1], + [Define if Kokkos support is enabled in libMesh]) + AC_MSG_RESULT(<<< Configuring library with Kokkos support >>>) + ], + [ + AC_MSG_WARN([Kokkos not found at $KOKKOS_DIR -- disabling Kokkos FE support]) + enablekokkos=no + ]) + ], + [enablekokkos=no]) + + AC_SUBST([KOKKOS_CXX]) + AC_SUBST([KOKKOS_CPPFLAGS]) + AC_SUBST([KOKKOS_CXXFLAGS]) + AC_SUBST([KOKKOS_LDFLAGS]) + AC_SUBST([KOKKOS_LIBS]) + AC_SUBST([KOKKOS_MPI_CPPFLAGS]) + AM_CONDITIONAL(LIBMESH_ENABLE_KOKKOS, test x$enablekokkos = xyes) +]) + diff --git a/m4/libmesh_optional_packages.m4 b/m4/libmesh_optional_packages.m4 index 190a90c824e..1c73b368670 100644 --- a/m4/libmesh_optional_packages.m4 +++ b/m4/libmesh_optional_packages.m4 @@ -860,214 +860,10 @@ AM_CONDITIONAL(LIBMESH_ENABLE_METAPHYSICL, test x$enablemetaphysicl = xyes) - # ------------------------------------------------------------- -# Kokkos -- optional, enables the native Kokkos FE math path +# Kokkos -- enables the native Kokkos FE math path # ------------------------------------------------------------- -AC_ARG_WITH([kokkos], - AS_HELP_STRING([--with-kokkos=DIR], - [Enable Kokkos support using the installation at DIR]), - [KOKKOS_DIR="$withval"], - [KOKKOS_DIR="no"]) - -AC_ARG_WITH([kokkos-backend], - AS_HELP_STRING([--with-kokkos-backend=BACKEND], - [cuda|hip|sycl|openmp|serial (default: auto-detect from KokkosCore_config.h)]), - [KOKKOS_BACKEND="$withval"], [KOKKOS_BACKEND="auto"]) - -dnl Allow the caller (e.g. MOOSE's configure_libmesh.sh) to pre-set the -dnl Kokkos compiler and flags via environment variables. If KOKKOS_CXX is -dnl already set, we skip auto-detection entirely — the caller knows best. -dnl We use AC_SUBST (not AC_ARG_VAR) so these flags stay scoped to .K -dnl compilation rules and don't leak into the main CPPFLAGS/CXXFLAGS. - -AS_IF([test "x$KOKKOS_DIR" != "xno"], - [ - AC_CHECK_FILE([$KOKKOS_DIR/include/Kokkos_Core.hpp], - [ - enablekokkos=yes - libmesh_optional_INCLUDES="$libmesh_optional_INCLUDES -I$KOKKOS_DIR/include" - libmesh_optional_LIBS="$libmesh_optional_LIBS -L$KOKKOS_DIR/lib -lkokkoscore" - - dnl Only auto-detect if KOKKOS_CXX was not pre-set by the caller - AS_IF([test "x$KOKKOS_CXX" = "x"], - [ - KOKKOS_CFG="$KOKKOS_DIR/include/KokkosCore_config.h" - - dnl Auto-detect backend - AS_IF([test "x$KOKKOS_BACKEND" = "xauto"], - [ - AS_IF([test -r "$KOKKOS_CFG"], - [ - AS_IF([grep -q 'KOKKOS_ENABLE_CUDA' "$KOKKOS_CFG"], - [KOKKOS_BACKEND=cuda], - [AS_IF([grep -q 'KOKKOS_ENABLE_HIP' "$KOKKOS_CFG"], - [KOKKOS_BACKEND=hip], - [AS_IF([grep -q 'KOKKOS_ENABLE_SYCL' "$KOKKOS_CFG"], - [KOKKOS_BACKEND=sycl], - [AS_IF([grep -q 'KOKKOS_ENABLE_OPENMP' "$KOKKOS_CFG"], - [KOKKOS_BACKEND=openmp], - [KOKKOS_BACKEND=serial])])])]) - ], - [KOKKOS_BACKEND=serial]) - ]) - - AC_MSG_RESULT([Kokkos backend: $KOKKOS_BACKEND]) - - dnl Check if Kokkos was built with OpenMP - have_kokkos_openmp=no - AS_IF([test -r "$KOKKOS_CFG"], - [AS_IF([grep -q 'KOKKOS_ENABLE_OPENMP' "$KOKKOS_CFG"], - [have_kokkos_openmp=yes])]) - - case "$KOKKOS_BACKEND" in - cuda) - AC_PATH_PROG([NVCC],[nvcc],[no],[$PATH]) - AS_IF([test "x$NVCC" = "xno"], - [AC_MSG_ERROR([nvcc not found but Kokkos CUDA backend requested])]) - KOKKOS_CXX="$NVCC" - KOKKOS_CXXFLAGS="--forward-unknown-to-host-compiler --extended-lambda --disable-warnings -x cu -ccbin $CXX" - KOKKOS_LDFLAGS="--forward-unknown-to-host-compiler -L$KOKKOS_DIR/lib" - AS_IF([test "x$have_kokkos_openmp" = "xyes"], - [ - KOKKOS_CXXFLAGS="$KOKKOS_CXXFLAGS -fopenmp" - KOKKOS_LDFLAGS="$KOKKOS_LDFLAGS -fopenmp" - ]) - ;; - hip) - AC_PATH_PROG([HIPCC],[hipcc],[no],[$PATH]) - AS_IF([test "x$HIPCC" = "xno"], - [AC_MSG_ERROR([hipcc not found but Kokkos HIP backend requested])]) - KOKKOS_CXX="$HIPCC" - KOKKOS_LDFLAGS="-L$KOKKOS_DIR/lib" - ;; - sycl) - AC_PATH_PROG([ICPX],[icpx],[no],[$PATH]) - AS_IF([test "x$ICPX" = "xno"], - [AC_MSG_ERROR([icpx not found but Kokkos SYCL backend requested])]) - KOKKOS_CXX="$ICPX" - KOKKOS_CXXFLAGS="-fsycl" - KOKKOS_LDFLAGS="-fsycl -L$KOKKOS_DIR/lib" - ;; - openmp) - KOKKOS_CXX="${CXX}" - KOKKOS_CXXFLAGS="-fopenmp -x c++" - KOKKOS_LDFLAGS="-fopenmp -L$KOKKOS_DIR/lib" - ;; - serial|*) - KOKKOS_CXX="${CXX}" - KOKKOS_CXXFLAGS="-x c++" - KOKKOS_LDFLAGS="-L$KOKKOS_DIR/lib" - ;; - esac - ], - [AC_MSG_RESULT([Using caller-provided KOKKOS_CXX=$KOKKOS_CXX])]) - - dnl Set defaults for any variables not provided by caller or auto-detect - KOKKOS_CPPFLAGS="${KOKKOS_CPPFLAGS:--DLIBMESH_KOKKOS_COMPILATION -I$KOKKOS_DIR/include}" - KOKKOS_LDFLAGS="${KOKKOS_LDFLAGS:--L$KOKKOS_DIR/lib}" - KOKKOS_LIBS="${KOKKOS_LIBS:--lkokkoscore}" - - dnl If KOKKOS_CXX differs from the main compiler, it may not be the MPI - dnl wrapper and thus may need the wrapper's compile flags explicitly in - dnl order to find mpi.h. Query the primary CXX wrapper for compile-time - dnl flags and fall back to MPI_INCLUDES when probing is unavailable. - KOKKOS_MPI_CPPFLAGS="" - AS_IF([test "x$enablempi" = "xyes" && test "x$KOKKOS_CXX" != "x$CXX"], - [ - AC_MSG_CHECKING([for MPI compile flags usable with KOKKOS_CXX]) - KOKKOS_MPI_CPPFLAGS=`$CXX -showme:compile 2>/dev/null` - AS_IF([test "x$KOKKOS_MPI_CPPFLAGS" = "x"], - [KOKKOS_MPI_CPPFLAGS=`$CXX -compile_info 2>/dev/null`]) - AS_IF([test "x$KOKKOS_MPI_CPPFLAGS" = "x"], - [KOKKOS_MPI_CPPFLAGS=`$CXX -show 2>/dev/null | sed 's/^[^ ]* //'`]) - AS_IF([test "x$KOKKOS_MPI_CPPFLAGS" = "x"], - [KOKKOS_MPI_CPPFLAGS="$MPI_INCLUDES"]) - AS_IF([test "x$KOKKOS_MPI_CPPFLAGS" = "x"], - [AC_MSG_RESULT([not found])], - [AC_MSG_RESULT([$KOKKOS_MPI_CPPFLAGS])]) - ]) - - dnl Fail configure early if the chosen Kokkos compiler/flags/libs cannot - dnl actually compile and link a minimal Kokkos program. - AC_MSG_CHECKING([whether the Kokkos compiler configuration works]) - libmesh_save_CXX="$CXX" - libmesh_save_CPPFLAGS="$CPPFLAGS" - libmesh_save_CXXFLAGS="$CXXFLAGS" - libmesh_save_LDFLAGS="$LDFLAGS" - libmesh_save_LIBS="$LIBS" - - CXX="$KOKKOS_CXX" - CPPFLAGS="$CPPFLAGS $KOKKOS_CPPFLAGS $KOKKOS_MPI_CPPFLAGS" - CXXFLAGS="$CXXFLAGS $KOKKOS_CXXFLAGS" - LDFLAGS="$LDFLAGS $KOKKOS_LDFLAGS" - LIBS="$LIBS $KOKKOS_LIBS" - AC_LANG_PUSH([C++]) - - AS_IF([test "x$enablempi" = "xyes"], - [ - LDFLAGS="$LDFLAGS $MPI_LDFLAGS" - LIBS="$LIBS $MPI_LIBS" - AC_LINK_IFELSE( - [AC_LANG_SOURCE([[ -#include -#include -int main(int argc, char ** argv) -{ - MPI_Init(&argc, &argv); - Kokkos::initialize(argc, argv); - Kokkos::finalize(); - MPI_Finalize(); - return 0; -} -]])], - [kokkos_config_works=yes], - [kokkos_config_works=no]) - ], - [ - AC_LINK_IFELSE( - [AC_LANG_SOURCE([[ -#include -int main(int argc, char ** argv) -{ - Kokkos::initialize(argc, argv); - Kokkos::finalize(); - return 0; -} -]])], - [kokkos_config_works=yes], - [kokkos_config_works=no]) - ]) - AC_LANG_POP([C++]) - - CXX="$libmesh_save_CXX" - CPPFLAGS="$libmesh_save_CPPFLAGS" - CXXFLAGS="$libmesh_save_CXXFLAGS" - LDFLAGS="$libmesh_save_LDFLAGS" - LIBS="$libmesh_save_LIBS" - - AS_IF([test "x$kokkos_config_works" = "xyes"], - [AC_MSG_RESULT([yes])], - [AC_MSG_ERROR([configured Kokkos compiler/flags failed to compile and link a minimal test program])]) - - AC_DEFINE([HAVE_KOKKOS], [1], - [Define if Kokkos support is enabled in libMesh]) - AC_MSG_RESULT(<<< Configuring library with Kokkos support >>>) - ], - [ - AC_MSG_WARN([Kokkos not found at $KOKKOS_DIR -- disabling Kokkos FE support]) - enablekokkos=no - ]) - ], - [enablekokkos=no]) - -AC_SUBST([KOKKOS_CXX]) -AC_SUBST([KOKKOS_CPPFLAGS]) -AC_SUBST([KOKKOS_CXXFLAGS]) -AC_SUBST([KOKKOS_LDFLAGS]) -AC_SUBST([KOKKOS_LIBS]) -AC_SUBST([KOKKOS_MPI_CPPFLAGS]) -AM_CONDITIONAL(LIBMESH_ENABLE_KOKKOS, test x$enablekokkos = xyes) +CONFIGURE_KOKKOS # ------------------------------------------------------------- From f38f0577b95198f1628219df77a8867d04293e7d Mon Sep 17 00:00:00 2001 From: Roy Stogner Date: Wed, 20 May 2026 10:59:40 -0500 Subject: [PATCH 25/46] Re-bootstrap --- Makefile.in | 4 +- aclocal.m4 | 1 + configure | 219 +++++++++--------- contrib/Makefile.in | 4 +- contrib/capnproto/Makefile.in | 4 +- contrib/eigen/gitshim/Makefile.in | 4 +- contrib/exodusii/5.22b/exodus/Makefile.in | 4 +- contrib/exodusii/5.22b/nemesis/Makefile.in | 4 +- contrib/exodusii/Lib/Makefile.in | 4 +- contrib/exodusii/v8.11/exodus/Makefile.in | 4 +- contrib/exodusii/v8.11/nemesis/Makefile.in | 4 +- contrib/fparser/Makefile.in | 4 +- contrib/fparser/extrasrc/Makefile.in | 4 +- contrib/gmv/Makefile.in | 4 +- contrib/gzstream/Makefile.in | 4 +- contrib/laspack/Makefile.in | 4 +- contrib/libHilbert/Makefile.in | 4 +- contrib/metis/Makefile.in | 4 +- contrib/nanoflann/Makefile.in | 4 +- contrib/nemesis/Lib/Makefile.in | 4 +- contrib/netgen/Makefile.in | 4 +- contrib/parmetis/Makefile.in | 4 +- contrib/poly2tri/modified/Makefile.in | 4 +- contrib/qhull/2012.1/Makefile.in | 4 +- contrib/sfcurves/Makefile.in | 4 +- contrib/tecplot/binary/Makefile.in | 4 +- contrib/tecplot/tecio/Makefile.in | 4 +- contrib/tetgen/Makefile.in | 4 +- contrib/triangle/Makefile.in | 4 +- doc/Makefile.in | 4 +- doc/html/Makefile.in | 4 +- examples/Makefile.in | 4 +- .../adaptivity/adaptivity_ex1/Makefile.in | 4 +- .../adaptivity/adaptivity_ex2/Makefile.in | 4 +- .../adaptivity/adaptivity_ex3/Makefile.in | 4 +- .../adaptivity/adaptivity_ex4/Makefile.in | 4 +- .../adaptivity/adaptivity_ex5/Makefile.in | 4 +- examples/adjoints/adjoints_ex1/Makefile.in | 4 +- examples/adjoints/adjoints_ex2/Makefile.in | 4 +- examples/adjoints/adjoints_ex3/Makefile.in | 4 +- examples/adjoints/adjoints_ex4/Makefile.in | 4 +- examples/adjoints/adjoints_ex5/Makefile.in | 4 +- examples/adjoints/adjoints_ex6/Makefile.in | 4 +- examples/adjoints/adjoints_ex7/Makefile.in | 4 +- .../eigenproblems_ex1/Makefile.in | 4 +- .../eigenproblems_ex2/Makefile.in | 4 +- .../eigenproblems_ex3/Makefile.in | 4 +- .../eigenproblems_ex4/Makefile.in | 4 +- .../fem_system/fem_system_ex1/Makefile.in | 4 +- .../fem_system/fem_system_ex2/Makefile.in | 4 +- .../fem_system/fem_system_ex3/Makefile.in | 4 +- .../fem_system/fem_system_ex4/Makefile.in | 4 +- .../fem_system/fem_system_ex5/Makefile.in | 4 +- .../introduction/introduction_ex1/Makefile.in | 4 +- .../introduction/introduction_ex2/Makefile.in | 4 +- .../introduction/introduction_ex3/Makefile.in | 4 +- .../introduction/introduction_ex4/Makefile.in | 4 +- .../introduction/introduction_ex5/Makefile.in | 4 +- .../miscellaneous_ex1/Makefile.in | 4 +- .../miscellaneous_ex10/Makefile.in | 4 +- .../miscellaneous_ex11/Makefile.in | 4 +- .../miscellaneous_ex12/Makefile.in | 4 +- .../miscellaneous_ex13/Makefile.in | 4 +- .../miscellaneous_ex14/Makefile.in | 4 +- .../miscellaneous_ex15/Makefile.in | 4 +- .../miscellaneous_ex16/Makefile.in | 4 +- .../miscellaneous_ex17/Makefile.in | 4 +- .../miscellaneous_ex2/Makefile.in | 4 +- .../miscellaneous_ex3/Makefile.in | 4 +- .../miscellaneous_ex4/Makefile.in | 4 +- .../miscellaneous_ex5/Makefile.in | 4 +- .../miscellaneous_ex6/Makefile.in | 4 +- .../miscellaneous_ex7/Makefile.in | 4 +- .../miscellaneous_ex8/Makefile.in | 4 +- .../miscellaneous_ex9/Makefile.in | 4 +- .../optimization/optimization_ex1/Makefile.in | 4 +- .../optimization/optimization_ex2/Makefile.in | 4 +- .../reduced_basis_ex1/Makefile.in | 4 +- .../reduced_basis_ex2/Makefile.in | 4 +- .../reduced_basis_ex3/Makefile.in | 4 +- .../reduced_basis_ex4/Makefile.in | 4 +- .../reduced_basis_ex5/Makefile.in | 4 +- .../reduced_basis_ex6/Makefile.in | 4 +- .../reduced_basis_ex7/Makefile.in | 4 +- .../solution_transfer_ex1/Makefile.in | 4 +- .../subdomains/subdomains_ex1/Makefile.in | 4 +- .../subdomains/subdomains_ex2/Makefile.in | 4 +- .../subdomains/subdomains_ex3/Makefile.in | 4 +- .../systems_of_equations_ex1/Makefile.in | 4 +- .../systems_of_equations_ex2/Makefile.in | 4 +- .../systems_of_equations_ex3/Makefile.in | 4 +- .../systems_of_equations_ex4/Makefile.in | 4 +- .../systems_of_equations_ex5/Makefile.in | 4 +- .../systems_of_equations_ex6/Makefile.in | 4 +- .../systems_of_equations_ex7/Makefile.in | 4 +- .../systems_of_equations_ex8/Makefile.in | 4 +- .../systems_of_equations_ex9/Makefile.in | 4 +- examples/transient/transient_ex1/Makefile.in | 4 +- examples/transient/transient_ex2/Makefile.in | 4 +- examples/transient/transient_ex3/Makefile.in | 4 +- examples/vector_fe/vector_fe_ex1/Makefile.in | 4 +- examples/vector_fe/vector_fe_ex10/Makefile.in | 4 +- examples/vector_fe/vector_fe_ex2/Makefile.in | 4 +- examples/vector_fe/vector_fe_ex3/Makefile.in | 4 +- examples/vector_fe/vector_fe_ex4/Makefile.in | 4 +- examples/vector_fe/vector_fe_ex5/Makefile.in | 4 +- examples/vector_fe/vector_fe_ex6/Makefile.in | 4 +- examples/vector_fe/vector_fe_ex7/Makefile.in | 4 +- examples/vector_fe/vector_fe_ex8/Makefile.in | 4 +- examples/vector_fe/vector_fe_ex9/Makefile.in | 4 +- include/Makefile.in | 4 +- include/libmesh/Makefile.in | 4 +- tests/Makefile.in | 4 +- 113 files changed, 333 insertions(+), 331 deletions(-) diff --git a/Makefile.in b/Makefile.in index a828d28e8a0..1760cccb26b 100644 --- a/Makefile.in +++ b/Makefile.in @@ -161,8 +161,8 @@ am__aclocal_m4_deps = \ $(top_srcdir)/m4/exodus.m4 $(top_srcdir)/m4/feexcept.m4 \ $(top_srcdir)/m4/fparser.m4 $(top_srcdir)/m4/glpk.m4 \ $(top_srcdir)/m4/gmv.m4 $(top_srcdir)/m4/gz.m4 \ - $(top_srcdir)/m4/hdf5.m4 $(top_srcdir)/m4/laspack.m4 \ - $(top_srcdir)/m4/libhilbert.m4 \ + $(top_srcdir)/m4/hdf5.m4 $(top_srcdir)/m4/kokkos.m4 \ + $(top_srcdir)/m4/laspack.m4 $(top_srcdir)/m4/libhilbert.m4 \ $(top_srcdir)/m4/libmesh_compiler_features.m4 \ $(top_srcdir)/m4/libmesh_core_features.m4 \ $(top_srcdir)/m4/libmesh_metaphysicl.m4 \ diff --git a/aclocal.m4 b/aclocal.m4 index 7f0fee71c0d..3faef90933c 100644 --- a/aclocal.m4 +++ b/aclocal.m4 @@ -1396,6 +1396,7 @@ m4_include([m4/glpk.m4]) m4_include([m4/gmv.m4]) m4_include([m4/gz.m4]) m4_include([m4/hdf5.m4]) +m4_include([m4/kokkos.m4]) m4_include([m4/laspack.m4]) m4_include([m4/libhilbert.m4]) m4_include([m4/libmesh_compiler_features.m4]) diff --git a/configure b/configure index c0250de457a..561f0d8c9b9 100755 --- a/configure +++ b/configure @@ -63929,11 +63929,11 @@ fi - # ------------------------------------------------------------- -# Kokkos -- optional, enables the native Kokkos FE math path +# Kokkos -- enables the native Kokkos FE math path # ------------------------------------------------------------- + # Check whether --with-kokkos was given. if test ${with_kokkos+y} then : @@ -63956,10 +63956,10 @@ fi -if test "x$KOKKOS_DIR" != "xno" + if test "x$KOKKOS_DIR" != "xno" then : - as_ac_File=`printf "%s\n" "ac_cv_file_$KOKKOS_DIR/include/Kokkos_Core.hpp" | sed "$as_sed_sh"` + as_ac_File=`printf "%s\n" "ac_cv_file_$KOKKOS_DIR/include/Kokkos_Core.hpp" | sed "$as_sed_sh"` { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $KOKKOS_DIR/include/Kokkos_Core.hpp" >&5 printf %s "checking for $KOKKOS_DIR/include/Kokkos_Core.hpp... " >&6; } if eval test \${$as_ac_File+y} @@ -63981,22 +63981,22 @@ printf "%s\n" "$ac_res" >&6; } if eval test \"x\$"$as_ac_File"\" = x"yes" then : - enablekokkos=yes - libmesh_optional_INCLUDES="$libmesh_optional_INCLUDES -I$KOKKOS_DIR/include" - libmesh_optional_LIBS="$libmesh_optional_LIBS -L$KOKKOS_DIR/lib -lkokkoscore" + enablekokkos=yes + libmesh_optional_INCLUDES="$libmesh_optional_INCLUDES -I$KOKKOS_DIR/include" + libmesh_optional_LIBS="$libmesh_optional_LIBS -L$KOKKOS_DIR/lib -lkokkoscore" - if test "x$KOKKOS_CXX" = "x" + if test "x$KOKKOS_CXX" = "x" then : - KOKKOS_CFG="$KOKKOS_DIR/include/KokkosCore_config.h" + KOKKOS_CFG="$KOKKOS_DIR/include/KokkosCore_config.h" - if test "x$KOKKOS_BACKEND" = "xauto" + if test "x$KOKKOS_BACKEND" = "xauto" then : - if test -r "$KOKKOS_CFG" + if test -r "$KOKKOS_CFG" then : - if grep -q 'KOKKOS_ENABLE_CUDA' "$KOKKOS_CFG" + if grep -q 'KOKKOS_ENABLE_CUDA' "$KOKKOS_CFG" then : KOKKOS_BACKEND=cuda else case e in #( @@ -64029,11 +64029,11 @@ fi fi - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: Kokkos backend: $KOKKOS_BACKEND" >&5 + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: Kokkos backend: $KOKKOS_BACKEND" >&5 printf "%s\n" "Kokkos backend: $KOKKOS_BACKEND" >&6; } - have_kokkos_openmp=no - if test -r "$KOKKOS_CFG" + have_kokkos_openmp=no + if test -r "$KOKKOS_CFG" then : if grep -q 'KOKKOS_ENABLE_OPENMP' "$KOKKOS_CFG" then : @@ -64041,9 +64041,9 @@ then : fi fi - case "$KOKKOS_BACKEND" in - cuda) - # Extract the first word of "nvcc", so it can be a program name with args. + case "$KOKKOS_BACKEND" in + cuda) + # Extract the first word of "nvcc", so it can be a program name with args. set dummy nvcc; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } @@ -64090,23 +64090,23 @@ printf "%s\n" "no" >&6; } fi - if test "x$NVCC" = "xno" + if test "x$NVCC" = "xno" then : as_fn_error $? "nvcc not found but Kokkos CUDA backend requested" "$LINENO" 5 fi - KOKKOS_CXX="$NVCC" - KOKKOS_CXXFLAGS="--forward-unknown-to-host-compiler --extended-lambda --disable-warnings -x cu -ccbin $CXX" - KOKKOS_LDFLAGS="--forward-unknown-to-host-compiler -L$KOKKOS_DIR/lib" - if test "x$have_kokkos_openmp" = "xyes" + KOKKOS_CXX="$NVCC" + KOKKOS_CXXFLAGS="--forward-unknown-to-host-compiler --extended-lambda --disable-warnings -x cu -ccbin $CXX" + KOKKOS_LDFLAGS="--forward-unknown-to-host-compiler -L$KOKKOS_DIR/lib" + if test "x$have_kokkos_openmp" = "xyes" then : - KOKKOS_CXXFLAGS="$KOKKOS_CXXFLAGS -fopenmp" - KOKKOS_LDFLAGS="$KOKKOS_LDFLAGS -fopenmp" + KOKKOS_CXXFLAGS="$KOKKOS_CXXFLAGS -fopenmp" + KOKKOS_LDFLAGS="$KOKKOS_LDFLAGS -fopenmp" fi - ;; - hip) - # Extract the first word of "hipcc", so it can be a program name with args. + ;; + hip) + # Extract the first word of "hipcc", so it can be a program name with args. set dummy hipcc; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } @@ -64153,15 +64153,15 @@ printf "%s\n" "no" >&6; } fi - if test "x$HIPCC" = "xno" + if test "x$HIPCC" = "xno" then : as_fn_error $? "hipcc not found but Kokkos HIP backend requested" "$LINENO" 5 fi - KOKKOS_CXX="$HIPCC" - KOKKOS_LDFLAGS="-L$KOKKOS_DIR/lib" - ;; - sycl) - # Extract the first word of "icpx", so it can be a program name with args. + KOKKOS_CXX="$HIPCC" + KOKKOS_LDFLAGS="-L$KOKKOS_DIR/lib" + ;; + sycl) + # Extract the first word of "icpx", so it can be a program name with args. set dummy icpx; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } @@ -64208,25 +64208,25 @@ printf "%s\n" "no" >&6; } fi - if test "x$ICPX" = "xno" + if test "x$ICPX" = "xno" then : as_fn_error $? "icpx not found but Kokkos SYCL backend requested" "$LINENO" 5 fi - KOKKOS_CXX="$ICPX" - KOKKOS_CXXFLAGS="-fsycl" - KOKKOS_LDFLAGS="-fsycl -L$KOKKOS_DIR/lib" - ;; - openmp) - KOKKOS_CXX="${CXX}" - KOKKOS_CXXFLAGS="-fopenmp -x c++" - KOKKOS_LDFLAGS="-fopenmp -L$KOKKOS_DIR/lib" - ;; - serial|*) - KOKKOS_CXX="${CXX}" - KOKKOS_CXXFLAGS="-x c++" - KOKKOS_LDFLAGS="-L$KOKKOS_DIR/lib" - ;; - esac + KOKKOS_CXX="$ICPX" + KOKKOS_CXXFLAGS="-fsycl" + KOKKOS_LDFLAGS="-fsycl -L$KOKKOS_DIR/lib" + ;; + openmp) + KOKKOS_CXX="${CXX}" + KOKKOS_CXXFLAGS="-fopenmp -x c++" + KOKKOS_LDFLAGS="-fopenmp -L$KOKKOS_DIR/lib" + ;; + serial|*) + KOKKOS_CXX="${CXX}" + KOKKOS_CXXFLAGS="-x c++" + KOKKOS_LDFLAGS="-L$KOKKOS_DIR/lib" + ;; + esac else case e in #( e) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: Using caller-provided KOKKOS_CXX=$KOKKOS_CXX" >&5 @@ -64234,30 +64234,30 @@ printf "%s\n" "Using caller-provided KOKKOS_CXX=$KOKKOS_CXX" >&6; } ;; esac fi - KOKKOS_CPPFLAGS="${KOKKOS_CPPFLAGS:--DLIBMESH_KOKKOS_COMPILATION -I$KOKKOS_DIR/include}" - KOKKOS_LDFLAGS="${KOKKOS_LDFLAGS:--L$KOKKOS_DIR/lib}" - KOKKOS_LIBS="${KOKKOS_LIBS:--lkokkoscore}" + KOKKOS_CPPFLAGS="${KOKKOS_CPPFLAGS:--DLIBMESH_KOKKOS_COMPILATION -I$KOKKOS_DIR/include}" + KOKKOS_LDFLAGS="${KOKKOS_LDFLAGS:--L$KOKKOS_DIR/lib}" + KOKKOS_LIBS="${KOKKOS_LIBS:--lkokkoscore}" - KOKKOS_MPI_CPPFLAGS="" - if test "x$enablempi" = "xyes" && test "x$KOKKOS_CXX" != "x$CXX" + KOKKOS_MPI_CPPFLAGS="" + if test "x$enablempi" = "xyes" && test "x$KOKKOS_CXX" != "x$CXX" then : - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for MPI compile flags usable with KOKKOS_CXX" >&5 + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for MPI compile flags usable with KOKKOS_CXX" >&5 printf %s "checking for MPI compile flags usable with KOKKOS_CXX... " >&6; } - KOKKOS_MPI_CPPFLAGS=`$CXX -showme:compile 2>/dev/null` - if test "x$KOKKOS_MPI_CPPFLAGS" = "x" + KOKKOS_MPI_CPPFLAGS=`$CXX -showme:compile 2>/dev/null` + if test "x$KOKKOS_MPI_CPPFLAGS" = "x" then : KOKKOS_MPI_CPPFLAGS=`$CXX -compile_info 2>/dev/null` fi - if test "x$KOKKOS_MPI_CPPFLAGS" = "x" + if test "x$KOKKOS_MPI_CPPFLAGS" = "x" then : KOKKOS_MPI_CPPFLAGS=`$CXX -show 2>/dev/null | sed 's/^^ * //'` fi - if test "x$KOKKOS_MPI_CPPFLAGS" = "x" + if test "x$KOKKOS_MPI_CPPFLAGS" = "x" then : KOKKOS_MPI_CPPFLAGS="$MPI_INCLUDES" fi - if test "x$KOKKOS_MPI_CPPFLAGS" = "x" + if test "x$KOKKOS_MPI_CPPFLAGS" = "x" then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: not found" >&5 printf "%s\n" "not found" >&6; } @@ -64269,44 +64269,44 @@ fi fi - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether the Kokkos compiler configuration works" >&5 + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether the Kokkos compiler configuration works" >&5 printf %s "checking whether the Kokkos compiler configuration works... " >&6; } - libmesh_save_CXX="$CXX" - libmesh_save_CPPFLAGS="$CPPFLAGS" - libmesh_save_CXXFLAGS="$CXXFLAGS" - libmesh_save_LDFLAGS="$LDFLAGS" - libmesh_save_LIBS="$LIBS" - - CXX="$KOKKOS_CXX" - CPPFLAGS="$CPPFLAGS $KOKKOS_CPPFLAGS $KOKKOS_MPI_CPPFLAGS" - CXXFLAGS="$CXXFLAGS $KOKKOS_CXXFLAGS" - LDFLAGS="$LDFLAGS $KOKKOS_LDFLAGS" - LIBS="$LIBS $KOKKOS_LIBS" - ac_ext=cpp + libmesh_save_CXX="$CXX" + libmesh_save_CPPFLAGS="$CPPFLAGS" + libmesh_save_CXXFLAGS="$CXXFLAGS" + libmesh_save_LDFLAGS="$LDFLAGS" + libmesh_save_LIBS="$LIBS" + + CXX="$KOKKOS_CXX" + CPPFLAGS="$CPPFLAGS $KOKKOS_CPPFLAGS $KOKKOS_MPI_CPPFLAGS" + CXXFLAGS="$CXXFLAGS $KOKKOS_CXXFLAGS" + LDFLAGS="$LDFLAGS $KOKKOS_LDFLAGS" + LIBS="$LIBS $KOKKOS_LIBS" + ac_ext=cpp ac_cpp='$CXXCPP $CPPFLAGS' ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_cxx_compiler_gnu - if test "x$enablempi" = "xyes" + if test "x$enablempi" = "xyes" then : - LDFLAGS="$LDFLAGS $MPI_LDFLAGS" - LIBS="$LIBS $MPI_LIBS" - cat confdefs.h - <<_ACEOF >conftest.$ac_ext + LDFLAGS="$LDFLAGS $MPI_LDFLAGS" + LIBS="$LIBS $MPI_LIBS" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ -#include -#include -int main(int argc, char ** argv) -{ - MPI_Init(&argc, &argv); - Kokkos::initialize(argc, argv); - Kokkos::finalize(); - MPI_Finalize(); - return 0; -} + #include + #include + int main(int argc, char ** argv) + { + MPI_Init(&argc, &argv); + Kokkos::initialize(argc, argv); + Kokkos::finalize(); + MPI_Finalize(); + return 0; + } _ACEOF if ac_fn_cxx_try_link "$LINENO" @@ -64321,16 +64321,16 @@ rm -f core conftest.err conftest.$ac_objext conftest.beam \ else case e in #( e) - cat confdefs.h - <<_ACEOF >conftest.$ac_ext + cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ -#include -int main(int argc, char ** argv) -{ - Kokkos::initialize(argc, argv); - Kokkos::finalize(); - return 0; -} + #include + int main(int argc, char ** argv) + { + Kokkos::initialize(argc, argv); + Kokkos::finalize(); + return 0; + } _ACEOF if ac_fn_cxx_try_link "$LINENO" @@ -64342,23 +64342,23 @@ esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext - ;; + ;; esac fi - ac_ext=c + ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu - CXX="$libmesh_save_CXX" - CPPFLAGS="$libmesh_save_CPPFLAGS" - CXXFLAGS="$libmesh_save_CXXFLAGS" - LDFLAGS="$libmesh_save_LDFLAGS" - LIBS="$libmesh_save_LIBS" + CXX="$libmesh_save_CXX" + CPPFLAGS="$libmesh_save_CPPFLAGS" + CXXFLAGS="$libmesh_save_CXXFLAGS" + LDFLAGS="$libmesh_save_LDFLAGS" + LIBS="$libmesh_save_LIBS" - if test "x$kokkos_config_works" = "xyes" + if test "x$kokkos_config_works" = "xyes" then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 printf "%s\n" "yes" >&6; } @@ -64370,15 +64370,15 @@ fi printf "%s\n" "#define HAVE_KOKKOS 1" >>confdefs.h - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: <<< Configuring library with Kokkos support >>>" >&5 + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: <<< Configuring library with Kokkos support >>>" >&5 printf "%s\n" "<<< Configuring library with Kokkos support >>>" >&6; } else case e in #( e) - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: Kokkos not found at $KOKKOS_DIR -- disabling Kokkos FE support" >&5 + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: Kokkos not found at $KOKKOS_DIR -- disabling Kokkos FE support" >&5 printf "%s\n" "$as_me: WARNING: Kokkos not found at $KOKKOS_DIR -- disabling Kokkos FE support" >&2;} - enablekokkos=no - ;; + enablekokkos=no + ;; esac fi @@ -64394,7 +64394,7 @@ fi - if test x$enablekokkos = xyes; then + if test x$enablekokkos = xyes; then LIBMESH_ENABLE_KOKKOS_TRUE= LIBMESH_ENABLE_KOKKOS_FALSE='#' else @@ -64402,6 +64402,7 @@ else LIBMESH_ENABLE_KOKKOS_FALSE= fi + # ------------------------------------------------------------- diff --git a/contrib/Makefile.in b/contrib/Makefile.in index 8f435734690..d8e8da2b46f 100644 --- a/contrib/Makefile.in +++ b/contrib/Makefile.in @@ -287,8 +287,8 @@ am__aclocal_m4_deps = \ $(top_srcdir)/m4/exodus.m4 $(top_srcdir)/m4/feexcept.m4 \ $(top_srcdir)/m4/fparser.m4 $(top_srcdir)/m4/glpk.m4 \ $(top_srcdir)/m4/gmv.m4 $(top_srcdir)/m4/gz.m4 \ - $(top_srcdir)/m4/hdf5.m4 $(top_srcdir)/m4/laspack.m4 \ - $(top_srcdir)/m4/libhilbert.m4 \ + $(top_srcdir)/m4/hdf5.m4 $(top_srcdir)/m4/kokkos.m4 \ + $(top_srcdir)/m4/laspack.m4 $(top_srcdir)/m4/libhilbert.m4 \ $(top_srcdir)/m4/libmesh_compiler_features.m4 \ $(top_srcdir)/m4/libmesh_core_features.m4 \ $(top_srcdir)/m4/libmesh_metaphysicl.m4 \ diff --git a/contrib/capnproto/Makefile.in b/contrib/capnproto/Makefile.in index baef088d0b1..4c3933deb90 100644 --- a/contrib/capnproto/Makefile.in +++ b/contrib/capnproto/Makefile.in @@ -134,8 +134,8 @@ am__aclocal_m4_deps = \ $(top_srcdir)/m4/exodus.m4 $(top_srcdir)/m4/feexcept.m4 \ $(top_srcdir)/m4/fparser.m4 $(top_srcdir)/m4/glpk.m4 \ $(top_srcdir)/m4/gmv.m4 $(top_srcdir)/m4/gz.m4 \ - $(top_srcdir)/m4/hdf5.m4 $(top_srcdir)/m4/laspack.m4 \ - $(top_srcdir)/m4/libhilbert.m4 \ + $(top_srcdir)/m4/hdf5.m4 $(top_srcdir)/m4/kokkos.m4 \ + $(top_srcdir)/m4/laspack.m4 $(top_srcdir)/m4/libhilbert.m4 \ $(top_srcdir)/m4/libmesh_compiler_features.m4 \ $(top_srcdir)/m4/libmesh_core_features.m4 \ $(top_srcdir)/m4/libmesh_metaphysicl.m4 \ diff --git a/contrib/eigen/gitshim/Makefile.in b/contrib/eigen/gitshim/Makefile.in index 9fb8ce682e8..2133b5a3698 100644 --- a/contrib/eigen/gitshim/Makefile.in +++ b/contrib/eigen/gitshim/Makefile.in @@ -131,8 +131,8 @@ am__aclocal_m4_deps = \ $(top_srcdir)/m4/exodus.m4 $(top_srcdir)/m4/feexcept.m4 \ $(top_srcdir)/m4/fparser.m4 $(top_srcdir)/m4/glpk.m4 \ $(top_srcdir)/m4/gmv.m4 $(top_srcdir)/m4/gz.m4 \ - $(top_srcdir)/m4/hdf5.m4 $(top_srcdir)/m4/laspack.m4 \ - $(top_srcdir)/m4/libhilbert.m4 \ + $(top_srcdir)/m4/hdf5.m4 $(top_srcdir)/m4/kokkos.m4 \ + $(top_srcdir)/m4/laspack.m4 $(top_srcdir)/m4/libhilbert.m4 \ $(top_srcdir)/m4/libmesh_compiler_features.m4 \ $(top_srcdir)/m4/libmesh_core_features.m4 \ $(top_srcdir)/m4/libmesh_metaphysicl.m4 \ diff --git a/contrib/exodusii/5.22b/exodus/Makefile.in b/contrib/exodusii/5.22b/exodus/Makefile.in index 9d470e1a03f..0e70f08d297 100644 --- a/contrib/exodusii/5.22b/exodus/Makefile.in +++ b/contrib/exodusii/5.22b/exodus/Makefile.in @@ -143,8 +143,8 @@ am__aclocal_m4_deps = \ $(top_srcdir)/m4/exodus.m4 $(top_srcdir)/m4/feexcept.m4 \ $(top_srcdir)/m4/fparser.m4 $(top_srcdir)/m4/glpk.m4 \ $(top_srcdir)/m4/gmv.m4 $(top_srcdir)/m4/gz.m4 \ - $(top_srcdir)/m4/hdf5.m4 $(top_srcdir)/m4/laspack.m4 \ - $(top_srcdir)/m4/libhilbert.m4 \ + $(top_srcdir)/m4/hdf5.m4 $(top_srcdir)/m4/kokkos.m4 \ + $(top_srcdir)/m4/laspack.m4 $(top_srcdir)/m4/libhilbert.m4 \ $(top_srcdir)/m4/libmesh_compiler_features.m4 \ $(top_srcdir)/m4/libmesh_core_features.m4 \ $(top_srcdir)/m4/libmesh_metaphysicl.m4 \ diff --git a/contrib/exodusii/5.22b/nemesis/Makefile.in b/contrib/exodusii/5.22b/nemesis/Makefile.in index 40204256e72..ae128410e7e 100644 --- a/contrib/exodusii/5.22b/nemesis/Makefile.in +++ b/contrib/exodusii/5.22b/nemesis/Makefile.in @@ -133,8 +133,8 @@ am__aclocal_m4_deps = \ $(top_srcdir)/m4/exodus.m4 $(top_srcdir)/m4/feexcept.m4 \ $(top_srcdir)/m4/fparser.m4 $(top_srcdir)/m4/glpk.m4 \ $(top_srcdir)/m4/gmv.m4 $(top_srcdir)/m4/gz.m4 \ - $(top_srcdir)/m4/hdf5.m4 $(top_srcdir)/m4/laspack.m4 \ - $(top_srcdir)/m4/libhilbert.m4 \ + $(top_srcdir)/m4/hdf5.m4 $(top_srcdir)/m4/kokkos.m4 \ + $(top_srcdir)/m4/laspack.m4 $(top_srcdir)/m4/libhilbert.m4 \ $(top_srcdir)/m4/libmesh_compiler_features.m4 \ $(top_srcdir)/m4/libmesh_core_features.m4 \ $(top_srcdir)/m4/libmesh_metaphysicl.m4 \ diff --git a/contrib/exodusii/Lib/Makefile.in b/contrib/exodusii/Lib/Makefile.in index b4f9a349981..c5205314d2d 100644 --- a/contrib/exodusii/Lib/Makefile.in +++ b/contrib/exodusii/Lib/Makefile.in @@ -134,8 +134,8 @@ am__aclocal_m4_deps = \ $(top_srcdir)/m4/exodus.m4 $(top_srcdir)/m4/feexcept.m4 \ $(top_srcdir)/m4/fparser.m4 $(top_srcdir)/m4/glpk.m4 \ $(top_srcdir)/m4/gmv.m4 $(top_srcdir)/m4/gz.m4 \ - $(top_srcdir)/m4/hdf5.m4 $(top_srcdir)/m4/laspack.m4 \ - $(top_srcdir)/m4/libhilbert.m4 \ + $(top_srcdir)/m4/hdf5.m4 $(top_srcdir)/m4/kokkos.m4 \ + $(top_srcdir)/m4/laspack.m4 $(top_srcdir)/m4/libhilbert.m4 \ $(top_srcdir)/m4/libmesh_compiler_features.m4 \ $(top_srcdir)/m4/libmesh_core_features.m4 \ $(top_srcdir)/m4/libmesh_metaphysicl.m4 \ diff --git a/contrib/exodusii/v8.11/exodus/Makefile.in b/contrib/exodusii/v8.11/exodus/Makefile.in index 2d72bdbc847..8604bde4a23 100644 --- a/contrib/exodusii/v8.11/exodus/Makefile.in +++ b/contrib/exodusii/v8.11/exodus/Makefile.in @@ -134,8 +134,8 @@ am__aclocal_m4_deps = \ $(top_srcdir)/m4/exodus.m4 $(top_srcdir)/m4/feexcept.m4 \ $(top_srcdir)/m4/fparser.m4 $(top_srcdir)/m4/glpk.m4 \ $(top_srcdir)/m4/gmv.m4 $(top_srcdir)/m4/gz.m4 \ - $(top_srcdir)/m4/hdf5.m4 $(top_srcdir)/m4/laspack.m4 \ - $(top_srcdir)/m4/libhilbert.m4 \ + $(top_srcdir)/m4/hdf5.m4 $(top_srcdir)/m4/kokkos.m4 \ + $(top_srcdir)/m4/laspack.m4 $(top_srcdir)/m4/libhilbert.m4 \ $(top_srcdir)/m4/libmesh_compiler_features.m4 \ $(top_srcdir)/m4/libmesh_core_features.m4 \ $(top_srcdir)/m4/libmesh_metaphysicl.m4 \ diff --git a/contrib/exodusii/v8.11/nemesis/Makefile.in b/contrib/exodusii/v8.11/nemesis/Makefile.in index a6197c64b1f..cc53dbe870d 100644 --- a/contrib/exodusii/v8.11/nemesis/Makefile.in +++ b/contrib/exodusii/v8.11/nemesis/Makefile.in @@ -133,8 +133,8 @@ am__aclocal_m4_deps = \ $(top_srcdir)/m4/exodus.m4 $(top_srcdir)/m4/feexcept.m4 \ $(top_srcdir)/m4/fparser.m4 $(top_srcdir)/m4/glpk.m4 \ $(top_srcdir)/m4/gmv.m4 $(top_srcdir)/m4/gz.m4 \ - $(top_srcdir)/m4/hdf5.m4 $(top_srcdir)/m4/laspack.m4 \ - $(top_srcdir)/m4/libhilbert.m4 \ + $(top_srcdir)/m4/hdf5.m4 $(top_srcdir)/m4/kokkos.m4 \ + $(top_srcdir)/m4/laspack.m4 $(top_srcdir)/m4/libhilbert.m4 \ $(top_srcdir)/m4/libmesh_compiler_features.m4 \ $(top_srcdir)/m4/libmesh_core_features.m4 \ $(top_srcdir)/m4/libmesh_metaphysicl.m4 \ diff --git a/contrib/fparser/Makefile.in b/contrib/fparser/Makefile.in index 325e1c48d59..16ead16bb1b 100644 --- a/contrib/fparser/Makefile.in +++ b/contrib/fparser/Makefile.in @@ -150,8 +150,8 @@ am__aclocal_m4_deps = \ $(top_srcdir)/m4/exodus.m4 $(top_srcdir)/m4/feexcept.m4 \ $(top_srcdir)/m4/fparser.m4 $(top_srcdir)/m4/glpk.m4 \ $(top_srcdir)/m4/gmv.m4 $(top_srcdir)/m4/gz.m4 \ - $(top_srcdir)/m4/hdf5.m4 $(top_srcdir)/m4/laspack.m4 \ - $(top_srcdir)/m4/libhilbert.m4 \ + $(top_srcdir)/m4/hdf5.m4 $(top_srcdir)/m4/kokkos.m4 \ + $(top_srcdir)/m4/laspack.m4 $(top_srcdir)/m4/libhilbert.m4 \ $(top_srcdir)/m4/libmesh_compiler_features.m4 \ $(top_srcdir)/m4/libmesh_core_features.m4 \ $(top_srcdir)/m4/libmesh_metaphysicl.m4 \ diff --git a/contrib/fparser/extrasrc/Makefile.in b/contrib/fparser/extrasrc/Makefile.in index 9bd3bff32c8..f2eea27c6c4 100644 --- a/contrib/fparser/extrasrc/Makefile.in +++ b/contrib/fparser/extrasrc/Makefile.in @@ -133,8 +133,8 @@ am__aclocal_m4_deps = \ $(top_srcdir)/m4/exodus.m4 $(top_srcdir)/m4/feexcept.m4 \ $(top_srcdir)/m4/fparser.m4 $(top_srcdir)/m4/glpk.m4 \ $(top_srcdir)/m4/gmv.m4 $(top_srcdir)/m4/gz.m4 \ - $(top_srcdir)/m4/hdf5.m4 $(top_srcdir)/m4/laspack.m4 \ - $(top_srcdir)/m4/libhilbert.m4 \ + $(top_srcdir)/m4/hdf5.m4 $(top_srcdir)/m4/kokkos.m4 \ + $(top_srcdir)/m4/laspack.m4 $(top_srcdir)/m4/libhilbert.m4 \ $(top_srcdir)/m4/libmesh_compiler_features.m4 \ $(top_srcdir)/m4/libmesh_core_features.m4 \ $(top_srcdir)/m4/libmesh_metaphysicl.m4 \ diff --git a/contrib/gmv/Makefile.in b/contrib/gmv/Makefile.in index 51d91b1684d..43c967ef788 100644 --- a/contrib/gmv/Makefile.in +++ b/contrib/gmv/Makefile.in @@ -133,8 +133,8 @@ am__aclocal_m4_deps = \ $(top_srcdir)/m4/exodus.m4 $(top_srcdir)/m4/feexcept.m4 \ $(top_srcdir)/m4/fparser.m4 $(top_srcdir)/m4/glpk.m4 \ $(top_srcdir)/m4/gmv.m4 $(top_srcdir)/m4/gz.m4 \ - $(top_srcdir)/m4/hdf5.m4 $(top_srcdir)/m4/laspack.m4 \ - $(top_srcdir)/m4/libhilbert.m4 \ + $(top_srcdir)/m4/hdf5.m4 $(top_srcdir)/m4/kokkos.m4 \ + $(top_srcdir)/m4/laspack.m4 $(top_srcdir)/m4/libhilbert.m4 \ $(top_srcdir)/m4/libmesh_compiler_features.m4 \ $(top_srcdir)/m4/libmesh_core_features.m4 \ $(top_srcdir)/m4/libmesh_metaphysicl.m4 \ diff --git a/contrib/gzstream/Makefile.in b/contrib/gzstream/Makefile.in index d5c845abf3d..b16ef1ad4a0 100644 --- a/contrib/gzstream/Makefile.in +++ b/contrib/gzstream/Makefile.in @@ -134,8 +134,8 @@ am__aclocal_m4_deps = \ $(top_srcdir)/m4/exodus.m4 $(top_srcdir)/m4/feexcept.m4 \ $(top_srcdir)/m4/fparser.m4 $(top_srcdir)/m4/glpk.m4 \ $(top_srcdir)/m4/gmv.m4 $(top_srcdir)/m4/gz.m4 \ - $(top_srcdir)/m4/hdf5.m4 $(top_srcdir)/m4/laspack.m4 \ - $(top_srcdir)/m4/libhilbert.m4 \ + $(top_srcdir)/m4/hdf5.m4 $(top_srcdir)/m4/kokkos.m4 \ + $(top_srcdir)/m4/laspack.m4 $(top_srcdir)/m4/libhilbert.m4 \ $(top_srcdir)/m4/libmesh_compiler_features.m4 \ $(top_srcdir)/m4/libmesh_core_features.m4 \ $(top_srcdir)/m4/libmesh_metaphysicl.m4 \ diff --git a/contrib/laspack/Makefile.in b/contrib/laspack/Makefile.in index 47a8abd00be..719cb608c58 100644 --- a/contrib/laspack/Makefile.in +++ b/contrib/laspack/Makefile.in @@ -133,8 +133,8 @@ am__aclocal_m4_deps = \ $(top_srcdir)/m4/exodus.m4 $(top_srcdir)/m4/feexcept.m4 \ $(top_srcdir)/m4/fparser.m4 $(top_srcdir)/m4/glpk.m4 \ $(top_srcdir)/m4/gmv.m4 $(top_srcdir)/m4/gz.m4 \ - $(top_srcdir)/m4/hdf5.m4 $(top_srcdir)/m4/laspack.m4 \ - $(top_srcdir)/m4/libhilbert.m4 \ + $(top_srcdir)/m4/hdf5.m4 $(top_srcdir)/m4/kokkos.m4 \ + $(top_srcdir)/m4/laspack.m4 $(top_srcdir)/m4/libhilbert.m4 \ $(top_srcdir)/m4/libmesh_compiler_features.m4 \ $(top_srcdir)/m4/libmesh_core_features.m4 \ $(top_srcdir)/m4/libmesh_metaphysicl.m4 \ diff --git a/contrib/libHilbert/Makefile.in b/contrib/libHilbert/Makefile.in index 2c594e8ad9b..aeecce0ab1c 100644 --- a/contrib/libHilbert/Makefile.in +++ b/contrib/libHilbert/Makefile.in @@ -133,8 +133,8 @@ am__aclocal_m4_deps = \ $(top_srcdir)/m4/exodus.m4 $(top_srcdir)/m4/feexcept.m4 \ $(top_srcdir)/m4/fparser.m4 $(top_srcdir)/m4/glpk.m4 \ $(top_srcdir)/m4/gmv.m4 $(top_srcdir)/m4/gz.m4 \ - $(top_srcdir)/m4/hdf5.m4 $(top_srcdir)/m4/laspack.m4 \ - $(top_srcdir)/m4/libhilbert.m4 \ + $(top_srcdir)/m4/hdf5.m4 $(top_srcdir)/m4/kokkos.m4 \ + $(top_srcdir)/m4/laspack.m4 $(top_srcdir)/m4/libhilbert.m4 \ $(top_srcdir)/m4/libmesh_compiler_features.m4 \ $(top_srcdir)/m4/libmesh_core_features.m4 \ $(top_srcdir)/m4/libmesh_metaphysicl.m4 \ diff --git a/contrib/metis/Makefile.in b/contrib/metis/Makefile.in index 642793791bf..8c5f1c72fc1 100644 --- a/contrib/metis/Makefile.in +++ b/contrib/metis/Makefile.in @@ -134,8 +134,8 @@ am__aclocal_m4_deps = \ $(top_srcdir)/m4/exodus.m4 $(top_srcdir)/m4/feexcept.m4 \ $(top_srcdir)/m4/fparser.m4 $(top_srcdir)/m4/glpk.m4 \ $(top_srcdir)/m4/gmv.m4 $(top_srcdir)/m4/gz.m4 \ - $(top_srcdir)/m4/hdf5.m4 $(top_srcdir)/m4/laspack.m4 \ - $(top_srcdir)/m4/libhilbert.m4 \ + $(top_srcdir)/m4/hdf5.m4 $(top_srcdir)/m4/kokkos.m4 \ + $(top_srcdir)/m4/laspack.m4 $(top_srcdir)/m4/libhilbert.m4 \ $(top_srcdir)/m4/libmesh_compiler_features.m4 \ $(top_srcdir)/m4/libmesh_core_features.m4 \ $(top_srcdir)/m4/libmesh_metaphysicl.m4 \ diff --git a/contrib/nanoflann/Makefile.in b/contrib/nanoflann/Makefile.in index 0ebeeff7406..2f0309944aa 100644 --- a/contrib/nanoflann/Makefile.in +++ b/contrib/nanoflann/Makefile.in @@ -134,8 +134,8 @@ am__aclocal_m4_deps = \ $(top_srcdir)/m4/exodus.m4 $(top_srcdir)/m4/feexcept.m4 \ $(top_srcdir)/m4/fparser.m4 $(top_srcdir)/m4/glpk.m4 \ $(top_srcdir)/m4/gmv.m4 $(top_srcdir)/m4/gz.m4 \ - $(top_srcdir)/m4/hdf5.m4 $(top_srcdir)/m4/laspack.m4 \ - $(top_srcdir)/m4/libhilbert.m4 \ + $(top_srcdir)/m4/hdf5.m4 $(top_srcdir)/m4/kokkos.m4 \ + $(top_srcdir)/m4/laspack.m4 $(top_srcdir)/m4/libhilbert.m4 \ $(top_srcdir)/m4/libmesh_compiler_features.m4 \ $(top_srcdir)/m4/libmesh_core_features.m4 \ $(top_srcdir)/m4/libmesh_metaphysicl.m4 \ diff --git a/contrib/nemesis/Lib/Makefile.in b/contrib/nemesis/Lib/Makefile.in index 122bd09254d..504a6987660 100644 --- a/contrib/nemesis/Lib/Makefile.in +++ b/contrib/nemesis/Lib/Makefile.in @@ -133,8 +133,8 @@ am__aclocal_m4_deps = \ $(top_srcdir)/m4/exodus.m4 $(top_srcdir)/m4/feexcept.m4 \ $(top_srcdir)/m4/fparser.m4 $(top_srcdir)/m4/glpk.m4 \ $(top_srcdir)/m4/gmv.m4 $(top_srcdir)/m4/gz.m4 \ - $(top_srcdir)/m4/hdf5.m4 $(top_srcdir)/m4/laspack.m4 \ - $(top_srcdir)/m4/libhilbert.m4 \ + $(top_srcdir)/m4/hdf5.m4 $(top_srcdir)/m4/kokkos.m4 \ + $(top_srcdir)/m4/laspack.m4 $(top_srcdir)/m4/libhilbert.m4 \ $(top_srcdir)/m4/libmesh_compiler_features.m4 \ $(top_srcdir)/m4/libmesh_core_features.m4 \ $(top_srcdir)/m4/libmesh_metaphysicl.m4 \ diff --git a/contrib/netgen/Makefile.in b/contrib/netgen/Makefile.in index 5044c6fd1a9..ab79e7eadbb 100644 --- a/contrib/netgen/Makefile.in +++ b/contrib/netgen/Makefile.in @@ -129,8 +129,8 @@ am__aclocal_m4_deps = \ $(top_srcdir)/m4/exodus.m4 $(top_srcdir)/m4/feexcept.m4 \ $(top_srcdir)/m4/fparser.m4 $(top_srcdir)/m4/glpk.m4 \ $(top_srcdir)/m4/gmv.m4 $(top_srcdir)/m4/gz.m4 \ - $(top_srcdir)/m4/hdf5.m4 $(top_srcdir)/m4/laspack.m4 \ - $(top_srcdir)/m4/libhilbert.m4 \ + $(top_srcdir)/m4/hdf5.m4 $(top_srcdir)/m4/kokkos.m4 \ + $(top_srcdir)/m4/laspack.m4 $(top_srcdir)/m4/libhilbert.m4 \ $(top_srcdir)/m4/libmesh_compiler_features.m4 \ $(top_srcdir)/m4/libmesh_core_features.m4 \ $(top_srcdir)/m4/libmesh_metaphysicl.m4 \ diff --git a/contrib/parmetis/Makefile.in b/contrib/parmetis/Makefile.in index c7935e17638..bffd3e98708 100644 --- a/contrib/parmetis/Makefile.in +++ b/contrib/parmetis/Makefile.in @@ -133,8 +133,8 @@ am__aclocal_m4_deps = \ $(top_srcdir)/m4/exodus.m4 $(top_srcdir)/m4/feexcept.m4 \ $(top_srcdir)/m4/fparser.m4 $(top_srcdir)/m4/glpk.m4 \ $(top_srcdir)/m4/gmv.m4 $(top_srcdir)/m4/gz.m4 \ - $(top_srcdir)/m4/hdf5.m4 $(top_srcdir)/m4/laspack.m4 \ - $(top_srcdir)/m4/libhilbert.m4 \ + $(top_srcdir)/m4/hdf5.m4 $(top_srcdir)/m4/kokkos.m4 \ + $(top_srcdir)/m4/laspack.m4 $(top_srcdir)/m4/libhilbert.m4 \ $(top_srcdir)/m4/libmesh_compiler_features.m4 \ $(top_srcdir)/m4/libmesh_core_features.m4 \ $(top_srcdir)/m4/libmesh_metaphysicl.m4 \ diff --git a/contrib/poly2tri/modified/Makefile.in b/contrib/poly2tri/modified/Makefile.in index 8ea3f7cd8cf..124c6c4fc25 100644 --- a/contrib/poly2tri/modified/Makefile.in +++ b/contrib/poly2tri/modified/Makefile.in @@ -134,8 +134,8 @@ am__aclocal_m4_deps = \ $(top_srcdir)/m4/exodus.m4 $(top_srcdir)/m4/feexcept.m4 \ $(top_srcdir)/m4/fparser.m4 $(top_srcdir)/m4/glpk.m4 \ $(top_srcdir)/m4/gmv.m4 $(top_srcdir)/m4/gz.m4 \ - $(top_srcdir)/m4/hdf5.m4 $(top_srcdir)/m4/laspack.m4 \ - $(top_srcdir)/m4/libhilbert.m4 \ + $(top_srcdir)/m4/hdf5.m4 $(top_srcdir)/m4/kokkos.m4 \ + $(top_srcdir)/m4/laspack.m4 $(top_srcdir)/m4/libhilbert.m4 \ $(top_srcdir)/m4/libmesh_compiler_features.m4 \ $(top_srcdir)/m4/libmesh_core_features.m4 \ $(top_srcdir)/m4/libmesh_metaphysicl.m4 \ diff --git a/contrib/qhull/2012.1/Makefile.in b/contrib/qhull/2012.1/Makefile.in index e84b600ef25..a55017a37fe 100644 --- a/contrib/qhull/2012.1/Makefile.in +++ b/contrib/qhull/2012.1/Makefile.in @@ -137,8 +137,8 @@ am__aclocal_m4_deps = \ $(top_srcdir)/m4/exodus.m4 $(top_srcdir)/m4/feexcept.m4 \ $(top_srcdir)/m4/fparser.m4 $(top_srcdir)/m4/glpk.m4 \ $(top_srcdir)/m4/gmv.m4 $(top_srcdir)/m4/gz.m4 \ - $(top_srcdir)/m4/hdf5.m4 $(top_srcdir)/m4/laspack.m4 \ - $(top_srcdir)/m4/libhilbert.m4 \ + $(top_srcdir)/m4/hdf5.m4 $(top_srcdir)/m4/kokkos.m4 \ + $(top_srcdir)/m4/laspack.m4 $(top_srcdir)/m4/libhilbert.m4 \ $(top_srcdir)/m4/libmesh_compiler_features.m4 \ $(top_srcdir)/m4/libmesh_core_features.m4 \ $(top_srcdir)/m4/libmesh_metaphysicl.m4 \ diff --git a/contrib/sfcurves/Makefile.in b/contrib/sfcurves/Makefile.in index ed6554d0ba3..8168d4b2cb1 100644 --- a/contrib/sfcurves/Makefile.in +++ b/contrib/sfcurves/Makefile.in @@ -133,8 +133,8 @@ am__aclocal_m4_deps = \ $(top_srcdir)/m4/exodus.m4 $(top_srcdir)/m4/feexcept.m4 \ $(top_srcdir)/m4/fparser.m4 $(top_srcdir)/m4/glpk.m4 \ $(top_srcdir)/m4/gmv.m4 $(top_srcdir)/m4/gz.m4 \ - $(top_srcdir)/m4/hdf5.m4 $(top_srcdir)/m4/laspack.m4 \ - $(top_srcdir)/m4/libhilbert.m4 \ + $(top_srcdir)/m4/hdf5.m4 $(top_srcdir)/m4/kokkos.m4 \ + $(top_srcdir)/m4/laspack.m4 $(top_srcdir)/m4/libhilbert.m4 \ $(top_srcdir)/m4/libmesh_compiler_features.m4 \ $(top_srcdir)/m4/libmesh_core_features.m4 \ $(top_srcdir)/m4/libmesh_metaphysicl.m4 \ diff --git a/contrib/tecplot/binary/Makefile.in b/contrib/tecplot/binary/Makefile.in index ec79f2ea10a..b144fd8bd10 100644 --- a/contrib/tecplot/binary/Makefile.in +++ b/contrib/tecplot/binary/Makefile.in @@ -129,8 +129,8 @@ am__aclocal_m4_deps = \ $(top_srcdir)/m4/exodus.m4 $(top_srcdir)/m4/feexcept.m4 \ $(top_srcdir)/m4/fparser.m4 $(top_srcdir)/m4/glpk.m4 \ $(top_srcdir)/m4/gmv.m4 $(top_srcdir)/m4/gz.m4 \ - $(top_srcdir)/m4/hdf5.m4 $(top_srcdir)/m4/laspack.m4 \ - $(top_srcdir)/m4/libhilbert.m4 \ + $(top_srcdir)/m4/hdf5.m4 $(top_srcdir)/m4/kokkos.m4 \ + $(top_srcdir)/m4/laspack.m4 $(top_srcdir)/m4/libhilbert.m4 \ $(top_srcdir)/m4/libmesh_compiler_features.m4 \ $(top_srcdir)/m4/libmesh_core_features.m4 \ $(top_srcdir)/m4/libmesh_metaphysicl.m4 \ diff --git a/contrib/tecplot/tecio/Makefile.in b/contrib/tecplot/tecio/Makefile.in index 1edfb7397dd..1430ccfd39f 100644 --- a/contrib/tecplot/tecio/Makefile.in +++ b/contrib/tecplot/tecio/Makefile.in @@ -133,8 +133,8 @@ am__aclocal_m4_deps = \ $(top_srcdir)/m4/exodus.m4 $(top_srcdir)/m4/feexcept.m4 \ $(top_srcdir)/m4/fparser.m4 $(top_srcdir)/m4/glpk.m4 \ $(top_srcdir)/m4/gmv.m4 $(top_srcdir)/m4/gz.m4 \ - $(top_srcdir)/m4/hdf5.m4 $(top_srcdir)/m4/laspack.m4 \ - $(top_srcdir)/m4/libhilbert.m4 \ + $(top_srcdir)/m4/hdf5.m4 $(top_srcdir)/m4/kokkos.m4 \ + $(top_srcdir)/m4/laspack.m4 $(top_srcdir)/m4/libhilbert.m4 \ $(top_srcdir)/m4/libmesh_compiler_features.m4 \ $(top_srcdir)/m4/libmesh_core_features.m4 \ $(top_srcdir)/m4/libmesh_metaphysicl.m4 \ diff --git a/contrib/tetgen/Makefile.in b/contrib/tetgen/Makefile.in index fdecf33a03f..4382803f5d2 100644 --- a/contrib/tetgen/Makefile.in +++ b/contrib/tetgen/Makefile.in @@ -134,8 +134,8 @@ am__aclocal_m4_deps = \ $(top_srcdir)/m4/exodus.m4 $(top_srcdir)/m4/feexcept.m4 \ $(top_srcdir)/m4/fparser.m4 $(top_srcdir)/m4/glpk.m4 \ $(top_srcdir)/m4/gmv.m4 $(top_srcdir)/m4/gz.m4 \ - $(top_srcdir)/m4/hdf5.m4 $(top_srcdir)/m4/laspack.m4 \ - $(top_srcdir)/m4/libhilbert.m4 \ + $(top_srcdir)/m4/hdf5.m4 $(top_srcdir)/m4/kokkos.m4 \ + $(top_srcdir)/m4/laspack.m4 $(top_srcdir)/m4/libhilbert.m4 \ $(top_srcdir)/m4/libmesh_compiler_features.m4 \ $(top_srcdir)/m4/libmesh_core_features.m4 \ $(top_srcdir)/m4/libmesh_metaphysicl.m4 \ diff --git a/contrib/triangle/Makefile.in b/contrib/triangle/Makefile.in index 1e25b331714..6e2c7bff580 100644 --- a/contrib/triangle/Makefile.in +++ b/contrib/triangle/Makefile.in @@ -134,8 +134,8 @@ am__aclocal_m4_deps = \ $(top_srcdir)/m4/exodus.m4 $(top_srcdir)/m4/feexcept.m4 \ $(top_srcdir)/m4/fparser.m4 $(top_srcdir)/m4/glpk.m4 \ $(top_srcdir)/m4/gmv.m4 $(top_srcdir)/m4/gz.m4 \ - $(top_srcdir)/m4/hdf5.m4 $(top_srcdir)/m4/laspack.m4 \ - $(top_srcdir)/m4/libhilbert.m4 \ + $(top_srcdir)/m4/hdf5.m4 $(top_srcdir)/m4/kokkos.m4 \ + $(top_srcdir)/m4/laspack.m4 $(top_srcdir)/m4/libhilbert.m4 \ $(top_srcdir)/m4/libmesh_compiler_features.m4 \ $(top_srcdir)/m4/libmesh_core_features.m4 \ $(top_srcdir)/m4/libmesh_metaphysicl.m4 \ diff --git a/doc/Makefile.in b/doc/Makefile.in index 472cd35389b..ea454fc8e75 100644 --- a/doc/Makefile.in +++ b/doc/Makefile.in @@ -127,8 +127,8 @@ am__aclocal_m4_deps = \ $(top_srcdir)/m4/exodus.m4 $(top_srcdir)/m4/feexcept.m4 \ $(top_srcdir)/m4/fparser.m4 $(top_srcdir)/m4/glpk.m4 \ $(top_srcdir)/m4/gmv.m4 $(top_srcdir)/m4/gz.m4 \ - $(top_srcdir)/m4/hdf5.m4 $(top_srcdir)/m4/laspack.m4 \ - $(top_srcdir)/m4/libhilbert.m4 \ + $(top_srcdir)/m4/hdf5.m4 $(top_srcdir)/m4/kokkos.m4 \ + $(top_srcdir)/m4/laspack.m4 $(top_srcdir)/m4/libhilbert.m4 \ $(top_srcdir)/m4/libmesh_compiler_features.m4 \ $(top_srcdir)/m4/libmesh_core_features.m4 \ $(top_srcdir)/m4/libmesh_metaphysicl.m4 \ diff --git a/doc/html/Makefile.in b/doc/html/Makefile.in index 302703289ee..6da00c1e770 100644 --- a/doc/html/Makefile.in +++ b/doc/html/Makefile.in @@ -131,8 +131,8 @@ am__aclocal_m4_deps = \ $(top_srcdir)/m4/exodus.m4 $(top_srcdir)/m4/feexcept.m4 \ $(top_srcdir)/m4/fparser.m4 $(top_srcdir)/m4/glpk.m4 \ $(top_srcdir)/m4/gmv.m4 $(top_srcdir)/m4/gz.m4 \ - $(top_srcdir)/m4/hdf5.m4 $(top_srcdir)/m4/laspack.m4 \ - $(top_srcdir)/m4/libhilbert.m4 \ + $(top_srcdir)/m4/hdf5.m4 $(top_srcdir)/m4/kokkos.m4 \ + $(top_srcdir)/m4/laspack.m4 $(top_srcdir)/m4/libhilbert.m4 \ $(top_srcdir)/m4/libmesh_compiler_features.m4 \ $(top_srcdir)/m4/libmesh_core_features.m4 \ $(top_srcdir)/m4/libmesh_metaphysicl.m4 \ diff --git a/examples/Makefile.in b/examples/Makefile.in index a662cf88a28..077036760a2 100644 --- a/examples/Makefile.in +++ b/examples/Makefile.in @@ -128,8 +128,8 @@ am__aclocal_m4_deps = \ $(top_srcdir)/m4/exodus.m4 $(top_srcdir)/m4/feexcept.m4 \ $(top_srcdir)/m4/fparser.m4 $(top_srcdir)/m4/glpk.m4 \ $(top_srcdir)/m4/gmv.m4 $(top_srcdir)/m4/gz.m4 \ - $(top_srcdir)/m4/hdf5.m4 $(top_srcdir)/m4/laspack.m4 \ - $(top_srcdir)/m4/libhilbert.m4 \ + $(top_srcdir)/m4/hdf5.m4 $(top_srcdir)/m4/kokkos.m4 \ + $(top_srcdir)/m4/laspack.m4 $(top_srcdir)/m4/libhilbert.m4 \ $(top_srcdir)/m4/libmesh_compiler_features.m4 \ $(top_srcdir)/m4/libmesh_core_features.m4 \ $(top_srcdir)/m4/libmesh_metaphysicl.m4 \ diff --git a/examples/adaptivity/adaptivity_ex1/Makefile.in b/examples/adaptivity/adaptivity_ex1/Makefile.in index cc396d29f42..a6aec75cb11 100644 --- a/examples/adaptivity/adaptivity_ex1/Makefile.in +++ b/examples/adaptivity/adaptivity_ex1/Makefile.in @@ -135,8 +135,8 @@ am__aclocal_m4_deps = \ $(top_srcdir)/m4/exodus.m4 $(top_srcdir)/m4/feexcept.m4 \ $(top_srcdir)/m4/fparser.m4 $(top_srcdir)/m4/glpk.m4 \ $(top_srcdir)/m4/gmv.m4 $(top_srcdir)/m4/gz.m4 \ - $(top_srcdir)/m4/hdf5.m4 $(top_srcdir)/m4/laspack.m4 \ - $(top_srcdir)/m4/libhilbert.m4 \ + $(top_srcdir)/m4/hdf5.m4 $(top_srcdir)/m4/kokkos.m4 \ + $(top_srcdir)/m4/laspack.m4 $(top_srcdir)/m4/libhilbert.m4 \ $(top_srcdir)/m4/libmesh_compiler_features.m4 \ $(top_srcdir)/m4/libmesh_core_features.m4 \ $(top_srcdir)/m4/libmesh_metaphysicl.m4 \ diff --git a/examples/adaptivity/adaptivity_ex2/Makefile.in b/examples/adaptivity/adaptivity_ex2/Makefile.in index 9c39660be70..e7eaf713a37 100644 --- a/examples/adaptivity/adaptivity_ex2/Makefile.in +++ b/examples/adaptivity/adaptivity_ex2/Makefile.in @@ -139,8 +139,8 @@ am__aclocal_m4_deps = \ $(top_srcdir)/m4/exodus.m4 $(top_srcdir)/m4/feexcept.m4 \ $(top_srcdir)/m4/fparser.m4 $(top_srcdir)/m4/glpk.m4 \ $(top_srcdir)/m4/gmv.m4 $(top_srcdir)/m4/gz.m4 \ - $(top_srcdir)/m4/hdf5.m4 $(top_srcdir)/m4/laspack.m4 \ - $(top_srcdir)/m4/libhilbert.m4 \ + $(top_srcdir)/m4/hdf5.m4 $(top_srcdir)/m4/kokkos.m4 \ + $(top_srcdir)/m4/laspack.m4 $(top_srcdir)/m4/libhilbert.m4 \ $(top_srcdir)/m4/libmesh_compiler_features.m4 \ $(top_srcdir)/m4/libmesh_core_features.m4 \ $(top_srcdir)/m4/libmesh_metaphysicl.m4 \ diff --git a/examples/adaptivity/adaptivity_ex3/Makefile.in b/examples/adaptivity/adaptivity_ex3/Makefile.in index 5f7d55a3477..95f8947ab05 100644 --- a/examples/adaptivity/adaptivity_ex3/Makefile.in +++ b/examples/adaptivity/adaptivity_ex3/Makefile.in @@ -136,8 +136,8 @@ am__aclocal_m4_deps = \ $(top_srcdir)/m4/exodus.m4 $(top_srcdir)/m4/feexcept.m4 \ $(top_srcdir)/m4/fparser.m4 $(top_srcdir)/m4/glpk.m4 \ $(top_srcdir)/m4/gmv.m4 $(top_srcdir)/m4/gz.m4 \ - $(top_srcdir)/m4/hdf5.m4 $(top_srcdir)/m4/laspack.m4 \ - $(top_srcdir)/m4/libhilbert.m4 \ + $(top_srcdir)/m4/hdf5.m4 $(top_srcdir)/m4/kokkos.m4 \ + $(top_srcdir)/m4/laspack.m4 $(top_srcdir)/m4/libhilbert.m4 \ $(top_srcdir)/m4/libmesh_compiler_features.m4 \ $(top_srcdir)/m4/libmesh_core_features.m4 \ $(top_srcdir)/m4/libmesh_metaphysicl.m4 \ diff --git a/examples/adaptivity/adaptivity_ex4/Makefile.in b/examples/adaptivity/adaptivity_ex4/Makefile.in index f013de36926..342e76ac0a4 100644 --- a/examples/adaptivity/adaptivity_ex4/Makefile.in +++ b/examples/adaptivity/adaptivity_ex4/Makefile.in @@ -136,8 +136,8 @@ am__aclocal_m4_deps = \ $(top_srcdir)/m4/exodus.m4 $(top_srcdir)/m4/feexcept.m4 \ $(top_srcdir)/m4/fparser.m4 $(top_srcdir)/m4/glpk.m4 \ $(top_srcdir)/m4/gmv.m4 $(top_srcdir)/m4/gz.m4 \ - $(top_srcdir)/m4/hdf5.m4 $(top_srcdir)/m4/laspack.m4 \ - $(top_srcdir)/m4/libhilbert.m4 \ + $(top_srcdir)/m4/hdf5.m4 $(top_srcdir)/m4/kokkos.m4 \ + $(top_srcdir)/m4/laspack.m4 $(top_srcdir)/m4/libhilbert.m4 \ $(top_srcdir)/m4/libmesh_compiler_features.m4 \ $(top_srcdir)/m4/libmesh_core_features.m4 \ $(top_srcdir)/m4/libmesh_metaphysicl.m4 \ diff --git a/examples/adaptivity/adaptivity_ex5/Makefile.in b/examples/adaptivity/adaptivity_ex5/Makefile.in index 7deb22866e0..4209d105002 100644 --- a/examples/adaptivity/adaptivity_ex5/Makefile.in +++ b/examples/adaptivity/adaptivity_ex5/Makefile.in @@ -135,8 +135,8 @@ am__aclocal_m4_deps = \ $(top_srcdir)/m4/exodus.m4 $(top_srcdir)/m4/feexcept.m4 \ $(top_srcdir)/m4/fparser.m4 $(top_srcdir)/m4/glpk.m4 \ $(top_srcdir)/m4/gmv.m4 $(top_srcdir)/m4/gz.m4 \ - $(top_srcdir)/m4/hdf5.m4 $(top_srcdir)/m4/laspack.m4 \ - $(top_srcdir)/m4/libhilbert.m4 \ + $(top_srcdir)/m4/hdf5.m4 $(top_srcdir)/m4/kokkos.m4 \ + $(top_srcdir)/m4/laspack.m4 $(top_srcdir)/m4/libhilbert.m4 \ $(top_srcdir)/m4/libmesh_compiler_features.m4 \ $(top_srcdir)/m4/libmesh_core_features.m4 \ $(top_srcdir)/m4/libmesh_metaphysicl.m4 \ diff --git a/examples/adjoints/adjoints_ex1/Makefile.in b/examples/adjoints/adjoints_ex1/Makefile.in index 9559de61b70..9c327983c52 100644 --- a/examples/adjoints/adjoints_ex1/Makefile.in +++ b/examples/adjoints/adjoints_ex1/Makefile.in @@ -136,8 +136,8 @@ am__aclocal_m4_deps = \ $(top_srcdir)/m4/exodus.m4 $(top_srcdir)/m4/feexcept.m4 \ $(top_srcdir)/m4/fparser.m4 $(top_srcdir)/m4/glpk.m4 \ $(top_srcdir)/m4/gmv.m4 $(top_srcdir)/m4/gz.m4 \ - $(top_srcdir)/m4/hdf5.m4 $(top_srcdir)/m4/laspack.m4 \ - $(top_srcdir)/m4/libhilbert.m4 \ + $(top_srcdir)/m4/hdf5.m4 $(top_srcdir)/m4/kokkos.m4 \ + $(top_srcdir)/m4/laspack.m4 $(top_srcdir)/m4/libhilbert.m4 \ $(top_srcdir)/m4/libmesh_compiler_features.m4 \ $(top_srcdir)/m4/libmesh_core_features.m4 \ $(top_srcdir)/m4/libmesh_metaphysicl.m4 \ diff --git a/examples/adjoints/adjoints_ex2/Makefile.in b/examples/adjoints/adjoints_ex2/Makefile.in index 1ed48513c88..5c7101c918f 100644 --- a/examples/adjoints/adjoints_ex2/Makefile.in +++ b/examples/adjoints/adjoints_ex2/Makefile.in @@ -139,8 +139,8 @@ am__aclocal_m4_deps = \ $(top_srcdir)/m4/exodus.m4 $(top_srcdir)/m4/feexcept.m4 \ $(top_srcdir)/m4/fparser.m4 $(top_srcdir)/m4/glpk.m4 \ $(top_srcdir)/m4/gmv.m4 $(top_srcdir)/m4/gz.m4 \ - $(top_srcdir)/m4/hdf5.m4 $(top_srcdir)/m4/laspack.m4 \ - $(top_srcdir)/m4/libhilbert.m4 \ + $(top_srcdir)/m4/hdf5.m4 $(top_srcdir)/m4/kokkos.m4 \ + $(top_srcdir)/m4/laspack.m4 $(top_srcdir)/m4/libhilbert.m4 \ $(top_srcdir)/m4/libmesh_compiler_features.m4 \ $(top_srcdir)/m4/libmesh_core_features.m4 \ $(top_srcdir)/m4/libmesh_metaphysicl.m4 \ diff --git a/examples/adjoints/adjoints_ex3/Makefile.in b/examples/adjoints/adjoints_ex3/Makefile.in index 32dac179bc2..af43b6133bd 100644 --- a/examples/adjoints/adjoints_ex3/Makefile.in +++ b/examples/adjoints/adjoints_ex3/Makefile.in @@ -139,8 +139,8 @@ am__aclocal_m4_deps = \ $(top_srcdir)/m4/exodus.m4 $(top_srcdir)/m4/feexcept.m4 \ $(top_srcdir)/m4/fparser.m4 $(top_srcdir)/m4/glpk.m4 \ $(top_srcdir)/m4/gmv.m4 $(top_srcdir)/m4/gz.m4 \ - $(top_srcdir)/m4/hdf5.m4 $(top_srcdir)/m4/laspack.m4 \ - $(top_srcdir)/m4/libhilbert.m4 \ + $(top_srcdir)/m4/hdf5.m4 $(top_srcdir)/m4/kokkos.m4 \ + $(top_srcdir)/m4/laspack.m4 $(top_srcdir)/m4/libhilbert.m4 \ $(top_srcdir)/m4/libmesh_compiler_features.m4 \ $(top_srcdir)/m4/libmesh_core_features.m4 \ $(top_srcdir)/m4/libmesh_metaphysicl.m4 \ diff --git a/examples/adjoints/adjoints_ex4/Makefile.in b/examples/adjoints/adjoints_ex4/Makefile.in index 2b6f750b92c..a25dce19fa7 100644 --- a/examples/adjoints/adjoints_ex4/Makefile.in +++ b/examples/adjoints/adjoints_ex4/Makefile.in @@ -139,8 +139,8 @@ am__aclocal_m4_deps = \ $(top_srcdir)/m4/exodus.m4 $(top_srcdir)/m4/feexcept.m4 \ $(top_srcdir)/m4/fparser.m4 $(top_srcdir)/m4/glpk.m4 \ $(top_srcdir)/m4/gmv.m4 $(top_srcdir)/m4/gz.m4 \ - $(top_srcdir)/m4/hdf5.m4 $(top_srcdir)/m4/laspack.m4 \ - $(top_srcdir)/m4/libhilbert.m4 \ + $(top_srcdir)/m4/hdf5.m4 $(top_srcdir)/m4/kokkos.m4 \ + $(top_srcdir)/m4/laspack.m4 $(top_srcdir)/m4/libhilbert.m4 \ $(top_srcdir)/m4/libmesh_compiler_features.m4 \ $(top_srcdir)/m4/libmesh_core_features.m4 \ $(top_srcdir)/m4/libmesh_metaphysicl.m4 \ diff --git a/examples/adjoints/adjoints_ex5/Makefile.in b/examples/adjoints/adjoints_ex5/Makefile.in index 077e3ba31f9..dc136268bc0 100644 --- a/examples/adjoints/adjoints_ex5/Makefile.in +++ b/examples/adjoints/adjoints_ex5/Makefile.in @@ -139,8 +139,8 @@ am__aclocal_m4_deps = \ $(top_srcdir)/m4/exodus.m4 $(top_srcdir)/m4/feexcept.m4 \ $(top_srcdir)/m4/fparser.m4 $(top_srcdir)/m4/glpk.m4 \ $(top_srcdir)/m4/gmv.m4 $(top_srcdir)/m4/gz.m4 \ - $(top_srcdir)/m4/hdf5.m4 $(top_srcdir)/m4/laspack.m4 \ - $(top_srcdir)/m4/libhilbert.m4 \ + $(top_srcdir)/m4/hdf5.m4 $(top_srcdir)/m4/kokkos.m4 \ + $(top_srcdir)/m4/laspack.m4 $(top_srcdir)/m4/libhilbert.m4 \ $(top_srcdir)/m4/libmesh_compiler_features.m4 \ $(top_srcdir)/m4/libmesh_core_features.m4 \ $(top_srcdir)/m4/libmesh_metaphysicl.m4 \ diff --git a/examples/adjoints/adjoints_ex6/Makefile.in b/examples/adjoints/adjoints_ex6/Makefile.in index e8a09524ff0..84ce2e00be2 100644 --- a/examples/adjoints/adjoints_ex6/Makefile.in +++ b/examples/adjoints/adjoints_ex6/Makefile.in @@ -139,8 +139,8 @@ am__aclocal_m4_deps = \ $(top_srcdir)/m4/exodus.m4 $(top_srcdir)/m4/feexcept.m4 \ $(top_srcdir)/m4/fparser.m4 $(top_srcdir)/m4/glpk.m4 \ $(top_srcdir)/m4/gmv.m4 $(top_srcdir)/m4/gz.m4 \ - $(top_srcdir)/m4/hdf5.m4 $(top_srcdir)/m4/laspack.m4 \ - $(top_srcdir)/m4/libhilbert.m4 \ + $(top_srcdir)/m4/hdf5.m4 $(top_srcdir)/m4/kokkos.m4 \ + $(top_srcdir)/m4/laspack.m4 $(top_srcdir)/m4/libhilbert.m4 \ $(top_srcdir)/m4/libmesh_compiler_features.m4 \ $(top_srcdir)/m4/libmesh_core_features.m4 \ $(top_srcdir)/m4/libmesh_metaphysicl.m4 \ diff --git a/examples/adjoints/adjoints_ex7/Makefile.in b/examples/adjoints/adjoints_ex7/Makefile.in index e5a98c02318..554c25d843d 100644 --- a/examples/adjoints/adjoints_ex7/Makefile.in +++ b/examples/adjoints/adjoints_ex7/Makefile.in @@ -139,8 +139,8 @@ am__aclocal_m4_deps = \ $(top_srcdir)/m4/exodus.m4 $(top_srcdir)/m4/feexcept.m4 \ $(top_srcdir)/m4/fparser.m4 $(top_srcdir)/m4/glpk.m4 \ $(top_srcdir)/m4/gmv.m4 $(top_srcdir)/m4/gz.m4 \ - $(top_srcdir)/m4/hdf5.m4 $(top_srcdir)/m4/laspack.m4 \ - $(top_srcdir)/m4/libhilbert.m4 \ + $(top_srcdir)/m4/hdf5.m4 $(top_srcdir)/m4/kokkos.m4 \ + $(top_srcdir)/m4/laspack.m4 $(top_srcdir)/m4/libhilbert.m4 \ $(top_srcdir)/m4/libmesh_compiler_features.m4 \ $(top_srcdir)/m4/libmesh_core_features.m4 \ $(top_srcdir)/m4/libmesh_metaphysicl.m4 \ diff --git a/examples/eigenproblems/eigenproblems_ex1/Makefile.in b/examples/eigenproblems/eigenproblems_ex1/Makefile.in index d6696c9657b..4edd5caf7ac 100644 --- a/examples/eigenproblems/eigenproblems_ex1/Makefile.in +++ b/examples/eigenproblems/eigenproblems_ex1/Makefile.in @@ -135,8 +135,8 @@ am__aclocal_m4_deps = \ $(top_srcdir)/m4/exodus.m4 $(top_srcdir)/m4/feexcept.m4 \ $(top_srcdir)/m4/fparser.m4 $(top_srcdir)/m4/glpk.m4 \ $(top_srcdir)/m4/gmv.m4 $(top_srcdir)/m4/gz.m4 \ - $(top_srcdir)/m4/hdf5.m4 $(top_srcdir)/m4/laspack.m4 \ - $(top_srcdir)/m4/libhilbert.m4 \ + $(top_srcdir)/m4/hdf5.m4 $(top_srcdir)/m4/kokkos.m4 \ + $(top_srcdir)/m4/laspack.m4 $(top_srcdir)/m4/libhilbert.m4 \ $(top_srcdir)/m4/libmesh_compiler_features.m4 \ $(top_srcdir)/m4/libmesh_core_features.m4 \ $(top_srcdir)/m4/libmesh_metaphysicl.m4 \ diff --git a/examples/eigenproblems/eigenproblems_ex2/Makefile.in b/examples/eigenproblems/eigenproblems_ex2/Makefile.in index b2a5fb48010..c50b4845893 100644 --- a/examples/eigenproblems/eigenproblems_ex2/Makefile.in +++ b/examples/eigenproblems/eigenproblems_ex2/Makefile.in @@ -135,8 +135,8 @@ am__aclocal_m4_deps = \ $(top_srcdir)/m4/exodus.m4 $(top_srcdir)/m4/feexcept.m4 \ $(top_srcdir)/m4/fparser.m4 $(top_srcdir)/m4/glpk.m4 \ $(top_srcdir)/m4/gmv.m4 $(top_srcdir)/m4/gz.m4 \ - $(top_srcdir)/m4/hdf5.m4 $(top_srcdir)/m4/laspack.m4 \ - $(top_srcdir)/m4/libhilbert.m4 \ + $(top_srcdir)/m4/hdf5.m4 $(top_srcdir)/m4/kokkos.m4 \ + $(top_srcdir)/m4/laspack.m4 $(top_srcdir)/m4/libhilbert.m4 \ $(top_srcdir)/m4/libmesh_compiler_features.m4 \ $(top_srcdir)/m4/libmesh_core_features.m4 \ $(top_srcdir)/m4/libmesh_metaphysicl.m4 \ diff --git a/examples/eigenproblems/eigenproblems_ex3/Makefile.in b/examples/eigenproblems/eigenproblems_ex3/Makefile.in index 33072d3d79b..98ea092c236 100644 --- a/examples/eigenproblems/eigenproblems_ex3/Makefile.in +++ b/examples/eigenproblems/eigenproblems_ex3/Makefile.in @@ -136,8 +136,8 @@ am__aclocal_m4_deps = \ $(top_srcdir)/m4/exodus.m4 $(top_srcdir)/m4/feexcept.m4 \ $(top_srcdir)/m4/fparser.m4 $(top_srcdir)/m4/glpk.m4 \ $(top_srcdir)/m4/gmv.m4 $(top_srcdir)/m4/gz.m4 \ - $(top_srcdir)/m4/hdf5.m4 $(top_srcdir)/m4/laspack.m4 \ - $(top_srcdir)/m4/libhilbert.m4 \ + $(top_srcdir)/m4/hdf5.m4 $(top_srcdir)/m4/kokkos.m4 \ + $(top_srcdir)/m4/laspack.m4 $(top_srcdir)/m4/libhilbert.m4 \ $(top_srcdir)/m4/libmesh_compiler_features.m4 \ $(top_srcdir)/m4/libmesh_core_features.m4 \ $(top_srcdir)/m4/libmesh_metaphysicl.m4 \ diff --git a/examples/eigenproblems/eigenproblems_ex4/Makefile.in b/examples/eigenproblems/eigenproblems_ex4/Makefile.in index 585db452640..13bba4fc472 100644 --- a/examples/eigenproblems/eigenproblems_ex4/Makefile.in +++ b/examples/eigenproblems/eigenproblems_ex4/Makefile.in @@ -135,8 +135,8 @@ am__aclocal_m4_deps = \ $(top_srcdir)/m4/exodus.m4 $(top_srcdir)/m4/feexcept.m4 \ $(top_srcdir)/m4/fparser.m4 $(top_srcdir)/m4/glpk.m4 \ $(top_srcdir)/m4/gmv.m4 $(top_srcdir)/m4/gz.m4 \ - $(top_srcdir)/m4/hdf5.m4 $(top_srcdir)/m4/laspack.m4 \ - $(top_srcdir)/m4/libhilbert.m4 \ + $(top_srcdir)/m4/hdf5.m4 $(top_srcdir)/m4/kokkos.m4 \ + $(top_srcdir)/m4/laspack.m4 $(top_srcdir)/m4/libhilbert.m4 \ $(top_srcdir)/m4/libmesh_compiler_features.m4 \ $(top_srcdir)/m4/libmesh_core_features.m4 \ $(top_srcdir)/m4/libmesh_metaphysicl.m4 \ diff --git a/examples/fem_system/fem_system_ex1/Makefile.in b/examples/fem_system/fem_system_ex1/Makefile.in index 25e7f610ded..af393f1e43b 100644 --- a/examples/fem_system/fem_system_ex1/Makefile.in +++ b/examples/fem_system/fem_system_ex1/Makefile.in @@ -136,8 +136,8 @@ am__aclocal_m4_deps = \ $(top_srcdir)/m4/exodus.m4 $(top_srcdir)/m4/feexcept.m4 \ $(top_srcdir)/m4/fparser.m4 $(top_srcdir)/m4/glpk.m4 \ $(top_srcdir)/m4/gmv.m4 $(top_srcdir)/m4/gz.m4 \ - $(top_srcdir)/m4/hdf5.m4 $(top_srcdir)/m4/laspack.m4 \ - $(top_srcdir)/m4/libhilbert.m4 \ + $(top_srcdir)/m4/hdf5.m4 $(top_srcdir)/m4/kokkos.m4 \ + $(top_srcdir)/m4/laspack.m4 $(top_srcdir)/m4/libhilbert.m4 \ $(top_srcdir)/m4/libmesh_compiler_features.m4 \ $(top_srcdir)/m4/libmesh_core_features.m4 \ $(top_srcdir)/m4/libmesh_metaphysicl.m4 \ diff --git a/examples/fem_system/fem_system_ex2/Makefile.in b/examples/fem_system/fem_system_ex2/Makefile.in index 8b30230a3b1..94b065178b5 100644 --- a/examples/fem_system/fem_system_ex2/Makefile.in +++ b/examples/fem_system/fem_system_ex2/Makefile.in @@ -136,8 +136,8 @@ am__aclocal_m4_deps = \ $(top_srcdir)/m4/exodus.m4 $(top_srcdir)/m4/feexcept.m4 \ $(top_srcdir)/m4/fparser.m4 $(top_srcdir)/m4/glpk.m4 \ $(top_srcdir)/m4/gmv.m4 $(top_srcdir)/m4/gz.m4 \ - $(top_srcdir)/m4/hdf5.m4 $(top_srcdir)/m4/laspack.m4 \ - $(top_srcdir)/m4/libhilbert.m4 \ + $(top_srcdir)/m4/hdf5.m4 $(top_srcdir)/m4/kokkos.m4 \ + $(top_srcdir)/m4/laspack.m4 $(top_srcdir)/m4/libhilbert.m4 \ $(top_srcdir)/m4/libmesh_compiler_features.m4 \ $(top_srcdir)/m4/libmesh_core_features.m4 \ $(top_srcdir)/m4/libmesh_metaphysicl.m4 \ diff --git a/examples/fem_system/fem_system_ex3/Makefile.in b/examples/fem_system/fem_system_ex3/Makefile.in index 2d141f77288..4e15a0f6abf 100644 --- a/examples/fem_system/fem_system_ex3/Makefile.in +++ b/examples/fem_system/fem_system_ex3/Makefile.in @@ -136,8 +136,8 @@ am__aclocal_m4_deps = \ $(top_srcdir)/m4/exodus.m4 $(top_srcdir)/m4/feexcept.m4 \ $(top_srcdir)/m4/fparser.m4 $(top_srcdir)/m4/glpk.m4 \ $(top_srcdir)/m4/gmv.m4 $(top_srcdir)/m4/gz.m4 \ - $(top_srcdir)/m4/hdf5.m4 $(top_srcdir)/m4/laspack.m4 \ - $(top_srcdir)/m4/libhilbert.m4 \ + $(top_srcdir)/m4/hdf5.m4 $(top_srcdir)/m4/kokkos.m4 \ + $(top_srcdir)/m4/laspack.m4 $(top_srcdir)/m4/libhilbert.m4 \ $(top_srcdir)/m4/libmesh_compiler_features.m4 \ $(top_srcdir)/m4/libmesh_core_features.m4 \ $(top_srcdir)/m4/libmesh_metaphysicl.m4 \ diff --git a/examples/fem_system/fem_system_ex4/Makefile.in b/examples/fem_system/fem_system_ex4/Makefile.in index 522bb49f8e9..a878d2f908d 100644 --- a/examples/fem_system/fem_system_ex4/Makefile.in +++ b/examples/fem_system/fem_system_ex4/Makefile.in @@ -136,8 +136,8 @@ am__aclocal_m4_deps = \ $(top_srcdir)/m4/exodus.m4 $(top_srcdir)/m4/feexcept.m4 \ $(top_srcdir)/m4/fparser.m4 $(top_srcdir)/m4/glpk.m4 \ $(top_srcdir)/m4/gmv.m4 $(top_srcdir)/m4/gz.m4 \ - $(top_srcdir)/m4/hdf5.m4 $(top_srcdir)/m4/laspack.m4 \ - $(top_srcdir)/m4/libhilbert.m4 \ + $(top_srcdir)/m4/hdf5.m4 $(top_srcdir)/m4/kokkos.m4 \ + $(top_srcdir)/m4/laspack.m4 $(top_srcdir)/m4/libhilbert.m4 \ $(top_srcdir)/m4/libmesh_compiler_features.m4 \ $(top_srcdir)/m4/libmesh_core_features.m4 \ $(top_srcdir)/m4/libmesh_metaphysicl.m4 \ diff --git a/examples/fem_system/fem_system_ex5/Makefile.in b/examples/fem_system/fem_system_ex5/Makefile.in index 01fb482aa91..3c49fd719eb 100644 --- a/examples/fem_system/fem_system_ex5/Makefile.in +++ b/examples/fem_system/fem_system_ex5/Makefile.in @@ -139,8 +139,8 @@ am__aclocal_m4_deps = \ $(top_srcdir)/m4/exodus.m4 $(top_srcdir)/m4/feexcept.m4 \ $(top_srcdir)/m4/fparser.m4 $(top_srcdir)/m4/glpk.m4 \ $(top_srcdir)/m4/gmv.m4 $(top_srcdir)/m4/gz.m4 \ - $(top_srcdir)/m4/hdf5.m4 $(top_srcdir)/m4/laspack.m4 \ - $(top_srcdir)/m4/libhilbert.m4 \ + $(top_srcdir)/m4/hdf5.m4 $(top_srcdir)/m4/kokkos.m4 \ + $(top_srcdir)/m4/laspack.m4 $(top_srcdir)/m4/libhilbert.m4 \ $(top_srcdir)/m4/libmesh_compiler_features.m4 \ $(top_srcdir)/m4/libmesh_core_features.m4 \ $(top_srcdir)/m4/libmesh_metaphysicl.m4 \ diff --git a/examples/introduction/introduction_ex1/Makefile.in b/examples/introduction/introduction_ex1/Makefile.in index e8308c46d86..eae0b4b5d6b 100644 --- a/examples/introduction/introduction_ex1/Makefile.in +++ b/examples/introduction/introduction_ex1/Makefile.in @@ -135,8 +135,8 @@ am__aclocal_m4_deps = \ $(top_srcdir)/m4/exodus.m4 $(top_srcdir)/m4/feexcept.m4 \ $(top_srcdir)/m4/fparser.m4 $(top_srcdir)/m4/glpk.m4 \ $(top_srcdir)/m4/gmv.m4 $(top_srcdir)/m4/gz.m4 \ - $(top_srcdir)/m4/hdf5.m4 $(top_srcdir)/m4/laspack.m4 \ - $(top_srcdir)/m4/libhilbert.m4 \ + $(top_srcdir)/m4/hdf5.m4 $(top_srcdir)/m4/kokkos.m4 \ + $(top_srcdir)/m4/laspack.m4 $(top_srcdir)/m4/libhilbert.m4 \ $(top_srcdir)/m4/libmesh_compiler_features.m4 \ $(top_srcdir)/m4/libmesh_core_features.m4 \ $(top_srcdir)/m4/libmesh_metaphysicl.m4 \ diff --git a/examples/introduction/introduction_ex2/Makefile.in b/examples/introduction/introduction_ex2/Makefile.in index 36d5f45eee7..0599b0283c5 100644 --- a/examples/introduction/introduction_ex2/Makefile.in +++ b/examples/introduction/introduction_ex2/Makefile.in @@ -135,8 +135,8 @@ am__aclocal_m4_deps = \ $(top_srcdir)/m4/exodus.m4 $(top_srcdir)/m4/feexcept.m4 \ $(top_srcdir)/m4/fparser.m4 $(top_srcdir)/m4/glpk.m4 \ $(top_srcdir)/m4/gmv.m4 $(top_srcdir)/m4/gz.m4 \ - $(top_srcdir)/m4/hdf5.m4 $(top_srcdir)/m4/laspack.m4 \ - $(top_srcdir)/m4/libhilbert.m4 \ + $(top_srcdir)/m4/hdf5.m4 $(top_srcdir)/m4/kokkos.m4 \ + $(top_srcdir)/m4/laspack.m4 $(top_srcdir)/m4/libhilbert.m4 \ $(top_srcdir)/m4/libmesh_compiler_features.m4 \ $(top_srcdir)/m4/libmesh_core_features.m4 \ $(top_srcdir)/m4/libmesh_metaphysicl.m4 \ diff --git a/examples/introduction/introduction_ex3/Makefile.in b/examples/introduction/introduction_ex3/Makefile.in index f9d6287a98e..6b7f3ca880e 100644 --- a/examples/introduction/introduction_ex3/Makefile.in +++ b/examples/introduction/introduction_ex3/Makefile.in @@ -135,8 +135,8 @@ am__aclocal_m4_deps = \ $(top_srcdir)/m4/exodus.m4 $(top_srcdir)/m4/feexcept.m4 \ $(top_srcdir)/m4/fparser.m4 $(top_srcdir)/m4/glpk.m4 \ $(top_srcdir)/m4/gmv.m4 $(top_srcdir)/m4/gz.m4 \ - $(top_srcdir)/m4/hdf5.m4 $(top_srcdir)/m4/laspack.m4 \ - $(top_srcdir)/m4/libhilbert.m4 \ + $(top_srcdir)/m4/hdf5.m4 $(top_srcdir)/m4/kokkos.m4 \ + $(top_srcdir)/m4/laspack.m4 $(top_srcdir)/m4/libhilbert.m4 \ $(top_srcdir)/m4/libmesh_compiler_features.m4 \ $(top_srcdir)/m4/libmesh_core_features.m4 \ $(top_srcdir)/m4/libmesh_metaphysicl.m4 \ diff --git a/examples/introduction/introduction_ex4/Makefile.in b/examples/introduction/introduction_ex4/Makefile.in index 2d2474a658f..acba79a972f 100644 --- a/examples/introduction/introduction_ex4/Makefile.in +++ b/examples/introduction/introduction_ex4/Makefile.in @@ -135,8 +135,8 @@ am__aclocal_m4_deps = \ $(top_srcdir)/m4/exodus.m4 $(top_srcdir)/m4/feexcept.m4 \ $(top_srcdir)/m4/fparser.m4 $(top_srcdir)/m4/glpk.m4 \ $(top_srcdir)/m4/gmv.m4 $(top_srcdir)/m4/gz.m4 \ - $(top_srcdir)/m4/hdf5.m4 $(top_srcdir)/m4/laspack.m4 \ - $(top_srcdir)/m4/libhilbert.m4 \ + $(top_srcdir)/m4/hdf5.m4 $(top_srcdir)/m4/kokkos.m4 \ + $(top_srcdir)/m4/laspack.m4 $(top_srcdir)/m4/libhilbert.m4 \ $(top_srcdir)/m4/libmesh_compiler_features.m4 \ $(top_srcdir)/m4/libmesh_core_features.m4 \ $(top_srcdir)/m4/libmesh_metaphysicl.m4 \ diff --git a/examples/introduction/introduction_ex5/Makefile.in b/examples/introduction/introduction_ex5/Makefile.in index 437ce7b05f2..49f18758674 100644 --- a/examples/introduction/introduction_ex5/Makefile.in +++ b/examples/introduction/introduction_ex5/Makefile.in @@ -135,8 +135,8 @@ am__aclocal_m4_deps = \ $(top_srcdir)/m4/exodus.m4 $(top_srcdir)/m4/feexcept.m4 \ $(top_srcdir)/m4/fparser.m4 $(top_srcdir)/m4/glpk.m4 \ $(top_srcdir)/m4/gmv.m4 $(top_srcdir)/m4/gz.m4 \ - $(top_srcdir)/m4/hdf5.m4 $(top_srcdir)/m4/laspack.m4 \ - $(top_srcdir)/m4/libhilbert.m4 \ + $(top_srcdir)/m4/hdf5.m4 $(top_srcdir)/m4/kokkos.m4 \ + $(top_srcdir)/m4/laspack.m4 $(top_srcdir)/m4/libhilbert.m4 \ $(top_srcdir)/m4/libmesh_compiler_features.m4 \ $(top_srcdir)/m4/libmesh_core_features.m4 \ $(top_srcdir)/m4/libmesh_metaphysicl.m4 \ diff --git a/examples/miscellaneous/miscellaneous_ex1/Makefile.in b/examples/miscellaneous/miscellaneous_ex1/Makefile.in index 9bcaf44480c..b5e87003692 100644 --- a/examples/miscellaneous/miscellaneous_ex1/Makefile.in +++ b/examples/miscellaneous/miscellaneous_ex1/Makefile.in @@ -135,8 +135,8 @@ am__aclocal_m4_deps = \ $(top_srcdir)/m4/exodus.m4 $(top_srcdir)/m4/feexcept.m4 \ $(top_srcdir)/m4/fparser.m4 $(top_srcdir)/m4/glpk.m4 \ $(top_srcdir)/m4/gmv.m4 $(top_srcdir)/m4/gz.m4 \ - $(top_srcdir)/m4/hdf5.m4 $(top_srcdir)/m4/laspack.m4 \ - $(top_srcdir)/m4/libhilbert.m4 \ + $(top_srcdir)/m4/hdf5.m4 $(top_srcdir)/m4/kokkos.m4 \ + $(top_srcdir)/m4/laspack.m4 $(top_srcdir)/m4/libhilbert.m4 \ $(top_srcdir)/m4/libmesh_compiler_features.m4 \ $(top_srcdir)/m4/libmesh_core_features.m4 \ $(top_srcdir)/m4/libmesh_metaphysicl.m4 \ diff --git a/examples/miscellaneous/miscellaneous_ex10/Makefile.in b/examples/miscellaneous/miscellaneous_ex10/Makefile.in index bf721ec793f..95a115aeebb 100644 --- a/examples/miscellaneous/miscellaneous_ex10/Makefile.in +++ b/examples/miscellaneous/miscellaneous_ex10/Makefile.in @@ -135,8 +135,8 @@ am__aclocal_m4_deps = \ $(top_srcdir)/m4/exodus.m4 $(top_srcdir)/m4/feexcept.m4 \ $(top_srcdir)/m4/fparser.m4 $(top_srcdir)/m4/glpk.m4 \ $(top_srcdir)/m4/gmv.m4 $(top_srcdir)/m4/gz.m4 \ - $(top_srcdir)/m4/hdf5.m4 $(top_srcdir)/m4/laspack.m4 \ - $(top_srcdir)/m4/libhilbert.m4 \ + $(top_srcdir)/m4/hdf5.m4 $(top_srcdir)/m4/kokkos.m4 \ + $(top_srcdir)/m4/laspack.m4 $(top_srcdir)/m4/libhilbert.m4 \ $(top_srcdir)/m4/libmesh_compiler_features.m4 \ $(top_srcdir)/m4/libmesh_core_features.m4 \ $(top_srcdir)/m4/libmesh_metaphysicl.m4 \ diff --git a/examples/miscellaneous/miscellaneous_ex11/Makefile.in b/examples/miscellaneous/miscellaneous_ex11/Makefile.in index 8db1b8690a6..deb7af06d6b 100644 --- a/examples/miscellaneous/miscellaneous_ex11/Makefile.in +++ b/examples/miscellaneous/miscellaneous_ex11/Makefile.in @@ -136,8 +136,8 @@ am__aclocal_m4_deps = \ $(top_srcdir)/m4/exodus.m4 $(top_srcdir)/m4/feexcept.m4 \ $(top_srcdir)/m4/fparser.m4 $(top_srcdir)/m4/glpk.m4 \ $(top_srcdir)/m4/gmv.m4 $(top_srcdir)/m4/gz.m4 \ - $(top_srcdir)/m4/hdf5.m4 $(top_srcdir)/m4/laspack.m4 \ - $(top_srcdir)/m4/libhilbert.m4 \ + $(top_srcdir)/m4/hdf5.m4 $(top_srcdir)/m4/kokkos.m4 \ + $(top_srcdir)/m4/laspack.m4 $(top_srcdir)/m4/libhilbert.m4 \ $(top_srcdir)/m4/libmesh_compiler_features.m4 \ $(top_srcdir)/m4/libmesh_core_features.m4 \ $(top_srcdir)/m4/libmesh_metaphysicl.m4 \ diff --git a/examples/miscellaneous/miscellaneous_ex12/Makefile.in b/examples/miscellaneous/miscellaneous_ex12/Makefile.in index 2d6c2fbd728..3186519379c 100644 --- a/examples/miscellaneous/miscellaneous_ex12/Makefile.in +++ b/examples/miscellaneous/miscellaneous_ex12/Makefile.in @@ -136,8 +136,8 @@ am__aclocal_m4_deps = \ $(top_srcdir)/m4/exodus.m4 $(top_srcdir)/m4/feexcept.m4 \ $(top_srcdir)/m4/fparser.m4 $(top_srcdir)/m4/glpk.m4 \ $(top_srcdir)/m4/gmv.m4 $(top_srcdir)/m4/gz.m4 \ - $(top_srcdir)/m4/hdf5.m4 $(top_srcdir)/m4/laspack.m4 \ - $(top_srcdir)/m4/libhilbert.m4 \ + $(top_srcdir)/m4/hdf5.m4 $(top_srcdir)/m4/kokkos.m4 \ + $(top_srcdir)/m4/laspack.m4 $(top_srcdir)/m4/libhilbert.m4 \ $(top_srcdir)/m4/libmesh_compiler_features.m4 \ $(top_srcdir)/m4/libmesh_core_features.m4 \ $(top_srcdir)/m4/libmesh_metaphysicl.m4 \ diff --git a/examples/miscellaneous/miscellaneous_ex13/Makefile.in b/examples/miscellaneous/miscellaneous_ex13/Makefile.in index b76863f34c0..c1da1cff21b 100644 --- a/examples/miscellaneous/miscellaneous_ex13/Makefile.in +++ b/examples/miscellaneous/miscellaneous_ex13/Makefile.in @@ -136,8 +136,8 @@ am__aclocal_m4_deps = \ $(top_srcdir)/m4/exodus.m4 $(top_srcdir)/m4/feexcept.m4 \ $(top_srcdir)/m4/fparser.m4 $(top_srcdir)/m4/glpk.m4 \ $(top_srcdir)/m4/gmv.m4 $(top_srcdir)/m4/gz.m4 \ - $(top_srcdir)/m4/hdf5.m4 $(top_srcdir)/m4/laspack.m4 \ - $(top_srcdir)/m4/libhilbert.m4 \ + $(top_srcdir)/m4/hdf5.m4 $(top_srcdir)/m4/kokkos.m4 \ + $(top_srcdir)/m4/laspack.m4 $(top_srcdir)/m4/libhilbert.m4 \ $(top_srcdir)/m4/libmesh_compiler_features.m4 \ $(top_srcdir)/m4/libmesh_core_features.m4 \ $(top_srcdir)/m4/libmesh_metaphysicl.m4 \ diff --git a/examples/miscellaneous/miscellaneous_ex14/Makefile.in b/examples/miscellaneous/miscellaneous_ex14/Makefile.in index e4cef4ae163..eed62367022 100644 --- a/examples/miscellaneous/miscellaneous_ex14/Makefile.in +++ b/examples/miscellaneous/miscellaneous_ex14/Makefile.in @@ -135,8 +135,8 @@ am__aclocal_m4_deps = \ $(top_srcdir)/m4/exodus.m4 $(top_srcdir)/m4/feexcept.m4 \ $(top_srcdir)/m4/fparser.m4 $(top_srcdir)/m4/glpk.m4 \ $(top_srcdir)/m4/gmv.m4 $(top_srcdir)/m4/gz.m4 \ - $(top_srcdir)/m4/hdf5.m4 $(top_srcdir)/m4/laspack.m4 \ - $(top_srcdir)/m4/libhilbert.m4 \ + $(top_srcdir)/m4/hdf5.m4 $(top_srcdir)/m4/kokkos.m4 \ + $(top_srcdir)/m4/laspack.m4 $(top_srcdir)/m4/libhilbert.m4 \ $(top_srcdir)/m4/libmesh_compiler_features.m4 \ $(top_srcdir)/m4/libmesh_core_features.m4 \ $(top_srcdir)/m4/libmesh_metaphysicl.m4 \ diff --git a/examples/miscellaneous/miscellaneous_ex15/Makefile.in b/examples/miscellaneous/miscellaneous_ex15/Makefile.in index 643317916e6..313382fdfb2 100644 --- a/examples/miscellaneous/miscellaneous_ex15/Makefile.in +++ b/examples/miscellaneous/miscellaneous_ex15/Makefile.in @@ -135,8 +135,8 @@ am__aclocal_m4_deps = \ $(top_srcdir)/m4/exodus.m4 $(top_srcdir)/m4/feexcept.m4 \ $(top_srcdir)/m4/fparser.m4 $(top_srcdir)/m4/glpk.m4 \ $(top_srcdir)/m4/gmv.m4 $(top_srcdir)/m4/gz.m4 \ - $(top_srcdir)/m4/hdf5.m4 $(top_srcdir)/m4/laspack.m4 \ - $(top_srcdir)/m4/libhilbert.m4 \ + $(top_srcdir)/m4/hdf5.m4 $(top_srcdir)/m4/kokkos.m4 \ + $(top_srcdir)/m4/laspack.m4 $(top_srcdir)/m4/libhilbert.m4 \ $(top_srcdir)/m4/libmesh_compiler_features.m4 \ $(top_srcdir)/m4/libmesh_core_features.m4 \ $(top_srcdir)/m4/libmesh_metaphysicl.m4 \ diff --git a/examples/miscellaneous/miscellaneous_ex16/Makefile.in b/examples/miscellaneous/miscellaneous_ex16/Makefile.in index ecd2b7973a7..5dadd3521fe 100644 --- a/examples/miscellaneous/miscellaneous_ex16/Makefile.in +++ b/examples/miscellaneous/miscellaneous_ex16/Makefile.in @@ -136,8 +136,8 @@ am__aclocal_m4_deps = \ $(top_srcdir)/m4/exodus.m4 $(top_srcdir)/m4/feexcept.m4 \ $(top_srcdir)/m4/fparser.m4 $(top_srcdir)/m4/glpk.m4 \ $(top_srcdir)/m4/gmv.m4 $(top_srcdir)/m4/gz.m4 \ - $(top_srcdir)/m4/hdf5.m4 $(top_srcdir)/m4/laspack.m4 \ - $(top_srcdir)/m4/libhilbert.m4 \ + $(top_srcdir)/m4/hdf5.m4 $(top_srcdir)/m4/kokkos.m4 \ + $(top_srcdir)/m4/laspack.m4 $(top_srcdir)/m4/libhilbert.m4 \ $(top_srcdir)/m4/libmesh_compiler_features.m4 \ $(top_srcdir)/m4/libmesh_core_features.m4 \ $(top_srcdir)/m4/libmesh_metaphysicl.m4 \ diff --git a/examples/miscellaneous/miscellaneous_ex17/Makefile.in b/examples/miscellaneous/miscellaneous_ex17/Makefile.in index 6d61cb4ed36..f1dc34ad7b5 100644 --- a/examples/miscellaneous/miscellaneous_ex17/Makefile.in +++ b/examples/miscellaneous/miscellaneous_ex17/Makefile.in @@ -135,8 +135,8 @@ am__aclocal_m4_deps = \ $(top_srcdir)/m4/exodus.m4 $(top_srcdir)/m4/feexcept.m4 \ $(top_srcdir)/m4/fparser.m4 $(top_srcdir)/m4/glpk.m4 \ $(top_srcdir)/m4/gmv.m4 $(top_srcdir)/m4/gz.m4 \ - $(top_srcdir)/m4/hdf5.m4 $(top_srcdir)/m4/laspack.m4 \ - $(top_srcdir)/m4/libhilbert.m4 \ + $(top_srcdir)/m4/hdf5.m4 $(top_srcdir)/m4/kokkos.m4 \ + $(top_srcdir)/m4/laspack.m4 $(top_srcdir)/m4/libhilbert.m4 \ $(top_srcdir)/m4/libmesh_compiler_features.m4 \ $(top_srcdir)/m4/libmesh_core_features.m4 \ $(top_srcdir)/m4/libmesh_metaphysicl.m4 \ diff --git a/examples/miscellaneous/miscellaneous_ex2/Makefile.in b/examples/miscellaneous/miscellaneous_ex2/Makefile.in index 8e59e6ad478..cd2dd2f05b3 100644 --- a/examples/miscellaneous/miscellaneous_ex2/Makefile.in +++ b/examples/miscellaneous/miscellaneous_ex2/Makefile.in @@ -136,8 +136,8 @@ am__aclocal_m4_deps = \ $(top_srcdir)/m4/exodus.m4 $(top_srcdir)/m4/feexcept.m4 \ $(top_srcdir)/m4/fparser.m4 $(top_srcdir)/m4/glpk.m4 \ $(top_srcdir)/m4/gmv.m4 $(top_srcdir)/m4/gz.m4 \ - $(top_srcdir)/m4/hdf5.m4 $(top_srcdir)/m4/laspack.m4 \ - $(top_srcdir)/m4/libhilbert.m4 \ + $(top_srcdir)/m4/hdf5.m4 $(top_srcdir)/m4/kokkos.m4 \ + $(top_srcdir)/m4/laspack.m4 $(top_srcdir)/m4/libhilbert.m4 \ $(top_srcdir)/m4/libmesh_compiler_features.m4 \ $(top_srcdir)/m4/libmesh_core_features.m4 \ $(top_srcdir)/m4/libmesh_metaphysicl.m4 \ diff --git a/examples/miscellaneous/miscellaneous_ex3/Makefile.in b/examples/miscellaneous/miscellaneous_ex3/Makefile.in index 5146d27ca1f..435f8c33377 100644 --- a/examples/miscellaneous/miscellaneous_ex3/Makefile.in +++ b/examples/miscellaneous/miscellaneous_ex3/Makefile.in @@ -135,8 +135,8 @@ am__aclocal_m4_deps = \ $(top_srcdir)/m4/exodus.m4 $(top_srcdir)/m4/feexcept.m4 \ $(top_srcdir)/m4/fparser.m4 $(top_srcdir)/m4/glpk.m4 \ $(top_srcdir)/m4/gmv.m4 $(top_srcdir)/m4/gz.m4 \ - $(top_srcdir)/m4/hdf5.m4 $(top_srcdir)/m4/laspack.m4 \ - $(top_srcdir)/m4/libhilbert.m4 \ + $(top_srcdir)/m4/hdf5.m4 $(top_srcdir)/m4/kokkos.m4 \ + $(top_srcdir)/m4/laspack.m4 $(top_srcdir)/m4/libhilbert.m4 \ $(top_srcdir)/m4/libmesh_compiler_features.m4 \ $(top_srcdir)/m4/libmesh_core_features.m4 \ $(top_srcdir)/m4/libmesh_metaphysicl.m4 \ diff --git a/examples/miscellaneous/miscellaneous_ex4/Makefile.in b/examples/miscellaneous/miscellaneous_ex4/Makefile.in index 2b48571cd36..448d1478bbc 100644 --- a/examples/miscellaneous/miscellaneous_ex4/Makefile.in +++ b/examples/miscellaneous/miscellaneous_ex4/Makefile.in @@ -135,8 +135,8 @@ am__aclocal_m4_deps = \ $(top_srcdir)/m4/exodus.m4 $(top_srcdir)/m4/feexcept.m4 \ $(top_srcdir)/m4/fparser.m4 $(top_srcdir)/m4/glpk.m4 \ $(top_srcdir)/m4/gmv.m4 $(top_srcdir)/m4/gz.m4 \ - $(top_srcdir)/m4/hdf5.m4 $(top_srcdir)/m4/laspack.m4 \ - $(top_srcdir)/m4/libhilbert.m4 \ + $(top_srcdir)/m4/hdf5.m4 $(top_srcdir)/m4/kokkos.m4 \ + $(top_srcdir)/m4/laspack.m4 $(top_srcdir)/m4/libhilbert.m4 \ $(top_srcdir)/m4/libmesh_compiler_features.m4 \ $(top_srcdir)/m4/libmesh_core_features.m4 \ $(top_srcdir)/m4/libmesh_metaphysicl.m4 \ diff --git a/examples/miscellaneous/miscellaneous_ex5/Makefile.in b/examples/miscellaneous/miscellaneous_ex5/Makefile.in index 707ea4dc6e1..d0bf2dcae16 100644 --- a/examples/miscellaneous/miscellaneous_ex5/Makefile.in +++ b/examples/miscellaneous/miscellaneous_ex5/Makefile.in @@ -139,8 +139,8 @@ am__aclocal_m4_deps = \ $(top_srcdir)/m4/exodus.m4 $(top_srcdir)/m4/feexcept.m4 \ $(top_srcdir)/m4/fparser.m4 $(top_srcdir)/m4/glpk.m4 \ $(top_srcdir)/m4/gmv.m4 $(top_srcdir)/m4/gz.m4 \ - $(top_srcdir)/m4/hdf5.m4 $(top_srcdir)/m4/laspack.m4 \ - $(top_srcdir)/m4/libhilbert.m4 \ + $(top_srcdir)/m4/hdf5.m4 $(top_srcdir)/m4/kokkos.m4 \ + $(top_srcdir)/m4/laspack.m4 $(top_srcdir)/m4/libhilbert.m4 \ $(top_srcdir)/m4/libmesh_compiler_features.m4 \ $(top_srcdir)/m4/libmesh_core_features.m4 \ $(top_srcdir)/m4/libmesh_metaphysicl.m4 \ diff --git a/examples/miscellaneous/miscellaneous_ex6/Makefile.in b/examples/miscellaneous/miscellaneous_ex6/Makefile.in index aa8bc685743..1f92151838d 100644 --- a/examples/miscellaneous/miscellaneous_ex6/Makefile.in +++ b/examples/miscellaneous/miscellaneous_ex6/Makefile.in @@ -135,8 +135,8 @@ am__aclocal_m4_deps = \ $(top_srcdir)/m4/exodus.m4 $(top_srcdir)/m4/feexcept.m4 \ $(top_srcdir)/m4/fparser.m4 $(top_srcdir)/m4/glpk.m4 \ $(top_srcdir)/m4/gmv.m4 $(top_srcdir)/m4/gz.m4 \ - $(top_srcdir)/m4/hdf5.m4 $(top_srcdir)/m4/laspack.m4 \ - $(top_srcdir)/m4/libhilbert.m4 \ + $(top_srcdir)/m4/hdf5.m4 $(top_srcdir)/m4/kokkos.m4 \ + $(top_srcdir)/m4/laspack.m4 $(top_srcdir)/m4/libhilbert.m4 \ $(top_srcdir)/m4/libmesh_compiler_features.m4 \ $(top_srcdir)/m4/libmesh_core_features.m4 \ $(top_srcdir)/m4/libmesh_metaphysicl.m4 \ diff --git a/examples/miscellaneous/miscellaneous_ex7/Makefile.in b/examples/miscellaneous/miscellaneous_ex7/Makefile.in index 9ac39bc4084..a8bc1c87a17 100644 --- a/examples/miscellaneous/miscellaneous_ex7/Makefile.in +++ b/examples/miscellaneous/miscellaneous_ex7/Makefile.in @@ -135,8 +135,8 @@ am__aclocal_m4_deps = \ $(top_srcdir)/m4/exodus.m4 $(top_srcdir)/m4/feexcept.m4 \ $(top_srcdir)/m4/fparser.m4 $(top_srcdir)/m4/glpk.m4 \ $(top_srcdir)/m4/gmv.m4 $(top_srcdir)/m4/gz.m4 \ - $(top_srcdir)/m4/hdf5.m4 $(top_srcdir)/m4/laspack.m4 \ - $(top_srcdir)/m4/libhilbert.m4 \ + $(top_srcdir)/m4/hdf5.m4 $(top_srcdir)/m4/kokkos.m4 \ + $(top_srcdir)/m4/laspack.m4 $(top_srcdir)/m4/libhilbert.m4 \ $(top_srcdir)/m4/libmesh_compiler_features.m4 \ $(top_srcdir)/m4/libmesh_core_features.m4 \ $(top_srcdir)/m4/libmesh_metaphysicl.m4 \ diff --git a/examples/miscellaneous/miscellaneous_ex8/Makefile.in b/examples/miscellaneous/miscellaneous_ex8/Makefile.in index 939249e5570..a501fdd7520 100644 --- a/examples/miscellaneous/miscellaneous_ex8/Makefile.in +++ b/examples/miscellaneous/miscellaneous_ex8/Makefile.in @@ -136,8 +136,8 @@ am__aclocal_m4_deps = \ $(top_srcdir)/m4/exodus.m4 $(top_srcdir)/m4/feexcept.m4 \ $(top_srcdir)/m4/fparser.m4 $(top_srcdir)/m4/glpk.m4 \ $(top_srcdir)/m4/gmv.m4 $(top_srcdir)/m4/gz.m4 \ - $(top_srcdir)/m4/hdf5.m4 $(top_srcdir)/m4/laspack.m4 \ - $(top_srcdir)/m4/libhilbert.m4 \ + $(top_srcdir)/m4/hdf5.m4 $(top_srcdir)/m4/kokkos.m4 \ + $(top_srcdir)/m4/laspack.m4 $(top_srcdir)/m4/libhilbert.m4 \ $(top_srcdir)/m4/libmesh_compiler_features.m4 \ $(top_srcdir)/m4/libmesh_core_features.m4 \ $(top_srcdir)/m4/libmesh_metaphysicl.m4 \ diff --git a/examples/miscellaneous/miscellaneous_ex9/Makefile.in b/examples/miscellaneous/miscellaneous_ex9/Makefile.in index 66bcac9673a..bd44fd30202 100644 --- a/examples/miscellaneous/miscellaneous_ex9/Makefile.in +++ b/examples/miscellaneous/miscellaneous_ex9/Makefile.in @@ -136,8 +136,8 @@ am__aclocal_m4_deps = \ $(top_srcdir)/m4/exodus.m4 $(top_srcdir)/m4/feexcept.m4 \ $(top_srcdir)/m4/fparser.m4 $(top_srcdir)/m4/glpk.m4 \ $(top_srcdir)/m4/gmv.m4 $(top_srcdir)/m4/gz.m4 \ - $(top_srcdir)/m4/hdf5.m4 $(top_srcdir)/m4/laspack.m4 \ - $(top_srcdir)/m4/libhilbert.m4 \ + $(top_srcdir)/m4/hdf5.m4 $(top_srcdir)/m4/kokkos.m4 \ + $(top_srcdir)/m4/laspack.m4 $(top_srcdir)/m4/libhilbert.m4 \ $(top_srcdir)/m4/libmesh_compiler_features.m4 \ $(top_srcdir)/m4/libmesh_core_features.m4 \ $(top_srcdir)/m4/libmesh_metaphysicl.m4 \ diff --git a/examples/optimization/optimization_ex1/Makefile.in b/examples/optimization/optimization_ex1/Makefile.in index 50737c7c35f..986df5b35ff 100644 --- a/examples/optimization/optimization_ex1/Makefile.in +++ b/examples/optimization/optimization_ex1/Makefile.in @@ -136,8 +136,8 @@ am__aclocal_m4_deps = \ $(top_srcdir)/m4/exodus.m4 $(top_srcdir)/m4/feexcept.m4 \ $(top_srcdir)/m4/fparser.m4 $(top_srcdir)/m4/glpk.m4 \ $(top_srcdir)/m4/gmv.m4 $(top_srcdir)/m4/gz.m4 \ - $(top_srcdir)/m4/hdf5.m4 $(top_srcdir)/m4/laspack.m4 \ - $(top_srcdir)/m4/libhilbert.m4 \ + $(top_srcdir)/m4/hdf5.m4 $(top_srcdir)/m4/kokkos.m4 \ + $(top_srcdir)/m4/laspack.m4 $(top_srcdir)/m4/libhilbert.m4 \ $(top_srcdir)/m4/libmesh_compiler_features.m4 \ $(top_srcdir)/m4/libmesh_core_features.m4 \ $(top_srcdir)/m4/libmesh_metaphysicl.m4 \ diff --git a/examples/optimization/optimization_ex2/Makefile.in b/examples/optimization/optimization_ex2/Makefile.in index 16f38051df1..554adcfd00a 100644 --- a/examples/optimization/optimization_ex2/Makefile.in +++ b/examples/optimization/optimization_ex2/Makefile.in @@ -136,8 +136,8 @@ am__aclocal_m4_deps = \ $(top_srcdir)/m4/exodus.m4 $(top_srcdir)/m4/feexcept.m4 \ $(top_srcdir)/m4/fparser.m4 $(top_srcdir)/m4/glpk.m4 \ $(top_srcdir)/m4/gmv.m4 $(top_srcdir)/m4/gz.m4 \ - $(top_srcdir)/m4/hdf5.m4 $(top_srcdir)/m4/laspack.m4 \ - $(top_srcdir)/m4/libhilbert.m4 \ + $(top_srcdir)/m4/hdf5.m4 $(top_srcdir)/m4/kokkos.m4 \ + $(top_srcdir)/m4/laspack.m4 $(top_srcdir)/m4/libhilbert.m4 \ $(top_srcdir)/m4/libmesh_compiler_features.m4 \ $(top_srcdir)/m4/libmesh_core_features.m4 \ $(top_srcdir)/m4/libmesh_metaphysicl.m4 \ diff --git a/examples/reduced_basis/reduced_basis_ex1/Makefile.in b/examples/reduced_basis/reduced_basis_ex1/Makefile.in index b33bf22f98c..f0be332827c 100644 --- a/examples/reduced_basis/reduced_basis_ex1/Makefile.in +++ b/examples/reduced_basis/reduced_basis_ex1/Makefile.in @@ -136,8 +136,8 @@ am__aclocal_m4_deps = \ $(top_srcdir)/m4/exodus.m4 $(top_srcdir)/m4/feexcept.m4 \ $(top_srcdir)/m4/fparser.m4 $(top_srcdir)/m4/glpk.m4 \ $(top_srcdir)/m4/gmv.m4 $(top_srcdir)/m4/gz.m4 \ - $(top_srcdir)/m4/hdf5.m4 $(top_srcdir)/m4/laspack.m4 \ - $(top_srcdir)/m4/libhilbert.m4 \ + $(top_srcdir)/m4/hdf5.m4 $(top_srcdir)/m4/kokkos.m4 \ + $(top_srcdir)/m4/laspack.m4 $(top_srcdir)/m4/libhilbert.m4 \ $(top_srcdir)/m4/libmesh_compiler_features.m4 \ $(top_srcdir)/m4/libmesh_core_features.m4 \ $(top_srcdir)/m4/libmesh_metaphysicl.m4 \ diff --git a/examples/reduced_basis/reduced_basis_ex2/Makefile.in b/examples/reduced_basis/reduced_basis_ex2/Makefile.in index fb18b6c3a8b..0c1deba3e32 100644 --- a/examples/reduced_basis/reduced_basis_ex2/Makefile.in +++ b/examples/reduced_basis/reduced_basis_ex2/Makefile.in @@ -136,8 +136,8 @@ am__aclocal_m4_deps = \ $(top_srcdir)/m4/exodus.m4 $(top_srcdir)/m4/feexcept.m4 \ $(top_srcdir)/m4/fparser.m4 $(top_srcdir)/m4/glpk.m4 \ $(top_srcdir)/m4/gmv.m4 $(top_srcdir)/m4/gz.m4 \ - $(top_srcdir)/m4/hdf5.m4 $(top_srcdir)/m4/laspack.m4 \ - $(top_srcdir)/m4/libhilbert.m4 \ + $(top_srcdir)/m4/hdf5.m4 $(top_srcdir)/m4/kokkos.m4 \ + $(top_srcdir)/m4/laspack.m4 $(top_srcdir)/m4/libhilbert.m4 \ $(top_srcdir)/m4/libmesh_compiler_features.m4 \ $(top_srcdir)/m4/libmesh_core_features.m4 \ $(top_srcdir)/m4/libmesh_metaphysicl.m4 \ diff --git a/examples/reduced_basis/reduced_basis_ex3/Makefile.in b/examples/reduced_basis/reduced_basis_ex3/Makefile.in index 66e9889d4e6..6f1cc97b07b 100644 --- a/examples/reduced_basis/reduced_basis_ex3/Makefile.in +++ b/examples/reduced_basis/reduced_basis_ex3/Makefile.in @@ -136,8 +136,8 @@ am__aclocal_m4_deps = \ $(top_srcdir)/m4/exodus.m4 $(top_srcdir)/m4/feexcept.m4 \ $(top_srcdir)/m4/fparser.m4 $(top_srcdir)/m4/glpk.m4 \ $(top_srcdir)/m4/gmv.m4 $(top_srcdir)/m4/gz.m4 \ - $(top_srcdir)/m4/hdf5.m4 $(top_srcdir)/m4/laspack.m4 \ - $(top_srcdir)/m4/libhilbert.m4 \ + $(top_srcdir)/m4/hdf5.m4 $(top_srcdir)/m4/kokkos.m4 \ + $(top_srcdir)/m4/laspack.m4 $(top_srcdir)/m4/libhilbert.m4 \ $(top_srcdir)/m4/libmesh_compiler_features.m4 \ $(top_srcdir)/m4/libmesh_core_features.m4 \ $(top_srcdir)/m4/libmesh_metaphysicl.m4 \ diff --git a/examples/reduced_basis/reduced_basis_ex4/Makefile.in b/examples/reduced_basis/reduced_basis_ex4/Makefile.in index 4018e00c9b7..7248898f524 100644 --- a/examples/reduced_basis/reduced_basis_ex4/Makefile.in +++ b/examples/reduced_basis/reduced_basis_ex4/Makefile.in @@ -136,8 +136,8 @@ am__aclocal_m4_deps = \ $(top_srcdir)/m4/exodus.m4 $(top_srcdir)/m4/feexcept.m4 \ $(top_srcdir)/m4/fparser.m4 $(top_srcdir)/m4/glpk.m4 \ $(top_srcdir)/m4/gmv.m4 $(top_srcdir)/m4/gz.m4 \ - $(top_srcdir)/m4/hdf5.m4 $(top_srcdir)/m4/laspack.m4 \ - $(top_srcdir)/m4/libhilbert.m4 \ + $(top_srcdir)/m4/hdf5.m4 $(top_srcdir)/m4/kokkos.m4 \ + $(top_srcdir)/m4/laspack.m4 $(top_srcdir)/m4/libhilbert.m4 \ $(top_srcdir)/m4/libmesh_compiler_features.m4 \ $(top_srcdir)/m4/libmesh_core_features.m4 \ $(top_srcdir)/m4/libmesh_metaphysicl.m4 \ diff --git a/examples/reduced_basis/reduced_basis_ex5/Makefile.in b/examples/reduced_basis/reduced_basis_ex5/Makefile.in index f5c5f996a49..fe06c6939d4 100644 --- a/examples/reduced_basis/reduced_basis_ex5/Makefile.in +++ b/examples/reduced_basis/reduced_basis_ex5/Makefile.in @@ -136,8 +136,8 @@ am__aclocal_m4_deps = \ $(top_srcdir)/m4/exodus.m4 $(top_srcdir)/m4/feexcept.m4 \ $(top_srcdir)/m4/fparser.m4 $(top_srcdir)/m4/glpk.m4 \ $(top_srcdir)/m4/gmv.m4 $(top_srcdir)/m4/gz.m4 \ - $(top_srcdir)/m4/hdf5.m4 $(top_srcdir)/m4/laspack.m4 \ - $(top_srcdir)/m4/libhilbert.m4 \ + $(top_srcdir)/m4/hdf5.m4 $(top_srcdir)/m4/kokkos.m4 \ + $(top_srcdir)/m4/laspack.m4 $(top_srcdir)/m4/libhilbert.m4 \ $(top_srcdir)/m4/libmesh_compiler_features.m4 \ $(top_srcdir)/m4/libmesh_core_features.m4 \ $(top_srcdir)/m4/libmesh_metaphysicl.m4 \ diff --git a/examples/reduced_basis/reduced_basis_ex6/Makefile.in b/examples/reduced_basis/reduced_basis_ex6/Makefile.in index 704b9196cf4..3414c6f27af 100644 --- a/examples/reduced_basis/reduced_basis_ex6/Makefile.in +++ b/examples/reduced_basis/reduced_basis_ex6/Makefile.in @@ -136,8 +136,8 @@ am__aclocal_m4_deps = \ $(top_srcdir)/m4/exodus.m4 $(top_srcdir)/m4/feexcept.m4 \ $(top_srcdir)/m4/fparser.m4 $(top_srcdir)/m4/glpk.m4 \ $(top_srcdir)/m4/gmv.m4 $(top_srcdir)/m4/gz.m4 \ - $(top_srcdir)/m4/hdf5.m4 $(top_srcdir)/m4/laspack.m4 \ - $(top_srcdir)/m4/libhilbert.m4 \ + $(top_srcdir)/m4/hdf5.m4 $(top_srcdir)/m4/kokkos.m4 \ + $(top_srcdir)/m4/laspack.m4 $(top_srcdir)/m4/libhilbert.m4 \ $(top_srcdir)/m4/libmesh_compiler_features.m4 \ $(top_srcdir)/m4/libmesh_core_features.m4 \ $(top_srcdir)/m4/libmesh_metaphysicl.m4 \ diff --git a/examples/reduced_basis/reduced_basis_ex7/Makefile.in b/examples/reduced_basis/reduced_basis_ex7/Makefile.in index 88b4bb8693a..7a9de1993a9 100644 --- a/examples/reduced_basis/reduced_basis_ex7/Makefile.in +++ b/examples/reduced_basis/reduced_basis_ex7/Makefile.in @@ -136,8 +136,8 @@ am__aclocal_m4_deps = \ $(top_srcdir)/m4/exodus.m4 $(top_srcdir)/m4/feexcept.m4 \ $(top_srcdir)/m4/fparser.m4 $(top_srcdir)/m4/glpk.m4 \ $(top_srcdir)/m4/gmv.m4 $(top_srcdir)/m4/gz.m4 \ - $(top_srcdir)/m4/hdf5.m4 $(top_srcdir)/m4/laspack.m4 \ - $(top_srcdir)/m4/libhilbert.m4 \ + $(top_srcdir)/m4/hdf5.m4 $(top_srcdir)/m4/kokkos.m4 \ + $(top_srcdir)/m4/laspack.m4 $(top_srcdir)/m4/libhilbert.m4 \ $(top_srcdir)/m4/libmesh_compiler_features.m4 \ $(top_srcdir)/m4/libmesh_core_features.m4 \ $(top_srcdir)/m4/libmesh_metaphysicl.m4 \ diff --git a/examples/solution_transfer/solution_transfer_ex1/Makefile.in b/examples/solution_transfer/solution_transfer_ex1/Makefile.in index 0cf9f53ad59..e29d54e1f52 100644 --- a/examples/solution_transfer/solution_transfer_ex1/Makefile.in +++ b/examples/solution_transfer/solution_transfer_ex1/Makefile.in @@ -135,8 +135,8 @@ am__aclocal_m4_deps = \ $(top_srcdir)/m4/exodus.m4 $(top_srcdir)/m4/feexcept.m4 \ $(top_srcdir)/m4/fparser.m4 $(top_srcdir)/m4/glpk.m4 \ $(top_srcdir)/m4/gmv.m4 $(top_srcdir)/m4/gz.m4 \ - $(top_srcdir)/m4/hdf5.m4 $(top_srcdir)/m4/laspack.m4 \ - $(top_srcdir)/m4/libhilbert.m4 \ + $(top_srcdir)/m4/hdf5.m4 $(top_srcdir)/m4/kokkos.m4 \ + $(top_srcdir)/m4/laspack.m4 $(top_srcdir)/m4/libhilbert.m4 \ $(top_srcdir)/m4/libmesh_compiler_features.m4 \ $(top_srcdir)/m4/libmesh_core_features.m4 \ $(top_srcdir)/m4/libmesh_metaphysicl.m4 \ diff --git a/examples/subdomains/subdomains_ex1/Makefile.in b/examples/subdomains/subdomains_ex1/Makefile.in index 799e2edc23d..a7d586141c4 100644 --- a/examples/subdomains/subdomains_ex1/Makefile.in +++ b/examples/subdomains/subdomains_ex1/Makefile.in @@ -135,8 +135,8 @@ am__aclocal_m4_deps = \ $(top_srcdir)/m4/exodus.m4 $(top_srcdir)/m4/feexcept.m4 \ $(top_srcdir)/m4/fparser.m4 $(top_srcdir)/m4/glpk.m4 \ $(top_srcdir)/m4/gmv.m4 $(top_srcdir)/m4/gz.m4 \ - $(top_srcdir)/m4/hdf5.m4 $(top_srcdir)/m4/laspack.m4 \ - $(top_srcdir)/m4/libhilbert.m4 \ + $(top_srcdir)/m4/hdf5.m4 $(top_srcdir)/m4/kokkos.m4 \ + $(top_srcdir)/m4/laspack.m4 $(top_srcdir)/m4/libhilbert.m4 \ $(top_srcdir)/m4/libmesh_compiler_features.m4 \ $(top_srcdir)/m4/libmesh_core_features.m4 \ $(top_srcdir)/m4/libmesh_metaphysicl.m4 \ diff --git a/examples/subdomains/subdomains_ex2/Makefile.in b/examples/subdomains/subdomains_ex2/Makefile.in index e81cd89393f..510945e8a58 100644 --- a/examples/subdomains/subdomains_ex2/Makefile.in +++ b/examples/subdomains/subdomains_ex2/Makefile.in @@ -135,8 +135,8 @@ am__aclocal_m4_deps = \ $(top_srcdir)/m4/exodus.m4 $(top_srcdir)/m4/feexcept.m4 \ $(top_srcdir)/m4/fparser.m4 $(top_srcdir)/m4/glpk.m4 \ $(top_srcdir)/m4/gmv.m4 $(top_srcdir)/m4/gz.m4 \ - $(top_srcdir)/m4/hdf5.m4 $(top_srcdir)/m4/laspack.m4 \ - $(top_srcdir)/m4/libhilbert.m4 \ + $(top_srcdir)/m4/hdf5.m4 $(top_srcdir)/m4/kokkos.m4 \ + $(top_srcdir)/m4/laspack.m4 $(top_srcdir)/m4/libhilbert.m4 \ $(top_srcdir)/m4/libmesh_compiler_features.m4 \ $(top_srcdir)/m4/libmesh_core_features.m4 \ $(top_srcdir)/m4/libmesh_metaphysicl.m4 \ diff --git a/examples/subdomains/subdomains_ex3/Makefile.in b/examples/subdomains/subdomains_ex3/Makefile.in index 303ef37b9d2..98f8441b8af 100644 --- a/examples/subdomains/subdomains_ex3/Makefile.in +++ b/examples/subdomains/subdomains_ex3/Makefile.in @@ -139,8 +139,8 @@ am__aclocal_m4_deps = \ $(top_srcdir)/m4/exodus.m4 $(top_srcdir)/m4/feexcept.m4 \ $(top_srcdir)/m4/fparser.m4 $(top_srcdir)/m4/glpk.m4 \ $(top_srcdir)/m4/gmv.m4 $(top_srcdir)/m4/gz.m4 \ - $(top_srcdir)/m4/hdf5.m4 $(top_srcdir)/m4/laspack.m4 \ - $(top_srcdir)/m4/libhilbert.m4 \ + $(top_srcdir)/m4/hdf5.m4 $(top_srcdir)/m4/kokkos.m4 \ + $(top_srcdir)/m4/laspack.m4 $(top_srcdir)/m4/libhilbert.m4 \ $(top_srcdir)/m4/libmesh_compiler_features.m4 \ $(top_srcdir)/m4/libmesh_core_features.m4 \ $(top_srcdir)/m4/libmesh_metaphysicl.m4 \ diff --git a/examples/systems_of_equations/systems_of_equations_ex1/Makefile.in b/examples/systems_of_equations/systems_of_equations_ex1/Makefile.in index bff0732e60d..5c3cb6a2e45 100644 --- a/examples/systems_of_equations/systems_of_equations_ex1/Makefile.in +++ b/examples/systems_of_equations/systems_of_equations_ex1/Makefile.in @@ -135,8 +135,8 @@ am__aclocal_m4_deps = \ $(top_srcdir)/m4/exodus.m4 $(top_srcdir)/m4/feexcept.m4 \ $(top_srcdir)/m4/fparser.m4 $(top_srcdir)/m4/glpk.m4 \ $(top_srcdir)/m4/gmv.m4 $(top_srcdir)/m4/gz.m4 \ - $(top_srcdir)/m4/hdf5.m4 $(top_srcdir)/m4/laspack.m4 \ - $(top_srcdir)/m4/libhilbert.m4 \ + $(top_srcdir)/m4/hdf5.m4 $(top_srcdir)/m4/kokkos.m4 \ + $(top_srcdir)/m4/laspack.m4 $(top_srcdir)/m4/libhilbert.m4 \ $(top_srcdir)/m4/libmesh_compiler_features.m4 \ $(top_srcdir)/m4/libmesh_core_features.m4 \ $(top_srcdir)/m4/libmesh_metaphysicl.m4 \ diff --git a/examples/systems_of_equations/systems_of_equations_ex2/Makefile.in b/examples/systems_of_equations/systems_of_equations_ex2/Makefile.in index 5e5a2e62e27..c474462d3c8 100644 --- a/examples/systems_of_equations/systems_of_equations_ex2/Makefile.in +++ b/examples/systems_of_equations/systems_of_equations_ex2/Makefile.in @@ -135,8 +135,8 @@ am__aclocal_m4_deps = \ $(top_srcdir)/m4/exodus.m4 $(top_srcdir)/m4/feexcept.m4 \ $(top_srcdir)/m4/fparser.m4 $(top_srcdir)/m4/glpk.m4 \ $(top_srcdir)/m4/gmv.m4 $(top_srcdir)/m4/gz.m4 \ - $(top_srcdir)/m4/hdf5.m4 $(top_srcdir)/m4/laspack.m4 \ - $(top_srcdir)/m4/libhilbert.m4 \ + $(top_srcdir)/m4/hdf5.m4 $(top_srcdir)/m4/kokkos.m4 \ + $(top_srcdir)/m4/laspack.m4 $(top_srcdir)/m4/libhilbert.m4 \ $(top_srcdir)/m4/libmesh_compiler_features.m4 \ $(top_srcdir)/m4/libmesh_core_features.m4 \ $(top_srcdir)/m4/libmesh_metaphysicl.m4 \ diff --git a/examples/systems_of_equations/systems_of_equations_ex3/Makefile.in b/examples/systems_of_equations/systems_of_equations_ex3/Makefile.in index 776822ee34e..1c492bd8009 100644 --- a/examples/systems_of_equations/systems_of_equations_ex3/Makefile.in +++ b/examples/systems_of_equations/systems_of_equations_ex3/Makefile.in @@ -135,8 +135,8 @@ am__aclocal_m4_deps = \ $(top_srcdir)/m4/exodus.m4 $(top_srcdir)/m4/feexcept.m4 \ $(top_srcdir)/m4/fparser.m4 $(top_srcdir)/m4/glpk.m4 \ $(top_srcdir)/m4/gmv.m4 $(top_srcdir)/m4/gz.m4 \ - $(top_srcdir)/m4/hdf5.m4 $(top_srcdir)/m4/laspack.m4 \ - $(top_srcdir)/m4/libhilbert.m4 \ + $(top_srcdir)/m4/hdf5.m4 $(top_srcdir)/m4/kokkos.m4 \ + $(top_srcdir)/m4/laspack.m4 $(top_srcdir)/m4/libhilbert.m4 \ $(top_srcdir)/m4/libmesh_compiler_features.m4 \ $(top_srcdir)/m4/libmesh_core_features.m4 \ $(top_srcdir)/m4/libmesh_metaphysicl.m4 \ diff --git a/examples/systems_of_equations/systems_of_equations_ex4/Makefile.in b/examples/systems_of_equations/systems_of_equations_ex4/Makefile.in index 4626e3bedea..96c828aa465 100644 --- a/examples/systems_of_equations/systems_of_equations_ex4/Makefile.in +++ b/examples/systems_of_equations/systems_of_equations_ex4/Makefile.in @@ -135,8 +135,8 @@ am__aclocal_m4_deps = \ $(top_srcdir)/m4/exodus.m4 $(top_srcdir)/m4/feexcept.m4 \ $(top_srcdir)/m4/fparser.m4 $(top_srcdir)/m4/glpk.m4 \ $(top_srcdir)/m4/gmv.m4 $(top_srcdir)/m4/gz.m4 \ - $(top_srcdir)/m4/hdf5.m4 $(top_srcdir)/m4/laspack.m4 \ - $(top_srcdir)/m4/libhilbert.m4 \ + $(top_srcdir)/m4/hdf5.m4 $(top_srcdir)/m4/kokkos.m4 \ + $(top_srcdir)/m4/laspack.m4 $(top_srcdir)/m4/libhilbert.m4 \ $(top_srcdir)/m4/libmesh_compiler_features.m4 \ $(top_srcdir)/m4/libmesh_core_features.m4 \ $(top_srcdir)/m4/libmesh_metaphysicl.m4 \ diff --git a/examples/systems_of_equations/systems_of_equations_ex5/Makefile.in b/examples/systems_of_equations/systems_of_equations_ex5/Makefile.in index 22fe2d48bf0..b76a488d882 100644 --- a/examples/systems_of_equations/systems_of_equations_ex5/Makefile.in +++ b/examples/systems_of_equations/systems_of_equations_ex5/Makefile.in @@ -135,8 +135,8 @@ am__aclocal_m4_deps = \ $(top_srcdir)/m4/exodus.m4 $(top_srcdir)/m4/feexcept.m4 \ $(top_srcdir)/m4/fparser.m4 $(top_srcdir)/m4/glpk.m4 \ $(top_srcdir)/m4/gmv.m4 $(top_srcdir)/m4/gz.m4 \ - $(top_srcdir)/m4/hdf5.m4 $(top_srcdir)/m4/laspack.m4 \ - $(top_srcdir)/m4/libhilbert.m4 \ + $(top_srcdir)/m4/hdf5.m4 $(top_srcdir)/m4/kokkos.m4 \ + $(top_srcdir)/m4/laspack.m4 $(top_srcdir)/m4/libhilbert.m4 \ $(top_srcdir)/m4/libmesh_compiler_features.m4 \ $(top_srcdir)/m4/libmesh_core_features.m4 \ $(top_srcdir)/m4/libmesh_metaphysicl.m4 \ diff --git a/examples/systems_of_equations/systems_of_equations_ex6/Makefile.in b/examples/systems_of_equations/systems_of_equations_ex6/Makefile.in index b6b15092aba..fa4f9040d11 100644 --- a/examples/systems_of_equations/systems_of_equations_ex6/Makefile.in +++ b/examples/systems_of_equations/systems_of_equations_ex6/Makefile.in @@ -135,8 +135,8 @@ am__aclocal_m4_deps = \ $(top_srcdir)/m4/exodus.m4 $(top_srcdir)/m4/feexcept.m4 \ $(top_srcdir)/m4/fparser.m4 $(top_srcdir)/m4/glpk.m4 \ $(top_srcdir)/m4/gmv.m4 $(top_srcdir)/m4/gz.m4 \ - $(top_srcdir)/m4/hdf5.m4 $(top_srcdir)/m4/laspack.m4 \ - $(top_srcdir)/m4/libhilbert.m4 \ + $(top_srcdir)/m4/hdf5.m4 $(top_srcdir)/m4/kokkos.m4 \ + $(top_srcdir)/m4/laspack.m4 $(top_srcdir)/m4/libhilbert.m4 \ $(top_srcdir)/m4/libmesh_compiler_features.m4 \ $(top_srcdir)/m4/libmesh_core_features.m4 \ $(top_srcdir)/m4/libmesh_metaphysicl.m4 \ diff --git a/examples/systems_of_equations/systems_of_equations_ex7/Makefile.in b/examples/systems_of_equations/systems_of_equations_ex7/Makefile.in index 9c036b14331..1069e61f31b 100644 --- a/examples/systems_of_equations/systems_of_equations_ex7/Makefile.in +++ b/examples/systems_of_equations/systems_of_equations_ex7/Makefile.in @@ -136,8 +136,8 @@ am__aclocal_m4_deps = \ $(top_srcdir)/m4/exodus.m4 $(top_srcdir)/m4/feexcept.m4 \ $(top_srcdir)/m4/fparser.m4 $(top_srcdir)/m4/glpk.m4 \ $(top_srcdir)/m4/gmv.m4 $(top_srcdir)/m4/gz.m4 \ - $(top_srcdir)/m4/hdf5.m4 $(top_srcdir)/m4/laspack.m4 \ - $(top_srcdir)/m4/libhilbert.m4 \ + $(top_srcdir)/m4/hdf5.m4 $(top_srcdir)/m4/kokkos.m4 \ + $(top_srcdir)/m4/laspack.m4 $(top_srcdir)/m4/libhilbert.m4 \ $(top_srcdir)/m4/libmesh_compiler_features.m4 \ $(top_srcdir)/m4/libmesh_core_features.m4 \ $(top_srcdir)/m4/libmesh_metaphysicl.m4 \ diff --git a/examples/systems_of_equations/systems_of_equations_ex8/Makefile.in b/examples/systems_of_equations/systems_of_equations_ex8/Makefile.in index 50acb9ef0a2..9dbf9cc904e 100644 --- a/examples/systems_of_equations/systems_of_equations_ex8/Makefile.in +++ b/examples/systems_of_equations/systems_of_equations_ex8/Makefile.in @@ -136,8 +136,8 @@ am__aclocal_m4_deps = \ $(top_srcdir)/m4/exodus.m4 $(top_srcdir)/m4/feexcept.m4 \ $(top_srcdir)/m4/fparser.m4 $(top_srcdir)/m4/glpk.m4 \ $(top_srcdir)/m4/gmv.m4 $(top_srcdir)/m4/gz.m4 \ - $(top_srcdir)/m4/hdf5.m4 $(top_srcdir)/m4/laspack.m4 \ - $(top_srcdir)/m4/libhilbert.m4 \ + $(top_srcdir)/m4/hdf5.m4 $(top_srcdir)/m4/kokkos.m4 \ + $(top_srcdir)/m4/laspack.m4 $(top_srcdir)/m4/libhilbert.m4 \ $(top_srcdir)/m4/libmesh_compiler_features.m4 \ $(top_srcdir)/m4/libmesh_core_features.m4 \ $(top_srcdir)/m4/libmesh_metaphysicl.m4 \ diff --git a/examples/systems_of_equations/systems_of_equations_ex9/Makefile.in b/examples/systems_of_equations/systems_of_equations_ex9/Makefile.in index b6f6ee6544e..ccbd37c1594 100644 --- a/examples/systems_of_equations/systems_of_equations_ex9/Makefile.in +++ b/examples/systems_of_equations/systems_of_equations_ex9/Makefile.in @@ -136,8 +136,8 @@ am__aclocal_m4_deps = \ $(top_srcdir)/m4/exodus.m4 $(top_srcdir)/m4/feexcept.m4 \ $(top_srcdir)/m4/fparser.m4 $(top_srcdir)/m4/glpk.m4 \ $(top_srcdir)/m4/gmv.m4 $(top_srcdir)/m4/gz.m4 \ - $(top_srcdir)/m4/hdf5.m4 $(top_srcdir)/m4/laspack.m4 \ - $(top_srcdir)/m4/libhilbert.m4 \ + $(top_srcdir)/m4/hdf5.m4 $(top_srcdir)/m4/kokkos.m4 \ + $(top_srcdir)/m4/laspack.m4 $(top_srcdir)/m4/libhilbert.m4 \ $(top_srcdir)/m4/libmesh_compiler_features.m4 \ $(top_srcdir)/m4/libmesh_core_features.m4 \ $(top_srcdir)/m4/libmesh_metaphysicl.m4 \ diff --git a/examples/transient/transient_ex1/Makefile.in b/examples/transient/transient_ex1/Makefile.in index 0e39e5979cf..c9f6a226994 100644 --- a/examples/transient/transient_ex1/Makefile.in +++ b/examples/transient/transient_ex1/Makefile.in @@ -135,8 +135,8 @@ am__aclocal_m4_deps = \ $(top_srcdir)/m4/exodus.m4 $(top_srcdir)/m4/feexcept.m4 \ $(top_srcdir)/m4/fparser.m4 $(top_srcdir)/m4/glpk.m4 \ $(top_srcdir)/m4/gmv.m4 $(top_srcdir)/m4/gz.m4 \ - $(top_srcdir)/m4/hdf5.m4 $(top_srcdir)/m4/laspack.m4 \ - $(top_srcdir)/m4/libhilbert.m4 \ + $(top_srcdir)/m4/hdf5.m4 $(top_srcdir)/m4/kokkos.m4 \ + $(top_srcdir)/m4/laspack.m4 $(top_srcdir)/m4/libhilbert.m4 \ $(top_srcdir)/m4/libmesh_compiler_features.m4 \ $(top_srcdir)/m4/libmesh_core_features.m4 \ $(top_srcdir)/m4/libmesh_metaphysicl.m4 \ diff --git a/examples/transient/transient_ex2/Makefile.in b/examples/transient/transient_ex2/Makefile.in index 19c83b89de5..1b4eee0c19b 100644 --- a/examples/transient/transient_ex2/Makefile.in +++ b/examples/transient/transient_ex2/Makefile.in @@ -136,8 +136,8 @@ am__aclocal_m4_deps = \ $(top_srcdir)/m4/exodus.m4 $(top_srcdir)/m4/feexcept.m4 \ $(top_srcdir)/m4/fparser.m4 $(top_srcdir)/m4/glpk.m4 \ $(top_srcdir)/m4/gmv.m4 $(top_srcdir)/m4/gz.m4 \ - $(top_srcdir)/m4/hdf5.m4 $(top_srcdir)/m4/laspack.m4 \ - $(top_srcdir)/m4/libhilbert.m4 \ + $(top_srcdir)/m4/hdf5.m4 $(top_srcdir)/m4/kokkos.m4 \ + $(top_srcdir)/m4/laspack.m4 $(top_srcdir)/m4/libhilbert.m4 \ $(top_srcdir)/m4/libmesh_compiler_features.m4 \ $(top_srcdir)/m4/libmesh_core_features.m4 \ $(top_srcdir)/m4/libmesh_metaphysicl.m4 \ diff --git a/examples/transient/transient_ex3/Makefile.in b/examples/transient/transient_ex3/Makefile.in index f79116ac7dc..2a9d0b368af 100644 --- a/examples/transient/transient_ex3/Makefile.in +++ b/examples/transient/transient_ex3/Makefile.in @@ -136,8 +136,8 @@ am__aclocal_m4_deps = \ $(top_srcdir)/m4/exodus.m4 $(top_srcdir)/m4/feexcept.m4 \ $(top_srcdir)/m4/fparser.m4 $(top_srcdir)/m4/glpk.m4 \ $(top_srcdir)/m4/gmv.m4 $(top_srcdir)/m4/gz.m4 \ - $(top_srcdir)/m4/hdf5.m4 $(top_srcdir)/m4/laspack.m4 \ - $(top_srcdir)/m4/libhilbert.m4 \ + $(top_srcdir)/m4/hdf5.m4 $(top_srcdir)/m4/kokkos.m4 \ + $(top_srcdir)/m4/laspack.m4 $(top_srcdir)/m4/libhilbert.m4 \ $(top_srcdir)/m4/libmesh_compiler_features.m4 \ $(top_srcdir)/m4/libmesh_core_features.m4 \ $(top_srcdir)/m4/libmesh_metaphysicl.m4 \ diff --git a/examples/vector_fe/vector_fe_ex1/Makefile.in b/examples/vector_fe/vector_fe_ex1/Makefile.in index 25a34ed4414..d05df265497 100644 --- a/examples/vector_fe/vector_fe_ex1/Makefile.in +++ b/examples/vector_fe/vector_fe_ex1/Makefile.in @@ -135,8 +135,8 @@ am__aclocal_m4_deps = \ $(top_srcdir)/m4/exodus.m4 $(top_srcdir)/m4/feexcept.m4 \ $(top_srcdir)/m4/fparser.m4 $(top_srcdir)/m4/glpk.m4 \ $(top_srcdir)/m4/gmv.m4 $(top_srcdir)/m4/gz.m4 \ - $(top_srcdir)/m4/hdf5.m4 $(top_srcdir)/m4/laspack.m4 \ - $(top_srcdir)/m4/libhilbert.m4 \ + $(top_srcdir)/m4/hdf5.m4 $(top_srcdir)/m4/kokkos.m4 \ + $(top_srcdir)/m4/laspack.m4 $(top_srcdir)/m4/libhilbert.m4 \ $(top_srcdir)/m4/libmesh_compiler_features.m4 \ $(top_srcdir)/m4/libmesh_core_features.m4 \ $(top_srcdir)/m4/libmesh_metaphysicl.m4 \ diff --git a/examples/vector_fe/vector_fe_ex10/Makefile.in b/examples/vector_fe/vector_fe_ex10/Makefile.in index 6242a9689e2..abf7dcccb6e 100644 --- a/examples/vector_fe/vector_fe_ex10/Makefile.in +++ b/examples/vector_fe/vector_fe_ex10/Makefile.in @@ -136,8 +136,8 @@ am__aclocal_m4_deps = \ $(top_srcdir)/m4/exodus.m4 $(top_srcdir)/m4/feexcept.m4 \ $(top_srcdir)/m4/fparser.m4 $(top_srcdir)/m4/glpk.m4 \ $(top_srcdir)/m4/gmv.m4 $(top_srcdir)/m4/gz.m4 \ - $(top_srcdir)/m4/hdf5.m4 $(top_srcdir)/m4/laspack.m4 \ - $(top_srcdir)/m4/libhilbert.m4 \ + $(top_srcdir)/m4/hdf5.m4 $(top_srcdir)/m4/kokkos.m4 \ + $(top_srcdir)/m4/laspack.m4 $(top_srcdir)/m4/libhilbert.m4 \ $(top_srcdir)/m4/libmesh_compiler_features.m4 \ $(top_srcdir)/m4/libmesh_core_features.m4 \ $(top_srcdir)/m4/libmesh_metaphysicl.m4 \ diff --git a/examples/vector_fe/vector_fe_ex2/Makefile.in b/examples/vector_fe/vector_fe_ex2/Makefile.in index bcc7bda8e92..82e82d69f90 100644 --- a/examples/vector_fe/vector_fe_ex2/Makefile.in +++ b/examples/vector_fe/vector_fe_ex2/Makefile.in @@ -136,8 +136,8 @@ am__aclocal_m4_deps = \ $(top_srcdir)/m4/exodus.m4 $(top_srcdir)/m4/feexcept.m4 \ $(top_srcdir)/m4/fparser.m4 $(top_srcdir)/m4/glpk.m4 \ $(top_srcdir)/m4/gmv.m4 $(top_srcdir)/m4/gz.m4 \ - $(top_srcdir)/m4/hdf5.m4 $(top_srcdir)/m4/laspack.m4 \ - $(top_srcdir)/m4/libhilbert.m4 \ + $(top_srcdir)/m4/hdf5.m4 $(top_srcdir)/m4/kokkos.m4 \ + $(top_srcdir)/m4/laspack.m4 $(top_srcdir)/m4/libhilbert.m4 \ $(top_srcdir)/m4/libmesh_compiler_features.m4 \ $(top_srcdir)/m4/libmesh_core_features.m4 \ $(top_srcdir)/m4/libmesh_metaphysicl.m4 \ diff --git a/examples/vector_fe/vector_fe_ex3/Makefile.in b/examples/vector_fe/vector_fe_ex3/Makefile.in index 76252e51ad4..072cdd073ab 100644 --- a/examples/vector_fe/vector_fe_ex3/Makefile.in +++ b/examples/vector_fe/vector_fe_ex3/Makefile.in @@ -136,8 +136,8 @@ am__aclocal_m4_deps = \ $(top_srcdir)/m4/exodus.m4 $(top_srcdir)/m4/feexcept.m4 \ $(top_srcdir)/m4/fparser.m4 $(top_srcdir)/m4/glpk.m4 \ $(top_srcdir)/m4/gmv.m4 $(top_srcdir)/m4/gz.m4 \ - $(top_srcdir)/m4/hdf5.m4 $(top_srcdir)/m4/laspack.m4 \ - $(top_srcdir)/m4/libhilbert.m4 \ + $(top_srcdir)/m4/hdf5.m4 $(top_srcdir)/m4/kokkos.m4 \ + $(top_srcdir)/m4/laspack.m4 $(top_srcdir)/m4/libhilbert.m4 \ $(top_srcdir)/m4/libmesh_compiler_features.m4 \ $(top_srcdir)/m4/libmesh_core_features.m4 \ $(top_srcdir)/m4/libmesh_metaphysicl.m4 \ diff --git a/examples/vector_fe/vector_fe_ex4/Makefile.in b/examples/vector_fe/vector_fe_ex4/Makefile.in index c88ea1a27c9..6b2aaf11264 100644 --- a/examples/vector_fe/vector_fe_ex4/Makefile.in +++ b/examples/vector_fe/vector_fe_ex4/Makefile.in @@ -136,8 +136,8 @@ am__aclocal_m4_deps = \ $(top_srcdir)/m4/exodus.m4 $(top_srcdir)/m4/feexcept.m4 \ $(top_srcdir)/m4/fparser.m4 $(top_srcdir)/m4/glpk.m4 \ $(top_srcdir)/m4/gmv.m4 $(top_srcdir)/m4/gz.m4 \ - $(top_srcdir)/m4/hdf5.m4 $(top_srcdir)/m4/laspack.m4 \ - $(top_srcdir)/m4/libhilbert.m4 \ + $(top_srcdir)/m4/hdf5.m4 $(top_srcdir)/m4/kokkos.m4 \ + $(top_srcdir)/m4/laspack.m4 $(top_srcdir)/m4/libhilbert.m4 \ $(top_srcdir)/m4/libmesh_compiler_features.m4 \ $(top_srcdir)/m4/libmesh_core_features.m4 \ $(top_srcdir)/m4/libmesh_metaphysicl.m4 \ diff --git a/examples/vector_fe/vector_fe_ex5/Makefile.in b/examples/vector_fe/vector_fe_ex5/Makefile.in index 4464f32ec13..7c516479a97 100644 --- a/examples/vector_fe/vector_fe_ex5/Makefile.in +++ b/examples/vector_fe/vector_fe_ex5/Makefile.in @@ -136,8 +136,8 @@ am__aclocal_m4_deps = \ $(top_srcdir)/m4/exodus.m4 $(top_srcdir)/m4/feexcept.m4 \ $(top_srcdir)/m4/fparser.m4 $(top_srcdir)/m4/glpk.m4 \ $(top_srcdir)/m4/gmv.m4 $(top_srcdir)/m4/gz.m4 \ - $(top_srcdir)/m4/hdf5.m4 $(top_srcdir)/m4/laspack.m4 \ - $(top_srcdir)/m4/libhilbert.m4 \ + $(top_srcdir)/m4/hdf5.m4 $(top_srcdir)/m4/kokkos.m4 \ + $(top_srcdir)/m4/laspack.m4 $(top_srcdir)/m4/libhilbert.m4 \ $(top_srcdir)/m4/libmesh_compiler_features.m4 \ $(top_srcdir)/m4/libmesh_core_features.m4 \ $(top_srcdir)/m4/libmesh_metaphysicl.m4 \ diff --git a/examples/vector_fe/vector_fe_ex6/Makefile.in b/examples/vector_fe/vector_fe_ex6/Makefile.in index 89576c57f18..b3c6e4c5150 100644 --- a/examples/vector_fe/vector_fe_ex6/Makefile.in +++ b/examples/vector_fe/vector_fe_ex6/Makefile.in @@ -136,8 +136,8 @@ am__aclocal_m4_deps = \ $(top_srcdir)/m4/exodus.m4 $(top_srcdir)/m4/feexcept.m4 \ $(top_srcdir)/m4/fparser.m4 $(top_srcdir)/m4/glpk.m4 \ $(top_srcdir)/m4/gmv.m4 $(top_srcdir)/m4/gz.m4 \ - $(top_srcdir)/m4/hdf5.m4 $(top_srcdir)/m4/laspack.m4 \ - $(top_srcdir)/m4/libhilbert.m4 \ + $(top_srcdir)/m4/hdf5.m4 $(top_srcdir)/m4/kokkos.m4 \ + $(top_srcdir)/m4/laspack.m4 $(top_srcdir)/m4/libhilbert.m4 \ $(top_srcdir)/m4/libmesh_compiler_features.m4 \ $(top_srcdir)/m4/libmesh_core_features.m4 \ $(top_srcdir)/m4/libmesh_metaphysicl.m4 \ diff --git a/examples/vector_fe/vector_fe_ex7/Makefile.in b/examples/vector_fe/vector_fe_ex7/Makefile.in index d45faaa9f85..5751b2dfa6e 100644 --- a/examples/vector_fe/vector_fe_ex7/Makefile.in +++ b/examples/vector_fe/vector_fe_ex7/Makefile.in @@ -136,8 +136,8 @@ am__aclocal_m4_deps = \ $(top_srcdir)/m4/exodus.m4 $(top_srcdir)/m4/feexcept.m4 \ $(top_srcdir)/m4/fparser.m4 $(top_srcdir)/m4/glpk.m4 \ $(top_srcdir)/m4/gmv.m4 $(top_srcdir)/m4/gz.m4 \ - $(top_srcdir)/m4/hdf5.m4 $(top_srcdir)/m4/laspack.m4 \ - $(top_srcdir)/m4/libhilbert.m4 \ + $(top_srcdir)/m4/hdf5.m4 $(top_srcdir)/m4/kokkos.m4 \ + $(top_srcdir)/m4/laspack.m4 $(top_srcdir)/m4/libhilbert.m4 \ $(top_srcdir)/m4/libmesh_compiler_features.m4 \ $(top_srcdir)/m4/libmesh_core_features.m4 \ $(top_srcdir)/m4/libmesh_metaphysicl.m4 \ diff --git a/examples/vector_fe/vector_fe_ex8/Makefile.in b/examples/vector_fe/vector_fe_ex8/Makefile.in index 2ea4632110f..1d2df9dfd62 100644 --- a/examples/vector_fe/vector_fe_ex8/Makefile.in +++ b/examples/vector_fe/vector_fe_ex8/Makefile.in @@ -136,8 +136,8 @@ am__aclocal_m4_deps = \ $(top_srcdir)/m4/exodus.m4 $(top_srcdir)/m4/feexcept.m4 \ $(top_srcdir)/m4/fparser.m4 $(top_srcdir)/m4/glpk.m4 \ $(top_srcdir)/m4/gmv.m4 $(top_srcdir)/m4/gz.m4 \ - $(top_srcdir)/m4/hdf5.m4 $(top_srcdir)/m4/laspack.m4 \ - $(top_srcdir)/m4/libhilbert.m4 \ + $(top_srcdir)/m4/hdf5.m4 $(top_srcdir)/m4/kokkos.m4 \ + $(top_srcdir)/m4/laspack.m4 $(top_srcdir)/m4/libhilbert.m4 \ $(top_srcdir)/m4/libmesh_compiler_features.m4 \ $(top_srcdir)/m4/libmesh_core_features.m4 \ $(top_srcdir)/m4/libmesh_metaphysicl.m4 \ diff --git a/examples/vector_fe/vector_fe_ex9/Makefile.in b/examples/vector_fe/vector_fe_ex9/Makefile.in index 3f031e8bf29..81d4d5e82c1 100644 --- a/examples/vector_fe/vector_fe_ex9/Makefile.in +++ b/examples/vector_fe/vector_fe_ex9/Makefile.in @@ -136,8 +136,8 @@ am__aclocal_m4_deps = \ $(top_srcdir)/m4/exodus.m4 $(top_srcdir)/m4/feexcept.m4 \ $(top_srcdir)/m4/fparser.m4 $(top_srcdir)/m4/glpk.m4 \ $(top_srcdir)/m4/gmv.m4 $(top_srcdir)/m4/gz.m4 \ - $(top_srcdir)/m4/hdf5.m4 $(top_srcdir)/m4/laspack.m4 \ - $(top_srcdir)/m4/libhilbert.m4 \ + $(top_srcdir)/m4/hdf5.m4 $(top_srcdir)/m4/kokkos.m4 \ + $(top_srcdir)/m4/laspack.m4 $(top_srcdir)/m4/libhilbert.m4 \ $(top_srcdir)/m4/libmesh_compiler_features.m4 \ $(top_srcdir)/m4/libmesh_core_features.m4 \ $(top_srcdir)/m4/libmesh_metaphysicl.m4 \ diff --git a/include/Makefile.in b/include/Makefile.in index 9f3532120fd..870a206de31 100644 --- a/include/Makefile.in +++ b/include/Makefile.in @@ -130,8 +130,8 @@ am__aclocal_m4_deps = \ $(top_srcdir)/m4/exodus.m4 $(top_srcdir)/m4/feexcept.m4 \ $(top_srcdir)/m4/fparser.m4 $(top_srcdir)/m4/glpk.m4 \ $(top_srcdir)/m4/gmv.m4 $(top_srcdir)/m4/gz.m4 \ - $(top_srcdir)/m4/hdf5.m4 $(top_srcdir)/m4/laspack.m4 \ - $(top_srcdir)/m4/libhilbert.m4 \ + $(top_srcdir)/m4/hdf5.m4 $(top_srcdir)/m4/kokkos.m4 \ + $(top_srcdir)/m4/laspack.m4 $(top_srcdir)/m4/libhilbert.m4 \ $(top_srcdir)/m4/libmesh_compiler_features.m4 \ $(top_srcdir)/m4/libmesh_core_features.m4 \ $(top_srcdir)/m4/libmesh_metaphysicl.m4 \ diff --git a/include/libmesh/Makefile.in b/include/libmesh/Makefile.in index 20ffe3646e2..286cf6a566b 100644 --- a/include/libmesh/Makefile.in +++ b/include/libmesh/Makefile.in @@ -148,8 +148,8 @@ am__aclocal_m4_deps = \ $(top_srcdir)/m4/exodus.m4 $(top_srcdir)/m4/feexcept.m4 \ $(top_srcdir)/m4/fparser.m4 $(top_srcdir)/m4/glpk.m4 \ $(top_srcdir)/m4/gmv.m4 $(top_srcdir)/m4/gz.m4 \ - $(top_srcdir)/m4/hdf5.m4 $(top_srcdir)/m4/laspack.m4 \ - $(top_srcdir)/m4/libhilbert.m4 \ + $(top_srcdir)/m4/hdf5.m4 $(top_srcdir)/m4/kokkos.m4 \ + $(top_srcdir)/m4/laspack.m4 $(top_srcdir)/m4/libhilbert.m4 \ $(top_srcdir)/m4/libmesh_compiler_features.m4 \ $(top_srcdir)/m4/libmesh_core_features.m4 \ $(top_srcdir)/m4/libmesh_metaphysicl.m4 \ diff --git a/tests/Makefile.in b/tests/Makefile.in index e4613fe6858..85967ce161f 100644 --- a/tests/Makefile.in +++ b/tests/Makefile.in @@ -157,8 +157,8 @@ am__aclocal_m4_deps = \ $(top_srcdir)/m4/exodus.m4 $(top_srcdir)/m4/feexcept.m4 \ $(top_srcdir)/m4/fparser.m4 $(top_srcdir)/m4/glpk.m4 \ $(top_srcdir)/m4/gmv.m4 $(top_srcdir)/m4/gz.m4 \ - $(top_srcdir)/m4/hdf5.m4 $(top_srcdir)/m4/laspack.m4 \ - $(top_srcdir)/m4/libhilbert.m4 \ + $(top_srcdir)/m4/hdf5.m4 $(top_srcdir)/m4/kokkos.m4 \ + $(top_srcdir)/m4/laspack.m4 $(top_srcdir)/m4/libhilbert.m4 \ $(top_srcdir)/m4/libmesh_compiler_features.m4 \ $(top_srcdir)/m4/libmesh_core_features.m4 \ $(top_srcdir)/m4/libmesh_metaphysicl.m4 \ From 0205601a0903bbb7f93391ca4f798b10e3dcec40 Mon Sep 17 00:00:00 2001 From: Roy Stogner Date: Wed, 20 May 2026 11:17:08 -0500 Subject: [PATCH 26/46] Give some messages when Kokkos is disabled --- m4/config_summary.m4 | 1 + m4/kokkos.m4 | 3 ++- 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/m4/config_summary.m4 b/m4/config_summary.m4 index f1ae9b86a15..b8afc58a056 100644 --- a/m4/config_summary.m4 +++ b/m4/config_summary.m4 @@ -126,6 +126,7 @@ AS_IF([test "x$enableoptional" = "xyes"], AS_ECHO([" gmv.............................. : $enablegmv"]) AS_ECHO([" gzstream......................... : $enablegz"]) AS_ECHO([" hdf5............................. : $enablehdf5"]) + AS_ECHO([" kokkos........................... : $enablekokkos"]) AS_ECHO([" laspack.......................... : $enablelaspack"]) AS_ECHO([" libhilbert....................... : $enablelibhilbert"]) AS_ECHO([" metaphysicl...................... : $enablemetaphysicl"]) diff --git a/m4/kokkos.m4 b/m4/kokkos.m4 index e9b53c71571..bd5c83ea8cc 100644 --- a/m4/kokkos.m4 +++ b/m4/kokkos.m4 @@ -198,7 +198,8 @@ AC_DEFUN([CONFIGURE_KOKKOS], enablekokkos=no ]) ], - [enablekokkos=no]) + [AC_MSG_NOTICE(<<< Configuring library without Kokkos support >>>) + enablekokkos=no]) AC_SUBST([KOKKOS_CXX]) AC_SUBST([KOKKOS_CPPFLAGS]) From 25b903edffc6bb32204e58a725a3b8e74d15acbf Mon Sep 17 00:00:00 2001 From: Roy Stogner Date: Wed, 20 May 2026 11:18:12 -0500 Subject: [PATCH 27/46] Re-bootstrap --- configure | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/configure b/configure index 561f0d8c9b9..decbd8dc77e 100755 --- a/configure +++ b/configure @@ -64384,7 +64384,9 @@ fi else case e in #( - e) enablekokkos=no ;; + e) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: <<< Configuring library without Kokkos support >>>" >&5 +printf "%s\n" "$as_me: <<< Configuring library without Kokkos support >>>" >&6;} + enablekokkos=no ;; esac fi @@ -68945,6 +68947,7 @@ fi printf "%s\n" " gmv.............................. : $enablegmv" printf "%s\n" " gzstream......................... : $enablegz" printf "%s\n" " hdf5............................. : $enablehdf5" + printf "%s\n" " kokkos........................... : $enablekokkos" printf "%s\n" " laspack.......................... : $enablelaspack" printf "%s\n" " libhilbert....................... : $enablelibhilbert" printf "%s\n" " metaphysicl...................... : $enablemetaphysicl" From 17d2a2cceb9a779a0ccc86b9700e0aae5a8996ff Mon Sep 17 00:00:00 2001 From: Roy Stogner Date: Wed, 20 May 2026 12:11:37 -0500 Subject: [PATCH 28/46] Add independent Kokkos include/lib options This is necessary to configure with Ubuntu libkokkos-dev, and possibly elsewhere. --- m4/kokkos.m4 | 74 ++++++++++++++++++++++++++++++---------------------- 1 file changed, 43 insertions(+), 31 deletions(-) diff --git a/m4/kokkos.m4 b/m4/kokkos.m4 index bd5c83ea8cc..55212ab9d5a 100644 --- a/m4/kokkos.m4 +++ b/m4/kokkos.m4 @@ -8,31 +8,43 @@ AC_DEFUN([CONFIGURE_KOKKOS], [Enable Kokkos support using the installation at DIR]), [KOKKOS_DIR="$withval"], [KOKKOS_DIR="no"]) - + + AC_ARG_WITH([kokkos-include], + AS_HELP_STRING([--with-kokkos-include=DIR], + [Enable Kokkos support using the headers in DIR]), + [KOKKOS_INCLUDE_DIR="$withval"], + [KOKKOS_INCLUDE_DIR="$KOKKOS_DIR/include"]) + + AC_ARG_WITH([kokkos-lib], + AS_HELP_STRING([--with-kokkos-lib=DIR], + [Enable Kokkos support using the libraries in DIR]), + [KOKKOS_LIB_DIR="$withval"], + [KOKKOS_LIB_DIR="$KOKKOS_DIR/lib"]) + AC_ARG_WITH([kokkos-backend], AS_HELP_STRING([--with-kokkos-backend=BACKEND], [cuda|hip|sycl|openmp|serial (default: auto-detect from KokkosCore_config.h)]), [KOKKOS_BACKEND="$withval"], [KOKKOS_BACKEND="auto"]) - + dnl Allow the caller (e.g. MOOSE's configure_libmesh.sh) to pre-set the dnl Kokkos compiler and flags via environment variables. If KOKKOS_CXX is dnl already set, we skip auto-detection entirely — the caller knows best. dnl We use AC_SUBST (not AC_ARG_VAR) so these flags stay scoped to .K dnl compilation rules and don't leak into the main CPPFLAGS/CXXFLAGS. - - AS_IF([test "x$KOKKOS_DIR" != "xno"], + + AS_IF([test "x$KOKKOS_INCLUDE_DIR" != "xno/include" -a "x$KOKKOS_LIB_DIR" != "xno/lib"], [ - AC_CHECK_FILE([$KOKKOS_DIR/include/Kokkos_Core.hpp], + AC_CHECK_FILE([$KOKKOS_INCLUDE_DIR/Kokkos_Core.hpp], [ enablekokkos=yes - libmesh_optional_INCLUDES="$libmesh_optional_INCLUDES -I$KOKKOS_DIR/include" - libmesh_optional_LIBS="$libmesh_optional_LIBS -L$KOKKOS_DIR/lib -lkokkoscore" - + libmesh_optional_INCLUDES="$libmesh_optional_INCLUDES -I$KOKKOS_INCLUDE_DIR" + libmesh_optional_LIBS="$libmesh_optional_LIBS -L$KOKKOS_LIB_DIR -lkokkoscore" + dnl Only auto-detect if KOKKOS_CXX was not pre-set by the caller AS_IF([test "x$KOKKOS_CXX" = "x"], [ - KOKKOS_CFG="$KOKKOS_DIR/include/KokkosCore_config.h" - + KOKKOS_CFG="$KOKKOS_INCLUDE_DIR/KokkosCore_config.h" + dnl Auto-detect backend AS_IF([test "x$KOKKOS_BACKEND" = "xauto"], [ @@ -50,15 +62,15 @@ AC_DEFUN([CONFIGURE_KOKKOS], ], [KOKKOS_BACKEND=serial]) ]) - + AC_MSG_RESULT([Kokkos backend: $KOKKOS_BACKEND]) - + dnl Check if Kokkos was built with OpenMP have_kokkos_openmp=no AS_IF([test -r "$KOKKOS_CFG"], [AS_IF([grep -q 'KOKKOS_ENABLE_OPENMP' "$KOKKOS_CFG"], [have_kokkos_openmp=yes])]) - + case "$KOKKOS_BACKEND" in cuda) AC_PATH_PROG([NVCC],[nvcc],[no],[$PATH]) @@ -66,7 +78,7 @@ AC_DEFUN([CONFIGURE_KOKKOS], [AC_MSG_ERROR([nvcc not found but Kokkos CUDA backend requested])]) KOKKOS_CXX="$NVCC" KOKKOS_CXXFLAGS="--forward-unknown-to-host-compiler --extended-lambda --disable-warnings -x cu -ccbin $CXX" - KOKKOS_LDFLAGS="--forward-unknown-to-host-compiler -L$KOKKOS_DIR/lib" + KOKKOS_LDFLAGS="--forward-unknown-to-host-compiler -L$KOKKOS_LIB_DIR" AS_IF([test "x$have_kokkos_openmp" = "xyes"], [ KOKKOS_CXXFLAGS="$KOKKOS_CXXFLAGS -fopenmp" @@ -78,7 +90,7 @@ AC_DEFUN([CONFIGURE_KOKKOS], AS_IF([test "x$HIPCC" = "xno"], [AC_MSG_ERROR([hipcc not found but Kokkos HIP backend requested])]) KOKKOS_CXX="$HIPCC" - KOKKOS_LDFLAGS="-L$KOKKOS_DIR/lib" + KOKKOS_LDFLAGS="-L$KOKKOS_LIB_DIR" ;; sycl) AC_PATH_PROG([ICPX],[icpx],[no],[$PATH]) @@ -86,27 +98,27 @@ AC_DEFUN([CONFIGURE_KOKKOS], [AC_MSG_ERROR([icpx not found but Kokkos SYCL backend requested])]) KOKKOS_CXX="$ICPX" KOKKOS_CXXFLAGS="-fsycl" - KOKKOS_LDFLAGS="-fsycl -L$KOKKOS_DIR/lib" + KOKKOS_LDFLAGS="-fsycl -L$KOKKOS_LIB_DIR" ;; openmp) KOKKOS_CXX="${CXX}" KOKKOS_CXXFLAGS="-fopenmp -x c++" - KOKKOS_LDFLAGS="-fopenmp -L$KOKKOS_DIR/lib" + KOKKOS_LDFLAGS="-fopenmp -L$KOKKOS_LIB_DIR" ;; serial|*) KOKKOS_CXX="${CXX}" KOKKOS_CXXFLAGS="-x c++" - KOKKOS_LDFLAGS="-L$KOKKOS_DIR/lib" + KOKKOS_LDFLAGS="-L$KOKKOS_LIB_DIR" ;; esac ], [AC_MSG_RESULT([Using caller-provided KOKKOS_CXX=$KOKKOS_CXX])]) - + dnl Set defaults for any variables not provided by caller or auto-detect - KOKKOS_CPPFLAGS="${KOKKOS_CPPFLAGS:--DLIBMESH_KOKKOS_COMPILATION -I$KOKKOS_DIR/include}" - KOKKOS_LDFLAGS="${KOKKOS_LDFLAGS:--L$KOKKOS_DIR/lib}" + KOKKOS_CPPFLAGS="${KOKKOS_CPPFLAGS:--DLIBMESH_KOKKOS_COMPILATION -I$KOKKOS_INCLUDE_DIR}" + KOKKOS_LDFLAGS="${KOKKOS_LDFLAGS:--L$KOKKOS_LIB_DIR}" KOKKOS_LIBS="${KOKKOS_LIBS:--lkokkoscore}" - + dnl If KOKKOS_CXX differs from the main compiler, it may not be the MPI dnl wrapper and thus may need the wrapper's compile flags explicitly in dnl order to find mpi.h. Query the primary CXX wrapper for compile-time @@ -126,7 +138,7 @@ AC_DEFUN([CONFIGURE_KOKKOS], [AC_MSG_RESULT([not found])], [AC_MSG_RESULT([$KOKKOS_MPI_CPPFLAGS])]) ]) - + dnl Fail configure early if the chosen Kokkos compiler/flags/libs cannot dnl actually compile and link a minimal Kokkos program. AC_MSG_CHECKING([whether the Kokkos compiler configuration works]) @@ -135,14 +147,14 @@ AC_DEFUN([CONFIGURE_KOKKOS], libmesh_save_CXXFLAGS="$CXXFLAGS" libmesh_save_LDFLAGS="$LDFLAGS" libmesh_save_LIBS="$LIBS" - + CXX="$KOKKOS_CXX" CPPFLAGS="$CPPFLAGS $KOKKOS_CPPFLAGS $KOKKOS_MPI_CPPFLAGS" CXXFLAGS="$CXXFLAGS $KOKKOS_CXXFLAGS" LDFLAGS="$LDFLAGS $KOKKOS_LDFLAGS" LIBS="$LIBS $KOKKOS_LIBS" AC_LANG_PUSH([C++]) - + AS_IF([test "x$enablempi" = "xyes"], [ LDFLAGS="$LDFLAGS $MPI_LDFLAGS" @@ -178,29 +190,29 @@ AC_DEFUN([CONFIGURE_KOKKOS], [kokkos_config_works=no]) ]) AC_LANG_POP([C++]) - + CXX="$libmesh_save_CXX" CPPFLAGS="$libmesh_save_CPPFLAGS" CXXFLAGS="$libmesh_save_CXXFLAGS" LDFLAGS="$libmesh_save_LDFLAGS" LIBS="$libmesh_save_LIBS" - + AS_IF([test "x$kokkos_config_works" = "xyes"], [AC_MSG_RESULT([yes])], [AC_MSG_ERROR([configured Kokkos compiler/flags failed to compile and link a minimal test program])]) - + AC_DEFINE([HAVE_KOKKOS], [1], [Define if Kokkos support is enabled in libMesh]) AC_MSG_RESULT(<<< Configuring library with Kokkos support >>>) ], [ - AC_MSG_WARN([Kokkos not found at $KOKKOS_DIR -- disabling Kokkos FE support]) + AC_MSG_WARN([Kokkos not found at $KOKKOS_INCLUDE_DIR -- disabling Kokkos FE support]) enablekokkos=no ]) ], [AC_MSG_NOTICE(<<< Configuring library without Kokkos support >>>) enablekokkos=no]) - + AC_SUBST([KOKKOS_CXX]) AC_SUBST([KOKKOS_CPPFLAGS]) AC_SUBST([KOKKOS_CXXFLAGS]) @@ -209,4 +221,4 @@ AC_DEFUN([CONFIGURE_KOKKOS], AC_SUBST([KOKKOS_MPI_CPPFLAGS]) AM_CONDITIONAL(LIBMESH_ENABLE_KOKKOS, test x$enablekokkos = xyes) ]) - + From 559b5afd3f98a6d2d59a23e63483705684fa8d05 Mon Sep 17 00:00:00 2001 From: Roy Stogner Date: Wed, 20 May 2026 12:13:30 -0500 Subject: [PATCH 29/46] Re-bootstrap --- configure | 61 +++++++++++++++++++++++++++++++++++++++---------------- 1 file changed, 44 insertions(+), 17 deletions(-) diff --git a/configure b/configure index decbd8dc77e..08fd8b6132f 100755 --- a/configure +++ b/configure @@ -1359,6 +1359,8 @@ with_metaphysicl with_metaphysicl_include enable_metaphysicl_required with_kokkos +with_kokkos_include +with_kokkos_lib with_kokkos_backend ' ac_precious_vars='build_alias @@ -2287,6 +2289,9 @@ Optional Packages: --with-metaphysicl-include= --with-kokkos=DIR Enable Kokkos support using the installation at DIR + --with-kokkos-include=DIR + Enable Kokkos support using the headers in DIR + --with-kokkos-lib=DIR Enable Kokkos support using the libraries in DIR --with-kokkos-backend=BACKEND cuda|hip|sycl|openmp|serial (default: auto-detect from KokkosCore_config.h) @@ -63945,6 +63950,28 @@ fi +# Check whether --with-kokkos-include was given. +if test ${with_kokkos_include+y} +then : + withval=$with_kokkos_include; KOKKOS_INCLUDE_DIR="$withval" +else case e in #( + e) KOKKOS_INCLUDE_DIR="$KOKKOS_DIR/include" ;; +esac +fi + + + +# Check whether --with-kokkos-lib was given. +if test ${with_kokkos_lib+y} +then : + withval=$with_kokkos_lib; KOKKOS_LIB_DIR="$withval" +else case e in #( + e) KOKKOS_LIB_DIR="$KOKKOS_DIR/lib" ;; +esac +fi + + + # Check whether --with-kokkos-backend was given. if test ${with_kokkos_backend+y} then : @@ -63956,19 +63983,19 @@ fi - if test "x$KOKKOS_DIR" != "xno" + if test "x$KOKKOS_INCLUDE_DIR" != "xno/include" -a "x$KOKKOS_LIB_DIR" != "xno/lib" then : - as_ac_File=`printf "%s\n" "ac_cv_file_$KOKKOS_DIR/include/Kokkos_Core.hpp" | sed "$as_sed_sh"` -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $KOKKOS_DIR/include/Kokkos_Core.hpp" >&5 -printf %s "checking for $KOKKOS_DIR/include/Kokkos_Core.hpp... " >&6; } + as_ac_File=`printf "%s\n" "ac_cv_file_$KOKKOS_INCLUDE_DIR/Kokkos_Core.hpp" | sed "$as_sed_sh"` +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $KOKKOS_INCLUDE_DIR/Kokkos_Core.hpp" >&5 +printf %s "checking for $KOKKOS_INCLUDE_DIR/Kokkos_Core.hpp... " >&6; } if eval test \${$as_ac_File+y} then : printf %s "(cached) " >&6 else case e in #( e) test "$cross_compiling" = yes && as_fn_error $? "cannot check for file existence when cross compiling" "$LINENO" 5 -if test -r "$KOKKOS_DIR/include/Kokkos_Core.hpp"; then +if test -r "$KOKKOS_INCLUDE_DIR/Kokkos_Core.hpp"; then eval "$as_ac_File=yes" else eval "$as_ac_File=no" @@ -63982,13 +64009,13 @@ if eval test \"x\$"$as_ac_File"\" = x"yes" then : enablekokkos=yes - libmesh_optional_INCLUDES="$libmesh_optional_INCLUDES -I$KOKKOS_DIR/include" - libmesh_optional_LIBS="$libmesh_optional_LIBS -L$KOKKOS_DIR/lib -lkokkoscore" + libmesh_optional_INCLUDES="$libmesh_optional_INCLUDES -I$KOKKOS_INCLUDE_DIR" + libmesh_optional_LIBS="$libmesh_optional_LIBS -L$KOKKOS_LIB_DIR -lkokkoscore" if test "x$KOKKOS_CXX" = "x" then : - KOKKOS_CFG="$KOKKOS_DIR/include/KokkosCore_config.h" + KOKKOS_CFG="$KOKKOS_INCLUDE_DIR/KokkosCore_config.h" if test "x$KOKKOS_BACKEND" = "xauto" then : @@ -64096,7 +64123,7 @@ then : fi KOKKOS_CXX="$NVCC" KOKKOS_CXXFLAGS="--forward-unknown-to-host-compiler --extended-lambda --disable-warnings -x cu -ccbin $CXX" - KOKKOS_LDFLAGS="--forward-unknown-to-host-compiler -L$KOKKOS_DIR/lib" + KOKKOS_LDFLAGS="--forward-unknown-to-host-compiler -L$KOKKOS_LIB_DIR" if test "x$have_kokkos_openmp" = "xyes" then : @@ -64158,7 +64185,7 @@ then : as_fn_error $? "hipcc not found but Kokkos HIP backend requested" "$LINENO" 5 fi KOKKOS_CXX="$HIPCC" - KOKKOS_LDFLAGS="-L$KOKKOS_DIR/lib" + KOKKOS_LDFLAGS="-L$KOKKOS_LIB_DIR" ;; sycl) # Extract the first word of "icpx", so it can be a program name with args. @@ -64214,17 +64241,17 @@ then : fi KOKKOS_CXX="$ICPX" KOKKOS_CXXFLAGS="-fsycl" - KOKKOS_LDFLAGS="-fsycl -L$KOKKOS_DIR/lib" + KOKKOS_LDFLAGS="-fsycl -L$KOKKOS_LIB_DIR" ;; openmp) KOKKOS_CXX="${CXX}" KOKKOS_CXXFLAGS="-fopenmp -x c++" - KOKKOS_LDFLAGS="-fopenmp -L$KOKKOS_DIR/lib" + KOKKOS_LDFLAGS="-fopenmp -L$KOKKOS_LIB_DIR" ;; serial|*) KOKKOS_CXX="${CXX}" KOKKOS_CXXFLAGS="-x c++" - KOKKOS_LDFLAGS="-L$KOKKOS_DIR/lib" + KOKKOS_LDFLAGS="-L$KOKKOS_LIB_DIR" ;; esac @@ -64234,8 +64261,8 @@ printf "%s\n" "Using caller-provided KOKKOS_CXX=$KOKKOS_CXX" >&6; } ;; esac fi - KOKKOS_CPPFLAGS="${KOKKOS_CPPFLAGS:--DLIBMESH_KOKKOS_COMPILATION -I$KOKKOS_DIR/include}" - KOKKOS_LDFLAGS="${KOKKOS_LDFLAGS:--L$KOKKOS_DIR/lib}" + KOKKOS_CPPFLAGS="${KOKKOS_CPPFLAGS:--DLIBMESH_KOKKOS_COMPILATION -I$KOKKOS_INCLUDE_DIR}" + KOKKOS_LDFLAGS="${KOKKOS_LDFLAGS:--L$KOKKOS_LIB_DIR}" KOKKOS_LIBS="${KOKKOS_LIBS:--lkokkoscore}" KOKKOS_MPI_CPPFLAGS="" @@ -64375,8 +64402,8 @@ printf "%s\n" "<<< Configuring library with Kokkos support >>>" >&6; } else case e in #( e) - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: Kokkos not found at $KOKKOS_DIR -- disabling Kokkos FE support" >&5 -printf "%s\n" "$as_me: WARNING: Kokkos not found at $KOKKOS_DIR -- disabling Kokkos FE support" >&2;} + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: Kokkos not found at $KOKKOS_INCLUDE_DIR -- disabling Kokkos FE support" >&5 +printf "%s\n" "$as_me: WARNING: Kokkos not found at $KOKKOS_INCLUDE_DIR -- disabling Kokkos FE support" >&2;} enablekokkos=no ;; esac From 46758ffef865c400083d8f5315d0121bd9bd65f9 Mon Sep 17 00:00:00 2001 From: Roy Stogner Date: Wed, 20 May 2026 12:32:42 -0500 Subject: [PATCH 30/46] Don't request GNU extensions With Kokkos we may have device compilers that can't handle them. --- configure.ac | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/configure.ac b/configure.ac index b21b712414c..db4901daf2e 100644 --- a/configure.ac +++ b/configure.ac @@ -174,8 +174,12 @@ AS_IF([test "x$enablemarch" != "xno"], # flag, for the current compiler, for the user's requested C++ # standards level. Adds the required flag to CXXFLAGS if # one is found. Exits if no acceptable flag is found. +# +# Don't turn on GNU extensions. We don't use them, and with device +# computing we might be using a mix of compilers that don't all +# support them. # -------------------------------------------------------------- -ACSM_CXX_COMPILER_STANDARD([2017], [2017]) +ACSM_CXX_COMPILER_STANDARD([2017], [2017], [noext]) # -------------------------------------------------------------- # See compiler.m4 for the definition of this function. It uses the From c7c704c32b084beaf4606bbf7feb5e29677fa10e Mon Sep 17 00:00:00 2001 From: Roy Stogner Date: Wed, 20 May 2026 12:36:14 -0500 Subject: [PATCH 31/46] Re-bootstrap --- configure | 12532 ++++++++++++++++++++-------------------------------- 1 file changed, 4672 insertions(+), 7860 deletions(-) diff --git a/configure b/configure index 08fd8b6132f..4fa7aa52acb 100755 --- a/configure +++ b/configure @@ -9217,6 +9217,10 @@ fi # flag, for the current compiler, for the user's requested C++ # standards level. Adds the required flag to CXXFLAGS if # one is found. Exits if no acceptable flag is found. +# +# Don't turn on GNU extensions. We don't use them, and with device +# computing we might be using a mix of compilers that don't all +# support them. # -------------------------------------------------------------- acsm_CXX_STD_MIN="2017" @@ -10128,19 +10132,21 @@ then : ac_success=yes fi + + if test x$ac_success = xno; then - for alternative in ${ax_cxx_compile_alternatives}; do - switch="-std=gnu++${alternative}" - cachevar=`printf "%s\n" "ax_cv_cxx_compile_cxx17_$switch" | sed "$as_sed_sh"` - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether $CXX supports C++17 features with $switch" >&5 + for alternative in ${ax_cxx_compile_alternatives}; do + for switch in -std=c++${alternative} +std=c++${alternative} "-h std=c++${alternative}"; do + cachevar=`printf "%s\n" "ax_cv_cxx_compile_cxx17_$switch" | sed "$as_sed_sh"` + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether $CXX supports C++17 features with $switch" >&5 printf %s "checking whether $CXX supports C++17 features with $switch... " >&6; } if eval test \${$cachevar+y} then : printf %s "(cached) " >&6 else case e in #( e) ac_save_CXX="$CXX" - CXX="$CXX $switch" - cat confdefs.h - <<_ACEOF >conftest.$ac_ext + CXX="$CXX $switch" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ @@ -10937,36 +10943,66 @@ else case e in #( esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext - CXX="$ac_save_CXX" ;; + CXX="$ac_save_CXX" ;; esac fi eval ac_res=\$$cachevar { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 printf "%s\n" "$ac_res" >&6; } - if eval test x\$$cachevar = xyes; then - CXX="$CXX $switch" - if test -n "$CXXCPP" ; then - CXXCPP="$CXXCPP $switch" + if eval test x\$$cachevar = xyes; then + CXX="$CXX $switch" + if test -n "$CXXCPP" ; then + CXXCPP="$CXXCPP $switch" + fi + ac_success=yes + break fi - ac_success=yes + done + if test x$ac_success = xyes; then break fi done fi + ac_ext=cpp +ac_cpp='$CXXCPP $CPPFLAGS' +ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_cxx_compiler_gnu + if test x$ax_cxx_compile_cxx17_required = xtrue; then if test x$ac_success = xno; then - for alternative in ${ax_cxx_compile_alternatives}; do - for switch in -std=c++${alternative} +std=c++${alternative} "-h std=c++${alternative}"; do - cachevar=`printf "%s\n" "ax_cv_cxx_compile_cxx17_$switch" | sed "$as_sed_sh"` - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether $CXX supports C++17 features with $switch" >&5 -printf %s "checking whether $CXX supports C++17 features with $switch... " >&6; } + as_fn_error $? "*** A compiler with support for C++17 language features is required." "$LINENO" 5 + fi + fi + if test x$ac_success = xno; then + HAVE_CXX17=0 + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: No compiler with C++17 support was found" >&5 +printf "%s\n" "$as_me: No compiler with C++17 support was found" >&6;} + else + HAVE_CXX17=1 + +printf "%s\n" "#define HAVE_CXX17 1" >>confdefs.h + + fi + + +else case e in #( + e) ax_cxx_compile_alternatives="17 1z" ax_cxx_compile_cxx17_required=true + ac_ext=cpp +ac_cpp='$CXXCPP $CPPFLAGS' +ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_cxx_compiler_gnu + ac_success=no + + cachevar=ax_cv_cxx_compile_cxx17 + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether $CXX supports C++17 features by default" >&5 +printf %s "checking whether $CXX supports C++17 features by default... " >&6; } if eval test \${$cachevar+y} then : printf %s "(cached) " >&6 else case e in #( - e) ac_save_CXX="$CXX" - CXX="$CXX $switch" - cat confdefs.h - <<_ACEOF >conftest.$ac_ext + e) cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ @@ -11762,67 +11798,32 @@ else case e in #( e) eval $cachevar=no ;; esac fi -rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext - CXX="$ac_save_CXX" ;; +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext ;; esac fi eval ac_res=\$$cachevar { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 printf "%s\n" "$ac_res" >&6; } - if eval test x\$$cachevar = xyes; then - CXX="$CXX $switch" - if test -n "$CXXCPP" ; then - CXXCPP="$CXXCPP $switch" - fi - ac_success=yes - break - fi - done - if test x$ac_success = xyes; then - break - fi - done - fi - ac_ext=cpp -ac_cpp='$CXXCPP $CPPFLAGS' -ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_cxx_compiler_gnu - - if test x$ax_cxx_compile_cxx17_required = xtrue; then - if test x$ac_success = xno; then - as_fn_error $? "*** A compiler with support for C++17 language features is required." "$LINENO" 5 - fi - fi - if test x$ac_success = xno; then - HAVE_CXX17=0 - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: No compiler with C++17 support was found" >&5 -printf "%s\n" "$as_me: No compiler with C++17 support was found" >&6;} - else - HAVE_CXX17=1 - -printf "%s\n" "#define HAVE_CXX17 1" >>confdefs.h - - fi + if eval test x\$$cachevar = xyes +then : + ac_success=yes +fi -else case e in #( - e) ax_cxx_compile_alternatives="17 1z" ax_cxx_compile_cxx17_required=true - ac_ext=cpp -ac_cpp='$CXXCPP $CPPFLAGS' -ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_cxx_compiler_gnu - ac_success=no - cachevar=ax_cv_cxx_compile_cxx17 - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether $CXX supports C++17 features by default" >&5 -printf %s "checking whether $CXX supports C++17 features by default... " >&6; } + if test x$ac_success = xno; then + for alternative in ${ax_cxx_compile_alternatives}; do + for switch in -std=c++${alternative} +std=c++${alternative} "-h std=c++${alternative}"; do + cachevar=`printf "%s\n" "ax_cv_cxx_compile_cxx17_$switch" | sed "$as_sed_sh"` + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether $CXX supports C++17 features with $switch" >&5 +printf %s "checking whether $CXX supports C++17 features with $switch... " >&6; } if eval test \${$cachevar+y} then : printf %s "(cached) " >&6 else case e in #( - e) cat confdefs.h - <<_ACEOF >conftest.$ac_ext + e) ac_save_CXX="$CXX" + CXX="$CXX $switch" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ @@ -12618,1712 +12619,1720 @@ else case e in #( e) eval $cachevar=no ;; esac fi -rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext ;; +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext + CXX="$ac_save_CXX" ;; esac fi eval ac_res=\$$cachevar { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 printf "%s\n" "$ac_res" >&6; } - if eval test x\$$cachevar = xyes -then : - ac_success=yes -fi + if eval test x\$$cachevar = xyes; then + CXX="$CXX $switch" + if test -n "$CXXCPP" ; then + CXXCPP="$CXXCPP $switch" + fi + ac_success=yes + break + fi + done + if test x$ac_success = xyes; then + break + fi + done + fi + ac_ext=cpp +ac_cpp='$CXXCPP $CPPFLAGS' +ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_cxx_compiler_gnu + if test x$ax_cxx_compile_cxx17_required = xtrue; then if test x$ac_success = xno; then - for alternative in ${ax_cxx_compile_alternatives}; do - switch="-std=gnu++${alternative}" - cachevar=`printf "%s\n" "ax_cv_cxx_compile_cxx17_$switch" | sed "$as_sed_sh"` - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether $CXX supports C++17 features with $switch" >&5 -printf %s "checking whether $CXX supports C++17 features with $switch... " >&6; } -if eval test \${$cachevar+y} -then : - printf %s "(cached) " >&6 -else case e in #( - e) ac_save_CXX="$CXX" - CXX="$CXX $switch" - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - + as_fn_error $? "*** A compiler with support for C++17 language features is required." "$LINENO" 5 + fi + fi + if test x$ac_success = xno; then + HAVE_CXX17=0 + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: No compiler with C++17 support was found" >&5 +printf "%s\n" "$as_me: No compiler with C++17 support was found" >&6;} + else + HAVE_CXX17=1 -// If the compiler admits that it is not ready for C++11, why torture it? -// Hopefully, this will speed up the test. +printf "%s\n" "#define HAVE_CXX17 1" >>confdefs.h -#ifndef __cplusplus + fi -#error "This is not a C++ compiler" + ;; +esac +fi + if test "$HAVE_CXX17" = "1" -a $acsm_found_cxx -eq 0 +then : -#elif __cplusplus < 201103L + # If nothing fails later we're good to go + have_cxx_all=yes -#error "This is not a C++11 compiler" + # -------------------------------------------------------------- + # Test for mandatory C++11 features, those which libMesh now requires + # for internal use. + # -------------------------------------------------------------- -#else + have_cxx11_auto=no -namespace cxx11 -{ + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for C++11 auto keyword support" >&5 +printf %s "checking for C++11 auto keyword support... " >&6; } + ac_ext=cpp +ac_cpp='$CXXCPP $CPPFLAGS' +ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_cxx_compiler_gnu - namespace test_static_assert - { - template - struct check - { - static_assert(sizeof(int) <= sizeof(T), "not big enough"); - }; + old_CXXFLAGS="$CXXFLAGS" + CXXFLAGS="$CXXFLAGS $libmesh_CXXFLAGS" - } + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ - namespace test_final_override - { - struct Base - { - virtual ~Base() {} - virtual void f() {} - }; +int +main (void) +{ - struct Derived : public Base - { - virtual ~Derived() override {} - virtual void f() override {} - }; + int x = 5; + auto y = x; - } + ; + return 0; +} +_ACEOF +if ac_fn_cxx_try_compile "$LINENO" +then : - namespace test_double_right_angle_brackets - { + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +printf "%s\n" "yes" >&6; } - template < typename T > - struct check {}; +printf "%s\n" "#define HAVE_CXX11_AUTO 1" >>confdefs.h - typedef check single_type; - typedef check> double_type; - typedef check>> triple_type; - typedef check>>> quadruple_type; + have_cxx11_auto=yes - } +else case e in #( + e) + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } + ;; +esac +fi +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext - namespace test_decltype - { + # Reset the flags + CXXFLAGS="$old_CXXFLAGS" + ac_ext=cpp +ac_cpp='$CXXCPP $CPPFLAGS' +ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_cxx_compiler_gnu - int - f() - { - int a = 1; - decltype(a) b = 2; - return a + b; - } - } + if test x$have_cxx11_auto == xyes; then + HAVE_CXX11_AUTO_TRUE= + HAVE_CXX11_AUTO_FALSE='#' +else + HAVE_CXX11_AUTO_TRUE='#' + HAVE_CXX11_AUTO_FALSE= +fi - namespace test_type_deduction - { - template < typename T1, typename T2 > - struct is_same - { - static const bool value = false; - }; + if test "x$have_cxx11_auto" != "xyes" +then : + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: libMesh requires C++11 auto variable support" >&5 +printf "%s\n" "$as_me: WARNING: libMesh requires C++11 auto variable support" >&2;} + have_cxx_all=no +fi - template < typename T > - struct is_same - { - static const bool value = true; - }; - template < typename T1, typename T2 > - auto - add(T1 a1, T2 a2) -> decltype(a1 + a2) - { - return a1 + a2; - } + have_cxx11_rangefor=no - int - test(const int c, volatile int v) - { - static_assert(is_same::value == true, ""); - static_assert(is_same::value == false, ""); - static_assert(is_same::value == false, ""); - auto ac = c; - auto av = v; - auto sumi = ac + av + 'x'; - auto sumf = ac + av + 1.0; - static_assert(is_same::value == true, ""); - static_assert(is_same::value == true, ""); - static_assert(is_same::value == true, ""); - static_assert(is_same::value == false, ""); - static_assert(is_same::value == true, ""); - return (sumf > 0.0) ? sumi : add(c, v); - } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for C++11 range-based for loop support" >&5 +printf %s "checking for C++11 range-based for loop support... " >&6; } + ac_ext=cpp +ac_cpp='$CXXCPP $CPPFLAGS' +ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_cxx_compiler_gnu - } - namespace test_noexcept - { + old_CXXFLAGS="$CXXFLAGS" + CXXFLAGS="$CXXFLAGS $libmesh_CXXFLAGS" - int f() { return 0; } - int g() noexcept { return 0; } + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ - static_assert(noexcept(f()) == false, ""); - static_assert(noexcept(g()) == true, ""); + #include + #include + void print(const std::vector & v) + { + for (const int & x : v) + std::cout << x << ' '; + std::cout << std::endl; + } - } +int +main (void) +{ - namespace test_constexpr - { + std::vector v(3); + print(v); - template < typename CharT > - unsigned long constexpr - strlen_c_r(const CharT *const s, const unsigned long acc) noexcept - { - return *s ? strlen_c_r(s + 1, acc + 1) : acc; - } + ; + return 0; +} +_ACEOF +if ac_fn_cxx_try_compile "$LINENO" +then : - template < typename CharT > - unsigned long constexpr - strlen_c(const CharT *const s) noexcept - { - return strlen_c_r(s, 0UL); - } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +printf "%s\n" "yes" >&6; } - static_assert(strlen_c("") == 0UL, ""); - static_assert(strlen_c("1") == 1UL, ""); - static_assert(strlen_c("example") == 7UL, ""); - static_assert(strlen_c("another\0example") == 7UL, ""); +printf "%s\n" "#define HAVE_CXX11_RANGEFOR 1" >>confdefs.h - } + have_cxx11_rangefor=yes - namespace test_rvalue_references - { +else case e in #( + e) + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } + ;; +esac +fi +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext - template < int N > - struct answer - { - static constexpr int value = N; - }; + # Reset the flags + CXXFLAGS="$old_CXXFLAGS" + ac_ext=cpp +ac_cpp='$CXXCPP $CPPFLAGS' +ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_cxx_compiler_gnu - answer<1> f(int&) { return answer<1>(); } - answer<2> f(const int&) { return answer<2>(); } - answer<3> f(int&&) { return answer<3>(); } - void - test() - { - int i = 0; - const int c = 0; - static_assert(decltype(f(i))::value == 1, ""); - static_assert(decltype(f(c))::value == 2, ""); - static_assert(decltype(f(0))::value == 3, ""); - } + if test x$have_cxx11_rangefor == xyes; then + HAVE_CXX11_RANGEFOR_TRUE= + HAVE_CXX11_RANGEFOR_FALSE='#' +else + HAVE_CXX11_RANGEFOR_TRUE='#' + HAVE_CXX11_RANGEFOR_FALSE= +fi - } - namespace test_uniform_initialization - { + if test "x$have_cxx11_rangefor" != "xyes" +then : + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: libMesh requires C++11 ranged-for loop support" >&5 +printf "%s\n" "$as_me: WARNING: libMesh requires C++11 ranged-for loop support" >&2;} + have_cxx_all=no +fi - struct test - { - static const int zero {}; - static const int one {1}; - }; + # Technically we require uniform initialization, but this is the + # closest test we have - static_assert(test::zero == 0, ""); - static_assert(test::one == 1, ""); + have_cxx11_initializer_list=no - } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for C++11 initializer list support" >&5 +printf %s "checking for C++11 initializer list support... " >&6; } + ac_ext=cpp +ac_cpp='$CXXCPP $CPPFLAGS' +ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_cxx_compiler_gnu - namespace test_lambdas - { - void - test1() - { - auto lambda1 = [](){}; - auto lambda2 = lambda1; - lambda1(); - lambda2(); - } + old_CXXFLAGS="$CXXFLAGS" + CXXFLAGS="$CXXFLAGS $libmesh_CXXFLAGS" - int - test2() - { - auto a = [](int i, int j){ return i + j; }(1, 2); - auto b = []() -> int { return '0'; }(); - auto c = [=](){ return a + b; }(); - auto d = [&](){ return c; }(); - auto e = [a, &b](int x) mutable { - const auto identity = [](int y){ return y; }; - for (auto i = 0; i < a; ++i) - a += b--; - return x + identity(a + b); - }(0); - return a + b + c + d + e; - } + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ - int - test3() - { - const auto nullary = [](){ return 0; }; - const auto unary = [](int x){ return x; }; - using nullary_t = decltype(nullary); - using unary_t = decltype(unary); - const auto higher1st = [](nullary_t f){ return f(); }; - const auto higher2nd = [unary](nullary_t f1){ - return [unary, f1](unary_t f2){ return f2(unary(f1())); }; - }; - return higher1st(nullary) + higher2nd(nullary)(unary); - } + #include + #include + #include - } +int +main (void) +{ - namespace test_variadic_templates - { + std::vector v = { "xyzzy", "plugh", "abracadabra" }; - template - struct sum; + ; + return 0; +} +_ACEOF +if ac_fn_cxx_try_compile "$LINENO" +then : - template - struct sum - { - static constexpr auto value = N0 + sum::value; - }; - - template <> - struct sum<> - { - static constexpr auto value = 0; - }; - - static_assert(sum<>::value == 0, ""); - static_assert(sum<1>::value == 1, ""); - static_assert(sum<23>::value == 23, ""); - static_assert(sum<1, 2>::value == 3, ""); - static_assert(sum<5, 5, 11>::value == 21, ""); - static_assert(sum<2, 3, 5, 7, 11, 13>::value == 41, ""); - - } - - // http://stackoverflow.com/questions/13728184/template-aliases-and-sfinae - // Clang 3.1 fails with headers of libstd++ 4.8.3 when using std::function - // because of this. - namespace test_template_alias_sfinae - { - - struct foo {}; - - template - using member = typename T::member_type; - - template - void func(...) {} + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +printf "%s\n" "yes" >&6; } - template - void func(member*) {} +printf "%s\n" "#define HAVE_CXX11_INITIALIZER_LIST 1" >>confdefs.h - void test(); + have_cxx11_initializer_list=yes - void test() { func(0); } +else case e in #( + e) + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } + ;; +esac +fi +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext - } + # Reset the flags + CXXFLAGS="$old_CXXFLAGS" + ac_ext=cpp +ac_cpp='$CXXCPP $CPPFLAGS' +ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_cxx_compiler_gnu -} // namespace cxx11 -#endif // __cplusplus >= 201103L + if test x$have_cxx11_initializer_list == xyes; then + HAVE_CXX11_INITIALIZER_LIST_TRUE= + HAVE_CXX11_INITIALIZER_LIST_FALSE='#' +else + HAVE_CXX11_INITIALIZER_LIST_TRUE='#' + HAVE_CXX11_INITIALIZER_LIST_FALSE= +fi + if test "x$have_cxx11_initializer_list" != "xyes" +then : + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: libMesh requires C++11 initializer list support" >&5 +printf "%s\n" "$as_me: WARNING: libMesh requires C++11 initializer list support" >&2;} + have_cxx_all=no +fi -// If the compiler admits that it is not ready for C++14, why torture it? -// Hopefully, this will speed up the test. + have_cxx11_unique_ptr=no -#ifndef __cplusplus + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for C++11 std::unique_ptr support" >&5 +printf %s "checking for C++11 std::unique_ptr support... " >&6; } + ac_ext=cpp +ac_cpp='$CXXCPP $CPPFLAGS' +ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_cxx_compiler_gnu -#error "This is not a C++ compiler" -#elif __cplusplus < 201402L + old_CXXFLAGS="$CXXFLAGS" + CXXFLAGS="$CXXFLAGS $libmesh_CXXFLAGS" -#error "This is not a C++14 compiler" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ -#else + #include + #include + struct Foo + { + Foo() { std::cout << "Foo::Foo\n"; } + ~Foo() { std::cout << "Foo::~Foo\n"; } + }; -namespace cxx14 +int +main (void) { - namespace test_polymorphic_lambdas - { - - int - test() { - const auto lambda = [](auto&&... args){ - const auto istiny = [](auto x){ - return (sizeof(x) == 1UL) ? 1 : 0; - }; - const int aretiny[] = { istiny(args)... }; - return aretiny[0]; - }; - return lambda(1, 1L, 1.0f, '1'); - } + // up now owns a Foo + std::unique_ptr up(new Foo); + } // Foo deleted when up goes out of scope - } + ; + return 0; +} +_ACEOF +if ac_fn_cxx_try_compile "$LINENO" +then : - namespace test_binary_literals - { + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +printf "%s\n" "yes" >&6; } - constexpr auto ivii = 0b0000000000101010; - static_assert(ivii == 42, "wrong value"); +printf "%s\n" "#define HAVE_CXX11_UNIQUE_PTR 1" >>confdefs.h - } + have_cxx11_unique_ptr=yes - namespace test_generalized_constexpr - { +else case e in #( + e) + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } + ;; +esac +fi +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext - template < typename CharT > - constexpr unsigned long - strlen_c(const CharT *const s) noexcept - { - auto length = 0UL; - for (auto p = s; *p; ++p) - ++length; - return length; - } + # Reset the flags + CXXFLAGS="$old_CXXFLAGS" + ac_ext=cpp +ac_cpp='$CXXCPP $CPPFLAGS' +ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_cxx_compiler_gnu - static_assert(strlen_c("") == 0UL, ""); - static_assert(strlen_c("x") == 1UL, ""); - static_assert(strlen_c("test") == 4UL, ""); - static_assert(strlen_c("another\0test") == 7UL, ""); - } + if test x$have_cxx11_unique_ptr == xyes; then + HAVE_CXX11_UNIQUE_PTR_TRUE= + HAVE_CXX11_UNIQUE_PTR_FALSE='#' +else + HAVE_CXX11_UNIQUE_PTR_TRUE='#' + HAVE_CXX11_UNIQUE_PTR_FALSE= +fi - namespace test_lambda_init_capture - { - int - test() - { - auto x = 0; - const auto lambda1 = [a = x](int b){ return a + b; }; - const auto lambda2 = [a = lambda1(x)](){ return a; }; - return lambda2(); - } + if test "x$have_cxx11_unique_ptr" != "xyes" +then : + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: libMesh requires C++11 std::unique_ptr support" >&5 +printf "%s\n" "$as_me: WARNING: libMesh requires C++11 std::unique_ptr support" >&2;} + have_cxx_all=no +fi - } - namespace test_digit_separators - { + have_cxx11_make_unique_workaround=no - constexpr auto ten_million = 100'000'000; - static_assert(ten_million == 100000000, ""); + # This is a simple workaround for no std::make_unique in C++11: + # http://stackoverflow.com/questions/7038357/make-unique-and-perfect-forwarding + # Requires working rvalue references, std::forward, variadic + # templates, and std::unique_ptr from C++11. + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for C++11 std::make_unique workaround support" >&5 +printf %s "checking for C++11 std::make_unique workaround support... " >&6; } + ac_ext=cpp +ac_cpp='$CXXCPP $CPPFLAGS' +ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_cxx_compiler_gnu - } - namespace test_return_type_deduction - { + old_CXXFLAGS="$CXXFLAGS" + CXXFLAGS="$CXXFLAGS $libmesh_CXXFLAGS" - auto f(int& x) { return x; } - decltype(auto) g(int& x) { return x; } + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ - template < typename T1, typename T2 > - struct is_same + #include + namespace local { - static constexpr auto value = false; - }; + template + std::unique_ptr make_unique(Args&&... args) + { + return std::unique_ptr(new T(std::forward(args)...)); + } + } - template < typename T > - struct is_same - { - static constexpr auto value = true; - }; +int +main (void) +{ - int - test() { - auto x = 0; - static_assert(is_same::value, ""); - static_assert(is_same::value, ""); - return x; - } + // Normally, you would use "auto" on the LHS here to avoid + // repeating the type name, but we are not testing auto here. + std::unique_ptr up = local::make_unique(42); + } // Foo deleted when up goes out of scope - } + ; + return 0; +} +_ACEOF +if ac_fn_cxx_try_compile "$LINENO" +then : -} // namespace cxx14 + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +printf "%s\n" "yes" >&6; } -#endif // __cplusplus >= 201402L +printf "%s\n" "#define HAVE_CXX11_MAKE_UNIQUE_WORKAROUND 1" >>confdefs.h + have_cxx11_make_unique_workaround=yes +else case e in #( + e) + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } + ;; +esac +fi +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext + # Reset the flags + CXXFLAGS="$old_CXXFLAGS" + ac_ext=cpp +ac_cpp='$CXXCPP $CPPFLAGS' +ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_cxx_compiler_gnu -// If the compiler admits that it is not ready for C++17, why torture it? -// Hopefully, this will speed up the test. -#ifndef __cplusplus + if test x$have_cxx11_make_unique_workaround == xyes; then + HAVE_CXX11_MAKE_UNIQUE_WORKAROUND_TRUE= + HAVE_CXX11_MAKE_UNIQUE_WORKAROUND_FALSE='#' +else + HAVE_CXX11_MAKE_UNIQUE_WORKAROUND_TRUE='#' + HAVE_CXX11_MAKE_UNIQUE_WORKAROUND_FALSE= +fi -#error "This is not a C++ compiler" -#elif __cplusplus < 201703L + if test "x$have_cxx11_make_unique_workaround" != "xyes" +then : + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: libMesh requires C++11 variadic template support" >&5 +printf "%s\n" "$as_me: WARNING: libMesh requires C++11 variadic template support" >&2;} + have_cxx_all=no +fi -#error "This is not a C++17 compiler" -#else + have_cxx11_tuple=no -#include -#include -#include + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for C++11 std::tuple support" >&5 +printf %s "checking for C++11 std::tuple support... " >&6; } + ac_ext=cpp +ac_cpp='$CXXCPP $CPPFLAGS' +ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_cxx_compiler_gnu -namespace cxx17 -{ - namespace test_constexpr_lambdas - { + old_CXXFLAGS="$CXXFLAGS" + CXXFLAGS="$CXXFLAGS $libmesh_CXXFLAGS" - constexpr int foo = [](){return 42;}(); + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ - } + #include + #include + #include - namespace test::nested_namespace::definitions - { +int +main (void) +{ - } + // Test std::make_tuple + std::map> students; + students[0] = std::make_tuple(3.8, 'A', "Lisa Simpson"); + students[1] = std::make_tuple(2.9, 'C', "Milhouse Van Houten"); - namespace test_fold_expression - { + // Test templated std::get() method. + std::get<0>(students[0]); + std::get<1>(students[0]); + std::get<2>(students[0]); - template - int multiply(Args... args) - { - return (args * ... * 1); - } + // Test std::tie and std::ignore which are declared in the header. + double gpa1; + std::string name1; + std::tie(gpa1, std::ignore, name1) = students[1]; - template - bool all(Args... args) - { - return (args && ...); - } + // Test std::tuple_cat(), which combines together one or more + // objects, not necessarily tuples, into a single tuple. + auto t = std::tuple_cat(students[0], students[1], std::make_pair("foo", 42)); - } + ; + return 0; +} +_ACEOF +if ac_fn_cxx_try_compile "$LINENO" +then : - namespace test_extended_static_assert - { + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +printf "%s\n" "yes" >&6; } - static_assert (true); +printf "%s\n" "#define HAVE_CXX11_TUPLE 1" >>confdefs.h - } + have_cxx11_tuple=yes - namespace test_auto_brace_init_list - { +else case e in #( + e) + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } + ;; +esac +fi +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext - auto foo = {5}; - auto bar {5}; + CXXFLAGS="$old_CXXFLAGS" + ac_ext=cpp +ac_cpp='$CXXCPP $CPPFLAGS' +ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_cxx_compiler_gnu - static_assert(std::is_same, decltype(foo)>::value); - static_assert(std::is_same::value); - } - namespace test_typename_in_template_template_parameter - { + if test x$have_cxx11_tuple == xyes; then + HAVE_CXX11_TUPLE_TRUE= + HAVE_CXX11_TUPLE_FALSE='#' +else + HAVE_CXX11_TUPLE_TRUE='#' + HAVE_CXX11_TUPLE_FALSE= +fi - template typename X> struct D; - } + if test "x$have_cxx11_tuple" != "xyes" +then : + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: libMesh requires C++11 std::tuple support" >&5 +printf "%s\n" "$as_me: WARNING: libMesh requires C++11 std::tuple support" >&2;} + have_cxx_all=no +fi - namespace test_fallthrough_nodiscard_maybe_unused_attributes - { - int f1() - { - return 42; - } + have_cxx11_lambda=no - [[nodiscard]] int f2() - { - [[maybe_unused]] auto unused = f1(); + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for C++11 lambda support" >&5 +printf %s "checking for C++11 lambda support... " >&6; } + ac_ext=cpp +ac_cpp='$CXXCPP $CPPFLAGS' +ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_cxx_compiler_gnu - switch (f1()) - { - case 17: - f1(); - [[fallthrough]]; - case 42: - f1(); - } - return f1(); - } - } + old_CXXFLAGS="$CXXFLAGS" + CXXFLAGS="$CXXFLAGS $libmesh_CXXFLAGS" - namespace test_extended_aggregate_initialization - { + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ - struct base1 - { - int b1, b2 = 42; - }; + // typedef for a function pointer that takes int and returns bool. + typedef bool (*FunctionPointer) (int); - struct base2 - { - base2() { - b3 = 42; - } - int b3; - }; + // A function that takes a pointer to a function that takes an int, + // calls it with the number 4, and returns the result. + bool f(FunctionPointer g) { return g(4); } - struct derived : base1, base2 - { - int d; - }; +int +main (void) +{ - derived d1 {{1, 2}, {}, 4}; // full initialization - derived d2 {{}, {}, 4}; // value-initialized bases + // Call f, passing it a lambda constructed on the fly instead + // of a standard function pointer. The result should be true. + f ( [](int x) { return x > 3; } ); - } + ; + return 0; +} +_ACEOF +if ac_fn_cxx_try_compile "$LINENO" +then : - namespace test_general_range_based_for_loop - { + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +printf "%s\n" "yes" >&6; } - struct iter - { - int i; +printf "%s\n" "#define HAVE_CXX11_LAMBDA 1" >>confdefs.h - int& operator* () - { - return i; - } + have_cxx11_lambda=yes - const int& operator* () const - { - return i; - } +else case e in #( + e) + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } + ;; +esac +fi +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext - iter& operator++() - { - ++i; - return *this; - } - }; + # Reset the flags + CXXFLAGS="$old_CXXFLAGS" + ac_ext=cpp +ac_cpp='$CXXCPP $CPPFLAGS' +ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_cxx_compiler_gnu - struct sentinel - { - int i; - }; - bool operator== (const iter& i, const sentinel& s) - { - return i.i == s.i; - } + if test x$have_cxx11_lambda == xyes; then + HAVE_CXX11_LAMBDA_TRUE= + HAVE_CXX11_LAMBDA_FALSE='#' +else + HAVE_CXX11_LAMBDA_TRUE='#' + HAVE_CXX11_LAMBDA_FALSE= +fi - bool operator!= (const iter& i, const sentinel& s) - { - return !(i == s); - } - struct range - { - iter begin() const - { - return {0}; - } + if test "x$have_cxx11_lambda" != "xyes" +then : + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: libMesh requires C++11 lambda support" >&5 +printf "%s\n" "$as_me: WARNING: libMesh requires C++11 lambda support" >&2;} + have_cxx_all=no +fi - sentinel end() const - { - return {5}; - } - }; - void f() - { - range r {}; + have_cxx11_fixed_type_enum=no - for (auto i : r) - { - [[maybe_unused]] auto v = i; - } - } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for C++11 fixed type enumeration support" >&5 +printf %s "checking for C++11 fixed type enumeration support... " >&6; } + ac_ext=cpp +ac_cpp='$CXXCPP $CPPFLAGS' +ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_cxx_compiler_gnu - } - namespace test_lambda_capture_asterisk_this_by_value - { + old_CXXFLAGS="$CXXFLAGS" + CXXFLAGS="$CXXFLAGS $libmesh_CXXFLAGS" - struct t - { - int i; - int foo() - { - return [*this]() - { - return i; - }(); - } - }; + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ - } + enum Fruit : int {APPLE=0, ORANGE=1}; - namespace test_enum_class_construction - { +int +main (void) +{ - enum class byte : unsigned char - {}; + Fruit f = APPLE; - byte foo {42}; + ; + return 0; +} +_ACEOF +if ac_fn_cxx_try_compile "$LINENO" +then : - } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +printf "%s\n" "yes" >&6; } - namespace test_constexpr_if - { +printf "%s\n" "#define HAVE_CXX11_FIXED_TYPE_ENUM 1" >>confdefs.h - template - int f () - { - if constexpr(cond) - { - return 13; - } - else - { - return 42; - } - } + have_cxx11_fixed_type_enum=yes - } +else case e in #( + e) + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } + ;; +esac +fi +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext - namespace test_selection_statement_with_initializer - { + CXXFLAGS="$old_CXXFLAGS" + ac_ext=cpp +ac_cpp='$CXXCPP $CPPFLAGS' +ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_cxx_compiler_gnu - int f() - { - return 13; - } - int f2() - { - if (auto i = f(); i > 0) - { - return 3; - } + if test x$have_cxx11_fixed_type_enum == xyes; then + HAVE_CXX11_FIXED_TYPE_ENUM_TRUE= + HAVE_CXX11_FIXED_TYPE_ENUM_FALSE='#' +else + HAVE_CXX11_FIXED_TYPE_ENUM_TRUE='#' + HAVE_CXX11_FIXED_TYPE_ENUM_FALSE= +fi - switch (auto i = f(); i + 4) - { - case 17: - return 2; - default: - return 1; - } - } + if test "x$have_cxx11_fixed_type_enum" != "xyes" +then : + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: libMesh requires C++11 fixed type enumeration support" >&5 +printf "%s\n" "$as_me: WARNING: libMesh requires C++11 fixed type enumeration support" >&2;} + have_cxx_all=no +fi - } - namespace test_template_argument_deduction_for_class_templates - { + have_cxx11_fixed_type_enum_fwd=no - template - struct pair - { - pair (T1 p1, T2 p2) - : m1 {p1}, - m2 {p2} - {} + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for C++11 fixed type enumeration forward declaration support" >&5 +printf %s "checking for C++11 fixed type enumeration forward declaration support... " >&6; } + ac_ext=cpp +ac_cpp='$CXXCPP $CPPFLAGS' +ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_cxx_compiler_gnu - T1 m1; - T2 m2; - }; - void f() - { - [[maybe_unused]] auto p = pair{13, 42u}; - } + old_CXXFLAGS="$CXXFLAGS" + CXXFLAGS="$CXXFLAGS $libmesh_CXXFLAGS" - } + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ - namespace test_non_type_auto_template_parameters - { + #include + enum Foo : int; + void func(Foo f) { std::cout << f << std::endl; } + enum Foo : int { FOO0 = 0, FOO1 = 1, FOO2 = 2 }; - template - struct B - {}; +int +main (void) +{ - B<5> b1; - B<'a'> b2; + func(FOO0); + func(FOO1); + func(FOO2); - } + ; + return 0; +} +_ACEOF +if ac_fn_cxx_try_compile "$LINENO" +then : - namespace test_structured_bindings - { + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +printf "%s\n" "yes" >&6; } - int arr[2] = { 1, 2 }; - std::pair pr = { 1, 2 }; +printf "%s\n" "#define HAVE_CXX11_FIXED_TYPE_ENUM_FWD 1" >>confdefs.h - auto f1() -> int(&)[2] - { - return arr; - } + have_cxx11_fixed_type_enum_fwd=yes - auto f2() -> std::pair& - { - return pr; - } +else case e in #( + e) + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } + ;; +esac +fi +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext - struct S - { - int x1 : 2; - volatile double y1; - }; + CXXFLAGS="$old_CXXFLAGS" + ac_ext=cpp +ac_cpp='$CXXCPP $CPPFLAGS' +ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_cxx_compiler_gnu - S f3() - { - return {}; - } - auto [ x1, y1 ] = f1(); - auto& [ xr1, yr1 ] = f1(); - auto [ x2, y2 ] = f2(); - auto& [ xr2, yr2 ] = f2(); - const auto [ x3, y3 ] = f3(); + if test x$have_cxx11_fixed_type_enum_fwd == xyes; then + HAVE_CXX11_FIXED_TYPE_ENUM_FWD_TRUE= + HAVE_CXX11_FIXED_TYPE_ENUM_FWD_FALSE='#' +else + HAVE_CXX11_FIXED_TYPE_ENUM_FWD_TRUE='#' + HAVE_CXX11_FIXED_TYPE_ENUM_FWD_FALSE= +fi - } - - namespace test_exception_spec_type_system - { - - struct Good {}; - struct Bad {}; - - void g1() noexcept; - void g2(); - template - Bad - f(T*, T*); + if test "x$have_cxx11_fixed_type_enum_fwd" != "xyes" +then : + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: libMesh requires C++11 fixed type enumeration forward declaration support" >&5 +printf "%s\n" "$as_me: WARNING: libMesh requires C++11 fixed type enumeration forward declaration support" >&2;} + have_cxx_all=no +fi - template - Good - f(T1*, T2*); - static_assert (std::is_same_v); + have_cxx11_override=no - } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for C++11 override keyword support" >&5 +printf %s "checking for C++11 override keyword support... " >&6; } + ac_ext=cpp +ac_cpp='$CXXCPP $CPPFLAGS' +ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_cxx_compiler_gnu - namespace test_inline_variables - { - template void f(T) - {} + old_CXXFLAGS="$CXXFLAGS" + CXXFLAGS="$CXXFLAGS $libmesh_CXXFLAGS" - template inline T g(T) - { - return T{}; - } + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ - template<> inline void f<>(int) - {} - template<> int g<>(int) - { - return 5; - } +int +main (void) +{ - } + struct Base { + virtual void f() {} + }; + struct Child : public Base { + virtual void f() override {} + }; -} // namespace cxx17 + ; + return 0; +} +_ACEOF +if ac_fn_cxx_try_compile "$LINENO" +then : -#endif // __cplusplus < 201703L + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +printf "%s\n" "yes" >&6; } +printf "%s\n" "#define HAVE_CXX11_OVERRIDE 1" >>confdefs.h + have_cxx11_override=yes -_ACEOF -if ac_fn_cxx_try_compile "$LINENO" -then : - eval $cachevar=yes else case e in #( - e) eval $cachevar=no ;; + e) + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } + ;; esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext - CXX="$ac_save_CXX" ;; -esac -fi -eval ac_res=\$$cachevar - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 -printf "%s\n" "$ac_res" >&6; } - if eval test x\$$cachevar = xyes; then - CXX="$CXX $switch" - if test -n "$CXXCPP" ; then - CXXCPP="$CXXCPP $switch" - fi - ac_success=yes - break - fi - done - fi - - if test x$ac_success = xno; then - for alternative in ${ax_cxx_compile_alternatives}; do - for switch in -std=c++${alternative} +std=c++${alternative} "-h std=c++${alternative}"; do - cachevar=`printf "%s\n" "ax_cv_cxx_compile_cxx17_$switch" | sed "$as_sed_sh"` - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether $CXX supports C++17 features with $switch" >&5 -printf %s "checking whether $CXX supports C++17 features with $switch... " >&6; } -if eval test \${$cachevar+y} -then : - printf %s "(cached) " >&6 -else case e in #( - e) ac_save_CXX="$CXX" - CXX="$CXX $switch" - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ + # Reset the flags + CXXFLAGS="$old_CXXFLAGS" + ac_ext=cpp +ac_cpp='$CXXCPP $CPPFLAGS' +ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_cxx_compiler_gnu -// If the compiler admits that it is not ready for C++11, why torture it? -// Hopefully, this will speed up the test. - -#ifndef __cplusplus -#error "This is not a C++ compiler" + if test x$have_cxx11_override == xyes; then + HAVE_CXX11_OVERRIDE_TRUE= + HAVE_CXX11_OVERRIDE_FALSE='#' +else + HAVE_CXX11_OVERRIDE_TRUE='#' + HAVE_CXX11_OVERRIDE_FALSE= +fi -#elif __cplusplus < 201103L -#error "This is not a C++11 compiler" + if test "x$have_cxx11_override" != "xyes" +then : + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: libMesh requires C++11 compiler support the override keyword" >&5 +printf "%s\n" "$as_me: WARNING: libMesh requires C++11 compiler support the override keyword" >&2;} + have_cxx_all=no +fi -#else -namespace cxx11 -{ + have_cxx11_move_constructors=no - namespace test_static_assert - { + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for C++11 move constructor support" >&5 +printf %s "checking for C++11 move constructor support... " >&6; } + ac_ext=cpp +ac_cpp='$CXXCPP $CPPFLAGS' +ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_cxx_compiler_gnu - template - struct check - { - static_assert(sizeof(int) <= sizeof(T), "not big enough"); - }; - } + old_CXXFLAGS="$CXXFLAGS" + CXXFLAGS="$CXXFLAGS $libmesh_CXXFLAGS" - namespace test_final_override - { + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ - struct Base + #include + class move_constructable_base { - virtual ~Base() {} - virtual void f() {} + public: + move_constructable_base() {} + move_constructable_base(move_constructable_base && other) noexcept {} }; - - struct Derived : public Base + class move_constructable : public move_constructable_base { - virtual ~Derived() override {} - virtual void f() override {} + public: + move_constructable() {} + move_constructable(move_constructable && other) noexcept : move_constructable_base(std::move(other)) {} }; - } +int +main (void) +{ - namespace test_double_right_angle_brackets - { + move_constructable m1; + move_constructable m2(std::move(m1)); - template < typename T > - struct check {}; + ; + return 0; +} +_ACEOF +if ac_fn_cxx_try_compile "$LINENO" +then : - typedef check single_type; - typedef check> double_type; - typedef check>> triple_type; - typedef check>>> quadruple_type; + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +printf "%s\n" "yes" >&6; } - } +printf "%s\n" "#define HAVE_CXX11_MOVE_CONSTRUCTORS 1" >>confdefs.h - namespace test_decltype - { + have_cxx11_move_constructors=yes - int - f() - { - int a = 1; - decltype(a) b = 2; - return a + b; - } +else case e in #( + e) + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } + ;; +esac +fi +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext - } + # Reset the flags + CXXFLAGS="$old_CXXFLAGS" + ac_ext=cpp +ac_cpp='$CXXCPP $CPPFLAGS' +ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_cxx_compiler_gnu - namespace test_type_deduction - { - template < typename T1, typename T2 > - struct is_same - { - static const bool value = false; - }; + if test x$have_cxx11_move_constructors == xyes; then + HAVE_CXX11_MOVE_CONSTRUCTORS_TRUE= + HAVE_CXX11_MOVE_CONSTRUCTORS_FALSE='#' +else + HAVE_CXX11_MOVE_CONSTRUCTORS_TRUE='#' + HAVE_CXX11_MOVE_CONSTRUCTORS_FALSE= +fi - template < typename T > - struct is_same - { - static const bool value = true; - }; - template < typename T1, typename T2 > - auto - add(T1 a1, T2 a2) -> decltype(a1 + a2) - { - return a1 + a2; - } + if test "x$have_cxx11_move_constructors" != "xyes" +then : + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: libMesh requires C++11 move constructor support" >&5 +printf "%s\n" "$as_me: WARNING: libMesh requires C++11 move constructor support" >&2;} + have_cxx_all=no +fi - int - test(const int c, volatile int v) - { - static_assert(is_same::value == true, ""); - static_assert(is_same::value == false, ""); - static_assert(is_same::value == false, ""); - auto ac = c; - auto av = v; - auto sumi = ac + av + 'x'; - auto sumf = ac + av + 1.0; - static_assert(is_same::value == true, ""); - static_assert(is_same::value == true, ""); - static_assert(is_same::value == true, ""); - static_assert(is_same::value == false, ""); - static_assert(is_same::value == true, ""); - return (sumf > 0.0) ? sumi : add(c, v); - } - } - - namespace test_noexcept - { - - int f() { return 0; } - int g() noexcept { return 0; } + have_cxx11_deleted_functions=no - static_assert(noexcept(f()) == false, ""); - static_assert(noexcept(g()) == true, ""); + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for C++11 deleted functions support" >&5 +printf %s "checking for C++11 deleted functions support... " >&6; } + ac_ext=cpp +ac_cpp='$CXXCPP $CPPFLAGS' +ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_cxx_compiler_gnu - } - namespace test_constexpr - { + old_CXXFLAGS="$CXXFLAGS" + CXXFLAGS="$CXXFLAGS $libmesh_CXXFLAGS" - template < typename CharT > - unsigned long constexpr - strlen_c_r(const CharT *const s, const unsigned long acc) noexcept - { - return *s ? strlen_c_r(s + 1, acc + 1) : acc; - } + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ - template < typename CharT > - unsigned long constexpr - strlen_c(const CharT *const s) noexcept + class Foo { - return strlen_c_r(s, 0UL); - } - - static_assert(strlen_c("") == 0UL, ""); - static_assert(strlen_c("1") == 1UL, ""); - static_assert(strlen_c("example") == 7UL, ""); - static_assert(strlen_c("another\0example") == 7UL, ""); + Foo(const Foo &) = delete; + }; - } +int +main (void) +{ - namespace test_rvalue_references - { - template < int N > - struct answer - { - static constexpr int value = N; - }; + ; + return 0; +} +_ACEOF +if ac_fn_cxx_try_compile "$LINENO" +then : - answer<1> f(int&) { return answer<1>(); } - answer<2> f(const int&) { return answer<2>(); } - answer<3> f(int&&) { return answer<3>(); } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +printf "%s\n" "yes" >&6; } - void - test() - { - int i = 0; - const int c = 0; - static_assert(decltype(f(i))::value == 1, ""); - static_assert(decltype(f(c))::value == 2, ""); - static_assert(decltype(f(0))::value == 3, ""); - } +printf "%s\n" "#define HAVE_CXX11_DELETED_FUNCTIONS 1" >>confdefs.h - } + have_cxx11_deleted_functions=yes - namespace test_uniform_initialization - { +else case e in #( + e) + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } + ;; +esac +fi +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext - struct test - { - static const int zero {}; - static const int one {1}; - }; + # Reset the flags + CXXFLAGS="$old_CXXFLAGS" + ac_ext=cpp +ac_cpp='$CXXCPP $CPPFLAGS' +ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_cxx_compiler_gnu - static_assert(test::zero == 0, ""); - static_assert(test::one == 1, ""); - } + if test x$have_cxx11_deleted_functions == xyes; then + HAVE_CXX11_DELETED_FUNCTIONS_TRUE= + HAVE_CXX11_DELETED_FUNCTIONS_FALSE='#' +else + HAVE_CXX11_DELETED_FUNCTIONS_TRUE='#' + HAVE_CXX11_DELETED_FUNCTIONS_FALSE= +fi - namespace test_lambdas - { - void - test1() - { - auto lambda1 = [](){}; - auto lambda2 = lambda1; - lambda1(); - lambda2(); - } + if test "x$have_cxx11_deleted_functions" != "xyes" +then : + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: libMesh requires C++11 deleted function support" >&5 +printf "%s\n" "$as_me: WARNING: libMesh requires C++11 deleted function support" >&2;} + have_cxx_all=no +fi - int - test2() - { - auto a = [](int i, int j){ return i + j; }(1, 2); - auto b = []() -> int { return '0'; }(); - auto c = [=](){ return a + b; }(); - auto d = [&](){ return c; }(); - auto e = [a, &b](int x) mutable { - const auto identity = [](int y){ return y; }; - for (auto i = 0; i < a; ++i) - a += b--; - return x + identity(a + b); - }(0); - return a + b + c + d + e; - } - int - test3() - { - const auto nullary = [](){ return 0; }; - const auto unary = [](int x){ return x; }; - using nullary_t = decltype(nullary); - using unary_t = decltype(unary); - const auto higher1st = [](nullary_t f){ return f(); }; - const auto higher2nd = [unary](nullary_t f1){ - return [unary, f1](unary_t f2){ return f2(unary(f1())); }; - }; - return higher1st(nullary) + higher2nd(nullary)(unary); - } + have_cxx11_defaulted_functions=no - } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for C++11 defaulted functions support" >&5 +printf %s "checking for C++11 defaulted functions support... " >&6; } + ac_ext=cpp +ac_cpp='$CXXCPP $CPPFLAGS' +ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_cxx_compiler_gnu - namespace test_variadic_templates - { - template - struct sum; + old_CXXFLAGS="$CXXFLAGS" + CXXFLAGS="$CXXFLAGS $libmesh_CXXFLAGS" - template - struct sum - { - static constexpr auto value = N0 + sum::value; - }; + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ - template <> - struct sum<> + class Foo { - static constexpr auto value = 0; + Foo(const Foo &) = default; + ~Foo(); }; + Foo::~Foo() = default; - static_assert(sum<>::value == 0, ""); - static_assert(sum<1>::value == 1, ""); - static_assert(sum<23>::value == 23, ""); - static_assert(sum<1, 2>::value == 3, ""); - static_assert(sum<5, 5, 11>::value == 21, ""); - static_assert(sum<2, 3, 5, 7, 11, 13>::value == 41, ""); +int +main (void) +{ - } - // http://stackoverflow.com/questions/13728184/template-aliases-and-sfinae - // Clang 3.1 fails with headers of libstd++ 4.8.3 when using std::function - // because of this. - namespace test_template_alias_sfinae - { + ; + return 0; +} +_ACEOF +if ac_fn_cxx_try_compile "$LINENO" +then : - struct foo {}; + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +printf "%s\n" "yes" >&6; } - template - using member = typename T::member_type; +printf "%s\n" "#define HAVE_CXX11_DEFAULTED_FUNCTIONS 1" >>confdefs.h - template - void func(...) {} + have_cxx11_defaulted_functions=yes - template - void func(member*) {} +else case e in #( + e) + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } + ;; +esac +fi +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext - void test(); + # Reset the flags + CXXFLAGS="$old_CXXFLAGS" + ac_ext=cpp +ac_cpp='$CXXCPP $CPPFLAGS' +ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_cxx_compiler_gnu - void test() { func(0); } - } - -} // namespace cxx11 - -#endif // __cplusplus >= 201103L + if test x$have_cxx11_defaulted_functions == xyes; then + HAVE_CXX11_DEFAULTED_FUNCTIONS_TRUE= + HAVE_CXX11_DEFAULTED_FUNCTIONS_FALSE='#' +else + HAVE_CXX11_DEFAULTED_FUNCTIONS_TRUE='#' + HAVE_CXX11_DEFAULTED_FUNCTIONS_FALSE= +fi + if test "x$have_cxx11_defaulted_functions" != "xyes" +then : + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: libMesh requires C++11 defaulted function support" >&5 +printf "%s\n" "$as_me: WARNING: libMesh requires C++11 defaulted function support" >&2;} + have_cxx_all=no +fi -// If the compiler admits that it is not ready for C++14, why torture it? -// Hopefully, this will speed up the test. + have_cxx11_nullptr=no -#ifndef __cplusplus + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for C++11 nullptr support" >&5 +printf %s "checking for C++11 nullptr support... " >&6; } + ac_ext=cpp +ac_cpp='$CXXCPP $CPPFLAGS' +ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_cxx_compiler_gnu -#error "This is not a C++ compiler" -#elif __cplusplus < 201402L + old_CXXFLAGS="$CXXFLAGS" + CXXFLAGS="$CXXFLAGS $libmesh_CXXFLAGS" -#error "This is not a C++14 compiler" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ -#else + #include + void f(int * pi) {} + void f(double * pd) {} + void f(std::nullptr_t nullp) {} -namespace cxx14 +int +main (void) { - namespace test_polymorphic_lambdas - { - - int - test() - { - const auto lambda = [](auto&&... args){ - const auto istiny = [](auto x){ - return (sizeof(x) == 1UL) ? 1 : 0; - }; - const int aretiny[] = { istiny(args)... }; - return aretiny[0]; - }; - return lambda(1, 1L, 1.0f, '1'); - } + // would be ambiguous without void f(nullptr_t) + f(nullptr); - } + ; + return 0; +} +_ACEOF +if ac_fn_cxx_try_compile "$LINENO" +then : - namespace test_binary_literals - { + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +printf "%s\n" "yes" >&6; } - constexpr auto ivii = 0b0000000000101010; - static_assert(ivii == 42, "wrong value"); +printf "%s\n" "#define HAVE_CXX11_NULLPTR 1" >>confdefs.h - } + have_cxx11_nullptr=yes - namespace test_generalized_constexpr - { +else case e in #( + e) + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } + ;; +esac +fi +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext - template < typename CharT > - constexpr unsigned long - strlen_c(const CharT *const s) noexcept - { - auto length = 0UL; - for (auto p = s; *p; ++p) - ++length; - return length; - } + # Reset the flags + CXXFLAGS="$old_CXXFLAGS" + ac_ext=cpp +ac_cpp='$CXXCPP $CPPFLAGS' +ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_cxx_compiler_gnu - static_assert(strlen_c("") == 0UL, ""); - static_assert(strlen_c("x") == 1UL, ""); - static_assert(strlen_c("test") == 4UL, ""); - static_assert(strlen_c("another\0test") == 7UL, ""); - } + if test x$have_cxx11_nullptr == xyes; then + HAVE_CXX11_NULLPTR_TRUE= + HAVE_CXX11_NULLPTR_FALSE='#' +else + HAVE_CXX11_NULLPTR_TRUE='#' + HAVE_CXX11_NULLPTR_FALSE= +fi - namespace test_lambda_init_capture - { - int - test() - { - auto x = 0; - const auto lambda1 = [a = x](int b){ return a + b; }; - const auto lambda2 = [a = lambda1(x)](){ return a; }; - return lambda2(); - } + if test "x$have_cxx11_nullptr" != "xyes" +then : + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: libMesh requires the C++11 nullptr keyword" >&5 +printf "%s\n" "$as_me: WARNING: libMesh requires the C++11 nullptr keyword" >&2;} + have_cxx_all=no +fi - } - namespace test_digit_separators - { + have_cxx11_final=no - constexpr auto ten_million = 100'000'000; - static_assert(ten_million == 100000000, ""); + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for C++11 'final' keyword support" >&5 +printf %s "checking for C++11 'final' keyword support... " >&6; } + ac_ext=cpp +ac_cpp='$CXXCPP $CPPFLAGS' +ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_cxx_compiler_gnu - } - namespace test_return_type_deduction - { + old_CXXFLAGS="$CXXFLAGS" + CXXFLAGS="$CXXFLAGS $libmesh_CXXFLAGS" - auto f(int& x) { return x; } - decltype(auto) g(int& x) { return x; } + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ - template < typename T1, typename T2 > - struct is_same + // Test that a function can be declared final. + struct A { - static constexpr auto value = false; + virtual void foo() final; }; - template < typename T > - struct is_same + // Test that a struct can be declared final. + struct B final : A { - static constexpr auto value = true; }; - int - test() - { - auto x = 0; - static_assert(is_same::value, ""); - static_assert(is_same::value, ""); - return x; - } - - } +int +main (void) +{ -} // namespace cxx14 -#endif // __cplusplus >= 201402L + ; + return 0; +} +_ACEOF +if ac_fn_cxx_try_compile "$LINENO" +then : + have_cxx11_final=yes +else case e in #( + e) + have_cxx11_final=no + ;; +esac +fi +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext + # Confirm that you cannot declare a non-virtual function 'final'. + if test "x$have_cxx11_final" != "xno" +then : -// If the compiler admits that it is not ready for C++17, why torture it? -// Hopefully, this will speed up the test. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ -#ifndef __cplusplus + struct A + { + // Error: non-virtual function cannot be final + void bar() final; + }; -#error "This is not a C++ compiler" +int +main (void) +{ -#elif __cplusplus < 201703L -#error "This is not a C++17 compiler" + ; + return 0; +} +_ACEOF +if ac_fn_cxx_try_compile "$LINENO" +then : -#else + # If this code compiles, 'final' is not working correctly. + have_cxx11_final=no -#include -#include -#include +else case e in #( + e) + have_cxx11_final=yes + ;; +esac +fi +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext -namespace cxx17 -{ +fi - namespace test_constexpr_lambdas - { + if test "x$have_cxx11_final" != "xno" +then : - constexpr int foo = [](){return 42;}(); + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ - } + struct A + { + virtual void foo() final; + }; + struct B : A + { + // Error: foo cannot be overridden as it's final in A + void foo(); + }; - namespace test::nested_namespace::definitions - { +int +main (void) +{ - } - namespace test_fold_expression - { + ; + return 0; +} +_ACEOF +if ac_fn_cxx_try_compile "$LINENO" +then : - template - int multiply(Args... args) - { - return (args * ... * 1); - } + # If this code compiles, 'final' is not working correctly. + have_cxx11_final=no - template - bool all(Args... args) - { - return (args && ...); - } +else case e in #( + e) + have_cxx11_final=yes + ;; +esac +fi +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext - } +fi - namespace test_extended_static_assert - { + if test "x$have_cxx11_final" != "xno" +then : - static_assert (true); + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ - } + struct A + { + }; - namespace test_auto_brace_init_list - { + // struct B is final + struct B final : A + { + }; - auto foo = {5}; - auto bar {5}; + // Error: B is final + struct C : B + { + }; - static_assert(std::is_same, decltype(foo)>::value); - static_assert(std::is_same::value); - } +int +main (void) +{ - namespace test_typename_in_template_template_parameter - { - template typename X> struct D; + ; + return 0; +} +_ACEOF +if ac_fn_cxx_try_compile "$LINENO" +then : - } + # If this code compiles, 'final' is not working correctly. + have_cxx11_final=no - namespace test_fallthrough_nodiscard_maybe_unused_attributes - { +else case e in #( + e) + have_cxx11_final=yes + ;; +esac +fi +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext - int f1() - { - return 42; - } +fi - [[nodiscard]] int f2() - { - [[maybe_unused]] auto unused = f1(); + # If the flag is still 'yes' after all the tests, set the #define. + if test "x$have_cxx11_final" = "xyes" +then : - switch (f1()) - { - case 17: - f1(); - [[fallthrough]]; - case 42: - f1(); - } - return f1(); - } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +printf "%s\n" "yes" >&6; } - } +printf "%s\n" "#define HAVE_CXX11_FINAL 1" >>confdefs.h - namespace test_extended_aggregate_initialization - { - struct base1 - { - int b1, b2 = 42; - }; +else case e in #( + e) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } ;; +esac +fi - struct base2 - { - base2() { - b3 = 42; - } - int b3; - }; + # Reset the flags + CXXFLAGS="$old_CXXFLAGS" + ac_ext=cpp +ac_cpp='$CXXCPP $CPPFLAGS' +ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_cxx_compiler_gnu - struct derived : base1, base2 - { - int d; - }; - derived d1 {{1, 2}, {}, 4}; // full initialization - derived d2 {{}, {}, 4}; // value-initialized bases + if test x$have_cxx11_final == xyes; then + HAVE_CXX11_FINAL_TRUE= + HAVE_CXX11_FINAL_FALSE='#' +else + HAVE_CXX11_FINAL_TRUE='#' + HAVE_CXX11_FINAL_FALSE= +fi - } - namespace test_general_range_based_for_loop - { + if test "x$have_cxx11_final" != "xyes" +then : + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: libMesh requires the C++11 final keyword" >&5 +printf "%s\n" "$as_me: WARNING: libMesh requires the C++11 final keyword" >&2;} + have_cxx_all=no +fi - struct iter - { - int i; - int& operator* () - { - return i; - } + have_cxx11_decltype=no - const int& operator* () const - { - return i; - } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for C++11 decltype support" >&5 +printf %s "checking for C++11 decltype support... " >&6; } + ac_ext=cpp +ac_cpp='$CXXCPP $CPPFLAGS' +ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_cxx_compiler_gnu - iter& operator++() - { - ++i; - return *this; - } - }; - struct sentinel - { - int i; - }; + old_CXXFLAGS="$CXXFLAGS" + CXXFLAGS="$CXXFLAGS $libmesh_CXXFLAGS" - bool operator== (const iter& i, const sentinel& s) - { - return i.i == s.i; - } + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ - bool operator!= (const iter& i, const sentinel& s) - { - return !(i == s); - } + #include - struct range - { - iter begin() const - { - return {0}; - } +int +main (void) +{ - sentinel end() const - { - return {5}; - } - }; + int a; + decltype(a) b; + std::vector vec(10); + for (auto i = decltype(vec.size())(0); i < vec.size(); ++i) + vec[i] += i; - void f() - { - range r {}; + ; + return 0; +} +_ACEOF +if ac_fn_cxx_try_compile "$LINENO" +then : - for (auto i : r) - { - [[maybe_unused]] auto v = i; - } - } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +printf "%s\n" "yes" >&6; } - } +printf "%s\n" "#define HAVE_CXX11_DECLTYPE 1" >>confdefs.h - namespace test_lambda_capture_asterisk_this_by_value - { + have_cxx11_decltype=yes - struct t - { - int i; - int foo() - { - return [*this]() - { - return i; - }(); - } - }; +else case e in #( + e) + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } + ;; +esac +fi +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext - } + # Reset the flags + CXXFLAGS="$old_CXXFLAGS" + ac_ext=cpp +ac_cpp='$CXXCPP $CPPFLAGS' +ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_cxx_compiler_gnu - namespace test_enum_class_construction - { - enum class byte : unsigned char - {}; + if test x$have_cxx11_decltype == xyes; then + HAVE_CXX11_DECLTYPE_TRUE= + HAVE_CXX11_DECLTYPE_FALSE='#' +else + HAVE_CXX11_DECLTYPE_TRUE='#' + HAVE_CXX11_DECLTYPE_FALSE= +fi - byte foo {42}; - } + if test "x$have_cxx11_decltype" != "xyes" +then : + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: libMesh requires the C++11 decltype keyword" >&5 +printf "%s\n" "$as_me: WARNING: libMesh requires the C++11 decltype keyword" >&2;} + have_cxx_all=no +fi - namespace test_constexpr_if - { - template - int f () - { - if constexpr(cond) - { - return 13; - } - else - { - return 42; - } - } + have_cxx11_begin_end=no - } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for C++11 std::begin/end support for arrays" >&5 +printf %s "checking for C++11 std::begin/end support for arrays... " >&6; } + ac_ext=cpp +ac_cpp='$CXXCPP $CPPFLAGS' +ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_cxx_compiler_gnu - namespace test_selection_statement_with_initializer - { - int f() - { - return 13; - } + old_CXXFLAGS="$CXXFLAGS" + CXXFLAGS="$CXXFLAGS $libmesh_CXXFLAGS" - int f2() - { - if (auto i = f(); i > 0) - { - return 3; - } + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ - switch (auto i = f(); i + 4) - { - case 17: - return 2; + #include + #include - default: - return 1; - } - } +int +main (void) +{ - } + int array[5] = {3, 1, 5, 2, 4}; + std::sort(std::begin(array), std::end(array)); - namespace test_template_argument_deduction_for_class_templates - { + ; + return 0; +} +_ACEOF +if ac_fn_cxx_try_compile "$LINENO" +then : - template - struct pair - { - pair (T1 p1, T2 p2) - : m1 {p1}, - m2 {p2} - {} + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +printf "%s\n" "yes" >&6; } + have_cxx11_begin_end=yes - T1 m1; - T2 m2; - }; +else case e in #( + e) + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } + ;; +esac +fi +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext - void f() - { - [[maybe_unused]] auto p = pair{13, 42u}; - } + CXXFLAGS="$old_CXXFLAGS" + ac_ext=cpp +ac_cpp='$CXXCPP $CPPFLAGS' +ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_cxx_compiler_gnu - } - namespace test_non_type_auto_template_parameters - { + if test "x$have_cxx11_begin_end" != "xyes" +then : + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: libMesh requires C++11 std::begin/end support" >&5 +printf "%s\n" "$as_me: WARNING: libMesh requires C++11 std::begin/end support" >&2;} + have_cxx_all=no +fi - template - struct B - {}; - B<5> b1; - B<'a'> b2; + have_cxx11_container_erase=no - } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for C++11 std container erase() functions returning iterators" >&5 +printf %s "checking for C++11 std container erase() functions returning iterators... " >&6; } + ac_ext=cpp +ac_cpp='$CXXCPP $CPPFLAGS' +ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_cxx_compiler_gnu - namespace test_structured_bindings - { - int arr[2] = { 1, 2 }; - std::pair pr = { 1, 2 }; + old_CXXFLAGS="$CXXFLAGS" + CXXFLAGS="$CXXFLAGS $libmesh_CXXFLAGS" + + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + + #include + #include + +int +main (void) +{ - auto f1() -> int(&)[2] { - return arr; + std::map m; + m.insert(std::make_pair(1,2)); + std::map::iterator it = m.erase(m.begin()); } - - auto f2() -> std::pair& { - return pr; + std::set s; + s.insert(1); + std::set::iterator it = s.erase(s.begin()); } - - struct S { - int x1 : 2; - volatile double y1; - }; - - S f3() + std::multimap m; + m.insert(std::make_pair(1,2)); + std::multimap::iterator it = m.erase(m.begin()); + } { - return {}; + std::multiset s; + s.insert(1); + std::multiset::iterator it = s.erase(s.begin()); } - auto [ x1, y1 ] = f1(); - auto& [ xr1, yr1 ] = f1(); - auto [ x2, y2 ] = f2(); - auto& [ xr2, yr2 ] = f2(); - const auto [ x3, y3 ] = f3(); + ; + return 0; +} +_ACEOF +if ac_fn_cxx_try_compile "$LINENO" +then : - } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +printf "%s\n" "yes" >&6; } + have_cxx11_container_erase=yes - namespace test_exception_spec_type_system - { +else case e in #( + e) + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } + ;; +esac +fi +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext - struct Good {}; - struct Bad {}; + CXXFLAGS="$old_CXXFLAGS" + ac_ext=cpp +ac_cpp='$CXXCPP $CPPFLAGS' +ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_cxx_compiler_gnu - void g1() noexcept; - void g2(); - template - Bad - f(T*, T*); + if test "x$have_cxx11_container_erase" != "xyes" +then : + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: libMesh requires C++11 support for std container erase() functions returning iterators" >&5 +printf "%s\n" "$as_me: WARNING: libMesh requires C++11 support for std container erase() functions returning iterators" >&2;} + have_cxx_all=no +fi - template - Good - f(T1*, T2*); - static_assert (std::is_same_v); + have_cxx11_container_emplace=no - } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for C++11 std container emplace() functions" >&5 +printf %s "checking for C++11 std container emplace() functions... " >&6; } + ac_ext=cpp +ac_cpp='$CXXCPP $CPPFLAGS' +ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_cxx_compiler_gnu - namespace test_inline_variables - { - template void f(T) - {} + old_CXXFLAGS="$CXXFLAGS" + CXXFLAGS="$CXXFLAGS $libmesh_CXXFLAGS" - template inline T g(T) - { - return T{}; - } + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ - template<> inline void f<>(int) - {} - - template<> int g<>(int) - { - return 5; - } - - } - -} // namespace cxx17 - -#endif // __cplusplus < 201703L + #include + #include + #include +int +main (void) +{ + { + std::map m; + m.emplace(1,2); + m.emplace_hint(m.begin(), 0, 3); + } + { + std::set s; + s.emplace(1); + s.emplace_hint(s.begin(), 0); + } + { + std::multimap m; + m.emplace(1,2); + m.emplace_hint(m.begin(), 0, 3); + } + { + std::multiset s; + s.emplace(1); + s.emplace_hint(s.begin(), 0); + } + { + std::vector v; + v.emplace(v.begin(), 0); + v.emplace_back(1); + } + ; + return 0; +} _ACEOF if ac_fn_cxx_try_compile "$LINENO" then : - eval $cachevar=yes + + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +printf "%s\n" "yes" >&6; } + have_cxx11_container_emplace=yes + else case e in #( - e) eval $cachevar=no ;; + e) + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } + ;; esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext - CXX="$ac_save_CXX" ;; -esac -fi -eval ac_res=\$$cachevar - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 -printf "%s\n" "$ac_res" >&6; } - if eval test x\$$cachevar = xyes; then - CXX="$CXX $switch" - if test -n "$CXXCPP" ; then - CXXCPP="$CXXCPP $switch" - fi - ac_success=yes - break - fi - done - if test x$ac_success = xyes; then - break - fi - done - fi - ac_ext=cpp + + CXXFLAGS="$old_CXXFLAGS" + ac_ext=cpp ac_cpp='$CXXCPP $CPPFLAGS' ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_cxx_compiler_gnu - if test x$ax_cxx_compile_cxx17_required = xtrue; then - if test x$ac_success = xno; then - as_fn_error $? "*** A compiler with support for C++17 language features is required." "$LINENO" 5 - fi - fi - if test x$ac_success = xno; then - HAVE_CXX17=0 - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: No compiler with C++17 support was found" >&5 -printf "%s\n" "$as_me: No compiler with C++17 support was found" >&6;} - else - HAVE_CXX17=1 - -printf "%s\n" "#define HAVE_CXX17 1" >>confdefs.h - - fi - ;; -esac -fi - if test "$HAVE_CXX17" = "1" -a $acsm_found_cxx -eq 0 + if test "x$have_cxx11_container_emplace" != "xyes" then : + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: libMesh requires C++11 support for std container emplace() functions" >&5 +printf "%s\n" "$as_me: WARNING: libMesh requires C++11 support for std container emplace() functions" >&2;} + have_cxx_all=no +fi - # If nothing fails later we're good to go - have_cxx_all=yes - - # -------------------------------------------------------------- - # Test for mandatory C++11 features, those which libMesh now requires - # for internal use. - # -------------------------------------------------------------- - have_cxx11_auto=no + have_cxx11_iota=no - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for C++11 auto keyword support" >&5 -printf %s "checking for C++11 auto keyword support... " >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for C++11 std::iota algorithm" >&5 +printf %s "checking for C++11 std::iota algorithm... " >&6; } ac_ext=cpp ac_cpp='$CXXCPP $CPPFLAGS' ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' @@ -14337,13 +14346,15 @@ ac_compiler_gnu=$ac_cv_cxx_compiler_gnu cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ + #include + #include int main (void) { - int x = 5; - auto y = x; + std::vector v(10); + std::iota(v.begin(), v.end(), 0); ; return 0; @@ -14354,10 +14365,7 @@ then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 printf "%s\n" "yes" >&6; } - -printf "%s\n" "#define HAVE_CXX11_AUTO 1" >>confdefs.h - - have_cxx11_auto=yes + have_cxx11_iota=yes else case e in #( e) @@ -14368,8 +14376,7 @@ esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext - # Reset the flags - CXXFLAGS="$old_CXXFLAGS" + CXXFLAGS="$old_CXXFLAGS" ac_ext=cpp ac_cpp='$CXXCPP $CPPFLAGS' ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' @@ -14377,27 +14384,18 @@ ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ex ac_compiler_gnu=$ac_cv_cxx_compiler_gnu - if test x$have_cxx11_auto == xyes; then - HAVE_CXX11_AUTO_TRUE= - HAVE_CXX11_AUTO_FALSE='#' -else - HAVE_CXX11_AUTO_TRUE='#' - HAVE_CXX11_AUTO_FALSE= -fi - - - if test "x$have_cxx11_auto" != "xyes" + if test "x$have_cxx11_iota" != "xyes" then : - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: libMesh requires C++11 auto variable support" >&5 -printf "%s\n" "$as_me: WARNING: libMesh requires C++11 auto variable support" >&2;} + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: libMesh requires C++11 support for std::iota" >&5 +printf "%s\n" "$as_me: WARNING: libMesh requires C++11 support for std::iota" >&2;} have_cxx_all=no fi - have_cxx11_rangefor=no + have_cxx11_vector_data=no - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for C++11 range-based for loop support" >&5 -printf %s "checking for C++11 range-based for loop support... " >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for C++11 std::vector::data() API" >&5 +printf %s "checking for C++11 std::vector::data() API... " >&6; } ac_ext=cpp ac_cpp='$CXXCPP $CPPFLAGS' ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' @@ -14411,21 +14409,14 @@ ac_compiler_gnu=$ac_cv_cxx_compiler_gnu cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ - #include - #include - void print(const std::vector & v) - { - for (const int & x : v) - std::cout << x << ' '; - std::cout << std::endl; - } + #include int main (void) { - std::vector v(3); - print(v); + std::vector v(10); + int * begin = v.data(); ; return 0; @@ -14436,10 +14427,7 @@ then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 printf "%s\n" "yes" >&6; } - -printf "%s\n" "#define HAVE_CXX11_RANGEFOR 1" >>confdefs.h - - have_cxx11_rangefor=yes + have_cxx11_vector_data=yes else case e in #( e) @@ -14450,8 +14438,7 @@ esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext - # Reset the flags - CXXFLAGS="$old_CXXFLAGS" + CXXFLAGS="$old_CXXFLAGS" ac_ext=cpp ac_cpp='$CXXCPP $CPPFLAGS' ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' @@ -14459,29 +14446,18 @@ ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ex ac_compiler_gnu=$ac_cv_cxx_compiler_gnu - if test x$have_cxx11_rangefor == xyes; then - HAVE_CXX11_RANGEFOR_TRUE= - HAVE_CXX11_RANGEFOR_FALSE='#' -else - HAVE_CXX11_RANGEFOR_TRUE='#' - HAVE_CXX11_RANGEFOR_FALSE= -fi - - - if test "x$have_cxx11_rangefor" != "xyes" + if test "x$have_cxx11_vector_data" != "xyes" then : - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: libMesh requires C++11 ranged-for loop support" >&5 -printf "%s\n" "$as_me: WARNING: libMesh requires C++11 ranged-for loop support" >&2;} + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: libMesh requires C++11 support for std::vector::data()" >&5 +printf "%s\n" "$as_me: WARNING: libMesh requires C++11 support for std::vector::data()" >&2;} have_cxx_all=no fi - # Technically we require uniform initialization, but this is the - # closest test we have - have_cxx11_initializer_list=no + have_cxx11_shared_ptr=no - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for C++11 initializer list support" >&5 -printf %s "checking for C++11 initializer list support... " >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for C++11 std::shared_ptr support" >&5 +printf %s "checking for C++11 std::shared_ptr support... " >&6; } ac_ext=cpp ac_cpp='$CXXCPP $CPPFLAGS' ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' @@ -14489,21 +14465,24 @@ ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ex ac_compiler_gnu=$ac_cv_cxx_compiler_gnu + # Save any original value that CXXFLAGS had old_CXXFLAGS="$CXXFLAGS" CXXFLAGS="$CXXFLAGS $libmesh_CXXFLAGS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ - #include - #include - #include + #include int main (void) { - std::vector v = { "xyzzy", "plugh", "abracadabra" }; + std::shared_ptr p1; + std::shared_ptr p2 (new int); + std::shared_ptr p3 (p2); + p3.reset(new int); + p3 = std::make_shared(5); ; return 0; @@ -14512,22 +14491,27 @@ _ACEOF if ac_fn_cxx_try_compile "$LINENO" then : + have_cxx11_shared_ptr=yes { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 printf "%s\n" "yes" >&6; } -printf "%s\n" "#define HAVE_CXX11_INITIALIZER_LIST 1" >>confdefs.h - - have_cxx11_initializer_list=yes - else case e in #( e) - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 + have_cxx11_shared_ptr=no + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } ;; esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext + if test "x$have_cxx11_shared_ptr" = "xyes" +then : + +printf "%s\n" "#define HAVE_CXX11_SHARED_PTR 1" >>confdefs.h + +fi + # Reset the flags CXXFLAGS="$old_CXXFLAGS" ac_ext=cpp @@ -14537,27 +14521,27 @@ ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ex ac_compiler_gnu=$ac_cv_cxx_compiler_gnu - if test x$have_cxx11_initializer_list == xyes; then - HAVE_CXX11_INITIALIZER_LIST_TRUE= - HAVE_CXX11_INITIALIZER_LIST_FALSE='#' + if test x$have_cxx11_shared_ptr == xyes; then + HAVE_CXX11_SHARED_PTR_TRUE= + HAVE_CXX11_SHARED_PTR_FALSE='#' else - HAVE_CXX11_INITIALIZER_LIST_TRUE='#' - HAVE_CXX11_INITIALIZER_LIST_FALSE= + HAVE_CXX11_SHARED_PTR_TRUE='#' + HAVE_CXX11_SHARED_PTR_FALSE= fi - if test "x$have_cxx11_initializer_list" != "xyes" + if test "x$have_cxx11_shared_ptr" != "xyes" then : - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: libMesh requires C++11 initializer list support" >&5 -printf "%s\n" "$as_me: WARNING: libMesh requires C++11 initializer list support" >&2;} + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: libMesh requires C++11 support for std::shared_ptr" >&5 +printf "%s\n" "$as_me: WARNING: libMesh requires C++11 support for std::shared_ptr" >&2;} have_cxx_all=no fi - have_cxx11_unique_ptr=no + have_cxx11_rvalue_references=no - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for C++11 std::unique_ptr support" >&5 -printf %s "checking for C++11 std::unique_ptr support... " >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for C++11 rvalue references support" >&5 +printf %s "checking for C++11 rvalue references support... " >&6; } ac_ext=cpp ac_cpp='$CXXCPP $CPPFLAGS' ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' @@ -14571,22 +14555,15 @@ ac_compiler_gnu=$ac_cv_cxx_compiler_gnu cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ - #include - #include - struct Foo - { - Foo() { std::cout << "Foo::Foo\n"; } - ~Foo() { std::cout << "Foo::~Foo\n"; } - }; + int foo(int && x) { return x; } + int bar() { return 4; } int main (void) { - { - // up now owns a Foo - std::unique_ptr up(new Foo); - } // Foo deleted when up goes out of scope + // Call function that takes an rvalue reference. + foo (bar()); ; return 0; @@ -14598,13 +14575,13 @@ then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 printf "%s\n" "yes" >&6; } -printf "%s\n" "#define HAVE_CXX11_UNIQUE_PTR 1" >>confdefs.h +printf "%s\n" "#define HAVE_CXX11_RVALUE_REFERENCES 1" >>confdefs.h - have_cxx11_unique_ptr=yes + have_cxx11_rvalue_references=yes else case e in #( e) - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } ;; esac @@ -14620,31 +14597,27 @@ ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ex ac_compiler_gnu=$ac_cv_cxx_compiler_gnu - if test x$have_cxx11_unique_ptr == xyes; then - HAVE_CXX11_UNIQUE_PTR_TRUE= - HAVE_CXX11_UNIQUE_PTR_FALSE='#' + if test x$have_cxx11_rvalue_references == xyes; then + HAVE_CXX11_RVALUE_REFERENCES_TRUE= + HAVE_CXX11_RVALUE_REFERENCES_FALSE='#' else - HAVE_CXX11_UNIQUE_PTR_TRUE='#' - HAVE_CXX11_UNIQUE_PTR_FALSE= + HAVE_CXX11_RVALUE_REFERENCES_TRUE='#' + HAVE_CXX11_RVALUE_REFERENCES_FALSE= fi - if test "x$have_cxx11_unique_ptr" != "xyes" + if test "x$have_cxx11_rvalue_references" != "xyes" then : - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: libMesh requires C++11 std::unique_ptr support" >&5 -printf "%s\n" "$as_me: WARNING: libMesh requires C++11 std::unique_ptr support" >&2;} + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: libMesh requires C++11 support for rvalue references" >&5 +printf "%s\n" "$as_me: WARNING: libMesh requires C++11 support for rvalue references" >&2;} have_cxx_all=no fi - have_cxx11_make_unique_workaround=no + have_cxx11_to_string=no - # This is a simple workaround for no std::make_unique in C++11: - # http://stackoverflow.com/questions/7038357/make-unique-and-perfect-forwarding - # Requires working rvalue references, std::forward, variadic - # templates, and std::unique_ptr from C++11. - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for C++11 std::make_unique workaround support" >&5 -printf %s "checking for C++11 std::make_unique workaround support... " >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for C++11 std::to_string() support" >&5 +printf %s "checking for C++11 std::to_string() support... " >&6; } ac_ext=cpp ac_cpp='$CXXCPP $CPPFLAGS' ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' @@ -14658,25 +14631,22 @@ ac_compiler_gnu=$ac_cv_cxx_compiler_gnu cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ - #include - namespace local - { - template - std::unique_ptr make_unique(Args&&... args) - { - return std::unique_ptr(new T(std::forward(args)...)); - } - } + #include int main (void) { - { - // Normally, you would use "auto" on the LHS here to avoid - // repeating the type name, but we are not testing auto here. - std::unique_ptr up = local::make_unique(42); - } // Foo deleted when up goes out of scope + // tiny="0.000000". Note: std::to_string(double) is required to produce + // a std::string with the same contents as std::sprintf(buf, "%f", value) + // would produce, given a sufficiently large buf. This is *different* from + // what you get from a std::stringstream using default formatting and + // precision flags, i.e. + // std::ostringstream oss; + // oss << 1.e-40; + // std::string tiny = oss.str(); + // will produce the string "1e-40". + std::string tiny = std::to_string(1.e-40); ; return 0; @@ -14688,9 +14658,9 @@ then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 printf "%s\n" "yes" >&6; } -printf "%s\n" "#define HAVE_CXX11_MAKE_UNIQUE_WORKAROUND 1" >>confdefs.h +printf "%s\n" "#define HAVE_CXX11_TO_STRING 1" >>confdefs.h - have_cxx11_make_unique_workaround=yes + have_cxx11_to_string=yes else case e in #( e) @@ -14710,27 +14680,27 @@ ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ex ac_compiler_gnu=$ac_cv_cxx_compiler_gnu - if test x$have_cxx11_make_unique_workaround == xyes; then - HAVE_CXX11_MAKE_UNIQUE_WORKAROUND_TRUE= - HAVE_CXX11_MAKE_UNIQUE_WORKAROUND_FALSE='#' + if test x$have_cxx11_to_string == xyes; then + HAVE_CXX11_TO_STRING_TRUE= + HAVE_CXX11_TO_STRING_FALSE='#' else - HAVE_CXX11_MAKE_UNIQUE_WORKAROUND_TRUE='#' - HAVE_CXX11_MAKE_UNIQUE_WORKAROUND_FALSE= + HAVE_CXX11_TO_STRING_TRUE='#' + HAVE_CXX11_TO_STRING_FALSE= fi - if test "x$have_cxx11_make_unique_workaround" != "xyes" + if test "x$have_cxx11_to_string" != "xyes" then : - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: libMesh requires C++11 variadic template support" >&5 -printf "%s\n" "$as_me: WARNING: libMesh requires C++11 variadic template support" >&2;} + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: libMesh requires C++11 support for std::to_string()" >&5 +printf "%s\n" "$as_me: WARNING: libMesh requires C++11 support for std::to_string()" >&2;} have_cxx_all=no fi - have_cxx11_tuple=no + have_cxx11_constexpr=no - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for C++11 std::tuple support" >&5 -printf %s "checking for C++11 std::tuple support... " >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for C++11 constexpr support" >&5 +printf %s "checking for C++11 constexpr support... " >&6; } ac_ext=cpp ac_cpp='$CXXCPP $CPPFLAGS' ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' @@ -14738,38 +14708,20 @@ ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ex ac_compiler_gnu=$ac_cv_cxx_compiler_gnu - old_CXXFLAGS="$CXXFLAGS" + old_CXXFLAGS="$CXXFLAGS" CXXFLAGS="$CXXFLAGS $libmesh_CXXFLAGS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ - #include - #include - #include + constexpr int multiply (int x, int y) { return x * y; } int main (void) { - // Test std::make_tuple - std::map> students; - students[0] = std::make_tuple(3.8, 'A', "Lisa Simpson"); - students[1] = std::make_tuple(2.9, 'C', "Milhouse Van Houten"); - - // Test templated std::get() method. - std::get<0>(students[0]); - std::get<1>(students[0]); - std::get<2>(students[0]); - - // Test std::tie and std::ignore which are declared in the header. - double gpa1; - std::string name1; - std::tie(gpa1, std::ignore, name1) = students[1]; - - // Test std::tuple_cat(), which combines together one or more - // objects, not necessarily tuples, into a single tuple. - auto t = std::tuple_cat(students[0], students[1], std::make_pair("foo", 42)); + // The compiler should compute "val" at compile time. + const int val = multiply(10, 10); ; return 0; @@ -14781,9 +14733,9 @@ then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 printf "%s\n" "yes" >&6; } -printf "%s\n" "#define HAVE_CXX11_TUPLE 1" >>confdefs.h +printf "%s\n" "#define HAVE_CXX11_CONSTEXPR 1" >>confdefs.h - have_cxx11_tuple=yes + have_cxx11_constexpr=yes else case e in #( e) @@ -14794,7 +14746,8 @@ esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext - CXXFLAGS="$old_CXXFLAGS" + # Reset the flags + CXXFLAGS="$old_CXXFLAGS" ac_ext=cpp ac_cpp='$CXXCPP $CPPFLAGS' ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' @@ -14802,27 +14755,27 @@ ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ex ac_compiler_gnu=$ac_cv_cxx_compiler_gnu - if test x$have_cxx11_tuple == xyes; then - HAVE_CXX11_TUPLE_TRUE= - HAVE_CXX11_TUPLE_FALSE='#' + if test x$have_cxx11_constexpr == xyes; then + HAVE_CXX11_CONSTEXPR_TRUE= + HAVE_CXX11_CONSTEXPR_FALSE='#' else - HAVE_CXX11_TUPLE_TRUE='#' - HAVE_CXX11_TUPLE_FALSE= + HAVE_CXX11_CONSTEXPR_TRUE='#' + HAVE_CXX11_CONSTEXPR_FALSE= fi - if test "x$have_cxx11_tuple" != "xyes" + if test "x$have_cxx11_constexpr" != "xyes" then : - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: libMesh requires C++11 std::tuple support" >&5 -printf "%s\n" "$as_me: WARNING: libMesh requires C++11 std::tuple support" >&2;} + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: libMesh requires C++11 support for constexpr" >&5 +printf "%s\n" "$as_me: WARNING: libMesh requires C++11 support for constexpr" >&2;} have_cxx_all=no fi - have_cxx11_lambda=no + have_cxx11_variadic_templates=no - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for C++11 lambda support" >&5 -printf %s "checking for C++11 lambda support... " >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for C++11 variadic template support" >&5 +printf %s "checking for C++11 variadic template support... " >&6; } ac_ext=cpp ac_cpp='$CXXCPP $CPPFLAGS' ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' @@ -14836,20 +14789,23 @@ ac_compiler_gnu=$ac_cv_cxx_compiler_gnu cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ - // typedef for a function pointer that takes int and returns bool. - typedef bool (*FunctionPointer) (int); + // Base case + template + T sum(T t) { return t; } - // A function that takes a pointer to a function that takes an int, - // calls it with the number 4, and returns the result. - bool f(FunctionPointer g) { return g(4); } + // Compute sum of arbitrary number of passed parameters. + template + T sum(T t, P ...p) + { + t += sum(p...); + return t; + } int main (void) { - // Call f, passing it a lambda constructed on the fly instead - // of a standard function pointer. The result should be true. - f ( [](int x) { return x > 3; } ); + sum(1, 2, 3, 4, 5); ; return 0; @@ -14861,13 +14817,13 @@ then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 printf "%s\n" "yes" >&6; } -printf "%s\n" "#define HAVE_CXX11_LAMBDA 1" >>confdefs.h +printf "%s\n" "#define HAVE_CXX11_VARIADIC_TEMPLATES 1" >>confdefs.h - have_cxx11_lambda=yes + have_cxx11_variadic_templates=yes else case e in #( e) - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } ;; esac @@ -14883,27 +14839,27 @@ ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ex ac_compiler_gnu=$ac_cv_cxx_compiler_gnu - if test x$have_cxx11_lambda == xyes; then - HAVE_CXX11_LAMBDA_TRUE= - HAVE_CXX11_LAMBDA_FALSE='#' + if test x$have_cxx11_variadic_templates == xyes; then + HAVE_CXX11_VARIADIC_TEMPLATES_TRUE= + HAVE_CXX11_VARIADIC_TEMPLATES_FALSE='#' else - HAVE_CXX11_LAMBDA_TRUE='#' - HAVE_CXX11_LAMBDA_FALSE= + HAVE_CXX11_VARIADIC_TEMPLATES_TRUE='#' + HAVE_CXX11_VARIADIC_TEMPLATES_FALSE= fi - if test "x$have_cxx11_lambda" != "xyes" + if test "x$have_cxx11_variadic_templates" != "xyes" then : - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: libMesh requires C++11 lambda support" >&5 -printf "%s\n" "$as_me: WARNING: libMesh requires C++11 lambda support" >&2;} + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: libMesh requires C++11 support for variadic templates" >&5 +printf "%s\n" "$as_me: WARNING: libMesh requires C++11 support for variadic templates" >&2;} have_cxx_all=no fi - have_cxx11_fixed_type_enum=no + have_cxx11_alias_declarations=no - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for C++11 fixed type enumeration support" >&5 -printf %s "checking for C++11 fixed type enumeration support... " >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for C++11 alias declarations support" >&5 +printf %s "checking for C++11 alias declarations support... " >&6; } ac_ext=cpp ac_cpp='$CXXCPP $CPPFLAGS' ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' @@ -14911,19 +14867,27 @@ ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ex ac_compiler_gnu=$ac_cv_cxx_compiler_gnu - old_CXXFLAGS="$CXXFLAGS" + old_CXXFLAGS="$CXXFLAGS" CXXFLAGS="$CXXFLAGS $libmesh_CXXFLAGS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ - enum Fruit : int {APPLE=0, ORANGE=1}; + template + struct check + { + T t; + }; + + // An alias declaration is like a templated typedef + template + using MyCheck = check; int main (void) { - Fruit f = APPLE; + MyCheck mc; ; return 0; @@ -14935,9 +14899,9 @@ then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 printf "%s\n" "yes" >&6; } -printf "%s\n" "#define HAVE_CXX11_FIXED_TYPE_ENUM 1" >>confdefs.h +printf "%s\n" "#define HAVE_CXX11_ALIAS_DECLARATIONS 1" >>confdefs.h - have_cxx11_fixed_type_enum=yes + have_cxx11_alias_declarations=yes else case e in #( e) @@ -14948,7 +14912,8 @@ esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext - CXXFLAGS="$old_CXXFLAGS" + # Reset the flags + CXXFLAGS="$old_CXXFLAGS" ac_ext=cpp ac_cpp='$CXXCPP $CPPFLAGS' ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' @@ -14956,27 +14921,27 @@ ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ex ac_compiler_gnu=$ac_cv_cxx_compiler_gnu - if test x$have_cxx11_fixed_type_enum == xyes; then - HAVE_CXX11_FIXED_TYPE_ENUM_TRUE= - HAVE_CXX11_FIXED_TYPE_ENUM_FALSE='#' + if test x$have_cxx11_alias_declarations == xyes; then + HAVE_CXX11_ALIAS_DECLARATIONS_TRUE= + HAVE_CXX11_ALIAS_DECLARATIONS_FALSE='#' else - HAVE_CXX11_FIXED_TYPE_ENUM_TRUE='#' - HAVE_CXX11_FIXED_TYPE_ENUM_FALSE= + HAVE_CXX11_ALIAS_DECLARATIONS_TRUE='#' + HAVE_CXX11_ALIAS_DECLARATIONS_FALSE= fi - if test "x$have_cxx11_fixed_type_enum" != "xyes" + if test "x$have_cxx11_alias_declarations" != "xyes" then : - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: libMesh requires C++11 fixed type enumeration support" >&5 -printf "%s\n" "$as_me: WARNING: libMesh requires C++11 fixed type enumeration support" >&2;} + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: libMesh requires C++11 support for alias declarations" >&5 +printf "%s\n" "$as_me: WARNING: libMesh requires C++11 support for alias declarations" >&2;} have_cxx_all=no fi - have_cxx11_fixed_type_enum_fwd=no + have_cxx11_array=no - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for C++11 fixed type enumeration forward declaration support" >&5 -printf %s "checking for C++11 fixed type enumeration forward declaration support... " >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for C++11 std::array" >&5 +printf %s "checking for C++11 std::array... " >&6; } ac_ext=cpp ac_cpp='$CXXCPP $CPPFLAGS' ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' @@ -14990,18 +14955,15 @@ ac_compiler_gnu=$ac_cv_cxx_compiler_gnu cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ - #include - enum Foo : int; - void func(Foo f) { std::cout << f << std::endl; } - enum Foo : int { FOO0 = 0, FOO1 = 1, FOO2 = 2 }; + #include int main (void) { - func(FOO0); - func(FOO1); - func(FOO2); + std::array a; + a[0] = 42.0; + double * begin = a.data(); ; return 0; @@ -15012,10 +14974,7 @@ then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 printf "%s\n" "yes" >&6; } - -printf "%s\n" "#define HAVE_CXX11_FIXED_TYPE_ENUM_FWD 1" >>confdefs.h - - have_cxx11_fixed_type_enum_fwd=yes + have_cxx11_array=yes else case e in #( e) @@ -15034,27 +14993,17 @@ ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ex ac_compiler_gnu=$ac_cv_cxx_compiler_gnu - if test x$have_cxx11_fixed_type_enum_fwd == xyes; then - HAVE_CXX11_FIXED_TYPE_ENUM_FWD_TRUE= - HAVE_CXX11_FIXED_TYPE_ENUM_FWD_FALSE='#' -else - HAVE_CXX11_FIXED_TYPE_ENUM_FWD_TRUE='#' - HAVE_CXX11_FIXED_TYPE_ENUM_FWD_FALSE= -fi - - - if test "x$have_cxx11_fixed_type_enum_fwd" != "xyes" + if test "x$have_cxx11_array" != "xyes" then : - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: libMesh requires C++11 fixed type enumeration forward declaration support" >&5 -printf "%s\n" "$as_me: WARNING: libMesh requires C++11 fixed type enumeration forward declaration support" >&2;} + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: libMesh requires C++11 support for std::array" >&5 +printf "%s\n" "$as_me: WARNING: libMesh requires C++11 support for std::array" >&2;} have_cxx_all=no fi - have_cxx11_override=no + have_cxx11_isnan=no + have_cxx11_isinf=no - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for C++11 override keyword support" >&5 -printf %s "checking for C++11 override keyword support... " >&6; } ac_ext=cpp ac_cpp='$CXXCPP $CPPFLAGS' ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' @@ -15065,20 +15014,19 @@ ac_compiler_gnu=$ac_cv_cxx_compiler_gnu old_CXXFLAGS="$CXXFLAGS" CXXFLAGS="$CXXFLAGS $libmesh_CXXFLAGS" + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for C++11 std::isnan" >&5 +printf %s "checking for C++11 std::isnan... " >&6; } cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ + #include int main (void) { - struct Base { - virtual void f() {} - }; - struct Child : public Base { - virtual void f() override {} - }; + if (std::isnan(0.0)) + return 1; ; return 0; @@ -15089,83 +15037,30 @@ then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 printf "%s\n" "yes" >&6; } - -printf "%s\n" "#define HAVE_CXX11_OVERRIDE 1" >>confdefs.h - - have_cxx11_override=yes + have_cxx11_isnan=yes else case e in #( e) - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } ;; esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext - # Reset the flags - CXXFLAGS="$old_CXXFLAGS" - ac_ext=cpp -ac_cpp='$CXXCPP $CPPFLAGS' -ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_cxx_compiler_gnu - - - if test x$have_cxx11_override == xyes; then - HAVE_CXX11_OVERRIDE_TRUE= - HAVE_CXX11_OVERRIDE_FALSE='#' -else - HAVE_CXX11_OVERRIDE_TRUE='#' - HAVE_CXX11_OVERRIDE_FALSE= -fi - - - if test "x$have_cxx11_override" != "xyes" -then : - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: libMesh requires C++11 compiler support the override keyword" >&5 -printf "%s\n" "$as_me: WARNING: libMesh requires C++11 compiler support the override keyword" >&2;} - have_cxx_all=no -fi - - - have_cxx11_move_constructors=no - - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for C++11 move constructor support" >&5 -printf %s "checking for C++11 move constructor support... " >&6; } - ac_ext=cpp -ac_cpp='$CXXCPP $CPPFLAGS' -ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_cxx_compiler_gnu - - - old_CXXFLAGS="$CXXFLAGS" - CXXFLAGS="$CXXFLAGS $libmesh_CXXFLAGS" - + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for C++11 std::isinf" >&5 +printf %s "checking for C++11 std::isinf... " >&6; } cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ - #include - class move_constructable_base - { - public: - move_constructable_base() {} - move_constructable_base(move_constructable_base && other) noexcept {} - }; - class move_constructable : public move_constructable_base - { - public: - move_constructable() {} - move_constructable(move_constructable && other) noexcept : move_constructable_base(std::move(other)) {} - }; + #include int main (void) { - move_constructable m1; - move_constructable m2(std::move(m1)); + if (std::isinf(0.0)) + return 1; ; return 0; @@ -15176,10 +15071,7 @@ then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 printf "%s\n" "yes" >&6; } - -printf "%s\n" "#define HAVE_CXX11_MOVE_CONSTRUCTORS 1" >>confdefs.h - - have_cxx11_move_constructors=yes + have_cxx11_isinf=yes else case e in #( e) @@ -15190,8 +15082,7 @@ esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext - # Reset the flags - CXXFLAGS="$old_CXXFLAGS" + CXXFLAGS="$old_CXXFLAGS" ac_ext=cpp ac_cpp='$CXXCPP $CPPFLAGS' ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' @@ -15199,27 +15090,22 @@ ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ex ac_compiler_gnu=$ac_cv_cxx_compiler_gnu - if test x$have_cxx11_move_constructors == xyes; then - HAVE_CXX11_MOVE_CONSTRUCTORS_TRUE= - HAVE_CXX11_MOVE_CONSTRUCTORS_FALSE='#' -else - HAVE_CXX11_MOVE_CONSTRUCTORS_TRUE='#' - HAVE_CXX11_MOVE_CONSTRUCTORS_FALSE= + if test "x$have_cxx11_isnan" != "xyes" +then : + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: libMesh requires C++11 support for std::isnan" >&5 +printf "%s\n" "$as_me: WARNING: libMesh requires C++11 support for std::isnan" >&2;} + have_cxx_all=no fi - - - if test "x$have_cxx11_move_constructors" != "xyes" + if test "x$have_cxx11_isinf" != "xyes" then : - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: libMesh requires C++11 move constructor support" >&5 -printf "%s\n" "$as_me: WARNING: libMesh requires C++11 move constructor support" >&2;} + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: libMesh requires C++11 support for std::isinf" >&5 +printf "%s\n" "$as_me: WARNING: libMesh requires C++11 support for std::isinf" >&2;} have_cxx_all=no fi - have_cxx11_deleted_functions=no + have_cxx17_splicing=no - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for C++11 deleted functions support" >&5 -printf %s "checking for C++11 deleted functions support... " >&6; } ac_ext=cpp ac_cpp='$CXXCPP $CPPFLAGS' ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' @@ -15230,18 +15116,28 @@ ac_compiler_gnu=$ac_cv_cxx_compiler_gnu old_CXXFLAGS="$CXXFLAGS" CXXFLAGS="$CXXFLAGS $libmesh_CXXFLAGS" + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for C++17 std::*::merge" >&5 +printf %s "checking for C++17 std::*::merge... " >&6; } cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ - class Foo - { - Foo(const Foo &) = delete; - }; + #include + #include + #include + #include int main (void) { + std::set s1{1}, s2{2}; + std::unordered_set us1{3}, us2{4}; + std::map m1{{5,6}}, m2{{7,8}}; + std::unordered_map um1{{9,10}}, um2{{11,12}}; + s1.merge(std::move(s2)); + us1.merge(std::move(us2)); + m1.merge(std::move(m2)); + um1.merge(std::move(um2)); ; return 0; @@ -15252,22 +15148,21 @@ then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 printf "%s\n" "yes" >&6; } + have_cxx17_splicing=yes -printf "%s\n" "#define HAVE_CXX11_DELETED_FUNCTIONS 1" >>confdefs.h +printf "%s\n" "#define HAVE_CXX17_SPLICING 1" >>confdefs.h - have_cxx11_deleted_functions=yes else case e in #( e) - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } ;; esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext - # Reset the flags - CXXFLAGS="$old_CXXFLAGS" + CXXFLAGS="$old_CXXFLAGS" ac_ext=cpp ac_cpp='$CXXCPP $CPPFLAGS' ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' @@ -15275,1653 +15170,1478 @@ ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ex ac_compiler_gnu=$ac_cv_cxx_compiler_gnu - if test x$have_cxx11_deleted_functions == xyes; then - HAVE_CXX11_DELETED_FUNCTIONS_TRUE= - HAVE_CXX11_DELETED_FUNCTIONS_FALSE='#' -else - HAVE_CXX11_DELETED_FUNCTIONS_TRUE='#' - HAVE_CXX11_DELETED_FUNCTIONS_FALSE= + if test "x$have_cxx17_splicing" != "xyes" +then : + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: libMesh prefers C++17 support for set/map merge" >&5 +printf "%s\n" "$as_me: WARNING: libMesh prefers C++17 support for set/map merge" >&2;} fi +fi + if test "$HAVE_CXX17" = "1" -a "x$have_cxx_all" = xyes +then : - if test "x$have_cxx11_deleted_functions" != "xyes" + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: Found C++17 standard support" >&5 +printf "%s\n" "$as_me: Found C++17 standard support" >&6;} + if test $acsm_found_cxx -eq 0 then : - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: libMesh requires C++11 deleted function support" >&5 -printf "%s\n" "$as_me: WARNING: libMesh requires C++11 deleted function support" >&2;} - have_cxx_all=no + acsm_cxx_version=17 +fi + acsm_found_cxx=1 +else case e in #( + e) CXX="$acsm_backup_CXX" + CXXCPP="$acsm_backup_CXXCPP" + if test "$HAVE_CXX17" = "0" +then : + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: Did not find C++17 standard support" >&5 +printf "%s\n" "$as_me: Did not find C++17 standard support" >&6;} +fi ;; +esac fi +fi - have_cxx11_defaulted_functions=no + if test 2014 -le "$acsm_CXX_STD_MAX" +then : - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for C++11 defaulted functions support" >&5 -printf %s "checking for C++11 defaulted functions support... " >&6; } - ac_ext=cpp + if test 2014 -gt "$acsm_CXX_STD_MIN" +then : + ax_cxx_compile_alternatives="14 1y" ax_cxx_compile_cxx14_required=false + ac_ext=cpp ac_cpp='$CXXCPP $CPPFLAGS' ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_cxx_compiler_gnu + ac_success=no - - old_CXXFLAGS="$CXXFLAGS" - CXXFLAGS="$CXXFLAGS $libmesh_CXXFLAGS" - - cat confdefs.h - <<_ACEOF >conftest.$ac_ext + cachevar=ax_cv_cxx_compile_cxx14 + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether $CXX supports C++14 features by default" >&5 +printf %s "checking whether $CXX supports C++14 features by default... " >&6; } +if eval test \${$cachevar+y} +then : + printf %s "(cached) " >&6 +else case e in #( + e) cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ - class Foo - { - Foo(const Foo &) = default; - ~Foo(); - }; - Foo::~Foo() = default; -int -main (void) -{ +// If the compiler admits that it is not ready for C++11, why torture it? +// Hopefully, this will speed up the test. +#ifndef __cplusplus - ; - return 0; -} -_ACEOF -if ac_fn_cxx_try_compile "$LINENO" -then : +#error "This is not a C++ compiler" - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -printf "%s\n" "yes" >&6; } +#elif __cplusplus < 201103L -printf "%s\n" "#define HAVE_CXX11_DEFAULTED_FUNCTIONS 1" >>confdefs.h +#error "This is not a C++11 compiler" - have_cxx11_defaulted_functions=yes +#else -else case e in #( - e) - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 -printf "%s\n" "no" >&6; } - ;; -esac -fi -rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext +namespace cxx11 +{ - # Reset the flags - CXXFLAGS="$old_CXXFLAGS" - ac_ext=cpp -ac_cpp='$CXXCPP $CPPFLAGS' -ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_cxx_compiler_gnu + namespace test_static_assert + { + template + struct check + { + static_assert(sizeof(int) <= sizeof(T), "not big enough"); + }; - if test x$have_cxx11_defaulted_functions == xyes; then - HAVE_CXX11_DEFAULTED_FUNCTIONS_TRUE= - HAVE_CXX11_DEFAULTED_FUNCTIONS_FALSE='#' -else - HAVE_CXX11_DEFAULTED_FUNCTIONS_TRUE='#' - HAVE_CXX11_DEFAULTED_FUNCTIONS_FALSE= -fi + } + namespace test_final_override + { - if test "x$have_cxx11_defaulted_functions" != "xyes" -then : - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: libMesh requires C++11 defaulted function support" >&5 -printf "%s\n" "$as_me: WARNING: libMesh requires C++11 defaulted function support" >&2;} - have_cxx_all=no -fi + struct Base + { + virtual ~Base() {} + virtual void f() {} + }; + struct Derived : public Base + { + virtual ~Derived() override {} + virtual void f() override {} + }; - have_cxx11_nullptr=no + } - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for C++11 nullptr support" >&5 -printf %s "checking for C++11 nullptr support... " >&6; } - ac_ext=cpp -ac_cpp='$CXXCPP $CPPFLAGS' -ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_cxx_compiler_gnu + namespace test_double_right_angle_brackets + { + template < typename T > + struct check {}; - old_CXXFLAGS="$CXXFLAGS" - CXXFLAGS="$CXXFLAGS $libmesh_CXXFLAGS" + typedef check single_type; + typedef check> double_type; + typedef check>> triple_type; + typedef check>>> quadruple_type; - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ + } - #include - void f(int * pi) {} - void f(double * pd) {} - void f(std::nullptr_t nullp) {} + namespace test_decltype + { -int -main (void) -{ + int + f() + { + int a = 1; + decltype(a) b = 2; + return a + b; + } - // would be ambiguous without void f(nullptr_t) - f(nullptr); + } - ; - return 0; -} -_ACEOF -if ac_fn_cxx_try_compile "$LINENO" -then : + namespace test_type_deduction + { - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -printf "%s\n" "yes" >&6; } + template < typename T1, typename T2 > + struct is_same + { + static const bool value = false; + }; -printf "%s\n" "#define HAVE_CXX11_NULLPTR 1" >>confdefs.h + template < typename T > + struct is_same + { + static const bool value = true; + }; - have_cxx11_nullptr=yes + template < typename T1, typename T2 > + auto + add(T1 a1, T2 a2) -> decltype(a1 + a2) + { + return a1 + a2; + } -else case e in #( - e) - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 -printf "%s\n" "no" >&6; } - ;; -esac -fi -rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext + int + test(const int c, volatile int v) + { + static_assert(is_same::value == true, ""); + static_assert(is_same::value == false, ""); + static_assert(is_same::value == false, ""); + auto ac = c; + auto av = v; + auto sumi = ac + av + 'x'; + auto sumf = ac + av + 1.0; + static_assert(is_same::value == true, ""); + static_assert(is_same::value == true, ""); + static_assert(is_same::value == true, ""); + static_assert(is_same::value == false, ""); + static_assert(is_same::value == true, ""); + return (sumf > 0.0) ? sumi : add(c, v); + } - # Reset the flags - CXXFLAGS="$old_CXXFLAGS" - ac_ext=cpp -ac_cpp='$CXXCPP $CPPFLAGS' -ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_cxx_compiler_gnu + } + namespace test_noexcept + { - if test x$have_cxx11_nullptr == xyes; then - HAVE_CXX11_NULLPTR_TRUE= - HAVE_CXX11_NULLPTR_FALSE='#' -else - HAVE_CXX11_NULLPTR_TRUE='#' - HAVE_CXX11_NULLPTR_FALSE= -fi + int f() { return 0; } + int g() noexcept { return 0; } + static_assert(noexcept(f()) == false, ""); + static_assert(noexcept(g()) == true, ""); - if test "x$have_cxx11_nullptr" != "xyes" -then : - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: libMesh requires the C++11 nullptr keyword" >&5 -printf "%s\n" "$as_me: WARNING: libMesh requires the C++11 nullptr keyword" >&2;} - have_cxx_all=no -fi + } + namespace test_constexpr + { - have_cxx11_final=no + template < typename CharT > + unsigned long constexpr + strlen_c_r(const CharT *const s, const unsigned long acc) noexcept + { + return *s ? strlen_c_r(s + 1, acc + 1) : acc; + } - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for C++11 'final' keyword support" >&5 -printf %s "checking for C++11 'final' keyword support... " >&6; } - ac_ext=cpp -ac_cpp='$CXXCPP $CPPFLAGS' -ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_cxx_compiler_gnu + template < typename CharT > + unsigned long constexpr + strlen_c(const CharT *const s) noexcept + { + return strlen_c_r(s, 0UL); + } + static_assert(strlen_c("") == 0UL, ""); + static_assert(strlen_c("1") == 1UL, ""); + static_assert(strlen_c("example") == 7UL, ""); + static_assert(strlen_c("another\0example") == 7UL, ""); - old_CXXFLAGS="$CXXFLAGS" - CXXFLAGS="$CXXFLAGS $libmesh_CXXFLAGS" + } - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ + namespace test_rvalue_references + { - // Test that a function can be declared final. - struct A + template < int N > + struct answer { - virtual void foo() final; + static constexpr int value = N; }; - // Test that a struct can be declared final. - struct B final : A - { - }; + answer<1> f(int&) { return answer<1>(); } + answer<2> f(const int&) { return answer<2>(); } + answer<3> f(int&&) { return answer<3>(); } -int -main (void) -{ + void + test() + { + int i = 0; + const int c = 0; + static_assert(decltype(f(i))::value == 1, ""); + static_assert(decltype(f(c))::value == 2, ""); + static_assert(decltype(f(0))::value == 3, ""); + } + } - ; - return 0; -} -_ACEOF -if ac_fn_cxx_try_compile "$LINENO" -then : + namespace test_uniform_initialization + { - have_cxx11_final=yes + struct test + { + static const int zero {}; + static const int one {1}; + }; -else case e in #( - e) - have_cxx11_final=no - ;; -esac -fi -rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext + static_assert(test::zero == 0, ""); + static_assert(test::one == 1, ""); - # Confirm that you cannot declare a non-virtual function 'final'. - if test "x$have_cxx11_final" != "xno" -then : + } - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ + namespace test_lambdas + { - struct A - { - // Error: non-virtual function cannot be final - void bar() final; - }; + void + test1() + { + auto lambda1 = [](){}; + auto lambda2 = lambda1; + lambda1(); + lambda2(); + } -int -main (void) -{ + int + test2() + { + auto a = [](int i, int j){ return i + j; }(1, 2); + auto b = []() -> int { return '0'; }(); + auto c = [=](){ return a + b; }(); + auto d = [&](){ return c; }(); + auto e = [a, &b](int x) mutable { + const auto identity = [](int y){ return y; }; + for (auto i = 0; i < a; ++i) + a += b--; + return x + identity(a + b); + }(0); + return a + b + c + d + e; + } + int + test3() + { + const auto nullary = [](){ return 0; }; + const auto unary = [](int x){ return x; }; + using nullary_t = decltype(nullary); + using unary_t = decltype(unary); + const auto higher1st = [](nullary_t f){ return f(); }; + const auto higher2nd = [unary](nullary_t f1){ + return [unary, f1](unary_t f2){ return f2(unary(f1())); }; + }; + return higher1st(nullary) + higher2nd(nullary)(unary); + } - ; - return 0; -} -_ACEOF -if ac_fn_cxx_try_compile "$LINENO" -then : + } - # If this code compiles, 'final' is not working correctly. - have_cxx11_final=no + namespace test_variadic_templates + { -else case e in #( - e) - have_cxx11_final=yes - ;; -esac -fi -rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext + template + struct sum; -fi + template + struct sum + { + static constexpr auto value = N0 + sum::value; + }; - if test "x$have_cxx11_final" != "xno" -then : + template <> + struct sum<> + { + static constexpr auto value = 0; + }; - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ + static_assert(sum<>::value == 0, ""); + static_assert(sum<1>::value == 1, ""); + static_assert(sum<23>::value == 23, ""); + static_assert(sum<1, 2>::value == 3, ""); + static_assert(sum<5, 5, 11>::value == 21, ""); + static_assert(sum<2, 3, 5, 7, 11, 13>::value == 41, ""); - struct A - { - virtual void foo() final; - }; - struct B : A - { - // Error: foo cannot be overridden as it's final in A - void foo(); - }; + } -int -main (void) -{ + // http://stackoverflow.com/questions/13728184/template-aliases-and-sfinae + // Clang 3.1 fails with headers of libstd++ 4.8.3 when using std::function + // because of this. + namespace test_template_alias_sfinae + { + struct foo {}; - ; - return 0; -} -_ACEOF -if ac_fn_cxx_try_compile "$LINENO" -then : + template + using member = typename T::member_type; - # If this code compiles, 'final' is not working correctly. - have_cxx11_final=no + template + void func(...) {} -else case e in #( - e) - have_cxx11_final=yes - ;; -esac -fi -rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext + template + void func(member*) {} -fi + void test(); - if test "x$have_cxx11_final" != "xno" -then : + void test() { func(0); } - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ + } - struct A - { - }; +} // namespace cxx11 - // struct B is final - struct B final : A - { - }; +#endif // __cplusplus >= 201103L - // Error: B is final - struct C : B - { - }; -int -main (void) -{ - ; - return 0; -} -_ACEOF -if ac_fn_cxx_try_compile "$LINENO" -then : +// If the compiler admits that it is not ready for C++14, why torture it? +// Hopefully, this will speed up the test. - # If this code compiles, 'final' is not working correctly. - have_cxx11_final=no +#ifndef __cplusplus -else case e in #( - e) - have_cxx11_final=yes - ;; -esac -fi -rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext +#error "This is not a C++ compiler" -fi +#elif __cplusplus < 201402L - # If the flag is still 'yes' after all the tests, set the #define. - if test "x$have_cxx11_final" = "xyes" -then : +#error "This is not a C++14 compiler" - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -printf "%s\n" "yes" >&6; } +#else -printf "%s\n" "#define HAVE_CXX11_FINAL 1" >>confdefs.h +namespace cxx14 +{ + namespace test_polymorphic_lambdas + { -else case e in #( - e) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 -printf "%s\n" "no" >&6; } ;; -esac -fi + int + test() + { + const auto lambda = [](auto&&... args){ + const auto istiny = [](auto x){ + return (sizeof(x) == 1UL) ? 1 : 0; + }; + const int aretiny[] = { istiny(args)... }; + return aretiny[0]; + }; + return lambda(1, 1L, 1.0f, '1'); + } - # Reset the flags - CXXFLAGS="$old_CXXFLAGS" - ac_ext=cpp -ac_cpp='$CXXCPP $CPPFLAGS' -ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_cxx_compiler_gnu + } + namespace test_binary_literals + { - if test x$have_cxx11_final == xyes; then - HAVE_CXX11_FINAL_TRUE= - HAVE_CXX11_FINAL_FALSE='#' -else - HAVE_CXX11_FINAL_TRUE='#' - HAVE_CXX11_FINAL_FALSE= -fi + constexpr auto ivii = 0b0000000000101010; + static_assert(ivii == 42, "wrong value"); + } - if test "x$have_cxx11_final" != "xyes" -then : - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: libMesh requires the C++11 final keyword" >&5 -printf "%s\n" "$as_me: WARNING: libMesh requires the C++11 final keyword" >&2;} - have_cxx_all=no -fi + namespace test_generalized_constexpr + { + template < typename CharT > + constexpr unsigned long + strlen_c(const CharT *const s) noexcept + { + auto length = 0UL; + for (auto p = s; *p; ++p) + ++length; + return length; + } - have_cxx11_decltype=no + static_assert(strlen_c("") == 0UL, ""); + static_assert(strlen_c("x") == 1UL, ""); + static_assert(strlen_c("test") == 4UL, ""); + static_assert(strlen_c("another\0test") == 7UL, ""); - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for C++11 decltype support" >&5 -printf %s "checking for C++11 decltype support... " >&6; } - ac_ext=cpp -ac_cpp='$CXXCPP $CPPFLAGS' -ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_cxx_compiler_gnu + } + namespace test_lambda_init_capture + { - old_CXXFLAGS="$CXXFLAGS" - CXXFLAGS="$CXXFLAGS $libmesh_CXXFLAGS" + int + test() + { + auto x = 0; + const auto lambda1 = [a = x](int b){ return a + b; }; + const auto lambda2 = [a = lambda1(x)](){ return a; }; + return lambda2(); + } - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ + } - #include + namespace test_digit_separators + { -int -main (void) -{ + constexpr auto ten_million = 100'000'000; + static_assert(ten_million == 100000000, ""); - int a; - decltype(a) b; - std::vector vec(10); - for (auto i = decltype(vec.size())(0); i < vec.size(); ++i) - vec[i] += i; + } - ; - return 0; -} -_ACEOF -if ac_fn_cxx_try_compile "$LINENO" -then : + namespace test_return_type_deduction + { - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -printf "%s\n" "yes" >&6; } + auto f(int& x) { return x; } + decltype(auto) g(int& x) { return x; } -printf "%s\n" "#define HAVE_CXX11_DECLTYPE 1" >>confdefs.h + template < typename T1, typename T2 > + struct is_same + { + static constexpr auto value = false; + }; - have_cxx11_decltype=yes + template < typename T > + struct is_same + { + static constexpr auto value = true; + }; -else case e in #( - e) - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 -printf "%s\n" "no" >&6; } - ;; -esac -fi -rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext + int + test() + { + auto x = 0; + static_assert(is_same::value, ""); + static_assert(is_same::value, ""); + return x; + } - # Reset the flags - CXXFLAGS="$old_CXXFLAGS" - ac_ext=cpp -ac_cpp='$CXXCPP $CPPFLAGS' -ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_cxx_compiler_gnu + } +} // namespace cxx14 - if test x$have_cxx11_decltype == xyes; then - HAVE_CXX11_DECLTYPE_TRUE= - HAVE_CXX11_DECLTYPE_FALSE='#' -else - HAVE_CXX11_DECLTYPE_TRUE='#' - HAVE_CXX11_DECLTYPE_FALSE= -fi +#endif // __cplusplus >= 201402L - if test "x$have_cxx11_decltype" != "xyes" + +_ACEOF +if ac_fn_cxx_try_compile "$LINENO" then : - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: libMesh requires the C++11 decltype keyword" >&5 -printf "%s\n" "$as_me: WARNING: libMesh requires the C++11 decltype keyword" >&2;} - have_cxx_all=no + eval $cachevar=yes +else case e in #( + e) eval $cachevar=no ;; +esac +fi +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext ;; +esac +fi +eval ac_res=\$$cachevar + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 +printf "%s\n" "$ac_res" >&6; } + if eval test x\$$cachevar = xyes +then : + ac_success=yes fi - have_cxx11_begin_end=no - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for C++11 std::begin/end support for arrays" >&5 -printf %s "checking for C++11 std::begin/end support for arrays... " >&6; } - ac_ext=cpp -ac_cpp='$CXXCPP $CPPFLAGS' -ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_cxx_compiler_gnu + if test x$ac_success = xno; then + for alternative in ${ax_cxx_compile_alternatives}; do + for switch in -std=c++${alternative} +std=c++${alternative} "-h std=c++${alternative}"; do + cachevar=`printf "%s\n" "ax_cv_cxx_compile_cxx14_$switch" | sed "$as_sed_sh"` + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether $CXX supports C++14 features with $switch" >&5 +printf %s "checking whether $CXX supports C++14 features with $switch... " >&6; } +if eval test \${$cachevar+y} +then : + printf %s "(cached) " >&6 +else case e in #( + e) ac_save_CXX="$CXX" + CXX="$CXX $switch" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ - old_CXXFLAGS="$CXXFLAGS" - CXXFLAGS="$CXXFLAGS $libmesh_CXXFLAGS" +// If the compiler admits that it is not ready for C++11, why torture it? +// Hopefully, this will speed up the test. - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ +#ifndef __cplusplus - #include - #include +#error "This is not a C++ compiler" -int -main (void) -{ +#elif __cplusplus < 201103L - int array[5] = {3, 1, 5, 2, 4}; - std::sort(std::begin(array), std::end(array)); +#error "This is not a C++11 compiler" - ; - return 0; -} -_ACEOF -if ac_fn_cxx_try_compile "$LINENO" -then : +#else - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -printf "%s\n" "yes" >&6; } - have_cxx11_begin_end=yes +namespace cxx11 +{ -else case e in #( - e) - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 -printf "%s\n" "no" >&6; } - ;; -esac -fi -rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext + namespace test_static_assert + { - CXXFLAGS="$old_CXXFLAGS" - ac_ext=cpp -ac_cpp='$CXXCPP $CPPFLAGS' -ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_cxx_compiler_gnu + template + struct check + { + static_assert(sizeof(int) <= sizeof(T), "not big enough"); + }; + } - if test "x$have_cxx11_begin_end" != "xyes" -then : - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: libMesh requires C++11 std::begin/end support" >&5 -printf "%s\n" "$as_me: WARNING: libMesh requires C++11 std::begin/end support" >&2;} - have_cxx_all=no -fi + namespace test_final_override + { + struct Base + { + virtual ~Base() {} + virtual void f() {} + }; - have_cxx11_container_erase=no + struct Derived : public Base + { + virtual ~Derived() override {} + virtual void f() override {} + }; - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for C++11 std container erase() functions returning iterators" >&5 -printf %s "checking for C++11 std container erase() functions returning iterators... " >&6; } - ac_ext=cpp -ac_cpp='$CXXCPP $CPPFLAGS' -ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_cxx_compiler_gnu + } + namespace test_double_right_angle_brackets + { - old_CXXFLAGS="$CXXFLAGS" - CXXFLAGS="$CXXFLAGS $libmesh_CXXFLAGS" + template < typename T > + struct check {}; - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ + typedef check single_type; + typedef check> double_type; + typedef check>> triple_type; + typedef check>>> quadruple_type; - #include - #include + } -int -main (void) -{ + namespace test_decltype + { + int + f() { - std::map m; - m.insert(std::make_pair(1,2)); - std::map::iterator it = m.erase(m.begin()); + int a = 1; + decltype(a) b = 2; + return a + b; } + + } + + namespace test_type_deduction + { + + template < typename T1, typename T2 > + struct is_same { - std::set s; - s.insert(1); - std::set::iterator it = s.erase(s.begin()); - } + static const bool value = false; + }; + + template < typename T > + struct is_same { - std::multimap m; - m.insert(std::make_pair(1,2)); - std::multimap::iterator it = m.erase(m.begin()); + static const bool value = true; + }; + + template < typename T1, typename T2 > + auto + add(T1 a1, T2 a2) -> decltype(a1 + a2) + { + return a1 + a2; } + + int + test(const int c, volatile int v) { - std::multiset s; - s.insert(1); - std::multiset::iterator it = s.erase(s.begin()); + static_assert(is_same::value == true, ""); + static_assert(is_same::value == false, ""); + static_assert(is_same::value == false, ""); + auto ac = c; + auto av = v; + auto sumi = ac + av + 'x'; + auto sumf = ac + av + 1.0; + static_assert(is_same::value == true, ""); + static_assert(is_same::value == true, ""); + static_assert(is_same::value == true, ""); + static_assert(is_same::value == false, ""); + static_assert(is_same::value == true, ""); + return (sumf > 0.0) ? sumi : add(c, v); } - ; - return 0; -} -_ACEOF -if ac_fn_cxx_try_compile "$LINENO" -then : + } - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -printf "%s\n" "yes" >&6; } - have_cxx11_container_erase=yes + namespace test_noexcept + { -else case e in #( - e) - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 -printf "%s\n" "no" >&6; } - ;; -esac -fi -rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext - - CXXFLAGS="$old_CXXFLAGS" - ac_ext=cpp -ac_cpp='$CXXCPP $CPPFLAGS' -ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_cxx_compiler_gnu + int f() { return 0; } + int g() noexcept { return 0; } + static_assert(noexcept(f()) == false, ""); + static_assert(noexcept(g()) == true, ""); - if test "x$have_cxx11_container_erase" != "xyes" -then : - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: libMesh requires C++11 support for std container erase() functions returning iterators" >&5 -printf "%s\n" "$as_me: WARNING: libMesh requires C++11 support for std container erase() functions returning iterators" >&2;} - have_cxx_all=no -fi + } + namespace test_constexpr + { - have_cxx11_container_emplace=no + template < typename CharT > + unsigned long constexpr + strlen_c_r(const CharT *const s, const unsigned long acc) noexcept + { + return *s ? strlen_c_r(s + 1, acc + 1) : acc; + } - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for C++11 std container emplace() functions" >&5 -printf %s "checking for C++11 std container emplace() functions... " >&6; } - ac_ext=cpp -ac_cpp='$CXXCPP $CPPFLAGS' -ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_cxx_compiler_gnu + template < typename CharT > + unsigned long constexpr + strlen_c(const CharT *const s) noexcept + { + return strlen_c_r(s, 0UL); + } + static_assert(strlen_c("") == 0UL, ""); + static_assert(strlen_c("1") == 1UL, ""); + static_assert(strlen_c("example") == 7UL, ""); + static_assert(strlen_c("another\0example") == 7UL, ""); - old_CXXFLAGS="$CXXFLAGS" - CXXFLAGS="$CXXFLAGS $libmesh_CXXFLAGS" + } - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ + namespace test_rvalue_references + { - #include - #include - #include + template < int N > + struct answer + { + static constexpr int value = N; + }; -int -main (void) -{ + answer<1> f(int&) { return answer<1>(); } + answer<2> f(const int&) { return answer<2>(); } + answer<3> f(int&&) { return answer<3>(); } + void + test() { - std::map m; - m.emplace(1,2); - m.emplace_hint(m.begin(), 0, 3); + int i = 0; + const int c = 0; + static_assert(decltype(f(i))::value == 1, ""); + static_assert(decltype(f(c))::value == 2, ""); + static_assert(decltype(f(0))::value == 3, ""); } + + } + + namespace test_uniform_initialization + { + + struct test { - std::set s; - s.emplace(1); - s.emplace_hint(s.begin(), 0); - } + static const int zero {}; + static const int one {1}; + }; + + static_assert(test::zero == 0, ""); + static_assert(test::one == 1, ""); + + } + + namespace test_lambdas + { + + void + test1() { - std::multimap m; - m.emplace(1,2); - m.emplace_hint(m.begin(), 0, 3); + auto lambda1 = [](){}; + auto lambda2 = lambda1; + lambda1(); + lambda2(); } + + int + test2() { - std::multiset s; - s.emplace(1); - s.emplace_hint(s.begin(), 0); + auto a = [](int i, int j){ return i + j; }(1, 2); + auto b = []() -> int { return '0'; }(); + auto c = [=](){ return a + b; }(); + auto d = [&](){ return c; }(); + auto e = [a, &b](int x) mutable { + const auto identity = [](int y){ return y; }; + for (auto i = 0; i < a; ++i) + a += b--; + return x + identity(a + b); + }(0); + return a + b + c + d + e; } + + int + test3() { - std::vector v; - v.emplace(v.begin(), 0); - v.emplace_back(1); + const auto nullary = [](){ return 0; }; + const auto unary = [](int x){ return x; }; + using nullary_t = decltype(nullary); + using unary_t = decltype(unary); + const auto higher1st = [](nullary_t f){ return f(); }; + const auto higher2nd = [unary](nullary_t f1){ + return [unary, f1](unary_t f2){ return f2(unary(f1())); }; + }; + return higher1st(nullary) + higher2nd(nullary)(unary); } - ; - return 0; -} -_ACEOF -if ac_fn_cxx_try_compile "$LINENO" -then : + } - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -printf "%s\n" "yes" >&6; } - have_cxx11_container_emplace=yes + namespace test_variadic_templates + { -else case e in #( - e) - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 -printf "%s\n" "no" >&6; } - ;; -esac -fi -rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext + template + struct sum; - CXXFLAGS="$old_CXXFLAGS" - ac_ext=cpp -ac_cpp='$CXXCPP $CPPFLAGS' -ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_cxx_compiler_gnu + template + struct sum + { + static constexpr auto value = N0 + sum::value; + }; + template <> + struct sum<> + { + static constexpr auto value = 0; + }; - if test "x$have_cxx11_container_emplace" != "xyes" -then : - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: libMesh requires C++11 support for std container emplace() functions" >&5 -printf "%s\n" "$as_me: WARNING: libMesh requires C++11 support for std container emplace() functions" >&2;} - have_cxx_all=no -fi + static_assert(sum<>::value == 0, ""); + static_assert(sum<1>::value == 1, ""); + static_assert(sum<23>::value == 23, ""); + static_assert(sum<1, 2>::value == 3, ""); + static_assert(sum<5, 5, 11>::value == 21, ""); + static_assert(sum<2, 3, 5, 7, 11, 13>::value == 41, ""); + } - have_cxx11_iota=no + // http://stackoverflow.com/questions/13728184/template-aliases-and-sfinae + // Clang 3.1 fails with headers of libstd++ 4.8.3 when using std::function + // because of this. + namespace test_template_alias_sfinae + { - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for C++11 std::iota algorithm" >&5 -printf %s "checking for C++11 std::iota algorithm... " >&6; } - ac_ext=cpp -ac_cpp='$CXXCPP $CPPFLAGS' -ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_cxx_compiler_gnu + struct foo {}; + template + using member = typename T::member_type; - old_CXXFLAGS="$CXXFLAGS" - CXXFLAGS="$CXXFLAGS $libmesh_CXXFLAGS" + template + void func(...) {} - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ + template + void func(member*) {} - #include - #include + void test(); -int -main (void) -{ + void test() { func(0); } - std::vector v(10); - std::iota(v.begin(), v.end(), 0); + } - ; - return 0; -} -_ACEOF -if ac_fn_cxx_try_compile "$LINENO" -then : +} // namespace cxx11 - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -printf "%s\n" "yes" >&6; } - have_cxx11_iota=yes +#endif // __cplusplus >= 201103L -else case e in #( - e) - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 -printf "%s\n" "no" >&6; } - ;; -esac -fi -rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext - CXXFLAGS="$old_CXXFLAGS" - ac_ext=cpp -ac_cpp='$CXXCPP $CPPFLAGS' -ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_cxx_compiler_gnu - if test "x$have_cxx11_iota" != "xyes" -then : - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: libMesh requires C++11 support for std::iota" >&5 -printf "%s\n" "$as_me: WARNING: libMesh requires C++11 support for std::iota" >&2;} - have_cxx_all=no -fi +// If the compiler admits that it is not ready for C++14, why torture it? +// Hopefully, this will speed up the test. +#ifndef __cplusplus - have_cxx11_vector_data=no +#error "This is not a C++ compiler" - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for C++11 std::vector::data() API" >&5 -printf %s "checking for C++11 std::vector::data() API... " >&6; } - ac_ext=cpp -ac_cpp='$CXXCPP $CPPFLAGS' -ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_cxx_compiler_gnu +#elif __cplusplus < 201402L +#error "This is not a C++14 compiler" - old_CXXFLAGS="$CXXFLAGS" - CXXFLAGS="$CXXFLAGS $libmesh_CXXFLAGS" +#else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ +namespace cxx14 +{ - #include + namespace test_polymorphic_lambdas + { -int -main (void) -{ + int + test() + { + const auto lambda = [](auto&&... args){ + const auto istiny = [](auto x){ + return (sizeof(x) == 1UL) ? 1 : 0; + }; + const int aretiny[] = { istiny(args)... }; + return aretiny[0]; + }; + return lambda(1, 1L, 1.0f, '1'); + } - std::vector v(10); - int * begin = v.data(); + } - ; - return 0; -} -_ACEOF -if ac_fn_cxx_try_compile "$LINENO" -then : + namespace test_binary_literals + { - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -printf "%s\n" "yes" >&6; } - have_cxx11_vector_data=yes + constexpr auto ivii = 0b0000000000101010; + static_assert(ivii == 42, "wrong value"); -else case e in #( - e) - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 -printf "%s\n" "no" >&6; } - ;; -esac -fi -rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext + } - CXXFLAGS="$old_CXXFLAGS" - ac_ext=cpp -ac_cpp='$CXXCPP $CPPFLAGS' -ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_cxx_compiler_gnu + namespace test_generalized_constexpr + { + template < typename CharT > + constexpr unsigned long + strlen_c(const CharT *const s) noexcept + { + auto length = 0UL; + for (auto p = s; *p; ++p) + ++length; + return length; + } - if test "x$have_cxx11_vector_data" != "xyes" -then : - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: libMesh requires C++11 support for std::vector::data()" >&5 -printf "%s\n" "$as_me: WARNING: libMesh requires C++11 support for std::vector::data()" >&2;} - have_cxx_all=no -fi + static_assert(strlen_c("") == 0UL, ""); + static_assert(strlen_c("x") == 1UL, ""); + static_assert(strlen_c("test") == 4UL, ""); + static_assert(strlen_c("another\0test") == 7UL, ""); + } - have_cxx11_shared_ptr=no + namespace test_lambda_init_capture + { - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for C++11 std::shared_ptr support" >&5 -printf %s "checking for C++11 std::shared_ptr support... " >&6; } - ac_ext=cpp -ac_cpp='$CXXCPP $CPPFLAGS' -ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_cxx_compiler_gnu + int + test() + { + auto x = 0; + const auto lambda1 = [a = x](int b){ return a + b; }; + const auto lambda2 = [a = lambda1(x)](){ return a; }; + return lambda2(); + } + } - # Save any original value that CXXFLAGS had - old_CXXFLAGS="$CXXFLAGS" - CXXFLAGS="$CXXFLAGS $libmesh_CXXFLAGS" + namespace test_digit_separators + { - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ + constexpr auto ten_million = 100'000'000; + static_assert(ten_million == 100000000, ""); - #include + } + + namespace test_return_type_deduction + { + + auto f(int& x) { return x; } + decltype(auto) g(int& x) { return x; } + + template < typename T1, typename T2 > + struct is_same + { + static constexpr auto value = false; + }; + + template < typename T > + struct is_same + { + static constexpr auto value = true; + }; + + int + test() + { + auto x = 0; + static_assert(is_same::value, ""); + static_assert(is_same::value, ""); + return x; + } + + } + +} // namespace cxx14 + +#endif // __cplusplus >= 201402L -int -main (void) -{ - std::shared_ptr p1; - std::shared_ptr p2 (new int); - std::shared_ptr p3 (p2); - p3.reset(new int); - p3 = std::make_shared(5); - ; - return 0; -} _ACEOF if ac_fn_cxx_try_compile "$LINENO" then : - - have_cxx11_shared_ptr=yes - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -printf "%s\n" "yes" >&6; } - + eval $cachevar=yes else case e in #( - e) - have_cxx11_shared_ptr=no - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 -printf "%s\n" "no" >&6; } - ;; + e) eval $cachevar=no ;; esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext - - if test "x$have_cxx11_shared_ptr" = "xyes" -then : - -printf "%s\n" "#define HAVE_CXX11_SHARED_PTR 1" >>confdefs.h - + CXX="$ac_save_CXX" ;; +esac fi - - # Reset the flags - CXXFLAGS="$old_CXXFLAGS" - ac_ext=cpp +eval ac_res=\$$cachevar + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 +printf "%s\n" "$ac_res" >&6; } + if eval test x\$$cachevar = xyes; then + CXX="$CXX $switch" + if test -n "$CXXCPP" ; then + CXXCPP="$CXXCPP $switch" + fi + ac_success=yes + break + fi + done + if test x$ac_success = xyes; then + break + fi + done + fi + ac_ext=cpp ac_cpp='$CXXCPP $CPPFLAGS' ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_cxx_compiler_gnu + if test x$ax_cxx_compile_cxx14_required = xtrue; then + if test x$ac_success = xno; then + as_fn_error $? "*** A compiler with support for C++14 language features is required." "$LINENO" 5 + fi + fi + if test x$ac_success = xno; then + HAVE_CXX14=0 + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: No compiler with C++14 support was found" >&5 +printf "%s\n" "$as_me: No compiler with C++14 support was found" >&6;} + else + HAVE_CXX14=1 - if test x$have_cxx11_shared_ptr == xyes; then - HAVE_CXX11_SHARED_PTR_TRUE= - HAVE_CXX11_SHARED_PTR_FALSE='#' -else - HAVE_CXX11_SHARED_PTR_TRUE='#' - HAVE_CXX11_SHARED_PTR_FALSE= -fi - - - if test "x$have_cxx11_shared_ptr" != "xyes" -then : - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: libMesh requires C++11 support for std::shared_ptr" >&5 -printf "%s\n" "$as_me: WARNING: libMesh requires C++11 support for std::shared_ptr" >&2;} - have_cxx_all=no -fi +printf "%s\n" "#define HAVE_CXX14 1" >>confdefs.h + fi - have_cxx11_rvalue_references=no - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for C++11 rvalue references support" >&5 -printf %s "checking for C++11 rvalue references support... " >&6; } - ac_ext=cpp +else case e in #( + e) ax_cxx_compile_alternatives="14 1y" ax_cxx_compile_cxx14_required=true + ac_ext=cpp ac_cpp='$CXXCPP $CPPFLAGS' ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_cxx_compiler_gnu + ac_success=no - - old_CXXFLAGS="$CXXFLAGS" - CXXFLAGS="$CXXFLAGS $libmesh_CXXFLAGS" - - cat confdefs.h - <<_ACEOF >conftest.$ac_ext + cachevar=ax_cv_cxx_compile_cxx14 + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether $CXX supports C++14 features by default" >&5 +printf %s "checking whether $CXX supports C++14 features by default... " >&6; } +if eval test \${$cachevar+y} +then : + printf %s "(cached) " >&6 +else case e in #( + e) cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ - int foo(int && x) { return x; } - int bar() { return 4; } -int -main (void) -{ +// If the compiler admits that it is not ready for C++11, why torture it? +// Hopefully, this will speed up the test. - // Call function that takes an rvalue reference. - foo (bar()); +#ifndef __cplusplus - ; - return 0; -} -_ACEOF -if ac_fn_cxx_try_compile "$LINENO" -then : +#error "This is not a C++ compiler" - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -printf "%s\n" "yes" >&6; } +#elif __cplusplus < 201103L -printf "%s\n" "#define HAVE_CXX11_RVALUE_REFERENCES 1" >>confdefs.h +#error "This is not a C++11 compiler" - have_cxx11_rvalue_references=yes +#else -else case e in #( - e) - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 -printf "%s\n" "no" >&6; } - ;; -esac -fi -rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext +namespace cxx11 +{ - # Reset the flags - CXXFLAGS="$old_CXXFLAGS" - ac_ext=cpp -ac_cpp='$CXXCPP $CPPFLAGS' -ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_cxx_compiler_gnu + namespace test_static_assert + { + template + struct check + { + static_assert(sizeof(int) <= sizeof(T), "not big enough"); + }; - if test x$have_cxx11_rvalue_references == xyes; then - HAVE_CXX11_RVALUE_REFERENCES_TRUE= - HAVE_CXX11_RVALUE_REFERENCES_FALSE='#' -else - HAVE_CXX11_RVALUE_REFERENCES_TRUE='#' - HAVE_CXX11_RVALUE_REFERENCES_FALSE= -fi + } + namespace test_final_override + { - if test "x$have_cxx11_rvalue_references" != "xyes" -then : - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: libMesh requires C++11 support for rvalue references" >&5 -printf "%s\n" "$as_me: WARNING: libMesh requires C++11 support for rvalue references" >&2;} - have_cxx_all=no -fi + struct Base + { + virtual ~Base() {} + virtual void f() {} + }; + struct Derived : public Base + { + virtual ~Derived() override {} + virtual void f() override {} + }; - have_cxx11_to_string=no + } - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for C++11 std::to_string() support" >&5 -printf %s "checking for C++11 std::to_string() support... " >&6; } - ac_ext=cpp -ac_cpp='$CXXCPP $CPPFLAGS' -ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_cxx_compiler_gnu + namespace test_double_right_angle_brackets + { + template < typename T > + struct check {}; - old_CXXFLAGS="$CXXFLAGS" - CXXFLAGS="$CXXFLAGS $libmesh_CXXFLAGS" + typedef check single_type; + typedef check> double_type; + typedef check>> triple_type; + typedef check>>> quadruple_type; - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ + } - #include + namespace test_decltype + { -int -main (void) -{ + int + f() + { + int a = 1; + decltype(a) b = 2; + return a + b; + } - // tiny="0.000000". Note: std::to_string(double) is required to produce - // a std::string with the same contents as std::sprintf(buf, "%f", value) - // would produce, given a sufficiently large buf. This is *different* from - // what you get from a std::stringstream using default formatting and - // precision flags, i.e. - // std::ostringstream oss; - // oss << 1.e-40; - // std::string tiny = oss.str(); - // will produce the string "1e-40". - std::string tiny = std::to_string(1.e-40); + } - ; - return 0; -} -_ACEOF -if ac_fn_cxx_try_compile "$LINENO" -then : + namespace test_type_deduction + { - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -printf "%s\n" "yes" >&6; } + template < typename T1, typename T2 > + struct is_same + { + static const bool value = false; + }; -printf "%s\n" "#define HAVE_CXX11_TO_STRING 1" >>confdefs.h + template < typename T > + struct is_same + { + static const bool value = true; + }; - have_cxx11_to_string=yes + template < typename T1, typename T2 > + auto + add(T1 a1, T2 a2) -> decltype(a1 + a2) + { + return a1 + a2; + } -else case e in #( - e) - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 -printf "%s\n" "no" >&6; } - ;; -esac -fi -rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext + int + test(const int c, volatile int v) + { + static_assert(is_same::value == true, ""); + static_assert(is_same::value == false, ""); + static_assert(is_same::value == false, ""); + auto ac = c; + auto av = v; + auto sumi = ac + av + 'x'; + auto sumf = ac + av + 1.0; + static_assert(is_same::value == true, ""); + static_assert(is_same::value == true, ""); + static_assert(is_same::value == true, ""); + static_assert(is_same::value == false, ""); + static_assert(is_same::value == true, ""); + return (sumf > 0.0) ? sumi : add(c, v); + } - # Reset the flags - CXXFLAGS="$old_CXXFLAGS" - ac_ext=cpp -ac_cpp='$CXXCPP $CPPFLAGS' -ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_cxx_compiler_gnu + } + namespace test_noexcept + { - if test x$have_cxx11_to_string == xyes; then - HAVE_CXX11_TO_STRING_TRUE= - HAVE_CXX11_TO_STRING_FALSE='#' -else - HAVE_CXX11_TO_STRING_TRUE='#' - HAVE_CXX11_TO_STRING_FALSE= -fi + int f() { return 0; } + int g() noexcept { return 0; } + static_assert(noexcept(f()) == false, ""); + static_assert(noexcept(g()) == true, ""); - if test "x$have_cxx11_to_string" != "xyes" -then : - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: libMesh requires C++11 support for std::to_string()" >&5 -printf "%s\n" "$as_me: WARNING: libMesh requires C++11 support for std::to_string()" >&2;} - have_cxx_all=no -fi + } + namespace test_constexpr + { - have_cxx11_constexpr=no + template < typename CharT > + unsigned long constexpr + strlen_c_r(const CharT *const s, const unsigned long acc) noexcept + { + return *s ? strlen_c_r(s + 1, acc + 1) : acc; + } - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for C++11 constexpr support" >&5 -printf %s "checking for C++11 constexpr support... " >&6; } - ac_ext=cpp -ac_cpp='$CXXCPP $CPPFLAGS' -ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_cxx_compiler_gnu + template < typename CharT > + unsigned long constexpr + strlen_c(const CharT *const s) noexcept + { + return strlen_c_r(s, 0UL); + } + static_assert(strlen_c("") == 0UL, ""); + static_assert(strlen_c("1") == 1UL, ""); + static_assert(strlen_c("example") == 7UL, ""); + static_assert(strlen_c("another\0example") == 7UL, ""); - old_CXXFLAGS="$CXXFLAGS" - CXXFLAGS="$CXXFLAGS $libmesh_CXXFLAGS" + } - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ + namespace test_rvalue_references + { - constexpr int multiply (int x, int y) { return x * y; } + template < int N > + struct answer + { + static constexpr int value = N; + }; -int -main (void) -{ + answer<1> f(int&) { return answer<1>(); } + answer<2> f(const int&) { return answer<2>(); } + answer<3> f(int&&) { return answer<3>(); } - // The compiler should compute "val" at compile time. - const int val = multiply(10, 10); + void + test() + { + int i = 0; + const int c = 0; + static_assert(decltype(f(i))::value == 1, ""); + static_assert(decltype(f(c))::value == 2, ""); + static_assert(decltype(f(0))::value == 3, ""); + } - ; - return 0; -} -_ACEOF -if ac_fn_cxx_try_compile "$LINENO" -then : + } - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -printf "%s\n" "yes" >&6; } + namespace test_uniform_initialization + { -printf "%s\n" "#define HAVE_CXX11_CONSTEXPR 1" >>confdefs.h + struct test + { + static const int zero {}; + static const int one {1}; + }; - have_cxx11_constexpr=yes + static_assert(test::zero == 0, ""); + static_assert(test::one == 1, ""); -else case e in #( - e) - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 -printf "%s\n" "no" >&6; } - ;; -esac -fi -rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext + } - # Reset the flags - CXXFLAGS="$old_CXXFLAGS" - ac_ext=cpp -ac_cpp='$CXXCPP $CPPFLAGS' -ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_cxx_compiler_gnu + namespace test_lambdas + { + void + test1() + { + auto lambda1 = [](){}; + auto lambda2 = lambda1; + lambda1(); + lambda2(); + } - if test x$have_cxx11_constexpr == xyes; then - HAVE_CXX11_CONSTEXPR_TRUE= - HAVE_CXX11_CONSTEXPR_FALSE='#' -else - HAVE_CXX11_CONSTEXPR_TRUE='#' - HAVE_CXX11_CONSTEXPR_FALSE= -fi + int + test2() + { + auto a = [](int i, int j){ return i + j; }(1, 2); + auto b = []() -> int { return '0'; }(); + auto c = [=](){ return a + b; }(); + auto d = [&](){ return c; }(); + auto e = [a, &b](int x) mutable { + const auto identity = [](int y){ return y; }; + for (auto i = 0; i < a; ++i) + a += b--; + return x + identity(a + b); + }(0); + return a + b + c + d + e; + } + int + test3() + { + const auto nullary = [](){ return 0; }; + const auto unary = [](int x){ return x; }; + using nullary_t = decltype(nullary); + using unary_t = decltype(unary); + const auto higher1st = [](nullary_t f){ return f(); }; + const auto higher2nd = [unary](nullary_t f1){ + return [unary, f1](unary_t f2){ return f2(unary(f1())); }; + }; + return higher1st(nullary) + higher2nd(nullary)(unary); + } - if test "x$have_cxx11_constexpr" != "xyes" -then : - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: libMesh requires C++11 support for constexpr" >&5 -printf "%s\n" "$as_me: WARNING: libMesh requires C++11 support for constexpr" >&2;} - have_cxx_all=no -fi + } + namespace test_variadic_templates + { - have_cxx11_variadic_templates=no + template + struct sum; - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for C++11 variadic template support" >&5 -printf %s "checking for C++11 variadic template support... " >&6; } - ac_ext=cpp -ac_cpp='$CXXCPP $CPPFLAGS' -ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_cxx_compiler_gnu + template + struct sum + { + static constexpr auto value = N0 + sum::value; + }; + template <> + struct sum<> + { + static constexpr auto value = 0; + }; - old_CXXFLAGS="$CXXFLAGS" - CXXFLAGS="$CXXFLAGS $libmesh_CXXFLAGS" + static_assert(sum<>::value == 0, ""); + static_assert(sum<1>::value == 1, ""); + static_assert(sum<23>::value == 23, ""); + static_assert(sum<1, 2>::value == 3, ""); + static_assert(sum<5, 5, 11>::value == 21, ""); + static_assert(sum<2, 3, 5, 7, 11, 13>::value == 41, ""); - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ + } - // Base case - template - T sum(T t) { return t; } + // http://stackoverflow.com/questions/13728184/template-aliases-and-sfinae + // Clang 3.1 fails with headers of libstd++ 4.8.3 when using std::function + // because of this. + namespace test_template_alias_sfinae + { - // Compute sum of arbitrary number of passed parameters. - template - T sum(T t, P ...p) - { - t += sum(p...); - return t; - } + struct foo {}; -int -main (void) -{ + template + using member = typename T::member_type; - sum(1, 2, 3, 4, 5); + template + void func(...) {} - ; - return 0; -} -_ACEOF -if ac_fn_cxx_try_compile "$LINENO" -then : + template + void func(member*) {} - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -printf "%s\n" "yes" >&6; } + void test(); -printf "%s\n" "#define HAVE_CXX11_VARIADIC_TEMPLATES 1" >>confdefs.h + void test() { func(0); } - have_cxx11_variadic_templates=yes + } -else case e in #( - e) - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 -printf "%s\n" "no" >&6; } - ;; -esac -fi -rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext +} // namespace cxx11 - # Reset the flags - CXXFLAGS="$old_CXXFLAGS" - ac_ext=cpp -ac_cpp='$CXXCPP $CPPFLAGS' -ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_cxx_compiler_gnu +#endif // __cplusplus >= 201103L - if test x$have_cxx11_variadic_templates == xyes; then - HAVE_CXX11_VARIADIC_TEMPLATES_TRUE= - HAVE_CXX11_VARIADIC_TEMPLATES_FALSE='#' -else - HAVE_CXX11_VARIADIC_TEMPLATES_TRUE='#' - HAVE_CXX11_VARIADIC_TEMPLATES_FALSE= -fi - if test "x$have_cxx11_variadic_templates" != "xyes" -then : - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: libMesh requires C++11 support for variadic templates" >&5 -printf "%s\n" "$as_me: WARNING: libMesh requires C++11 support for variadic templates" >&2;} - have_cxx_all=no -fi +// If the compiler admits that it is not ready for C++14, why torture it? +// Hopefully, this will speed up the test. +#ifndef __cplusplus - have_cxx11_alias_declarations=no +#error "This is not a C++ compiler" - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for C++11 alias declarations support" >&5 -printf %s "checking for C++11 alias declarations support... " >&6; } - ac_ext=cpp -ac_cpp='$CXXCPP $CPPFLAGS' -ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_cxx_compiler_gnu +#elif __cplusplus < 201402L +#error "This is not a C++14 compiler" - old_CXXFLAGS="$CXXFLAGS" - CXXFLAGS="$CXXFLAGS $libmesh_CXXFLAGS" +#else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ +namespace cxx14 +{ - template - struct check - { - T t; + namespace test_polymorphic_lambdas + { + + int + test() + { + const auto lambda = [](auto&&... args){ + const auto istiny = [](auto x){ + return (sizeof(x) == 1UL) ? 1 : 0; + }; + const int aretiny[] = { istiny(args)... }; + return aretiny[0]; }; + return lambda(1, 1L, 1.0f, '1'); + } - // An alias declaration is like a templated typedef - template - using MyCheck = check; + } -int -main (void) -{ + namespace test_binary_literals + { - MyCheck mc; + constexpr auto ivii = 0b0000000000101010; + static_assert(ivii == 42, "wrong value"); - ; - return 0; -} -_ACEOF -if ac_fn_cxx_try_compile "$LINENO" -then : + } - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -printf "%s\n" "yes" >&6; } + namespace test_generalized_constexpr + { -printf "%s\n" "#define HAVE_CXX11_ALIAS_DECLARATIONS 1" >>confdefs.h + template < typename CharT > + constexpr unsigned long + strlen_c(const CharT *const s) noexcept + { + auto length = 0UL; + for (auto p = s; *p; ++p) + ++length; + return length; + } - have_cxx11_alias_declarations=yes + static_assert(strlen_c("") == 0UL, ""); + static_assert(strlen_c("x") == 1UL, ""); + static_assert(strlen_c("test") == 4UL, ""); + static_assert(strlen_c("another\0test") == 7UL, ""); -else case e in #( - e) - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 -printf "%s\n" "no" >&6; } - ;; -esac -fi -rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext + } - # Reset the flags - CXXFLAGS="$old_CXXFLAGS" - ac_ext=cpp -ac_cpp='$CXXCPP $CPPFLAGS' -ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_cxx_compiler_gnu + namespace test_lambda_init_capture + { + int + test() + { + auto x = 0; + const auto lambda1 = [a = x](int b){ return a + b; }; + const auto lambda2 = [a = lambda1(x)](){ return a; }; + return lambda2(); + } - if test x$have_cxx11_alias_declarations == xyes; then - HAVE_CXX11_ALIAS_DECLARATIONS_TRUE= - HAVE_CXX11_ALIAS_DECLARATIONS_FALSE='#' -else - HAVE_CXX11_ALIAS_DECLARATIONS_TRUE='#' - HAVE_CXX11_ALIAS_DECLARATIONS_FALSE= -fi + } + namespace test_digit_separators + { - if test "x$have_cxx11_alias_declarations" != "xyes" -then : - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: libMesh requires C++11 support for alias declarations" >&5 -printf "%s\n" "$as_me: WARNING: libMesh requires C++11 support for alias declarations" >&2;} - have_cxx_all=no -fi + constexpr auto ten_million = 100'000'000; + static_assert(ten_million == 100000000, ""); + } - have_cxx11_array=no + namespace test_return_type_deduction + { - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for C++11 std::array" >&5 -printf %s "checking for C++11 std::array... " >&6; } - ac_ext=cpp -ac_cpp='$CXXCPP $CPPFLAGS' -ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_cxx_compiler_gnu + auto f(int& x) { return x; } + decltype(auto) g(int& x) { return x; } + template < typename T1, typename T2 > + struct is_same + { + static constexpr auto value = false; + }; - old_CXXFLAGS="$CXXFLAGS" - CXXFLAGS="$CXXFLAGS $libmesh_CXXFLAGS" + template < typename T > + struct is_same + { + static constexpr auto value = true; + }; - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ + int + test() + { + auto x = 0; + static_assert(is_same::value, ""); + static_assert(is_same::value, ""); + return x; + } - #include + } + +} // namespace cxx14 + +#endif // __cplusplus >= 201402L -int -main (void) -{ - std::array a; - a[0] = 42.0; - double * begin = a.data(); - ; - return 0; -} _ACEOF if ac_fn_cxx_try_compile "$LINENO" then : - - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -printf "%s\n" "yes" >&6; } - have_cxx11_array=yes - + eval $cachevar=yes else case e in #( - e) - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 -printf "%s\n" "no" >&6; } - ;; + e) eval $cachevar=no ;; esac fi -rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext ;; +esac +fi +eval ac_res=\$$cachevar + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 +printf "%s\n" "$ac_res" >&6; } + if eval test x\$$cachevar = xyes +then : + ac_success=yes +fi - CXXFLAGS="$old_CXXFLAGS" - ac_ext=cpp -ac_cpp='$CXXCPP $CPPFLAGS' -ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_cxx_compiler_gnu - if test "x$have_cxx11_array" != "xyes" + if test x$ac_success = xno; then + for alternative in ${ax_cxx_compile_alternatives}; do + for switch in -std=c++${alternative} +std=c++${alternative} "-h std=c++${alternative}"; do + cachevar=`printf "%s\n" "ax_cv_cxx_compile_cxx14_$switch" | sed "$as_sed_sh"` + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether $CXX supports C++14 features with $switch" >&5 +printf %s "checking whether $CXX supports C++14 features with $switch... " >&6; } +if eval test \${$cachevar+y} then : - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: libMesh requires C++11 support for std::array" >&5 -printf "%s\n" "$as_me: WARNING: libMesh requires C++11 support for std::array" >&2;} - have_cxx_all=no -fi + printf %s "(cached) " >&6 +else case e in #( + e) ac_save_CXX="$CXX" + CXX="$CXX $switch" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ - have_cxx11_isnan=no - have_cxx11_isinf=no +// If the compiler admits that it is not ready for C++11, why torture it? +// Hopefully, this will speed up the test. - ac_ext=cpp -ac_cpp='$CXXCPP $CPPFLAGS' -ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_cxx_compiler_gnu +#ifndef __cplusplus +#error "This is not a C++ compiler" - old_CXXFLAGS="$CXXFLAGS" - CXXFLAGS="$CXXFLAGS $libmesh_CXXFLAGS" +#elif __cplusplus < 201103L - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for C++11 std::isnan" >&5 -printf %s "checking for C++11 std::isnan... " >&6; } - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ +#error "This is not a C++11 compiler" - #include +#else -int -main (void) +namespace cxx11 { - if (std::isnan(0.0)) - return 1; + namespace test_static_assert + { - ; - return 0; -} -_ACEOF -if ac_fn_cxx_try_compile "$LINENO" -then : + template + struct check + { + static_assert(sizeof(int) <= sizeof(T), "not big enough"); + }; - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -printf "%s\n" "yes" >&6; } - have_cxx11_isnan=yes + } -else case e in #( - e) - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 -printf "%s\n" "no" >&6; } - ;; -esac -fi -rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext + namespace test_final_override + { - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for C++11 std::isinf" >&5 -printf %s "checking for C++11 std::isinf... " >&6; } - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ + struct Base + { + virtual ~Base() {} + virtual void f() {} + }; - #include + struct Derived : public Base + { + virtual ~Derived() override {} + virtual void f() override {} + }; -int -main (void) -{ + } - if (std::isinf(0.0)) - return 1; + namespace test_double_right_angle_brackets + { - ; - return 0; -} -_ACEOF -if ac_fn_cxx_try_compile "$LINENO" -then : + template < typename T > + struct check {}; - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -printf "%s\n" "yes" >&6; } - have_cxx11_isinf=yes - -else case e in #( - e) - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 -printf "%s\n" "no" >&6; } - ;; -esac -fi -rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext - - CXXFLAGS="$old_CXXFLAGS" - ac_ext=cpp -ac_cpp='$CXXCPP $CPPFLAGS' -ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_cxx_compiler_gnu - - - if test "x$have_cxx11_isnan" != "xyes" -then : - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: libMesh requires C++11 support for std::isnan" >&5 -printf "%s\n" "$as_me: WARNING: libMesh requires C++11 support for std::isnan" >&2;} - have_cxx_all=no -fi - if test "x$have_cxx11_isinf" != "xyes" -then : - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: libMesh requires C++11 support for std::isinf" >&5 -printf "%s\n" "$as_me: WARNING: libMesh requires C++11 support for std::isinf" >&2;} - have_cxx_all=no -fi - - - have_cxx17_splicing=no - - ac_ext=cpp -ac_cpp='$CXXCPP $CPPFLAGS' -ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_cxx_compiler_gnu - - - old_CXXFLAGS="$CXXFLAGS" - CXXFLAGS="$CXXFLAGS $libmesh_CXXFLAGS" - - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for C++17 std::*::merge" >&5 -printf %s "checking for C++17 std::*::merge... " >&6; } - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - - #include - #include - #include - #include - -int -main (void) -{ - - std::set s1{1}, s2{2}; - std::unordered_set us1{3}, us2{4}; - std::map m1{{5,6}}, m2{{7,8}}; - std::unordered_map um1{{9,10}}, um2{{11,12}}; - s1.merge(std::move(s2)); - us1.merge(std::move(us2)); - m1.merge(std::move(m2)); - um1.merge(std::move(um2)); - - ; - return 0; -} -_ACEOF -if ac_fn_cxx_try_compile "$LINENO" -then : - - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -printf "%s\n" "yes" >&6; } - have_cxx17_splicing=yes - -printf "%s\n" "#define HAVE_CXX17_SPLICING 1" >>confdefs.h - - -else case e in #( - e) - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 -printf "%s\n" "no" >&6; } - ;; -esac -fi -rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext - - CXXFLAGS="$old_CXXFLAGS" - ac_ext=cpp -ac_cpp='$CXXCPP $CPPFLAGS' -ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_cxx_compiler_gnu - - - if test "x$have_cxx17_splicing" != "xyes" -then : - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: libMesh prefers C++17 support for set/map merge" >&5 -printf "%s\n" "$as_me: WARNING: libMesh prefers C++17 support for set/map merge" >&2;} -fi - -fi - if test "$HAVE_CXX17" = "1" -a "x$have_cxx_all" = xyes -then : - - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: Found C++17 standard support" >&5 -printf "%s\n" "$as_me: Found C++17 standard support" >&6;} - if test $acsm_found_cxx -eq 0 -then : - acsm_cxx_version=17 -fi - acsm_found_cxx=1 -else case e in #( - e) CXX="$acsm_backup_CXX" - CXXCPP="$acsm_backup_CXXCPP" - if test "$HAVE_CXX17" = "0" -then : - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: Did not find C++17 standard support" >&5 -printf "%s\n" "$as_me: Did not find C++17 standard support" >&6;} -fi ;; -esac -fi - -fi - - if test 2014 -le "$acsm_CXX_STD_MAX" -then : - - if test 2014 -gt "$acsm_CXX_STD_MIN" -then : - ax_cxx_compile_alternatives="14 1y" ax_cxx_compile_cxx14_required=false - ac_ext=cpp -ac_cpp='$CXXCPP $CPPFLAGS' -ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_cxx_compiler_gnu - ac_success=no - - cachevar=ax_cv_cxx_compile_cxx14 - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether $CXX supports C++14 features by default" >&5 -printf %s "checking whether $CXX supports C++14 features by default... " >&6; } -if eval test \${$cachevar+y} -then : - printf %s "(cached) " >&6 -else case e in #( - e) cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - - -// If the compiler admits that it is not ready for C++11, why torture it? -// Hopefully, this will speed up the test. - -#ifndef __cplusplus - -#error "This is not a C++ compiler" - -#elif __cplusplus < 201103L - -#error "This is not a C++11 compiler" - -#else - -namespace cxx11 -{ - - namespace test_static_assert - { - - template - struct check - { - static_assert(sizeof(int) <= sizeof(T), "not big enough"); - }; - - } - - namespace test_final_override - { - - struct Base - { - virtual ~Base() {} - virtual void f() {} - }; - - struct Derived : public Base - { - virtual ~Derived() override {} - virtual void f() override {} - }; - - } - - namespace test_double_right_angle_brackets - { - - template < typename T > - struct check {}; - - typedef check single_type; - typedef check> double_type; - typedef check>> triple_type; - typedef check>>> quadruple_type; + typedef check single_type; + typedef check> double_type; + typedef check>> triple_type; + typedef check>>> quadruple_type; } @@ -17282,4749 +17002,1929 @@ else case e in #( e) eval $cachevar=no ;; esac fi -rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext ;; +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext + CXX="$ac_save_CXX" ;; esac fi eval ac_res=\$$cachevar { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 printf "%s\n" "$ac_res" >&6; } - if eval test x\$$cachevar = xyes -then : - ac_success=yes -fi + if eval test x\$$cachevar = xyes; then + CXX="$CXX $switch" + if test -n "$CXXCPP" ; then + CXXCPP="$CXXCPP $switch" + fi + ac_success=yes + break + fi + done + if test x$ac_success = xyes; then + break + fi + done + fi + ac_ext=cpp +ac_cpp='$CXXCPP $CPPFLAGS' +ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_cxx_compiler_gnu + if test x$ax_cxx_compile_cxx14_required = xtrue; then if test x$ac_success = xno; then - for alternative in ${ax_cxx_compile_alternatives}; do - switch="-std=gnu++${alternative}" - cachevar=`printf "%s\n" "ax_cv_cxx_compile_cxx14_$switch" | sed "$as_sed_sh"` - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether $CXX supports C++14 features with $switch" >&5 -printf %s "checking whether $CXX supports C++14 features with $switch... " >&6; } -if eval test \${$cachevar+y} -then : - printf %s "(cached) " >&6 -else case e in #( - e) ac_save_CXX="$CXX" - CXX="$CXX $switch" - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - + as_fn_error $? "*** A compiler with support for C++14 language features is required." "$LINENO" 5 + fi + fi + if test x$ac_success = xno; then + HAVE_CXX14=0 + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: No compiler with C++14 support was found" >&5 +printf "%s\n" "$as_me: No compiler with C++14 support was found" >&6;} + else + HAVE_CXX14=1 -// If the compiler admits that it is not ready for C++11, why torture it? -// Hopefully, this will speed up the test. +printf "%s\n" "#define HAVE_CXX14 1" >>confdefs.h -#ifndef __cplusplus + fi -#error "This is not a C++ compiler" + ;; +esac +fi + if test "$HAVE_CXX14" = "1" -a $acsm_found_cxx -eq 0 +then : -#elif __cplusplus < 201103L + # If nothing fails later we're good to go + have_cxx_all=yes -#error "This is not a C++11 compiler" + # -------------------------------------------------------------- + # Test for mandatory C++11 features, those which libMesh now requires + # for internal use. + # -------------------------------------------------------------- -#else + have_cxx11_auto=no -namespace cxx11 -{ + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for C++11 auto keyword support" >&5 +printf %s "checking for C++11 auto keyword support... " >&6; } + ac_ext=cpp +ac_cpp='$CXXCPP $CPPFLAGS' +ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_cxx_compiler_gnu - namespace test_static_assert - { - template - struct check - { - static_assert(sizeof(int) <= sizeof(T), "not big enough"); - }; + old_CXXFLAGS="$CXXFLAGS" + CXXFLAGS="$CXXFLAGS $libmesh_CXXFLAGS" - } + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ - namespace test_final_override - { - struct Base - { - virtual ~Base() {} - virtual void f() {} - }; +int +main (void) +{ - struct Derived : public Base - { - virtual ~Derived() override {} - virtual void f() override {} - }; + int x = 5; + auto y = x; - } + ; + return 0; +} +_ACEOF +if ac_fn_cxx_try_compile "$LINENO" +then : - namespace test_double_right_angle_brackets - { + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +printf "%s\n" "yes" >&6; } - template < typename T > - struct check {}; +printf "%s\n" "#define HAVE_CXX11_AUTO 1" >>confdefs.h - typedef check single_type; - typedef check> double_type; - typedef check>> triple_type; - typedef check>>> quadruple_type; + have_cxx11_auto=yes - } +else case e in #( + e) + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } + ;; +esac +fi +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext - namespace test_decltype - { + # Reset the flags + CXXFLAGS="$old_CXXFLAGS" + ac_ext=cpp +ac_cpp='$CXXCPP $CPPFLAGS' +ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_cxx_compiler_gnu - int - f() - { - int a = 1; - decltype(a) b = 2; - return a + b; - } - } + if test x$have_cxx11_auto == xyes; then + HAVE_CXX11_AUTO_TRUE= + HAVE_CXX11_AUTO_FALSE='#' +else + HAVE_CXX11_AUTO_TRUE='#' + HAVE_CXX11_AUTO_FALSE= +fi - namespace test_type_deduction - { - template < typename T1, typename T2 > - struct is_same - { - static const bool value = false; - }; + if test "x$have_cxx11_auto" != "xyes" +then : + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: libMesh requires C++11 auto variable support" >&5 +printf "%s\n" "$as_me: WARNING: libMesh requires C++11 auto variable support" >&2;} + have_cxx_all=no +fi - template < typename T > - struct is_same - { - static const bool value = true; - }; - template < typename T1, typename T2 > - auto - add(T1 a1, T2 a2) -> decltype(a1 + a2) - { - return a1 + a2; - } + have_cxx11_rangefor=no - int - test(const int c, volatile int v) - { - static_assert(is_same::value == true, ""); - static_assert(is_same::value == false, ""); - static_assert(is_same::value == false, ""); - auto ac = c; - auto av = v; - auto sumi = ac + av + 'x'; - auto sumf = ac + av + 1.0; - static_assert(is_same::value == true, ""); - static_assert(is_same::value == true, ""); - static_assert(is_same::value == true, ""); - static_assert(is_same::value == false, ""); - static_assert(is_same::value == true, ""); - return (sumf > 0.0) ? sumi : add(c, v); - } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for C++11 range-based for loop support" >&5 +printf %s "checking for C++11 range-based for loop support... " >&6; } + ac_ext=cpp +ac_cpp='$CXXCPP $CPPFLAGS' +ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_cxx_compiler_gnu - } - namespace test_noexcept - { + old_CXXFLAGS="$CXXFLAGS" + CXXFLAGS="$CXXFLAGS $libmesh_CXXFLAGS" - int f() { return 0; } - int g() noexcept { return 0; } + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ - static_assert(noexcept(f()) == false, ""); - static_assert(noexcept(g()) == true, ""); + #include + #include + void print(const std::vector & v) + { + for (const int & x : v) + std::cout << x << ' '; + std::cout << std::endl; + } - } +int +main (void) +{ - namespace test_constexpr - { + std::vector v(3); + print(v); - template < typename CharT > - unsigned long constexpr - strlen_c_r(const CharT *const s, const unsigned long acc) noexcept - { - return *s ? strlen_c_r(s + 1, acc + 1) : acc; - } + ; + return 0; +} +_ACEOF +if ac_fn_cxx_try_compile "$LINENO" +then : - template < typename CharT > - unsigned long constexpr - strlen_c(const CharT *const s) noexcept - { - return strlen_c_r(s, 0UL); - } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +printf "%s\n" "yes" >&6; } - static_assert(strlen_c("") == 0UL, ""); - static_assert(strlen_c("1") == 1UL, ""); - static_assert(strlen_c("example") == 7UL, ""); - static_assert(strlen_c("another\0example") == 7UL, ""); +printf "%s\n" "#define HAVE_CXX11_RANGEFOR 1" >>confdefs.h - } + have_cxx11_rangefor=yes - namespace test_rvalue_references - { +else case e in #( + e) + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } + ;; +esac +fi +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext - template < int N > - struct answer - { - static constexpr int value = N; - }; + # Reset the flags + CXXFLAGS="$old_CXXFLAGS" + ac_ext=cpp +ac_cpp='$CXXCPP $CPPFLAGS' +ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_cxx_compiler_gnu - answer<1> f(int&) { return answer<1>(); } - answer<2> f(const int&) { return answer<2>(); } - answer<3> f(int&&) { return answer<3>(); } - void - test() - { - int i = 0; - const int c = 0; - static_assert(decltype(f(i))::value == 1, ""); - static_assert(decltype(f(c))::value == 2, ""); - static_assert(decltype(f(0))::value == 3, ""); - } + if test x$have_cxx11_rangefor == xyes; then + HAVE_CXX11_RANGEFOR_TRUE= + HAVE_CXX11_RANGEFOR_FALSE='#' +else + HAVE_CXX11_RANGEFOR_TRUE='#' + HAVE_CXX11_RANGEFOR_FALSE= +fi - } - namespace test_uniform_initialization - { + if test "x$have_cxx11_rangefor" != "xyes" +then : + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: libMesh requires C++11 ranged-for loop support" >&5 +printf "%s\n" "$as_me: WARNING: libMesh requires C++11 ranged-for loop support" >&2;} + have_cxx_all=no +fi - struct test - { - static const int zero {}; - static const int one {1}; - }; + # Technically we require uniform initialization, but this is the + # closest test we have - static_assert(test::zero == 0, ""); - static_assert(test::one == 1, ""); + have_cxx11_initializer_list=no - } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for C++11 initializer list support" >&5 +printf %s "checking for C++11 initializer list support... " >&6; } + ac_ext=cpp +ac_cpp='$CXXCPP $CPPFLAGS' +ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_cxx_compiler_gnu - namespace test_lambdas - { - void - test1() - { - auto lambda1 = [](){}; - auto lambda2 = lambda1; - lambda1(); - lambda2(); - } + old_CXXFLAGS="$CXXFLAGS" + CXXFLAGS="$CXXFLAGS $libmesh_CXXFLAGS" - int - test2() - { - auto a = [](int i, int j){ return i + j; }(1, 2); - auto b = []() -> int { return '0'; }(); - auto c = [=](){ return a + b; }(); - auto d = [&](){ return c; }(); - auto e = [a, &b](int x) mutable { - const auto identity = [](int y){ return y; }; - for (auto i = 0; i < a; ++i) - a += b--; - return x + identity(a + b); - }(0); - return a + b + c + d + e; - } + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ - int - test3() - { - const auto nullary = [](){ return 0; }; - const auto unary = [](int x){ return x; }; - using nullary_t = decltype(nullary); - using unary_t = decltype(unary); - const auto higher1st = [](nullary_t f){ return f(); }; - const auto higher2nd = [unary](nullary_t f1){ - return [unary, f1](unary_t f2){ return f2(unary(f1())); }; - }; - return higher1st(nullary) + higher2nd(nullary)(unary); - } + #include + #include + #include - } +int +main (void) +{ - namespace test_variadic_templates - { + std::vector v = { "xyzzy", "plugh", "abracadabra" }; - template - struct sum; + ; + return 0; +} +_ACEOF +if ac_fn_cxx_try_compile "$LINENO" +then : - template - struct sum - { - static constexpr auto value = N0 + sum::value; - }; + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +printf "%s\n" "yes" >&6; } - template <> - struct sum<> - { - static constexpr auto value = 0; - }; +printf "%s\n" "#define HAVE_CXX11_INITIALIZER_LIST 1" >>confdefs.h - static_assert(sum<>::value == 0, ""); - static_assert(sum<1>::value == 1, ""); - static_assert(sum<23>::value == 23, ""); - static_assert(sum<1, 2>::value == 3, ""); - static_assert(sum<5, 5, 11>::value == 21, ""); - static_assert(sum<2, 3, 5, 7, 11, 13>::value == 41, ""); + have_cxx11_initializer_list=yes - } +else case e in #( + e) + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } + ;; +esac +fi +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext - // http://stackoverflow.com/questions/13728184/template-aliases-and-sfinae - // Clang 3.1 fails with headers of libstd++ 4.8.3 when using std::function - // because of this. - namespace test_template_alias_sfinae - { + # Reset the flags + CXXFLAGS="$old_CXXFLAGS" + ac_ext=cpp +ac_cpp='$CXXCPP $CPPFLAGS' +ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_cxx_compiler_gnu - struct foo {}; - template - using member = typename T::member_type; + if test x$have_cxx11_initializer_list == xyes; then + HAVE_CXX11_INITIALIZER_LIST_TRUE= + HAVE_CXX11_INITIALIZER_LIST_FALSE='#' +else + HAVE_CXX11_INITIALIZER_LIST_TRUE='#' + HAVE_CXX11_INITIALIZER_LIST_FALSE= +fi - template - void func(...) {} - template - void func(member*) {} + if test "x$have_cxx11_initializer_list" != "xyes" +then : + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: libMesh requires C++11 initializer list support" >&5 +printf "%s\n" "$as_me: WARNING: libMesh requires C++11 initializer list support" >&2;} + have_cxx_all=no +fi - void test(); - void test() { func(0); } + have_cxx11_unique_ptr=no - } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for C++11 std::unique_ptr support" >&5 +printf %s "checking for C++11 std::unique_ptr support... " >&6; } + ac_ext=cpp +ac_cpp='$CXXCPP $CPPFLAGS' +ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_cxx_compiler_gnu -} // namespace cxx11 -#endif // __cplusplus >= 201103L + old_CXXFLAGS="$CXXFLAGS" + CXXFLAGS="$CXXFLAGS $libmesh_CXXFLAGS" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + #include + #include + struct Foo + { + Foo() { std::cout << "Foo::Foo\n"; } + ~Foo() { std::cout << "Foo::~Foo\n"; } + }; +int +main (void) +{ -// If the compiler admits that it is not ready for C++14, why torture it? -// Hopefully, this will speed up the test. + { + // up now owns a Foo + std::unique_ptr up(new Foo); + } // Foo deleted when up goes out of scope -#ifndef __cplusplus + ; + return 0; +} +_ACEOF +if ac_fn_cxx_try_compile "$LINENO" +then : -#error "This is not a C++ compiler" + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +printf "%s\n" "yes" >&6; } -#elif __cplusplus < 201402L +printf "%s\n" "#define HAVE_CXX11_UNIQUE_PTR 1" >>confdefs.h -#error "This is not a C++14 compiler" + have_cxx11_unique_ptr=yes -#else +else case e in #( + e) + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } + ;; +esac +fi +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext -namespace cxx14 -{ + # Reset the flags + CXXFLAGS="$old_CXXFLAGS" + ac_ext=cpp +ac_cpp='$CXXCPP $CPPFLAGS' +ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_cxx_compiler_gnu - namespace test_polymorphic_lambdas - { - int - test() - { - const auto lambda = [](auto&&... args){ - const auto istiny = [](auto x){ - return (sizeof(x) == 1UL) ? 1 : 0; - }; - const int aretiny[] = { istiny(args)... }; - return aretiny[0]; - }; - return lambda(1, 1L, 1.0f, '1'); - } + if test x$have_cxx11_unique_ptr == xyes; then + HAVE_CXX11_UNIQUE_PTR_TRUE= + HAVE_CXX11_UNIQUE_PTR_FALSE='#' +else + HAVE_CXX11_UNIQUE_PTR_TRUE='#' + HAVE_CXX11_UNIQUE_PTR_FALSE= +fi - } - namespace test_binary_literals - { + if test "x$have_cxx11_unique_ptr" != "xyes" +then : + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: libMesh requires C++11 std::unique_ptr support" >&5 +printf "%s\n" "$as_me: WARNING: libMesh requires C++11 std::unique_ptr support" >&2;} + have_cxx_all=no +fi - constexpr auto ivii = 0b0000000000101010; - static_assert(ivii == 42, "wrong value"); - } + have_cxx11_make_unique_workaround=no - namespace test_generalized_constexpr - { + # This is a simple workaround for no std::make_unique in C++11: + # http://stackoverflow.com/questions/7038357/make-unique-and-perfect-forwarding + # Requires working rvalue references, std::forward, variadic + # templates, and std::unique_ptr from C++11. + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for C++11 std::make_unique workaround support" >&5 +printf %s "checking for C++11 std::make_unique workaround support... " >&6; } + ac_ext=cpp +ac_cpp='$CXXCPP $CPPFLAGS' +ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_cxx_compiler_gnu - template < typename CharT > - constexpr unsigned long - strlen_c(const CharT *const s) noexcept - { - auto length = 0UL; - for (auto p = s; *p; ++p) - ++length; - return length; - } - - static_assert(strlen_c("") == 0UL, ""); - static_assert(strlen_c("x") == 1UL, ""); - static_assert(strlen_c("test") == 4UL, ""); - static_assert(strlen_c("another\0test") == 7UL, ""); - } + old_CXXFLAGS="$CXXFLAGS" + CXXFLAGS="$CXXFLAGS $libmesh_CXXFLAGS" - namespace test_lambda_init_capture - { + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ - int - test() + #include + namespace local { - auto x = 0; - const auto lambda1 = [a = x](int b){ return a + b; }; - const auto lambda2 = [a = lambda1(x)](){ return a; }; - return lambda2(); + template + std::unique_ptr make_unique(Args&&... args) + { + return std::unique_ptr(new T(std::forward(args)...)); + } } - } - - namespace test_digit_separators - { - - constexpr auto ten_million = 100'000'000; - static_assert(ten_million == 100000000, ""); - - } - - namespace test_return_type_deduction - { - - auto f(int& x) { return x; } - decltype(auto) g(int& x) { return x; } - - template < typename T1, typename T2 > - struct is_same - { - static constexpr auto value = false; - }; - - template < typename T > - struct is_same - { - static constexpr auto value = true; - }; +int +main (void) +{ - int - test() { - auto x = 0; - static_assert(is_same::value, ""); - static_assert(is_same::value, ""); - return x; - } - - } + // Normally, you would use "auto" on the LHS here to avoid + // repeating the type name, but we are not testing auto here. + std::unique_ptr up = local::make_unique(42); + } // Foo deleted when up goes out of scope -} // namespace cxx14 + ; + return 0; +} +_ACEOF +if ac_fn_cxx_try_compile "$LINENO" +then : -#endif // __cplusplus >= 201402L + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +printf "%s\n" "yes" >&6; } +printf "%s\n" "#define HAVE_CXX11_MAKE_UNIQUE_WORKAROUND 1" >>confdefs.h + have_cxx11_make_unique_workaround=yes -_ACEOF -if ac_fn_cxx_try_compile "$LINENO" -then : - eval $cachevar=yes else case e in #( - e) eval $cachevar=no ;; + e) + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } + ;; esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext - CXX="$ac_save_CXX" ;; -esac + + # Reset the flags + CXXFLAGS="$old_CXXFLAGS" + ac_ext=cpp +ac_cpp='$CXXCPP $CPPFLAGS' +ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_cxx_compiler_gnu + + + if test x$have_cxx11_make_unique_workaround == xyes; then + HAVE_CXX11_MAKE_UNIQUE_WORKAROUND_TRUE= + HAVE_CXX11_MAKE_UNIQUE_WORKAROUND_FALSE='#' +else + HAVE_CXX11_MAKE_UNIQUE_WORKAROUND_TRUE='#' + HAVE_CXX11_MAKE_UNIQUE_WORKAROUND_FALSE= fi -eval ac_res=\$$cachevar - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 -printf "%s\n" "$ac_res" >&6; } - if eval test x\$$cachevar = xyes; then - CXX="$CXX $switch" - if test -n "$CXXCPP" ; then - CXXCPP="$CXXCPP $switch" - fi - ac_success=yes - break - fi - done - fi - if test x$ac_success = xno; then - for alternative in ${ax_cxx_compile_alternatives}; do - for switch in -std=c++${alternative} +std=c++${alternative} "-h std=c++${alternative}"; do - cachevar=`printf "%s\n" "ax_cv_cxx_compile_cxx14_$switch" | sed "$as_sed_sh"` - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether $CXX supports C++14 features with $switch" >&5 -printf %s "checking whether $CXX supports C++14 features with $switch... " >&6; } -if eval test \${$cachevar+y} + + if test "x$have_cxx11_make_unique_workaround" != "xyes" then : - printf %s "(cached) " >&6 -else case e in #( - e) ac_save_CXX="$CXX" - CXX="$CXX $switch" - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: libMesh requires C++11 variadic template support" >&5 +printf "%s\n" "$as_me: WARNING: libMesh requires C++11 variadic template support" >&2;} + have_cxx_all=no +fi -// If the compiler admits that it is not ready for C++11, why torture it? -// Hopefully, this will speed up the test. + have_cxx11_tuple=no -#ifndef __cplusplus + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for C++11 std::tuple support" >&5 +printf %s "checking for C++11 std::tuple support... " >&6; } + ac_ext=cpp +ac_cpp='$CXXCPP $CPPFLAGS' +ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_cxx_compiler_gnu -#error "This is not a C++ compiler" -#elif __cplusplus < 201103L + old_CXXFLAGS="$CXXFLAGS" + CXXFLAGS="$CXXFLAGS $libmesh_CXXFLAGS" -#error "This is not a C++11 compiler" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ -#else + #include + #include + #include -namespace cxx11 +int +main (void) { - namespace test_static_assert - { + // Test std::make_tuple + std::map> students; + students[0] = std::make_tuple(3.8, 'A', "Lisa Simpson"); + students[1] = std::make_tuple(2.9, 'C', "Milhouse Van Houten"); - template - struct check - { - static_assert(sizeof(int) <= sizeof(T), "not big enough"); - }; + // Test templated std::get() method. + std::get<0>(students[0]); + std::get<1>(students[0]); + std::get<2>(students[0]); - } + // Test std::tie and std::ignore which are declared in the header. + double gpa1; + std::string name1; + std::tie(gpa1, std::ignore, name1) = students[1]; - namespace test_final_override - { + // Test std::tuple_cat(), which combines together one or more + // objects, not necessarily tuples, into a single tuple. + auto t = std::tuple_cat(students[0], students[1], std::make_pair("foo", 42)); - struct Base - { - virtual ~Base() {} - virtual void f() {} - }; + ; + return 0; +} +_ACEOF +if ac_fn_cxx_try_compile "$LINENO" +then : - struct Derived : public Base - { - virtual ~Derived() override {} - virtual void f() override {} - }; + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +printf "%s\n" "yes" >&6; } - } +printf "%s\n" "#define HAVE_CXX11_TUPLE 1" >>confdefs.h - namespace test_double_right_angle_brackets - { + have_cxx11_tuple=yes - template < typename T > - struct check {}; +else case e in #( + e) + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } + ;; +esac +fi +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext - typedef check single_type; - typedef check> double_type; - typedef check>> triple_type; - typedef check>>> quadruple_type; + CXXFLAGS="$old_CXXFLAGS" + ac_ext=cpp +ac_cpp='$CXXCPP $CPPFLAGS' +ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_cxx_compiler_gnu - } - namespace test_decltype - { + if test x$have_cxx11_tuple == xyes; then + HAVE_CXX11_TUPLE_TRUE= + HAVE_CXX11_TUPLE_FALSE='#' +else + HAVE_CXX11_TUPLE_TRUE='#' + HAVE_CXX11_TUPLE_FALSE= +fi - int - f() - { - int a = 1; - decltype(a) b = 2; - return a + b; - } - } + if test "x$have_cxx11_tuple" != "xyes" +then : + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: libMesh requires C++11 std::tuple support" >&5 +printf "%s\n" "$as_me: WARNING: libMesh requires C++11 std::tuple support" >&2;} + have_cxx_all=no +fi - namespace test_type_deduction - { - template < typename T1, typename T2 > - struct is_same - { - static const bool value = false; - }; - - template < typename T > - struct is_same - { - static const bool value = true; - }; + have_cxx11_lambda=no - template < typename T1, typename T2 > - auto - add(T1 a1, T2 a2) -> decltype(a1 + a2) - { - return a1 + a2; - } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for C++11 lambda support" >&5 +printf %s "checking for C++11 lambda support... " >&6; } + ac_ext=cpp +ac_cpp='$CXXCPP $CPPFLAGS' +ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_cxx_compiler_gnu - int - test(const int c, volatile int v) - { - static_assert(is_same::value == true, ""); - static_assert(is_same::value == false, ""); - static_assert(is_same::value == false, ""); - auto ac = c; - auto av = v; - auto sumi = ac + av + 'x'; - auto sumf = ac + av + 1.0; - static_assert(is_same::value == true, ""); - static_assert(is_same::value == true, ""); - static_assert(is_same::value == true, ""); - static_assert(is_same::value == false, ""); - static_assert(is_same::value == true, ""); - return (sumf > 0.0) ? sumi : add(c, v); - } - } + old_CXXFLAGS="$CXXFLAGS" + CXXFLAGS="$CXXFLAGS $libmesh_CXXFLAGS" - namespace test_noexcept - { + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ - int f() { return 0; } - int g() noexcept { return 0; } + // typedef for a function pointer that takes int and returns bool. + typedef bool (*FunctionPointer) (int); - static_assert(noexcept(f()) == false, ""); - static_assert(noexcept(g()) == true, ""); + // A function that takes a pointer to a function that takes an int, + // calls it with the number 4, and returns the result. + bool f(FunctionPointer g) { return g(4); } - } +int +main (void) +{ - namespace test_constexpr - { + // Call f, passing it a lambda constructed on the fly instead + // of a standard function pointer. The result should be true. + f ( [](int x) { return x > 3; } ); - template < typename CharT > - unsigned long constexpr - strlen_c_r(const CharT *const s, const unsigned long acc) noexcept - { - return *s ? strlen_c_r(s + 1, acc + 1) : acc; - } + ; + return 0; +} +_ACEOF +if ac_fn_cxx_try_compile "$LINENO" +then : - template < typename CharT > - unsigned long constexpr - strlen_c(const CharT *const s) noexcept - { - return strlen_c_r(s, 0UL); - } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +printf "%s\n" "yes" >&6; } - static_assert(strlen_c("") == 0UL, ""); - static_assert(strlen_c("1") == 1UL, ""); - static_assert(strlen_c("example") == 7UL, ""); - static_assert(strlen_c("another\0example") == 7UL, ""); +printf "%s\n" "#define HAVE_CXX11_LAMBDA 1" >>confdefs.h - } + have_cxx11_lambda=yes - namespace test_rvalue_references - { +else case e in #( + e) + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } + ;; +esac +fi +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext - template < int N > - struct answer - { - static constexpr int value = N; - }; + # Reset the flags + CXXFLAGS="$old_CXXFLAGS" + ac_ext=cpp +ac_cpp='$CXXCPP $CPPFLAGS' +ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_cxx_compiler_gnu - answer<1> f(int&) { return answer<1>(); } - answer<2> f(const int&) { return answer<2>(); } - answer<3> f(int&&) { return answer<3>(); } - void - test() - { - int i = 0; - const int c = 0; - static_assert(decltype(f(i))::value == 1, ""); - static_assert(decltype(f(c))::value == 2, ""); - static_assert(decltype(f(0))::value == 3, ""); - } + if test x$have_cxx11_lambda == xyes; then + HAVE_CXX11_LAMBDA_TRUE= + HAVE_CXX11_LAMBDA_FALSE='#' +else + HAVE_CXX11_LAMBDA_TRUE='#' + HAVE_CXX11_LAMBDA_FALSE= +fi - } - namespace test_uniform_initialization - { + if test "x$have_cxx11_lambda" != "xyes" +then : + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: libMesh requires C++11 lambda support" >&5 +printf "%s\n" "$as_me: WARNING: libMesh requires C++11 lambda support" >&2;} + have_cxx_all=no +fi - struct test - { - static const int zero {}; - static const int one {1}; - }; - static_assert(test::zero == 0, ""); - static_assert(test::one == 1, ""); + have_cxx11_fixed_type_enum=no - } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for C++11 fixed type enumeration support" >&5 +printf %s "checking for C++11 fixed type enumeration support... " >&6; } + ac_ext=cpp +ac_cpp='$CXXCPP $CPPFLAGS' +ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_cxx_compiler_gnu - namespace test_lambdas - { - void - test1() - { - auto lambda1 = [](){}; - auto lambda2 = lambda1; - lambda1(); - lambda2(); - } + old_CXXFLAGS="$CXXFLAGS" + CXXFLAGS="$CXXFLAGS $libmesh_CXXFLAGS" - int - test2() - { - auto a = [](int i, int j){ return i + j; }(1, 2); - auto b = []() -> int { return '0'; }(); - auto c = [=](){ return a + b; }(); - auto d = [&](){ return c; }(); - auto e = [a, &b](int x) mutable { - const auto identity = [](int y){ return y; }; - for (auto i = 0; i < a; ++i) - a += b--; - return x + identity(a + b); - }(0); - return a + b + c + d + e; - } + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ - int - test3() - { - const auto nullary = [](){ return 0; }; - const auto unary = [](int x){ return x; }; - using nullary_t = decltype(nullary); - using unary_t = decltype(unary); - const auto higher1st = [](nullary_t f){ return f(); }; - const auto higher2nd = [unary](nullary_t f1){ - return [unary, f1](unary_t f2){ return f2(unary(f1())); }; - }; - return higher1st(nullary) + higher2nd(nullary)(unary); - } + enum Fruit : int {APPLE=0, ORANGE=1}; - } +int +main (void) +{ - namespace test_variadic_templates - { + Fruit f = APPLE; - template - struct sum; + ; + return 0; +} +_ACEOF +if ac_fn_cxx_try_compile "$LINENO" +then : - template - struct sum - { - static constexpr auto value = N0 + sum::value; - }; + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +printf "%s\n" "yes" >&6; } - template <> - struct sum<> - { - static constexpr auto value = 0; - }; +printf "%s\n" "#define HAVE_CXX11_FIXED_TYPE_ENUM 1" >>confdefs.h - static_assert(sum<>::value == 0, ""); - static_assert(sum<1>::value == 1, ""); - static_assert(sum<23>::value == 23, ""); - static_assert(sum<1, 2>::value == 3, ""); - static_assert(sum<5, 5, 11>::value == 21, ""); - static_assert(sum<2, 3, 5, 7, 11, 13>::value == 41, ""); + have_cxx11_fixed_type_enum=yes - } +else case e in #( + e) + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } + ;; +esac +fi +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext - // http://stackoverflow.com/questions/13728184/template-aliases-and-sfinae - // Clang 3.1 fails with headers of libstd++ 4.8.3 when using std::function - // because of this. - namespace test_template_alias_sfinae - { + CXXFLAGS="$old_CXXFLAGS" + ac_ext=cpp +ac_cpp='$CXXCPP $CPPFLAGS' +ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_cxx_compiler_gnu - struct foo {}; - template - using member = typename T::member_type; - - template - void func(...) {} - - template - void func(member*) {} - - void test(); - - void test() { func(0); } - - } - -} // namespace cxx11 - -#endif // __cplusplus >= 201103L + if test x$have_cxx11_fixed_type_enum == xyes; then + HAVE_CXX11_FIXED_TYPE_ENUM_TRUE= + HAVE_CXX11_FIXED_TYPE_ENUM_FALSE='#' +else + HAVE_CXX11_FIXED_TYPE_ENUM_TRUE='#' + HAVE_CXX11_FIXED_TYPE_ENUM_FALSE= +fi + if test "x$have_cxx11_fixed_type_enum" != "xyes" +then : + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: libMesh requires C++11 fixed type enumeration support" >&5 +printf "%s\n" "$as_me: WARNING: libMesh requires C++11 fixed type enumeration support" >&2;} + have_cxx_all=no +fi -// If the compiler admits that it is not ready for C++14, why torture it? -// Hopefully, this will speed up the test. + have_cxx11_fixed_type_enum_fwd=no -#ifndef __cplusplus + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for C++11 fixed type enumeration forward declaration support" >&5 +printf %s "checking for C++11 fixed type enumeration forward declaration support... " >&6; } + ac_ext=cpp +ac_cpp='$CXXCPP $CPPFLAGS' +ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_cxx_compiler_gnu -#error "This is not a C++ compiler" -#elif __cplusplus < 201402L + old_CXXFLAGS="$CXXFLAGS" + CXXFLAGS="$CXXFLAGS $libmesh_CXXFLAGS" -#error "This is not a C++14 compiler" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ -#else + #include + enum Foo : int; + void func(Foo f) { std::cout << f << std::endl; } + enum Foo : int { FOO0 = 0, FOO1 = 1, FOO2 = 2 }; -namespace cxx14 +int +main (void) { - namespace test_polymorphic_lambdas - { - - int - test() - { - const auto lambda = [](auto&&... args){ - const auto istiny = [](auto x){ - return (sizeof(x) == 1UL) ? 1 : 0; - }; - const int aretiny[] = { istiny(args)... }; - return aretiny[0]; - }; - return lambda(1, 1L, 1.0f, '1'); - } - - } + func(FOO0); + func(FOO1); + func(FOO2); - namespace test_binary_literals - { + ; + return 0; +} +_ACEOF +if ac_fn_cxx_try_compile "$LINENO" +then : - constexpr auto ivii = 0b0000000000101010; - static_assert(ivii == 42, "wrong value"); + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +printf "%s\n" "yes" >&6; } - } +printf "%s\n" "#define HAVE_CXX11_FIXED_TYPE_ENUM_FWD 1" >>confdefs.h - namespace test_generalized_constexpr - { + have_cxx11_fixed_type_enum_fwd=yes - template < typename CharT > - constexpr unsigned long - strlen_c(const CharT *const s) noexcept - { - auto length = 0UL; - for (auto p = s; *p; ++p) - ++length; - return length; - } +else case e in #( + e) + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } + ;; +esac +fi +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext - static_assert(strlen_c("") == 0UL, ""); - static_assert(strlen_c("x") == 1UL, ""); - static_assert(strlen_c("test") == 4UL, ""); - static_assert(strlen_c("another\0test") == 7UL, ""); + CXXFLAGS="$old_CXXFLAGS" + ac_ext=cpp +ac_cpp='$CXXCPP $CPPFLAGS' +ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_cxx_compiler_gnu - } - namespace test_lambda_init_capture - { + if test x$have_cxx11_fixed_type_enum_fwd == xyes; then + HAVE_CXX11_FIXED_TYPE_ENUM_FWD_TRUE= + HAVE_CXX11_FIXED_TYPE_ENUM_FWD_FALSE='#' +else + HAVE_CXX11_FIXED_TYPE_ENUM_FWD_TRUE='#' + HAVE_CXX11_FIXED_TYPE_ENUM_FWD_FALSE= +fi - int - test() - { - auto x = 0; - const auto lambda1 = [a = x](int b){ return a + b; }; - const auto lambda2 = [a = lambda1(x)](){ return a; }; - return lambda2(); - } - } + if test "x$have_cxx11_fixed_type_enum_fwd" != "xyes" +then : + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: libMesh requires C++11 fixed type enumeration forward declaration support" >&5 +printf "%s\n" "$as_me: WARNING: libMesh requires C++11 fixed type enumeration forward declaration support" >&2;} + have_cxx_all=no +fi - namespace test_digit_separators - { - constexpr auto ten_million = 100'000'000; - static_assert(ten_million == 100000000, ""); + have_cxx11_override=no - } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for C++11 override keyword support" >&5 +printf %s "checking for C++11 override keyword support... " >&6; } + ac_ext=cpp +ac_cpp='$CXXCPP $CPPFLAGS' +ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_cxx_compiler_gnu - namespace test_return_type_deduction - { - auto f(int& x) { return x; } - decltype(auto) g(int& x) { return x; } + old_CXXFLAGS="$CXXFLAGS" + CXXFLAGS="$CXXFLAGS $libmesh_CXXFLAGS" - template < typename T1, typename T2 > - struct is_same - { - static constexpr auto value = false; - }; + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ - template < typename T > - struct is_same - { - static constexpr auto value = true; - }; - int - test() - { - auto x = 0; - static_assert(is_same::value, ""); - static_assert(is_same::value, ""); - return x; - } +int +main (void) +{ - } + struct Base { + virtual void f() {} + }; + struct Child : public Base { + virtual void f() override {} + }; -} // namespace cxx14 + ; + return 0; +} +_ACEOF +if ac_fn_cxx_try_compile "$LINENO" +then : -#endif // __cplusplus >= 201402L + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +printf "%s\n" "yes" >&6; } +printf "%s\n" "#define HAVE_CXX11_OVERRIDE 1" >>confdefs.h + have_cxx11_override=yes -_ACEOF -if ac_fn_cxx_try_compile "$LINENO" -then : - eval $cachevar=yes else case e in #( - e) eval $cachevar=no ;; + e) + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } + ;; esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext - CXX="$ac_save_CXX" ;; -esac -fi -eval ac_res=\$$cachevar - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 -printf "%s\n" "$ac_res" >&6; } - if eval test x\$$cachevar = xyes; then - CXX="$CXX $switch" - if test -n "$CXXCPP" ; then - CXXCPP="$CXXCPP $switch" - fi - ac_success=yes - break - fi - done - if test x$ac_success = xyes; then - break - fi - done - fi - ac_ext=cpp + + # Reset the flags + CXXFLAGS="$old_CXXFLAGS" + ac_ext=cpp ac_cpp='$CXXCPP $CPPFLAGS' ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_cxx_compiler_gnu - if test x$ax_cxx_compile_cxx14_required = xtrue; then - if test x$ac_success = xno; then - as_fn_error $? "*** A compiler with support for C++14 language features is required." "$LINENO" 5 - fi - fi - if test x$ac_success = xno; then - HAVE_CXX14=0 - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: No compiler with C++14 support was found" >&5 -printf "%s\n" "$as_me: No compiler with C++14 support was found" >&6;} - else - HAVE_CXX14=1 - -printf "%s\n" "#define HAVE_CXX14 1" >>confdefs.h - - fi + if test x$have_cxx11_override == xyes; then + HAVE_CXX11_OVERRIDE_TRUE= + HAVE_CXX11_OVERRIDE_FALSE='#' +else + HAVE_CXX11_OVERRIDE_TRUE='#' + HAVE_CXX11_OVERRIDE_FALSE= +fi -else case e in #( - e) ax_cxx_compile_alternatives="14 1y" ax_cxx_compile_cxx14_required=true - ac_ext=cpp -ac_cpp='$CXXCPP $CPPFLAGS' -ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_cxx_compiler_gnu - ac_success=no - cachevar=ax_cv_cxx_compile_cxx14 - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether $CXX supports C++14 features by default" >&5 -printf %s "checking whether $CXX supports C++14 features by default... " >&6; } -if eval test \${$cachevar+y} + if test "x$have_cxx11_override" != "xyes" then : - printf %s "(cached) " >&6 -else case e in #( - e) cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: libMesh requires C++11 compiler support the override keyword" >&5 +printf "%s\n" "$as_me: WARNING: libMesh requires C++11 compiler support the override keyword" >&2;} + have_cxx_all=no +fi -// If the compiler admits that it is not ready for C++11, why torture it? -// Hopefully, this will speed up the test. + have_cxx11_move_constructors=no -#ifndef __cplusplus + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for C++11 move constructor support" >&5 +printf %s "checking for C++11 move constructor support... " >&6; } + ac_ext=cpp +ac_cpp='$CXXCPP $CPPFLAGS' +ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_cxx_compiler_gnu -#error "This is not a C++ compiler" -#elif __cplusplus < 201103L + old_CXXFLAGS="$CXXFLAGS" + CXXFLAGS="$CXXFLAGS $libmesh_CXXFLAGS" -#error "This is not a C++11 compiler" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ -#else + #include + class move_constructable_base + { + public: + move_constructable_base() {} + move_constructable_base(move_constructable_base && other) noexcept {} + }; + class move_constructable : public move_constructable_base + { + public: + move_constructable() {} + move_constructable(move_constructable && other) noexcept : move_constructable_base(std::move(other)) {} + }; -namespace cxx11 +int +main (void) { - namespace test_static_assert - { + move_constructable m1; + move_constructable m2(std::move(m1)); - template - struct check - { - static_assert(sizeof(int) <= sizeof(T), "not big enough"); - }; + ; + return 0; +} +_ACEOF +if ac_fn_cxx_try_compile "$LINENO" +then : - } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +printf "%s\n" "yes" >&6; } - namespace test_final_override - { +printf "%s\n" "#define HAVE_CXX11_MOVE_CONSTRUCTORS 1" >>confdefs.h - struct Base - { - virtual ~Base() {} - virtual void f() {} - }; + have_cxx11_move_constructors=yes - struct Derived : public Base - { - virtual ~Derived() override {} - virtual void f() override {} - }; +else case e in #( + e) + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } + ;; +esac +fi +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext - } + # Reset the flags + CXXFLAGS="$old_CXXFLAGS" + ac_ext=cpp +ac_cpp='$CXXCPP $CPPFLAGS' +ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_cxx_compiler_gnu - namespace test_double_right_angle_brackets - { - template < typename T > - struct check {}; + if test x$have_cxx11_move_constructors == xyes; then + HAVE_CXX11_MOVE_CONSTRUCTORS_TRUE= + HAVE_CXX11_MOVE_CONSTRUCTORS_FALSE='#' +else + HAVE_CXX11_MOVE_CONSTRUCTORS_TRUE='#' + HAVE_CXX11_MOVE_CONSTRUCTORS_FALSE= +fi - typedef check single_type; - typedef check> double_type; - typedef check>> triple_type; - typedef check>>> quadruple_type; - } + if test "x$have_cxx11_move_constructors" != "xyes" +then : + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: libMesh requires C++11 move constructor support" >&5 +printf "%s\n" "$as_me: WARNING: libMesh requires C++11 move constructor support" >&2;} + have_cxx_all=no +fi - namespace test_decltype - { - int - f() - { - int a = 1; - decltype(a) b = 2; - return a + b; - } + have_cxx11_deleted_functions=no - } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for C++11 deleted functions support" >&5 +printf %s "checking for C++11 deleted functions support... " >&6; } + ac_ext=cpp +ac_cpp='$CXXCPP $CPPFLAGS' +ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_cxx_compiler_gnu - namespace test_type_deduction - { - template < typename T1, typename T2 > - struct is_same - { - static const bool value = false; - }; + old_CXXFLAGS="$CXXFLAGS" + CXXFLAGS="$CXXFLAGS $libmesh_CXXFLAGS" - template < typename T > - struct is_same - { - static const bool value = true; - }; + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ - template < typename T1, typename T2 > - auto - add(T1 a1, T2 a2) -> decltype(a1 + a2) + class Foo { - return a1 + a2; - } + Foo(const Foo &) = delete; + }; - int - test(const int c, volatile int v) - { - static_assert(is_same::value == true, ""); - static_assert(is_same::value == false, ""); - static_assert(is_same::value == false, ""); - auto ac = c; - auto av = v; - auto sumi = ac + av + 'x'; - auto sumf = ac + av + 1.0; - static_assert(is_same::value == true, ""); - static_assert(is_same::value == true, ""); - static_assert(is_same::value == true, ""); - static_assert(is_same::value == false, ""); - static_assert(is_same::value == true, ""); - return (sumf > 0.0) ? sumi : add(c, v); - } +int +main (void) +{ - } - namespace test_noexcept - { + ; + return 0; +} +_ACEOF +if ac_fn_cxx_try_compile "$LINENO" +then : - int f() { return 0; } - int g() noexcept { return 0; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +printf "%s\n" "yes" >&6; } - static_assert(noexcept(f()) == false, ""); - static_assert(noexcept(g()) == true, ""); +printf "%s\n" "#define HAVE_CXX11_DELETED_FUNCTIONS 1" >>confdefs.h - } + have_cxx11_deleted_functions=yes - namespace test_constexpr - { +else case e in #( + e) + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } + ;; +esac +fi +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext - template < typename CharT > - unsigned long constexpr - strlen_c_r(const CharT *const s, const unsigned long acc) noexcept - { - return *s ? strlen_c_r(s + 1, acc + 1) : acc; - } + # Reset the flags + CXXFLAGS="$old_CXXFLAGS" + ac_ext=cpp +ac_cpp='$CXXCPP $CPPFLAGS' +ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_cxx_compiler_gnu - template < typename CharT > - unsigned long constexpr - strlen_c(const CharT *const s) noexcept - { - return strlen_c_r(s, 0UL); - } - static_assert(strlen_c("") == 0UL, ""); - static_assert(strlen_c("1") == 1UL, ""); - static_assert(strlen_c("example") == 7UL, ""); - static_assert(strlen_c("another\0example") == 7UL, ""); + if test x$have_cxx11_deleted_functions == xyes; then + HAVE_CXX11_DELETED_FUNCTIONS_TRUE= + HAVE_CXX11_DELETED_FUNCTIONS_FALSE='#' +else + HAVE_CXX11_DELETED_FUNCTIONS_TRUE='#' + HAVE_CXX11_DELETED_FUNCTIONS_FALSE= +fi - } - namespace test_rvalue_references - { + if test "x$have_cxx11_deleted_functions" != "xyes" +then : + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: libMesh requires C++11 deleted function support" >&5 +printf "%s\n" "$as_me: WARNING: libMesh requires C++11 deleted function support" >&2;} + have_cxx_all=no +fi - template < int N > - struct answer - { - static constexpr int value = N; - }; - answer<1> f(int&) { return answer<1>(); } - answer<2> f(const int&) { return answer<2>(); } - answer<3> f(int&&) { return answer<3>(); } + have_cxx11_defaulted_functions=no - void - test() - { - int i = 0; - const int c = 0; - static_assert(decltype(f(i))::value == 1, ""); - static_assert(decltype(f(c))::value == 2, ""); - static_assert(decltype(f(0))::value == 3, ""); - } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for C++11 defaulted functions support" >&5 +printf %s "checking for C++11 defaulted functions support... " >&6; } + ac_ext=cpp +ac_cpp='$CXXCPP $CPPFLAGS' +ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_cxx_compiler_gnu - } - namespace test_uniform_initialization - { + old_CXXFLAGS="$CXXFLAGS" + CXXFLAGS="$CXXFLAGS $libmesh_CXXFLAGS" - struct test + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + + class Foo { - static const int zero {}; - static const int one {1}; + Foo(const Foo &) = default; + ~Foo(); }; + Foo::~Foo() = default; - static_assert(test::zero == 0, ""); - static_assert(test::one == 1, ""); +int +main (void) +{ - } - namespace test_lambdas - { + ; + return 0; +} +_ACEOF +if ac_fn_cxx_try_compile "$LINENO" +then : - void - test1() - { - auto lambda1 = [](){}; - auto lambda2 = lambda1; - lambda1(); - lambda2(); - } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +printf "%s\n" "yes" >&6; } - int - test2() - { - auto a = [](int i, int j){ return i + j; }(1, 2); - auto b = []() -> int { return '0'; }(); - auto c = [=](){ return a + b; }(); - auto d = [&](){ return c; }(); - auto e = [a, &b](int x) mutable { - const auto identity = [](int y){ return y; }; - for (auto i = 0; i < a; ++i) - a += b--; - return x + identity(a + b); - }(0); - return a + b + c + d + e; - } +printf "%s\n" "#define HAVE_CXX11_DEFAULTED_FUNCTIONS 1" >>confdefs.h - int - test3() - { - const auto nullary = [](){ return 0; }; - const auto unary = [](int x){ return x; }; - using nullary_t = decltype(nullary); - using unary_t = decltype(unary); - const auto higher1st = [](nullary_t f){ return f(); }; - const auto higher2nd = [unary](nullary_t f1){ - return [unary, f1](unary_t f2){ return f2(unary(f1())); }; - }; - return higher1st(nullary) + higher2nd(nullary)(unary); - } + have_cxx11_defaulted_functions=yes - } +else case e in #( + e) + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } + ;; +esac +fi +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext - namespace test_variadic_templates - { + # Reset the flags + CXXFLAGS="$old_CXXFLAGS" + ac_ext=cpp +ac_cpp='$CXXCPP $CPPFLAGS' +ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_cxx_compiler_gnu - template - struct sum; - template - struct sum - { - static constexpr auto value = N0 + sum::value; - }; + if test x$have_cxx11_defaulted_functions == xyes; then + HAVE_CXX11_DEFAULTED_FUNCTIONS_TRUE= + HAVE_CXX11_DEFAULTED_FUNCTIONS_FALSE='#' +else + HAVE_CXX11_DEFAULTED_FUNCTIONS_TRUE='#' + HAVE_CXX11_DEFAULTED_FUNCTIONS_FALSE= +fi - template <> - struct sum<> - { - static constexpr auto value = 0; - }; - static_assert(sum<>::value == 0, ""); - static_assert(sum<1>::value == 1, ""); - static_assert(sum<23>::value == 23, ""); - static_assert(sum<1, 2>::value == 3, ""); - static_assert(sum<5, 5, 11>::value == 21, ""); - static_assert(sum<2, 3, 5, 7, 11, 13>::value == 41, ""); + if test "x$have_cxx11_defaulted_functions" != "xyes" +then : + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: libMesh requires C++11 defaulted function support" >&5 +printf "%s\n" "$as_me: WARNING: libMesh requires C++11 defaulted function support" >&2;} + have_cxx_all=no +fi - } - // http://stackoverflow.com/questions/13728184/template-aliases-and-sfinae - // Clang 3.1 fails with headers of libstd++ 4.8.3 when using std::function - // because of this. - namespace test_template_alias_sfinae - { + have_cxx11_nullptr=no - struct foo {}; + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for C++11 nullptr support" >&5 +printf %s "checking for C++11 nullptr support... " >&6; } + ac_ext=cpp +ac_cpp='$CXXCPP $CPPFLAGS' +ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_cxx_compiler_gnu - template - using member = typename T::member_type; - template - void func(...) {} + old_CXXFLAGS="$CXXFLAGS" + CXXFLAGS="$CXXFLAGS $libmesh_CXXFLAGS" - template - void func(member*) {} + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ - void test(); + #include + void f(int * pi) {} + void f(double * pd) {} + void f(std::nullptr_t nullp) {} - void test() { func(0); } +int +main (void) +{ - } + // would be ambiguous without void f(nullptr_t) + f(nullptr); -} // namespace cxx11 + ; + return 0; +} +_ACEOF +if ac_fn_cxx_try_compile "$LINENO" +then : -#endif // __cplusplus >= 201103L + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +printf "%s\n" "yes" >&6; } +printf "%s\n" "#define HAVE_CXX11_NULLPTR 1" >>confdefs.h + have_cxx11_nullptr=yes +else case e in #( + e) + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } + ;; +esac +fi +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext -// If the compiler admits that it is not ready for C++14, why torture it? -// Hopefully, this will speed up the test. + # Reset the flags + CXXFLAGS="$old_CXXFLAGS" + ac_ext=cpp +ac_cpp='$CXXCPP $CPPFLAGS' +ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_cxx_compiler_gnu -#ifndef __cplusplus -#error "This is not a C++ compiler" + if test x$have_cxx11_nullptr == xyes; then + HAVE_CXX11_NULLPTR_TRUE= + HAVE_CXX11_NULLPTR_FALSE='#' +else + HAVE_CXX11_NULLPTR_TRUE='#' + HAVE_CXX11_NULLPTR_FALSE= +fi -#elif __cplusplus < 201402L -#error "This is not a C++14 compiler" + if test "x$have_cxx11_nullptr" != "xyes" +then : + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: libMesh requires the C++11 nullptr keyword" >&5 +printf "%s\n" "$as_me: WARNING: libMesh requires the C++11 nullptr keyword" >&2;} + have_cxx_all=no +fi -#else -namespace cxx14 -{ + have_cxx11_final=no - namespace test_polymorphic_lambdas - { + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for C++11 'final' keyword support" >&5 +printf %s "checking for C++11 'final' keyword support... " >&6; } + ac_ext=cpp +ac_cpp='$CXXCPP $CPPFLAGS' +ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_cxx_compiler_gnu - int - test() + + old_CXXFLAGS="$CXXFLAGS" + CXXFLAGS="$CXXFLAGS $libmesh_CXXFLAGS" + + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + + // Test that a function can be declared final. + struct A { - const auto lambda = [](auto&&... args){ - const auto istiny = [](auto x){ - return (sizeof(x) == 1UL) ? 1 : 0; - }; - const int aretiny[] = { istiny(args)... }; - return aretiny[0]; - }; - return lambda(1, 1L, 1.0f, '1'); - } - - } - - namespace test_binary_literals - { - - constexpr auto ivii = 0b0000000000101010; - static_assert(ivii == 42, "wrong value"); - - } - - namespace test_generalized_constexpr - { + virtual void foo() final; + }; - template < typename CharT > - constexpr unsigned long - strlen_c(const CharT *const s) noexcept + // Test that a struct can be declared final. + struct B final : A { - auto length = 0UL; - for (auto p = s; *p; ++p) - ++length; - return length; - } + }; - static_assert(strlen_c("") == 0UL, ""); - static_assert(strlen_c("x") == 1UL, ""); - static_assert(strlen_c("test") == 4UL, ""); - static_assert(strlen_c("another\0test") == 7UL, ""); +int +main (void) +{ - } - namespace test_lambda_init_capture - { + ; + return 0; +} +_ACEOF +if ac_fn_cxx_try_compile "$LINENO" +then : - int - test() - { - auto x = 0; - const auto lambda1 = [a = x](int b){ return a + b; }; - const auto lambda2 = [a = lambda1(x)](){ return a; }; - return lambda2(); - } + have_cxx11_final=yes - } +else case e in #( + e) + have_cxx11_final=no + ;; +esac +fi +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext - namespace test_digit_separators - { + # Confirm that you cannot declare a non-virtual function 'final'. + if test "x$have_cxx11_final" != "xno" +then : - constexpr auto ten_million = 100'000'000; - static_assert(ten_million == 100000000, ""); + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ - } + struct A + { + // Error: non-virtual function cannot be final + void bar() final; + }; - namespace test_return_type_deduction - { +int +main (void) +{ - auto f(int& x) { return x; } - decltype(auto) g(int& x) { return x; } - template < typename T1, typename T2 > - struct is_same - { - static constexpr auto value = false; - }; + ; + return 0; +} +_ACEOF +if ac_fn_cxx_try_compile "$LINENO" +then : - template < typename T > - struct is_same - { - static constexpr auto value = true; - }; + # If this code compiles, 'final' is not working correctly. + have_cxx11_final=no - int - test() - { - auto x = 0; - static_assert(is_same::value, ""); - static_assert(is_same::value, ""); - return x; - } +else case e in #( + e) + have_cxx11_final=yes + ;; +esac +fi +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext - } +fi -} // namespace cxx14 + if test "x$have_cxx11_final" != "xno" +then : -#endif // __cplusplus >= 201402L + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + + struct A + { + virtual void foo() final; + }; + struct B : A + { + // Error: foo cannot be overridden as it's final in A + void foo(); + }; +int +main (void) +{ + ; + return 0; +} _ACEOF if ac_fn_cxx_try_compile "$LINENO" then : - eval $cachevar=yes + + # If this code compiles, 'final' is not working correctly. + have_cxx11_final=no + else case e in #( - e) eval $cachevar=no ;; -esac -fi -rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext ;; + e) + have_cxx11_final=yes + ;; esac fi -eval ac_res=\$$cachevar - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 -printf "%s\n" "$ac_res" >&6; } - if eval test x\$$cachevar = xyes -then : - ac_success=yes +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext + fi - if test x$ac_success = xno; then - for alternative in ${ax_cxx_compile_alternatives}; do - switch="-std=gnu++${alternative}" - cachevar=`printf "%s\n" "ax_cv_cxx_compile_cxx14_$switch" | sed "$as_sed_sh"` - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether $CXX supports C++14 features with $switch" >&5 -printf %s "checking whether $CXX supports C++14 features with $switch... " >&6; } -if eval test \${$cachevar+y} + if test "x$have_cxx11_final" != "xno" then : - printf %s "(cached) " >&6 -else case e in #( - e) ac_save_CXX="$CXX" - CXX="$CXX $switch" - cat confdefs.h - <<_ACEOF >conftest.$ac_ext + + cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ + struct A + { + }; -// If the compiler admits that it is not ready for C++11, why torture it? -// Hopefully, this will speed up the test. + // struct B is final + struct B final : A + { + }; -#ifndef __cplusplus + // Error: B is final + struct C : B + { + }; -#error "This is not a C++ compiler" +int +main (void) +{ -#elif __cplusplus < 201103L -#error "This is not a C++11 compiler" + ; + return 0; +} +_ACEOF +if ac_fn_cxx_try_compile "$LINENO" +then : -#else + # If this code compiles, 'final' is not working correctly. + have_cxx11_final=no -namespace cxx11 -{ +else case e in #( + e) + have_cxx11_final=yes + ;; +esac +fi +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext - namespace test_static_assert - { +fi - template - struct check - { - static_assert(sizeof(int) <= sizeof(T), "not big enough"); - }; + # If the flag is still 'yes' after all the tests, set the #define. + if test "x$have_cxx11_final" = "xyes" +then : - } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +printf "%s\n" "yes" >&6; } - namespace test_final_override - { +printf "%s\n" "#define HAVE_CXX11_FINAL 1" >>confdefs.h - struct Base - { - virtual ~Base() {} - virtual void f() {} - }; - struct Derived : public Base - { - virtual ~Derived() override {} - virtual void f() override {} - }; +else case e in #( + e) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } ;; +esac +fi - } + # Reset the flags + CXXFLAGS="$old_CXXFLAGS" + ac_ext=cpp +ac_cpp='$CXXCPP $CPPFLAGS' +ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_cxx_compiler_gnu - namespace test_double_right_angle_brackets - { - template < typename T > - struct check {}; + if test x$have_cxx11_final == xyes; then + HAVE_CXX11_FINAL_TRUE= + HAVE_CXX11_FINAL_FALSE='#' +else + HAVE_CXX11_FINAL_TRUE='#' + HAVE_CXX11_FINAL_FALSE= +fi - typedef check single_type; - typedef check> double_type; - typedef check>> triple_type; - typedef check>>> quadruple_type; - } + if test "x$have_cxx11_final" != "xyes" +then : + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: libMesh requires the C++11 final keyword" >&5 +printf "%s\n" "$as_me: WARNING: libMesh requires the C++11 final keyword" >&2;} + have_cxx_all=no +fi - namespace test_decltype - { - int - f() - { - int a = 1; - decltype(a) b = 2; - return a + b; - } + have_cxx11_decltype=no - } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for C++11 decltype support" >&5 +printf %s "checking for C++11 decltype support... " >&6; } + ac_ext=cpp +ac_cpp='$CXXCPP $CPPFLAGS' +ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_cxx_compiler_gnu - namespace test_type_deduction - { - template < typename T1, typename T2 > - struct is_same - { - static const bool value = false; - }; + old_CXXFLAGS="$CXXFLAGS" + CXXFLAGS="$CXXFLAGS $libmesh_CXXFLAGS" - template < typename T > - struct is_same - { - static const bool value = true; - }; + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ - template < typename T1, typename T2 > - auto - add(T1 a1, T2 a2) -> decltype(a1 + a2) - { - return a1 + a2; - } + #include - int - test(const int c, volatile int v) - { - static_assert(is_same::value == true, ""); - static_assert(is_same::value == false, ""); - static_assert(is_same::value == false, ""); - auto ac = c; - auto av = v; - auto sumi = ac + av + 'x'; - auto sumf = ac + av + 1.0; - static_assert(is_same::value == true, ""); - static_assert(is_same::value == true, ""); - static_assert(is_same::value == true, ""); - static_assert(is_same::value == false, ""); - static_assert(is_same::value == true, ""); - return (sumf > 0.0) ? sumi : add(c, v); - } +int +main (void) +{ - } + int a; + decltype(a) b; + std::vector vec(10); + for (auto i = decltype(vec.size())(0); i < vec.size(); ++i) + vec[i] += i; - namespace test_noexcept - { + ; + return 0; +} +_ACEOF +if ac_fn_cxx_try_compile "$LINENO" +then : - int f() { return 0; } - int g() noexcept { return 0; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +printf "%s\n" "yes" >&6; } - static_assert(noexcept(f()) == false, ""); - static_assert(noexcept(g()) == true, ""); +printf "%s\n" "#define HAVE_CXX11_DECLTYPE 1" >>confdefs.h - } + have_cxx11_decltype=yes - namespace test_constexpr - { +else case e in #( + e) + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } + ;; +esac +fi +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext - template < typename CharT > - unsigned long constexpr - strlen_c_r(const CharT *const s, const unsigned long acc) noexcept - { - return *s ? strlen_c_r(s + 1, acc + 1) : acc; - } + # Reset the flags + CXXFLAGS="$old_CXXFLAGS" + ac_ext=cpp +ac_cpp='$CXXCPP $CPPFLAGS' +ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_cxx_compiler_gnu - template < typename CharT > - unsigned long constexpr - strlen_c(const CharT *const s) noexcept - { - return strlen_c_r(s, 0UL); - } - static_assert(strlen_c("") == 0UL, ""); - static_assert(strlen_c("1") == 1UL, ""); - static_assert(strlen_c("example") == 7UL, ""); - static_assert(strlen_c("another\0example") == 7UL, ""); + if test x$have_cxx11_decltype == xyes; then + HAVE_CXX11_DECLTYPE_TRUE= + HAVE_CXX11_DECLTYPE_FALSE='#' +else + HAVE_CXX11_DECLTYPE_TRUE='#' + HAVE_CXX11_DECLTYPE_FALSE= +fi - } - namespace test_rvalue_references - { + if test "x$have_cxx11_decltype" != "xyes" +then : + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: libMesh requires the C++11 decltype keyword" >&5 +printf "%s\n" "$as_me: WARNING: libMesh requires the C++11 decltype keyword" >&2;} + have_cxx_all=no +fi - template < int N > - struct answer - { - static constexpr int value = N; - }; - answer<1> f(int&) { return answer<1>(); } - answer<2> f(const int&) { return answer<2>(); } - answer<3> f(int&&) { return answer<3>(); } + have_cxx11_begin_end=no - void - test() - { - int i = 0; - const int c = 0; - static_assert(decltype(f(i))::value == 1, ""); - static_assert(decltype(f(c))::value == 2, ""); - static_assert(decltype(f(0))::value == 3, ""); - } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for C++11 std::begin/end support for arrays" >&5 +printf %s "checking for C++11 std::begin/end support for arrays... " >&6; } + ac_ext=cpp +ac_cpp='$CXXCPP $CPPFLAGS' +ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_cxx_compiler_gnu - } - namespace test_uniform_initialization - { + old_CXXFLAGS="$CXXFLAGS" + CXXFLAGS="$CXXFLAGS $libmesh_CXXFLAGS" - struct test - { - static const int zero {}; - static const int one {1}; - }; + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ - static_assert(test::zero == 0, ""); - static_assert(test::one == 1, ""); + #include + #include - } +int +main (void) +{ - namespace test_lambdas - { + int array[5] = {3, 1, 5, 2, 4}; + std::sort(std::begin(array), std::end(array)); - void - test1() - { - auto lambda1 = [](){}; - auto lambda2 = lambda1; - lambda1(); - lambda2(); - } + ; + return 0; +} +_ACEOF +if ac_fn_cxx_try_compile "$LINENO" +then : - int - test2() - { - auto a = [](int i, int j){ return i + j; }(1, 2); - auto b = []() -> int { return '0'; }(); - auto c = [=](){ return a + b; }(); - auto d = [&](){ return c; }(); - auto e = [a, &b](int x) mutable { - const auto identity = [](int y){ return y; }; - for (auto i = 0; i < a; ++i) - a += b--; - return x + identity(a + b); - }(0); - return a + b + c + d + e; - } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +printf "%s\n" "yes" >&6; } + have_cxx11_begin_end=yes - int - test3() - { - const auto nullary = [](){ return 0; }; - const auto unary = [](int x){ return x; }; - using nullary_t = decltype(nullary); - using unary_t = decltype(unary); - const auto higher1st = [](nullary_t f){ return f(); }; - const auto higher2nd = [unary](nullary_t f1){ - return [unary, f1](unary_t f2){ return f2(unary(f1())); }; - }; - return higher1st(nullary) + higher2nd(nullary)(unary); - } +else case e in #( + e) + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } + ;; +esac +fi +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext - } - - namespace test_variadic_templates - { + CXXFLAGS="$old_CXXFLAGS" + ac_ext=cpp +ac_cpp='$CXXCPP $CPPFLAGS' +ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_cxx_compiler_gnu - template - struct sum; - template - struct sum - { - static constexpr auto value = N0 + sum::value; - }; + if test "x$have_cxx11_begin_end" != "xyes" +then : + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: libMesh requires C++11 std::begin/end support" >&5 +printf "%s\n" "$as_me: WARNING: libMesh requires C++11 std::begin/end support" >&2;} + have_cxx_all=no +fi - template <> - struct sum<> - { - static constexpr auto value = 0; - }; - static_assert(sum<>::value == 0, ""); - static_assert(sum<1>::value == 1, ""); - static_assert(sum<23>::value == 23, ""); - static_assert(sum<1, 2>::value == 3, ""); - static_assert(sum<5, 5, 11>::value == 21, ""); - static_assert(sum<2, 3, 5, 7, 11, 13>::value == 41, ""); + have_cxx11_container_erase=no - } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for C++11 std container erase() functions returning iterators" >&5 +printf %s "checking for C++11 std container erase() functions returning iterators... " >&6; } + ac_ext=cpp +ac_cpp='$CXXCPP $CPPFLAGS' +ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_cxx_compiler_gnu - // http://stackoverflow.com/questions/13728184/template-aliases-and-sfinae - // Clang 3.1 fails with headers of libstd++ 4.8.3 when using std::function - // because of this. - namespace test_template_alias_sfinae - { - struct foo {}; + old_CXXFLAGS="$CXXFLAGS" + CXXFLAGS="$CXXFLAGS $libmesh_CXXFLAGS" - template - using member = typename T::member_type; + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ - template - void func(...) {} + #include + #include - template - void func(member*) {} +int +main (void) +{ - void test(); + { + std::map m; + m.insert(std::make_pair(1,2)); + std::map::iterator it = m.erase(m.begin()); + } + { + std::set s; + s.insert(1); + std::set::iterator it = s.erase(s.begin()); + } + { + std::multimap m; + m.insert(std::make_pair(1,2)); + std::multimap::iterator it = m.erase(m.begin()); + } + { + std::multiset s; + s.insert(1); + std::multiset::iterator it = s.erase(s.begin()); + } - void test() { func(0); } + ; + return 0; +} +_ACEOF +if ac_fn_cxx_try_compile "$LINENO" +then : - } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +printf "%s\n" "yes" >&6; } + have_cxx11_container_erase=yes -} // namespace cxx11 +else case e in #( + e) + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } + ;; +esac +fi +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext -#endif // __cplusplus >= 201103L + CXXFLAGS="$old_CXXFLAGS" + ac_ext=cpp +ac_cpp='$CXXCPP $CPPFLAGS' +ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_cxx_compiler_gnu + if test "x$have_cxx11_container_erase" != "xyes" +then : + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: libMesh requires C++11 support for std container erase() functions returning iterators" >&5 +printf "%s\n" "$as_me: WARNING: libMesh requires C++11 support for std container erase() functions returning iterators" >&2;} + have_cxx_all=no +fi -// If the compiler admits that it is not ready for C++14, why torture it? -// Hopefully, this will speed up the test. + have_cxx11_container_emplace=no -#ifndef __cplusplus + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for C++11 std container emplace() functions" >&5 +printf %s "checking for C++11 std container emplace() functions... " >&6; } + ac_ext=cpp +ac_cpp='$CXXCPP $CPPFLAGS' +ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_cxx_compiler_gnu -#error "This is not a C++ compiler" -#elif __cplusplus < 201402L + old_CXXFLAGS="$CXXFLAGS" + CXXFLAGS="$CXXFLAGS $libmesh_CXXFLAGS" -#error "This is not a C++14 compiler" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ -#else + #include + #include + #include -namespace cxx14 +int +main (void) { - namespace test_polymorphic_lambdas - { - - int - test() { - const auto lambda = [](auto&&... args){ - const auto istiny = [](auto x){ - return (sizeof(x) == 1UL) ? 1 : 0; - }; - const int aretiny[] = { istiny(args)... }; - return aretiny[0]; - }; - return lambda(1, 1L, 1.0f, '1'); + std::map m; + m.emplace(1,2); + m.emplace_hint(m.begin(), 0, 3); + } + { + std::set s; + s.emplace(1); + s.emplace_hint(s.begin(), 0); + } + { + std::multimap m; + m.emplace(1,2); + m.emplace_hint(m.begin(), 0, 3); + } + { + std::multiset s; + s.emplace(1); + s.emplace_hint(s.begin(), 0); + } + { + std::vector v; + v.emplace(v.begin(), 0); + v.emplace_back(1); } - } + ; + return 0; +} +_ACEOF +if ac_fn_cxx_try_compile "$LINENO" +then : - namespace test_binary_literals - { + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +printf "%s\n" "yes" >&6; } + have_cxx11_container_emplace=yes - constexpr auto ivii = 0b0000000000101010; - static_assert(ivii == 42, "wrong value"); +else case e in #( + e) + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } + ;; +esac +fi +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext - } + CXXFLAGS="$old_CXXFLAGS" + ac_ext=cpp +ac_cpp='$CXXCPP $CPPFLAGS' +ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_cxx_compiler_gnu - namespace test_generalized_constexpr - { - template < typename CharT > - constexpr unsigned long - strlen_c(const CharT *const s) noexcept - { - auto length = 0UL; - for (auto p = s; *p; ++p) - ++length; - return length; - } + if test "x$have_cxx11_container_emplace" != "xyes" +then : + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: libMesh requires C++11 support for std container emplace() functions" >&5 +printf "%s\n" "$as_me: WARNING: libMesh requires C++11 support for std container emplace() functions" >&2;} + have_cxx_all=no +fi - static_assert(strlen_c("") == 0UL, ""); - static_assert(strlen_c("x") == 1UL, ""); - static_assert(strlen_c("test") == 4UL, ""); - static_assert(strlen_c("another\0test") == 7UL, ""); - } + have_cxx11_iota=no - namespace test_lambda_init_capture - { + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for C++11 std::iota algorithm" >&5 +printf %s "checking for C++11 std::iota algorithm... " >&6; } + ac_ext=cpp +ac_cpp='$CXXCPP $CPPFLAGS' +ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_cxx_compiler_gnu - int - test() - { - auto x = 0; - const auto lambda1 = [a = x](int b){ return a + b; }; - const auto lambda2 = [a = lambda1(x)](){ return a; }; - return lambda2(); - } - } + old_CXXFLAGS="$CXXFLAGS" + CXXFLAGS="$CXXFLAGS $libmesh_CXXFLAGS" - namespace test_digit_separators - { + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ - constexpr auto ten_million = 100'000'000; - static_assert(ten_million == 100000000, ""); + #include + #include - } +int +main (void) +{ - namespace test_return_type_deduction - { + std::vector v(10); + std::iota(v.begin(), v.end(), 0); - auto f(int& x) { return x; } - decltype(auto) g(int& x) { return x; } + ; + return 0; +} +_ACEOF +if ac_fn_cxx_try_compile "$LINENO" +then : - template < typename T1, typename T2 > - struct is_same - { - static constexpr auto value = false; - }; + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +printf "%s\n" "yes" >&6; } + have_cxx11_iota=yes - template < typename T > - struct is_same - { - static constexpr auto value = true; - }; +else case e in #( + e) + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } + ;; +esac +fi +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext - int - test() - { - auto x = 0; - static_assert(is_same::value, ""); - static_assert(is_same::value, ""); - return x; - } + CXXFLAGS="$old_CXXFLAGS" + ac_ext=cpp +ac_cpp='$CXXCPP $CPPFLAGS' +ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_cxx_compiler_gnu - } -} // namespace cxx14 + if test "x$have_cxx11_iota" != "xyes" +then : + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: libMesh requires C++11 support for std::iota" >&5 +printf "%s\n" "$as_me: WARNING: libMesh requires C++11 support for std::iota" >&2;} + have_cxx_all=no +fi -#endif // __cplusplus >= 201402L + have_cxx11_vector_data=no + + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for C++11 std::vector::data() API" >&5 +printf %s "checking for C++11 std::vector::data() API... " >&6; } + ac_ext=cpp +ac_cpp='$CXXCPP $CPPFLAGS' +ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_cxx_compiler_gnu + + + old_CXXFLAGS="$CXXFLAGS" + CXXFLAGS="$CXXFLAGS $libmesh_CXXFLAGS" + + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + + #include +int +main (void) +{ + + std::vector v(10); + int * begin = v.data(); + ; + return 0; +} _ACEOF if ac_fn_cxx_try_compile "$LINENO" then : - eval $cachevar=yes + + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +printf "%s\n" "yes" >&6; } + have_cxx11_vector_data=yes + else case e in #( - e) eval $cachevar=no ;; + e) + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } + ;; esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext - CXX="$ac_save_CXX" ;; -esac -fi -eval ac_res=\$$cachevar - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 -printf "%s\n" "$ac_res" >&6; } - if eval test x\$$cachevar = xyes; then - CXX="$CXX $switch" - if test -n "$CXXCPP" ; then - CXXCPP="$CXXCPP $switch" - fi - ac_success=yes - break - fi - done - fi - if test x$ac_success = xno; then - for alternative in ${ax_cxx_compile_alternatives}; do - for switch in -std=c++${alternative} +std=c++${alternative} "-h std=c++${alternative}"; do - cachevar=`printf "%s\n" "ax_cv_cxx_compile_cxx14_$switch" | sed "$as_sed_sh"` - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether $CXX supports C++14 features with $switch" >&5 -printf %s "checking whether $CXX supports C++14 features with $switch... " >&6; } -if eval test \${$cachevar+y} + CXXFLAGS="$old_CXXFLAGS" + ac_ext=cpp +ac_cpp='$CXXCPP $CPPFLAGS' +ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_cxx_compiler_gnu + + + if test "x$have_cxx11_vector_data" != "xyes" then : - printf %s "(cached) " >&6 -else case e in #( - e) ac_save_CXX="$CXX" - CXX="$CXX $switch" - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: libMesh requires C++11 support for std::vector::data()" >&5 +printf "%s\n" "$as_me: WARNING: libMesh requires C++11 support for std::vector::data()" >&2;} + have_cxx_all=no +fi -// If the compiler admits that it is not ready for C++11, why torture it? -// Hopefully, this will speed up the test. + have_cxx11_shared_ptr=no -#ifndef __cplusplus + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for C++11 std::shared_ptr support" >&5 +printf %s "checking for C++11 std::shared_ptr support... " >&6; } + ac_ext=cpp +ac_cpp='$CXXCPP $CPPFLAGS' +ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_cxx_compiler_gnu -#error "This is not a C++ compiler" -#elif __cplusplus < 201103L + # Save any original value that CXXFLAGS had + old_CXXFLAGS="$CXXFLAGS" + CXXFLAGS="$CXXFLAGS $libmesh_CXXFLAGS" -#error "This is not a C++11 compiler" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ -#else + #include -namespace cxx11 +int +main (void) { - namespace test_static_assert - { - - template - struct check - { - static_assert(sizeof(int) <= sizeof(T), "not big enough"); - }; + std::shared_ptr p1; + std::shared_ptr p2 (new int); + std::shared_ptr p3 (p2); + p3.reset(new int); + p3 = std::make_shared(5); - } + ; + return 0; +} +_ACEOF +if ac_fn_cxx_try_compile "$LINENO" +then : - namespace test_final_override - { + have_cxx11_shared_ptr=yes + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +printf "%s\n" "yes" >&6; } - struct Base - { - virtual ~Base() {} - virtual void f() {} - }; +else case e in #( + e) + have_cxx11_shared_ptr=no + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } + ;; +esac +fi +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext - struct Derived : public Base - { - virtual ~Derived() override {} - virtual void f() override {} - }; + if test "x$have_cxx11_shared_ptr" = "xyes" +then : - } +printf "%s\n" "#define HAVE_CXX11_SHARED_PTR 1" >>confdefs.h - namespace test_double_right_angle_brackets - { +fi - template < typename T > - struct check {}; + # Reset the flags + CXXFLAGS="$old_CXXFLAGS" + ac_ext=cpp +ac_cpp='$CXXCPP $CPPFLAGS' +ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_cxx_compiler_gnu - typedef check single_type; - typedef check> double_type; - typedef check>> triple_type; - typedef check>>> quadruple_type; - } + if test x$have_cxx11_shared_ptr == xyes; then + HAVE_CXX11_SHARED_PTR_TRUE= + HAVE_CXX11_SHARED_PTR_FALSE='#' +else + HAVE_CXX11_SHARED_PTR_TRUE='#' + HAVE_CXX11_SHARED_PTR_FALSE= +fi - namespace test_decltype - { - int - f() - { - int a = 1; - decltype(a) b = 2; - return a + b; - } + if test "x$have_cxx11_shared_ptr" != "xyes" +then : + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: libMesh requires C++11 support for std::shared_ptr" >&5 +printf "%s\n" "$as_me: WARNING: libMesh requires C++11 support for std::shared_ptr" >&2;} + have_cxx_all=no +fi - } - namespace test_type_deduction - { - - template < typename T1, typename T2 > - struct is_same - { - static const bool value = false; - }; - - template < typename T > - struct is_same - { - static const bool value = true; - }; - - template < typename T1, typename T2 > - auto - add(T1 a1, T2 a2) -> decltype(a1 + a2) - { - return a1 + a2; - } - - int - test(const int c, volatile int v) - { - static_assert(is_same::value == true, ""); - static_assert(is_same::value == false, ""); - static_assert(is_same::value == false, ""); - auto ac = c; - auto av = v; - auto sumi = ac + av + 'x'; - auto sumf = ac + av + 1.0; - static_assert(is_same::value == true, ""); - static_assert(is_same::value == true, ""); - static_assert(is_same::value == true, ""); - static_assert(is_same::value == false, ""); - static_assert(is_same::value == true, ""); - return (sumf > 0.0) ? sumi : add(c, v); - } - - } - - namespace test_noexcept - { - - int f() { return 0; } - int g() noexcept { return 0; } - - static_assert(noexcept(f()) == false, ""); - static_assert(noexcept(g()) == true, ""); - - } - - namespace test_constexpr - { - - template < typename CharT > - unsigned long constexpr - strlen_c_r(const CharT *const s, const unsigned long acc) noexcept - { - return *s ? strlen_c_r(s + 1, acc + 1) : acc; - } - - template < typename CharT > - unsigned long constexpr - strlen_c(const CharT *const s) noexcept - { - return strlen_c_r(s, 0UL); - } - - static_assert(strlen_c("") == 0UL, ""); - static_assert(strlen_c("1") == 1UL, ""); - static_assert(strlen_c("example") == 7UL, ""); - static_assert(strlen_c("another\0example") == 7UL, ""); - - } - - namespace test_rvalue_references - { - - template < int N > - struct answer - { - static constexpr int value = N; - }; - - answer<1> f(int&) { return answer<1>(); } - answer<2> f(const int&) { return answer<2>(); } - answer<3> f(int&&) { return answer<3>(); } - - void - test() - { - int i = 0; - const int c = 0; - static_assert(decltype(f(i))::value == 1, ""); - static_assert(decltype(f(c))::value == 2, ""); - static_assert(decltype(f(0))::value == 3, ""); - } - - } - - namespace test_uniform_initialization - { - - struct test - { - static const int zero {}; - static const int one {1}; - }; - - static_assert(test::zero == 0, ""); - static_assert(test::one == 1, ""); - - } - - namespace test_lambdas - { - - void - test1() - { - auto lambda1 = [](){}; - auto lambda2 = lambda1; - lambda1(); - lambda2(); - } - - int - test2() - { - auto a = [](int i, int j){ return i + j; }(1, 2); - auto b = []() -> int { return '0'; }(); - auto c = [=](){ return a + b; }(); - auto d = [&](){ return c; }(); - auto e = [a, &b](int x) mutable { - const auto identity = [](int y){ return y; }; - for (auto i = 0; i < a; ++i) - a += b--; - return x + identity(a + b); - }(0); - return a + b + c + d + e; - } - - int - test3() - { - const auto nullary = [](){ return 0; }; - const auto unary = [](int x){ return x; }; - using nullary_t = decltype(nullary); - using unary_t = decltype(unary); - const auto higher1st = [](nullary_t f){ return f(); }; - const auto higher2nd = [unary](nullary_t f1){ - return [unary, f1](unary_t f2){ return f2(unary(f1())); }; - }; - return higher1st(nullary) + higher2nd(nullary)(unary); - } - - } - - namespace test_variadic_templates - { - - template - struct sum; - - template - struct sum - { - static constexpr auto value = N0 + sum::value; - }; - - template <> - struct sum<> - { - static constexpr auto value = 0; - }; - - static_assert(sum<>::value == 0, ""); - static_assert(sum<1>::value == 1, ""); - static_assert(sum<23>::value == 23, ""); - static_assert(sum<1, 2>::value == 3, ""); - static_assert(sum<5, 5, 11>::value == 21, ""); - static_assert(sum<2, 3, 5, 7, 11, 13>::value == 41, ""); - - } - - // http://stackoverflow.com/questions/13728184/template-aliases-and-sfinae - // Clang 3.1 fails with headers of libstd++ 4.8.3 when using std::function - // because of this. - namespace test_template_alias_sfinae - { - - struct foo {}; - - template - using member = typename T::member_type; - - template - void func(...) {} - - template - void func(member*) {} - - void test(); - - void test() { func(0); } - - } - -} // namespace cxx11 - -#endif // __cplusplus >= 201103L - - - - -// If the compiler admits that it is not ready for C++14, why torture it? -// Hopefully, this will speed up the test. - -#ifndef __cplusplus - -#error "This is not a C++ compiler" - -#elif __cplusplus < 201402L - -#error "This is not a C++14 compiler" - -#else - -namespace cxx14 -{ - - namespace test_polymorphic_lambdas - { - - int - test() - { - const auto lambda = [](auto&&... args){ - const auto istiny = [](auto x){ - return (sizeof(x) == 1UL) ? 1 : 0; - }; - const int aretiny[] = { istiny(args)... }; - return aretiny[0]; - }; - return lambda(1, 1L, 1.0f, '1'); - } - - } - - namespace test_binary_literals - { - - constexpr auto ivii = 0b0000000000101010; - static_assert(ivii == 42, "wrong value"); - - } - - namespace test_generalized_constexpr - { - - template < typename CharT > - constexpr unsigned long - strlen_c(const CharT *const s) noexcept - { - auto length = 0UL; - for (auto p = s; *p; ++p) - ++length; - return length; - } - - static_assert(strlen_c("") == 0UL, ""); - static_assert(strlen_c("x") == 1UL, ""); - static_assert(strlen_c("test") == 4UL, ""); - static_assert(strlen_c("another\0test") == 7UL, ""); - - } - - namespace test_lambda_init_capture - { - - int - test() - { - auto x = 0; - const auto lambda1 = [a = x](int b){ return a + b; }; - const auto lambda2 = [a = lambda1(x)](){ return a; }; - return lambda2(); - } - - } - - namespace test_digit_separators - { - - constexpr auto ten_million = 100'000'000; - static_assert(ten_million == 100000000, ""); - - } - - namespace test_return_type_deduction - { - - auto f(int& x) { return x; } - decltype(auto) g(int& x) { return x; } - - template < typename T1, typename T2 > - struct is_same - { - static constexpr auto value = false; - }; - - template < typename T > - struct is_same - { - static constexpr auto value = true; - }; - - int - test() - { - auto x = 0; - static_assert(is_same::value, ""); - static_assert(is_same::value, ""); - return x; - } - - } - -} // namespace cxx14 - -#endif // __cplusplus >= 201402L - - - -_ACEOF -if ac_fn_cxx_try_compile "$LINENO" -then : - eval $cachevar=yes -else case e in #( - e) eval $cachevar=no ;; -esac -fi -rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext - CXX="$ac_save_CXX" ;; -esac -fi -eval ac_res=\$$cachevar - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 -printf "%s\n" "$ac_res" >&6; } - if eval test x\$$cachevar = xyes; then - CXX="$CXX $switch" - if test -n "$CXXCPP" ; then - CXXCPP="$CXXCPP $switch" - fi - ac_success=yes - break - fi - done - if test x$ac_success = xyes; then - break - fi - done - fi - ac_ext=cpp -ac_cpp='$CXXCPP $CPPFLAGS' -ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_cxx_compiler_gnu - - if test x$ax_cxx_compile_cxx14_required = xtrue; then - if test x$ac_success = xno; then - as_fn_error $? "*** A compiler with support for C++14 language features is required." "$LINENO" 5 - fi - fi - if test x$ac_success = xno; then - HAVE_CXX14=0 - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: No compiler with C++14 support was found" >&5 -printf "%s\n" "$as_me: No compiler with C++14 support was found" >&6;} - else - HAVE_CXX14=1 - -printf "%s\n" "#define HAVE_CXX14 1" >>confdefs.h - - fi - - ;; -esac -fi - if test "$HAVE_CXX14" = "1" -a $acsm_found_cxx -eq 0 -then : - - # If nothing fails later we're good to go - have_cxx_all=yes - - # -------------------------------------------------------------- - # Test for mandatory C++11 features, those which libMesh now requires - # for internal use. - # -------------------------------------------------------------- - - have_cxx11_auto=no - - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for C++11 auto keyword support" >&5 -printf %s "checking for C++11 auto keyword support... " >&6; } - ac_ext=cpp -ac_cpp='$CXXCPP $CPPFLAGS' -ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_cxx_compiler_gnu - - - old_CXXFLAGS="$CXXFLAGS" - CXXFLAGS="$CXXFLAGS $libmesh_CXXFLAGS" - - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - - -int -main (void) -{ - - int x = 5; - auto y = x; - - ; - return 0; -} -_ACEOF -if ac_fn_cxx_try_compile "$LINENO" -then : - - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -printf "%s\n" "yes" >&6; } - -printf "%s\n" "#define HAVE_CXX11_AUTO 1" >>confdefs.h - - have_cxx11_auto=yes - -else case e in #( - e) - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 -printf "%s\n" "no" >&6; } - ;; -esac -fi -rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext - - # Reset the flags - CXXFLAGS="$old_CXXFLAGS" - ac_ext=cpp -ac_cpp='$CXXCPP $CPPFLAGS' -ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_cxx_compiler_gnu - - - if test x$have_cxx11_auto == xyes; then - HAVE_CXX11_AUTO_TRUE= - HAVE_CXX11_AUTO_FALSE='#' -else - HAVE_CXX11_AUTO_TRUE='#' - HAVE_CXX11_AUTO_FALSE= -fi - - - if test "x$have_cxx11_auto" != "xyes" -then : - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: libMesh requires C++11 auto variable support" >&5 -printf "%s\n" "$as_me: WARNING: libMesh requires C++11 auto variable support" >&2;} - have_cxx_all=no -fi - - - have_cxx11_rangefor=no - - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for C++11 range-based for loop support" >&5 -printf %s "checking for C++11 range-based for loop support... " >&6; } - ac_ext=cpp -ac_cpp='$CXXCPP $CPPFLAGS' -ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_cxx_compiler_gnu - - - old_CXXFLAGS="$CXXFLAGS" - CXXFLAGS="$CXXFLAGS $libmesh_CXXFLAGS" - - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - - #include - #include - void print(const std::vector & v) - { - for (const int & x : v) - std::cout << x << ' '; - std::cout << std::endl; - } - -int -main (void) -{ - - std::vector v(3); - print(v); - - ; - return 0; -} -_ACEOF -if ac_fn_cxx_try_compile "$LINENO" -then : - - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -printf "%s\n" "yes" >&6; } - -printf "%s\n" "#define HAVE_CXX11_RANGEFOR 1" >>confdefs.h - - have_cxx11_rangefor=yes - -else case e in #( - e) - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 -printf "%s\n" "no" >&6; } - ;; -esac -fi -rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext - - # Reset the flags - CXXFLAGS="$old_CXXFLAGS" - ac_ext=cpp -ac_cpp='$CXXCPP $CPPFLAGS' -ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_cxx_compiler_gnu - - - if test x$have_cxx11_rangefor == xyes; then - HAVE_CXX11_RANGEFOR_TRUE= - HAVE_CXX11_RANGEFOR_FALSE='#' -else - HAVE_CXX11_RANGEFOR_TRUE='#' - HAVE_CXX11_RANGEFOR_FALSE= -fi - - - if test "x$have_cxx11_rangefor" != "xyes" -then : - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: libMesh requires C++11 ranged-for loop support" >&5 -printf "%s\n" "$as_me: WARNING: libMesh requires C++11 ranged-for loop support" >&2;} - have_cxx_all=no -fi - - # Technically we require uniform initialization, but this is the - # closest test we have - - have_cxx11_initializer_list=no - - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for C++11 initializer list support" >&5 -printf %s "checking for C++11 initializer list support... " >&6; } - ac_ext=cpp -ac_cpp='$CXXCPP $CPPFLAGS' -ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_cxx_compiler_gnu - - - old_CXXFLAGS="$CXXFLAGS" - CXXFLAGS="$CXXFLAGS $libmesh_CXXFLAGS" - - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - - #include - #include - #include - -int -main (void) -{ - - std::vector v = { "xyzzy", "plugh", "abracadabra" }; - - ; - return 0; -} -_ACEOF -if ac_fn_cxx_try_compile "$LINENO" -then : - - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -printf "%s\n" "yes" >&6; } - -printf "%s\n" "#define HAVE_CXX11_INITIALIZER_LIST 1" >>confdefs.h - - have_cxx11_initializer_list=yes - -else case e in #( - e) - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 -printf "%s\n" "no" >&6; } - ;; -esac -fi -rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext - - # Reset the flags - CXXFLAGS="$old_CXXFLAGS" - ac_ext=cpp -ac_cpp='$CXXCPP $CPPFLAGS' -ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_cxx_compiler_gnu - - - if test x$have_cxx11_initializer_list == xyes; then - HAVE_CXX11_INITIALIZER_LIST_TRUE= - HAVE_CXX11_INITIALIZER_LIST_FALSE='#' -else - HAVE_CXX11_INITIALIZER_LIST_TRUE='#' - HAVE_CXX11_INITIALIZER_LIST_FALSE= -fi - - - if test "x$have_cxx11_initializer_list" != "xyes" -then : - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: libMesh requires C++11 initializer list support" >&5 -printf "%s\n" "$as_me: WARNING: libMesh requires C++11 initializer list support" >&2;} - have_cxx_all=no -fi - - - have_cxx11_unique_ptr=no - - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for C++11 std::unique_ptr support" >&5 -printf %s "checking for C++11 std::unique_ptr support... " >&6; } - ac_ext=cpp -ac_cpp='$CXXCPP $CPPFLAGS' -ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_cxx_compiler_gnu - - - old_CXXFLAGS="$CXXFLAGS" - CXXFLAGS="$CXXFLAGS $libmesh_CXXFLAGS" - - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - - #include - #include - struct Foo - { - Foo() { std::cout << "Foo::Foo\n"; } - ~Foo() { std::cout << "Foo::~Foo\n"; } - }; - -int -main (void) -{ - - { - // up now owns a Foo - std::unique_ptr up(new Foo); - } // Foo deleted when up goes out of scope - - ; - return 0; -} -_ACEOF -if ac_fn_cxx_try_compile "$LINENO" -then : - - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -printf "%s\n" "yes" >&6; } - -printf "%s\n" "#define HAVE_CXX11_UNIQUE_PTR 1" >>confdefs.h - - have_cxx11_unique_ptr=yes - -else case e in #( - e) - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 -printf "%s\n" "no" >&6; } - ;; -esac -fi -rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext - - # Reset the flags - CXXFLAGS="$old_CXXFLAGS" - ac_ext=cpp -ac_cpp='$CXXCPP $CPPFLAGS' -ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_cxx_compiler_gnu - - - if test x$have_cxx11_unique_ptr == xyes; then - HAVE_CXX11_UNIQUE_PTR_TRUE= - HAVE_CXX11_UNIQUE_PTR_FALSE='#' -else - HAVE_CXX11_UNIQUE_PTR_TRUE='#' - HAVE_CXX11_UNIQUE_PTR_FALSE= -fi - - - if test "x$have_cxx11_unique_ptr" != "xyes" -then : - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: libMesh requires C++11 std::unique_ptr support" >&5 -printf "%s\n" "$as_me: WARNING: libMesh requires C++11 std::unique_ptr support" >&2;} - have_cxx_all=no -fi - - - have_cxx11_make_unique_workaround=no - - # This is a simple workaround for no std::make_unique in C++11: - # http://stackoverflow.com/questions/7038357/make-unique-and-perfect-forwarding - # Requires working rvalue references, std::forward, variadic - # templates, and std::unique_ptr from C++11. - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for C++11 std::make_unique workaround support" >&5 -printf %s "checking for C++11 std::make_unique workaround support... " >&6; } - ac_ext=cpp -ac_cpp='$CXXCPP $CPPFLAGS' -ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_cxx_compiler_gnu - - - old_CXXFLAGS="$CXXFLAGS" - CXXFLAGS="$CXXFLAGS $libmesh_CXXFLAGS" - - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - - #include - namespace local - { - template - std::unique_ptr make_unique(Args&&... args) - { - return std::unique_ptr(new T(std::forward(args)...)); - } - } - -int -main (void) -{ - - { - // Normally, you would use "auto" on the LHS here to avoid - // repeating the type name, but we are not testing auto here. - std::unique_ptr up = local::make_unique(42); - } // Foo deleted when up goes out of scope - - ; - return 0; -} -_ACEOF -if ac_fn_cxx_try_compile "$LINENO" -then : - - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -printf "%s\n" "yes" >&6; } - -printf "%s\n" "#define HAVE_CXX11_MAKE_UNIQUE_WORKAROUND 1" >>confdefs.h - - have_cxx11_make_unique_workaround=yes - -else case e in #( - e) - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 -printf "%s\n" "no" >&6; } - ;; -esac -fi -rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext - - # Reset the flags - CXXFLAGS="$old_CXXFLAGS" - ac_ext=cpp -ac_cpp='$CXXCPP $CPPFLAGS' -ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_cxx_compiler_gnu - - - if test x$have_cxx11_make_unique_workaround == xyes; then - HAVE_CXX11_MAKE_UNIQUE_WORKAROUND_TRUE= - HAVE_CXX11_MAKE_UNIQUE_WORKAROUND_FALSE='#' -else - HAVE_CXX11_MAKE_UNIQUE_WORKAROUND_TRUE='#' - HAVE_CXX11_MAKE_UNIQUE_WORKAROUND_FALSE= -fi - - - if test "x$have_cxx11_make_unique_workaround" != "xyes" -then : - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: libMesh requires C++11 variadic template support" >&5 -printf "%s\n" "$as_me: WARNING: libMesh requires C++11 variadic template support" >&2;} - have_cxx_all=no -fi - - - have_cxx11_tuple=no - - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for C++11 std::tuple support" >&5 -printf %s "checking for C++11 std::tuple support... " >&6; } - ac_ext=cpp -ac_cpp='$CXXCPP $CPPFLAGS' -ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_cxx_compiler_gnu - - - old_CXXFLAGS="$CXXFLAGS" - CXXFLAGS="$CXXFLAGS $libmesh_CXXFLAGS" - - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - - #include - #include - #include - -int -main (void) -{ - - // Test std::make_tuple - std::map> students; - students[0] = std::make_tuple(3.8, 'A', "Lisa Simpson"); - students[1] = std::make_tuple(2.9, 'C', "Milhouse Van Houten"); - - // Test templated std::get() method. - std::get<0>(students[0]); - std::get<1>(students[0]); - std::get<2>(students[0]); - - // Test std::tie and std::ignore which are declared in the header. - double gpa1; - std::string name1; - std::tie(gpa1, std::ignore, name1) = students[1]; - - // Test std::tuple_cat(), which combines together one or more - // objects, not necessarily tuples, into a single tuple. - auto t = std::tuple_cat(students[0], students[1], std::make_pair("foo", 42)); - - ; - return 0; -} -_ACEOF -if ac_fn_cxx_try_compile "$LINENO" -then : - - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -printf "%s\n" "yes" >&6; } - -printf "%s\n" "#define HAVE_CXX11_TUPLE 1" >>confdefs.h - - have_cxx11_tuple=yes - -else case e in #( - e) - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 -printf "%s\n" "no" >&6; } - ;; -esac -fi -rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext - - CXXFLAGS="$old_CXXFLAGS" - ac_ext=cpp -ac_cpp='$CXXCPP $CPPFLAGS' -ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_cxx_compiler_gnu - - - if test x$have_cxx11_tuple == xyes; then - HAVE_CXX11_TUPLE_TRUE= - HAVE_CXX11_TUPLE_FALSE='#' -else - HAVE_CXX11_TUPLE_TRUE='#' - HAVE_CXX11_TUPLE_FALSE= -fi - - - if test "x$have_cxx11_tuple" != "xyes" -then : - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: libMesh requires C++11 std::tuple support" >&5 -printf "%s\n" "$as_me: WARNING: libMesh requires C++11 std::tuple support" >&2;} - have_cxx_all=no -fi - - - have_cxx11_lambda=no - - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for C++11 lambda support" >&5 -printf %s "checking for C++11 lambda support... " >&6; } - ac_ext=cpp -ac_cpp='$CXXCPP $CPPFLAGS' -ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_cxx_compiler_gnu - - - old_CXXFLAGS="$CXXFLAGS" - CXXFLAGS="$CXXFLAGS $libmesh_CXXFLAGS" - - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - - // typedef for a function pointer that takes int and returns bool. - typedef bool (*FunctionPointer) (int); - - // A function that takes a pointer to a function that takes an int, - // calls it with the number 4, and returns the result. - bool f(FunctionPointer g) { return g(4); } - -int -main (void) -{ - - // Call f, passing it a lambda constructed on the fly instead - // of a standard function pointer. The result should be true. - f ( [](int x) { return x > 3; } ); - - ; - return 0; -} -_ACEOF -if ac_fn_cxx_try_compile "$LINENO" -then : - - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -printf "%s\n" "yes" >&6; } - -printf "%s\n" "#define HAVE_CXX11_LAMBDA 1" >>confdefs.h - - have_cxx11_lambda=yes - -else case e in #( - e) - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 -printf "%s\n" "no" >&6; } - ;; -esac -fi -rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext - - # Reset the flags - CXXFLAGS="$old_CXXFLAGS" - ac_ext=cpp -ac_cpp='$CXXCPP $CPPFLAGS' -ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_cxx_compiler_gnu - - - if test x$have_cxx11_lambda == xyes; then - HAVE_CXX11_LAMBDA_TRUE= - HAVE_CXX11_LAMBDA_FALSE='#' -else - HAVE_CXX11_LAMBDA_TRUE='#' - HAVE_CXX11_LAMBDA_FALSE= -fi - - - if test "x$have_cxx11_lambda" != "xyes" -then : - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: libMesh requires C++11 lambda support" >&5 -printf "%s\n" "$as_me: WARNING: libMesh requires C++11 lambda support" >&2;} - have_cxx_all=no -fi - - - have_cxx11_fixed_type_enum=no - - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for C++11 fixed type enumeration support" >&5 -printf %s "checking for C++11 fixed type enumeration support... " >&6; } - ac_ext=cpp -ac_cpp='$CXXCPP $CPPFLAGS' -ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_cxx_compiler_gnu - - - old_CXXFLAGS="$CXXFLAGS" - CXXFLAGS="$CXXFLAGS $libmesh_CXXFLAGS" - - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - - enum Fruit : int {APPLE=0, ORANGE=1}; - -int -main (void) -{ - - Fruit f = APPLE; - - ; - return 0; -} -_ACEOF -if ac_fn_cxx_try_compile "$LINENO" -then : - - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -printf "%s\n" "yes" >&6; } - -printf "%s\n" "#define HAVE_CXX11_FIXED_TYPE_ENUM 1" >>confdefs.h - - have_cxx11_fixed_type_enum=yes - -else case e in #( - e) - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 -printf "%s\n" "no" >&6; } - ;; -esac -fi -rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext - - CXXFLAGS="$old_CXXFLAGS" - ac_ext=cpp -ac_cpp='$CXXCPP $CPPFLAGS' -ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_cxx_compiler_gnu - - - if test x$have_cxx11_fixed_type_enum == xyes; then - HAVE_CXX11_FIXED_TYPE_ENUM_TRUE= - HAVE_CXX11_FIXED_TYPE_ENUM_FALSE='#' -else - HAVE_CXX11_FIXED_TYPE_ENUM_TRUE='#' - HAVE_CXX11_FIXED_TYPE_ENUM_FALSE= -fi - - - if test "x$have_cxx11_fixed_type_enum" != "xyes" -then : - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: libMesh requires C++11 fixed type enumeration support" >&5 -printf "%s\n" "$as_me: WARNING: libMesh requires C++11 fixed type enumeration support" >&2;} - have_cxx_all=no -fi - - - have_cxx11_fixed_type_enum_fwd=no - - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for C++11 fixed type enumeration forward declaration support" >&5 -printf %s "checking for C++11 fixed type enumeration forward declaration support... " >&6; } - ac_ext=cpp -ac_cpp='$CXXCPP $CPPFLAGS' -ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_cxx_compiler_gnu - - - old_CXXFLAGS="$CXXFLAGS" - CXXFLAGS="$CXXFLAGS $libmesh_CXXFLAGS" - - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - - #include - enum Foo : int; - void func(Foo f) { std::cout << f << std::endl; } - enum Foo : int { FOO0 = 0, FOO1 = 1, FOO2 = 2 }; - -int -main (void) -{ - - func(FOO0); - func(FOO1); - func(FOO2); - - ; - return 0; -} -_ACEOF -if ac_fn_cxx_try_compile "$LINENO" -then : - - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -printf "%s\n" "yes" >&6; } - -printf "%s\n" "#define HAVE_CXX11_FIXED_TYPE_ENUM_FWD 1" >>confdefs.h - - have_cxx11_fixed_type_enum_fwd=yes - -else case e in #( - e) - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 -printf "%s\n" "no" >&6; } - ;; -esac -fi -rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext - - CXXFLAGS="$old_CXXFLAGS" - ac_ext=cpp -ac_cpp='$CXXCPP $CPPFLAGS' -ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_cxx_compiler_gnu - - - if test x$have_cxx11_fixed_type_enum_fwd == xyes; then - HAVE_CXX11_FIXED_TYPE_ENUM_FWD_TRUE= - HAVE_CXX11_FIXED_TYPE_ENUM_FWD_FALSE='#' -else - HAVE_CXX11_FIXED_TYPE_ENUM_FWD_TRUE='#' - HAVE_CXX11_FIXED_TYPE_ENUM_FWD_FALSE= -fi - - - if test "x$have_cxx11_fixed_type_enum_fwd" != "xyes" -then : - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: libMesh requires C++11 fixed type enumeration forward declaration support" >&5 -printf "%s\n" "$as_me: WARNING: libMesh requires C++11 fixed type enumeration forward declaration support" >&2;} - have_cxx_all=no -fi - - - have_cxx11_override=no - - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for C++11 override keyword support" >&5 -printf %s "checking for C++11 override keyword support... " >&6; } - ac_ext=cpp -ac_cpp='$CXXCPP $CPPFLAGS' -ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_cxx_compiler_gnu - - - old_CXXFLAGS="$CXXFLAGS" - CXXFLAGS="$CXXFLAGS $libmesh_CXXFLAGS" - - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - - -int -main (void) -{ - - struct Base { - virtual void f() {} - }; - struct Child : public Base { - virtual void f() override {} - }; - - ; - return 0; -} -_ACEOF -if ac_fn_cxx_try_compile "$LINENO" -then : - - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -printf "%s\n" "yes" >&6; } - -printf "%s\n" "#define HAVE_CXX11_OVERRIDE 1" >>confdefs.h - - have_cxx11_override=yes - -else case e in #( - e) - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 -printf "%s\n" "no" >&6; } - ;; -esac -fi -rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext - - # Reset the flags - CXXFLAGS="$old_CXXFLAGS" - ac_ext=cpp -ac_cpp='$CXXCPP $CPPFLAGS' -ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_cxx_compiler_gnu - - - if test x$have_cxx11_override == xyes; then - HAVE_CXX11_OVERRIDE_TRUE= - HAVE_CXX11_OVERRIDE_FALSE='#' -else - HAVE_CXX11_OVERRIDE_TRUE='#' - HAVE_CXX11_OVERRIDE_FALSE= -fi - - - if test "x$have_cxx11_override" != "xyes" -then : - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: libMesh requires C++11 compiler support the override keyword" >&5 -printf "%s\n" "$as_me: WARNING: libMesh requires C++11 compiler support the override keyword" >&2;} - have_cxx_all=no -fi - - - have_cxx11_move_constructors=no - - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for C++11 move constructor support" >&5 -printf %s "checking for C++11 move constructor support... " >&6; } - ac_ext=cpp -ac_cpp='$CXXCPP $CPPFLAGS' -ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_cxx_compiler_gnu - - - old_CXXFLAGS="$CXXFLAGS" - CXXFLAGS="$CXXFLAGS $libmesh_CXXFLAGS" - - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - - #include - class move_constructable_base - { - public: - move_constructable_base() {} - move_constructable_base(move_constructable_base && other) noexcept {} - }; - class move_constructable : public move_constructable_base - { - public: - move_constructable() {} - move_constructable(move_constructable && other) noexcept : move_constructable_base(std::move(other)) {} - }; - -int -main (void) -{ - - move_constructable m1; - move_constructable m2(std::move(m1)); - - ; - return 0; -} -_ACEOF -if ac_fn_cxx_try_compile "$LINENO" -then : - - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -printf "%s\n" "yes" >&6; } - -printf "%s\n" "#define HAVE_CXX11_MOVE_CONSTRUCTORS 1" >>confdefs.h - - have_cxx11_move_constructors=yes - -else case e in #( - e) - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 -printf "%s\n" "no" >&6; } - ;; -esac -fi -rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext - - # Reset the flags - CXXFLAGS="$old_CXXFLAGS" - ac_ext=cpp -ac_cpp='$CXXCPP $CPPFLAGS' -ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_cxx_compiler_gnu - - - if test x$have_cxx11_move_constructors == xyes; then - HAVE_CXX11_MOVE_CONSTRUCTORS_TRUE= - HAVE_CXX11_MOVE_CONSTRUCTORS_FALSE='#' -else - HAVE_CXX11_MOVE_CONSTRUCTORS_TRUE='#' - HAVE_CXX11_MOVE_CONSTRUCTORS_FALSE= -fi - - - if test "x$have_cxx11_move_constructors" != "xyes" -then : - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: libMesh requires C++11 move constructor support" >&5 -printf "%s\n" "$as_me: WARNING: libMesh requires C++11 move constructor support" >&2;} - have_cxx_all=no -fi - - - have_cxx11_deleted_functions=no - - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for C++11 deleted functions support" >&5 -printf %s "checking for C++11 deleted functions support... " >&6; } - ac_ext=cpp -ac_cpp='$CXXCPP $CPPFLAGS' -ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_cxx_compiler_gnu - - - old_CXXFLAGS="$CXXFLAGS" - CXXFLAGS="$CXXFLAGS $libmesh_CXXFLAGS" - - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - - class Foo - { - Foo(const Foo &) = delete; - }; - -int -main (void) -{ - - - ; - return 0; -} -_ACEOF -if ac_fn_cxx_try_compile "$LINENO" -then : - - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -printf "%s\n" "yes" >&6; } - -printf "%s\n" "#define HAVE_CXX11_DELETED_FUNCTIONS 1" >>confdefs.h - - have_cxx11_deleted_functions=yes - -else case e in #( - e) - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 -printf "%s\n" "no" >&6; } - ;; -esac -fi -rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext - - # Reset the flags - CXXFLAGS="$old_CXXFLAGS" - ac_ext=cpp -ac_cpp='$CXXCPP $CPPFLAGS' -ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_cxx_compiler_gnu - - - if test x$have_cxx11_deleted_functions == xyes; then - HAVE_CXX11_DELETED_FUNCTIONS_TRUE= - HAVE_CXX11_DELETED_FUNCTIONS_FALSE='#' -else - HAVE_CXX11_DELETED_FUNCTIONS_TRUE='#' - HAVE_CXX11_DELETED_FUNCTIONS_FALSE= -fi - - - if test "x$have_cxx11_deleted_functions" != "xyes" -then : - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: libMesh requires C++11 deleted function support" >&5 -printf "%s\n" "$as_me: WARNING: libMesh requires C++11 deleted function support" >&2;} - have_cxx_all=no -fi - - - have_cxx11_defaulted_functions=no - - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for C++11 defaulted functions support" >&5 -printf %s "checking for C++11 defaulted functions support... " >&6; } - ac_ext=cpp -ac_cpp='$CXXCPP $CPPFLAGS' -ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_cxx_compiler_gnu - - - old_CXXFLAGS="$CXXFLAGS" - CXXFLAGS="$CXXFLAGS $libmesh_CXXFLAGS" - - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - - class Foo - { - Foo(const Foo &) = default; - ~Foo(); - }; - Foo::~Foo() = default; - -int -main (void) -{ - - - ; - return 0; -} -_ACEOF -if ac_fn_cxx_try_compile "$LINENO" -then : - - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -printf "%s\n" "yes" >&6; } - -printf "%s\n" "#define HAVE_CXX11_DEFAULTED_FUNCTIONS 1" >>confdefs.h - - have_cxx11_defaulted_functions=yes - -else case e in #( - e) - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 -printf "%s\n" "no" >&6; } - ;; -esac -fi -rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext - - # Reset the flags - CXXFLAGS="$old_CXXFLAGS" - ac_ext=cpp -ac_cpp='$CXXCPP $CPPFLAGS' -ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_cxx_compiler_gnu - - - if test x$have_cxx11_defaulted_functions == xyes; then - HAVE_CXX11_DEFAULTED_FUNCTIONS_TRUE= - HAVE_CXX11_DEFAULTED_FUNCTIONS_FALSE='#' -else - HAVE_CXX11_DEFAULTED_FUNCTIONS_TRUE='#' - HAVE_CXX11_DEFAULTED_FUNCTIONS_FALSE= -fi - - - if test "x$have_cxx11_defaulted_functions" != "xyes" -then : - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: libMesh requires C++11 defaulted function support" >&5 -printf "%s\n" "$as_me: WARNING: libMesh requires C++11 defaulted function support" >&2;} - have_cxx_all=no -fi - - - have_cxx11_nullptr=no - - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for C++11 nullptr support" >&5 -printf %s "checking for C++11 nullptr support... " >&6; } - ac_ext=cpp -ac_cpp='$CXXCPP $CPPFLAGS' -ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_cxx_compiler_gnu - - - old_CXXFLAGS="$CXXFLAGS" - CXXFLAGS="$CXXFLAGS $libmesh_CXXFLAGS" - - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - - #include - void f(int * pi) {} - void f(double * pd) {} - void f(std::nullptr_t nullp) {} - -int -main (void) -{ - - // would be ambiguous without void f(nullptr_t) - f(nullptr); - - ; - return 0; -} -_ACEOF -if ac_fn_cxx_try_compile "$LINENO" -then : - - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -printf "%s\n" "yes" >&6; } - -printf "%s\n" "#define HAVE_CXX11_NULLPTR 1" >>confdefs.h - - have_cxx11_nullptr=yes - -else case e in #( - e) - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 -printf "%s\n" "no" >&6; } - ;; -esac -fi -rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext - - # Reset the flags - CXXFLAGS="$old_CXXFLAGS" - ac_ext=cpp -ac_cpp='$CXXCPP $CPPFLAGS' -ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_cxx_compiler_gnu - - - if test x$have_cxx11_nullptr == xyes; then - HAVE_CXX11_NULLPTR_TRUE= - HAVE_CXX11_NULLPTR_FALSE='#' -else - HAVE_CXX11_NULLPTR_TRUE='#' - HAVE_CXX11_NULLPTR_FALSE= -fi - - - if test "x$have_cxx11_nullptr" != "xyes" -then : - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: libMesh requires the C++11 nullptr keyword" >&5 -printf "%s\n" "$as_me: WARNING: libMesh requires the C++11 nullptr keyword" >&2;} - have_cxx_all=no -fi - - - have_cxx11_final=no - - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for C++11 'final' keyword support" >&5 -printf %s "checking for C++11 'final' keyword support... " >&6; } - ac_ext=cpp -ac_cpp='$CXXCPP $CPPFLAGS' -ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_cxx_compiler_gnu - - - old_CXXFLAGS="$CXXFLAGS" - CXXFLAGS="$CXXFLAGS $libmesh_CXXFLAGS" - - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - - // Test that a function can be declared final. - struct A - { - virtual void foo() final; - }; - - // Test that a struct can be declared final. - struct B final : A - { - }; - -int -main (void) -{ - - - ; - return 0; -} -_ACEOF -if ac_fn_cxx_try_compile "$LINENO" -then : - - have_cxx11_final=yes - -else case e in #( - e) - have_cxx11_final=no - ;; -esac -fi -rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext - - # Confirm that you cannot declare a non-virtual function 'final'. - if test "x$have_cxx11_final" != "xno" -then : - - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - - struct A - { - // Error: non-virtual function cannot be final - void bar() final; - }; - -int -main (void) -{ - - - ; - return 0; -} -_ACEOF -if ac_fn_cxx_try_compile "$LINENO" -then : - - # If this code compiles, 'final' is not working correctly. - have_cxx11_final=no - -else case e in #( - e) - have_cxx11_final=yes - ;; -esac -fi -rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext - -fi - - if test "x$have_cxx11_final" != "xno" -then : - - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - - struct A - { - virtual void foo() final; - }; - struct B : A - { - // Error: foo cannot be overridden as it's final in A - void foo(); - }; - -int -main (void) -{ - - - ; - return 0; -} -_ACEOF -if ac_fn_cxx_try_compile "$LINENO" -then : - - # If this code compiles, 'final' is not working correctly. - have_cxx11_final=no - -else case e in #( - e) - have_cxx11_final=yes - ;; -esac -fi -rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext - -fi - - if test "x$have_cxx11_final" != "xno" -then : - - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - - struct A - { - }; - - // struct B is final - struct B final : A - { - }; - - // Error: B is final - struct C : B - { - }; - -int -main (void) -{ - - - ; - return 0; -} -_ACEOF -if ac_fn_cxx_try_compile "$LINENO" -then : - - # If this code compiles, 'final' is not working correctly. - have_cxx11_final=no - -else case e in #( - e) - have_cxx11_final=yes - ;; -esac -fi -rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext - -fi - - # If the flag is still 'yes' after all the tests, set the #define. - if test "x$have_cxx11_final" = "xyes" -then : - - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -printf "%s\n" "yes" >&6; } - -printf "%s\n" "#define HAVE_CXX11_FINAL 1" >>confdefs.h - - -else case e in #( - e) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 -printf "%s\n" "no" >&6; } ;; -esac -fi - - # Reset the flags - CXXFLAGS="$old_CXXFLAGS" - ac_ext=cpp -ac_cpp='$CXXCPP $CPPFLAGS' -ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_cxx_compiler_gnu - - - if test x$have_cxx11_final == xyes; then - HAVE_CXX11_FINAL_TRUE= - HAVE_CXX11_FINAL_FALSE='#' -else - HAVE_CXX11_FINAL_TRUE='#' - HAVE_CXX11_FINAL_FALSE= -fi - - - if test "x$have_cxx11_final" != "xyes" -then : - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: libMesh requires the C++11 final keyword" >&5 -printf "%s\n" "$as_me: WARNING: libMesh requires the C++11 final keyword" >&2;} - have_cxx_all=no -fi - - - have_cxx11_decltype=no - - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for C++11 decltype support" >&5 -printf %s "checking for C++11 decltype support... " >&6; } - ac_ext=cpp -ac_cpp='$CXXCPP $CPPFLAGS' -ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_cxx_compiler_gnu - - - old_CXXFLAGS="$CXXFLAGS" - CXXFLAGS="$CXXFLAGS $libmesh_CXXFLAGS" - - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - - #include - -int -main (void) -{ - - int a; - decltype(a) b; - std::vector vec(10); - for (auto i = decltype(vec.size())(0); i < vec.size(); ++i) - vec[i] += i; - - ; - return 0; -} -_ACEOF -if ac_fn_cxx_try_compile "$LINENO" -then : - - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -printf "%s\n" "yes" >&6; } - -printf "%s\n" "#define HAVE_CXX11_DECLTYPE 1" >>confdefs.h - - have_cxx11_decltype=yes - -else case e in #( - e) - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 -printf "%s\n" "no" >&6; } - ;; -esac -fi -rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext - - # Reset the flags - CXXFLAGS="$old_CXXFLAGS" - ac_ext=cpp -ac_cpp='$CXXCPP $CPPFLAGS' -ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_cxx_compiler_gnu - - - if test x$have_cxx11_decltype == xyes; then - HAVE_CXX11_DECLTYPE_TRUE= - HAVE_CXX11_DECLTYPE_FALSE='#' -else - HAVE_CXX11_DECLTYPE_TRUE='#' - HAVE_CXX11_DECLTYPE_FALSE= -fi - - - if test "x$have_cxx11_decltype" != "xyes" -then : - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: libMesh requires the C++11 decltype keyword" >&5 -printf "%s\n" "$as_me: WARNING: libMesh requires the C++11 decltype keyword" >&2;} - have_cxx_all=no -fi - - - have_cxx11_begin_end=no - - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for C++11 std::begin/end support for arrays" >&5 -printf %s "checking for C++11 std::begin/end support for arrays... " >&6; } - ac_ext=cpp -ac_cpp='$CXXCPP $CPPFLAGS' -ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_cxx_compiler_gnu - - - old_CXXFLAGS="$CXXFLAGS" - CXXFLAGS="$CXXFLAGS $libmesh_CXXFLAGS" - - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - - #include - #include - -int -main (void) -{ - - int array[5] = {3, 1, 5, 2, 4}; - std::sort(std::begin(array), std::end(array)); - - ; - return 0; -} -_ACEOF -if ac_fn_cxx_try_compile "$LINENO" -then : - - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -printf "%s\n" "yes" >&6; } - have_cxx11_begin_end=yes - -else case e in #( - e) - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 -printf "%s\n" "no" >&6; } - ;; -esac -fi -rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext - - CXXFLAGS="$old_CXXFLAGS" - ac_ext=cpp -ac_cpp='$CXXCPP $CPPFLAGS' -ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_cxx_compiler_gnu - - - if test "x$have_cxx11_begin_end" != "xyes" -then : - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: libMesh requires C++11 std::begin/end support" >&5 -printf "%s\n" "$as_me: WARNING: libMesh requires C++11 std::begin/end support" >&2;} - have_cxx_all=no -fi - - - have_cxx11_container_erase=no - - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for C++11 std container erase() functions returning iterators" >&5 -printf %s "checking for C++11 std container erase() functions returning iterators... " >&6; } - ac_ext=cpp -ac_cpp='$CXXCPP $CPPFLAGS' -ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_cxx_compiler_gnu - - - old_CXXFLAGS="$CXXFLAGS" - CXXFLAGS="$CXXFLAGS $libmesh_CXXFLAGS" - - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - - #include - #include - -int -main (void) -{ - - { - std::map m; - m.insert(std::make_pair(1,2)); - std::map::iterator it = m.erase(m.begin()); - } - { - std::set s; - s.insert(1); - std::set::iterator it = s.erase(s.begin()); - } - { - std::multimap m; - m.insert(std::make_pair(1,2)); - std::multimap::iterator it = m.erase(m.begin()); - } - { - std::multiset s; - s.insert(1); - std::multiset::iterator it = s.erase(s.begin()); - } - - ; - return 0; -} -_ACEOF -if ac_fn_cxx_try_compile "$LINENO" -then : - - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -printf "%s\n" "yes" >&6; } - have_cxx11_container_erase=yes - -else case e in #( - e) - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 -printf "%s\n" "no" >&6; } - ;; -esac -fi -rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext - - CXXFLAGS="$old_CXXFLAGS" - ac_ext=cpp -ac_cpp='$CXXCPP $CPPFLAGS' -ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_cxx_compiler_gnu - - - if test "x$have_cxx11_container_erase" != "xyes" -then : - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: libMesh requires C++11 support for std container erase() functions returning iterators" >&5 -printf "%s\n" "$as_me: WARNING: libMesh requires C++11 support for std container erase() functions returning iterators" >&2;} - have_cxx_all=no -fi - - - have_cxx11_container_emplace=no - - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for C++11 std container emplace() functions" >&5 -printf %s "checking for C++11 std container emplace() functions... " >&6; } - ac_ext=cpp -ac_cpp='$CXXCPP $CPPFLAGS' -ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_cxx_compiler_gnu - - - old_CXXFLAGS="$CXXFLAGS" - CXXFLAGS="$CXXFLAGS $libmesh_CXXFLAGS" - - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - - #include - #include - #include - -int -main (void) -{ - - { - std::map m; - m.emplace(1,2); - m.emplace_hint(m.begin(), 0, 3); - } - { - std::set s; - s.emplace(1); - s.emplace_hint(s.begin(), 0); - } - { - std::multimap m; - m.emplace(1,2); - m.emplace_hint(m.begin(), 0, 3); - } - { - std::multiset s; - s.emplace(1); - s.emplace_hint(s.begin(), 0); - } - { - std::vector v; - v.emplace(v.begin(), 0); - v.emplace_back(1); - } - - ; - return 0; -} -_ACEOF -if ac_fn_cxx_try_compile "$LINENO" -then : - - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -printf "%s\n" "yes" >&6; } - have_cxx11_container_emplace=yes - -else case e in #( - e) - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 -printf "%s\n" "no" >&6; } - ;; -esac -fi -rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext - - CXXFLAGS="$old_CXXFLAGS" - ac_ext=cpp -ac_cpp='$CXXCPP $CPPFLAGS' -ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_cxx_compiler_gnu - - - if test "x$have_cxx11_container_emplace" != "xyes" -then : - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: libMesh requires C++11 support for std container emplace() functions" >&5 -printf "%s\n" "$as_me: WARNING: libMesh requires C++11 support for std container emplace() functions" >&2;} - have_cxx_all=no -fi - - - have_cxx11_iota=no - - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for C++11 std::iota algorithm" >&5 -printf %s "checking for C++11 std::iota algorithm... " >&6; } - ac_ext=cpp -ac_cpp='$CXXCPP $CPPFLAGS' -ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_cxx_compiler_gnu - - - old_CXXFLAGS="$CXXFLAGS" - CXXFLAGS="$CXXFLAGS $libmesh_CXXFLAGS" - - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - - #include - #include - -int -main (void) -{ - - std::vector v(10); - std::iota(v.begin(), v.end(), 0); - - ; - return 0; -} -_ACEOF -if ac_fn_cxx_try_compile "$LINENO" -then : - - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -printf "%s\n" "yes" >&6; } - have_cxx11_iota=yes - -else case e in #( - e) - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 -printf "%s\n" "no" >&6; } - ;; -esac -fi -rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext - - CXXFLAGS="$old_CXXFLAGS" - ac_ext=cpp -ac_cpp='$CXXCPP $CPPFLAGS' -ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_cxx_compiler_gnu - - - if test "x$have_cxx11_iota" != "xyes" -then : - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: libMesh requires C++11 support for std::iota" >&5 -printf "%s\n" "$as_me: WARNING: libMesh requires C++11 support for std::iota" >&2;} - have_cxx_all=no -fi - - - have_cxx11_vector_data=no - - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for C++11 std::vector::data() API" >&5 -printf %s "checking for C++11 std::vector::data() API... " >&6; } - ac_ext=cpp -ac_cpp='$CXXCPP $CPPFLAGS' -ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_cxx_compiler_gnu - - - old_CXXFLAGS="$CXXFLAGS" - CXXFLAGS="$CXXFLAGS $libmesh_CXXFLAGS" - - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - - #include - -int -main (void) -{ - - std::vector v(10); - int * begin = v.data(); - - ; - return 0; -} -_ACEOF -if ac_fn_cxx_try_compile "$LINENO" -then : - - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -printf "%s\n" "yes" >&6; } - have_cxx11_vector_data=yes - -else case e in #( - e) - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 -printf "%s\n" "no" >&6; } - ;; -esac -fi -rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext - - CXXFLAGS="$old_CXXFLAGS" - ac_ext=cpp -ac_cpp='$CXXCPP $CPPFLAGS' -ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_cxx_compiler_gnu - - - if test "x$have_cxx11_vector_data" != "xyes" -then : - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: libMesh requires C++11 support for std::vector::data()" >&5 -printf "%s\n" "$as_me: WARNING: libMesh requires C++11 support for std::vector::data()" >&2;} - have_cxx_all=no -fi - - - have_cxx11_shared_ptr=no - - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for C++11 std::shared_ptr support" >&5 -printf %s "checking for C++11 std::shared_ptr support... " >&6; } - ac_ext=cpp -ac_cpp='$CXXCPP $CPPFLAGS' -ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_cxx_compiler_gnu - - - # Save any original value that CXXFLAGS had - old_CXXFLAGS="$CXXFLAGS" - CXXFLAGS="$CXXFLAGS $libmesh_CXXFLAGS" - - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - - #include - -int -main (void) -{ - - std::shared_ptr p1; - std::shared_ptr p2 (new int); - std::shared_ptr p3 (p2); - p3.reset(new int); - p3 = std::make_shared(5); - - ; - return 0; -} -_ACEOF -if ac_fn_cxx_try_compile "$LINENO" -then : - - have_cxx11_shared_ptr=yes - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -printf "%s\n" "yes" >&6; } - -else case e in #( - e) - have_cxx11_shared_ptr=no - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 -printf "%s\n" "no" >&6; } - ;; -esac -fi -rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext - - if test "x$have_cxx11_shared_ptr" = "xyes" -then : - -printf "%s\n" "#define HAVE_CXX11_SHARED_PTR 1" >>confdefs.h - -fi - - # Reset the flags - CXXFLAGS="$old_CXXFLAGS" - ac_ext=cpp -ac_cpp='$CXXCPP $CPPFLAGS' -ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_cxx_compiler_gnu - - - if test x$have_cxx11_shared_ptr == xyes; then - HAVE_CXX11_SHARED_PTR_TRUE= - HAVE_CXX11_SHARED_PTR_FALSE='#' -else - HAVE_CXX11_SHARED_PTR_TRUE='#' - HAVE_CXX11_SHARED_PTR_FALSE= -fi - - - if test "x$have_cxx11_shared_ptr" != "xyes" -then : - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: libMesh requires C++11 support for std::shared_ptr" >&5 -printf "%s\n" "$as_me: WARNING: libMesh requires C++11 support for std::shared_ptr" >&2;} - have_cxx_all=no -fi - - - have_cxx11_rvalue_references=no - - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for C++11 rvalue references support" >&5 -printf %s "checking for C++11 rvalue references support... " >&6; } - ac_ext=cpp -ac_cpp='$CXXCPP $CPPFLAGS' -ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_cxx_compiler_gnu - - - old_CXXFLAGS="$CXXFLAGS" - CXXFLAGS="$CXXFLAGS $libmesh_CXXFLAGS" - - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - - int foo(int && x) { return x; } - int bar() { return 4; } - -int -main (void) -{ - - // Call function that takes an rvalue reference. - foo (bar()); - - ; - return 0; -} -_ACEOF -if ac_fn_cxx_try_compile "$LINENO" -then : - - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -printf "%s\n" "yes" >&6; } - -printf "%s\n" "#define HAVE_CXX11_RVALUE_REFERENCES 1" >>confdefs.h - - have_cxx11_rvalue_references=yes - -else case e in #( - e) - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 -printf "%s\n" "no" >&6; } - ;; -esac -fi -rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext - - # Reset the flags - CXXFLAGS="$old_CXXFLAGS" - ac_ext=cpp -ac_cpp='$CXXCPP $CPPFLAGS' -ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_cxx_compiler_gnu - - - if test x$have_cxx11_rvalue_references == xyes; then - HAVE_CXX11_RVALUE_REFERENCES_TRUE= - HAVE_CXX11_RVALUE_REFERENCES_FALSE='#' -else - HAVE_CXX11_RVALUE_REFERENCES_TRUE='#' - HAVE_CXX11_RVALUE_REFERENCES_FALSE= -fi - - - if test "x$have_cxx11_rvalue_references" != "xyes" -then : - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: libMesh requires C++11 support for rvalue references" >&5 -printf "%s\n" "$as_me: WARNING: libMesh requires C++11 support for rvalue references" >&2;} - have_cxx_all=no -fi - - - have_cxx11_to_string=no - - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for C++11 std::to_string() support" >&5 -printf %s "checking for C++11 std::to_string() support... " >&6; } - ac_ext=cpp -ac_cpp='$CXXCPP $CPPFLAGS' -ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_cxx_compiler_gnu - - - old_CXXFLAGS="$CXXFLAGS" - CXXFLAGS="$CXXFLAGS $libmesh_CXXFLAGS" - - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - - #include - -int -main (void) -{ - - // tiny="0.000000". Note: std::to_string(double) is required to produce - // a std::string with the same contents as std::sprintf(buf, "%f", value) - // would produce, given a sufficiently large buf. This is *different* from - // what you get from a std::stringstream using default formatting and - // precision flags, i.e. - // std::ostringstream oss; - // oss << 1.e-40; - // std::string tiny = oss.str(); - // will produce the string "1e-40". - std::string tiny = std::to_string(1.e-40); - - ; - return 0; -} -_ACEOF -if ac_fn_cxx_try_compile "$LINENO" -then : - - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -printf "%s\n" "yes" >&6; } - -printf "%s\n" "#define HAVE_CXX11_TO_STRING 1" >>confdefs.h - - have_cxx11_to_string=yes - -else case e in #( - e) - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 -printf "%s\n" "no" >&6; } - ;; -esac -fi -rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext - - # Reset the flags - CXXFLAGS="$old_CXXFLAGS" - ac_ext=cpp -ac_cpp='$CXXCPP $CPPFLAGS' -ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_cxx_compiler_gnu - - - if test x$have_cxx11_to_string == xyes; then - HAVE_CXX11_TO_STRING_TRUE= - HAVE_CXX11_TO_STRING_FALSE='#' -else - HAVE_CXX11_TO_STRING_TRUE='#' - HAVE_CXX11_TO_STRING_FALSE= -fi - - - if test "x$have_cxx11_to_string" != "xyes" -then : - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: libMesh requires C++11 support for std::to_string()" >&5 -printf "%s\n" "$as_me: WARNING: libMesh requires C++11 support for std::to_string()" >&2;} - have_cxx_all=no -fi - - - have_cxx11_constexpr=no - - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for C++11 constexpr support" >&5 -printf %s "checking for C++11 constexpr support... " >&6; } - ac_ext=cpp -ac_cpp='$CXXCPP $CPPFLAGS' -ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_cxx_compiler_gnu - - - old_CXXFLAGS="$CXXFLAGS" - CXXFLAGS="$CXXFLAGS $libmesh_CXXFLAGS" - - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - - constexpr int multiply (int x, int y) { return x * y; } - -int -main (void) -{ - - // The compiler should compute "val" at compile time. - const int val = multiply(10, 10); - - ; - return 0; -} -_ACEOF -if ac_fn_cxx_try_compile "$LINENO" -then : - - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -printf "%s\n" "yes" >&6; } - -printf "%s\n" "#define HAVE_CXX11_CONSTEXPR 1" >>confdefs.h - - have_cxx11_constexpr=yes - -else case e in #( - e) - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 -printf "%s\n" "no" >&6; } - ;; -esac -fi -rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext - - # Reset the flags - CXXFLAGS="$old_CXXFLAGS" - ac_ext=cpp -ac_cpp='$CXXCPP $CPPFLAGS' -ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_cxx_compiler_gnu - - - if test x$have_cxx11_constexpr == xyes; then - HAVE_CXX11_CONSTEXPR_TRUE= - HAVE_CXX11_CONSTEXPR_FALSE='#' -else - HAVE_CXX11_CONSTEXPR_TRUE='#' - HAVE_CXX11_CONSTEXPR_FALSE= -fi - - - if test "x$have_cxx11_constexpr" != "xyes" -then : - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: libMesh requires C++11 support for constexpr" >&5 -printf "%s\n" "$as_me: WARNING: libMesh requires C++11 support for constexpr" >&2;} - have_cxx_all=no -fi - - - have_cxx11_variadic_templates=no - - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for C++11 variadic template support" >&5 -printf %s "checking for C++11 variadic template support... " >&6; } - ac_ext=cpp -ac_cpp='$CXXCPP $CPPFLAGS' -ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_cxx_compiler_gnu - - - old_CXXFLAGS="$CXXFLAGS" - CXXFLAGS="$CXXFLAGS $libmesh_CXXFLAGS" - - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - - // Base case - template - T sum(T t) { return t; } - - // Compute sum of arbitrary number of passed parameters. - template - T sum(T t, P ...p) - { - t += sum(p...); - return t; - } - -int -main (void) -{ - - sum(1, 2, 3, 4, 5); - - ; - return 0; -} -_ACEOF -if ac_fn_cxx_try_compile "$LINENO" -then : - - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -printf "%s\n" "yes" >&6; } - -printf "%s\n" "#define HAVE_CXX11_VARIADIC_TEMPLATES 1" >>confdefs.h - - have_cxx11_variadic_templates=yes - -else case e in #( - e) - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 -printf "%s\n" "no" >&6; } - ;; -esac -fi -rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext - - # Reset the flags - CXXFLAGS="$old_CXXFLAGS" - ac_ext=cpp -ac_cpp='$CXXCPP $CPPFLAGS' -ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_cxx_compiler_gnu - - - if test x$have_cxx11_variadic_templates == xyes; then - HAVE_CXX11_VARIADIC_TEMPLATES_TRUE= - HAVE_CXX11_VARIADIC_TEMPLATES_FALSE='#' -else - HAVE_CXX11_VARIADIC_TEMPLATES_TRUE='#' - HAVE_CXX11_VARIADIC_TEMPLATES_FALSE= -fi - - - if test "x$have_cxx11_variadic_templates" != "xyes" -then : - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: libMesh requires C++11 support for variadic templates" >&5 -printf "%s\n" "$as_me: WARNING: libMesh requires C++11 support for variadic templates" >&2;} - have_cxx_all=no -fi - - - have_cxx11_alias_declarations=no - - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for C++11 alias declarations support" >&5 -printf %s "checking for C++11 alias declarations support... " >&6; } - ac_ext=cpp -ac_cpp='$CXXCPP $CPPFLAGS' -ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_cxx_compiler_gnu - - - old_CXXFLAGS="$CXXFLAGS" - CXXFLAGS="$CXXFLAGS $libmesh_CXXFLAGS" - - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - - template - struct check - { - T t; - }; - - // An alias declaration is like a templated typedef - template - using MyCheck = check; - -int -main (void) -{ - - MyCheck mc; - - ; - return 0; -} -_ACEOF -if ac_fn_cxx_try_compile "$LINENO" -then : - - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -printf "%s\n" "yes" >&6; } - -printf "%s\n" "#define HAVE_CXX11_ALIAS_DECLARATIONS 1" >>confdefs.h - - have_cxx11_alias_declarations=yes - -else case e in #( - e) - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 -printf "%s\n" "no" >&6; } - ;; -esac -fi -rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext - - # Reset the flags - CXXFLAGS="$old_CXXFLAGS" - ac_ext=cpp -ac_cpp='$CXXCPP $CPPFLAGS' -ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_cxx_compiler_gnu - - - if test x$have_cxx11_alias_declarations == xyes; then - HAVE_CXX11_ALIAS_DECLARATIONS_TRUE= - HAVE_CXX11_ALIAS_DECLARATIONS_FALSE='#' -else - HAVE_CXX11_ALIAS_DECLARATIONS_TRUE='#' - HAVE_CXX11_ALIAS_DECLARATIONS_FALSE= -fi - - - if test "x$have_cxx11_alias_declarations" != "xyes" -then : - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: libMesh requires C++11 support for alias declarations" >&5 -printf "%s\n" "$as_me: WARNING: libMesh requires C++11 support for alias declarations" >&2;} - have_cxx_all=no -fi - - - have_cxx11_array=no - - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for C++11 std::array" >&5 -printf %s "checking for C++11 std::array... " >&6; } - ac_ext=cpp -ac_cpp='$CXXCPP $CPPFLAGS' -ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_cxx_compiler_gnu - - - old_CXXFLAGS="$CXXFLAGS" - CXXFLAGS="$CXXFLAGS $libmesh_CXXFLAGS" - - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - - #include - -int -main (void) -{ - - std::array a; - a[0] = 42.0; - double * begin = a.data(); - - ; - return 0; -} -_ACEOF -if ac_fn_cxx_try_compile "$LINENO" -then : - - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -printf "%s\n" "yes" >&6; } - have_cxx11_array=yes - -else case e in #( - e) - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 -printf "%s\n" "no" >&6; } - ;; -esac -fi -rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext - - CXXFLAGS="$old_CXXFLAGS" - ac_ext=cpp -ac_cpp='$CXXCPP $CPPFLAGS' -ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_cxx_compiler_gnu - - - if test "x$have_cxx11_array" != "xyes" -then : - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: libMesh requires C++11 support for std::array" >&5 -printf "%s\n" "$as_me: WARNING: libMesh requires C++11 support for std::array" >&2;} - have_cxx_all=no -fi - - - have_cxx11_isnan=no - have_cxx11_isinf=no - - ac_ext=cpp -ac_cpp='$CXXCPP $CPPFLAGS' -ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_cxx_compiler_gnu - - - old_CXXFLAGS="$CXXFLAGS" - CXXFLAGS="$CXXFLAGS $libmesh_CXXFLAGS" - - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for C++11 std::isnan" >&5 -printf %s "checking for C++11 std::isnan... " >&6; } - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - - #include - -int -main (void) -{ - - if (std::isnan(0.0)) - return 1; - - ; - return 0; -} -_ACEOF -if ac_fn_cxx_try_compile "$LINENO" -then : - - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -printf "%s\n" "yes" >&6; } - have_cxx11_isnan=yes - -else case e in #( - e) - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 -printf "%s\n" "no" >&6; } - ;; -esac -fi -rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext - - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for C++11 std::isinf" >&5 -printf %s "checking for C++11 std::isinf... " >&6; } - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - - #include - -int -main (void) -{ - - if (std::isinf(0.0)) - return 1; - - ; - return 0; -} -_ACEOF -if ac_fn_cxx_try_compile "$LINENO" -then : - - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -printf "%s\n" "yes" >&6; } - have_cxx11_isinf=yes - -else case e in #( - e) - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 -printf "%s\n" "no" >&6; } - ;; -esac -fi -rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext - - CXXFLAGS="$old_CXXFLAGS" - ac_ext=cpp -ac_cpp='$CXXCPP $CPPFLAGS' -ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_cxx_compiler_gnu - - - if test "x$have_cxx11_isnan" != "xyes" -then : - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: libMesh requires C++11 support for std::isnan" >&5 -printf "%s\n" "$as_me: WARNING: libMesh requires C++11 support for std::isnan" >&2;} - have_cxx_all=no -fi - if test "x$have_cxx11_isinf" != "xyes" -then : - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: libMesh requires C++11 support for std::isinf" >&5 -printf "%s\n" "$as_me: WARNING: libMesh requires C++11 support for std::isinf" >&2;} - have_cxx_all=no -fi - - - have_cxx17_splicing=no + have_cxx11_rvalue_references=no + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for C++11 rvalue references support" >&5 +printf %s "checking for C++11 rvalue references support... " >&6; } ac_ext=cpp ac_cpp='$CXXCPP $CPPFLAGS' ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' @@ -22035,28 +18935,18 @@ ac_compiler_gnu=$ac_cv_cxx_compiler_gnu old_CXXFLAGS="$CXXFLAGS" CXXFLAGS="$CXXFLAGS $libmesh_CXXFLAGS" - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for C++17 std::*::merge" >&5 -printf %s "checking for C++17 std::*::merge... " >&6; } cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ - #include - #include - #include - #include + int foo(int && x) { return x; } + int bar() { return 4; } int main (void) { - std::set s1{1}, s2{2}; - std::unordered_set us1{3}, us2{4}; - std::map m1{{5,6}}, m2{{7,8}}; - std::unordered_map um1{{9,10}}, um2{{11,12}}; - s1.merge(std::move(s2)); - us1.merge(std::move(us2)); - m1.merge(std::move(m2)); - um1.merge(std::move(um2)); + // Call function that takes an rvalue reference. + foo (bar()); ; return 0; @@ -22067,10 +18957,10 @@ then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 printf "%s\n" "yes" >&6; } - have_cxx17_splicing=yes -printf "%s\n" "#define HAVE_CXX17_SPLICING 1" >>confdefs.h +printf "%s\n" "#define HAVE_CXX11_RVALUE_REFERENCES 1" >>confdefs.h + have_cxx11_rvalue_references=yes else case e in #( e) @@ -22081,7 +18971,8 @@ esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext - CXXFLAGS="$old_CXXFLAGS" + # Reset the flags + CXXFLAGS="$old_CXXFLAGS" ac_ext=cpp ac_cpp='$CXXCPP $CPPFLAGS' ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' @@ -22089,706 +18980,630 @@ ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ex ac_compiler_gnu=$ac_cv_cxx_compiler_gnu - if test "x$have_cxx17_splicing" != "xyes" -then : - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: libMesh prefers C++17 support for set/map merge" >&5 -printf "%s\n" "$as_me: WARNING: libMesh prefers C++17 support for set/map merge" >&2;} + if test x$have_cxx11_rvalue_references == xyes; then + HAVE_CXX11_RVALUE_REFERENCES_TRUE= + HAVE_CXX11_RVALUE_REFERENCES_FALSE='#' +else + HAVE_CXX11_RVALUE_REFERENCES_TRUE='#' + HAVE_CXX11_RVALUE_REFERENCES_FALSE= fi -fi - if test "$HAVE_CXX14" = "1" -a "x$have_cxx_all" = xyes -then : - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: Found C++14 standard support" >&5 -printf "%s\n" "$as_me: Found C++14 standard support" >&6;} - if test $acsm_found_cxx -eq 0 -then : - acsm_cxx_version=14 -fi - acsm_found_cxx=1 -else case e in #( - e) CXX="$acsm_backup_CXX" - CXXCPP="$acsm_backup_CXXCPP" - if test "$HAVE_CXX14" = "0" + if test "x$have_cxx11_rvalue_references" != "xyes" then : - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: Did not find C++14 standard support" >&5 -printf "%s\n" "$as_me: Did not find C++14 standard support" >&6;} -fi ;; -esac -fi - + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: libMesh requires C++11 support for rvalue references" >&5 +printf "%s\n" "$as_me: WARNING: libMesh requires C++11 support for rvalue references" >&2;} + have_cxx_all=no fi - if test 2011 -le "$acsm_CXX_STD_MAX" -then : - - if test 2011 -gt "$acsm_CXX_STD_MIN" -then : - ax_cxx_compile_alternatives="11 0x" ax_cxx_compile_cxx11_required=false - ac_ext=cpp -ac_cpp='$CXXCPP $CPPFLAGS' -ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_cxx_compiler_gnu - ac_success=no - - cachevar=ax_cv_cxx_compile_cxx11 - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether $CXX supports C++11 features by default" >&5 -printf %s "checking whether $CXX supports C++11 features by default... " >&6; } -if eval test \${$cachevar+y} -then : - printf %s "(cached) " >&6 -else case e in #( - e) cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - - -// If the compiler admits that it is not ready for C++11, why torture it? -// Hopefully, this will speed up the test. - -#ifndef __cplusplus - -#error "This is not a C++ compiler" - -#elif __cplusplus < 201103L - -#error "This is not a C++11 compiler" - -#else - -namespace cxx11 -{ - - namespace test_static_assert - { - - template - struct check - { - static_assert(sizeof(int) <= sizeof(T), "not big enough"); - }; - - } - - namespace test_final_override - { - - struct Base - { - virtual ~Base() {} - virtual void f() {} - }; - - struct Derived : public Base - { - virtual ~Derived() override {} - virtual void f() override {} - }; - - } - - namespace test_double_right_angle_brackets - { - - template < typename T > - struct check {}; - - typedef check single_type; - typedef check> double_type; - typedef check>> triple_type; - typedef check>>> quadruple_type; - - } - - namespace test_decltype - { - - int - f() - { - int a = 1; - decltype(a) b = 2; - return a + b; - } - - } - namespace test_type_deduction - { - - template < typename T1, typename T2 > - struct is_same - { - static const bool value = false; - }; + have_cxx11_to_string=no - template < typename T > - struct is_same - { - static const bool value = true; - }; + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for C++11 std::to_string() support" >&5 +printf %s "checking for C++11 std::to_string() support... " >&6; } + ac_ext=cpp +ac_cpp='$CXXCPP $CPPFLAGS' +ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_cxx_compiler_gnu - template < typename T1, typename T2 > - auto - add(T1 a1, T2 a2) -> decltype(a1 + a2) - { - return a1 + a2; - } - int - test(const int c, volatile int v) - { - static_assert(is_same::value == true, ""); - static_assert(is_same::value == false, ""); - static_assert(is_same::value == false, ""); - auto ac = c; - auto av = v; - auto sumi = ac + av + 'x'; - auto sumf = ac + av + 1.0; - static_assert(is_same::value == true, ""); - static_assert(is_same::value == true, ""); - static_assert(is_same::value == true, ""); - static_assert(is_same::value == false, ""); - static_assert(is_same::value == true, ""); - return (sumf > 0.0) ? sumi : add(c, v); - } + old_CXXFLAGS="$CXXFLAGS" + CXXFLAGS="$CXXFLAGS $libmesh_CXXFLAGS" - } + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ - namespace test_noexcept - { + #include - int f() { return 0; } - int g() noexcept { return 0; } +int +main (void) +{ - static_assert(noexcept(f()) == false, ""); - static_assert(noexcept(g()) == true, ""); + // tiny="0.000000". Note: std::to_string(double) is required to produce + // a std::string with the same contents as std::sprintf(buf, "%f", value) + // would produce, given a sufficiently large buf. This is *different* from + // what you get from a std::stringstream using default formatting and + // precision flags, i.e. + // std::ostringstream oss; + // oss << 1.e-40; + // std::string tiny = oss.str(); + // will produce the string "1e-40". + std::string tiny = std::to_string(1.e-40); - } + ; + return 0; +} +_ACEOF +if ac_fn_cxx_try_compile "$LINENO" +then : - namespace test_constexpr - { + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +printf "%s\n" "yes" >&6; } - template < typename CharT > - unsigned long constexpr - strlen_c_r(const CharT *const s, const unsigned long acc) noexcept - { - return *s ? strlen_c_r(s + 1, acc + 1) : acc; - } +printf "%s\n" "#define HAVE_CXX11_TO_STRING 1" >>confdefs.h - template < typename CharT > - unsigned long constexpr - strlen_c(const CharT *const s) noexcept - { - return strlen_c_r(s, 0UL); - } + have_cxx11_to_string=yes - static_assert(strlen_c("") == 0UL, ""); - static_assert(strlen_c("1") == 1UL, ""); - static_assert(strlen_c("example") == 7UL, ""); - static_assert(strlen_c("another\0example") == 7UL, ""); +else case e in #( + e) + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } + ;; +esac +fi +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext - } + # Reset the flags + CXXFLAGS="$old_CXXFLAGS" + ac_ext=cpp +ac_cpp='$CXXCPP $CPPFLAGS' +ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_cxx_compiler_gnu - namespace test_rvalue_references - { - template < int N > - struct answer - { - static constexpr int value = N; - }; + if test x$have_cxx11_to_string == xyes; then + HAVE_CXX11_TO_STRING_TRUE= + HAVE_CXX11_TO_STRING_FALSE='#' +else + HAVE_CXX11_TO_STRING_TRUE='#' + HAVE_CXX11_TO_STRING_FALSE= +fi - answer<1> f(int&) { return answer<1>(); } - answer<2> f(const int&) { return answer<2>(); } - answer<3> f(int&&) { return answer<3>(); } - void - test() - { - int i = 0; - const int c = 0; - static_assert(decltype(f(i))::value == 1, ""); - static_assert(decltype(f(c))::value == 2, ""); - static_assert(decltype(f(0))::value == 3, ""); - } + if test "x$have_cxx11_to_string" != "xyes" +then : + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: libMesh requires C++11 support for std::to_string()" >&5 +printf "%s\n" "$as_me: WARNING: libMesh requires C++11 support for std::to_string()" >&2;} + have_cxx_all=no +fi - } - namespace test_uniform_initialization - { + have_cxx11_constexpr=no - struct test - { - static const int zero {}; - static const int one {1}; - }; + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for C++11 constexpr support" >&5 +printf %s "checking for C++11 constexpr support... " >&6; } + ac_ext=cpp +ac_cpp='$CXXCPP $CPPFLAGS' +ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_cxx_compiler_gnu - static_assert(test::zero == 0, ""); - static_assert(test::one == 1, ""); - } + old_CXXFLAGS="$CXXFLAGS" + CXXFLAGS="$CXXFLAGS $libmesh_CXXFLAGS" - namespace test_lambdas - { + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ - void - test1() - { - auto lambda1 = [](){}; - auto lambda2 = lambda1; - lambda1(); - lambda2(); - } + constexpr int multiply (int x, int y) { return x * y; } - int - test2() - { - auto a = [](int i, int j){ return i + j; }(1, 2); - auto b = []() -> int { return '0'; }(); - auto c = [=](){ return a + b; }(); - auto d = [&](){ return c; }(); - auto e = [a, &b](int x) mutable { - const auto identity = [](int y){ return y; }; - for (auto i = 0; i < a; ++i) - a += b--; - return x + identity(a + b); - }(0); - return a + b + c + d + e; - } +int +main (void) +{ - int - test3() - { - const auto nullary = [](){ return 0; }; - const auto unary = [](int x){ return x; }; - using nullary_t = decltype(nullary); - using unary_t = decltype(unary); - const auto higher1st = [](nullary_t f){ return f(); }; - const auto higher2nd = [unary](nullary_t f1){ - return [unary, f1](unary_t f2){ return f2(unary(f1())); }; - }; - return higher1st(nullary) + higher2nd(nullary)(unary); - } + // The compiler should compute "val" at compile time. + const int val = multiply(10, 10); - } + ; + return 0; +} +_ACEOF +if ac_fn_cxx_try_compile "$LINENO" +then : - namespace test_variadic_templates - { + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +printf "%s\n" "yes" >&6; } - template - struct sum; +printf "%s\n" "#define HAVE_CXX11_CONSTEXPR 1" >>confdefs.h - template - struct sum - { - static constexpr auto value = N0 + sum::value; - }; + have_cxx11_constexpr=yes - template <> - struct sum<> - { - static constexpr auto value = 0; - }; +else case e in #( + e) + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } + ;; +esac +fi +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext - static_assert(sum<>::value == 0, ""); - static_assert(sum<1>::value == 1, ""); - static_assert(sum<23>::value == 23, ""); - static_assert(sum<1, 2>::value == 3, ""); - static_assert(sum<5, 5, 11>::value == 21, ""); - static_assert(sum<2, 3, 5, 7, 11, 13>::value == 41, ""); + # Reset the flags + CXXFLAGS="$old_CXXFLAGS" + ac_ext=cpp +ac_cpp='$CXXCPP $CPPFLAGS' +ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_cxx_compiler_gnu - } - // http://stackoverflow.com/questions/13728184/template-aliases-and-sfinae - // Clang 3.1 fails with headers of libstd++ 4.8.3 when using std::function - // because of this. - namespace test_template_alias_sfinae - { + if test x$have_cxx11_constexpr == xyes; then + HAVE_CXX11_CONSTEXPR_TRUE= + HAVE_CXX11_CONSTEXPR_FALSE='#' +else + HAVE_CXX11_CONSTEXPR_TRUE='#' + HAVE_CXX11_CONSTEXPR_FALSE= +fi + - struct foo {}; + if test "x$have_cxx11_constexpr" != "xyes" +then : + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: libMesh requires C++11 support for constexpr" >&5 +printf "%s\n" "$as_me: WARNING: libMesh requires C++11 support for constexpr" >&2;} + have_cxx_all=no +fi - template - using member = typename T::member_type; - template - void func(...) {} + have_cxx11_variadic_templates=no - template - void func(member*) {} + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for C++11 variadic template support" >&5 +printf %s "checking for C++11 variadic template support... " >&6; } + ac_ext=cpp +ac_cpp='$CXXCPP $CPPFLAGS' +ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_cxx_compiler_gnu - void test(); - void test() { func(0); } + old_CXXFLAGS="$CXXFLAGS" + CXXFLAGS="$CXXFLAGS $libmesh_CXXFLAGS" - } + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ -} // namespace cxx11 + // Base case + template + T sum(T t) { return t; } -#endif // __cplusplus >= 201103L + // Compute sum of arbitrary number of passed parameters. + template + T sum(T t, P ...p) + { + t += sum(p...); + return t; + } +int +main (void) +{ + sum(1, 2, 3, 4, 5); + ; + return 0; +} _ACEOF if ac_fn_cxx_try_compile "$LINENO" then : - eval $cachevar=yes + + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +printf "%s\n" "yes" >&6; } + +printf "%s\n" "#define HAVE_CXX11_VARIADIC_TEMPLATES 1" >>confdefs.h + + have_cxx11_variadic_templates=yes + else case e in #( - e) eval $cachevar=no ;; -esac -fi -rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext ;; + e) + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } + ;; esac fi -eval ac_res=\$$cachevar - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 -printf "%s\n" "$ac_res" >&6; } - if eval test x\$$cachevar = xyes -then : - ac_success=yes -fi - - if test x$ac_success = xno; then - for alternative in ${ax_cxx_compile_alternatives}; do - switch="-std=gnu++${alternative}" - cachevar=`printf "%s\n" "ax_cv_cxx_compile_cxx11_$switch" | sed "$as_sed_sh"` - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether $CXX supports C++11 features with $switch" >&5 -printf %s "checking whether $CXX supports C++11 features with $switch... " >&6; } -if eval test \${$cachevar+y} -then : - printf %s "(cached) " >&6 -else case e in #( - e) ac_save_CXX="$CXX" - CXX="$CXX $switch" - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext + # Reset the flags + CXXFLAGS="$old_CXXFLAGS" + ac_ext=cpp +ac_cpp='$CXXCPP $CPPFLAGS' +ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_cxx_compiler_gnu -// If the compiler admits that it is not ready for C++11, why torture it? -// Hopefully, this will speed up the test. -#ifndef __cplusplus + if test x$have_cxx11_variadic_templates == xyes; then + HAVE_CXX11_VARIADIC_TEMPLATES_TRUE= + HAVE_CXX11_VARIADIC_TEMPLATES_FALSE='#' +else + HAVE_CXX11_VARIADIC_TEMPLATES_TRUE='#' + HAVE_CXX11_VARIADIC_TEMPLATES_FALSE= +fi -#error "This is not a C++ compiler" -#elif __cplusplus < 201103L + if test "x$have_cxx11_variadic_templates" != "xyes" +then : + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: libMesh requires C++11 support for variadic templates" >&5 +printf "%s\n" "$as_me: WARNING: libMesh requires C++11 support for variadic templates" >&2;} + have_cxx_all=no +fi -#error "This is not a C++11 compiler" -#else + have_cxx11_alias_declarations=no -namespace cxx11 -{ + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for C++11 alias declarations support" >&5 +printf %s "checking for C++11 alias declarations support... " >&6; } + ac_ext=cpp +ac_cpp='$CXXCPP $CPPFLAGS' +ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_cxx_compiler_gnu - namespace test_static_assert - { - template - struct check - { - static_assert(sizeof(int) <= sizeof(T), "not big enough"); - }; + old_CXXFLAGS="$CXXFLAGS" + CXXFLAGS="$CXXFLAGS $libmesh_CXXFLAGS" - } + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ - namespace test_final_override - { + template + struct check + { + T t; + }; - struct Base - { - virtual ~Base() {} - virtual void f() {} - }; + // An alias declaration is like a templated typedef + template + using MyCheck = check; - struct Derived : public Base - { - virtual ~Derived() override {} - virtual void f() override {} - }; +int +main (void) +{ - } + MyCheck mc; - namespace test_double_right_angle_brackets - { + ; + return 0; +} +_ACEOF +if ac_fn_cxx_try_compile "$LINENO" +then : - template < typename T > - struct check {}; + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +printf "%s\n" "yes" >&6; } - typedef check single_type; - typedef check> double_type; - typedef check>> triple_type; - typedef check>>> quadruple_type; +printf "%s\n" "#define HAVE_CXX11_ALIAS_DECLARATIONS 1" >>confdefs.h - } + have_cxx11_alias_declarations=yes - namespace test_decltype - { +else case e in #( + e) + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } + ;; +esac +fi +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext - int - f() - { - int a = 1; - decltype(a) b = 2; - return a + b; - } + # Reset the flags + CXXFLAGS="$old_CXXFLAGS" + ac_ext=cpp +ac_cpp='$CXXCPP $CPPFLAGS' +ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_cxx_compiler_gnu - } - namespace test_type_deduction - { + if test x$have_cxx11_alias_declarations == xyes; then + HAVE_CXX11_ALIAS_DECLARATIONS_TRUE= + HAVE_CXX11_ALIAS_DECLARATIONS_FALSE='#' +else + HAVE_CXX11_ALIAS_DECLARATIONS_TRUE='#' + HAVE_CXX11_ALIAS_DECLARATIONS_FALSE= +fi - template < typename T1, typename T2 > - struct is_same - { - static const bool value = false; - }; - template < typename T > - struct is_same - { - static const bool value = true; - }; + if test "x$have_cxx11_alias_declarations" != "xyes" +then : + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: libMesh requires C++11 support for alias declarations" >&5 +printf "%s\n" "$as_me: WARNING: libMesh requires C++11 support for alias declarations" >&2;} + have_cxx_all=no +fi - template < typename T1, typename T2 > - auto - add(T1 a1, T2 a2) -> decltype(a1 + a2) - { - return a1 + a2; - } - int - test(const int c, volatile int v) - { - static_assert(is_same::value == true, ""); - static_assert(is_same::value == false, ""); - static_assert(is_same::value == false, ""); - auto ac = c; - auto av = v; - auto sumi = ac + av + 'x'; - auto sumf = ac + av + 1.0; - static_assert(is_same::value == true, ""); - static_assert(is_same::value == true, ""); - static_assert(is_same::value == true, ""); - static_assert(is_same::value == false, ""); - static_assert(is_same::value == true, ""); - return (sumf > 0.0) ? sumi : add(c, v); - } + have_cxx11_array=no - } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for C++11 std::array" >&5 +printf %s "checking for C++11 std::array... " >&6; } + ac_ext=cpp +ac_cpp='$CXXCPP $CPPFLAGS' +ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_cxx_compiler_gnu - namespace test_noexcept - { - int f() { return 0; } - int g() noexcept { return 0; } + old_CXXFLAGS="$CXXFLAGS" + CXXFLAGS="$CXXFLAGS $libmesh_CXXFLAGS" - static_assert(noexcept(f()) == false, ""); - static_assert(noexcept(g()) == true, ""); + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ - } + #include - namespace test_constexpr - { +int +main (void) +{ - template < typename CharT > - unsigned long constexpr - strlen_c_r(const CharT *const s, const unsigned long acc) noexcept - { - return *s ? strlen_c_r(s + 1, acc + 1) : acc; - } + std::array a; + a[0] = 42.0; + double * begin = a.data(); - template < typename CharT > - unsigned long constexpr - strlen_c(const CharT *const s) noexcept - { - return strlen_c_r(s, 0UL); - } + ; + return 0; +} +_ACEOF +if ac_fn_cxx_try_compile "$LINENO" +then : - static_assert(strlen_c("") == 0UL, ""); - static_assert(strlen_c("1") == 1UL, ""); - static_assert(strlen_c("example") == 7UL, ""); - static_assert(strlen_c("another\0example") == 7UL, ""); + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +printf "%s\n" "yes" >&6; } + have_cxx11_array=yes - } +else case e in #( + e) + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } + ;; +esac +fi +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext - namespace test_rvalue_references - { + CXXFLAGS="$old_CXXFLAGS" + ac_ext=cpp +ac_cpp='$CXXCPP $CPPFLAGS' +ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_cxx_compiler_gnu - template < int N > - struct answer - { - static constexpr int value = N; - }; - answer<1> f(int&) { return answer<1>(); } - answer<2> f(const int&) { return answer<2>(); } - answer<3> f(int&&) { return answer<3>(); } + if test "x$have_cxx11_array" != "xyes" +then : + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: libMesh requires C++11 support for std::array" >&5 +printf "%s\n" "$as_me: WARNING: libMesh requires C++11 support for std::array" >&2;} + have_cxx_all=no +fi - void - test() - { - int i = 0; - const int c = 0; - static_assert(decltype(f(i))::value == 1, ""); - static_assert(decltype(f(c))::value == 2, ""); - static_assert(decltype(f(0))::value == 3, ""); - } - } + have_cxx11_isnan=no + have_cxx11_isinf=no - namespace test_uniform_initialization - { + ac_ext=cpp +ac_cpp='$CXXCPP $CPPFLAGS' +ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_cxx_compiler_gnu - struct test - { - static const int zero {}; - static const int one {1}; - }; - static_assert(test::zero == 0, ""); - static_assert(test::one == 1, ""); + old_CXXFLAGS="$CXXFLAGS" + CXXFLAGS="$CXXFLAGS $libmesh_CXXFLAGS" - } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for C++11 std::isnan" >&5 +printf %s "checking for C++11 std::isnan... " >&6; } + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ - namespace test_lambdas - { + #include - void - test1() - { - auto lambda1 = [](){}; - auto lambda2 = lambda1; - lambda1(); - lambda2(); - } +int +main (void) +{ - int - test2() - { - auto a = [](int i, int j){ return i + j; }(1, 2); - auto b = []() -> int { return '0'; }(); - auto c = [=](){ return a + b; }(); - auto d = [&](){ return c; }(); - auto e = [a, &b](int x) mutable { - const auto identity = [](int y){ return y; }; - for (auto i = 0; i < a; ++i) - a += b--; - return x + identity(a + b); - }(0); - return a + b + c + d + e; - } + if (std::isnan(0.0)) + return 1; - int - test3() - { - const auto nullary = [](){ return 0; }; - const auto unary = [](int x){ return x; }; - using nullary_t = decltype(nullary); - using unary_t = decltype(unary); - const auto higher1st = [](nullary_t f){ return f(); }; - const auto higher2nd = [unary](nullary_t f1){ - return [unary, f1](unary_t f2){ return f2(unary(f1())); }; - }; - return higher1st(nullary) + higher2nd(nullary)(unary); - } + ; + return 0; +} +_ACEOF +if ac_fn_cxx_try_compile "$LINENO" +then : - } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +printf "%s\n" "yes" >&6; } + have_cxx11_isnan=yes - namespace test_variadic_templates - { +else case e in #( + e) + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } + ;; +esac +fi +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext - template - struct sum; + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for C++11 std::isinf" >&5 +printf %s "checking for C++11 std::isinf... " >&6; } + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ - template - struct sum - { - static constexpr auto value = N0 + sum::value; - }; + #include - template <> - struct sum<> - { - static constexpr auto value = 0; - }; +int +main (void) +{ - static_assert(sum<>::value == 0, ""); - static_assert(sum<1>::value == 1, ""); - static_assert(sum<23>::value == 23, ""); - static_assert(sum<1, 2>::value == 3, ""); - static_assert(sum<5, 5, 11>::value == 21, ""); - static_assert(sum<2, 3, 5, 7, 11, 13>::value == 41, ""); + if (std::isinf(0.0)) + return 1; - } + ; + return 0; +} +_ACEOF +if ac_fn_cxx_try_compile "$LINENO" +then : - // http://stackoverflow.com/questions/13728184/template-aliases-and-sfinae - // Clang 3.1 fails with headers of libstd++ 4.8.3 when using std::function - // because of this. - namespace test_template_alias_sfinae - { + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +printf "%s\n" "yes" >&6; } + have_cxx11_isinf=yes - struct foo {}; +else case e in #( + e) + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } + ;; +esac +fi +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext - template - using member = typename T::member_type; + CXXFLAGS="$old_CXXFLAGS" + ac_ext=cpp +ac_cpp='$CXXCPP $CPPFLAGS' +ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_cxx_compiler_gnu + + + if test "x$have_cxx11_isnan" != "xyes" +then : + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: libMesh requires C++11 support for std::isnan" >&5 +printf "%s\n" "$as_me: WARNING: libMesh requires C++11 support for std::isnan" >&2;} + have_cxx_all=no +fi + if test "x$have_cxx11_isinf" != "xyes" +then : + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: libMesh requires C++11 support for std::isinf" >&5 +printf "%s\n" "$as_me: WARNING: libMesh requires C++11 support for std::isinf" >&2;} + have_cxx_all=no +fi - template - void func(...) {} - template - void func(member*) {} + have_cxx17_splicing=no - void test(); + ac_ext=cpp +ac_cpp='$CXXCPP $CPPFLAGS' +ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_cxx_compiler_gnu - void test() { func(0); } - } + old_CXXFLAGS="$CXXFLAGS" + CXXFLAGS="$CXXFLAGS $libmesh_CXXFLAGS" -} // namespace cxx11 + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for C++17 std::*::merge" >&5 +printf %s "checking for C++17 std::*::merge... " >&6; } + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ -#endif // __cplusplus >= 201103L + #include + #include + #include + #include +int +main (void) +{ + std::set s1{1}, s2{2}; + std::unordered_set us1{3}, us2{4}; + std::map m1{{5,6}}, m2{{7,8}}; + std::unordered_map um1{{9,10}}, um2{{11,12}}; + s1.merge(std::move(s2)); + us1.merge(std::move(us2)); + m1.merge(std::move(m2)); + um1.merge(std::move(um2)); + ; + return 0; +} _ACEOF if ac_fn_cxx_try_compile "$LINENO" then : - eval $cachevar=yes + + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +printf "%s\n" "yes" >&6; } + have_cxx17_splicing=yes + +printf "%s\n" "#define HAVE_CXX17_SPLICING 1" >>confdefs.h + + else case e in #( - e) eval $cachevar=no ;; + e) + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } + ;; esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext - CXX="$ac_save_CXX" ;; + + CXXFLAGS="$old_CXXFLAGS" + ac_ext=cpp +ac_cpp='$CXXCPP $CPPFLAGS' +ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_cxx_compiler_gnu + + + if test "x$have_cxx17_splicing" != "xyes" +then : + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: libMesh prefers C++17 support for set/map merge" >&5 +printf "%s\n" "$as_me: WARNING: libMesh prefers C++17 support for set/map merge" >&2;} +fi + +fi + if test "$HAVE_CXX14" = "1" -a "x$have_cxx_all" = xyes +then : + + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: Found C++14 standard support" >&5 +printf "%s\n" "$as_me: Found C++14 standard support" >&6;} + if test $acsm_found_cxx -eq 0 +then : + acsm_cxx_version=14 +fi + acsm_found_cxx=1 +else case e in #( + e) CXX="$acsm_backup_CXX" + CXXCPP="$acsm_backup_CXXCPP" + if test "$HAVE_CXX14" = "0" +then : + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: Did not find C++14 standard support" >&5 +printf "%s\n" "$as_me: Did not find C++14 standard support" >&6;} +fi ;; esac fi -eval ac_res=\$$cachevar - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 -printf "%s\n" "$ac_res" >&6; } - if eval test x\$$cachevar = xyes; then - CXX="$CXX $switch" - if test -n "$CXXCPP" ; then - CXXCPP="$CXXCPP $switch" - fi - ac_success=yes - break - fi - done - fi - if test x$ac_success = xno; then - for alternative in ${ax_cxx_compile_alternatives}; do - for switch in -std=c++${alternative} +std=c++${alternative} "-h std=c++${alternative}"; do - cachevar=`printf "%s\n" "ax_cv_cxx_compile_cxx11_$switch" | sed "$as_sed_sh"` - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether $CXX supports C++11 features with $switch" >&5 -printf %s "checking whether $CXX supports C++11 features with $switch... " >&6; } +fi + + if test 2011 -le "$acsm_CXX_STD_MAX" +then : + + if test 2011 -gt "$acsm_CXX_STD_MIN" +then : + ax_cxx_compile_alternatives="11 0x" ax_cxx_compile_cxx11_required=false + ac_ext=cpp +ac_cpp='$CXXCPP $CPPFLAGS' +ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_cxx_compiler_gnu + ac_success=no + + cachevar=ax_cv_cxx_compile_cxx11 + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether $CXX supports C++11 features by default" >&5 +printf %s "checking whether $CXX supports C++11 features by default... " >&6; } if eval test \${$cachevar+y} then : printf %s "(cached) " >&6 else case e in #( - e) ac_save_CXX="$CXX" - CXX="$CXX $switch" - cat confdefs.h - <<_ACEOF >conftest.$ac_ext + e) cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ @@ -23086,67 +19901,32 @@ else case e in #( e) eval $cachevar=no ;; esac fi -rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext - CXX="$ac_save_CXX" ;; +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext ;; esac fi eval ac_res=\$$cachevar { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 printf "%s\n" "$ac_res" >&6; } - if eval test x\$$cachevar = xyes; then - CXX="$CXX $switch" - if test -n "$CXXCPP" ; then - CXXCPP="$CXXCPP $switch" - fi - ac_success=yes - break - fi - done - if test x$ac_success = xyes; then - break - fi - done - fi - ac_ext=cpp -ac_cpp='$CXXCPP $CPPFLAGS' -ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_cxx_compiler_gnu - - if test x$ax_cxx_compile_cxx11_required = xtrue; then - if test x$ac_success = xno; then - as_fn_error $? "*** A compiler with support for C++11 language features is required." "$LINENO" 5 - fi - fi - if test x$ac_success = xno; then - HAVE_CXX11=0 - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: No compiler with C++11 support was found" >&5 -printf "%s\n" "$as_me: No compiler with C++11 support was found" >&6;} - else - HAVE_CXX11=1 - -printf "%s\n" "#define HAVE_CXX11 1" >>confdefs.h - - fi + if eval test x\$$cachevar = xyes +then : + ac_success=yes +fi -else case e in #( - e) ax_cxx_compile_alternatives="11 0x" ax_cxx_compile_cxx11_required=true - ac_ext=cpp -ac_cpp='$CXXCPP $CPPFLAGS' -ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_cxx_compiler_gnu - ac_success=no - cachevar=ax_cv_cxx_compile_cxx11 - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether $CXX supports C++11 features by default" >&5 -printf %s "checking whether $CXX supports C++11 features by default... " >&6; } + if test x$ac_success = xno; then + for alternative in ${ax_cxx_compile_alternatives}; do + for switch in -std=c++${alternative} +std=c++${alternative} "-h std=c++${alternative}"; do + cachevar=`printf "%s\n" "ax_cv_cxx_compile_cxx11_$switch" | sed "$as_sed_sh"` + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether $CXX supports C++11 features with $switch" >&5 +printf %s "checking whether $CXX supports C++11 features with $switch... " >&6; } if eval test \${$cachevar+y} then : printf %s "(cached) " >&6 else case e in #( - e) cat confdefs.h - <<_ACEOF >conftest.$ac_ext + e) ac_save_CXX="$CXX" + CXX="$CXX $switch" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ @@ -23444,30 +20224,67 @@ else case e in #( e) eval $cachevar=no ;; esac fi -rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext ;; +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext + CXX="$ac_save_CXX" ;; esac fi eval ac_res=\$$cachevar { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 printf "%s\n" "$ac_res" >&6; } - if eval test x\$$cachevar = xyes -then : - ac_success=yes -fi + if eval test x\$$cachevar = xyes; then + CXX="$CXX $switch" + if test -n "$CXXCPP" ; then + CXXCPP="$CXXCPP $switch" + fi + ac_success=yes + break + fi + done + if test x$ac_success = xyes; then + break + fi + done + fi + ac_ext=cpp +ac_cpp='$CXXCPP $CPPFLAGS' +ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_cxx_compiler_gnu + if test x$ax_cxx_compile_cxx11_required = xtrue; then if test x$ac_success = xno; then - for alternative in ${ax_cxx_compile_alternatives}; do - switch="-std=gnu++${alternative}" - cachevar=`printf "%s\n" "ax_cv_cxx_compile_cxx11_$switch" | sed "$as_sed_sh"` - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether $CXX supports C++11 features with $switch" >&5 -printf %s "checking whether $CXX supports C++11 features with $switch... " >&6; } + as_fn_error $? "*** A compiler with support for C++11 language features is required." "$LINENO" 5 + fi + fi + if test x$ac_success = xno; then + HAVE_CXX11=0 + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: No compiler with C++11 support was found" >&5 +printf "%s\n" "$as_me: No compiler with C++11 support was found" >&6;} + else + HAVE_CXX11=1 + +printf "%s\n" "#define HAVE_CXX11 1" >>confdefs.h + + fi + + +else case e in #( + e) ax_cxx_compile_alternatives="11 0x" ax_cxx_compile_cxx11_required=true + ac_ext=cpp +ac_cpp='$CXXCPP $CPPFLAGS' +ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_cxx_compiler_gnu + ac_success=no + + cachevar=ax_cv_cxx_compile_cxx11 + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether $CXX supports C++11 features by default" >&5 +printf %s "checking whether $CXX supports C++11 features by default... " >&6; } if eval test \${$cachevar+y} then : printf %s "(cached) " >&6 else case e in #( - e) ac_save_CXX="$CXX" - CXX="$CXX $switch" - cat confdefs.h - <<_ACEOF >conftest.$ac_ext + e) cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ @@ -23765,23 +20582,18 @@ else case e in #( e) eval $cachevar=no ;; esac fi -rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext - CXX="$ac_save_CXX" ;; +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext ;; esac fi eval ac_res=\$$cachevar { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 printf "%s\n" "$ac_res" >&6; } - if eval test x\$$cachevar = xyes; then - CXX="$CXX $switch" - if test -n "$CXXCPP" ; then - CXXCPP="$CXXCPP $switch" - fi - ac_success=yes - break - fi - done - fi + if eval test x\$$cachevar = xyes +then : + ac_success=yes +fi + + if test x$ac_success = xno; then for alternative in ${ax_cxx_compile_alternatives}; do From 9c98ee8b987a61f5fa988c1f133b7eee68e5fa7f Mon Sep 17 00:00:00 2001 From: Roy Stogner Date: Wed, 20 May 2026 12:41:33 -0500 Subject: [PATCH 32/46] Add --enable-kokkos-required configure option --- m4/kokkos.m4 | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/m4/kokkos.m4 b/m4/kokkos.m4 index 55212ab9d5a..b98fb6bfef7 100644 --- a/m4/kokkos.m4 +++ b/m4/kokkos.m4 @@ -26,6 +26,17 @@ AC_DEFUN([CONFIGURE_KOKKOS], [cuda|hip|sycl|openmp|serial (default: auto-detect from KokkosCore_config.h)]), [KOKKOS_BACKEND="$withval"], [KOKKOS_BACKEND="auto"]) + dnl Setting --enable-kokkos-required causes an error to be emitted during + dnl configure if Kokkos is not successfully detected. + AC_ARG_ENABLE(kokkos-required, + AS_HELP_STRING([--enable-kokkos-required], + [Error if Kokkos is not detected by configure]), + [AS_CASE("${enableval}", + [yes], [kokkosrequired=yes], + [no], [kokkosrequired=no], + [AC_MSG_ERROR(bad value ${enableval} for --enable-kokkos-required)])], + [kokkosrequired=no]) + dnl Allow the caller (e.g. MOOSE's configure_libmesh.sh) to pre-set the dnl Kokkos compiler and flags via environment variables. If KOKKOS_CXX is dnl already set, we skip auto-detection entirely — the caller knows best. @@ -213,6 +224,13 @@ AC_DEFUN([CONFIGURE_KOKKOS], [AC_MSG_NOTICE(<<< Configuring library without Kokkos support >>>) enablekokkos=no]) + dnl If Kokkos is not enabled, but it *was* required, error out now + dnl instead of compiling libmesh in an invalid configuration. + AS_IF([test "$enablekokkos" = "no" && test "$kokkosrequired" = "yes"], + dnl We return error code 4 here, since 0 means success and 1 is + dnl indistinguishable from other errors. + [AC_MSG_ERROR([*** Kokkos was not found, but --enable-kokkos-required was specified.], 4)]) + AC_SUBST([KOKKOS_CXX]) AC_SUBST([KOKKOS_CPPFLAGS]) AC_SUBST([KOKKOS_CXXFLAGS]) From c33cc6151b0aa1b2307fe67bd1deb553b8a45847 Mon Sep 17 00:00:00 2001 From: Roy Stogner Date: Wed, 20 May 2026 12:42:36 -0500 Subject: [PATCH 33/46] Re-bootstrap --- configure | 25 +++++++++++++++++++++++++ 1 file changed, 25 insertions(+) diff --git a/configure b/configure index 4fa7aa52acb..d63cdbb41ee 100755 --- a/configure +++ b/configure @@ -1362,6 +1362,7 @@ with_kokkos with_kokkos_include with_kokkos_lib with_kokkos_backend +enable_kokkos_required ' ac_precious_vars='build_alias host_alias @@ -2177,6 +2178,8 @@ Optional Features: --disable-metaphysicl build without MetaPhysicL support --enable-metaphysicl-required Error if MetaPhysicL is not detected by configure + --enable-kokkos-required + Error if Kokkos is not detected by configure Optional Packages: --with-PACKAGE[=ARG] use PACKAGE [ARG=yes] @@ -60794,6 +60797,23 @@ esac fi + # Check whether --enable-kokkos-required was given. +if test ${enable_kokkos_required+y} +then : + enableval=$enable_kokkos_required; case "${enableval}" in #( + yes) : + kokkosrequired=yes ;; #( + no) : + kokkosrequired=no ;; #( + *) : + as_fn_error $? "bad value ${enableval} for --enable-kokkos-required" "$LINENO" 5 ;; +esac +else case e in #( + e) kokkosrequired=no ;; +esac +fi + + if test "x$KOKKOS_INCLUDE_DIR" != "xno/include" -a "x$KOKKOS_LIB_DIR" != "xno/lib" then : @@ -61229,6 +61249,11 @@ printf "%s\n" "$as_me: <<< Configuring library without Kokkos support >>>" >&6;} esac fi + if test "$enablekokkos" = "no" && test "$kokkosrequired" = "yes" +then : + as_fn_error 4 "*** Kokkos was not found, but --enable-kokkos-required was specified." "$LINENO" 5 +fi + From d16d4adfd8c838b1a7127f0d6eb92a80d59104ed Mon Sep 17 00:00:00 2001 From: Roy Stogner Date: Wed, 20 May 2026 12:43:58 -0500 Subject: [PATCH 34/46] Cleaner error message --- m4/kokkos.m4 | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/m4/kokkos.m4 b/m4/kokkos.m4 index b98fb6bfef7..2516dadd829 100644 --- a/m4/kokkos.m4 +++ b/m4/kokkos.m4 @@ -210,7 +210,7 @@ AC_DEFUN([CONFIGURE_KOKKOS], AS_IF([test "x$kokkos_config_works" = "xyes"], [AC_MSG_RESULT([yes])], - [AC_MSG_ERROR([configured Kokkos compiler/flags failed to compile and link a minimal test program])]) + [AC_MSG_ERROR([Kokkos compiler/flags failed to compile and link a minimal test program])]) AC_DEFINE([HAVE_KOKKOS], [1], [Define if Kokkos support is enabled in libMesh]) From 0462bdc13e44c1cb30273bfdba0107a5b80ec57f Mon Sep 17 00:00:00 2001 From: Roy Stogner Date: Wed, 20 May 2026 12:45:53 -0500 Subject: [PATCH 35/46] More error message cleanup --- m4/kokkos.m4 | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/m4/kokkos.m4 b/m4/kokkos.m4 index 2516dadd829..82152b23689 100644 --- a/m4/kokkos.m4 +++ b/m4/kokkos.m4 @@ -210,7 +210,8 @@ AC_DEFUN([CONFIGURE_KOKKOS], AS_IF([test "x$kokkos_config_works" = "xyes"], [AC_MSG_RESULT([yes])], - [AC_MSG_ERROR([Kokkos compiler/flags failed to compile and link a minimal test program])]) + [AC_MSG_RESULT([no])], + AC_MSG_ERROR([Kokkos compiler/flags failed to compile and link a minimal test program])]) AC_DEFINE([HAVE_KOKKOS], [1], [Define if Kokkos support is enabled in libMesh]) From d5713da2a4e58a444428bdc33f988aeede4e2bf2 Mon Sep 17 00:00:00 2001 From: Roy Stogner Date: Wed, 20 May 2026 12:47:13 -0500 Subject: [PATCH 36/46] Fixup --- m4/kokkos.m4 | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/m4/kokkos.m4 b/m4/kokkos.m4 index 82152b23689..d70510fd11c 100644 --- a/m4/kokkos.m4 +++ b/m4/kokkos.m4 @@ -210,7 +210,7 @@ AC_DEFUN([CONFIGURE_KOKKOS], AS_IF([test "x$kokkos_config_works" = "xyes"], [AC_MSG_RESULT([yes])], - [AC_MSG_RESULT([no])], + [AC_MSG_RESULT([no]) AC_MSG_ERROR([Kokkos compiler/flags failed to compile and link a minimal test program])]) AC_DEFINE([HAVE_KOKKOS], [1], From 91bbab1620988fa6795d63b0ebf3bb90d6f85af8 Mon Sep 17 00:00:00 2001 From: Roy Stogner Date: Wed, 20 May 2026 12:47:46 -0500 Subject: [PATCH 37/46] Re-bootstrap --- configure | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/configure b/configure index d63cdbb41ee..40b56d1a427 100755 --- a/configure +++ b/configure @@ -61222,7 +61222,9 @@ then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 printf "%s\n" "yes" >&6; } else case e in #( - e) as_fn_error $? "configured Kokkos compiler/flags failed to compile and link a minimal test program" "$LINENO" 5 ;; + e) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } + as_fn_error $? "Kokkos compiler/flags failed to compile and link a minimal test program" "$LINENO" 5 ;; esac fi From 2c3c45d773d4ae68fb890bc2c25b473785db1c30 Mon Sep 17 00:00:00 2001 From: Roy Stogner Date: Wed, 20 May 2026 13:47:51 -0500 Subject: [PATCH 38/46] Strip KOKKOS_MPI_CPPFLAGS of conflicts --- m4/kokkos.m4 | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) diff --git a/m4/kokkos.m4 b/m4/kokkos.m4 index d70510fd11c..6f3f67e5b41 100644 --- a/m4/kokkos.m4 +++ b/m4/kokkos.m4 @@ -145,6 +145,27 @@ AC_DEFUN([CONFIGURE_KOKKOS], [KOKKOS_MPI_CPPFLAGS=`$CXX -show 2>/dev/null | sed 's/^[^ ]* //'`]) AS_IF([test "x$KOKKOS_MPI_CPPFLAGS" = "x"], [KOKKOS_MPI_CPPFLAGS="$MPI_INCLUDES"]) + + dnl Our MPI compiler might be reporting a mix of flags + dnl we do and do not want. We could try to retain + dnl everything that looks like a linker flag or include + dnl path, but linker flags can get weird, so instead we + dnl strip out everything that looks like a conflict. + + STRIPPED_FLAGS="" + for flag in $KOKKOS_MPI_CPPFLAGS; do + case "$flag" in + -O*) # Skip possibly-undesired optimization level + ;; + -std=*) # Skip possibly-incompatible standard + ;; + *) # Append everything else + STRIPPED_FLAGS="$STRIPPED_FLAGS $flag" + ;; + esac + done + KOKKOS_MPI_CPPFLAGS=$STRIPPED_FLAGS + AS_IF([test "x$KOKKOS_MPI_CPPFLAGS" = "x"], [AC_MSG_RESULT([not found])], [AC_MSG_RESULT([$KOKKOS_MPI_CPPFLAGS])]) From e70fcf6ebd1a6e5bf7fb2b3b572969029fe17b79 Mon Sep 17 00:00:00 2001 From: Roy Stogner Date: Wed, 20 May 2026 13:48:55 -0500 Subject: [PATCH 39/46] Re-bootstrap --- configure | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/configure b/configure index 40b56d1a427..8e4eb44181a 100755 --- a/configure +++ b/configure @@ -61116,6 +61116,22 @@ fi then : KOKKOS_MPI_CPPFLAGS="$MPI_INCLUDES" fi + + + STRIPPED_FLAGS="" + for flag in $KOKKOS_MPI_CPPFLAGS; do + case "$flag" in + -O*) # Skip possibly-undesired optimization level + ;; + -std=*) # Skip possibly-incompatible standard + ;; + *) # Append everything else + STRIPPED_FLAGS="$STRIPPED_FLAGS $flag" + ;; + esac + done + KOKKOS_MPI_CPPFLAGS=$STRIPPED_FLAGS + if test "x$KOKKOS_MPI_CPPFLAGS" = "x" then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: not found" >&5 From cec1b36c9caa100c8d01a8f35ca888abeee03631 Mon Sep 17 00:00:00 2001 From: Roy Stogner Date: Wed, 20 May 2026 13:57:46 -0500 Subject: [PATCH 40/46] Don't strip an $MPI_INCLUDES, do comment code --- m4/kokkos.m4 | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/m4/kokkos.m4 b/m4/kokkos.m4 index 6f3f67e5b41..4a805586b89 100644 --- a/m4/kokkos.m4 +++ b/m4/kokkos.m4 @@ -138,13 +138,17 @@ AC_DEFUN([CONFIGURE_KOKKOS], AS_IF([test "x$enablempi" = "xyes" && test "x$KOKKOS_CXX" != "x$CXX"], [ AC_MSG_CHECKING([for MPI compile flags usable with KOKKOS_CXX]) + + dnl Check for flags from OpenMPI mpicxx KOKKOS_MPI_CPPFLAGS=`$CXX -showme:compile 2>/dev/null` + + dnl If we found no OpenMPI results, try MPICH arguments AS_IF([test "x$KOKKOS_MPI_CPPFLAGS" = "x"], [KOKKOS_MPI_CPPFLAGS=`$CXX -compile_info 2>/dev/null`]) + + dnl If we still have nothing, try Intel MPI arguments AS_IF([test "x$KOKKOS_MPI_CPPFLAGS" = "x"], [KOKKOS_MPI_CPPFLAGS=`$CXX -show 2>/dev/null | sed 's/^[^ ]* //'`]) - AS_IF([test "x$KOKKOS_MPI_CPPFLAGS" = "x"], - [KOKKOS_MPI_CPPFLAGS="$MPI_INCLUDES"]) dnl Our MPI compiler might be reporting a mix of flags dnl we do and do not want. We could try to retain @@ -166,6 +170,11 @@ AC_DEFUN([CONFIGURE_KOKKOS], done KOKKOS_MPI_CPPFLAGS=$STRIPPED_FLAGS + dnl If we still have nothing, fall back to the env? + AS_IF([test "x$KOKKOS_MPI_CPPFLAGS" = "x"], + [KOKKOS_MPI_CPPFLAGS="$MPI_INCLUDES"]) + + dnl Report what we finally do or do not have AS_IF([test "x$KOKKOS_MPI_CPPFLAGS" = "x"], [AC_MSG_RESULT([not found])], [AC_MSG_RESULT([$KOKKOS_MPI_CPPFLAGS])]) From 4ea3cab1787401468c2f25345f9944fc9e13f04a Mon Sep 17 00:00:00 2001 From: Roy Stogner Date: Wed, 20 May 2026 13:58:08 -0500 Subject: [PATCH 41/46] Fix MPICH+Kokkos case --- m4/kokkos.m4 | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/m4/kokkos.m4 b/m4/kokkos.m4 index 4a805586b89..8ceab4411c3 100644 --- a/m4/kokkos.m4 +++ b/m4/kokkos.m4 @@ -144,7 +144,7 @@ AC_DEFUN([CONFIGURE_KOKKOS], dnl If we found no OpenMPI results, try MPICH arguments AS_IF([test "x$KOKKOS_MPI_CPPFLAGS" = "x"], - [KOKKOS_MPI_CPPFLAGS=`$CXX -compile_info 2>/dev/null`]) + [KOKKOS_MPI_CPPFLAGS=`$CXX -cxx='' -compile_info 2>/dev/null`]) dnl If we still have nothing, try Intel MPI arguments AS_IF([test "x$KOKKOS_MPI_CPPFLAGS" = "x"], From d4800f9b395b05ac2ba97b2cee898b1900f10345 Mon Sep 17 00:00:00 2001 From: Roy Stogner Date: Wed, 20 May 2026 13:58:50 -0500 Subject: [PATCH 42/46] Re-bootstrap --- configure | 22 +++++++++++++--------- 1 file changed, 13 insertions(+), 9 deletions(-) diff --git a/configure b/configure index 8e4eb44181a..4f79b1d93f4 100755 --- a/configure +++ b/configure @@ -61103,19 +61103,18 @@ then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for MPI compile flags usable with KOKKOS_CXX" >&5 printf %s "checking for MPI compile flags usable with KOKKOS_CXX... " >&6; } - KOKKOS_MPI_CPPFLAGS=`$CXX -showme:compile 2>/dev/null` - if test "x$KOKKOS_MPI_CPPFLAGS" = "x" + + KOKKOS_MPI_CPPFLAGS=`$CXX -showme:compile 2>/dev/null` + + if test "x$KOKKOS_MPI_CPPFLAGS" = "x" then : - KOKKOS_MPI_CPPFLAGS=`$CXX -compile_info 2>/dev/null` + KOKKOS_MPI_CPPFLAGS=`$CXX -cxx='' -compile_info 2>/dev/null` fi - if test "x$KOKKOS_MPI_CPPFLAGS" = "x" + + if test "x$KOKKOS_MPI_CPPFLAGS" = "x" then : KOKKOS_MPI_CPPFLAGS=`$CXX -show 2>/dev/null | sed 's/^^ * //'` fi - if test "x$KOKKOS_MPI_CPPFLAGS" = "x" -then : - KOKKOS_MPI_CPPFLAGS="$MPI_INCLUDES" -fi STRIPPED_FLAGS="" @@ -61132,7 +61131,12 @@ fi done KOKKOS_MPI_CPPFLAGS=$STRIPPED_FLAGS - if test "x$KOKKOS_MPI_CPPFLAGS" = "x" + if test "x$KOKKOS_MPI_CPPFLAGS" = "x" +then : + KOKKOS_MPI_CPPFLAGS="$MPI_INCLUDES" +fi + + if test "x$KOKKOS_MPI_CPPFLAGS" = "x" then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: not found" >&5 printf "%s\n" "not found" >&6; } From bfcfe32699a0ee5c55b78dee9f95b15e1669574c Mon Sep 17 00:00:00 2001 From: rochi00 Date: Thu, 21 May 2026 16:20:07 -0600 Subject: [PATCH 43/46] Propagate PETSc CUDA arch into Kokkos configure --- configure | 44 +++++++++++++++++++++++++++------ m4/libmesh_optional_packages.m4 | 39 +++++++++++++++++++++++------ 2 files changed, 68 insertions(+), 15 deletions(-) diff --git a/configure b/configure index c0250de457a..58d80a35835 100755 --- a/configure +++ b/configure @@ -63996,19 +63996,19 @@ then : if test -r "$KOKKOS_CFG" then : - if grep -q 'KOKKOS_ENABLE_CUDA' "$KOKKOS_CFG" + if grep -q '^#define KOKKOS_ENABLE_CUDA' "$KOKKOS_CFG" then : KOKKOS_BACKEND=cuda else case e in #( - e) if grep -q 'KOKKOS_ENABLE_HIP' "$KOKKOS_CFG" + e) if grep -q '^#define KOKKOS_ENABLE_HIP' "$KOKKOS_CFG" then : KOKKOS_BACKEND=hip else case e in #( - e) if grep -q 'KOKKOS_ENABLE_SYCL' "$KOKKOS_CFG" + e) if grep -q '^#define KOKKOS_ENABLE_SYCL' "$KOKKOS_CFG" then : KOKKOS_BACKEND=sycl else case e in #( - e) if grep -q 'KOKKOS_ENABLE_OPENMP' "$KOKKOS_CFG" + e) if grep -q '^#define KOKKOS_ENABLE_OPENMP' "$KOKKOS_CFG" then : KOKKOS_BACKEND=openmp else case e in #( @@ -64035,7 +64035,7 @@ printf "%s\n" "Kokkos backend: $KOKKOS_BACKEND" >&6; } have_kokkos_openmp=no if test -r "$KOKKOS_CFG" then : - if grep -q 'KOKKOS_ENABLE_OPENMP' "$KOKKOS_CFG" + if grep -q '^#define KOKKOS_ENABLE_OPENMP' "$KOKKOS_CFG" then : have_kokkos_openmp=yes fi @@ -64093,10 +64093,39 @@ fi if test "x$NVCC" = "xno" then : as_fn_error $? "nvcc not found but Kokkos CUDA backend requested" "$LINENO" 5 +fi + kokkos_cuda_arch=`sed -n 's/^#define PETSC_PKG_CUDA_MIN_ARCH //p' "${PETSC_DIR}/include/petscconf.h" "${PETSC_DIR}/${PETSC_ARCH}/include/petscconf.h" 2>/dev/null | head -n 1` + if test "x$kokkos_cuda_arch" = "x" && test -r "$KOKKOS_CFG" +then : + kokkos_cuda_arch=`sed -n \ + -e 's/^#define KOKKOS_ARCH_BLACKWELL120.*/120/p' \ + -e 's/^#define KOKKOS_ARCH_BLACKWELL100.*/100/p' \ + -e 's/^#define KOKKOS_ARCH_HOPPER90.*/90/p' \ + -e 's/^#define KOKKOS_ARCH_ADA89.*/89/p' \ + -e 's/^#define KOKKOS_ARCH_AMPERE86.*/86/p' \ + -e 's/^#define KOKKOS_ARCH_AMPERE80.*/80/p' \ + -e 's/^#define KOKKOS_ARCH_TURING75.*/75/p' \ + -e 's/^#define KOKKOS_ARCH_VOLTA72.*/72/p' \ + -e 's/^#define KOKKOS_ARCH_VOLTA70.*/70/p' \ + -e 's/^#define KOKKOS_ARCH_PASCAL61.*/61/p' \ + -e 's/^#define KOKKOS_ARCH_PASCAL60.*/60/p' \ + -e 's/^#define KOKKOS_ARCH_MAXWELL53.*/53/p' \ + -e 's/^#define KOKKOS_ARCH_MAXWELL52.*/52/p' \ + -e 's/^#define KOKKOS_ARCH_MAXWELL50.*/50/p' \ + -e 's/^#define KOKKOS_ARCH_KEPLER37.*/37/p' \ + -e 's/^#define KOKKOS_ARCH_KEPLER35.*/35/p' \ + -e 's/^#define KOKKOS_ARCH_KEPLER32.*/32/p' \ + -e 's/^#define KOKKOS_ARCH_KEPLER30.*/30/p' \ + "$KOKKOS_CFG" 2>/dev/null | head -n 1` +fi + kokkos_cuda_arch_flag="" + if test "x$kokkos_cuda_arch" != "x" +then : + kokkos_cuda_arch_flag="-arch=sm_${kokkos_cuda_arch}" fi KOKKOS_CXX="$NVCC" - KOKKOS_CXXFLAGS="--forward-unknown-to-host-compiler --extended-lambda --disable-warnings -x cu -ccbin $CXX" - KOKKOS_LDFLAGS="--forward-unknown-to-host-compiler -L$KOKKOS_DIR/lib" + KOKKOS_CXXFLAGS="$kokkos_cuda_arch_flag --forward-unknown-to-host-compiler --extended-lambda --disable-warnings -x cu -ccbin $CXX" + KOKKOS_LDFLAGS="--forward-unknown-to-host-compiler $kokkos_cuda_arch_flag -L$KOKKOS_DIR/lib" if test "x$have_kokkos_openmp" = "xyes" then : @@ -69065,4 +69094,3 @@ printf "%s\n" "--------- Done Configuring libMesh ----------" >&6; } { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: ---------------------------------------------" >&5 printf "%s\n" "---------------------------------------------" >&6; } # rm -f -r conftest* config.cache include/libmesh/libmesh_config.h.tmp - diff --git a/m4/libmesh_optional_packages.m4 b/m4/libmesh_optional_packages.m4 index 190a90c824e..36daf253bbf 100644 --- a/m4/libmesh_optional_packages.m4 +++ b/m4/libmesh_optional_packages.m4 @@ -899,13 +899,13 @@ AS_IF([test "x$KOKKOS_DIR" != "xno"], [ AS_IF([test -r "$KOKKOS_CFG"], [ - AS_IF([grep -q 'KOKKOS_ENABLE_CUDA' "$KOKKOS_CFG"], + AS_IF([grep -q '^#define KOKKOS_ENABLE_CUDA' "$KOKKOS_CFG"], [KOKKOS_BACKEND=cuda], - [AS_IF([grep -q 'KOKKOS_ENABLE_HIP' "$KOKKOS_CFG"], + [AS_IF([grep -q '^#define KOKKOS_ENABLE_HIP' "$KOKKOS_CFG"], [KOKKOS_BACKEND=hip], - [AS_IF([grep -q 'KOKKOS_ENABLE_SYCL' "$KOKKOS_CFG"], + [AS_IF([grep -q '^#define KOKKOS_ENABLE_SYCL' "$KOKKOS_CFG"], [KOKKOS_BACKEND=sycl], - [AS_IF([grep -q 'KOKKOS_ENABLE_OPENMP' "$KOKKOS_CFG"], + [AS_IF([grep -q '^#define KOKKOS_ENABLE_OPENMP' "$KOKKOS_CFG"], [KOKKOS_BACKEND=openmp], [KOKKOS_BACKEND=serial])])])]) ], @@ -917,7 +917,7 @@ AS_IF([test "x$KOKKOS_DIR" != "xno"], dnl Check if Kokkos was built with OpenMP have_kokkos_openmp=no AS_IF([test -r "$KOKKOS_CFG"], - [AS_IF([grep -q 'KOKKOS_ENABLE_OPENMP' "$KOKKOS_CFG"], + [AS_IF([grep -q '^#define KOKKOS_ENABLE_OPENMP' "$KOKKOS_CFG"], [have_kokkos_openmp=yes])]) case "$KOKKOS_BACKEND" in @@ -925,9 +925,34 @@ AS_IF([test "x$KOKKOS_DIR" != "xno"], AC_PATH_PROG([NVCC],[nvcc],[no],[$PATH]) AS_IF([test "x$NVCC" = "xno"], [AC_MSG_ERROR([nvcc not found but Kokkos CUDA backend requested])]) + kokkos_cuda_arch=`sed -n 's/^#define PETSC_PKG_CUDA_MIN_ARCH //p' "${PETSC_DIR}/include/petscconf.h" "${PETSC_DIR}/${PETSC_ARCH}/include/petscconf.h" 2>/dev/null | head -n 1` + AS_IF([test "x$kokkos_cuda_arch" = "x" && test -r "$KOKKOS_CFG"], + [kokkos_cuda_arch=`sed -n \ + -e 's/^#define KOKKOS_ARCH_BLACKWELL120.*/120/p' \ + -e 's/^#define KOKKOS_ARCH_BLACKWELL100.*/100/p' \ + -e 's/^#define KOKKOS_ARCH_HOPPER90.*/90/p' \ + -e 's/^#define KOKKOS_ARCH_ADA89.*/89/p' \ + -e 's/^#define KOKKOS_ARCH_AMPERE86.*/86/p' \ + -e 's/^#define KOKKOS_ARCH_AMPERE80.*/80/p' \ + -e 's/^#define KOKKOS_ARCH_TURING75.*/75/p' \ + -e 's/^#define KOKKOS_ARCH_VOLTA72.*/72/p' \ + -e 's/^#define KOKKOS_ARCH_VOLTA70.*/70/p' \ + -e 's/^#define KOKKOS_ARCH_PASCAL61.*/61/p' \ + -e 's/^#define KOKKOS_ARCH_PASCAL60.*/60/p' \ + -e 's/^#define KOKKOS_ARCH_MAXWELL53.*/53/p' \ + -e 's/^#define KOKKOS_ARCH_MAXWELL52.*/52/p' \ + -e 's/^#define KOKKOS_ARCH_MAXWELL50.*/50/p' \ + -e 's/^#define KOKKOS_ARCH_KEPLER37.*/37/p' \ + -e 's/^#define KOKKOS_ARCH_KEPLER35.*/35/p' \ + -e 's/^#define KOKKOS_ARCH_KEPLER32.*/32/p' \ + -e 's/^#define KOKKOS_ARCH_KEPLER30.*/30/p' \ + "$KOKKOS_CFG" 2>/dev/null | head -n 1`]) + kokkos_cuda_arch_flag="" + AS_IF([test "x$kokkos_cuda_arch" != "x"], + [kokkos_cuda_arch_flag="-arch=sm_${kokkos_cuda_arch}"]) KOKKOS_CXX="$NVCC" - KOKKOS_CXXFLAGS="--forward-unknown-to-host-compiler --extended-lambda --disable-warnings -x cu -ccbin $CXX" - KOKKOS_LDFLAGS="--forward-unknown-to-host-compiler -L$KOKKOS_DIR/lib" + KOKKOS_CXXFLAGS="$kokkos_cuda_arch_flag --forward-unknown-to-host-compiler --extended-lambda --disable-warnings -x cu -ccbin $CXX" + KOKKOS_LDFLAGS="--forward-unknown-to-host-compiler $kokkos_cuda_arch_flag -L$KOKKOS_DIR/lib" AS_IF([test "x$have_kokkos_openmp" = "xyes"], [ KOKKOS_CXXFLAGS="$KOKKOS_CXXFLAGS -fopenmp" From b3777bbc20cd657b7e34c2b1f40cea70003d1978 Mon Sep 17 00:00:00 2001 From: rochi00 Date: Fri, 22 May 2026 16:19:00 -0600 Subject: [PATCH 44/46] Align Kokkos unit test naming with libMesh modes --- tests/Makefile.am | 91 +++++--- tests/Makefile.in | 204 +++++++++--------- ...nsor_ops_oracle_test.K => driver_kokkos.K} | 9 +- .../numerics/kokkos_vector_ops_oracle_test.K | 20 -- 4 files changed, 177 insertions(+), 147 deletions(-) rename tests/{numerics/kokkos_tensor_ops_oracle_test.K => driver_kokkos.K} (53%) delete mode 100644 tests/numerics/kokkos_vector_ops_oracle_test.K diff --git a/tests/Makefile.am b/tests/Makefile.am index 85d686408c7..e6d420f3a62 100644 --- a/tests/Makefile.am +++ b/tests/Makefile.am @@ -242,6 +242,13 @@ unit_tests_data = $(data) # Why isn't this working automatically? EXTRA_DIST = $(data) +kokkos_unit_test_sources = \ + numerics/kokkos_numerics_oracle_test_utils.h \ + numerics/kokkos_tensor_ops_oracle_fixtures.h \ + numerics/kokkos_tensor_ops_oracle_runners.h \ + numerics/kokkos_vector_ops_oracle_fixtures.h \ + numerics/kokkos_vector_ops_oracle_runners.h +EXTRA_DIST += $(kokkos_unit_test_sources) if LIBMESH_ENABLE_FPARSER unit_tests_sources += \ @@ -254,20 +261,19 @@ TESTS = if LIBMESH_ENABLE_KOKKOS KOKKOS_TEST_CPPFLAGS += -I$(top_srcdir)/include $(KOKKOS_CPPFLAGS) - check_PROGRAMS += kokkos_vector_ops_oracle_unit kokkos_tensor_ops_oracle_unit - TESTS += kokkos_vector_ops_oracle_unit kokkos_tensor_ops_oracle_unit - - kokkos_vector_ops_oracle_unit_SOURCES = numerics/kokkos_vector_ops_oracle_test.K - kokkos_vector_ops_oracle_unit_CPPFLAGS = $(AM_CPPFLAGS) $(KOKKOS_TEST_CPPFLAGS) - kokkos_vector_ops_oracle_unit_CXXFLAGS = $(AM_CXXFLAGS) $(KOKKOS_CXXFLAGS) - kokkos_vector_ops_oracle_unit_LDFLAGS = $(AM_LDFLAGS) $(KOKKOS_LDFLAGS) - kokkos_vector_ops_oracle_unit_LDADD = $(top_builddir)/libmesh_opt.la $(KOKKOS_LIBS) $(libmesh_optional_LIBS) +if LIBMESH_DBG_MODE + check_PROGRAMS += unit_tests-kokkos-dbg + TESTS += unit_tests-kokkos-dbg + unit_tests_kokkos_dbg_SOURCES = + EXTRA_unit_tests_kokkos_dbg_SOURCES = driver_kokkos.K +endif - kokkos_tensor_ops_oracle_unit_SOURCES = numerics/kokkos_tensor_ops_oracle_test.K - kokkos_tensor_ops_oracle_unit_CPPFLAGS = $(AM_CPPFLAGS) $(KOKKOS_TEST_CPPFLAGS) - kokkos_tensor_ops_oracle_unit_CXXFLAGS = $(AM_CXXFLAGS) $(KOKKOS_CXXFLAGS) - kokkos_tensor_ops_oracle_unit_LDFLAGS = $(AM_LDFLAGS) $(KOKKOS_LDFLAGS) - kokkos_tensor_ops_oracle_unit_LDADD = $(top_builddir)/libmesh_opt.la $(KOKKOS_LIBS) $(libmesh_optional_LIBS) +if LIBMESH_OPT_MODE + check_PROGRAMS += unit_tests-kokkos-opt + TESTS += unit_tests-kokkos-opt + unit_tests_kokkos_opt_SOURCES = + EXTRA_unit_tests_kokkos_opt_SOURCES = driver_kokkos.K +endif endif # our GLIBC debugging preprocessor flags seem to potentially conflict @@ -382,24 +388,52 @@ if LIBMESH_ENABLE_CPPUNIT TESTS += run_unit_tests.sh endif -# Compile .K translation units with the Kokkos device compiler. -# If KOKKOS_CXX is not the MPI wrapper, configure populates -# $(KOKKOS_MPI_CPPFLAGS) from the wrapper's compile flags so mpi.h and -# any wrapper-provided defines remain visible. -.K.o: +if LIBMESH_ENABLE_KOKKOS +driver_kokkos_src = driver_kokkos.K +unit_tests_kokkos_dbg_object = unit_tests_kokkos_dbg-driver_kokkos.$(OBJEXT) +unit_tests_kokkos_opt_object = unit_tests_kokkos_opt-driver_kokkos.$(OBJEXT) +unit_tests_kokkos_dbg_depfile = $(DEPDIR)/unit_tests_kokkos_dbg-driver_kokkos.d +unit_tests_kokkos_opt_depfile = $(DEPDIR)/unit_tests_kokkos_opt-driver_kokkos.d +kokkos_unit_test_depfiles = $(unit_tests_kokkos_dbg_depfile) $(unit_tests_kokkos_opt_depfile) +kokkos_unit_test_cleanfiles = $(unit_tests_kokkos_dbg_object) $(unit_tests_kokkos_opt_object) \ + $(kokkos_unit_test_depfiles) \ + unit_tests-kokkos-dbg$(EXEEXT) unit_tests-kokkos-opt$(EXEEXT) + +# Build the Kokkos tests with the same mode-suffixed naming as the +# original libMesh unit test executables, while still compiling with +# the Kokkos device compiler and mode-specific flags. +$(unit_tests_kokkos_dbg_object): $(driver_kokkos_src) + @$(MKDIR_P) $(DEPDIR) $(KOKKOS_CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ - $(KOKKOS_MPI_CPPFLAGS) $(AM_CPPFLAGS) $(CPPFLAGS) $(KOKKOS_TEST_CPPFLAGS) \ - $(AM_CXXFLAGS) $(CXXFLAGS) $(KOKKOS_CXXFLAGS) \ + $(KOKKOS_MPI_CPPFLAGS) $(CPPFLAGS_DBG) $(AM_CPPFLAGS) $(CPPFLAGS) $(KOKKOS_TEST_CPPFLAGS) \ + $(AM_CXXFLAGS) $(CXXFLAGS_DBG) $(CXXFLAGS) $(KOKKOS_CXXFLAGS) \ + -MMD -MP -MF $(unit_tests_kokkos_dbg_depfile) \ -c $< -o $@ -# Custom link rules so the Kokkos compiler drives the final link step. -kokkos_vector_ops_oracle_unit_LINK = \ - $(LIBTOOL) --tag=CXX --mode=link $(KOKKOS_CXX) \ - $(LDFLAGS) $(kokkos_vector_ops_oracle_unit_LDFLAGS) -o $@ +$(unit_tests_kokkos_opt_object): $(driver_kokkos_src) + @$(MKDIR_P) $(DEPDIR) + $(KOKKOS_CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ + $(KOKKOS_MPI_CPPFLAGS) $(CPPFLAGS_OPT) $(AM_CPPFLAGS) $(CPPFLAGS) $(KOKKOS_TEST_CPPFLAGS) \ + $(AM_CXXFLAGS) $(CXXFLAGS_OPT) $(CXXFLAGS) $(KOKKOS_CXXFLAGS) \ + -MMD -MP -MF $(unit_tests_kokkos_opt_depfile) \ + -c $< -o $@ -kokkos_tensor_ops_oracle_unit_LINK = \ - $(LIBTOOL) --tag=CXX --mode=link $(KOKKOS_CXX) \ - $(LDFLAGS) $(kokkos_tensor_ops_oracle_unit_LDFLAGS) -o $@ +unit_tests-kokkos-dbg$(EXEEXT): $(unit_tests_kokkos_dbg_object) $(top_builddir)/libmesh_dbg.la + @rm -f $@ + $(AM_V_GEN)$(LIBTOOL) --tag=CXX --mode=link $(KOKKOS_CXX) \ + $(LDFLAGS) $(AM_LDFLAGS) $(KOKKOS_LDFLAGS) -o $@ \ + $(unit_tests_kokkos_dbg_object) \ + $(top_builddir)/libmesh_dbg.la $(KOKKOS_LIBS) $(libmesh_optional_LIBS) $(LIBS) + +unit_tests-kokkos-opt$(EXEEXT): $(unit_tests_kokkos_opt_object) $(top_builddir)/libmesh_opt.la + @rm -f $@ + $(AM_V_GEN)$(LIBTOOL) --tag=CXX --mode=link $(KOKKOS_CXX) \ + $(LDFLAGS) $(AM_LDFLAGS) $(KOKKOS_LDFLAGS) -o $@ \ + $(unit_tests_kokkos_opt_object) \ + $(top_builddir)/libmesh_opt.la $(KOKKOS_LIBS) $(libmesh_optional_LIBS) $(LIBS) + +-include $(kokkos_unit_test_depfiles) +endif CLEANFILES = cube_mesh.xda \ slit_mesh.xda \ @@ -482,7 +516,8 @@ CLEANFILES = cube_mesh.xda \ write_exodus_TRI6.e \ write_exodus_TRI7.e \ write_exodus_TRISHELL3.e \ - smoother.out + smoother.out \ + $(kokkos_unit_test_cleanfiles) # need to link any data files for VPATH builds if LIBMESH_VPATH_BUILD diff --git a/tests/Makefile.in b/tests/Makefile.in index 85967ce161f..9d34d678220 100644 --- a/tests/Makefile.in +++ b/tests/Makefile.in @@ -96,30 +96,32 @@ target_triplet = @target@ check_PROGRAMS = $(am__EXEEXT_1) $(am__EXEEXT_2) $(am__EXEEXT_3) \ $(am__EXEEXT_4) $(am__EXEEXT_5) $(am__EXEEXT_6) \ - $(am__EXEEXT_7) -TESTS = $(am__EXEEXT_1) $(am__append_11) + $(am__EXEEXT_7) $(am__EXEEXT_8) +TESTS = $(am__EXEEXT_1) $(am__EXEEXT_2) $(am__append_13) @LIBMESH_ENABLE_KOKKOS_TRUE@am__append_2 = -I$(top_srcdir)/include $(KOKKOS_CPPFLAGS) -@LIBMESH_ENABLE_KOKKOS_TRUE@am__append_3 = kokkos_vector_ops_oracle_unit kokkos_tensor_ops_oracle_unit -@LIBMESH_ENABLE_KOKKOS_TRUE@am__append_4 = kokkos_vector_ops_oracle_unit kokkos_tensor_ops_oracle_unit +@LIBMESH_DBG_MODE_TRUE@@LIBMESH_ENABLE_KOKKOS_TRUE@am__append_3 = unit_tests-kokkos-dbg +@LIBMESH_DBG_MODE_TRUE@@LIBMESH_ENABLE_KOKKOS_TRUE@am__append_4 = unit_tests-kokkos-dbg +@LIBMESH_ENABLE_KOKKOS_TRUE@@LIBMESH_OPT_MODE_TRUE@am__append_5 = unit_tests-kokkos-opt +@LIBMESH_ENABLE_KOKKOS_TRUE@@LIBMESH_OPT_MODE_TRUE@am__append_6 = unit_tests-kokkos-opt # our GLIBC debugging preprocessor flags seem to potentially conflict # with libcppunit binaries. Some cppunit versions work fine for us, # others segfault and/or hang. By default we will not run # GLIBCXX-debugging builds with cppunit unless specifically # configured to. -@ACSM_ENABLE_GLIBCXX_DEBUGGING_CPPUNIT_TRUE@@ACSM_ENABLE_GLIBCXX_DEBUGGING_TRUE@@LIBMESH_DBG_MODE_TRUE@@LIBMESH_ENABLE_CPPUNIT_TRUE@am__append_5 = unit_tests-dbg -@ACSM_ENABLE_GLIBCXX_DEBUGGING_FALSE@@LIBMESH_DBG_MODE_TRUE@@LIBMESH_ENABLE_CPPUNIT_TRUE@am__append_6 = unit_tests-dbg -@LIBMESH_DEVEL_MODE_TRUE@@LIBMESH_ENABLE_CPPUNIT_TRUE@am__append_7 = unit_tests-devel -@LIBMESH_ENABLE_CPPUNIT_TRUE@@LIBMESH_PROF_MODE_TRUE@am__append_8 = unit_tests-prof -@LIBMESH_ENABLE_CPPUNIT_TRUE@@LIBMESH_OPROF_MODE_TRUE@am__append_9 = unit_tests-oprof -@LIBMESH_ENABLE_CPPUNIT_TRUE@@LIBMESH_OPT_MODE_TRUE@am__append_10 = unit_tests-opt -@LIBMESH_ENABLE_CPPUNIT_TRUE@am__append_11 = run_unit_tests.sh -@LIBMESH_VPATH_BUILD_TRUE@am__append_12 = .linkstamp +@ACSM_ENABLE_GLIBCXX_DEBUGGING_CPPUNIT_TRUE@@ACSM_ENABLE_GLIBCXX_DEBUGGING_TRUE@@LIBMESH_DBG_MODE_TRUE@@LIBMESH_ENABLE_CPPUNIT_TRUE@am__append_7 = unit_tests-dbg +@ACSM_ENABLE_GLIBCXX_DEBUGGING_FALSE@@LIBMESH_DBG_MODE_TRUE@@LIBMESH_ENABLE_CPPUNIT_TRUE@am__append_8 = unit_tests-dbg +@LIBMESH_DEVEL_MODE_TRUE@@LIBMESH_ENABLE_CPPUNIT_TRUE@am__append_9 = unit_tests-devel +@LIBMESH_ENABLE_CPPUNIT_TRUE@@LIBMESH_PROF_MODE_TRUE@am__append_10 = unit_tests-prof +@LIBMESH_ENABLE_CPPUNIT_TRUE@@LIBMESH_OPROF_MODE_TRUE@am__append_11 = unit_tests-oprof +@LIBMESH_ENABLE_CPPUNIT_TRUE@@LIBMESH_OPT_MODE_TRUE@am__append_12 = unit_tests-opt +@LIBMESH_ENABLE_CPPUNIT_TRUE@am__append_13 = run_unit_tests.sh +@LIBMESH_VPATH_BUILD_TRUE@am__append_14 = .linkstamp ###################################################################### # # Don't leave code coverage outputs lying around -@CODE_COVERAGE_ENABLED_TRUE@am__append_13 = */*.gcda */*.gcno +@CODE_COVERAGE_ENABLED_TRUE@am__append_15 = */*.gcda */*.gcno subdir = tests ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = \ @@ -188,34 +190,14 @@ mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/include/libmesh_config.h.tmp CONFIG_CLEAN_FILES = run_unit_tests.sh CONFIG_CLEAN_VPATH_FILES = -@LIBMESH_ENABLE_KOKKOS_TRUE@am__EXEEXT_1 = kokkos_vector_ops_oracle_unit$(EXEEXT) \ -@LIBMESH_ENABLE_KOKKOS_TRUE@ kokkos_tensor_ops_oracle_unit$(EXEEXT) -@ACSM_ENABLE_GLIBCXX_DEBUGGING_CPPUNIT_TRUE@@ACSM_ENABLE_GLIBCXX_DEBUGGING_TRUE@@LIBMESH_DBG_MODE_TRUE@@LIBMESH_ENABLE_CPPUNIT_TRUE@am__EXEEXT_2 = unit_tests-dbg$(EXEEXT) -@ACSM_ENABLE_GLIBCXX_DEBUGGING_FALSE@@LIBMESH_DBG_MODE_TRUE@@LIBMESH_ENABLE_CPPUNIT_TRUE@am__EXEEXT_3 = unit_tests-dbg$(EXEEXT) -@LIBMESH_DEVEL_MODE_TRUE@@LIBMESH_ENABLE_CPPUNIT_TRUE@am__EXEEXT_4 = unit_tests-devel$(EXEEXT) -@LIBMESH_ENABLE_CPPUNIT_TRUE@@LIBMESH_PROF_MODE_TRUE@am__EXEEXT_5 = unit_tests-prof$(EXEEXT) -@LIBMESH_ENABLE_CPPUNIT_TRUE@@LIBMESH_OPROF_MODE_TRUE@am__EXEEXT_6 = unit_tests-oprof$(EXEEXT) -@LIBMESH_ENABLE_CPPUNIT_TRUE@@LIBMESH_OPT_MODE_TRUE@am__EXEEXT_7 = unit_tests-opt$(EXEEXT) -am__kokkos_tensor_ops_oracle_unit_SOURCES_DIST = \ - numerics/kokkos_tensor_ops_oracle_test.K -am__dirstamp = $(am__leading_dot)dirstamp -@LIBMESH_ENABLE_KOKKOS_TRUE@am_kokkos_tensor_ops_oracle_unit_OBJECTS = numerics/kokkos_tensor_ops_oracle_test.$(OBJEXT) -kokkos_tensor_ops_oracle_unit_OBJECTS = \ - $(am_kokkos_tensor_ops_oracle_unit_OBJECTS) -am__DEPENDENCIES_1 = -@LIBMESH_ENABLE_KOKKOS_TRUE@kokkos_tensor_ops_oracle_unit_DEPENDENCIES = \ -@LIBMESH_ENABLE_KOKKOS_TRUE@ $(top_builddir)/libmesh_opt.la \ -@LIBMESH_ENABLE_KOKKOS_TRUE@ $(am__DEPENDENCIES_1) \ -@LIBMESH_ENABLE_KOKKOS_TRUE@ $(am__DEPENDENCIES_1) -am__kokkos_vector_ops_oracle_unit_SOURCES_DIST = \ - numerics/kokkos_vector_ops_oracle_test.K -@LIBMESH_ENABLE_KOKKOS_TRUE@am_kokkos_vector_ops_oracle_unit_OBJECTS = numerics/kokkos_vector_ops_oracle_test.$(OBJEXT) -kokkos_vector_ops_oracle_unit_OBJECTS = \ - $(am_kokkos_vector_ops_oracle_unit_OBJECTS) -@LIBMESH_ENABLE_KOKKOS_TRUE@kokkos_vector_ops_oracle_unit_DEPENDENCIES = \ -@LIBMESH_ENABLE_KOKKOS_TRUE@ $(top_builddir)/libmesh_opt.la \ -@LIBMESH_ENABLE_KOKKOS_TRUE@ $(am__DEPENDENCIES_1) \ -@LIBMESH_ENABLE_KOKKOS_TRUE@ $(am__DEPENDENCIES_1) +@LIBMESH_DBG_MODE_TRUE@@LIBMESH_ENABLE_KOKKOS_TRUE@am__EXEEXT_1 = unit_tests-kokkos-dbg$(EXEEXT) +@LIBMESH_ENABLE_KOKKOS_TRUE@@LIBMESH_OPT_MODE_TRUE@am__EXEEXT_2 = unit_tests-kokkos-opt$(EXEEXT) +@ACSM_ENABLE_GLIBCXX_DEBUGGING_CPPUNIT_TRUE@@ACSM_ENABLE_GLIBCXX_DEBUGGING_TRUE@@LIBMESH_DBG_MODE_TRUE@@LIBMESH_ENABLE_CPPUNIT_TRUE@am__EXEEXT_3 = unit_tests-dbg$(EXEEXT) +@ACSM_ENABLE_GLIBCXX_DEBUGGING_FALSE@@LIBMESH_DBG_MODE_TRUE@@LIBMESH_ENABLE_CPPUNIT_TRUE@am__EXEEXT_4 = unit_tests-dbg$(EXEEXT) +@LIBMESH_DEVEL_MODE_TRUE@@LIBMESH_ENABLE_CPPUNIT_TRUE@am__EXEEXT_5 = unit_tests-devel$(EXEEXT) +@LIBMESH_ENABLE_CPPUNIT_TRUE@@LIBMESH_PROF_MODE_TRUE@am__EXEEXT_6 = unit_tests-prof$(EXEEXT) +@LIBMESH_ENABLE_CPPUNIT_TRUE@@LIBMESH_OPROF_MODE_TRUE@am__EXEEXT_7 = unit_tests-oprof$(EXEEXT) +@LIBMESH_ENABLE_CPPUNIT_TRUE@@LIBMESH_OPT_MODE_TRUE@am__EXEEXT_8 = unit_tests-opt$(EXEEXT) am__unit_tests_dbg_SOURCES_DIST = driver.C libmesh_cppunit.h \ stream_redirector.h test_comm.h base/dof_object_test.h \ base/dof_map_test.C base/default_coupling_test.C \ @@ -290,6 +272,7 @@ am__unit_tests_dbg_SOURCES_DIST = driver.C libmesh_cppunit.h \ utils/parameters_test.C utils/point_locator_test.C \ utils/rb_parameters_test.C utils/transparent_comparator.C \ utils/vectormap_test.C utils/xdr_test.C fparser/autodiff.C +am__dirstamp = $(am__leading_dot)dirstamp @LIBMESH_ENABLE_FPARSER_TRUE@am__objects_1 = fparser/unit_tests_dbg-autodiff.$(OBJEXT) am__objects_2 = unit_tests_dbg-driver.$(OBJEXT) \ base/unit_tests_dbg-dof_map_test.$(OBJEXT) \ @@ -624,6 +607,14 @@ unit_tests_devel_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CXX \ $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CXXLD) \ $(unit_tests_devel_CXXFLAGS) $(CXXFLAGS) $(AM_LDFLAGS) \ $(LDFLAGS) -o $@ +am_unit_tests_kokkos_dbg_OBJECTS = +am__EXTRA_unit_tests_kokkos_dbg_SOURCES_DIST = driver_kokkos.K +unit_tests_kokkos_dbg_OBJECTS = $(am_unit_tests_kokkos_dbg_OBJECTS) +unit_tests_kokkos_dbg_LDADD = $(LDADD) +am_unit_tests_kokkos_opt_OBJECTS = +am__EXTRA_unit_tests_kokkos_opt_SOURCES_DIST = driver_kokkos.K +unit_tests_kokkos_opt_OBJECTS = $(am_unit_tests_kokkos_opt_OBJECTS) +unit_tests_kokkos_opt_LDADD = $(LDADD) am__unit_tests_oprof_SOURCES_DIST = driver.C libmesh_cppunit.h \ stream_redirector.h test_comm.h base/dof_object_test.h \ base/dof_map_test.C base/default_coupling_test.C \ @@ -1887,15 +1878,19 @@ AM_V_CCLD = $(am__v_CCLD_@AM_V@) am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@) am__v_CCLD_0 = @echo " CCLD " $@; am__v_CCLD_1 = -SOURCES = $(kokkos_tensor_ops_oracle_unit_SOURCES) \ - $(kokkos_vector_ops_oracle_unit_SOURCES) \ - $(unit_tests_dbg_SOURCES) $(unit_tests_devel_SOURCES) \ +SOURCES = $(unit_tests_dbg_SOURCES) $(unit_tests_devel_SOURCES) \ + $(unit_tests_kokkos_dbg_SOURCES) \ + $(EXTRA_unit_tests_kokkos_dbg_SOURCES) \ + $(unit_tests_kokkos_opt_SOURCES) \ + $(EXTRA_unit_tests_kokkos_opt_SOURCES) \ $(unit_tests_oprof_SOURCES) $(unit_tests_opt_SOURCES) \ $(unit_tests_prof_SOURCES) -DIST_SOURCES = $(am__kokkos_tensor_ops_oracle_unit_SOURCES_DIST) \ - $(am__kokkos_vector_ops_oracle_unit_SOURCES_DIST) \ - $(am__unit_tests_dbg_SOURCES_DIST) \ +DIST_SOURCES = $(am__unit_tests_dbg_SOURCES_DIST) \ $(am__unit_tests_devel_SOURCES_DIST) \ + $(unit_tests_kokkos_dbg_SOURCES) \ + $(am__EXTRA_unit_tests_kokkos_dbg_SOURCES_DIST) \ + $(unit_tests_kokkos_opt_SOURCES) \ + $(am__EXTRA_unit_tests_kokkos_opt_SOURCES_DIST) \ $(am__unit_tests_oprof_SOURCES_DIST) \ $(am__unit_tests_opt_SOURCES_DIST) \ $(am__unit_tests_prof_SOURCES_DIST) @@ -2490,17 +2485,18 @@ data = matrices/geom_1_extraction_op.h5 \ unit_tests_data = $(data) # Why isn't this working automatically? -EXTRA_DIST = $(data) -@LIBMESH_ENABLE_KOKKOS_TRUE@kokkos_vector_ops_oracle_unit_SOURCES = numerics/kokkos_vector_ops_oracle_test.K -@LIBMESH_ENABLE_KOKKOS_TRUE@kokkos_vector_ops_oracle_unit_CPPFLAGS = $(AM_CPPFLAGS) $(KOKKOS_TEST_CPPFLAGS) -@LIBMESH_ENABLE_KOKKOS_TRUE@kokkos_vector_ops_oracle_unit_CXXFLAGS = $(AM_CXXFLAGS) $(KOKKOS_CXXFLAGS) -@LIBMESH_ENABLE_KOKKOS_TRUE@kokkos_vector_ops_oracle_unit_LDFLAGS = $(AM_LDFLAGS) $(KOKKOS_LDFLAGS) -@LIBMESH_ENABLE_KOKKOS_TRUE@kokkos_vector_ops_oracle_unit_LDADD = $(top_builddir)/libmesh_opt.la $(KOKKOS_LIBS) $(libmesh_optional_LIBS) -@LIBMESH_ENABLE_KOKKOS_TRUE@kokkos_tensor_ops_oracle_unit_SOURCES = numerics/kokkos_tensor_ops_oracle_test.K -@LIBMESH_ENABLE_KOKKOS_TRUE@kokkos_tensor_ops_oracle_unit_CPPFLAGS = $(AM_CPPFLAGS) $(KOKKOS_TEST_CPPFLAGS) -@LIBMESH_ENABLE_KOKKOS_TRUE@kokkos_tensor_ops_oracle_unit_CXXFLAGS = $(AM_CXXFLAGS) $(KOKKOS_CXXFLAGS) -@LIBMESH_ENABLE_KOKKOS_TRUE@kokkos_tensor_ops_oracle_unit_LDFLAGS = $(AM_LDFLAGS) $(KOKKOS_LDFLAGS) -@LIBMESH_ENABLE_KOKKOS_TRUE@kokkos_tensor_ops_oracle_unit_LDADD = $(top_builddir)/libmesh_opt.la $(KOKKOS_LIBS) $(libmesh_optional_LIBS) +EXTRA_DIST = $(data) $(kokkos_unit_test_sources) +kokkos_unit_test_sources = \ + numerics/kokkos_numerics_oracle_test_utils.h \ + numerics/kokkos_tensor_ops_oracle_fixtures.h \ + numerics/kokkos_tensor_ops_oracle_runners.h \ + numerics/kokkos_vector_ops_oracle_fixtures.h \ + numerics/kokkos_vector_ops_oracle_runners.h + +@LIBMESH_DBG_MODE_TRUE@@LIBMESH_ENABLE_KOKKOS_TRUE@unit_tests_kokkos_dbg_SOURCES = +@LIBMESH_DBG_MODE_TRUE@@LIBMESH_ENABLE_KOKKOS_TRUE@EXTRA_unit_tests_kokkos_dbg_SOURCES = driver_kokkos.K +@LIBMESH_ENABLE_KOKKOS_TRUE@@LIBMESH_OPT_MODE_TRUE@unit_tests_kokkos_opt_SOURCES = +@LIBMESH_ENABLE_KOKKOS_TRUE@@LIBMESH_OPT_MODE_TRUE@EXTRA_unit_tests_kokkos_opt_SOURCES = driver_kokkos.K @LIBMESH_DBG_MODE_TRUE@@LIBMESH_ENABLE_CPPUNIT_TRUE@unit_tests_dbg_SOURCES = $(unit_tests_sources) @LIBMESH_DBG_MODE_TRUE@@LIBMESH_ENABLE_CPPUNIT_TRUE@unit_tests_dbg_CPPFLAGS = $(CPPFLAGS_DBG) $(AM_CPPFLAGS) @LIBMESH_DBG_MODE_TRUE@@LIBMESH_ENABLE_CPPUNIT_TRUE@unit_tests_dbg_CXXFLAGS = $(CXXFLAGS_DBG) @@ -2531,15 +2527,15 @@ EXTRA_DIST = $(data) @LIBMESH_ENABLE_CPPUNIT_TRUE@@LIBMESH_OPT_MODE_TRUE@unit_tests_opt_LDADD = $(top_builddir)/libmesh_opt.la @LIBMESH_ENABLE_CPPUNIT_TRUE@@LIBMESH_OPT_MODE_TRUE@unit_tests_optdir = $(datadir) @LIBMESH_ENABLE_CPPUNIT_TRUE@@LIBMESH_OPT_MODE_TRUE@unit_tests_opt_DATA = $(data) - -# Custom link rules so the Kokkos compiler drives the final link step. -kokkos_vector_ops_oracle_unit_LINK = \ - $(LIBTOOL) --tag=CXX --mode=link $(KOKKOS_CXX) \ - $(LDFLAGS) $(kokkos_vector_ops_oracle_unit_LDFLAGS) -o $@ - -kokkos_tensor_ops_oracle_unit_LINK = \ - $(LIBTOOL) --tag=CXX --mode=link $(KOKKOS_CXX) \ - $(LDFLAGS) $(kokkos_tensor_ops_oracle_unit_LDFLAGS) -o $@ +@LIBMESH_ENABLE_KOKKOS_TRUE@driver_kokkos_src = driver_kokkos.K +@LIBMESH_ENABLE_KOKKOS_TRUE@unit_tests_kokkos_dbg_object = unit_tests_kokkos_dbg-driver_kokkos.$(OBJEXT) +@LIBMESH_ENABLE_KOKKOS_TRUE@unit_tests_kokkos_opt_object = unit_tests_kokkos_opt-driver_kokkos.$(OBJEXT) +@LIBMESH_ENABLE_KOKKOS_TRUE@unit_tests_kokkos_dbg_depfile = $(DEPDIR)/unit_tests_kokkos_dbg-driver_kokkos.d +@LIBMESH_ENABLE_KOKKOS_TRUE@unit_tests_kokkos_opt_depfile = $(DEPDIR)/unit_tests_kokkos_opt-driver_kokkos.d +@LIBMESH_ENABLE_KOKKOS_TRUE@kokkos_unit_test_depfiles = $(unit_tests_kokkos_dbg_depfile) $(unit_tests_kokkos_opt_depfile) +@LIBMESH_ENABLE_KOKKOS_TRUE@kokkos_unit_test_cleanfiles = $(unit_tests_kokkos_dbg_object) $(unit_tests_kokkos_opt_object) \ +@LIBMESH_ENABLE_KOKKOS_TRUE@ $(kokkos_unit_test_depfiles) \ +@LIBMESH_ENABLE_KOKKOS_TRUE@ unit_tests-kokkos-dbg$(EXEEXT) unit_tests-kokkos-opt$(EXEEXT) CLEANFILES = cube_mesh.xda slit_mesh.xda slit_solution.xda out.e \ mesh_with_soln.e elemental_from_nodal.e write_elemset_data.e \ @@ -2574,8 +2570,9 @@ CLEANFILES = cube_mesh.xda slit_mesh.xda slit_solution.xda out.e \ write_exodus_QUADSHELL9.e write_exodus_TET10.e \ write_exodus_TET14.e write_exodus_TET4.e write_exodus_TRI3.e \ write_exodus_TRI6.e write_exodus_TRI7.e \ - write_exodus_TRISHELL3.e smoother.out $(am__append_12) \ - $(am__append_13) + write_exodus_TRISHELL3.e smoother.out \ + $(kokkos_unit_test_cleanfiles) $(am__append_14) \ + $(am__append_15) # need to link any data files for VPATH builds @LIBMESH_VPATH_BUILD_TRUE@BUILT_SOURCES = .linkstamp @@ -2583,7 +2580,7 @@ all: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) all-am .SUFFIXES: -.SUFFIXES: .C .K .lo .o .obj +.SUFFIXES: .C .lo .o .obj $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ @@ -2619,24 +2616,6 @@ run_unit_tests.sh: $(top_builddir)/config.status $(srcdir)/run_unit_tests.sh.in clean-checkPROGRAMS: $(am__rm_f) $(check_PROGRAMS) test -z "$(EXEEXT)" || $(am__rm_f) $(check_PROGRAMS:$(EXEEXT)=) -numerics/$(am__dirstamp): - @$(MKDIR_P) numerics - @: >>numerics/$(am__dirstamp) -numerics/$(DEPDIR)/$(am__dirstamp): - @$(MKDIR_P) numerics/$(DEPDIR) - @: >>numerics/$(DEPDIR)/$(am__dirstamp) -numerics/kokkos_tensor_ops_oracle_test.$(OBJEXT): \ - numerics/$(am__dirstamp) numerics/$(DEPDIR)/$(am__dirstamp) - -kokkos_tensor_ops_oracle_unit$(EXEEXT): $(kokkos_tensor_ops_oracle_unit_OBJECTS) $(kokkos_tensor_ops_oracle_unit_DEPENDENCIES) $(EXTRA_kokkos_tensor_ops_oracle_unit_DEPENDENCIES) - @rm -f kokkos_tensor_ops_oracle_unit$(EXEEXT) - $(AM_V_GEN)$(kokkos_tensor_ops_oracle_unit_LINK) $(kokkos_tensor_ops_oracle_unit_OBJECTS) $(kokkos_tensor_ops_oracle_unit_LDADD) $(LIBS) -numerics/kokkos_vector_ops_oracle_test.$(OBJEXT): \ - numerics/$(am__dirstamp) numerics/$(DEPDIR)/$(am__dirstamp) - -kokkos_vector_ops_oracle_unit$(EXEEXT): $(kokkos_vector_ops_oracle_unit_OBJECTS) $(kokkos_vector_ops_oracle_unit_DEPENDENCIES) $(EXTRA_kokkos_vector_ops_oracle_unit_DEPENDENCIES) - @rm -f kokkos_vector_ops_oracle_unit$(EXEEXT) - $(AM_V_GEN)$(kokkos_vector_ops_oracle_unit_LINK) $(kokkos_vector_ops_oracle_unit_OBJECTS) $(kokkos_vector_ops_oracle_unit_LDADD) $(LIBS) base/$(am__dirstamp): @$(MKDIR_P) base @: >>base/$(am__dirstamp) @@ -2805,6 +2784,12 @@ mesh/unit_tests_dbg-project_solution_test.$(OBJEXT): \ mesh/$(am__dirstamp) mesh/$(DEPDIR)/$(am__dirstamp) mesh/unit_tests_dbg-xdrio_test.$(OBJEXT): mesh/$(am__dirstamp) \ mesh/$(DEPDIR)/$(am__dirstamp) +numerics/$(am__dirstamp): + @$(MKDIR_P) numerics + @: >>numerics/$(am__dirstamp) +numerics/$(DEPDIR)/$(am__dirstamp): + @$(MKDIR_P) numerics/$(DEPDIR) + @: >>numerics/$(DEPDIR)/$(am__dirstamp) numerics/unit_tests_dbg-composite_function_test.$(OBJEXT): \ numerics/$(am__dirstamp) numerics/$(DEPDIR)/$(am__dirstamp) numerics/unit_tests_dbg-coupling_matrix_test.$(OBJEXT): \ @@ -14789,15 +14774,40 @@ $(top_builddir)/libmesh_prof.la: FORCE $(top_builddir)/libmesh_oprof.la: FORCE (cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) libmesh_oprof.la) -# Compile .K translation units with the Kokkos device compiler. -# If KOKKOS_CXX is not the MPI wrapper, configure populates -# $(KOKKOS_MPI_CPPFLAGS) from the wrapper's compile flags so mpi.h and -# any wrapper-provided defines remain visible. -.K.o: - $(KOKKOS_CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ - $(KOKKOS_MPI_CPPFLAGS) $(AM_CPPFLAGS) $(CPPFLAGS) $(KOKKOS_TEST_CPPFLAGS) \ - $(AM_CXXFLAGS) $(CXXFLAGS) $(KOKKOS_CXXFLAGS) \ - -c $< -o $@ +# Build the Kokkos tests with the same mode-suffixed naming as the +# original libMesh unit test executables, while still compiling with +# the Kokkos device compiler and mode-specific flags. +@LIBMESH_ENABLE_KOKKOS_TRUE@$(unit_tests_kokkos_dbg_object): $(driver_kokkos_src) +@LIBMESH_ENABLE_KOKKOS_TRUE@ @$(MKDIR_P) $(DEPDIR) +@LIBMESH_ENABLE_KOKKOS_TRUE@ $(KOKKOS_CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ +@LIBMESH_ENABLE_KOKKOS_TRUE@ $(KOKKOS_MPI_CPPFLAGS) $(CPPFLAGS_DBG) $(AM_CPPFLAGS) $(CPPFLAGS) $(KOKKOS_TEST_CPPFLAGS) \ +@LIBMESH_ENABLE_KOKKOS_TRUE@ $(AM_CXXFLAGS) $(CXXFLAGS_DBG) $(CXXFLAGS) $(KOKKOS_CXXFLAGS) \ +@LIBMESH_ENABLE_KOKKOS_TRUE@ -MMD -MP -MF $(unit_tests_kokkos_dbg_depfile) \ +@LIBMESH_ENABLE_KOKKOS_TRUE@ -c $< -o $@ + +@LIBMESH_ENABLE_KOKKOS_TRUE@$(unit_tests_kokkos_opt_object): $(driver_kokkos_src) +@LIBMESH_ENABLE_KOKKOS_TRUE@ @$(MKDIR_P) $(DEPDIR) +@LIBMESH_ENABLE_KOKKOS_TRUE@ $(KOKKOS_CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ +@LIBMESH_ENABLE_KOKKOS_TRUE@ $(KOKKOS_MPI_CPPFLAGS) $(CPPFLAGS_OPT) $(AM_CPPFLAGS) $(CPPFLAGS) $(KOKKOS_TEST_CPPFLAGS) \ +@LIBMESH_ENABLE_KOKKOS_TRUE@ $(AM_CXXFLAGS) $(CXXFLAGS_OPT) $(CXXFLAGS) $(KOKKOS_CXXFLAGS) \ +@LIBMESH_ENABLE_KOKKOS_TRUE@ -MMD -MP -MF $(unit_tests_kokkos_opt_depfile) \ +@LIBMESH_ENABLE_KOKKOS_TRUE@ -c $< -o $@ + +@LIBMESH_ENABLE_KOKKOS_TRUE@unit_tests-kokkos-dbg$(EXEEXT): $(unit_tests_kokkos_dbg_object) $(top_builddir)/libmesh_dbg.la +@LIBMESH_ENABLE_KOKKOS_TRUE@ @rm -f $@ +@LIBMESH_ENABLE_KOKKOS_TRUE@ $(AM_V_GEN)$(LIBTOOL) --tag=CXX --mode=link $(KOKKOS_CXX) \ +@LIBMESH_ENABLE_KOKKOS_TRUE@ $(LDFLAGS) $(AM_LDFLAGS) $(KOKKOS_LDFLAGS) -o $@ \ +@LIBMESH_ENABLE_KOKKOS_TRUE@ $(unit_tests_kokkos_dbg_object) \ +@LIBMESH_ENABLE_KOKKOS_TRUE@ $(top_builddir)/libmesh_dbg.la $(KOKKOS_LIBS) $(libmesh_optional_LIBS) $(LIBS) + +@LIBMESH_ENABLE_KOKKOS_TRUE@unit_tests-kokkos-opt$(EXEEXT): $(unit_tests_kokkos_opt_object) $(top_builddir)/libmesh_opt.la +@LIBMESH_ENABLE_KOKKOS_TRUE@ @rm -f $@ +@LIBMESH_ENABLE_KOKKOS_TRUE@ $(AM_V_GEN)$(LIBTOOL) --tag=CXX --mode=link $(KOKKOS_CXX) \ +@LIBMESH_ENABLE_KOKKOS_TRUE@ $(LDFLAGS) $(AM_LDFLAGS) $(KOKKOS_LDFLAGS) -o $@ \ +@LIBMESH_ENABLE_KOKKOS_TRUE@ $(unit_tests_kokkos_opt_object) \ +@LIBMESH_ENABLE_KOKKOS_TRUE@ $(top_builddir)/libmesh_opt.la $(KOKKOS_LIBS) $(libmesh_optional_LIBS) $(LIBS) + +@LIBMESH_ENABLE_KOKKOS_TRUE@-include $(kokkos_unit_test_depfiles) @LIBMESH_VPATH_BUILD_TRUE@.linkstamp: @LIBMESH_VPATH_BUILD_TRUE@ -rm -f solutions && $(LN_S) -f $(srcdir)/solutions . diff --git a/tests/numerics/kokkos_tensor_ops_oracle_test.K b/tests/driver_kokkos.K similarity index 53% rename from tests/numerics/kokkos_tensor_ops_oracle_test.K rename to tests/driver_kokkos.K index 858d4773690..e9e22cd54be 100644 --- a/tests/numerics/kokkos_tensor_ops_oracle_test.K +++ b/tests/driver_kokkos.K @@ -1,5 +1,8 @@ #include "libmesh/libmesh_config.h" -#include "kokkos_tensor_ops_oracle_runners.h" +#include "numerics/kokkos_tensor_ops_oracle_runners.h" +#include "numerics/kokkos_vector_ops_oracle_runners.h" + +#include int main(int argc, char ** argv) @@ -7,7 +10,9 @@ main(int argc, char ** argv) Kokkos::initialize(argc, argv); libMesh::LibMeshInit init(argc, argv); - const int total_fail = libMeshTest::KokkosTensorOracle::run_all_oracles(); + int total_fail = 0; + total_fail += libMeshTest::KokkosVectorOracle::run_all_oracles(); + total_fail += libMeshTest::KokkosTensorOracle::run_all_oracles(); Kokkos::finalize(); diff --git a/tests/numerics/kokkos_vector_ops_oracle_test.K b/tests/numerics/kokkos_vector_ops_oracle_test.K deleted file mode 100644 index fedc7651ff5..00000000000 --- a/tests/numerics/kokkos_vector_ops_oracle_test.K +++ /dev/null @@ -1,20 +0,0 @@ -#include "libmesh/libmesh_config.h" -#include "kokkos_vector_ops_oracle_runners.h" - -int -main(int argc, char ** argv) -{ - Kokkos::initialize(argc, argv); - libMesh::LibMeshInit init(argc, argv); - - const int total_fail = libMeshTest::KokkosVectorOracle::run_all_oracles(); - - Kokkos::finalize(); - - if (total_fail == 0) - std::printf("ALL TESTS PASSED\n"); - else - std::printf("%d TEST(S) FAILED\n", total_fail); - - return total_fail ? 1 : 0; -} From 892ad2f31425282451245e4ee49bf7c4d5075535 Mon Sep 17 00:00:00 2001 From: rochi00 Date: Fri, 22 May 2026 17:32:51 -0600 Subject: [PATCH 45/46] Update MetaPhysicL for Kokkos test build fix --- contrib/metaphysicl | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/contrib/metaphysicl b/contrib/metaphysicl index 5664a7a8efa..133c61fa1de 160000 --- a/contrib/metaphysicl +++ b/contrib/metaphysicl @@ -1 +1 @@ -Subproject commit 5664a7a8efab281203a080dc27fee7a0f0fe42df +Subproject commit 133c61fa1de248b7619ec1b7af746f2a61ef3151 From f783bf305ca7339939865ddc455a4b47c00893c4 Mon Sep 17 00:00:00 2001 From: rochi00 Date: Fri, 22 May 2026 17:33:57 -0600 Subject: [PATCH 46/46] Refresh generated libMesh configure script --- configure | 39 ++++++++++++++++++++------------------- 1 file changed, 20 insertions(+), 19 deletions(-) diff --git a/configure b/configure index a09e4f080f4..fa9c1cb2844 100755 --- a/configure +++ b/configure @@ -60957,25 +60957,25 @@ fi if test "x$kokkos_cuda_arch" = "x" && test -r "$KOKKOS_CFG" then : kokkos_cuda_arch=`sed -n \ - -e 's/^#define KOKKOS_ARCH_BLACKWELL120.*/120/p' \ - -e 's/^#define KOKKOS_ARCH_BLACKWELL100.*/100/p' \ - -e 's/^#define KOKKOS_ARCH_HOPPER90.*/90/p' \ - -e 's/^#define KOKKOS_ARCH_ADA89.*/89/p' \ - -e 's/^#define KOKKOS_ARCH_AMPERE86.*/86/p' \ - -e 's/^#define KOKKOS_ARCH_AMPERE80.*/80/p' \ - -e 's/^#define KOKKOS_ARCH_TURING75.*/75/p' \ - -e 's/^#define KOKKOS_ARCH_VOLTA72.*/72/p' \ - -e 's/^#define KOKKOS_ARCH_VOLTA70.*/70/p' \ - -e 's/^#define KOKKOS_ARCH_PASCAL61.*/61/p' \ - -e 's/^#define KOKKOS_ARCH_PASCAL60.*/60/p' \ - -e 's/^#define KOKKOS_ARCH_MAXWELL53.*/53/p' \ - -e 's/^#define KOKKOS_ARCH_MAXWELL52.*/52/p' \ - -e 's/^#define KOKKOS_ARCH_MAXWELL50.*/50/p' \ - -e 's/^#define KOKKOS_ARCH_KEPLER37.*/37/p' \ - -e 's/^#define KOKKOS_ARCH_KEPLER35.*/35/p' \ - -e 's/^#define KOKKOS_ARCH_KEPLER32.*/32/p' \ - -e 's/^#define KOKKOS_ARCH_KEPLER30.*/30/p' \ - "$KOKKOS_CFG" 2>/dev/null | head -n 1` + -e 's/^#define KOKKOS_ARCH_BLACKWELL120.*/120/p' \ + -e 's/^#define KOKKOS_ARCH_BLACKWELL100.*/100/p' \ + -e 's/^#define KOKKOS_ARCH_HOPPER90.*/90/p' \ + -e 's/^#define KOKKOS_ARCH_ADA89.*/89/p' \ + -e 's/^#define KOKKOS_ARCH_AMPERE86.*/86/p' \ + -e 's/^#define KOKKOS_ARCH_AMPERE80.*/80/p' \ + -e 's/^#define KOKKOS_ARCH_TURING75.*/75/p' \ + -e 's/^#define KOKKOS_ARCH_VOLTA72.*/72/p' \ + -e 's/^#define KOKKOS_ARCH_VOLTA70.*/70/p' \ + -e 's/^#define KOKKOS_ARCH_PASCAL61.*/61/p' \ + -e 's/^#define KOKKOS_ARCH_PASCAL60.*/60/p' \ + -e 's/^#define KOKKOS_ARCH_MAXWELL53.*/53/p' \ + -e 's/^#define KOKKOS_ARCH_MAXWELL52.*/52/p' \ + -e 's/^#define KOKKOS_ARCH_MAXWELL50.*/50/p' \ + -e 's/^#define KOKKOS_ARCH_KEPLER37.*/37/p' \ + -e 's/^#define KOKKOS_ARCH_KEPLER35.*/35/p' \ + -e 's/^#define KOKKOS_ARCH_KEPLER32.*/32/p' \ + -e 's/^#define KOKKOS_ARCH_KEPLER30.*/30/p' \ + "$KOKKOS_CFG" 2>/dev/null | head -n 1` fi kokkos_cuda_arch_flag="" if test "x$kokkos_cuda_arch" != "x" @@ -65984,3 +65984,4 @@ printf "%s\n" "--------- Done Configuring libMesh ----------" >&6; } { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: ---------------------------------------------" >&5 printf "%s\n" "---------------------------------------------" >&6; } # rm -f -r conftest* config.cache include/libmesh/libmesh_config.h.tmp +