Tpetra parallel linear algebra Version of the Day
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_Vector.hpp"
51#include "TpetraExt_MMHelpers.hpp"
52#include "KokkosKernels_Handle.hpp"
53
54
60namespace Tpetra {
61
62namespace MatrixMatrix {
63
94template <class Scalar,
95 class LocalOrdinal,
96 class GlobalOrdinal,
97 class Node>
98void Multiply(
99 const CrsMatrix<Scalar, LocalOrdinal, GlobalOrdinal, Node>& A,
100 bool transposeA,
101 const CrsMatrix<Scalar, LocalOrdinal, GlobalOrdinal, Node>& B,
102 bool transposeB,
103 CrsMatrix<Scalar, LocalOrdinal, GlobalOrdinal, Node>& C,
104 bool call_FillComplete_on_result = true,
105 const std::string& label = std::string(),
106 const Teuchos::RCP<Teuchos::ParameterList>& params = Teuchos::null);
107
121template <class Scalar,
122 class LocalOrdinal,
123 class GlobalOrdinal,
124 class Node>
125void Add(
126 const CrsMatrix<Scalar, LocalOrdinal, GlobalOrdinal, Node>& A,
127 bool transposeA,
128 Scalar scalarA,
129 CrsMatrix<Scalar, LocalOrdinal, GlobalOrdinal, Node>& B,
130 Scalar scalarB );
131
161template <class Scalar,
162 class LocalOrdinal,
163 class GlobalOrdinal,
164 class Node>
165Teuchos::RCP<CrsMatrix<Scalar, LocalOrdinal, GlobalOrdinal, Node> >
166add (const Scalar& alpha,
167 const bool transposeA,
168 const CrsMatrix<Scalar, LocalOrdinal, GlobalOrdinal, Node>& A,
169 const Scalar& beta,
170 const bool transposeB,
171 const CrsMatrix<Scalar, LocalOrdinal, GlobalOrdinal, Node>& B,
172 const Teuchos::RCP<const Map<LocalOrdinal, GlobalOrdinal, Node> >& domainMap = Teuchos::null,
173 const Teuchos::RCP<const Map<LocalOrdinal, GlobalOrdinal, Node> >& rangeMap = Teuchos::null,
174 const Teuchos::RCP<Teuchos::ParameterList>& params = Teuchos::null);
175
176
212template <class Scalar,
213 class LocalOrdinal,
214 class GlobalOrdinal,
215 class Node>
216void
217add (const Scalar& alpha,
218 const bool transposeA,
219 const CrsMatrix<Scalar, LocalOrdinal, GlobalOrdinal, Node>& A,
220 const Scalar& beta,
221 const bool transposeB,
222 const CrsMatrix<Scalar, LocalOrdinal, GlobalOrdinal, Node>& B,
223 CrsMatrix<Scalar, LocalOrdinal, GlobalOrdinal, Node> & C,
224 const Teuchos::RCP<const Map<LocalOrdinal, GlobalOrdinal, Node> >& domainMap = Teuchos::null,
225 const Teuchos::RCP<const Map<LocalOrdinal, GlobalOrdinal, Node> >& rangeMap = Teuchos::null,
226 const Teuchos::RCP<Teuchos::ParameterList>& params = Teuchos::null);
227
228
258template <class Scalar,
259 class LocalOrdinal,
260 class GlobalOrdinal,
261 class Node>
262void Add(
263 const CrsMatrix<Scalar, LocalOrdinal, GlobalOrdinal, Node>& A,
264 bool transposeA,
265 Scalar scalarA,
266 const CrsMatrix<Scalar, LocalOrdinal, GlobalOrdinal, Node>& B,
267 bool transposeB,
268 Scalar scalarB,
269 Teuchos::RCP<CrsMatrix<Scalar, LocalOrdinal, GlobalOrdinal, Node> > C);
270
271
293 template <class Scalar,
294 class LocalOrdinal,
295 class GlobalOrdinal,
296 class Node>
297 void Jacobi(Scalar omega,
298 const Vector<Scalar, LocalOrdinal, GlobalOrdinal, Node> & Dinv,
299 const CrsMatrix<Scalar, LocalOrdinal, GlobalOrdinal, Node>& A,
300 const CrsMatrix<Scalar, LocalOrdinal, GlobalOrdinal, Node>& B,
301 CrsMatrix<Scalar, LocalOrdinal, GlobalOrdinal, Node>& C,
302 bool call_FillComplete_on_result = true,
303 const std::string& label = std::string(),
304 const Teuchos::RCP<Teuchos::ParameterList>& params = Teuchos::null);
305
306} // namespace MatrixMatrix
307
308namespace MMdetails{
309
310 // Matrix multiplication functions
311template<class Scalar,
312 class LocalOrdinal,
313 class GlobalOrdinal,
314 class Node>
315void mult_AT_B_newmatrix(
316 const CrsMatrix<Scalar, LocalOrdinal, GlobalOrdinal, Node>& A,
317 const CrsMatrix<Scalar, LocalOrdinal, GlobalOrdinal, Node>& B,
318 CrsMatrix<Scalar, LocalOrdinal, GlobalOrdinal, Node>& C,
319 const std::string& label = std::string(),
320 const Teuchos::RCP<Teuchos::ParameterList>& params = Teuchos::null);
321
322
323template<class Scalar,
324 class LocalOrdinal,
325 class GlobalOrdinal,
326 class Node>
327void mult_A_B(
328 CrsMatrixStruct<Scalar, LocalOrdinal, GlobalOrdinal, Node>& Aview,
329 CrsMatrixStruct<Scalar, LocalOrdinal, GlobalOrdinal, Node>& Bview,
330 CrsWrapper<Scalar, LocalOrdinal, GlobalOrdinal, Node>& C,
331 const std::string& label = std::string(),
332 const Teuchos::RCP<Teuchos::ParameterList>& params = Teuchos::null);
333
334template<class Scalar,
335 class LocalOrdinal,
336 class GlobalOrdinal,
337 class Node>
338void mult_A_B_newmatrix(
339 CrsMatrixStruct<Scalar, LocalOrdinal, GlobalOrdinal, Node>& Aview,
340 CrsMatrixStruct<Scalar, LocalOrdinal, GlobalOrdinal, Node>& Bview,
341 CrsMatrix<Scalar, LocalOrdinal, GlobalOrdinal, Node>& C,
342 const std::string& label = std::string(),
343 const Teuchos::RCP<Teuchos::ParameterList>& params = Teuchos::null);
344
345
346
347
348template<class Scalar,
349 class LocalOrdinal,
350 class GlobalOrdinal,
351 class Node>
352void mult_A_B_reuse(
353 CrsMatrixStruct<Scalar, LocalOrdinal, GlobalOrdinal, Node>& Aview,
354 CrsMatrixStruct<Scalar, LocalOrdinal, GlobalOrdinal, Node>& Bview,
355 CrsMatrix<Scalar, LocalOrdinal, GlobalOrdinal, Node>& C,
356 const std::string& label = std::string(),
357 const Teuchos::RCP<Teuchos::ParameterList>& params = Teuchos::null);
358
359
360
361
362 // Matrix jacobi functions
363template<class Scalar,
364 class LocalOrdinal,
365 class GlobalOrdinal,
366 class Node>
367void jacobi_A_B_newmatrix(
368 Scalar omega,
369 const Vector<Scalar, LocalOrdinal, GlobalOrdinal, Node> & Dinv,
370 CrsMatrixStruct<Scalar, LocalOrdinal, GlobalOrdinal, Node>& Aview,
371 CrsMatrixStruct<Scalar, LocalOrdinal, GlobalOrdinal, Node>& Bview,
372 CrsMatrix<Scalar, LocalOrdinal, GlobalOrdinal, Node>& C,
373 const std::string & label = std::string(),
374 const Teuchos::RCP<Teuchos::ParameterList>& params = Teuchos::null);
375
376
377template<class Scalar,
378 class LocalOrdinal,
379 class GlobalOrdinal,
380 class Node>
381void jacobi_A_B_reuse(
382 Scalar omega,
383 const Vector<Scalar, LocalOrdinal, GlobalOrdinal, Node> & Dinv,
384 CrsMatrixStruct<Scalar, LocalOrdinal, GlobalOrdinal, Node>& Aview,
385 CrsMatrixStruct<Scalar, LocalOrdinal, GlobalOrdinal, Node>& Bview,
386 CrsMatrix<Scalar, LocalOrdinal, GlobalOrdinal, Node>& C,
387 const std::string & label = std::string(),
388 const Teuchos::RCP<Teuchos::ParameterList>& params = Teuchos::null);
389
390 // Other functions
391template<class Scalar,
392 class LocalOrdinal,
393 class GlobalOrdinal,
394 class Node>
395void import_and_extract_views(
396 const CrsMatrix<Scalar, LocalOrdinal, GlobalOrdinal, Node>& M,
397 Teuchos::RCP<const Map<LocalOrdinal, GlobalOrdinal, Node> > targetMap,
398 CrsMatrixStruct<Scalar, LocalOrdinal, GlobalOrdinal, Node>& Mview,
399 Teuchos::RCP<const Import<LocalOrdinal,GlobalOrdinal, Node> > prototypeImporter = Teuchos::null,
400 bool userAssertsThereAreNoRemotes = false,
401 const std::string& label = std::string(),
402 const Teuchos::RCP<Teuchos::ParameterList>& params = Teuchos::null);
403
404template<class Scalar,
405 class LocalOrdinal,
406 class GlobalOrdinal,
407 class Node>
408void setMaxNumEntriesPerRow(
409 CrsMatrixStruct<Scalar, LocalOrdinal, GlobalOrdinal, Node>& Mview);
410
411
412 // MMM Kernel wrappers struct
413 // Because C++ doesn't support partial template specialization of functions.
414 template<class Scalar,
415 class LocalOrdinal,
416 class GlobalOrdinal,
417 class Node,
418 class LocalOrdinalViewType>
419 struct KernelWrappers {
420 static inline void mult_A_B_newmatrix_kernel_wrapper(CrsMatrixStruct<Scalar, LocalOrdinal, GlobalOrdinal, Node>& Aview,
421 CrsMatrixStruct<Scalar, LocalOrdinal, GlobalOrdinal, Node>& Bview,
422 const LocalOrdinalViewType & Acol2Brow,
423 const LocalOrdinalViewType & Acol2Irow,
424 const LocalOrdinalViewType & Bcol2Ccol,
425 const LocalOrdinalViewType & Icol2Ccol,
426 CrsMatrix<Scalar, LocalOrdinal, GlobalOrdinal, Node>& C,
427 Teuchos::RCP<const Import<LocalOrdinal,GlobalOrdinal,Node> > Cimport,
428 const std::string& label = std::string(),
429 const Teuchos::RCP<Teuchos::ParameterList>& params = Teuchos::null);
430
431 static inline void mult_A_B_reuse_kernel_wrapper(CrsMatrixStruct<Scalar, LocalOrdinal, GlobalOrdinal, Node>& Aview,
432 CrsMatrixStruct<Scalar, LocalOrdinal, GlobalOrdinal, Node>& Bview,
433 const LocalOrdinalViewType & Acol2Brow,
434 const LocalOrdinalViewType & Acol2Irow,
435 const LocalOrdinalViewType & Bcol2Ccol,
436 const LocalOrdinalViewType & Icol2Ccol,
437 CrsMatrix<Scalar, LocalOrdinal, GlobalOrdinal, Node>& C,
438 Teuchos::RCP<const Import<LocalOrdinal,GlobalOrdinal,Node> > Cimport,
439 const std::string& label = std::string(),
440 const Teuchos::RCP<Teuchos::ParameterList>& params = Teuchos::null);
441 };
442
443 // Jacobi Kernel wrappers struct
444 // Because C++ doesn't support partial template specialization of functions.
445
446 template<class Scalar,
447 class LocalOrdinal,
448 class GlobalOrdinal,
449 class Node,
450 class LocalOrdinalViewType>
451 struct KernelWrappers2 {
452 static inline void jacobi_A_B_newmatrix_kernel_wrapper(Scalar omega,
453 const Vector<Scalar,LocalOrdinal,GlobalOrdinal,Node> & Dinv,
454 CrsMatrixStruct<Scalar, LocalOrdinal, GlobalOrdinal, Node>& Aview,
455 CrsMatrixStruct<Scalar, LocalOrdinal, GlobalOrdinal, Node>& Bview,
456 const LocalOrdinalViewType & Acol2Brow,
457 const LocalOrdinalViewType & Acol2Irow,
458 const LocalOrdinalViewType & Bcol2Ccol,
459 const LocalOrdinalViewType & Icol2Ccol,
460 CrsMatrix<Scalar, LocalOrdinal, GlobalOrdinal, Node>& C,
461 Teuchos::RCP<const Import<LocalOrdinal,GlobalOrdinal,Node> > Cimport,
462 const std::string& label = std::string(),
463 const Teuchos::RCP<Teuchos::ParameterList>& params = Teuchos::null);
464
465 static inline void jacobi_A_B_reuse_kernel_wrapper(Scalar omega,
466 const Vector<Scalar,LocalOrdinal,GlobalOrdinal,Node> & Dinv,
467 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
479
480 // Triple-Product Kernel wrappers struct
481 // Because C++ doesn't support partial template specialization of functions.
482 template<class Scalar,
483 class LocalOrdinal,
484 class GlobalOrdinal,
485 class Node,
486 class LocalOrdinalViewType>
487 struct KernelWrappers3 {
488 static inline void mult_R_A_P_newmatrix_kernel_wrapper(CrsMatrixStruct<Scalar, LocalOrdinal, GlobalOrdinal, Node>& Rview,
489 CrsMatrixStruct<Scalar, LocalOrdinal, GlobalOrdinal, Node>& Aview,
490 CrsMatrixStruct<Scalar, LocalOrdinal, GlobalOrdinal, Node>& Pview,
491 const LocalOrdinalViewType & Acol2Prow,
492 const LocalOrdinalViewType & Acol2PIrow,
493 const LocalOrdinalViewType & Pcol2Ccol,
494 const LocalOrdinalViewType & PIcol2Ccol,
495 CrsMatrix<Scalar, LocalOrdinal, GlobalOrdinal, Node>& Ac,
496 Teuchos::RCP<const Import<LocalOrdinal,GlobalOrdinal,Node> > Acimport,
497 const std::string& label = std::string(),
498 const Teuchos::RCP<Teuchos::ParameterList>& params = Teuchos::null);
499
500 static inline void mult_R_A_P_reuse_kernel_wrapper(CrsMatrixStruct<Scalar, LocalOrdinal, GlobalOrdinal, Node>& Rview,
501 CrsMatrixStruct<Scalar, LocalOrdinal, GlobalOrdinal, Node>& Aview,
502 CrsMatrixStruct<Scalar, LocalOrdinal, GlobalOrdinal, Node>& Pview,
503 const LocalOrdinalViewType & Acol2Prow,
504 const LocalOrdinalViewType & Acol2PIrow,
505 const LocalOrdinalViewType & Pcol2Ccol,
506 const LocalOrdinalViewType & PIcol2Ccol,
507 CrsMatrix<Scalar, LocalOrdinal, GlobalOrdinal, Node>& Ac,
508 Teuchos::RCP<const Import<LocalOrdinal,GlobalOrdinal,Node> > Acimport,
509 const std::string& label = std::string(),
510 const Teuchos::RCP<Teuchos::ParameterList>& params = Teuchos::null);
511
512
513 static inline void mult_PT_A_P_newmatrix_kernel_wrapper(CrsMatrixStruct<Scalar, LocalOrdinal, GlobalOrdinal, Node>& Aview,
514 CrsMatrixStruct<Scalar, LocalOrdinal, GlobalOrdinal, Node>& Pview,
515 const LocalOrdinalViewType & Acol2Prow,
516 const LocalOrdinalViewType & Acol2PIrow,
517 const LocalOrdinalViewType & Pcol2Ccol,
518 const LocalOrdinalViewType & PIcol2Ccol,
519 CrsMatrix<Scalar, LocalOrdinal, GlobalOrdinal, Node>& Ac,
520 Teuchos::RCP<const Import<LocalOrdinal,GlobalOrdinal,Node> > Acimport,
521 const std::string& label = std::string(),
522 const Teuchos::RCP<Teuchos::ParameterList>& params = Teuchos::null);
523
524 static inline void mult_PT_A_P_reuse_kernel_wrapper(CrsMatrixStruct<Scalar, LocalOrdinal, GlobalOrdinal, Node>& Aview,
525 CrsMatrixStruct<Scalar, LocalOrdinal, GlobalOrdinal, Node>& Pview,
526 const LocalOrdinalViewType & Acol2Prow,
527 const LocalOrdinalViewType & Acol2PIrow,
528 const LocalOrdinalViewType & Pcol2Ccol,
529 const LocalOrdinalViewType & PIcol2Ccol,
530 CrsMatrix<Scalar, LocalOrdinal, GlobalOrdinal, Node>& Ac,
531 Teuchos::RCP<const Import<LocalOrdinal,GlobalOrdinal,Node> > Acimport,
532 const std::string& label = std::string(),
533 const Teuchos::RCP<Teuchos::ParameterList>& params = Teuchos::null);
534 };
535
536 // This only merges matrices that look like B & Bimport, aka, they have no overlapping rows
537 template<class Scalar,class LocalOrdinal,class GlobalOrdinal,class Node, class LocalOrdinalViewType>
539 merge_matrices(CrsMatrixStruct<Scalar, LocalOrdinal, GlobalOrdinal, Node>& Aview,
540 CrsMatrixStruct<Scalar, LocalOrdinal, GlobalOrdinal, Node>& Bview,
541 const LocalOrdinalViewType & Acol2Brow,
542 const LocalOrdinalViewType & Acol2Irow,
543 const LocalOrdinalViewType & Bcol2Ccol,
544 const LocalOrdinalViewType & Icol2Ccol,
545 const size_t mergedNodeNumCols);
546
547
548
549
550template<class CrsMatrixType>
551size_t C_estimate_nnz(CrsMatrixType & A, CrsMatrixType &B);
552
553template<typename Scalar, typename LocalOrdinal, typename GlobalOrdinal, typename Node>
554struct AddKernels
555{
558 typedef typename Node::device_type device_type;
559 typedef typename device_type::execution_space execution_space;
560 typedef typename device_type::memory_space memory_space;
561 typedef typename crs_matrix_type::impl_scalar_type impl_scalar_type;
562 typedef typename crs_matrix_type::local_matrix_device_type KCRS;
563 typedef typename KCRS::values_type::non_const_type values_array;
564 typedef typename KCRS::row_map_type::non_const_type row_ptrs_array;
565 typedef typename KCRS::row_map_type row_ptrs_array_const;
566 typedef typename KCRS::index_type::non_const_type col_inds_array;
567 typedef typename map_type::local_map_type local_map_type;
568 typedef typename Kokkos::View<GlobalOrdinal*, device_type> global_col_inds_array;
569 typedef Kokkos::RangePolicy<execution_space> range_type;
570 typedef KokkosKernels::Experimental::KokkosKernelsHandle<size_t, LocalOrdinal, impl_scalar_type,
571 execution_space, memory_space, memory_space> KKH;
572
586 static void addSorted(
587 const values_array& Avals,
588 const row_ptrs_array_const& Arowptrs,
589 const col_inds_array& Acolinds,
590 const impl_scalar_type scalarA,
591 const values_array& Bvals,
592 const row_ptrs_array_const& Browptrs,
593 const col_inds_array& Bcolinds,
594 const impl_scalar_type scalarB,
595 values_array& Cvals,
596 row_ptrs_array& Crowptrs,
597 col_inds_array& Ccolinds);
598
610 static void convertToGlobalAndAdd(
611 const KCRS& A,
612 const impl_scalar_type scalarA,
613 const KCRS& B,
614 const impl_scalar_type scalarB,
615 const local_map_type& AcolMap,
616 const local_map_type& BcolMap,
617 values_array& Cvals,
618 row_ptrs_array& Crowptrs,
619 global_col_inds_array& Ccolinds);
620
635 static void addUnsorted(
636 const values_array& Avals,
637 const row_ptrs_array_const& Arowptrs,
638 const col_inds_array& Acolinds,
639 const impl_scalar_type scalarA,
640 const values_array& Bvals,
641 const row_ptrs_array_const& Browptrs,
642 const col_inds_array& Bcolinds,
643 const impl_scalar_type scalarB,
644 GlobalOrdinal numGlobalCols,
645 values_array& Cvals,
646 row_ptrs_array& Crowptrs,
647 col_inds_array& Ccolinds);
648};
649
650}//end namespace MMdetails
651
652} // end of Tpetra namespace
653
654#endif // TPETRA_MATRIXMATRIX_DECL_HPP
655
Sparse matrix that presents a row-oriented interface that lets users read or modify entries.
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.
A parallel distribution of indices over processes.
::Tpetra::Details::LocalMap< local_ordinal_type, global_ordinal_type, device_type > local_map_type
Type of the "local" Map.
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.