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//
4// Tpetra: Templated Linear Algebra Services Package
5// Copyright (2008) Sandia Corporation
6//
7// Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation,
8// the U.S. Government retains certain rights in this software.
9//
10// Redistribution and use in source and binary forms, with or without
11// modification, are permitted provided that the following conditions are
12// met:
13//
14// 1. Redistributions of source code must retain the above copyright
15// notice, this list of conditions and the following disclaimer.
16//
17// 2. Redistributions in binary form must reproduce the above copyright
18// notice, this list of conditions and the following disclaimer in the
19// documentation and/or other materials provided with the distribution.
20//
21// 3. Neither the name of the Corporation nor the names of the
22// contributors may be used to endorse or promote products derived from
23// this software without specific prior written permission.
24//
25// THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY
26// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
27// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
28// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE
29// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
30// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
31// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
32// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
33// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
34// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
35// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
36//
37// Questions? Contact Michael A. Heroux (maherou@sandia.gov)
38//
39// ************************************************************************
40// @HEADER
41
42#ifndef TPETRA_MATRIXMATRIX_DECL_HPP
43#define TPETRA_MATRIXMATRIX_DECL_HPP
44
45#include <string>
46#include <Teuchos_RCP.hpp>
47#include <Teuchos_Array.hpp>
48#include "Tpetra_ConfigDefs.hpp"
49#include "Tpetra_CrsMatrix.hpp"
50#include "Tpetra_BlockCrsMatrix.hpp"
51#include "Tpetra_Vector.hpp"
52#include "TpetraExt_MMHelpers.hpp"
53#include "KokkosKernels_Handle.hpp"
54
55
61namespace Tpetra {
62
63namespace MatrixMatrix {
64
95template <class Scalar,
96 class LocalOrdinal,
97 class GlobalOrdinal,
98 class Node>
99void Multiply(
100 const CrsMatrix<Scalar, LocalOrdinal, GlobalOrdinal, Node>& A,
101 bool transposeA,
102 const CrsMatrix<Scalar, LocalOrdinal, GlobalOrdinal, Node>& B,
103 bool transposeB,
104 CrsMatrix<Scalar, LocalOrdinal, GlobalOrdinal, Node>& C,
105 bool call_FillComplete_on_result = true,
106 const std::string& label = std::string(),
107 const Teuchos::RCP<Teuchos::ParameterList>& params = Teuchos::null);
108
124template <class Scalar,
125 class LocalOrdinal,
126 class GlobalOrdinal,
127 class Node>
128void Multiply(
129 const Teuchos::RCP<const BlockCrsMatrix<Scalar, LocalOrdinal, GlobalOrdinal, Node> >& A,
130 bool transposeA,
131 const Teuchos::RCP<const BlockCrsMatrix<Scalar, LocalOrdinal, GlobalOrdinal, Node> >& B,
132 bool transposeB,
133 Teuchos::RCP<BlockCrsMatrix<Scalar, LocalOrdinal, GlobalOrdinal, Node> >& C,
134 const std::string& label = std::string());
135
149template <class Scalar,
150 class LocalOrdinal,
151 class GlobalOrdinal,
152 class Node>
153void Add(
154 const CrsMatrix<Scalar, LocalOrdinal, GlobalOrdinal, Node>& A,
155 bool transposeA,
156 Scalar scalarA,
157 CrsMatrix<Scalar, LocalOrdinal, GlobalOrdinal, Node>& B,
158 Scalar scalarB );
159
189template <class Scalar,
190 class LocalOrdinal,
191 class GlobalOrdinal,
192 class Node>
193Teuchos::RCP<CrsMatrix<Scalar, LocalOrdinal, GlobalOrdinal, Node> >
194add (const Scalar& alpha,
195 const bool transposeA,
196 const CrsMatrix<Scalar, LocalOrdinal, GlobalOrdinal, Node>& A,
197 const Scalar& beta,
198 const bool transposeB,
199 const CrsMatrix<Scalar, LocalOrdinal, GlobalOrdinal, Node>& B,
200 const Teuchos::RCP<const Map<LocalOrdinal, GlobalOrdinal, Node> >& domainMap = Teuchos::null,
201 const Teuchos::RCP<const Map<LocalOrdinal, GlobalOrdinal, Node> >& rangeMap = Teuchos::null,
202 const Teuchos::RCP<Teuchos::ParameterList>& params = Teuchos::null);
203
204
240template <class Scalar,
241 class LocalOrdinal,
242 class GlobalOrdinal,
243 class Node>
244void
245add (const Scalar& alpha,
246 const bool transposeA,
247 const CrsMatrix<Scalar, LocalOrdinal, GlobalOrdinal, Node>& A,
248 const Scalar& beta,
249 const bool transposeB,
250 const CrsMatrix<Scalar, LocalOrdinal, GlobalOrdinal, Node>& B,
251 CrsMatrix<Scalar, LocalOrdinal, GlobalOrdinal, Node> & C,
252 const Teuchos::RCP<const Map<LocalOrdinal, GlobalOrdinal, Node> >& domainMap = Teuchos::null,
253 const Teuchos::RCP<const Map<LocalOrdinal, GlobalOrdinal, Node> >& rangeMap = Teuchos::null,
254 const Teuchos::RCP<Teuchos::ParameterList>& params = Teuchos::null);
255
256
286template <class Scalar,
287 class LocalOrdinal,
288 class GlobalOrdinal,
289 class Node>
290void Add(
291 const CrsMatrix<Scalar, LocalOrdinal, GlobalOrdinal, Node>& A,
292 bool transposeA,
293 Scalar scalarA,
294 const CrsMatrix<Scalar, LocalOrdinal, GlobalOrdinal, Node>& B,
295 bool transposeB,
296 Scalar scalarB,
297 Teuchos::RCP<CrsMatrix<Scalar, LocalOrdinal, GlobalOrdinal, Node> > C);
298
299
321 template <class Scalar,
322 class LocalOrdinal,
323 class GlobalOrdinal,
324 class Node>
325 void Jacobi(Scalar omega,
326 const Vector<Scalar, LocalOrdinal, GlobalOrdinal, Node> & Dinv,
327 const CrsMatrix<Scalar, LocalOrdinal, GlobalOrdinal, Node>& A,
328 const CrsMatrix<Scalar, LocalOrdinal, GlobalOrdinal, Node>& B,
329 CrsMatrix<Scalar, LocalOrdinal, GlobalOrdinal, Node>& C,
330 bool call_FillComplete_on_result = true,
331 const std::string& label = std::string(),
332 const Teuchos::RCP<Teuchos::ParameterList>& params = Teuchos::null);
333
334} // namespace MatrixMatrix
335
336namespace MMdetails{
337
338 // Matrix multiplication functions
339template<class Scalar,
340 class LocalOrdinal,
341 class GlobalOrdinal,
342 class Node>
343void mult_AT_B_newmatrix(
344 const CrsMatrix<Scalar, LocalOrdinal, GlobalOrdinal, Node>& A,
345 const CrsMatrix<Scalar, LocalOrdinal, GlobalOrdinal, Node>& B,
346 CrsMatrix<Scalar, LocalOrdinal, GlobalOrdinal, Node>& C,
347 const std::string& label = std::string(),
348 const Teuchos::RCP<Teuchos::ParameterList>& params = Teuchos::null);
349
350
351template<class Scalar,
352 class LocalOrdinal,
353 class GlobalOrdinal,
354 class Node>
355void mult_A_B(
356 CrsMatrixStruct<Scalar, LocalOrdinal, GlobalOrdinal, Node>& Aview,
357 CrsMatrixStruct<Scalar, LocalOrdinal, GlobalOrdinal, Node>& Bview,
358 CrsWrapper<Scalar, LocalOrdinal, GlobalOrdinal, Node>& C,
359 const std::string& label = std::string(),
360 const Teuchos::RCP<Teuchos::ParameterList>& params = Teuchos::null);
361
362template<class Scalar,
363 class LocalOrdinal,
364 class GlobalOrdinal,
365 class Node>
366void mult_A_B_newmatrix(
367 CrsMatrixStruct<Scalar, LocalOrdinal, GlobalOrdinal, Node>& Aview,
368 CrsMatrixStruct<Scalar, LocalOrdinal, GlobalOrdinal, Node>& Bview,
369 CrsMatrix<Scalar, LocalOrdinal, GlobalOrdinal, Node>& C,
370 const std::string& label = std::string(),
371 const Teuchos::RCP<Teuchos::ParameterList>& params = Teuchos::null);
372
373template<class Scalar,
374 class LocalOrdinal,
375 class GlobalOrdinal,
376 class Node>
377void mult_A_B_newmatrix(
378 BlockCrsMatrixStruct<Scalar, LocalOrdinal, GlobalOrdinal, Node>& Aview,
379 BlockCrsMatrixStruct<Scalar, LocalOrdinal, GlobalOrdinal, Node>& Bview,
380 Teuchos::RCP<BlockCrsMatrix<Scalar, LocalOrdinal, GlobalOrdinal, Node> >& C);
381
382template<class Scalar,
383 class LocalOrdinal,
384 class GlobalOrdinal,
385 class Node>
386void mult_A_B_reuse(
387 CrsMatrixStruct<Scalar, LocalOrdinal, GlobalOrdinal, Node>& Aview,
388 CrsMatrixStruct<Scalar, LocalOrdinal, GlobalOrdinal, Node>& Bview,
389 CrsMatrix<Scalar, LocalOrdinal, GlobalOrdinal, Node>& C,
390 const std::string& label = std::string(),
391 const Teuchos::RCP<Teuchos::ParameterList>& params = Teuchos::null);
392
393
394
395
396 // Matrix jacobi functions
397template<class Scalar,
398 class LocalOrdinal,
399 class GlobalOrdinal,
400 class Node>
401void jacobi_A_B_newmatrix(
402 Scalar omega,
403 const Vector<Scalar, LocalOrdinal, GlobalOrdinal, Node> & Dinv,
404 CrsMatrixStruct<Scalar, LocalOrdinal, GlobalOrdinal, Node>& Aview,
405 CrsMatrixStruct<Scalar, LocalOrdinal, GlobalOrdinal, Node>& Bview,
406 CrsMatrix<Scalar, LocalOrdinal, GlobalOrdinal, Node>& C,
407 const std::string & label = std::string(),
408 const Teuchos::RCP<Teuchos::ParameterList>& params = Teuchos::null);
409
410
411template<class Scalar,
412 class LocalOrdinal,
413 class GlobalOrdinal,
414 class Node>
415void jacobi_A_B_reuse(
416 Scalar omega,
417 const Vector<Scalar, LocalOrdinal, GlobalOrdinal, Node> & Dinv,
418 CrsMatrixStruct<Scalar, LocalOrdinal, GlobalOrdinal, Node>& Aview,
419 CrsMatrixStruct<Scalar, LocalOrdinal, GlobalOrdinal, Node>& Bview,
420 CrsMatrix<Scalar, LocalOrdinal, GlobalOrdinal, Node>& C,
421 const std::string & label = std::string(),
422 const Teuchos::RCP<Teuchos::ParameterList>& params = Teuchos::null);
423
424 // Other functions
425template<class Scalar,
426 class LocalOrdinal,
427 class GlobalOrdinal,
428 class Node>
429void import_and_extract_views(
430 const CrsMatrix<Scalar, LocalOrdinal, GlobalOrdinal, Node>& M,
431 Teuchos::RCP<const Map<LocalOrdinal, GlobalOrdinal, Node> > targetMap,
432 CrsMatrixStruct<Scalar, LocalOrdinal, GlobalOrdinal, Node>& Mview,
433 Teuchos::RCP<const Import<LocalOrdinal,GlobalOrdinal, Node> > prototypeImporter = Teuchos::null,
434 bool userAssertsThereAreNoRemotes = false,
435 const std::string& label = std::string(),
436 const Teuchos::RCP<Teuchos::ParameterList>& params = Teuchos::null);
437
438template<class Scalar,
439 class LocalOrdinal,
440 class GlobalOrdinal,
441 class Node>
442void import_and_extract_views(
443 const BlockCrsMatrix<Scalar, LocalOrdinal, GlobalOrdinal, Node>& M,
444 Teuchos::RCP<const Map<LocalOrdinal, GlobalOrdinal, Node> > targetMap,
445 BlockCrsMatrixStruct<Scalar, LocalOrdinal, GlobalOrdinal, Node>& Mview,
446 Teuchos::RCP<const Import<LocalOrdinal,GlobalOrdinal, Node> > prototypeImporter = Teuchos::null,
447 bool userAssertsThereAreNoRemotes = false);
448
449template<class Scalar,
450 class LocalOrdinal,
451 class GlobalOrdinal,
452 class Node>
453void setMaxNumEntriesPerRow(
454 CrsMatrixStruct<Scalar, LocalOrdinal, GlobalOrdinal, Node>& Mview);
455
456
457 // MMM Kernel wrappers struct
458 // Because C++ doesn't support partial template specialization of functions.
459 template<class Scalar,
460 class LocalOrdinal,
461 class GlobalOrdinal,
462 class Node,
463 class LocalOrdinalViewType>
464 struct KernelWrappers {
465 static inline void mult_A_B_newmatrix_kernel_wrapper(CrsMatrixStruct<Scalar, LocalOrdinal, GlobalOrdinal, Node>& Aview,
466 CrsMatrixStruct<Scalar, LocalOrdinal, GlobalOrdinal, Node>& Bview,
467 const LocalOrdinalViewType & Acol2Brow,
468 const LocalOrdinalViewType & Acol2Irow,
469 const LocalOrdinalViewType & Bcol2Ccol,
470 const LocalOrdinalViewType & Icol2Ccol,
471 CrsMatrix<Scalar, LocalOrdinal, GlobalOrdinal, Node>& C,
472 Teuchos::RCP<const Import<LocalOrdinal,GlobalOrdinal,Node> > Cimport,
473 const std::string& label = std::string(),
474 const Teuchos::RCP<Teuchos::ParameterList>& params = Teuchos::null);
475
476 static inline void mult_A_B_reuse_kernel_wrapper(CrsMatrixStruct<Scalar, LocalOrdinal, GlobalOrdinal, Node>& Aview,
477 CrsMatrixStruct<Scalar, LocalOrdinal, GlobalOrdinal, Node>& Bview,
478 const LocalOrdinalViewType & Acol2Brow,
479 const LocalOrdinalViewType & Acol2Irow,
480 const LocalOrdinalViewType & Bcol2Ccol,
481 const LocalOrdinalViewType & Icol2Ccol,
482 CrsMatrix<Scalar, LocalOrdinal, GlobalOrdinal, Node>& C,
483 Teuchos::RCP<const Import<LocalOrdinal,GlobalOrdinal,Node> > Cimport,
484 const std::string& label = std::string(),
485 const Teuchos::RCP<Teuchos::ParameterList>& params = Teuchos::null);
486 };
487
488 // Jacobi Kernel wrappers struct
489 // Because C++ doesn't support partial template specialization of functions.
490
491 template<class Scalar,
492 class LocalOrdinal,
493 class GlobalOrdinal,
494 class Node,
495 class LocalOrdinalViewType>
496 struct KernelWrappers2 {
497 static inline void jacobi_A_B_newmatrix_kernel_wrapper(Scalar omega,
498 const Vector<Scalar,LocalOrdinal,GlobalOrdinal,Node> & Dinv,
499 CrsMatrixStruct<Scalar, LocalOrdinal, GlobalOrdinal, Node>& Aview,
500 CrsMatrixStruct<Scalar, LocalOrdinal, GlobalOrdinal, Node>& Bview,
501 const LocalOrdinalViewType & Acol2Brow,
502 const LocalOrdinalViewType & Acol2Irow,
503 const LocalOrdinalViewType & Bcol2Ccol,
504 const LocalOrdinalViewType & Icol2Ccol,
505 CrsMatrix<Scalar, LocalOrdinal, GlobalOrdinal, Node>& C,
506 Teuchos::RCP<const Import<LocalOrdinal,GlobalOrdinal,Node> > Cimport,
507 const std::string& label = std::string(),
508 const Teuchos::RCP<Teuchos::ParameterList>& params = Teuchos::null);
509
510 static inline void jacobi_A_B_reuse_kernel_wrapper(Scalar omega,
511 const Vector<Scalar,LocalOrdinal,GlobalOrdinal,Node> & Dinv,
512 CrsMatrixStruct<Scalar, LocalOrdinal, GlobalOrdinal, Node>& Aview,
513 CrsMatrixStruct<Scalar, LocalOrdinal, GlobalOrdinal, Node>& Bview,
514 const LocalOrdinalViewType & Acol2Brow,
515 const LocalOrdinalViewType & Acol2Irow,
516 const LocalOrdinalViewType & Bcol2Ccol,
517 const LocalOrdinalViewType & Icol2Ccol,
518 CrsMatrix<Scalar, LocalOrdinal, GlobalOrdinal, Node>& C,
519 Teuchos::RCP<const Import<LocalOrdinal,GlobalOrdinal,Node> > Cimport,
520 const std::string& label = std::string(),
521 const Teuchos::RCP<Teuchos::ParameterList>& params = Teuchos::null);
522 };
523
524
525 // Triple-Product Kernel wrappers struct
526 // Because C++ doesn't support partial template specialization of functions.
527 template<class Scalar,
528 class LocalOrdinal,
529 class GlobalOrdinal,
530 class Node,
531 class LocalOrdinalViewType>
532 struct KernelWrappers3 {
533 static inline void mult_R_A_P_newmatrix_kernel_wrapper(CrsMatrixStruct<Scalar, LocalOrdinal, GlobalOrdinal, Node>& Rview,
534 CrsMatrixStruct<Scalar, LocalOrdinal, GlobalOrdinal, Node>& Aview,
535 CrsMatrixStruct<Scalar, LocalOrdinal, GlobalOrdinal, Node>& Pview,
536 const LocalOrdinalViewType & Acol2Prow,
537 const LocalOrdinalViewType & Acol2PIrow,
538 const LocalOrdinalViewType & Pcol2Ccol,
539 const LocalOrdinalViewType & PIcol2Ccol,
540 CrsMatrix<Scalar, LocalOrdinal, GlobalOrdinal, Node>& Ac,
541 Teuchos::RCP<const Import<LocalOrdinal,GlobalOrdinal,Node> > Acimport,
542 const std::string& label = std::string(),
543 const Teuchos::RCP<Teuchos::ParameterList>& params = Teuchos::null);
544
545 static inline void mult_R_A_P_reuse_kernel_wrapper(CrsMatrixStruct<Scalar, LocalOrdinal, GlobalOrdinal, Node>& Rview,
546 CrsMatrixStruct<Scalar, LocalOrdinal, GlobalOrdinal, Node>& Aview,
547 CrsMatrixStruct<Scalar, LocalOrdinal, GlobalOrdinal, Node>& Pview,
548 const LocalOrdinalViewType & Acol2Prow,
549 const LocalOrdinalViewType & Acol2PIrow,
550 const LocalOrdinalViewType & Pcol2Ccol,
551 const LocalOrdinalViewType & PIcol2Ccol,
552 CrsMatrix<Scalar, LocalOrdinal, GlobalOrdinal, Node>& Ac,
553 Teuchos::RCP<const Import<LocalOrdinal,GlobalOrdinal,Node> > Acimport,
554 const std::string& label = std::string(),
555 const Teuchos::RCP<Teuchos::ParameterList>& params = Teuchos::null);
556
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
582 template<class Scalar,class LocalOrdinal,class GlobalOrdinal,class Node, class LocalOrdinalViewType>
584 merge_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
593 template<class Scalar,class LocalOrdinal,class GlobalOrdinal,class Node, class LocalOrdinalViewType>
594 inline const typename Tpetra::BlockCrsMatrix<Scalar,LocalOrdinal,GlobalOrdinal,Node>::local_matrix_device_type
595 merge_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
603
604
605
606template<class CrsMatrixType>
607size_t C_estimate_nnz(CrsMatrixType & A, CrsMatrixType &B);
608
609template<typename Scalar, typename LocalOrdinal, typename GlobalOrdinal, typename Node>
610struct AddKernels
611{
614 typedef typename Node::device_type device_type;
615 typedef typename device_type::execution_space execution_space;
616 typedef typename device_type::memory_space memory_space;
617 typedef typename crs_matrix_type::impl_scalar_type impl_scalar_type;
618 typedef typename crs_matrix_type::local_matrix_device_type KCRS;
619 typedef typename KCRS::values_type::non_const_type values_array;
620 typedef typename KCRS::row_map_type::non_const_type row_ptrs_array;
621 typedef typename KCRS::row_map_type row_ptrs_array_const;
622 typedef typename KCRS::index_type::non_const_type col_inds_array;
623 typedef typename map_type::local_map_type local_map_type;
624 typedef typename Kokkos::View<GlobalOrdinal*, device_type> global_col_inds_array;
625 typedef Kokkos::RangePolicy<execution_space> range_type;
626 typedef KokkosKernels::Experimental::KokkosKernelsHandle<size_t, LocalOrdinal, impl_scalar_type,
627 execution_space, memory_space, memory_space> KKH;
628
642 static void addSorted(
643 const values_array& Avals,
644 const row_ptrs_array_const& Arowptrs,
645 const col_inds_array& Acolinds,
646 const impl_scalar_type scalarA,
647 const values_array& Bvals,
648 const row_ptrs_array_const& Browptrs,
649 const col_inds_array& Bcolinds,
650 const impl_scalar_type scalarB,
651 values_array& Cvals,
652 row_ptrs_array& Crowptrs,
653 col_inds_array& Ccolinds);
654
666 static void convertToGlobalAndAdd(
667 const KCRS& A,
668 const impl_scalar_type scalarA,
669 const KCRS& B,
670 const impl_scalar_type scalarB,
671 const local_map_type& AcolMap,
672 const local_map_type& BcolMap,
673 values_array& Cvals,
674 row_ptrs_array& Crowptrs,
675 global_col_inds_array& Ccolinds);
676
691 static void addUnsorted(
692 const values_array& Avals,
693 const row_ptrs_array_const& Arowptrs,
694 const col_inds_array& Acolinds,
695 const impl_scalar_type scalarA,
696 const values_array& Bvals,
697 const row_ptrs_array_const& Browptrs,
698 const col_inds_array& Bcolinds,
699 const impl_scalar_type scalarB,
700 GlobalOrdinal numGlobalCols,
701 values_array& Cvals,
702 row_ptrs_array& Crowptrs,
703 col_inds_array& Ccolinds);
704};
705
706}//end namespace MMdetails
707
708} // end of Tpetra namespace
709
710#endif // TPETRA_MATRIXMATRIX_DECL_HPP
711
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.