Tpetra parallel linear algebra Version of the Day
Loading...
Searching...
No Matches
TpetraExt_MatrixMatrix_decl.hpp
Go to the documentation of this file.
1// @HEADER
2// *****************************************************************************
3// Tpetra: Templated Linear Algebra Services Package
4//
5// Copyright 2008 NTESS and the Tpetra contributors.
6// SPDX-License-Identifier: BSD-3-Clause
7// *****************************************************************************
8// @HEADER
9
10#ifndef TPETRA_MATRIXMATRIX_DECL_HPP
11#define TPETRA_MATRIXMATRIX_DECL_HPP
12
13#include <string>
14#include <Teuchos_RCP.hpp>
15#include <Teuchos_Array.hpp>
16#include "Tpetra_ConfigDefs.hpp"
17#include "Tpetra_CrsMatrix.hpp"
18#include "Tpetra_BlockCrsMatrix.hpp"
19#include "Tpetra_Vector.hpp"
20#include "TpetraExt_MMHelpers.hpp"
21#include "KokkosKernels_Handle.hpp"
22
28namespace Tpetra {
29
30namespace MatrixMatrix {
31
62template <class Scalar,
63 class LocalOrdinal,
64 class GlobalOrdinal,
65 class Node>
66void Multiply(
67 const CrsMatrix<Scalar, LocalOrdinal, GlobalOrdinal, Node>& A,
68 bool transposeA,
69 const CrsMatrix<Scalar, LocalOrdinal, GlobalOrdinal, Node>& B,
70 bool transposeB,
71 CrsMatrix<Scalar, LocalOrdinal, GlobalOrdinal, Node>& C,
72 bool call_FillComplete_on_result = true,
73 const std::string& label = std::string(),
74 const Teuchos::RCP<Teuchos::ParameterList>& params = Teuchos::null);
75
91template <class Scalar,
92 class LocalOrdinal,
93 class GlobalOrdinal,
94 class Node>
95void Multiply(
96 const Teuchos::RCP<const BlockCrsMatrix<Scalar, LocalOrdinal, GlobalOrdinal, Node> >& A,
97 bool transposeA,
98 const Teuchos::RCP<const BlockCrsMatrix<Scalar, LocalOrdinal, GlobalOrdinal, Node> >& B,
99 bool transposeB,
100 Teuchos::RCP<BlockCrsMatrix<Scalar, LocalOrdinal, GlobalOrdinal, Node> >& C,
101 const std::string& label = std::string());
102
114template <class Scalar,
115 class LocalOrdinal,
116 class GlobalOrdinal,
117 class Node>
118void Add(
119 const CrsMatrix<Scalar, LocalOrdinal, GlobalOrdinal, Node>& A,
120 bool transposeA,
121 Scalar scalarA,
122 CrsMatrix<Scalar, LocalOrdinal, GlobalOrdinal, Node>& B,
123 Scalar scalarB);
124
154template <class Scalar,
155 class LocalOrdinal,
156 class GlobalOrdinal,
157 class Node>
158Teuchos::RCP<CrsMatrix<Scalar, LocalOrdinal, GlobalOrdinal, Node> >
159add(const Scalar& alpha,
160 const bool transposeA,
161 const CrsMatrix<Scalar, LocalOrdinal, GlobalOrdinal, Node>& A,
162 const Scalar& beta,
163 const bool transposeB,
164 const CrsMatrix<Scalar, LocalOrdinal, GlobalOrdinal, Node>& B,
165 const Teuchos::RCP<const Map<LocalOrdinal, GlobalOrdinal, Node> >& domainMap = Teuchos::null,
166 const Teuchos::RCP<const Map<LocalOrdinal, GlobalOrdinal, Node> >& rangeMap = Teuchos::null,
167 const Teuchos::RCP<Teuchos::ParameterList>& params = Teuchos::null);
168
204template <class Scalar,
205 class LocalOrdinal,
206 class GlobalOrdinal,
207 class Node>
208void add(const Scalar& alpha,
209 const bool transposeA,
210 const CrsMatrix<Scalar, LocalOrdinal, GlobalOrdinal, Node>& A,
211 const Scalar& beta,
212 const bool transposeB,
213 const CrsMatrix<Scalar, LocalOrdinal, GlobalOrdinal, Node>& B,
214 CrsMatrix<Scalar, LocalOrdinal, GlobalOrdinal, Node>& C,
215 const Teuchos::RCP<const Map<LocalOrdinal, GlobalOrdinal, Node> >& domainMap = Teuchos::null,
216 const Teuchos::RCP<const Map<LocalOrdinal, GlobalOrdinal, Node> >& rangeMap = Teuchos::null,
217 const Teuchos::RCP<Teuchos::ParameterList>& params = Teuchos::null);
218
253template <class Scalar,
254 class LocalOrdinal,
255 class GlobalOrdinal,
256 class Node>
257void Add(
258 const CrsMatrix<Scalar, LocalOrdinal, GlobalOrdinal, Node>& A,
259 bool transposeA,
260 Scalar scalarA,
261 const CrsMatrix<Scalar, LocalOrdinal, GlobalOrdinal, Node>& B,
262 bool transposeB,
263 Scalar scalarB,
264 Teuchos::RCP<CrsMatrix<Scalar, LocalOrdinal, GlobalOrdinal, Node> >& C);
265
295template <class Scalar,
296 class LocalOrdinal,
297 class GlobalOrdinal,
298 class Node>
299void Add(
300 const CrsMatrix<Scalar, LocalOrdinal, GlobalOrdinal, Node>& A,
301 bool transposeA,
302 Scalar scalarA,
303 const CrsMatrix<Scalar, LocalOrdinal, GlobalOrdinal, Node>& B,
304 bool transposeB,
305 Scalar scalarB,
306 const Teuchos::RCP<CrsMatrix<Scalar, LocalOrdinal, GlobalOrdinal, Node> >& C);
307
329template <class Scalar,
330 class LocalOrdinal,
331 class GlobalOrdinal,
332 class Node>
333void Jacobi(Scalar omega,
334 const Vector<Scalar, LocalOrdinal, GlobalOrdinal, Node>& Dinv,
335 const CrsMatrix<Scalar, LocalOrdinal, GlobalOrdinal, Node>& A,
336 const CrsMatrix<Scalar, LocalOrdinal, GlobalOrdinal, Node>& B,
337 CrsMatrix<Scalar, LocalOrdinal, GlobalOrdinal, Node>& C,
338 bool call_FillComplete_on_result = true,
339 const std::string& label = std::string(),
340 const Teuchos::RCP<Teuchos::ParameterList>& params = Teuchos::null);
341
342} // namespace MatrixMatrix
343
344namespace MMdetails {
345
346// Matrix multiplication functions
347template <class Scalar,
348 class LocalOrdinal,
349 class GlobalOrdinal,
350 class Node>
351void mult_AT_B_newmatrix(
352 const CrsMatrix<Scalar, LocalOrdinal, GlobalOrdinal, Node>& A,
353 const CrsMatrix<Scalar, LocalOrdinal, GlobalOrdinal, Node>& B,
354 CrsMatrix<Scalar, LocalOrdinal, GlobalOrdinal, Node>& C,
355 const std::string& label = std::string(),
356 const Teuchos::RCP<Teuchos::ParameterList>& params = Teuchos::null);
357
358template <class Scalar,
359 class LocalOrdinal,
360 class GlobalOrdinal,
361 class Node>
362void mult_A_B(
363 CrsMatrixStruct<Scalar, LocalOrdinal, GlobalOrdinal, Node>& Aview,
364 CrsMatrixStruct<Scalar, LocalOrdinal, GlobalOrdinal, Node>& Bview,
365 CrsWrapper<Scalar, LocalOrdinal, GlobalOrdinal, Node>& C,
366 const std::string& label = std::string(),
367 const Teuchos::RCP<Teuchos::ParameterList>& params = Teuchos::null);
368
369template <class Scalar,
370 class LocalOrdinal,
371 class GlobalOrdinal,
372 class Node>
373void mult_A_B_newmatrix(
374 CrsMatrixStruct<Scalar, LocalOrdinal, GlobalOrdinal, Node>& Aview,
375 CrsMatrixStruct<Scalar, LocalOrdinal, GlobalOrdinal, Node>& Bview,
376 CrsMatrix<Scalar, LocalOrdinal, GlobalOrdinal, Node>& C,
377 const std::string& label = std::string(),
378 const Teuchos::RCP<Teuchos::ParameterList>& params = Teuchos::null);
379
380template <class Scalar,
381 class LocalOrdinal,
382 class GlobalOrdinal,
383 class Node>
384void mult_A_B_newmatrix(
385 BlockCrsMatrixStruct<Scalar, LocalOrdinal, GlobalOrdinal, Node>& Aview,
386 BlockCrsMatrixStruct<Scalar, LocalOrdinal, GlobalOrdinal, Node>& Bview,
387 Teuchos::RCP<BlockCrsMatrix<Scalar, LocalOrdinal, GlobalOrdinal, Node> >& C);
388
389template <class Scalar,
390 class LocalOrdinal,
391 class GlobalOrdinal,
392 class Node>
393void mult_A_B_reuse(
394 CrsMatrixStruct<Scalar, LocalOrdinal, GlobalOrdinal, Node>& Aview,
395 CrsMatrixStruct<Scalar, LocalOrdinal, GlobalOrdinal, Node>& Bview,
396 CrsMatrix<Scalar, LocalOrdinal, GlobalOrdinal, Node>& C,
397 const std::string& label = std::string(),
398 const Teuchos::RCP<Teuchos::ParameterList>& params = Teuchos::null);
399
400// Matrix jacobi functions
401template <class Scalar,
402 class LocalOrdinal,
403 class GlobalOrdinal,
404 class Node>
405void jacobi_A_B_newmatrix(
406 Scalar omega,
407 const Vector<Scalar, LocalOrdinal, GlobalOrdinal, Node>& Dinv,
408 CrsMatrixStruct<Scalar, LocalOrdinal, GlobalOrdinal, Node>& Aview,
409 CrsMatrixStruct<Scalar, LocalOrdinal, GlobalOrdinal, Node>& Bview,
410 CrsMatrix<Scalar, LocalOrdinal, GlobalOrdinal, Node>& C,
411 const std::string& label = std::string(),
412 const Teuchos::RCP<Teuchos::ParameterList>& params = Teuchos::null);
413
414template <class Scalar,
415 class LocalOrdinal,
416 class GlobalOrdinal,
417 class Node>
418void jacobi_A_B_reuse(
419 Scalar omega,
420 const Vector<Scalar, LocalOrdinal, GlobalOrdinal, Node>& Dinv,
421 CrsMatrixStruct<Scalar, LocalOrdinal, GlobalOrdinal, Node>& Aview,
422 CrsMatrixStruct<Scalar, LocalOrdinal, GlobalOrdinal, Node>& Bview,
423 CrsMatrix<Scalar, LocalOrdinal, GlobalOrdinal, Node>& C,
424 const std::string& label = std::string(),
425 const Teuchos::RCP<Teuchos::ParameterList>& params = Teuchos::null);
426
427// Other functions
428template <class Scalar,
429 class LocalOrdinal,
430 class GlobalOrdinal,
431 class Node>
432void import_and_extract_views(
433 const CrsMatrix<Scalar, LocalOrdinal, GlobalOrdinal, Node>& M,
434 Teuchos::RCP<const Map<LocalOrdinal, GlobalOrdinal, Node> > targetMap,
435 CrsMatrixStruct<Scalar, LocalOrdinal, GlobalOrdinal, Node>& Mview,
436 Teuchos::RCP<const Import<LocalOrdinal, GlobalOrdinal, Node> > prototypeImporter,
437 bool userAssertsThereAreNoRemotes,
438 const std::string& label,
439 const Teuchos::RCP<Teuchos::ParameterList>& params);
440
441template <class Scalar,
442 class LocalOrdinal,
443 class GlobalOrdinal,
444 class Node>
445void import_and_extract_views(
446 const BlockCrsMatrix<Scalar, LocalOrdinal, GlobalOrdinal, Node>& M,
447 Teuchos::RCP<const Map<LocalOrdinal, GlobalOrdinal, Node> > targetMap,
448 BlockCrsMatrixStruct<Scalar, LocalOrdinal, GlobalOrdinal, Node>& Mview,
449 Teuchos::RCP<const Import<LocalOrdinal, GlobalOrdinal, Node> > prototypeImporter,
450 bool userAssertsThereAreNoRemotes);
451
452template <class Scalar,
453 class LocalOrdinal,
454 class GlobalOrdinal,
455 class Node>
456void setMaxNumEntriesPerRow(
457 CrsMatrixStruct<Scalar, LocalOrdinal, GlobalOrdinal, Node>& Mview);
458
459// MMM Kernel wrappers struct
460// Because C++ doesn't support partial template specialization of functions.
461template <class Scalar,
462 class LocalOrdinal,
463 class GlobalOrdinal,
464 class Node,
465 class LocalOrdinalViewType>
466struct KernelWrappers {
467 static inline void mult_A_B_newmatrix_kernel_wrapper(CrsMatrixStruct<Scalar, LocalOrdinal, GlobalOrdinal, Node>& Aview,
468 CrsMatrixStruct<Scalar, LocalOrdinal, GlobalOrdinal, Node>& Bview,
469 const LocalOrdinalViewType& Acol2Brow,
470 const LocalOrdinalViewType& Acol2Irow,
471 const LocalOrdinalViewType& Bcol2Ccol,
472 const LocalOrdinalViewType& Icol2Ccol,
473 CrsMatrix<Scalar, LocalOrdinal, GlobalOrdinal, Node>& C,
474 Teuchos::RCP<const Import<LocalOrdinal, GlobalOrdinal, Node> > Cimport,
475 const std::string& label = std::string(),
476 const Teuchos::RCP<Teuchos::ParameterList>& params = Teuchos::null);
477
478 static inline void mult_A_B_reuse_kernel_wrapper(CrsMatrixStruct<Scalar, LocalOrdinal, GlobalOrdinal, Node>& Aview,
479 CrsMatrixStruct<Scalar, LocalOrdinal, GlobalOrdinal, Node>& Bview,
480 const LocalOrdinalViewType& Acol2Brow,
481 const LocalOrdinalViewType& Acol2Irow,
482 const LocalOrdinalViewType& Bcol2Ccol,
483 const LocalOrdinalViewType& Icol2Ccol,
484 CrsMatrix<Scalar, LocalOrdinal, GlobalOrdinal, Node>& C,
485 Teuchos::RCP<const Import<LocalOrdinal, GlobalOrdinal, Node> > Cimport,
486 const std::string& label = std::string(),
487 const Teuchos::RCP<Teuchos::ParameterList>& params = Teuchos::null);
488};
489
490// Jacobi Kernel wrappers struct
491// Because C++ doesn't support partial template specialization of functions.
492
493template <class Scalar,
494 class LocalOrdinal,
495 class GlobalOrdinal,
496 class Node,
497 class LocalOrdinalViewType>
498struct KernelWrappers2 {
499 static inline void jacobi_A_B_newmatrix_kernel_wrapper(Scalar omega,
500 const Vector<Scalar, LocalOrdinal, GlobalOrdinal, Node>& Dinv,
501 CrsMatrixStruct<Scalar, LocalOrdinal, GlobalOrdinal, Node>& Aview,
502 CrsMatrixStruct<Scalar, LocalOrdinal, GlobalOrdinal, Node>& Bview,
503 const LocalOrdinalViewType& Acol2Brow,
504 const LocalOrdinalViewType& Acol2Irow,
505 const LocalOrdinalViewType& Bcol2Ccol,
506 const LocalOrdinalViewType& Icol2Ccol,
507 CrsMatrix<Scalar, LocalOrdinal, GlobalOrdinal, Node>& C,
508 Teuchos::RCP<const Import<LocalOrdinal, GlobalOrdinal, Node> > Cimport,
509 const std::string& label = std::string(),
510 const Teuchos::RCP<Teuchos::ParameterList>& params = Teuchos::null);
511
512 static inline void jacobi_A_B_reuse_kernel_wrapper(Scalar omega,
513 const Vector<Scalar, LocalOrdinal, GlobalOrdinal, Node>& Dinv,
514 CrsMatrixStruct<Scalar, LocalOrdinal, GlobalOrdinal, Node>& Aview,
515 CrsMatrixStruct<Scalar, LocalOrdinal, GlobalOrdinal, Node>& Bview,
516 const LocalOrdinalViewType& Acol2Brow,
517 const LocalOrdinalViewType& Acol2Irow,
518 const LocalOrdinalViewType& Bcol2Ccol,
519 const LocalOrdinalViewType& Icol2Ccol,
520 CrsMatrix<Scalar, LocalOrdinal, GlobalOrdinal, Node>& C,
521 Teuchos::RCP<const Import<LocalOrdinal, GlobalOrdinal, Node> > Cimport,
522 const std::string& label = std::string(),
523 const Teuchos::RCP<Teuchos::ParameterList>& params = Teuchos::null);
524};
525
526// Triple-Product Kernel wrappers struct
527// Because C++ doesn't support partial template specialization of functions.
528template <class Scalar,
529 class LocalOrdinal,
530 class GlobalOrdinal,
531 class Node,
532 class LocalOrdinalViewType>
533struct KernelWrappers3 {
534 static inline void mult_R_A_P_newmatrix_kernel_wrapper(CrsMatrixStruct<Scalar, LocalOrdinal, GlobalOrdinal, Node>& Rview,
535 CrsMatrixStruct<Scalar, LocalOrdinal, GlobalOrdinal, Node>& Aview,
536 CrsMatrixStruct<Scalar, LocalOrdinal, GlobalOrdinal, Node>& Pview,
537 const LocalOrdinalViewType& Acol2Prow,
538 const LocalOrdinalViewType& Acol2PIrow,
539 const LocalOrdinalViewType& Pcol2Ccol,
540 const LocalOrdinalViewType& PIcol2Ccol,
541 CrsMatrix<Scalar, LocalOrdinal, GlobalOrdinal, Node>& Ac,
542 Teuchos::RCP<const Import<LocalOrdinal, GlobalOrdinal, Node> > Acimport,
543 const std::string& label = std::string(),
544 const Teuchos::RCP<Teuchos::ParameterList>& params = Teuchos::null);
545
546 static inline void mult_R_A_P_reuse_kernel_wrapper(CrsMatrixStruct<Scalar, LocalOrdinal, GlobalOrdinal, Node>& Rview,
547 CrsMatrixStruct<Scalar, LocalOrdinal, GlobalOrdinal, Node>& Aview,
548 CrsMatrixStruct<Scalar, LocalOrdinal, GlobalOrdinal, Node>& Pview,
549 const LocalOrdinalViewType& Acol2Prow,
550 const LocalOrdinalViewType& Acol2PIrow,
551 const LocalOrdinalViewType& Pcol2Ccol,
552 const LocalOrdinalViewType& PIcol2Ccol,
553 CrsMatrix<Scalar, LocalOrdinal, GlobalOrdinal, Node>& Ac,
554 Teuchos::RCP<const Import<LocalOrdinal, GlobalOrdinal, Node> > Acimport,
555 const std::string& label = std::string(),
556 const Teuchos::RCP<Teuchos::ParameterList>& params = Teuchos::null);
557
558 static inline void mult_PT_A_P_newmatrix_kernel_wrapper(CrsMatrixStruct<Scalar, LocalOrdinal, GlobalOrdinal, Node>& Aview,
559 CrsMatrixStruct<Scalar, LocalOrdinal, GlobalOrdinal, Node>& Pview,
560 const LocalOrdinalViewType& Acol2Prow,
561 const LocalOrdinalViewType& Acol2PIrow,
562 const LocalOrdinalViewType& Pcol2Ccol,
563 const LocalOrdinalViewType& PIcol2Ccol,
564 CrsMatrix<Scalar, LocalOrdinal, GlobalOrdinal, Node>& Ac,
565 Teuchos::RCP<const Import<LocalOrdinal, GlobalOrdinal, Node> > Acimport,
566 const std::string& label = std::string(),
567 const Teuchos::RCP<Teuchos::ParameterList>& params = Teuchos::null);
568
569 static inline void mult_PT_A_P_reuse_kernel_wrapper(CrsMatrixStruct<Scalar, LocalOrdinal, GlobalOrdinal, Node>& Aview,
570 CrsMatrixStruct<Scalar, LocalOrdinal, GlobalOrdinal, Node>& Pview,
571 const LocalOrdinalViewType& Acol2Prow,
572 const LocalOrdinalViewType& Acol2PIrow,
573 const LocalOrdinalViewType& Pcol2Ccol,
574 const LocalOrdinalViewType& PIcol2Ccol,
575 CrsMatrix<Scalar, LocalOrdinal, GlobalOrdinal, Node>& Ac,
576 Teuchos::RCP<const Import<LocalOrdinal, GlobalOrdinal, Node> > Acimport,
577 const std::string& label = std::string(),
578 const Teuchos::RCP<Teuchos::ParameterList>& params = Teuchos::null);
579};
580
581// This only merges matrices that look like B & Bimport, aka, they have no overlapping rows
582template <class Scalar, class LocalOrdinal, class GlobalOrdinal, class Node, class LocalOrdinalViewType>
584merge_matrices(CrsMatrixStruct<Scalar, LocalOrdinal, GlobalOrdinal, Node>& Aview,
585 CrsMatrixStruct<Scalar, LocalOrdinal, GlobalOrdinal, Node>& Bview,
586 const LocalOrdinalViewType& Acol2Brow,
587 const LocalOrdinalViewType& Acol2Irow,
588 const LocalOrdinalViewType& Bcol2Ccol,
589 const LocalOrdinalViewType& Icol2Ccol,
590 const size_t mergedNodeNumCols);
591
592// This only merges matrices that look like B & Bimport, aka, they have no overlapping rows
593template <class Scalar, class LocalOrdinal, class GlobalOrdinal, class Node, class LocalOrdinalViewType>
594inline const typename Tpetra::BlockCrsMatrix<Scalar, LocalOrdinal, GlobalOrdinal, Node>::local_matrix_device_type
595merge_matrices(BlockCrsMatrixStruct<Scalar, LocalOrdinal, GlobalOrdinal, Node>& Aview,
596 BlockCrsMatrixStruct<Scalar, LocalOrdinal, GlobalOrdinal, Node>& Bview,
597 const LocalOrdinalViewType& Acol2Brow,
598 const LocalOrdinalViewType& Acol2Irow,
599 const LocalOrdinalViewType& Bcol2Ccol,
600 const LocalOrdinalViewType& Icol2Ccol,
601 const size_t mergedNodeNumCols);
602
603template <class CrsMatrixType>
604size_t C_estimate_nnz(CrsMatrixType& A, CrsMatrixType& B);
605
606template <typename Scalar, typename LocalOrdinal, typename GlobalOrdinal, typename Node>
607struct AddKernels {
610 typedef typename Node::device_type device_type;
611 typedef typename device_type::execution_space execution_space;
612 typedef typename device_type::memory_space memory_space;
613 typedef typename crs_matrix_type::impl_scalar_type impl_scalar_type;
614 typedef typename crs_matrix_type::local_matrix_device_type KCRS;
615 typedef typename KCRS::values_type::non_const_type values_array;
616 typedef typename KCRS::row_map_type::non_const_type row_ptrs_array;
617 typedef typename KCRS::row_map_type row_ptrs_array_const;
618 typedef typename KCRS::index_type::non_const_type col_inds_array;
619 typedef typename map_type::local_map_type local_map_type;
620 typedef typename Kokkos::View<GlobalOrdinal*, device_type> global_col_inds_array;
621 typedef Kokkos::RangePolicy<execution_space> range_type;
622 typedef KokkosKernels::Experimental::KokkosKernelsHandle<size_t, LocalOrdinal, impl_scalar_type,
623 execution_space, memory_space, memory_space>
624 KKH;
625
640 static void addSorted(
641 const values_array& Avals,
642 const row_ptrs_array_const& Arowptrs,
643 const col_inds_array& Acolinds,
644 const impl_scalar_type scalarA,
645 const values_array& Bvals,
646 const row_ptrs_array_const& Browptrs,
647 const col_inds_array& Bcolinds,
648 const impl_scalar_type scalarB,
649 GlobalOrdinal numGlobalCols,
650 values_array& Cvals,
651 row_ptrs_array& Crowptrs,
652 col_inds_array& Ccolinds);
653
665 static void convertToGlobalAndAdd(
666 const KCRS& A,
667 const impl_scalar_type scalarA,
668 const KCRS& B,
669 const impl_scalar_type scalarB,
670 const local_map_type& AcolMap,
671 const local_map_type& BcolMap,
672 values_array& Cvals,
673 row_ptrs_array& Crowptrs,
674 global_col_inds_array& Ccolinds);
675
690 static void addUnsorted(
691 const values_array& Avals,
692 const row_ptrs_array_const& Arowptrs,
693 const col_inds_array& Acolinds,
694 const impl_scalar_type scalarA,
695 const values_array& Bvals,
696 const row_ptrs_array_const& Browptrs,
697 const col_inds_array& Bcolinds,
698 const impl_scalar_type scalarB,
699 GlobalOrdinal numGlobalCols,
700 values_array& Cvals,
701 row_ptrs_array& Crowptrs,
702 col_inds_array& Ccolinds);
703};
704
705} // end namespace MMdetails
706
707} // namespace Tpetra
708
709#endif // TPETRA_MATRIXMATRIX_DECL_HPP
Struct that holds views of the contents of a CrsMatrix.
KokkosSparse::CrsMatrix< impl_scalar_type, local_ordinal_type, device_type, void, typename local_graph_device_type::size_type > local_matrix_device_type
The specialization of Kokkos::CrsMatrix that represents the part of the sparse matrix on each MPI pro...
typename row_matrix_type::impl_scalar_type impl_scalar_type
The type used internally in place of Scalar.
Teuchos::RCP< CrsMatrix< Scalar, LocalOrdinal, GlobalOrdinal, Node > > add(const Scalar &alpha, const bool transposeA, const CrsMatrix< Scalar, LocalOrdinal, GlobalOrdinal, Node > &A, const Scalar &beta, const bool transposeB, const CrsMatrix< Scalar, LocalOrdinal, GlobalOrdinal, Node > &B, const Teuchos::RCP< const Map< LocalOrdinal, GlobalOrdinal, Node > > &domainMap=Teuchos::null, const Teuchos::RCP< const Map< LocalOrdinal, GlobalOrdinal, Node > > &rangeMap=Teuchos::null, const Teuchos::RCP< Teuchos::ParameterList > &params=Teuchos::null)
Compute the sparse matrix sum C = scalarA * Op(A) + scalarB * Op(B), where Op(X) is either X or its t...
void Multiply(const CrsMatrix< Scalar, LocalOrdinal, GlobalOrdinal, Node > &A, bool transposeA, const CrsMatrix< Scalar, LocalOrdinal, GlobalOrdinal, Node > &B, bool transposeB, CrsMatrix< Scalar, LocalOrdinal, GlobalOrdinal, Node > &C, bool call_FillComplete_on_result=true, const std::string &label=std::string(), const Teuchos::RCP< Teuchos::ParameterList > &params=Teuchos::null)
Sparse matrix-matrix multiply.
void Jacobi(Scalar omega, const Vector< Scalar, LocalOrdinal, GlobalOrdinal, Node > &Dinv, const CrsMatrix< Scalar, LocalOrdinal, GlobalOrdinal, Node > &A, const CrsMatrix< Scalar, LocalOrdinal, GlobalOrdinal, Node > &B, CrsMatrix< Scalar, LocalOrdinal, GlobalOrdinal, Node > &C, bool call_FillComplete_on_result=true, const std::string &label=std::string(), const Teuchos::RCP< Teuchos::ParameterList > &params=Teuchos::null)
void Add(const CrsMatrix< Scalar, LocalOrdinal, GlobalOrdinal, Node > &A, bool transposeA, Scalar scalarA, CrsMatrix< Scalar, LocalOrdinal, GlobalOrdinal, Node > &B, Scalar scalarB)
Namespace Tpetra contains the class and methods constituting the Tpetra library.