43 #ifndef IFPACK2_HEAP_HPP 44 #define IFPACK2_HEAP_HPP 47 #include "Teuchos_Array.hpp" 48 #include "Teuchos_ScalarTraits.hpp" 52 template<
typename Scalar,
typename Ordinal>
53 struct greater_indirect {
54 greater_indirect(
const Teuchos::Array<Scalar>& vals)
58 bool operator()(
const Ordinal& lhs,
const Ordinal& rhs)
const 59 {
return Teuchos::ScalarTraits<Scalar>::magnitude(m_vals[lhs]) >
60 Teuchos::ScalarTraits<Scalar>::magnitude(m_vals[rhs]); }
63 const Teuchos::Array<Scalar>& m_vals;
69 template<
typename Ordinal,
typename SizeType>
70 void add_to_heap(
const Ordinal& idx, Teuchos::Array<Ordinal>& heap, SizeType& heap_len)
72 if (heap.size() == heap_len) heap.push_back(idx);
73 else heap[heap_len] = idx;
75 std::push_heap(heap.begin(), heap.begin()+heap_len, std::greater<Ordinal>());
81 template<
typename Ordinal,
typename SizeType,
class Compare>
82 void add_to_heap(
const Ordinal& idx, Teuchos::Array<Ordinal>& heap, SizeType& heap_len, Compare comp)
84 if (heap.size() == heap_len) heap.push_back(idx);
85 else heap[heap_len] = idx;
87 std::push_heap(heap.begin(), heap.begin()+heap_len, comp);
91 template<
typename Ordinal,
typename SizeType>
92 void rm_heap_root(Teuchos::Array<Ordinal>& heap, SizeType& heap_len)
94 std::pop_heap(heap.begin(), heap.begin()+heap_len, std::greater<Ordinal>());
101 template<
typename Ordinal,
typename SizeType,
class Compare>
102 void rm_heap_root(Teuchos::Array<Ordinal>& heap, SizeType& heap_len, Compare comp)
104 std::pop_heap(heap.begin(), heap.begin()+heap_len, comp);
void rm_heap_root(Teuchos::Array< Ordinal > &heap, SizeType &heap_len)
Definition: Ifpack2_Heap.hpp:92
void add_to_heap(const Ordinal &idx, Teuchos::Array< Ordinal > &heap, SizeType &heap_len)
Definition: Ifpack2_Heap.hpp:70
Preconditioners and smoothers for Tpetra sparse matrices.
Definition: Ifpack2_AdditiveSchwarz_decl.hpp:72