42#ifndef TPETRA_DETAILS_CRSMATRIXASSEMBLEELEMENT_HPP
43#define TPETRA_DETAILS_CRSMATRIXASSEMBLEELEMENT_HPP
45#include "KokkosSparse_CrsMatrix.hpp"
89template<
class SparseMatrixType,
92typename SparseMatrixType::ordinal_type
94 const typename SparseMatrixType::ordinal_type
lclRow,
95 const typename SparseMatrixType::ordinal_type
lclColInds[],
96 const typename SparseMatrixType::ordinal_type
sortPerm[],
101 ! std::is_same<typename SparseMatrixType::device_type::execution_space, Kokkos::Serial>::type,
107 typedef typename std::remove_const<typename SparseMatrixType::value_type>::type
109 static_assert (std::is_same<matrix_scalar_type,
110 typename SparseMatrixType::value_type>::value,
111 "The matrix's entries must have a nonconst type.");
116 typedef typename SparseMatrixType::ordinal_type LO;
117 static_assert (std::is_integral<LO>::value,
"SparseMatrixType::ordinal_type "
118 "must be a built-in integer type.");
216typename SparseMatrixType::ordinal_type
218 const typename SparseMatrixType::ordinal_type
lclRow,
219 const typename SparseMatrixType::ordinal_type
lclColInds[],
220 const typename SparseMatrixType::ordinal_type
sortPerm[],
225 ! std::is_same<typename SparseMatrixType::device_type::execution_space, Kokkos::Serial>::type,
231 typedef typename std::remove_const<typename SparseMatrixType::value_type>::type
233 static_assert (std::is_same<matrix_scalar_type,
234 typename SparseMatrixType::value_type>::value,
235 "The matrix's entries must have a nonconst type.");
236 static_assert (std::is_assignable<matrix_scalar_type,
237 typename std::decay<
decltype (
A.values[0] +
vals[0]) >::type>::value,
238 "The result of adding a matrix entry and an entry of vals "
239 "MUST be assignable to a matrix entry.");
240 typedef typename SparseMatrixType::ordinal_type LO;
241 static_assert (std::is_integral<LO>::value,
"SparseMatrixType::ordinal_type "
242 "must be a built-in integer type.");
355typename SparseMatrixType::ordinal_type
358 typename SparseMatrixType::ordinal_type lids[],
359 typename SparseMatrixType::ordinal_type
sortPerm[],
364 ! std::is_same<typename SparseMatrixType::device_type::execution_space, Kokkos::Serial>::type,
370 typedef typename std::remove_const<typename SparseMatrixType::value_type>::type
372 typedef typename std::remove_const<typename VectorViewType::value_type>::type
374 static_assert (std::is_same<matrix_scalar_type,
375 typename SparseMatrixType::value_type>::value,
376 "The sparse output matrix A's entries must have a nonconst type.");
378 typename VectorViewType::value_type>::value,
379 "The dense output vector x's entries must have a nonconst type.");
390 typedef typename SparseMatrixType::ordinal_type LO;
391 static_assert (std::is_integral<LO>::value,
"SparseMatrixType::ordinal_type "
392 "must be a built-in integer type.");
404 const LO
lid = lids[
r];
406 auto lhs_r = Kokkos::subview (
lhs,
r, Kokkos::ALL ());
Declaration and definition of functions for sorting "short" arrays of keys and corresponding values.
Struct that holds views of the contents of a CrsMatrix.
Implementation details of Tpetra.
KOKKOS_FUNCTION SparseMatrixType::ordinal_type crsMatrixReplaceValues_sortedSortedLinear(const SparseMatrixType &A, const typename SparseMatrixType::ordinal_type lclRow, const typename SparseMatrixType::ordinal_type lclColInds[], const typename SparseMatrixType::ordinal_type sortPerm[], const ValsViewType &vals, const typename SparseMatrixType::ordinal_type numEntInInput, const bool forceAtomic=false, const bool checkInputIndices=true)
A(lclRow, lclColsInds[sortPerm[j]]) = vals[sortPerm[j]], for all j in 0 .. eltDim-1.
KOKKOS_FUNCTION void shellSortKeysAndValues(KeyType keys[], ValueType values[], const IndexType n)
Shellsort (yes, it's one word) the input array keys, and apply the resulting permutation to the input...
KOKKOS_FUNCTION SparseMatrixType::ordinal_type crsMatrixSumIntoValues_sortedSortedLinear(const SparseMatrixType &A, const typename SparseMatrixType::ordinal_type lclRow, const typename SparseMatrixType::ordinal_type lclColInds[], const typename SparseMatrixType::ordinal_type sortPerm[], const ValsViewType &vals, const typename SparseMatrixType::ordinal_type numEntInInput, const bool forceAtomic=false, const bool checkInputIndices=true)
A(lclRow, lclColsInds[sortPerm[j]]) += vals[sortPerm[j]], for all j in 0 .. eltDim-1.
KOKKOS_FUNCTION SparseMatrixType::ordinal_type crsMatrixAssembleElement_sortedLinear(const SparseMatrixType &A, const VectorViewType &x, typename SparseMatrixType::ordinal_type lids[], typename SparseMatrixType::ordinal_type sortPerm[], const RhsViewType &rhs, const LhsViewType &lhs, const bool forceAtomic=false, const bool checkInputIndices=true)
A(lids[j], lids[j]) += lhs(j,j) and x(lids[j]) += rhs(j), for all j in 0 .. eltDim-1.
Namespace Tpetra contains the class and methods constituting the Tpetra library.