20 #include "Tpetra_Core.hpp"
21 #include "Tpetra_Map.hpp"
22 #include "Tpetra_MultiVector.hpp"
23 #include "Tpetra_Vector.hpp"
24 #include "Tpetra_CrsGraph.hpp"
25 #include "Tpetra_CrsMatrix.hpp"
29 #ifdef HAVE_STOKHOS_BELOS
31 #include "BelosLinearProblem.hpp"
32 #include "BelosPseudoBlockGmresSolMgr.hpp"
33 #include "BelosPseudoBlockCGSolMgr.hpp"
37 #ifdef HAVE_STOKHOS_IFPACK2
39 #include "Ifpack2_Factory.hpp"
43 #ifdef HAVE_STOKHOS_MUELU
45 #include "MueLu_CreateTpetraPreconditioner.hpp"
49 #ifdef HAVE_STOKHOS_AMESOS2
51 #include "Amesos2_Factory.hpp"
64 #define USE_SCALAR_MEAN_BASED_PREC 1
66 template <
typename scalar,
typename ordinal>
70 const ordinal iColFEM,
71 const ordinal iStoch )
73 const scalar X_fem = 100.0 + scalar(iColFEM) / scalar(nFEM);
74 const scalar X_stoch = 1.0 + scalar(iStoch) / scalar(nStoch);
75 return X_fem + X_stoch;
79 template <
typename scalar,
typename ordinal>
84 const ordinal iColFEM,
88 const scalar X_fem = 100.0 + scalar(iColFEM) / scalar(nFEM);
89 const scalar X_stoch = 1.0 + scalar(iStoch) / scalar(nStoch);
90 const scalar X_col = 0.01 + scalar(iVec) / scalar(nVec);
91 return X_fem + X_stoch + X_col;
95 template <
typename scalar,
typename ordinal>
99 const ordinal iRowFEM,
100 const ordinal iColFEM,
101 const ordinal iStoch )
103 const scalar A_fem = ( 10.0 + scalar(iRowFEM) / scalar(nFEM) ) +
104 ( 5.0 + scalar(iColFEM) / scalar(nFEM) );
106 const scalar A_stoch = ( 1.0 + scalar(iStoch) / scalar(nStoch) );
108 return A_fem + A_stoch;
112 template <
typename kokkos_cijk_type,
typename ordinal_type>
128 Array< RCP<const one_d_basis> > bases(stoch_dim);
130 bases[i] =
rcp(
new legendre_basis(poly_ord,
true));
131 RCP<const product_basis> basis =
rcp(
new product_basis(bases));
134 RCP<Cijk>
cijk = basis->computeTripleProductTensor();
137 kokkos_cijk_type kokkos_cijk =
138 Stokhos::create_product_tensor<execution_space>(*basis, *
cijk);
165 typedef typename Scalar::cijk_type Cijk;
168 typedef Tpetra::Map<LocalOrdinal,GlobalOrdinal,Node> Tpetra_Map;
169 typedef Tpetra::Vector<Scalar,LocalOrdinal,GlobalOrdinal,Node> Tpetra_Vector;
172 if ( !Kokkos::is_initialized() )
173 Kokkos::initialize();
181 RCP<const Tpetra_Comm> comm = Tpetra::getDefaultComm();
185 RCP<const Tpetra_Map> map =
186 Tpetra::createUniformContigMapWithNode<LocalOrdinal,GlobalOrdinal,Node>(
188 ArrayView<const GlobalOrdinal> myGIDs = map->getLocalElementList();
189 const size_t num_my_row = myGIDs.size();
192 RCP<Tpetra_Vector> x1 = Tpetra::createVector<Scalar>(map);
193 RCP<Tpetra_Vector> x2 = Tpetra::createVector<Scalar>(map);
194 ArrayRCP<Scalar> x1_view = x1->get1dViewNonConst();
195 ArrayRCP<Scalar> x2_view = x2->get1dViewNonConst();
196 Scalar val1(cijk), val2(cijk);
197 for (
size_t i=0; i<num_my_row; ++i) {
200 val1.fastAccessCoeff(
j) = generate_vector_coefficient<BaseScalar,size_t>(nrow, pce_size, row,
j);
201 val2.fastAccessCoeff(
j) = 0.12345 * generate_vector_coefficient<BaseScalar,size_t>(nrow, pce_size, row,
j);
212 RCP<Tpetra_Vector> y = Tpetra::createVector<Scalar>(map);
213 y->update(alpha, *x1, beta, *x2,
Scalar(0.0));
219 ArrayRCP<Scalar> y_view = y->get1dViewNonConst();
221 BaseScalar tol = 1.0e-14;
222 for (
size_t i=0; i<num_my_row; ++i) {
225 BaseScalar v = generate_vector_coefficient<BaseScalar,size_t>(
226 nrow, pce_size, row,
j);
227 val.fastAccessCoeff(
j) = alpha.coeff(0)*v + 0.12345*beta.coeff(0)*v;
252 typedef typename Scalar::cijk_type Cijk;
255 typedef Tpetra::Map<LocalOrdinal,GlobalOrdinal,Node> Tpetra_Map;
256 typedef Tpetra::Vector<Scalar,LocalOrdinal,GlobalOrdinal,Node> Tpetra_Vector;
257 typedef typename Tpetra_Vector::dot_type dot_type;
260 if ( !Kokkos::is_initialized() )
261 Kokkos::initialize();
269 RCP<const Tpetra_Comm> comm = Tpetra::getDefaultComm();
273 RCP<const Tpetra_Map> map =
274 Tpetra::createUniformContigMapWithNode<LocalOrdinal,GlobalOrdinal,Node>(
276 ArrayView<const GlobalOrdinal> myGIDs = map->getLocalElementList();
277 const size_t num_my_row = myGIDs.size();
280 RCP<Tpetra_Vector> x1 = Tpetra::createVector<Scalar>(map);
281 RCP<Tpetra_Vector> x2 = Tpetra::createVector<Scalar>(map);
282 ArrayRCP<Scalar> x1_view = x1->get1dViewNonConst();
283 ArrayRCP<Scalar> x2_view = x2->get1dViewNonConst();
284 Scalar val1(cijk), val2(cijk);
285 for (
size_t i=0; i<num_my_row; ++i) {
288 val1.fastAccessCoeff(
j) = generate_vector_coefficient<BaseScalar,size_t>(nrow, pce_size, row,
j);
289 val2.fastAccessCoeff(
j) = 0.12345 * generate_vector_coefficient<BaseScalar,size_t>(nrow, pce_size, row,
j);
298 dot_type
dot = x1->dot(*x2);
303 dot_type local_val(0);
304 for (
size_t i=0; i<num_my_row; ++i) {
307 BaseScalar v = generate_vector_coefficient<BaseScalar,size_t>(
308 nrow, pce_size, row,
j);
309 local_val += 0.12345 * v * v;
316 Teuchos::outArg(val));
318 out <<
"dot = " << dot <<
" expected = " << val << std::endl;
320 BaseScalar tol = 1.0e-14;
341 typedef typename Scalar::cijk_type Cijk;
344 typedef Tpetra::Map<LocalOrdinal,GlobalOrdinal,Node> Tpetra_Map;
345 typedef Tpetra::MultiVector<Scalar,LocalOrdinal,GlobalOrdinal,Node> Tpetra_MultiVector;
348 if ( !Kokkos::is_initialized() )
349 Kokkos::initialize();
357 RCP<const Tpetra_Comm> comm = Tpetra::getDefaultComm();
361 RCP<const Tpetra_Map> map =
362 Tpetra::createUniformContigMapWithNode<LocalOrdinal,GlobalOrdinal,Node>(
364 ArrayView<const GlobalOrdinal> myGIDs = map->getLocalElementList();
365 const size_t num_my_row = myGIDs.size();
369 RCP<Tpetra_MultiVector> x1 = Tpetra::createMultiVector<Scalar>(map, ncol);
370 RCP<Tpetra_MultiVector> x2 = Tpetra::createMultiVector<Scalar>(map, ncol);
371 ArrayRCP< ArrayRCP<Scalar> > x1_view = x1->get2dViewNonConst();
372 ArrayRCP< ArrayRCP<Scalar> > x2_view = x2->get2dViewNonConst();
373 Scalar val1(cijk), val2(cijk);
374 for (
size_t i=0; i<num_my_row; ++i) {
376 for (
size_t j=0;
j<ncol; ++
j) {
379 generate_multi_vector_coefficient<BaseScalar,size_t>(
380 nrow, ncol, pce_size, row,
j, k);
381 val1.fastAccessCoeff(k) = v;
382 val2.fastAccessCoeff(k) = 0.12345 * v;
384 x1_view[
j][i] = val1;
385 x2_view[
j][i] = val2;
394 RCP<Tpetra_MultiVector> y = Tpetra::createMultiVector<Scalar>(map, ncol);
395 y->update(alpha, *x1, beta, *x2,
Scalar(0.0));
401 ArrayRCP< ArrayRCP<Scalar> > y_view = y->get2dViewNonConst();
403 BaseScalar tol = 1.0e-14;
404 for (
size_t i=0; i<num_my_row; ++i) {
406 for (
size_t j=0;
j<ncol; ++
j) {
408 BaseScalar v = generate_multi_vector_coefficient<BaseScalar,size_t>(
409 nrow, ncol, pce_size, row,
j, k);
410 val.fastAccessCoeff(k) = alpha.coeff(0)*v + 0.12345*beta.coeff(0)*v;
415 val.fastAccessCoeff(k), tol );
437 typedef typename Scalar::cijk_type Cijk;
440 typedef Tpetra::Map<LocalOrdinal,GlobalOrdinal,Node> Tpetra_Map;
441 typedef Tpetra::MultiVector<Scalar,LocalOrdinal,GlobalOrdinal,Node> Tpetra_MultiVector;
442 typedef typename Tpetra_MultiVector::dot_type dot_type;
445 if ( !Kokkos::is_initialized() )
446 Kokkos::initialize();
454 RCP<const Tpetra_Comm> comm = Tpetra::getDefaultComm();
458 RCP<const Tpetra_Map> map =
459 Tpetra::createUniformContigMapWithNode<LocalOrdinal,GlobalOrdinal,Node>(
461 ArrayView<const GlobalOrdinal> myGIDs = map->getLocalElementList();
462 const size_t num_my_row = myGIDs.size();
466 RCP<Tpetra_MultiVector> x1 = Tpetra::createMultiVector<Scalar>(map, ncol);
467 RCP<Tpetra_MultiVector> x2 = Tpetra::createMultiVector<Scalar>(map, ncol);
468 ArrayRCP< ArrayRCP<Scalar> > x1_view = x1->get2dViewNonConst();
469 ArrayRCP< ArrayRCP<Scalar> > x2_view = x2->get2dViewNonConst();
470 Scalar val1(cijk), val2(cijk);
471 for (
size_t i=0; i<num_my_row; ++i) {
473 for (
size_t j=0;
j<ncol; ++
j) {
476 generate_multi_vector_coefficient<BaseScalar,size_t>(
477 nrow, ncol, pce_size, row,
j, k);
478 val1.fastAccessCoeff(k) = v;
479 val2.fastAccessCoeff(k) = 0.12345 * v;
481 x1_view[
j][i] = val1;
482 x2_view[
j][i] = val2;
489 Array<dot_type> dots(ncol);
490 x1->dot(*x2, dots());
495 Array<dot_type> local_vals(ncol, dot_type(0));
496 for (
size_t i=0; i<num_my_row; ++i) {
498 for (
size_t j=0;
j<ncol; ++
j) {
500 BaseScalar v = generate_multi_vector_coefficient<BaseScalar,size_t>(
501 nrow, ncol, pce_size, row,
j, k);
502 local_vals[
j] += 0.12345 * v * v;
508 Array<dot_type> vals(ncol, dot_type(0));
510 local_vals.getRawPtr(), vals.getRawPtr());
512 BaseScalar tol = 1.0e-14;
513 for (
size_t j=0;
j<ncol; ++
j) {
514 out <<
"dots(" <<
j <<
") = " << dots[
j]
515 <<
" expected(" <<
j <<
") = " << vals[
j] << std::endl;
537 typedef typename Scalar::cijk_type Cijk;
540 typedef Tpetra::Map<LocalOrdinal,GlobalOrdinal,Node> Tpetra_Map;
541 typedef Tpetra::MultiVector<Scalar,LocalOrdinal,GlobalOrdinal,Node> Tpetra_MultiVector;
542 typedef typename Tpetra_MultiVector::dot_type dot_type;
545 if ( !Kokkos::is_initialized() )
546 Kokkos::initialize();
554 RCP<const Tpetra_Comm> comm = Tpetra::getDefaultComm();
558 RCP<const Tpetra_Map> map =
559 Tpetra::createUniformContigMapWithNode<LocalOrdinal,GlobalOrdinal,Node>(
561 ArrayView<const GlobalOrdinal> myGIDs = map->getLocalElementList();
562 const size_t num_my_row = myGIDs.size();
566 RCP<Tpetra_MultiVector> x1 = Tpetra::createMultiVector<Scalar>(map, ncol);
567 RCP<Tpetra_MultiVector> x2 = Tpetra::createMultiVector<Scalar>(map, ncol);
568 ArrayRCP< ArrayRCP<Scalar> > x1_view = x1->get2dViewNonConst();
569 ArrayRCP< ArrayRCP<Scalar> > x2_view = x2->get2dViewNonConst();
570 Scalar val1(cijk), val2(cijk);
571 for (
size_t i=0; i<num_my_row; ++i) {
573 for (
size_t j=0;
j<ncol; ++
j) {
576 generate_multi_vector_coefficient<BaseScalar,size_t>(
577 nrow, ncol, pce_size, row,
j, k);
578 val1.fastAccessCoeff(k) = v;
579 val2.fastAccessCoeff(k) = 0.12345 * v;
581 x1_view[
j][i] = val1;
582 x2_view[
j][i] = val2;
591 cols[0] = 4; cols[1] = 2;
592 RCP<const Tpetra_MultiVector> x1_sub = x1->subView(cols());
593 RCP<const Tpetra_MultiVector> x2_sub = x2->subView(cols());
596 Array<dot_type> dots(ncol_sub);
597 x1_sub->dot(*x2_sub, dots());
602 Array<dot_type> local_vals(ncol_sub, dot_type(0));
603 for (
size_t i=0; i<num_my_row; ++i) {
605 for (
size_t j=0;
j<ncol_sub; ++
j) {
607 BaseScalar v = generate_multi_vector_coefficient<BaseScalar,size_t>(
608 nrow, ncol, pce_size, row, cols[
j], k);
609 local_vals[
j] += 0.12345 * v * v;
615 Array<dot_type> vals(ncol_sub, dot_type(0));
617 Teuchos::as<int>(ncol_sub), local_vals.getRawPtr(),
620 BaseScalar tol = 1.0e-14;
621 for (
size_t j=0;
j<ncol_sub; ++
j) {
622 out <<
"dots(" <<
j <<
") = " << dots[
j]
623 <<
" expected(" <<
j <<
") = " << vals[
j] << std::endl;
645 typedef typename Scalar::cijk_type Cijk;
648 typedef Tpetra::Map<LocalOrdinal,GlobalOrdinal,Node> Tpetra_Map;
649 typedef Tpetra::Vector<Scalar,LocalOrdinal,GlobalOrdinal,Node> Tpetra_Vector;
650 typedef Tpetra::CrsMatrix<Scalar,LocalOrdinal,GlobalOrdinal,Node> Tpetra_CrsMatrix;
651 typedef Tpetra::CrsGraph<LocalOrdinal,GlobalOrdinal,Node> Tpetra_CrsGraph;
654 if ( !Kokkos::is_initialized() )
655 Kokkos::initialize();
664 RCP<const Tpetra_Comm> comm = Tpetra::getDefaultComm();
665 RCP<const Tpetra_Map> map =
666 Tpetra::createUniformContigMapWithNode<LocalOrdinal,GlobalOrdinal,Node>(
668 RCP<Tpetra_CrsGraph> graph =
669 rcp(
new Tpetra_CrsGraph(map,
size_t(2)));
670 Array<GlobalOrdinal> columnIndices(2);
671 ArrayView<const GlobalOrdinal> myGIDs = map->getLocalElementList();
672 const size_t num_my_row = myGIDs.size();
673 for (
size_t i=0; i<num_my_row; ++i) {
675 columnIndices[0] = row;
678 columnIndices[1] = row+1;
681 graph->insertGlobalIndices(row, columnIndices(0,ncol));
683 graph->fillComplete();
684 RCP<Tpetra_CrsMatrix> matrix =
rcp(
new Tpetra_CrsMatrix(graph));
687 Array<Scalar> vals(2);
689 for (
size_t local_row=0; local_row<num_my_row; ++local_row) {
691 const size_t num_col = row == nrow - 1 ? 1 : 2;
692 for (
size_t local_col=0; local_col<num_col; ++local_col) {
694 columnIndices[local_col] = col;
696 val.fastAccessCoeff(k) =
697 generate_matrix_coefficient<BaseScalar,size_t>(
698 nrow, pce_size, row, col, k);
699 vals[local_col] =
val;
701 matrix->replaceGlobalValues(row, columnIndices(0,num_col), vals(0,num_col));
703 matrix->fillComplete();
706 RCP<Tpetra_Vector> x = Tpetra::createVector<Scalar>(map);
707 ArrayRCP<Scalar> x_view = x->get1dViewNonConst();
708 for (
size_t local_row=0; local_row<num_my_row; ++local_row) {
711 val.fastAccessCoeff(
j) = generate_vector_coefficient<BaseScalar,size_t>(
712 nrow, pce_size, row,
j);
713 x_view[local_row] =
val;
724 RCP<Tpetra_Vector> y = Tpetra::createVector<Scalar>(map);
725 matrix->apply(*x, *y);
731 ArrayRCP<Scalar> y_view = y->get1dViewNonConst();
732 BaseScalar tol = 1.0e-14;
733 typename Cijk::host_mirror_type host_cijk =
736 for (
size_t local_row=0; local_row<num_my_row; ++local_row) {
738 const size_t num_col = row == nrow - 1 ? 1 : 2;
740 for (
size_t local_col=0; local_col<num_col; ++local_col) {
744 const LocalOrdinal entry_beg = host_cijk.entry_begin(i);
747 for (
LocalOrdinal entry = entry_beg; entry < entry_end; ++entry) {
750 const BaseScalar a_j =
751 generate_matrix_coefficient<BaseScalar,size_t>(
752 nrow, pce_size, row, col,
j);
753 const BaseScalar a_k =
754 generate_matrix_coefficient<BaseScalar,size_t>(
755 nrow, pce_size, row, col, k);
756 const BaseScalar x_j =
757 generate_vector_coefficient<BaseScalar,size_t>(
758 nrow, pce_size, col,
j);
759 const BaseScalar x_k =
760 generate_vector_coefficient<BaseScalar,size_t>(
761 nrow, pce_size, col, k);
762 tmp += host_cijk.value(entry) * ( a_j * x_k + a_k * x_j );
764 val.fastAccessCoeff(i) += tmp;
770 val.fastAccessCoeff(i), tol );
791 typedef typename Scalar::cijk_type Cijk;
794 typedef Tpetra::Map<LocalOrdinal,GlobalOrdinal,Node> Tpetra_Map;
795 typedef Tpetra::MultiVector<Scalar,LocalOrdinal,GlobalOrdinal,Node> Tpetra_MultiVector;
796 typedef Tpetra::CrsMatrix<Scalar,LocalOrdinal,GlobalOrdinal,Node> Tpetra_CrsMatrix;
797 typedef Tpetra::CrsGraph<LocalOrdinal,GlobalOrdinal,Node> Tpetra_CrsGraph;
800 if ( !Kokkos::is_initialized() )
801 Kokkos::initialize();
810 RCP<const Tpetra_Comm> comm = Tpetra::getDefaultComm();
811 RCP<const Tpetra_Map> map =
812 Tpetra::createUniformContigMapWithNode<LocalOrdinal,GlobalOrdinal,Node>(
814 RCP<Tpetra_CrsGraph> graph =
815 rcp(
new Tpetra_CrsGraph(map,
size_t(2)));
816 Array<GlobalOrdinal> columnIndices(2);
817 ArrayView<const GlobalOrdinal> myGIDs = map->getLocalElementList();
818 const size_t num_my_row = myGIDs.size();
819 for (
size_t i=0; i<num_my_row; ++i) {
821 columnIndices[0] = row;
824 columnIndices[1] = row+1;
827 graph->insertGlobalIndices(row, columnIndices(0,ncol));
829 graph->fillComplete();
830 RCP<Tpetra_CrsMatrix> matrix =
rcp(
new Tpetra_CrsMatrix(graph));
833 Array<Scalar> vals(2);
835 for (
size_t local_row=0; local_row<num_my_row; ++local_row) {
837 const size_t num_col = row == nrow - 1 ? 1 : 2;
838 for (
size_t local_col=0; local_col<num_col; ++local_col) {
840 columnIndices[local_col] = col;
842 val.fastAccessCoeff(k) =
843 generate_matrix_coefficient<BaseScalar,size_t>(
844 nrow, pce_size, row, col, k);
845 vals[local_col] =
val;
847 matrix->replaceGlobalValues(row, columnIndices(0,num_col), vals(0,num_col));
849 matrix->fillComplete();
853 RCP<Tpetra_MultiVector> x = Tpetra::createMultiVector<Scalar>(map, ncol);
854 ArrayRCP< ArrayRCP<Scalar> > x_view = x->get2dViewNonConst();
855 for (
size_t local_row=0; local_row<num_my_row; ++local_row) {
857 for (
size_t col=0; col<ncol; ++col) {
860 generate_multi_vector_coefficient<BaseScalar,size_t>(
861 nrow, ncol, pce_size, row, col, k);
862 val.fastAccessCoeff(k) = v;
864 x_view[col][local_row] =
val;
876 RCP<Tpetra_MultiVector> y = Tpetra::createMultiVector<Scalar>(map, ncol);
877 matrix->apply(*x, *y);
883 ArrayRCP< ArrayRCP<Scalar> > y_view = y->get2dViewNonConst();
884 BaseScalar tol = 1.0e-14;
885 typename Cijk::host_mirror_type host_cijk =
888 for (
size_t local_row=0; local_row<num_my_row; ++local_row) {
890 for (
size_t xcol=0; xcol<ncol; ++xcol) {
891 const size_t num_col = row == nrow - 1 ? 1 : 2;
893 for (
size_t local_col=0; local_col<num_col; ++local_col) {
897 const LocalOrdinal entry_beg = host_cijk.entry_begin(i);
900 for (
LocalOrdinal entry = entry_beg; entry < entry_end; ++entry) {
903 const BaseScalar a_j =
904 generate_matrix_coefficient<BaseScalar,size_t>(
905 nrow, pce_size, row, col,
j);
906 const BaseScalar a_k =
907 generate_matrix_coefficient<BaseScalar,size_t>(
908 nrow, pce_size, row, col, k);
909 const BaseScalar x_j =
910 generate_multi_vector_coefficient<BaseScalar,size_t>(
911 nrow, ncol, pce_size, col, xcol,
j);
912 const BaseScalar x_k =
913 generate_multi_vector_coefficient<BaseScalar,size_t>(
914 nrow, ncol, pce_size, col, xcol, k);
915 tmp += host_cijk.value(entry) * ( a_j * x_k + a_k * x_j );
917 val.fastAccessCoeff(i) += tmp;
923 val.fastAccessCoeff(i), tol );
945 typedef typename Scalar::cijk_type Cijk;
948 typedef Tpetra::Map<LocalOrdinal,GlobalOrdinal,Node> Tpetra_Map;
949 typedef Tpetra::Vector<Scalar,LocalOrdinal,GlobalOrdinal,Node> Tpetra_Vector;
950 typedef Tpetra::CrsMatrix<Scalar,LocalOrdinal,GlobalOrdinal,Node> Tpetra_CrsMatrix;
951 typedef Tpetra::CrsGraph<LocalOrdinal,GlobalOrdinal,Node> Tpetra_CrsGraph;
953 typedef Tpetra::Vector<BaseScalar,LocalOrdinal,GlobalOrdinal,Node> Flat_Tpetra_Vector;
954 typedef Tpetra::CrsMatrix<BaseScalar,LocalOrdinal,GlobalOrdinal,Node> Flat_Tpetra_CrsMatrix;
957 if ( !Kokkos::is_initialized() )
958 Kokkos::initialize();
967 RCP<const Tpetra_Comm> comm = Tpetra::getDefaultComm();
968 RCP<const Tpetra_Map> map =
969 Tpetra::createUniformContigMapWithNode<LocalOrdinal,GlobalOrdinal,Node>(
971 RCP<Tpetra_CrsGraph> graph =
972 rcp(
new Tpetra_CrsGraph(map,
size_t(2)));
973 Array<GlobalOrdinal> columnIndices(2);
974 ArrayView<const GlobalOrdinal> myGIDs = map->getLocalElementList();
975 const size_t num_my_row = myGIDs.size();
976 for (
size_t i=0; i<num_my_row; ++i) {
978 columnIndices[0] = row;
981 columnIndices[1] = row+1;
984 graph->insertGlobalIndices(row, columnIndices(0,ncol));
986 graph->fillComplete();
987 RCP<Tpetra_CrsMatrix> matrix =
rcp(
new Tpetra_CrsMatrix(graph));
990 Array<Scalar> vals(2);
992 for (
size_t local_row=0; local_row<num_my_row; ++local_row) {
994 const size_t num_col = row == nrow - 1 ? 1 : 2;
995 for (
size_t local_col=0; local_col<num_col; ++local_col) {
997 columnIndices[local_col] = col;
999 val.fastAccessCoeff(k) =
1000 generate_matrix_coefficient<BaseScalar,size_t>(
1001 nrow, pce_size, row, col, k);
1002 vals[local_col] =
val;
1004 matrix->replaceGlobalValues(row, columnIndices(0,num_col), vals(0,num_col));
1006 matrix->fillComplete();
1009 RCP<Tpetra_Vector> x = Tpetra::createVector<Scalar>(map);
1011 ArrayRCP<Scalar> x_view = x->get1dViewNonConst();
1012 for (
size_t i=0; i<num_my_row; ++i) {
1015 val.fastAccessCoeff(
j) = generate_vector_coefficient<BaseScalar,size_t>(
1016 nrow, pce_size, row,
j);
1022 RCP<Tpetra_Vector> y = Tpetra::createVector<Scalar>(map);
1023 matrix->apply(*x, *y);
1040 RCP<const Tpetra_Map> flat_x_map, flat_y_map;
1041 RCP<const Tpetra_CrsGraph> flat_graph, cijk_graph;
1044 cijk_graph, pce_size);
1045 RCP<Flat_Tpetra_CrsMatrix> flat_matrix =
1049 RCP<Tpetra_Vector> y2 = Tpetra::createVector<Scalar>(map);
1051 RCP<Flat_Tpetra_Vector> flat_x =
1053 RCP<Flat_Tpetra_Vector> flat_y =
1055 flat_matrix->apply(*flat_x, *flat_y);
1076 BaseScalar tol = 1.0e-14;
1077 ArrayRCP<Scalar> y_view = y->get1dViewNonConst();
1078 ArrayRCP<Scalar> y2_view = y2->get1dViewNonConst();
1079 for (
size_t i=0; i<num_my_row; ++i) {
1106 typedef typename Scalar::cijk_type Cijk;
1109 typedef Tpetra::Map<LocalOrdinal,GlobalOrdinal,Node> Tpetra_Map;
1110 typedef Tpetra::Vector<Scalar,LocalOrdinal,GlobalOrdinal,Node> Tpetra_Vector;
1111 typedef Tpetra::CrsMatrix<Scalar,LocalOrdinal,GlobalOrdinal,Node> Tpetra_CrsMatrix;
1112 typedef Tpetra::CrsGraph<LocalOrdinal,GlobalOrdinal,Node> Tpetra_CrsGraph;
1115 if ( !Kokkos::is_initialized() )
1116 Kokkos::initialize();
1125 BaseScalar h = 1.0 /
static_cast<BaseScalar
>(nrow-1);
1126 RCP<const Tpetra_Comm> comm = Tpetra::getDefaultComm();
1127 RCP<const Tpetra_Map> map =
1128 Tpetra::createUniformContigMapWithNode<LocalOrdinal,GlobalOrdinal,Node>(
1130 RCP<Tpetra_CrsGraph> graph =
1131 rcp(
new Tpetra_CrsGraph(map,
size_t(3)));
1132 Array<GlobalOrdinal> columnIndices(3);
1133 ArrayView<const GlobalOrdinal> myGIDs = map->getLocalElementList();
1134 const size_t num_my_row = myGIDs.size();
1135 for (
size_t i=0; i<num_my_row; ++i) {
1137 if (row == 0 || row == nrow-1) {
1138 columnIndices[0] = row;
1139 graph->insertGlobalIndices(row, columnIndices(0,1));
1142 columnIndices[0] = row-1;
1143 columnIndices[1] = row;
1144 columnIndices[2] = row+1;
1145 graph->insertGlobalIndices(row, columnIndices(0,3));
1148 graph->fillComplete();
1149 RCP<Tpetra_CrsMatrix> matrix =
rcp(
new Tpetra_CrsMatrix(graph));
1152 Array<Scalar> vals(3);
1155 a_val.fastAccessCoeff(
j) =
1156 BaseScalar(1.0) + BaseScalar(1.0) / BaseScalar(
j+1);
1158 for (
size_t i=0; i<num_my_row; ++i) {
1160 if (row == 0 || row == nrow-1) {
1161 columnIndices[0] = row;
1163 matrix->replaceGlobalValues(row, columnIndices(0,1), vals(0,1));
1166 columnIndices[0] = row-1;
1167 columnIndices[1] = row;
1168 columnIndices[2] = row+1;
1169 vals[0] =
Scalar(1.0) * a_val;
1170 vals[1] =
Scalar(-2.0) * a_val;
1171 vals[2] =
Scalar(1.0) * a_val;
1172 matrix->replaceGlobalValues(row, columnIndices(0,3), vals(0,3));
1175 matrix->fillComplete();
1181 RCP<Tpetra_Vector> b = Tpetra::createVector<Scalar>(map);
1183 ArrayRCP<Scalar> b_view = b->get1dViewNonConst();
1186 b_val.fastAccessCoeff(
j) =
1187 BaseScalar(2.0) - BaseScalar(1.0) / BaseScalar(
j+1);
1189 for (
size_t i=0; i<num_my_row; ++i) {
1191 if (row == 0 || row == nrow-1)
1194 b_view[i] = b_val * (h*h);
1202 RCP<Tpetra_Vector> x = Tpetra::createVector<Scalar>(map);
1203 #if KOKKOS_VERSION >= 40799
1204 typedef KokkosKernels::ArithTraits<BaseScalar> BST;
1206 typedef Kokkos::ArithTraits<BaseScalar> BST;
1208 typedef typename BST::mag_type base_mag_type;
1209 typedef typename Tpetra_Vector::mag_type mag_type;
1210 base_mag_type btol = 1e-9;
1211 mag_type tol = btol;
1214 out.getOStream().get());
1221 typedef Tpetra::Vector<BaseScalar,LocalOrdinal,GlobalOrdinal,Node> Flat_Tpetra_Vector;
1222 typedef Tpetra::CrsMatrix<BaseScalar,LocalOrdinal,GlobalOrdinal,Node> Flat_Tpetra_CrsMatrix;
1223 RCP<const Tpetra_Map> flat_x_map, flat_b_map;
1224 RCP<const Tpetra_CrsGraph> flat_graph, cijk_graph;
1227 cijk_graph, pce_size);
1228 RCP<Flat_Tpetra_CrsMatrix> flat_matrix =
1230 RCP<Tpetra_Vector> x2 = Tpetra::createVector<Scalar>(map);
1232 RCP<Flat_Tpetra_Vector> flat_x =
1234 RCP<Flat_Tpetra_Vector> flat_b =
1237 tol, max_its, out.getOStream().get());
1238 TEST_EQUALITY_CONST( solved_flat,
true );
1242 ArrayRCP<Scalar> x_view = x->get1dViewNonConst();
1243 ArrayRCP<Scalar> x2_view = x2->get1dViewNonConst();
1244 for (
size_t i=0; i<num_my_row; ++i) {
1249 Scalar v = x_view[i];
1250 Scalar v2 = x2_view[i];
1252 if (
j < v.size() &&
BST::abs(v.coeff(
j)) < btol)
1253 v.fastAccessCoeff(
j) = BaseScalar(0.0);
1254 if (
j < v2.size() &&
BST::abs(v2.coeff(
j)) < btol)
1255 v2.fastAccessCoeff(
j) = BaseScalar(0.0);
1267 #if defined(HAVE_STOKHOS_MUELU) && defined(HAVE_STOKHOS_AMESOS2) && defined(HAVE_STOKHOS_IFPACK2) && defined(HAVE_TPETRA_EXPLICIT_INSTANTIATION)
1284 using Teuchos::getParametersFromXmlFile;
1288 typedef typename Scalar::cijk_type Cijk;
1291 typedef Tpetra::Map<LocalOrdinal,GlobalOrdinal,Node> Tpetra_Map;
1292 typedef Tpetra::Vector<Scalar,LocalOrdinal,GlobalOrdinal,Node> Tpetra_Vector;
1293 typedef Tpetra::CrsMatrix<Scalar,LocalOrdinal,GlobalOrdinal,Node> Tpetra_CrsMatrix;
1294 typedef Tpetra::CrsGraph<LocalOrdinal,GlobalOrdinal,Node> Tpetra_CrsGraph;
1297 if ( !Kokkos::is_initialized() )
1298 Kokkos::initialize();
1307 BaseScalar h = 1.0 /
static_cast<BaseScalar
>(nrow-1);
1308 RCP<const Tpetra_Comm> comm = Tpetra::getDefaultComm();
1309 RCP<const Tpetra_Map> map =
1310 Tpetra::createUniformContigMapWithNode<LocalOrdinal,GlobalOrdinal,Node>(
1312 RCP<Tpetra_CrsGraph> graph =
1313 rcp(
new Tpetra_CrsGraph(map,
size_t(3)));
1314 Array<GlobalOrdinal> columnIndices(3);
1315 ArrayView<const GlobalOrdinal> myGIDs = map->getLocalElementList();
1316 const size_t num_my_row = myGIDs.size();
1317 for (
size_t i=0; i<num_my_row; ++i) {
1319 if (row == 0 || row == nrow-1) {
1320 columnIndices[0] = row;
1321 graph->insertGlobalIndices(row, columnIndices(0,1));
1324 columnIndices[0] = row-1;
1325 columnIndices[1] = row;
1326 columnIndices[2] = row+1;
1327 graph->insertGlobalIndices(row, columnIndices(0,3));
1330 graph->fillComplete();
1331 RCP<Tpetra_CrsMatrix> matrix =
rcp(
new Tpetra_CrsMatrix(graph));
1334 Array<Scalar> vals(3);
1337 a_val.fastAccessCoeff(
j) =
1338 BaseScalar(1.0) + BaseScalar(1.0) / BaseScalar(
j+1);
1340 for (
size_t i=0; i<num_my_row; ++i) {
1342 if (row == 0 || row == nrow-1) {
1343 columnIndices[0] = row;
1345 matrix->replaceGlobalValues(row, columnIndices(0,1), vals(0,1));
1348 columnIndices[0] = row-1;
1349 columnIndices[1] = row;
1350 columnIndices[2] = row+1;
1351 vals[0] =
Scalar(1.0) * a_val;
1352 vals[1] =
Scalar(-2.0) * a_val;
1353 vals[2] =
Scalar(1.0) * a_val;
1354 matrix->replaceGlobalValues(row, columnIndices(0,3), vals(0,3));
1357 matrix->fillComplete();
1360 RCP<Tpetra_Vector> b = Tpetra::createVector<Scalar>(map);
1362 ArrayRCP<Scalar> b_view = b->get1dViewNonConst();
1365 b_val.fastAccessCoeff(
j) =
1366 BaseScalar(2.0) - BaseScalar(1.0) / BaseScalar(
j+1);
1368 for (
size_t i=0; i<num_my_row; ++i) {
1370 if (row == 0 || row == nrow-1)
1373 b_view[i] = b_val * (h*h);
1377 RCP<Tpetra_Vector> x = Tpetra::createVector<Scalar>(map);
1378 #if KOKKOS_VERSION >= 40799
1379 typedef KokkosKernels::ArithTraits<BaseScalar> BST;
1381 typedef Kokkos::ArithTraits<BaseScalar> BST;
1383 typedef typename BST::mag_type base_mag_type;
1384 typedef typename Tpetra_Vector::mag_type mag_type;
1385 base_mag_type btol = 1e-9;
1386 mag_type tol = btol;
1390 typedef Tpetra::Operator<Scalar,LocalOrdinal,GlobalOrdinal,Node> OP;
1391 RCP<ParameterList> muelu_params =
1392 getParametersFromXmlFile(
"muelu_cheby.xml");
1393 #if USE_SCALAR_MEAN_BASED_PREC
1394 typedef Tpetra::Operator<BaseScalar,LocalOrdinal,GlobalOrdinal,Node> Scalar_OP;
1395 typedef Tpetra::CrsMatrix<BaseScalar,LocalOrdinal,GlobalOrdinal,Node> Scalar_Tpetra_CrsMatrix;
1396 RCP<Scalar_Tpetra_CrsMatrix> mean_matrix =
1398 RCP<Scalar_OP> mean_matrix_op = mean_matrix;
1399 RCP<Scalar_OP> M_s =
1400 MueLu::CreateTpetraPreconditioner<BaseScalar,LocalOrdinal,GlobalOrdinal,Node>(mean_matrix_op, *muelu_params);
1404 Stokhos::create_mean_based_product_tensor<typename Storage::execution_space,typename Storage::ordinal_type,BaseScalar>();
1407 RCP<OP> mean_matrix_op = mean_matrix;
1409 MueLu::CreateTpetraPreconditioner<Scalar,LocalOrdinal,GlobalOrdinal,Node>(mean_matrix_op, *muelu_params);
1415 out.getOStream().get());
1423 RCP<Tpetra_Vector> x2 = Tpetra::createVector<Scalar>(map);
1425 typedef Tpetra::Vector<BaseScalar,LocalOrdinal,GlobalOrdinal,Node> Flat_Tpetra_Vector;
1426 typedef Tpetra::CrsMatrix<BaseScalar,LocalOrdinal,GlobalOrdinal,Node> Flat_Tpetra_CrsMatrix;
1427 RCP<const Tpetra_Map> flat_x_map, flat_b_map;
1428 RCP<const Tpetra_CrsGraph> flat_graph, cijk_graph;
1431 cijk_graph, pce_size);
1432 RCP<Flat_Tpetra_CrsMatrix> flat_matrix =
1434 RCP<Flat_Tpetra_Vector> flat_x =
1436 RCP<Flat_Tpetra_Vector> flat_b =
1444 tol, max_its, out.getOStream().get());
1449 ArrayRCP<Scalar> x_view = x->get1dViewNonConst();
1450 ArrayRCP<Scalar> x2_view = x2->get1dViewNonConst();
1451 for (
size_t i=0; i<num_my_row; ++i) {
1456 Scalar v = x_view[i];
1457 Scalar v2 = x2_view[i];
1459 if (
j < v.size() &&
BST::abs(v.coeff(
j)) < btol)
1460 v.fastAccessCoeff(
j) = BaseScalar(0.0);
1461 if (
j < v2.size() &&
BST::abs(v2.coeff(
j)) < btol)
1462 v2.fastAccessCoeff(
j) = BaseScalar(0.0);
1481 #if defined(HAVE_STOKHOS_BELOS)
1498 typedef typename Scalar::cijk_type Cijk;
1501 typedef Tpetra::Map<LocalOrdinal,GlobalOrdinal,Node> Tpetra_Map;
1502 typedef Tpetra::Vector<Scalar,LocalOrdinal,GlobalOrdinal,Node> Tpetra_Vector;
1503 typedef Tpetra::CrsMatrix<Scalar,LocalOrdinal,GlobalOrdinal,Node> Tpetra_CrsMatrix;
1504 typedef Tpetra::CrsGraph<LocalOrdinal,GlobalOrdinal,Node> Tpetra_CrsGraph;
1507 if ( !Kokkos::is_initialized() )
1508 Kokkos::initialize();
1517 RCP<const Tpetra_Comm> comm = Tpetra::getDefaultComm();
1518 RCP<const Tpetra_Map> map =
1519 Tpetra::createUniformContigMapWithNode<LocalOrdinal,GlobalOrdinal,Node>(
1521 RCP<Tpetra_CrsGraph> graph =
1522 rcp(
new Tpetra_CrsGraph(map,
size_t(2)));
1523 Array<GlobalOrdinal> columnIndices(2);
1524 ArrayView<const GlobalOrdinal> myGIDs = map->getLocalElementList();
1525 const size_t num_my_row = myGIDs.size();
1526 for (
size_t i=0; i<num_my_row; ++i) {
1528 columnIndices[0] = row;
1530 if (row != nrow-1) {
1531 columnIndices[1] = row+1;
1534 graph->insertGlobalIndices(row, columnIndices(0,ncol));
1536 graph->fillComplete();
1537 RCP<Tpetra_CrsMatrix> matrix =
rcp(
new Tpetra_CrsMatrix(graph));
1540 Array<Scalar> vals(2);
1542 for (
size_t local_row=0; local_row<num_my_row; ++local_row) {
1544 const size_t num_col = row == nrow - 1 ? 1 : 2;
1545 for (
size_t local_col=0; local_col<num_col; ++local_col) {
1547 columnIndices[local_col] = col;
1549 val.fastAccessCoeff(k) =
1550 BaseScalar(1.0) + BaseScalar(1.0) / BaseScalar(k+1);
1551 vals[local_col] =
val;
1553 matrix->replaceGlobalValues(row, columnIndices(0,num_col), vals(0,num_col));
1555 matrix->fillComplete();
1558 RCP<Tpetra_Vector> b = Tpetra::createVector<Scalar>(map);
1560 ArrayRCP<Scalar> b_view = b->get1dViewNonConst();
1561 for (
size_t i=0; i<num_my_row; ++i) {
1568 typedef BaseScalar BelosScalar;
1569 typedef Tpetra::MultiVector<Scalar,LocalOrdinal,GlobalOrdinal,Node> MV;
1570 typedef Tpetra::Operator<Scalar,LocalOrdinal,GlobalOrdinal,Node> OP;
1571 typedef Belos::LinearProblem<BelosScalar,MV,OP> BLinProb;
1572 RCP<Tpetra_Vector> x = Tpetra::createVector<Scalar>(map);
1573 RCP< BLinProb > problem =
rcp(
new BLinProb(matrix, x, b));
1574 RCP<ParameterList> belosParams =
rcp(
new ParameterList);
1575 typename ST::magnitudeType tol = 1e-9;
1576 belosParams->set(
"Flexible Gmres",
false);
1577 belosParams->set(
"Num Blocks", 100);
1578 belosParams->set(
"Convergence Tolerance", BelosScalar(tol));
1579 belosParams->set(
"Maximum Iterations", 100);
1580 belosParams->set(
"Verbosity", 33);
1581 belosParams->set(
"Output Style", 1);
1582 belosParams->set(
"Output Frequency", 1);
1583 belosParams->set(
"Output Stream", out.getOStream());
1584 RCP<Belos::SolverManager<BelosScalar,MV,OP> > solver =
1585 rcp(
new Belos::PseudoBlockGmresSolMgr<BelosScalar,MV,OP>(problem, belosParams));
1586 problem->setProblem();
1587 Belos::ReturnType ret = solver->solve();
1594 typedef Tpetra::Vector<BaseScalar,LocalOrdinal,GlobalOrdinal,Node> Flat_Tpetra_Vector;
1595 typedef Tpetra::CrsMatrix<BaseScalar,LocalOrdinal,GlobalOrdinal,Node> Flat_Tpetra_CrsMatrix;
1596 RCP<const Tpetra_Map> flat_x_map, flat_b_map;
1597 RCP<const Tpetra_CrsGraph> flat_graph, cijk_graph;
1600 cijk_graph, pce_size);
1601 RCP<Flat_Tpetra_CrsMatrix> flat_matrix =
1603 RCP<Tpetra_Vector> x2 = Tpetra::createVector<Scalar>(map);
1605 RCP<Flat_Tpetra_Vector> flat_x =
1607 RCP<Flat_Tpetra_Vector> flat_b =
1609 typedef Tpetra::MultiVector<BaseScalar,LocalOrdinal,GlobalOrdinal,Node> FMV;
1610 typedef Tpetra::Operator<BaseScalar,LocalOrdinal,GlobalOrdinal,Node> FOP;
1611 typedef Belos::LinearProblem<BelosScalar,FMV,FOP> FBLinProb;
1612 RCP< FBLinProb > flat_problem =
1613 rcp(
new FBLinProb(flat_matrix, flat_x, flat_b));
1614 RCP<Belos::SolverManager<BelosScalar,FMV,FOP> > flat_solver =
1615 rcp(
new Belos::PseudoBlockGmresSolMgr<BelosScalar,FMV,FOP>(flat_problem,
1617 flat_problem->setProblem();
1618 Belos::ReturnType flat_ret = flat_solver->solve();
1622 typename ST::magnitudeType btol = 100*tol;
1623 ArrayRCP<Scalar> x_view = x->get1dViewNonConst();
1624 ArrayRCP<Scalar> x2_view = x2->get1dViewNonConst();
1625 for (
size_t i=0; i<num_my_row; ++i) {
1630 Scalar v = x_view[i];
1631 Scalar v2 = x2_view[i];
1633 if (
j < v.size() && ST::magnitude(v.coeff(
j)) < btol)
1634 v.fastAccessCoeff(
j) = BaseScalar(0.0);
1635 if (
j < v2.size() && ST::magnitude(v2.coeff(
j)) < btol)
1636 v2.fastAccessCoeff(
j) = BaseScalar(0.0);
1657 #if defined(HAVE_STOKHOS_BELOS) && defined(HAVE_STOKHOS_IFPACK2)
1675 typedef typename Scalar::cijk_type Cijk;
1678 typedef Tpetra::Map<LocalOrdinal,GlobalOrdinal,Node> Tpetra_Map;
1679 typedef Tpetra::Vector<Scalar,LocalOrdinal,GlobalOrdinal,Node> Tpetra_Vector;
1680 typedef Tpetra::CrsMatrix<Scalar,LocalOrdinal,GlobalOrdinal,Node> Tpetra_CrsMatrix;
1681 typedef Tpetra::CrsGraph<LocalOrdinal,GlobalOrdinal,Node> Tpetra_CrsGraph;
1684 if ( !Kokkos::is_initialized() )
1685 Kokkos::initialize();
1694 RCP<const Tpetra_Comm> comm = Tpetra::getDefaultComm();
1695 RCP<const Tpetra_Map> map =
1696 Tpetra::createUniformContigMapWithNode<LocalOrdinal,GlobalOrdinal,Node>(
1698 RCP<Tpetra_CrsGraph> graph =
1699 rcp(
new Tpetra_CrsGraph(map,
size_t(2)));
1700 Array<GlobalOrdinal> columnIndices(2);
1701 ArrayView<const GlobalOrdinal> myGIDs = map->getLocalElementList();
1702 const size_t num_my_row = myGIDs.size();
1703 for (
size_t i=0; i<num_my_row; ++i) {
1705 columnIndices[0] = row;
1707 if (row != nrow-1) {
1708 columnIndices[1] = row+1;
1711 graph->insertGlobalIndices(row, columnIndices(0,ncol));
1713 graph->fillComplete();
1714 RCP<Tpetra_CrsMatrix> matrix =
rcp(
new Tpetra_CrsMatrix(graph));
1717 Array<Scalar> vals(2);
1719 for (
size_t local_row=0; local_row<num_my_row; ++local_row) {
1721 const size_t num_col = row == nrow - 1 ? 1 : 2;
1722 for (
size_t local_col=0; local_col<num_col; ++local_col) {
1724 columnIndices[local_col] = col;
1726 val.fastAccessCoeff(k) =
1727 BaseScalar(1.0) + BaseScalar(1.0) / BaseScalar(k+1);
1728 vals[local_col] =
val;
1730 matrix->replaceGlobalValues(row, columnIndices(0,num_col), vals(0,num_col));
1732 matrix->fillComplete();
1735 RCP<Tpetra_Vector> b = Tpetra::createVector<Scalar>(map);
1737 ArrayRCP<Scalar> b_view = b->get1dViewNonConst();
1738 for (
size_t i=0; i<num_my_row; ++i) {
1743 RCP<Tpetra_Vector> x = Tpetra::createVector<Scalar>(map);
1744 RCP<ParameterList> belosParams =
rcp(
new ParameterList);
1745 typedef BaseScalar BelosScalar;
1747 typename ST::magnitudeType tol = 1e-9;
1749 typedef Tpetra::MultiVector<Scalar,LocalOrdinal,GlobalOrdinal,Node> MV;
1750 typedef Tpetra::Operator<Scalar,LocalOrdinal,GlobalOrdinal,Node> OP;
1751 typedef Belos::LinearProblem<BelosScalar,MV,OP> BLinProb;
1753 #if USE_SCALAR_MEAN_BASED_PREC
1754 typedef Tpetra::CrsMatrix<BaseScalar,LocalOrdinal,GlobalOrdinal,Node> Scalar_Tpetra_CrsMatrix;
1755 RCP<Scalar_Tpetra_CrsMatrix> mean_matrix =
1757 typedef Ifpack2::Preconditioner<BaseScalar,LocalOrdinal,GlobalOrdinal,Node> Scalar_Prec;
1758 Ifpack2::Factory factory;
1759 RCP<Scalar_Prec> M_s = factory.create<Scalar_Tpetra_CrsMatrix>(
"RILUK", mean_matrix);
1765 typedef Ifpack2::Preconditioner<Scalar,LocalOrdinal,GlobalOrdinal,Node> Prec;
1766 Ifpack2::Factory factory;
1767 RCP<Prec> M = factory.create<Tpetra_CrsMatrix>(
"RILUK", mean_matrix);
1773 RCP< BLinProb > problem =
rcp(
new BLinProb(matrix, x, b));
1774 problem->setRightPrec(M);
1775 problem->setProblem();
1776 belosParams->set(
"Flexible Gmres",
false);
1777 belosParams->set(
"Num Blocks", 100);
1778 belosParams->set(
"Convergence Tolerance", BelosScalar(tol));
1779 belosParams->set(
"Maximum Iterations", 100);
1780 belosParams->set(
"Verbosity", 33);
1781 belosParams->set(
"Output Style", 1);
1782 belosParams->set(
"Output Frequency", 1);
1783 belosParams->set(
"Output Stream", out.getOStream());
1785 RCP<Belos::SolverManager<BelosScalar,MV,OP> > solver =
1786 rcp(
new Belos::PseudoBlockGmresSolMgr<BelosScalar,MV,OP>(problem, belosParams));
1787 Belos::ReturnType ret = solver->solve();
1792 RCP<Tpetra_Vector> x2 = Tpetra::createVector<Scalar>(map);
1794 typedef Tpetra::Vector<BaseScalar,LocalOrdinal,GlobalOrdinal,Node> Flat_Tpetra_Vector;
1795 typedef Tpetra::CrsMatrix<BaseScalar,LocalOrdinal,GlobalOrdinal,Node> Flat_Tpetra_CrsMatrix;
1796 RCP<const Tpetra_Map> flat_x_map, flat_b_map;
1797 RCP<const Tpetra_CrsGraph> flat_graph, cijk_graph;
1800 cijk_graph, pce_size);
1801 RCP<Flat_Tpetra_CrsMatrix> flat_matrix =
1803 RCP<Flat_Tpetra_Vector> flat_x =
1805 RCP<Flat_Tpetra_Vector> flat_b =
1807 typedef Tpetra::MultiVector<BaseScalar,LocalOrdinal,GlobalOrdinal,Node> FMV;
1808 typedef Tpetra::Operator<BaseScalar,LocalOrdinal,GlobalOrdinal,Node> FOP;
1809 typedef Belos::LinearProblem<BelosScalar,FMV,FOP> FBLinProb;
1810 RCP< FBLinProb > flat_problem =
1811 rcp(
new FBLinProb(flat_matrix, flat_x, flat_b));
1812 RCP<Belos::SolverManager<BelosScalar,FMV,FOP> > flat_solver =
1813 rcp(
new Belos::PseudoBlockGmresSolMgr<BelosScalar,FMV,FOP>(flat_problem,
1815 flat_problem->setProblem();
1816 Belos::ReturnType flat_ret = flat_solver->solve();
1820 typename ST::magnitudeType btol = 100*tol;
1821 ArrayRCP<Scalar> x_view = x->get1dViewNonConst();
1822 ArrayRCP<Scalar> x2_view = x2->get1dViewNonConst();
1823 for (
size_t i=0; i<num_my_row; ++i) {
1828 Scalar v = x_view[i];
1829 Scalar v2 = x2_view[i];
1831 if (
j < v.size() && ST::magnitude(v.coeff(
j)) < btol)
1832 v.fastAccessCoeff(
j) = BaseScalar(0.0);
1833 if (
j < v2.size() && ST::magnitude(v2.coeff(
j)) < btol)
1834 v2.fastAccessCoeff(
j) = BaseScalar(0.0);
1853 #if defined(HAVE_STOKHOS_BELOS) && defined(HAVE_STOKHOS_IFPACK2) && defined(HAVE_STOKHOS_MUELU) && defined(HAVE_STOKHOS_AMESOS2) && defined(HAVE_TPETRA_EXPLICIT_INSTANTIATION)
1870 using Teuchos::getParametersFromXmlFile;
1874 typedef typename Scalar::cijk_type Cijk;
1877 typedef Tpetra::Map<LocalOrdinal,GlobalOrdinal,Node> Tpetra_Map;
1878 typedef Tpetra::Vector<Scalar,LocalOrdinal,GlobalOrdinal,Node> Tpetra_Vector;
1879 typedef Tpetra::CrsMatrix<Scalar,LocalOrdinal,GlobalOrdinal,Node> Tpetra_CrsMatrix;
1880 typedef Tpetra::CrsGraph<LocalOrdinal,GlobalOrdinal,Node> Tpetra_CrsGraph;
1883 if ( !Kokkos::is_initialized() )
1884 Kokkos::initialize();
1893 BaseScalar h = 1.0 /
static_cast<BaseScalar
>(nrow-1);
1894 RCP<const Tpetra_Comm> comm = Tpetra::getDefaultComm();
1895 RCP<const Tpetra_Map> map =
1896 Tpetra::createUniformContigMapWithNode<LocalOrdinal,GlobalOrdinal,Node>(
1898 RCP<Tpetra_CrsGraph> graph =
1899 rcp(
new Tpetra_CrsGraph(map,
size_t(3)));
1900 Array<GlobalOrdinal> columnIndices(3);
1901 ArrayView<const GlobalOrdinal> myGIDs = map->getLocalElementList();
1902 const size_t num_my_row = myGIDs.size();
1903 for (
size_t i=0; i<num_my_row; ++i) {
1905 if (row == 0 || row == nrow-1) {
1906 columnIndices[0] = row;
1907 graph->insertGlobalIndices(row, columnIndices(0,1));
1910 columnIndices[0] = row-1;
1911 columnIndices[1] = row;
1912 columnIndices[2] = row+1;
1913 graph->insertGlobalIndices(row, columnIndices(0,3));
1916 graph->fillComplete();
1917 RCP<Tpetra_CrsMatrix> matrix =
rcp(
new Tpetra_CrsMatrix(graph));
1920 Array<Scalar> vals(3);
1923 a_val.fastAccessCoeff(
j) =
1924 BaseScalar(1.0) + BaseScalar(1.0) / BaseScalar(
j+1);
1926 for (
size_t i=0; i<num_my_row; ++i) {
1928 if (row == 0 || row == nrow-1) {
1929 columnIndices[0] = row;
1931 matrix->replaceGlobalValues(row, columnIndices(0,1), vals(0,1));
1934 columnIndices[0] = row-1;
1935 columnIndices[1] = row;
1936 columnIndices[2] = row+1;
1937 vals[0] =
Scalar(1.0) * a_val;
1938 vals[1] =
Scalar(-2.0) * a_val;
1939 vals[2] =
Scalar(1.0) * a_val;
1940 matrix->replaceGlobalValues(row, columnIndices(0,3), vals(0,3));
1943 matrix->fillComplete();
1946 RCP<Tpetra_Vector> b = Tpetra::createVector<Scalar>(map);
1948 ArrayRCP<Scalar> b_view = b->get1dViewNonConst();
1951 b_val.fastAccessCoeff(
j) =
1952 BaseScalar(2.0) - BaseScalar(1.0) / BaseScalar(
j+1);
1954 for (
size_t i=0; i<num_my_row; ++i) {
1956 if (row == 0 || row == nrow-1)
1959 b_view[i] = b_val * (h*h);
1964 typedef Tpetra::Operator<Scalar,LocalOrdinal,GlobalOrdinal,Node> OP;
1965 RCP<ParameterList> muelu_params =
1966 getParametersFromXmlFile(
"muelu_cheby.xml");
1967 #if USE_SCALAR_MEAN_BASED_PREC
1968 typedef Tpetra::Operator<BaseScalar,LocalOrdinal,GlobalOrdinal,Node> Scalar_OP;
1969 typedef Tpetra::CrsMatrix<BaseScalar,LocalOrdinal,GlobalOrdinal,Node> Scalar_Tpetra_CrsMatrix;
1970 RCP<Scalar_Tpetra_CrsMatrix> mean_matrix =
1972 RCP<Scalar_OP> mean_matrix_op = mean_matrix;
1973 RCP<Scalar_OP> M_s =
1974 MueLu::CreateTpetraPreconditioner<BaseScalar,LocalOrdinal,GlobalOrdinal,Node>(mean_matrix_op, *muelu_params);
1978 Stokhos::create_mean_based_product_tensor<typename Storage::execution_space,typename Storage::ordinal_type,BaseScalar>();
1981 RCP<OP> mean_matrix_op = mean_matrix;
1983 MueLu::CreateTpetraPreconditioner<Scalar,LocalOrdinal,GlobalOrdinal,Node>(mean_matrix_op, *muelu_params);
1989 typedef BaseScalar BelosScalar;
1990 typedef Tpetra::MultiVector<Scalar,LocalOrdinal,GlobalOrdinal,Node> MV;
1991 typedef Belos::LinearProblem<BelosScalar,MV,OP> BLinProb;
1992 RCP<Tpetra_Vector> x = Tpetra::createVector<Scalar>(map);
1993 RCP< BLinProb > problem =
rcp(
new BLinProb(matrix, x, b));
1994 problem->setRightPrec(M);
1995 problem->setProblem();
1996 RCP<ParameterList> belosParams =
rcp(
new ParameterList);
1997 typename ST::magnitudeType tol = 1e-9;
1998 belosParams->set(
"Num Blocks", 100);
1999 belosParams->set(
"Convergence Tolerance", BelosScalar(tol));
2000 belosParams->set(
"Maximum Iterations", 100);
2001 belosParams->set(
"Verbosity", 33);
2002 belosParams->set(
"Output Style", 1);
2003 belosParams->set(
"Output Frequency", 1);
2004 belosParams->set(
"Output Stream", out.getOStream());
2006 RCP<Belos::SolverManager<BelosScalar,MV,OP> > solver =
2007 rcp(
new Belos::PseudoBlockGmresSolMgr<BelosScalar,MV,OP>(problem, belosParams));
2010 Belos::ReturnType ret = solver->solve();
2017 typedef Tpetra::Vector<BaseScalar,LocalOrdinal,GlobalOrdinal,Node> Flat_Tpetra_Vector;
2018 typedef Tpetra::CrsMatrix<BaseScalar,LocalOrdinal,GlobalOrdinal,Node> Flat_Tpetra_CrsMatrix;
2019 RCP<const Tpetra_Map> flat_x_map, flat_b_map;
2020 RCP<const Tpetra_CrsGraph> flat_graph, cijk_graph;
2023 cijk_graph, pce_size);
2024 RCP<Flat_Tpetra_CrsMatrix> flat_matrix =
2026 RCP<Tpetra_Vector> x2 = Tpetra::createVector<Scalar>(map);
2028 RCP<Flat_Tpetra_Vector> flat_x =
2030 RCP<Flat_Tpetra_Vector> flat_b =
2032 typedef Tpetra::MultiVector<BaseScalar,LocalOrdinal,GlobalOrdinal,Node> FMV;
2033 typedef Tpetra::Operator<BaseScalar,LocalOrdinal,GlobalOrdinal,Node> FOP;
2034 typedef Belos::LinearProblem<BelosScalar,FMV,FOP> FBLinProb;
2035 RCP< FBLinProb > flat_problem =
2036 rcp(
new FBLinProb(flat_matrix, flat_x, flat_b));
2037 RCP<Belos::SolverManager<BelosScalar,FMV,FOP> > flat_solver =
2038 rcp(
new Belos::PseudoBlockGmresSolMgr<BelosScalar,FMV,FOP>(flat_problem,
2043 flat_problem->setProblem();
2044 Belos::ReturnType flat_ret = flat_solver->solve();
2048 typename ST::magnitudeType btol = 100*tol;
2049 ArrayRCP<Scalar> x_view = x->get1dViewNonConst();
2050 ArrayRCP<Scalar> x2_view = x2->get1dViewNonConst();
2051 for (
size_t i=0; i<num_my_row; ++i) {
2056 Scalar v = x_view[i];
2057 Scalar v2 = x2_view[i];
2059 if (
j < v.size() && ST::magnitude(v.coeff(
j)) < btol)
2060 v.fastAccessCoeff(
j) = BaseScalar(0.0);
2061 if (
j < v2.size() && ST::magnitude(v2.coeff(
j)) < btol)
2062 v2.fastAccessCoeff(
j) = BaseScalar(0.0);
2082 #if defined(HAVE_STOKHOS_AMESOS2)
2099 typedef typename Scalar::cijk_type Cijk;
2102 typedef Tpetra::Map<LocalOrdinal,GlobalOrdinal,Node> Tpetra_Map;
2103 typedef Tpetra::Vector<Scalar,LocalOrdinal,GlobalOrdinal,Node> Tpetra_Vector;
2104 typedef Tpetra::MultiVector<Scalar,LocalOrdinal,GlobalOrdinal,Node> Tpetra_MultiVector;
2105 typedef Tpetra::CrsMatrix<Scalar,LocalOrdinal,GlobalOrdinal,Node> Tpetra_CrsMatrix;
2106 typedef Tpetra::CrsGraph<LocalOrdinal,GlobalOrdinal,Node> Tpetra_CrsGraph;
2109 if ( !Kokkos::is_initialized() )
2110 Kokkos::initialize();
2119 BaseScalar h = 1.0 /
static_cast<BaseScalar
>(nrow-1);
2120 RCP<const Tpetra_Comm> comm = Tpetra::getDefaultComm();
2121 RCP<const Tpetra_Map> map =
2122 Tpetra::createUniformContigMapWithNode<LocalOrdinal,GlobalOrdinal,Node>(
2124 RCP<Tpetra_CrsGraph> graph = Tpetra::createCrsGraph(map,
size_t(3));
2125 Array<GlobalOrdinal> columnIndices(3);
2126 ArrayView<const GlobalOrdinal> myGIDs = map->getLocalElementList();
2127 const size_t num_my_row = myGIDs.size();
2128 for (
size_t i=0; i<num_my_row; ++i) {
2130 if (row == 0 || row == nrow-1) {
2131 columnIndices[0] = row;
2132 graph->insertGlobalIndices(row, columnIndices(0,1));
2135 columnIndices[0] = row-1;
2136 columnIndices[1] = row;
2137 columnIndices[2] = row+1;
2138 graph->insertGlobalIndices(row, columnIndices(0,3));
2141 graph->fillComplete();
2142 RCP<Tpetra_CrsMatrix> matrix =
rcp(
new Tpetra_CrsMatrix(graph));
2145 Array<Scalar> vals(3);
2148 a_val.fastAccessCoeff(
j) =
2149 BaseScalar(1.0) + BaseScalar(1.0) / BaseScalar(
j+1);
2151 for (
size_t i=0; i<num_my_row; ++i) {
2153 if (row == 0 || row == nrow-1) {
2154 columnIndices[0] = row;
2156 matrix->replaceGlobalValues(row, columnIndices(0,1), vals(0,1));
2159 columnIndices[0] = row-1;
2160 columnIndices[1] = row;
2161 columnIndices[2] = row+1;
2162 vals[0] =
Scalar(1.0) * a_val;
2163 vals[1] =
Scalar(-2.0) * a_val;
2164 vals[2] =
Scalar(1.0) * a_val;
2165 matrix->replaceGlobalValues(row, columnIndices(0,3), vals(0,3));
2168 matrix->fillComplete();
2171 RCP<Tpetra_Vector> b = Tpetra::createVector<Scalar>(map);
2173 ArrayRCP<Scalar> b_view = b->get1dViewNonConst();
2176 b_val.fastAccessCoeff(
j) =
2177 BaseScalar(2.0) - BaseScalar(1.0) / BaseScalar(
j+1);
2179 for (
size_t i=0; i<num_my_row; ++i) {
2181 if (row == 0 || row == nrow-1)
2184 b_view[i] = b_val * (h*h);
2189 typedef Amesos2::Solver<Tpetra_CrsMatrix,Tpetra_MultiVector> Solver;
2190 RCP<Tpetra_Vector> x = Tpetra::createVector<Scalar>(map);
2191 std::string solver_name;
2192 #if defined(HAVE_AMESOS2_BASKER)
2193 solver_name =
"basker";
2194 #elif defined(HAVE_AMESOS2_KLU2)
2195 solver_name =
"klu2";
2196 #elif defined(HAVE_AMESOS2_SUPERLUDIST)
2197 solver_name =
"superlu_dist";
2198 #elif defined(HAVE_AMESOS2_SUPERLUMT)
2199 solver_name =
"superlu_mt";
2200 #elif defined(HAVE_AMESOS2_SUPERLU)
2201 solver_name =
"superlu";
2202 #elif defined(HAVE_AMESOS2_PARDISO_MKL)
2203 solver_name =
"pardisomkl";
2204 #elif defined(HAVE_AMESOS2_LAPACK)
2205 solver_name =
"lapack";
2206 #elif defined(HAVE_AMESOS2_CHOLMOD) && defined (HAVE_AMESOS2_EXPERIMENTAL)
2207 solver_name =
"lapack";
2213 out <<
"Solving linear system with " << solver_name << std::endl;
2215 RCP<Solver> solver = Amesos2::create<Tpetra_CrsMatrix,Tpetra_MultiVector>(
2216 solver_name, matrix, x, b);
2223 typedef Tpetra::Vector<BaseScalar,LocalOrdinal,GlobalOrdinal,Node> Flat_Tpetra_Vector;
2224 typedef Tpetra::MultiVector<BaseScalar,LocalOrdinal,GlobalOrdinal,Node> Flat_Tpetra_MultiVector;
2225 typedef Tpetra::CrsMatrix<BaseScalar,LocalOrdinal,GlobalOrdinal,Node> Flat_Tpetra_CrsMatrix;
2226 RCP<const Tpetra_Map> flat_x_map, flat_b_map;
2227 RCP<const Tpetra_CrsGraph> flat_graph, cijk_graph;
2230 cijk_graph, pce_size);
2231 RCP<Flat_Tpetra_CrsMatrix> flat_matrix =
2233 RCP<Tpetra_Vector> x2 = Tpetra::createVector<Scalar>(map);
2235 RCP<Flat_Tpetra_Vector> flat_x =
2237 RCP<Flat_Tpetra_Vector> flat_b =
2239 typedef Amesos2::Solver<Flat_Tpetra_CrsMatrix,Flat_Tpetra_MultiVector> Flat_Solver;
2240 RCP<Flat_Solver> flat_solver =
2241 Amesos2::create<Flat_Tpetra_CrsMatrix,Flat_Tpetra_MultiVector>(
2242 solver_name, flat_matrix, flat_x, flat_b);
2243 flat_solver->solve();
2246 #if KOKKOS_VERSION >= 40799
2247 typedef KokkosKernels::ArithTraits<BaseScalar> ST;
2249 typedef Kokkos::ArithTraits<BaseScalar> ST;
2251 typename ST::mag_type btol = 1e-12;
2252 ArrayRCP<Scalar> x_view = x->get1dViewNonConst();
2253 ArrayRCP<Scalar> x2_view = x2->get1dViewNonConst();
2254 for (
size_t i=0; i<num_my_row; ++i) {
2259 Scalar v = x_view[i];
2260 Scalar v2 = x2_view[i];
2262 if (
j < v.size() && ST::magnitude(v.coeff(
j)) < btol)
2263 v.fastAccessCoeff(
j) = BaseScalar(0.0);
2264 if (
j < v2.size() && ST::magnitude(v2.coeff(
j)) < btol)
2265 v2.fastAccessCoeff(
j) = BaseScalar(0.0);
2284 #define CRSMATRIX_UQ_PCE_TESTS_SLGN(S, LO, GO, N) \
2285 TEUCHOS_UNIT_TEST_TEMPLATE_4_INSTANT(Tpetra_CrsMatrix_PCE, VectorAdd, S, LO, GO, N ) \
2286 TEUCHOS_UNIT_TEST_TEMPLATE_4_INSTANT(Tpetra_CrsMatrix_PCE, VectorDot, S, LO, GO, N ) \
2287 TEUCHOS_UNIT_TEST_TEMPLATE_4_INSTANT(Tpetra_CrsMatrix_PCE, MultiVectorAdd, S, LO, GO, N ) \
2288 TEUCHOS_UNIT_TEST_TEMPLATE_4_INSTANT(Tpetra_CrsMatrix_PCE, MultiVectorDot, S, LO, GO, N ) \
2289 TEUCHOS_UNIT_TEST_TEMPLATE_4_INSTANT(Tpetra_CrsMatrix_PCE, MultiVectorDotSub, S, LO, GO, N ) \
2290 TEUCHOS_UNIT_TEST_TEMPLATE_4_INSTANT(Tpetra_CrsMatrix_PCE, MatrixVectorMultiply, S, LO, GO, N ) \
2291 TEUCHOS_UNIT_TEST_TEMPLATE_4_INSTANT(Tpetra_CrsMatrix_PCE, MatrixMultiVectorMultiply, S, LO, GO, N ) \
2292 TEUCHOS_UNIT_TEST_TEMPLATE_4_INSTANT(Tpetra_CrsMatrix_PCE, Flatten, S, LO, GO, N ) \
2293 TEUCHOS_UNIT_TEST_TEMPLATE_4_INSTANT(Tpetra_CrsMatrix_PCE, SimpleCG, S, LO, GO, N ) \
2294 TEUCHOS_UNIT_TEST_TEMPLATE_4_INSTANT(Tpetra_CrsMatrix_PCE, SimplePCG_Muelu, S, LO, GO, N ) \
2295 TEUCHOS_UNIT_TEST_TEMPLATE_4_INSTANT(Tpetra_CrsMatrix_PCE, BelosGMRES, S, LO, GO, N ) \
2296 TEUCHOS_UNIT_TEST_TEMPLATE_4_INSTANT(Tpetra_CrsMatrix_PCE, BelosGMRES_RILUK, S, LO, GO, N ) \
2297 TEUCHOS_UNIT_TEST_TEMPLATE_4_INSTANT(Tpetra_CrsMatrix_PCE, BelosCG_Muelu, S, LO, GO, N ) \
2298 TEUCHOS_UNIT_TEST_TEMPLATE_4_INSTANT(Tpetra_CrsMatrix_PCE, Amesos2, S, LO, GO, N )
2300 #define CRSMATRIX_UQ_PCE_TESTS_N(N) \
2301 typedef Stokhos::DeviceForNode2<N>::type Device; \
2302 typedef Stokhos::DynamicStorage<int,double,Device::execution_space> DS; \
2303 using default_local_ordinal_type = Tpetra::Map<>::local_ordinal_type; \
2304 using default_global_ordinal_type = Tpetra::Map<>::global_ordinal_type; \
2305 CRSMATRIX_UQ_PCE_TESTS_SLGN(DS, default_local_ordinal_type, default_global_ordinal_type, N)
Teuchos::RCP< Tpetra::CrsMatrix< typename Storage::value_type, LocalOrdinal, GlobalOrdinal, Node > > create_flat_matrix(const Tpetra::CrsMatrix< Sacado::UQ::PCE< Storage >, LocalOrdinal, GlobalOrdinal, Node > &mat, const Teuchos::RCP< const Tpetra::CrsGraph< LocalOrdinal, GlobalOrdinal, Node > > &flat_graph, const Teuchos::RCP< const Tpetra::CrsGraph< LocalOrdinal, GlobalOrdinal, Node > > &cijk_graph, const CijkType &cijk_dev)
Teuchos::RCP< Tpetra::CrsMatrix< Scalar, LO, GO, N > > build_mean_matrix(const Tpetra::CrsMatrix< Scalar, LO, GO, N > &A)
bool CG_Solve(const Matrix &A, Vector &x, const Vector &b, typename Vector::mag_type tol, Ordinal max_its, std::ostream *out=0)
scalar generate_multi_vector_coefficient(const ordinal nFEM, const ordinal nVec, const ordinal nStoch, const ordinal iColFEM, const ordinal iVec, const ordinal iStoch)
TEUCHOS_UNIT_TEST_TEMPLATE_4_DECL(Tpetra_CrsMatrix_MP, VectorAdd, Storage, LocalOrdinal, GlobalOrdinal, Node)
Data structure storing a sparse 3-tensor C(i,j,k) in a a compressed format.
#define TEST_EQUALITY_CONST(v1, v2)
Kokkos::DefaultExecutionSpace execution_space
Teuchos::RCP< const Tpetra::MultiVector< typename Storage::value_type, LocalOrdinal, GlobalOrdinal, Node > > create_flat_vector_view(const Tpetra::MultiVector< Sacado::UQ::PCE< Storage >, LocalOrdinal, GlobalOrdinal, Node > &vec, const Teuchos::RCP< const Tpetra::Map< LocalOrdinal, GlobalOrdinal, Node > > &flat_map)
scalar generate_vector_coefficient(const ordinal nFEM, const ordinal nStoch, const ordinal iColFEM, const ordinal iStoch)
std::enable_if< Kokkos::is_view_uq_pce< Kokkos::View< XD, XP...> >::value &&Kokkos::is_view_uq_pce< Kokkos::View< YD, YP...> >::value, typename Kokkos::Details::InnerProductSpaceTraits< typename Kokkos::View< XD, XP...>::non_const_value_type >::dot_type >::type dot(const Kokkos::View< XD, XP...> &x, const Kokkos::View< YD, YP...> &y)
Stokhos::CrsMatrix< ValueType, Device, Layout >::host_mirror_type create_mirror_view(const Stokhos::CrsMatrix< ValueType, Device, Layout > &A)
Teuchos::RCP< Tpetra::CrsMatrix< typename Scalar::value_type, LO, GO, N > > build_mean_scalar_matrix(const Tpetra::CrsMatrix< Scalar, LO, GO, N > &A)
TEUCHOS_DEPRECATED RCP< T > rcp(T *p, Dealloc_T dealloc, bool owns_mem)
bool PCG_Solve(const Matrix &A, Vector &x, const Vector &b, const Prec &M, typename Vector::mag_type tol, Ordinal max_its, std::ostream *out=0)
void deep_copy(const Stokhos::CrsMatrix< ValueType, DstDevice, Layout > &dst, const Stokhos::CrsMatrix< ValueType, SrcDevice, Layout > &src)
KOKKOS_INLINE_FUNCTION PCE< Storage > abs(const PCE< Storage > &a)
expr1 expr1 expr1 expr2 expr1 expr1 c expr2 expr1 c fastAccessCoeff(j)-expr2.val(j)
void setGlobalCijkTensor(const cijk_type &cijk)
Multivariate orthogonal polynomial basis generated from a total-order complete-polynomial tensor prod...
kokkos_cijk_type build_cijk(ordinal_type stoch_dim, ordinal_type poly_ord)
#define TEST_FLOATING_EQUALITY(v1, v2, tol)
KOKKOS_INLINE_FUNCTION constexpr std::enable_if< is_view_uq_pce< view_type >::value, typename CijkType< view_type >::type >::type cijk(const view_type &view)
Legendre polynomial basis.
scalar generate_matrix_coefficient(const ordinal nFEM, const ordinal nStoch, const ordinal iRowFEM, const ordinal iColFEM, const ordinal iStoch)
Abstract base class for 1-D orthogonal polynomials.
Tpetra::KokkosClassic::DefaultNode::DefaultNodeType Node
Teuchos::RCP< Tpetra::CrsGraph< LocalOrdinal, GlobalOrdinal, Node > > create_flat_pce_graph(const Tpetra::CrsGraph< LocalOrdinal, GlobalOrdinal, Node > &graph, const CijkType &cijk, Teuchos::RCP< const Tpetra::Map< LocalOrdinal, GlobalOrdinal, Node > > &flat_domain_map, Teuchos::RCP< const Tpetra::Map< LocalOrdinal, GlobalOrdinal, Node > > &flat_range_map, Teuchos::RCP< const Tpetra::CrsGraph< LocalOrdinal, GlobalOrdinal, Node > > &cijk_graph, const size_t matrix_pce_size)
#define TEST_EQUALITY(v1, v2)