10#ifndef TPETRA_DETAILS_CRSMATRIXASSEMBLEELEMENT_HPP
11#define TPETRA_DETAILS_CRSMATRIXASSEMBLEELEMENT_HPP
13#include "KokkosSparse_CrsMatrix.hpp"
57template<
class SparseMatrixType,
60typename SparseMatrixType::ordinal_type
62 const typename SparseMatrixType::ordinal_type
lclRow,
63 const typename SparseMatrixType::ordinal_type
lclColInds[],
64 const typename SparseMatrixType::ordinal_type
sortPerm[],
69 ! std::is_same<typename SparseMatrixType::device_type::execution_space, Kokkos::Serial>::type,
75 typedef typename std::remove_const<typename SparseMatrixType::value_type>::type
77 static_assert (std::is_same<matrix_scalar_type,
78 typename SparseMatrixType::value_type>::value,
79 "The matrix's entries must have a nonconst type.");
84 typedef typename SparseMatrixType::ordinal_type LO;
85 static_assert (std::is_integral<LO>::value,
"SparseMatrixType::ordinal_type "
86 "must be a built-in integer type.");
184typename SparseMatrixType::ordinal_type
186 const typename SparseMatrixType::ordinal_type
lclRow,
187 const typename SparseMatrixType::ordinal_type
lclColInds[],
188 const typename SparseMatrixType::ordinal_type
sortPerm[],
193 ! std::is_same<typename SparseMatrixType::device_type::execution_space, Kokkos::Serial>::type,
199 typedef typename std::remove_const<typename SparseMatrixType::value_type>::type
201 static_assert (std::is_same<matrix_scalar_type,
202 typename SparseMatrixType::value_type>::value,
203 "The matrix's entries must have a nonconst type.");
204 static_assert (std::is_assignable<matrix_scalar_type,
205 typename std::decay<
decltype (
A.values[0] +
vals[0]) >::type>::value,
206 "The result of adding a matrix entry and an entry of vals "
207 "MUST be assignable to a matrix entry.");
208 typedef typename SparseMatrixType::ordinal_type LO;
209 static_assert (std::is_integral<LO>::value,
"SparseMatrixType::ordinal_type "
210 "must be a built-in integer type.");
323typename SparseMatrixType::ordinal_type
326 typename SparseMatrixType::ordinal_type lids[],
327 typename SparseMatrixType::ordinal_type
sortPerm[],
332 ! std::is_same<typename SparseMatrixType::device_type::execution_space, Kokkos::Serial>::type,
338 typedef typename std::remove_const<typename SparseMatrixType::value_type>::type
340 typedef typename std::remove_const<typename VectorViewType::value_type>::type
342 static_assert (std::is_same<matrix_scalar_type,
343 typename SparseMatrixType::value_type>::value,
344 "The sparse output matrix A's entries must have a nonconst type.");
346 typename VectorViewType::value_type>::value,
347 "The dense output vector x's entries must have a nonconst type.");
358 typedef typename SparseMatrixType::ordinal_type LO;
359 static_assert (std::is_integral<LO>::value,
"SparseMatrixType::ordinal_type "
360 "must be a built-in integer type.");
372 const LO
lid = lids[
r];
374 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.