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 
60 namespace Tpetra {
61 
62 namespace MatrixMatrix {
63 
94 template <class Scalar,
95  class LocalOrdinal,
96  class GlobalOrdinal,
97  class Node>
98 void 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 
121 template <class Scalar,
122  class LocalOrdinal,
123  class GlobalOrdinal,
124  class Node>
125 void 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 
161 template <class Scalar,
162  class LocalOrdinal,
163  class GlobalOrdinal,
164  class Node>
165 Teuchos::RCP<CrsMatrix<Scalar, LocalOrdinal, GlobalOrdinal, Node> >
166 add (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 
212 template <class Scalar,
213  class LocalOrdinal,
214  class GlobalOrdinal,
215  class Node>
216 void
217 add (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 
258 template <class Scalar,
259  class LocalOrdinal,
260  class GlobalOrdinal,
261  class Node>
262 void 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 
308 namespace MMdetails{
309 
310  // Matrix multiplication functions
311 template<class Scalar,
312  class LocalOrdinal,
313  class GlobalOrdinal,
314  class Node>
315 void 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 
323 template<class Scalar,
324  class LocalOrdinal,
325  class GlobalOrdinal,
326  class Node>
327 void 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 
334 template<class Scalar,
335  class LocalOrdinal,
336  class GlobalOrdinal,
337  class Node>
338 void 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 
348 template<class Scalar,
349  class LocalOrdinal,
350  class GlobalOrdinal,
351  class Node>
352 void 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
363 template<class Scalar,
364  class LocalOrdinal,
365  class GlobalOrdinal,
366  class Node>
367 void 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 
377 template<class Scalar,
378  class LocalOrdinal,
379  class GlobalOrdinal,
380  class Node>
381 void 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
391 template<class Scalar,
392  class LocalOrdinal,
393  class GlobalOrdinal,
394  class Node>
395 void 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 
404 template<class Scalar,
405  class LocalOrdinal,
406  class GlobalOrdinal,
407  class Node>
408 void 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 
550 template<class CrsMatrixType>
551 size_t C_estimate_nnz(CrsMatrixType & A, CrsMatrixType &B);
552 
553 template<typename Scalar, typename LocalOrdinal, typename GlobalOrdinal, typename Node>
554 struct 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.