10#ifndef IFPACK2_HEAP_HPP
11#define IFPACK2_HEAP_HPP
14#include "Teuchos_Array.hpp"
15#include "Teuchos_ScalarTraits.hpp"
19template <
typename Scalar,
typename Ordinal>
20struct greater_indirect {
21 greater_indirect(
const Teuchos::Array<Scalar>& vals)
23 ~greater_indirect() {}
25 bool operator()(
const Ordinal& lhs,
const Ordinal& rhs)
const {
return Teuchos::ScalarTraits<Scalar>::magnitude(m_vals[lhs]) >
26 Teuchos::ScalarTraits<Scalar>::magnitude(m_vals[rhs]); }
29 const Teuchos::Array<Scalar>& m_vals;
34template <
typename Ordinal,
typename SizeType>
35void add_to_heap(
const Ordinal& idx, Teuchos::Array<Ordinal>& heap, SizeType& heap_len) {
36 if (heap.size() == heap_len)
41 std::push_heap(heap.begin(), heap.begin() + heap_len, std::greater<Ordinal>());
47template <
typename Ordinal,
typename SizeType,
class Compare>
48void add_to_heap(
const Ordinal& idx, Teuchos::Array<Ordinal>& heap, SizeType& heap_len, Compare comp) {
49 if (heap.size() == heap_len)
54 std::push_heap(heap.begin(), heap.begin() + heap_len, comp);
58template <
typename Ordinal,
typename SizeType>
59void rm_heap_root(Teuchos::Array<Ordinal>& heap, SizeType& heap_len) {
60 std::pop_heap(heap.begin(), heap.begin() + heap_len, std::greater<Ordinal>());
67template <
typename Ordinal,
typename SizeType,
class Compare>
68void rm_heap_root(Teuchos::Array<Ordinal>& heap, SizeType& heap_len, Compare comp) {
69 std::pop_heap(heap.begin(), heap.begin() + heap_len, comp);
Preconditioners and smoothers for Tpetra sparse matrices.
Definition Ifpack2_AdditiveSchwarz_decl.hpp:40
void add_to_heap(const Ordinal &idx, Teuchos::Array< Ordinal > &heap, SizeType &heap_len)
Definition Ifpack2_Heap.hpp:35
void rm_heap_root(Teuchos::Array< Ordinal > &heap, SizeType &heap_len)
Definition Ifpack2_Heap.hpp:59