diff --git a/packages/stokhos/doc/Doxyfile b/packages/stokhos/doc/Doxyfile index e7b4628a632e..2d5b2fc7a042 100644 --- a/packages/stokhos/doc/Doxyfile +++ b/packages/stokhos/doc/Doxyfile @@ -121,7 +121,7 @@ CLASS_DIAGRAMS = YES # If the SOURCE_BROWSER tag is set to YES then a list of source files will # be generated. Documented entities will be cross-referenced with these sources. -SOURCE_BROWSER = NO +SOURCE_BROWSER = YES # Setting the INLINE_SOURCES tag to YES will include the body # of functions and classes directly in the documentation. diff --git a/packages/stokhos/src/sacado/kokkos/vector/Stokhos_MP_Vector_MaskTraits.hpp b/packages/stokhos/src/sacado/kokkos/vector/Stokhos_MP_Vector_MaskTraits.hpp index 08209ffe89f9..54e7242c98e2 100644 --- a/packages/stokhos/src/sacado/kokkos/vector/Stokhos_MP_Vector_MaskTraits.hpp +++ b/packages/stokhos/src/sacado/kokkos/vector/Stokhos_MP_Vector_MaskTraits.hpp @@ -95,7 +95,7 @@ template class MaskedAssign data = st_array[0]; else data = st_array[1]; - + return *this; } @@ -116,7 +116,7 @@ template class MaskedAssign data = st_array[0]+st_array[1]; else data = st_array[2]; - + return *this; } @@ -136,7 +136,7 @@ template class MaskedAssign data = st_array[0]-st_array[1]; else data = st_array[2]; - + return *this; } @@ -156,7 +156,7 @@ template class MaskedAssign data = st_array[0]*st_array[1]; else data = st_array[2]; - + return *this; } @@ -176,13 +176,30 @@ template class MaskedAssign data = st_array[0]/st_array[1]; else data = st_array[2]; - + return *this; } }; template class Mask; +namespace traits +{ + template + struct is_mask : public std::false_type {}; + + template + struct is_mask> : public std::true_type {}; + + template + struct is_mask> : public std::true_type {}; + + template + inline constexpr bool is_mask_v = is_mask::value; + + #define CONCEPT_TRAITS_IS_MASK(M) std::enable_if_t>> +} + template class MaskedAssign< Sacado::MP::Vector > { typedef Sacado::MP::Vector scalar; @@ -208,7 +225,7 @@ template class MaskedAssign< Sacado::MP::Vector > for(std::size_t i=0; i class MaskedAssign< Sacado::MP::Vector > data[i] = st_array[0][i]; else data[i] = st_array[1][i]; - + return *this; } @@ -248,7 +265,7 @@ template class MaskedAssign< Sacado::MP::Vector > for(std::size_t i=0; i class MaskedAssign< Sacado::MP::Vector > data[i] = st_array[0][i]+st_array[1][i]; else data[i] = st_array[2][i]; - + return *this; } @@ -287,7 +304,7 @@ template class MaskedAssign< Sacado::MP::Vector > for(std::size_t i=0; i class MaskedAssign< Sacado::MP::Vector > data[i] = st_array[0][i]-st_array[1][i]; else data[i] = st_array[2][i]; - + return *this; } @@ -326,7 +343,7 @@ template class MaskedAssign< Sacado::MP::Vector > for(std::size_t i=0; i class MaskedAssign< Sacado::MP::Vector > data[i] = st_array[0][i]*st_array[1][i]; else data[i] = st_array[2][i]; - + return *this; } @@ -365,7 +382,7 @@ template class MaskedAssign< Sacado::MP::Vector > for(std::size_t i=0; i class MaskedAssign< Sacado::MP::Vector > data[i] = st_array[0][i]/st_array[1][i]; else data[i] = st_array[2][i]; - + return *this; } }; @@ -406,19 +423,19 @@ template class MaskedA { if(m.get(0)) data = s; - + return *this; } KOKKOS_INLINE_FUNCTION MaskedAssign& operator = (const std::initializer_list & KOKKOS_RESTRICT st) { auto st_array = st.begin(); - + if(m.get(0)) data = st_array[0]; else data = st_array[1]; - + return *this; } @@ -427,7 +444,7 @@ template class MaskedA { if(m.get(0)) data += s; - + return *this; } @@ -439,7 +456,7 @@ template class MaskedA data = st_array[0]+st_array[1]; else data = st_array[2]; - + return *this; } @@ -447,7 +464,7 @@ template class MaskedA { if(m.get(0)) data -= s; - + return *this; } @@ -459,7 +476,7 @@ template class MaskedA data = st_array[0]-st_array[1]; else data = st_array[2]; - + return *this; } @@ -467,7 +484,7 @@ template class MaskedA { if(m.get(0)) data *= s; - + return *this; } @@ -479,7 +496,7 @@ template class MaskedA data = st_array[0]*st_array[1]; else data = st_array[2]; - + return *this; } @@ -487,7 +504,7 @@ template class MaskedA { if(m.get(0)) data /= s; - + return *this; } @@ -499,7 +516,7 @@ template class MaskedA data = st_array[0]/st_array[1]; else data = st_array[2]; - + return *this; } }; @@ -603,7 +620,7 @@ template class Mask { return !(this==m2); } - + KOKKOS_INLINE_FUNCTION Mask operator&& (const Mask &m2) { Mask m3; @@ -611,7 +628,7 @@ template class Mask m3.set(i,(this->get(i) && m2.get(i))); return m3; } - + KOKKOS_INLINE_FUNCTION Mask operator|| (const Mask &m2) { Mask m3; @@ -665,7 +682,7 @@ template class Mask return v2; } - + KOKKOS_INLINE_FUNCTION bool get (int i) const { return this->data[i]; @@ -675,7 +692,7 @@ template class Mask { this->data[i] = b; } - + KOKKOS_INLINE_FUNCTION Mask operator! () { Mask m2; @@ -683,7 +700,7 @@ template class Mask m2.set(i,!(this->get(i))); return m2; } - + KOKKOS_INLINE_FUNCTION operator bool() const { return this->get(0); @@ -794,9 +811,9 @@ namespace Sacado { template KOKKOS_INLINE_FUNCTION Vector copysign(const Vector &a1, const Vector &a2) { typedef EnsembleTraits_m< Vector > ET; - + Vector a_out; - + using std::copysign; #ifdef STOKHOS_HAVE_PRAGMA_IVDEP #pragma ivdep @@ -810,7 +827,7 @@ namespace Sacado { for(std::size_t i=0; i KOKKOS_INLINE_FUNCTION Mask > signbit { typedef EnsembleTraits_m > ET; using std::signbit; - + Mask > mask; #ifdef STOKHOS_HAVE_PRAGMA_IVDEP #pragma ivdep @@ -935,32 +952,37 @@ template KOKKOS_INLINE_FUNCTION Mask > signbit #endif -namespace MaskLogic{ - - template KOKKOS_INLINE_FUNCTION bool OR(Mask m){ - return (((double) m)!=0.); +namespace MaskLogic +{ + template + KOKKOS_INLINE_FUNCTION + bool OR(M&& m) { + return m.operator double() != 0.; } KOKKOS_INLINE_FUNCTION bool OR(bool m){ return m; } - template KOKKOS_INLINE_FUNCTION bool XOR(Mask m){ - return (((double) m)==1./m.getSize()); + template + KOKKOS_INLINE_FUNCTION + bool XOR(M&& m) { + return m.operator double() == 1. / m.getSize(); } KOKKOS_INLINE_FUNCTION bool XOR(bool m){ return m; } - template KOKKOS_INLINE_FUNCTION bool AND(Mask m){ - return (((double) m)==1.); + template + KOKKOS_INLINE_FUNCTION + bool AND(M&& m) { + return m.operator double() == 1.; } KOKKOS_INLINE_FUNCTION bool AND(bool m){ return m; } - } #endif // STOKHOS_MP_VECTOR_MASKTRAITS_HPP