52 #ifndef AMESOS2_SUPERLUDIST_DEF_HPP 
   53 #define AMESOS2_SUPERLUDIST_DEF_HPP 
   55 #include <Teuchos_Tuple.hpp> 
   56 #include <Teuchos_StandardParameterEntryValidators.hpp> 
   57 #include <Teuchos_DefaultMpiComm.hpp> 
   67   template <
class Matrix, 
class Vector>
 
   69                                           Teuchos::RCP<Vector> X,
 
   70                                           Teuchos::RCP<const Vector> B)
 
   78     , is_contiguous_(true)
 
   83     using Teuchos::MpiComm;
 
   84     using Teuchos::outArg;
 
   85     using Teuchos::ParameterList;
 
   86     using Teuchos::parameterList;
 
   89     using Teuchos::rcp_dynamic_cast;
 
   90     using Teuchos::REDUCE_SUM;
 
   91     using Teuchos::reduceAll;
 
   92     typedef global_ordinal_type GO;
 
   93     typedef Tpetra::Map<local_ordinal_type, GO, node_type> map_type;
 
   99     RCP<const Comm<int> > comm = this->
getComm ();
 
  100     const int myRank = comm->getRank ();
 
  101     const int numProcs = comm->getSize ();
 
  103     SLUD::int_t nprow, npcol;
 
  110       RCP<const Comm<int> > matComm = this->
matrixA_->getComm ();
 
  111       TEUCHOS_TEST_FOR_EXCEPTION(
 
  112         matComm.is_null (), std::logic_error, 
"Amesos2::Superlustdist " 
  113         "constructor: The matrix's communicator is null!");
 
  114       RCP<const MpiComm<int> > matMpiComm =
 
  115         rcp_dynamic_cast<
const MpiComm<int> > (matComm);
 
  120       TEUCHOS_TEST_FOR_EXCEPTION(
 
  121         matMpiComm.is_null (), std::logic_error, 
"Amesos2::Superlustdist " 
  122         "constructor: The matrix's communicator is not an MpiComm!");
 
  123       TEUCHOS_TEST_FOR_EXCEPTION(
 
  124         matMpiComm->getRawMpiComm ().is_null (), std::logic_error, 
"Amesos2::" 
  125         "Superlustdist constructor: The matrix's communicator claims to be a " 
  126         "Teuchos::MpiComm<int>, but its getRawPtrComm() method returns " 
  127         "Teuchos::null!  This means that the underlying MPI_Comm doesn't even " 
  128         "exist, which likely implies that the Teuchos::MpiComm was constructed " 
  129         "incorrectly.  It means something different than if the MPI_Comm were " 
  131       MPI_Comm rawMpiComm = (* (matMpiComm->getRawMpiComm ())) ();
 
  132       data_.mat_comm = rawMpiComm;
 
  138       SLUD::superlu_gridinit(data_.mat_comm, nprow, npcol, &(data_.grid));
 
  147     SLUD::set_default_options_dist(&data_.options);
 
  149     RCP<ParameterList> default_params =
 
  154     data_.options.Fact = SLUD::DOFACT;
 
  155     data_.equed = SLUD::NOEQUIL; 
 
  156     data_.options.SolveInitialized  = SLUD::NO;
 
  157     data_.options.RefineInitialized = SLUD::NO;
 
  158     data_.rowequ = 
false;
 
  159     data_.colequ = 
false;
 
  167     data_.symb_comm = MPI_COMM_NULL;
 
  172     data_.domains = (int) ( pow(2.0, floor(log10((
double)nprow*npcol)/log10(2.0))) );
 
  174     const int color = (myRank < data_.domains) ? 0 : MPI_UNDEFINED;
 
  175     MPI_Comm_split (data_.mat_comm, color, myRank, &(data_.symb_comm));
 
  187     int myProcParticipates = 0;
 
  188     if (myRank < nprow * npcol) {
 
  190       myProcParticipates = 1;
 
  195     int numParticipatingProcs = 0;
 
  196     reduceAll<int, int> (*comm, REDUCE_SUM, myProcParticipates,
 
  197                          outArg (numParticipatingProcs));
 
  198     TEUCHOS_TEST_FOR_EXCEPTION(
 
  200       std::logic_error, 
"Amesos2::Superludist constructor: The matrix has " 
  201       << this->
globalNumRows_ << 
" > 0 global row(s), but no processes in the " 
  202       "communicator want to participate in its factorization!  nprow = " 
  203       << nprow << 
" and npcol = " << npcol << 
".");
 
  206     size_t myNumRows = 0;
 
  209       const GO quotient = (numParticipatingProcs == 0) ? static_cast<GO> (0) :
 
  210         GNR / 
static_cast<GO
> (numParticipatingProcs);
 
  212         GNR - quotient * 
static_cast<GO
> (numParticipatingProcs);
 
  213       const GO lclNumRows = (
static_cast<GO
> (myRank) < remainder) ?
 
  214         (quotient + 
static_cast<GO
> (1)) : quotient;
 
  215       myNumRows = 
static_cast<size_t> (lclNumRows);
 
  219     const GO indexBase = this->
matrixA_->getRowMap ()->getIndexBase ();
 
  221       rcp (
new map_type (this->
globalNumRows_, myNumRows, indexBase, comm));
 
  227     data_.A.Store = NULL;
 
  229     SLUD::PStatInit(&(data_.stat));
 
  232     data_.scale_perm.perm_r = data_.perm_r.getRawPtr();
 
  233     data_.scale_perm.perm_c = data_.perm_c.getRawPtr();
 
  237   template <
class Matrix, 
class Vector>
 
  249     if ( this->status_.getNumPreOrder() > 0 ){
 
  251 #if defined(AMESOS2_ENABLES_SUPERLUDIST_VERSION5_AND_HIGHER) 
  252       SUPERLU_FREE( data_.sizes );
 
  253       SUPERLU_FREE( data_.fstVtxSep );
 
  256       free( data_.fstVtxSep );
 
  262     if( data_.A.Store != NULL ){
 
  263       SLUD::Destroy_SuperMatrix_Store_dist( &(data_.A) );
 
  267     if ( this->status_.getNumNumericFact() > 0 ){
 
  268       function_map::Destroy_LU(this->globalNumRows_, &(data_.grid), &(data_.lu));
 
  270     function_map::LUstructFree(&(data_.lu));
 
  276     if ( this->status_.symbolicFactorizationDone() &&
 
  277          !this->status_.numericFactorizationDone() ){
 
  278       if ( data_.pslu_freeable.xlsub != NULL ){
 
  279 #if defined(AMESOS2_ENABLES_SUPERLUDIST_VERSION5_AND_HIGHER) 
  280         SUPERLU_FREE( data_.pslu_freeable.xlsub );
 
  281         SUPERLU_FREE( data_.pslu_freeable.lsub );
 
  283         free( data_.pslu_freeable.xlsub );
 
  284         free( data_.pslu_freeable.lsub );
 
  287       if ( data_.pslu_freeable.xusub != NULL ){
 
  288 #if defined(AMESOS2_ENABLES_SUPERLUDIST_VERSION5_AND_HIGHER) 
  289         SUPERLU_FREE( data_.pslu_freeable.xusub );
 
  290         SUPERLU_FREE( data_.pslu_freeable.usub );
 
  292         free( data_.pslu_freeable.xusub );
 
  293         free( data_.pslu_freeable.usub );
 
  296       if ( data_.pslu_freeable.supno_loc != NULL ){
 
  297 #if defined(AMESOS2_ENABLES_SUPERLUDIST_VERSION5_AND_HIGHER) 
  298         SUPERLU_FREE( data_.pslu_freeable.supno_loc );
 
  299         SUPERLU_FREE( data_.pslu_freeable.xsup_beg_loc );
 
  300         SUPERLU_FREE( data_.pslu_freeable.xsup_end_loc );
 
  302         free( data_.pslu_freeable.supno_loc );
 
  303         free( data_.pslu_freeable.xsup_beg_loc );
 
  304         free( data_.pslu_freeable.xsup_end_loc );
 
  307 #if defined(AMESOS2_ENABLES_SUPERLUDIST_VERSION5_AND_HIGHER) 
  308       SUPERLU_FREE( data_.pslu_freeable.globToLoc );
 
  310       free( data_.pslu_freeable.globToLoc );
 
  314     SLUD::PStatFree( &(data_.stat) ) ;
 
  319     if ( data_.options.SolveInitialized == SLUD::YES )
 
  320       function_map::SolveFinalize(&(data_.options), &(data_.solve_struct));
 
  322     SLUD::superlu_gridexit(&(data_.grid)); 
 
  326     if ( data_.symb_comm != MPI_COMM_NULL ) MPI_Comm_free(&(data_.symb_comm));
 
  329   template<
class Matrix, 
class Vector>
 
  338     SLUD::int_t slu_rows_ub = Teuchos::as<SLUD::int_t>(this->globalNumRows_);
 
  339     for( SLUD::int_t i = 0; i < slu_rows_ub; ++i ) data_.perm_r[i] = i;
 
  349       if( this->status_.getNumPreOrder() > 0 ){
 
  350 #if defined(AMESOS2_ENABLES_SUPERLUDIST_VERSION5_AND_HIGHER) 
  351         SUPERLU_FREE( data_.sizes );
 
  352         SUPERLU_FREE( data_.fstVtxSep );
 
  355         free( data_.fstVtxSep );
 
  358 #ifdef HAVE_AMESOS2_TIMERS 
  359       Teuchos::TimeMonitor preOrderTime( this->timers_.preOrderTime_ );
 
  363       info = SLUD::get_perm_c_parmetis( &(data_.A),
 
  364                                         data_.perm_r.getRawPtr(), data_.perm_c.getRawPtr(),
 
  365                                         data_.grid.nprow * data_.grid.npcol, data_.domains,
 
  366                                         &(data_.sizes), &(data_.fstVtxSep),
 
  367                                         &(data_.grid), &(data_.symb_comm) );
 
  369       TEUCHOS_TEST_FOR_EXCEPTION( info > 0.0,
 
  371                           "SuperLU_DIST pre-ordering ran out of memory after allocating " 
  372                           << info << 
" bytes of memory" );
 
  384   template <
class Matrix, 
class Vector>
 
  392 #ifdef HAVE_AMESOS2_TIMERS 
  393       Teuchos::TimeMonitor symFactTime( this->timers_.symFactTime_ );
 
  397       info = SLUD::symbfact_dist((data_.grid.nprow) * (data_.grid.npcol),
 
  398                                  data_.domains, &(data_.A), data_.perm_c.getRawPtr(),
 
  399                                  data_.perm_r.getRawPtr(), data_.sizes,
 
  400                                  data_.fstVtxSep, &(data_.pslu_freeable),
 
  401                                  &(data_.grid.comm), &(data_.symb_comm),
 
  404       TEUCHOS_TEST_FOR_EXCEPTION( info > 0.0,
 
  406                           "SuperLU_DIST symbolic factorization ran out of memory after" 
  407                           " allocating " << info << 
" bytes of memory" );
 
  409     same_symbolic_ = 
false;
 
  410     same_solve_struct_ = 
false;
 
  416   template <
class Matrix, 
class Vector>
 
  435       size_t nnz_loc = ((SLUD::NRformat_loc*)data_.A.Store)->nnz_loc;
 
  436       for( 
size_t i = 0; i < nnz_loc; ++i ) colind_[i] = data_.perm_c[colind_[i]];
 
  439       if( same_symbolic_ ){
 
  444         function_map::pdistribute(SLUD::SamePattern_SameRowPerm,
 
  445                                   as<SLUD::int_t>(this->globalNumRows_), 
 
  446                                   &(data_.A), &(data_.scale_perm),
 
  447                                   &(data_.glu_freeable), &(data_.lu),
 
  450         function_map::dist_psymbtonum(SLUD::DOFACT,
 
  451                                       as<SLUD::int_t>(this->globalNumRows_), 
 
  452                                       &(data_.A), &(data_.scale_perm),
 
  453                                       &(data_.pslu_freeable), &(data_.lu),
 
  458       double anorm = function_map::plangs((
char *)
"I", &(data_.A), &(data_.grid));
 
  462 #ifdef HAVE_AMESOS2_TIMERS 
  463         Teuchos::TimeMonitor numFactTimer(this->timers_.numFactTime_);
 
  466         function_map::gstrf(&(data_.options), this->globalNumRows_,
 
  467                             this->globalNumCols_, anorm, &(data_.lu),
 
  468                             &(data_.grid), &(data_.stat), &info);
 
  472       TEUCHOS_TEST_FOR_EXCEPTION( info > 0,
 
  474                           "L and U factors have been computed but U(" 
  475                           << info << 
"," << info << 
") is exactly zero " 
  476                           "(i.e. U is singular)");
 
  483     data_.options.Fact = SLUD::FACTORED;
 
  484     same_symbolic_ = 
true;
 
  490   template <
class Matrix, 
class Vector>
 
  499     const size_t local_len_rhs = superlu_rowmap_->getNodeNumElements();
 
  500     const global_size_type nrhs = X->getGlobalNumVectors();
 
  501     const global_ordinal_type first_global_row_b = superlu_rowmap_->getMinGlobalIndex();
 
  504     bvals_.resize(nrhs * local_len_rhs);
 
  505     xvals_.resize(nrhs * local_len_rhs);
 
  511 #ifdef HAVE_AMESOS2_TIMERS 
  512       Teuchos::TimeMonitor convTimer(this->timers_.vecConvTime_);
 
  522 #ifdef HAVE_AMESOS2_TIMERS 
  523         Teuchos::TimeMonitor redistTimer(this->timers_.vecRedistTime_);
 
  529         copy_helper::do_get(B,
 
  532                             Teuchos::ptrInArg(*superlu_rowmap_));
 
  553       if( !same_solve_struct_ ){
 
  554         if( data_.options.SolveInitialized == SLUD::YES ){
 
  555           function_map::SolveFinalize(&(data_.options), &(data_.solve_struct));
 
  557         function_map::SolveInit(&(data_.options), &(data_.A), data_.perm_r.getRawPtr(),
 
  558                                 data_.perm_c.getRawPtr(), as<SLUD::int_t>(nrhs), &(data_.lu),
 
  559                                 &(data_.grid), &(data_.solve_struct));
 
  563         same_solve_struct_ = 
true;
 
  568 #ifdef HAVE_AMESOS2_TIMERS 
  569         Teuchos::TimeMonitor solveTimer(this->timers_.solveTime_);
 
  572         function_map::gstrs(as<SLUD::int_t>(this->globalNumRows_), &(data_.lu),
 
  573                             &(data_.scale_perm), &(data_.grid), bvals_.getRawPtr(),
 
  574                             as<SLUD::int_t>(local_len_rhs), as<SLUD::int_t>(first_global_row_b),
 
  575                             as<SLUD::int_t>(local_len_rhs), as<int>(nrhs),
 
  576                             &(data_.solve_struct), &(data_.stat), &ierr);
 
  579       TEUCHOS_TEST_FOR_EXCEPTION( ierr < 0,
 
  581                           "Argument " << -ierr << 
" to gstrs had an illegal value" );
 
  596 #ifdef HAVE_AMESOS2_TIMERS 
  597         Teuchos::TimeMonitor redistTimer(this->timers_.vecRedistTime_);
 
  599         SLUD::int_t ld = as<SLUD::int_t>(local_len_rhs);
 
  600         function_map::permute_Dense_Matrix(as<SLUD::int_t>(first_global_row_b),
 
  601                                            as<SLUD::int_t>(local_len_rhs),
 
  602                                            data_.solve_struct.row_to_proc,
 
  603                                            data_.solve_struct.inv_perm_c,
 
  604                                            bvals_.getRawPtr(), ld,
 
  605                                            xvals_.getRawPtr(), ld,
 
  613 #ifdef HAVE_AMESOS2_TIMERS 
  614       Teuchos::TimeMonitor redistTimer(this->timers_.vecRedistTime_);
 
  618       put_helper::do_put(X,
 
  621                          Teuchos::ptrInArg(*superlu_rowmap_));
 
  628   template <
class Matrix, 
class Vector>
 
  633     return( this->globalNumRows_ == this->globalNumCols_ );
 
  637   template <
class Matrix, 
class Vector>
 
  643     using Teuchos::getIntegralValue;
 
  644     using Teuchos::ParameterEntryValidator;
 
  646     RCP<const Teuchos::ParameterList> valid_params = getValidParameters_impl();
 
  648     if( parameterList->isParameter(
"npcol") || parameterList->isParameter(
"nprow") ){
 
  649       TEUCHOS_TEST_FOR_EXCEPTION( !(parameterList->isParameter(
"nprow") &&
 
  650                             parameterList->isParameter(
"npcol")),
 
  651                           std::invalid_argument,
 
  652                           "nprow and npcol must be set together" );
 
  654       SLUD::int_t nprow = parameterList->template get<SLUD::int_t>(
"nprow");
 
  655       SLUD::int_t npcol = parameterList->template get<SLUD::int_t>(
"npcol");
 
  657       TEUCHOS_TEST_FOR_EXCEPTION( nprow * npcol > this->getComm()->getSize(),
 
  658                           std::invalid_argument,
 
  659                           "nprow and npcol combination invalid" );
 
  661       if( (npcol != data_.grid.npcol) || (nprow != data_.grid.nprow) ){
 
  663         SLUD::superlu_gridexit(&(data_.grid));
 
  665         SLUD::superlu_gridinit(data_.mat_comm, nprow, npcol, &(data_.grid));
 
  669     TEUCHOS_TEST_FOR_EXCEPTION( this->control_.useTranspose_,
 
  670                         std::invalid_argument,
 
  671                         "SuperLU_DIST does not support solving the tranpose system" );
 
  673     data_.options.Trans = SLUD::NOTRANS; 
 
  678     data_.options.Equil = SLUD::NO;
 
  680     if( parameterList->isParameter(
"ColPerm") ){
 
  681       RCP<const ParameterEntryValidator> colperm_validator = valid_params->getEntry(
"ColPerm").validator();
 
  682       parameterList->getEntry(
"ColPerm").setValidator(colperm_validator);
 
  684       data_.options.ColPerm = getIntegralValue<SLUD::colperm_t>(*parameterList, 
"ColPerm");
 
  691     data_.options.RowPerm = SLUD::NOROWPERM;
 
  700     data_.options.IterRefine = SLUD::NOREFINE;
 
  702     bool replace_tiny = parameterList->get<
bool>(
"ReplaceTinyPivot", 
true);
 
  703     data_.options.ReplaceTinyPivot = replace_tiny ? SLUD::YES : SLUD::NO;
 
  705     if( parameterList->isParameter(
"IsContiguous") ){
 
  706       is_contiguous_ = parameterList->get<
bool>(
"IsContiguous");
 
  711   template <
class Matrix, 
class Vector>
 
  712   Teuchos::RCP<const Teuchos::ParameterList>
 
  716     using Teuchos::tuple;
 
  717     using Teuchos::ParameterList;
 
  718     using Teuchos::EnhancedNumberValidator;
 
  719     using Teuchos::setStringToIntegralParameter;
 
  720     using Teuchos::stringToIntegralParameterEntryValidator;
 
  722     static Teuchos::RCP<const Teuchos::ParameterList> valid_params;
 
  724     if( is_null(valid_params) ){
 
  725       Teuchos::RCP<Teuchos::ParameterList> pl = Teuchos::parameterList();
 
  727       Teuchos::RCP<EnhancedNumberValidator<SLUD::int_t> > col_row_validator
 
  728         = Teuchos::rcp( 
new EnhancedNumberValidator<SLUD::int_t>() );
 
  729       col_row_validator->setMin(1);
 
  731       pl->set(
"npcol", data_.grid.npcol,
 
  732               "Number of columns in the processor grid. " 
  733               "Must be set with nprow", col_row_validator);
 
  734       pl->set(
"nprow", data_.grid.nprow,
 
  735               "Number of rows in the SuperLU_DIST processor grid. " 
  736               "Must be set together with npcol", col_row_validator);
 
  739       setStringToIntegralParameter<SLUD::trans_t>(
"Trans", 
"NOTRANS",
 
  740                                                   "Solve for the transpose system or not",
 
  741                                                   tuple<string>(
"NOTRANS"),
 
  742                                                   tuple<string>(
"Do not solve with transpose"),
 
  743                                                   tuple<SLUD::trans_t>(SLUD::NOTRANS),
 
  759       pl->set(
"ReplaceTinyPivot", 
true,
 
  760               "Specifies whether to replace tiny diagonals during LU factorization");
 
  762       setStringToIntegralParameter<SLUD::colperm_t>(
"ColPerm", 
"PARMETIS",
 
  763                                                     "Specifies how to permute the columns of the " 
  764                                                     "matrix for sparsity preservation",
 
  765                                                     tuple<string>(
"NATURAL", 
"PARMETIS"),
 
  766                                                     tuple<string>(
"Natural ordering",
 
  767                                                                   "ParMETIS ordering on A^T + A"),
 
  768                                                     tuple<SLUD::colperm_t>(SLUD::NATURAL,
 
  772       pl->set(
"IsContiguous", 
true, 
"Whether GIDs contiguous");
 
  781   template <
class Matrix, 
class Vector>
 
  785                                                     SLUD::int_t& npcol)
 const {
 
  786     TEUCHOS_TEST_FOR_EXCEPTION( nprocs < 1,
 
  787                         std::invalid_argument,
 
  788                         "Number of MPI processes must be at least 1" );
 
  789     SLUD::int_t c, r = 1;
 
  790     while( r*r <= nprocs ) r++;
 
  793     while( (r--)*c != nprocs ){
 
  799     if( r > 1 || nprocs < 9){   
 
  806   template <
class Matrix, 
class Vector>
 
  810     using Teuchos::Array;
 
  811     using Teuchos::ArrayView;
 
  812     using Teuchos::ptrInArg;
 
  817 #ifdef HAVE_AMESOS2_TIMERS 
  818     Teuchos::TimeMonitor convTimer(this->timers_.mtxConvTime_);
 
  822     if( data_.A.Store != NULL ){
 
  823       SLUD::Destroy_SuperMatrix_Store_dist( &(data_.A) );
 
  824       data_.A.Store = NULL;
 
  827     Teuchos::RCP<const MatrixAdapter<Matrix> > redist_mat
 
  828       = this->matrixA_->get(ptrInArg(*superlu_rowmap_));
 
  830     int_t l_nnz, l_rows, g_rows, g_cols, fst_global_row;
 
  831     l_nnz  = as<int_t>(redist_mat->getLocalNNZ());
 
  832     l_rows = as<int_t>(redist_mat->getLocalNumRows());
 
  833     g_rows = as<int_t>(redist_mat->getGlobalNumRows());
 
  835     fst_global_row = as<int_t>(superlu_rowmap_->getMinGlobalIndex());
 
  837     nzvals_.resize(l_nnz);
 
  838     colind_.resize(l_nnz);
 
  839     rowptr_.resize(l_rows + 1);
 
  843 #ifdef HAVE_AMESOS2_TIMERS 
  844       Teuchos::TimeMonitor mtxRedistTimer( this->timers_.mtxRedistTime_ );
 
  849         slu_type, int_t, int_t >::do_get(redist_mat.ptr(),
 
  850                                          nzvals_(), colind_(), rowptr_(),
 
  852                                          ptrInArg(*superlu_rowmap_),
 
  857     TEUCHOS_TEST_FOR_EXCEPTION( nnz_ret != l_nnz,
 
  859                         "Did not get the expected number of non-zero vals");
 
  862   SLUD::Dtype_t dtype = type_map::dtype;
 
  865     function_map::create_CompRowLoc_Matrix(&(data_.A),
 
  867                                            l_nnz, l_rows, fst_global_row,
 
  872                                            dtype, SLUD::SLU_GE);
 
  879   template<
class Matrix, 
class Vector>
 
  885 #endif  // AMESOS2_SUPERLUDIST_DEF_HPP 
Amesos2::SolverCore: A templated interface for interaction with third-party direct sparse solvers...
Definition: Amesos2_SolverCore_decl.hpp:105
Amesos2 interface to the distributed memory version of SuperLU. 
Definition: Amesos2_Superludist_decl.hpp:90
EPhase
Used to indicate a phase in the direct solution. 
Definition: Amesos2_TypeDecl.hpp:65
Similar to get_ccs_helper , but used to get a CRS representation of the given matrix. 
Definition: Amesos2_Util.hpp:665
global_size_type globalNumCols_
Number of global columns in matrixA_. 
Definition: Amesos2_SolverCore_decl.hpp:478
Superludist(Teuchos::RCP< const Matrix > A, Teuchos::RCP< Vector > X, Teuchos::RCP< const Vector > B)
Initialize from Teuchos::RCP. 
Definition: Amesos2_Superludist_def.hpp:68
void setParameters_impl(const Teuchos::RCP< Teuchos::ParameterList > ¶meterList)
Definition: Amesos2_Superludist_def.hpp:639
global_size_type globalNumRows_
Number of global rows in matrixA_. 
Definition: Amesos2_SolverCore_decl.hpp:475
Helper class for getting 1-D copies of multivectors. 
Definition: Amesos2_MultiVecAdapter_decl.hpp:266
Utility functions for Amesos2. 
Teuchos::RCP< const Teuchos::ParameterList > getValidParameters_impl() const 
Definition: Amesos2_Superludist_def.hpp:713
Teuchos::RCP< const Teuchos::ParameterList > getValidParameters() const 
Return a const parameter list of all of the valid parameters that this->setParameterList(...) will accept. 
Definition: Amesos2_SolverCore_def.hpp:314
Provides definition of SuperLU_DIST types as well as conversions and type traits. ...
int preOrdering_impl()
Performs pre-ordering on the matrix to increase efficiency. 
Definition: Amesos2_Superludist_def.hpp:331
Teuchos::RCP< const Teuchos::Comm< int > > getComm() const 
Returns a pointer to the Teuchos::Comm communicator with this operator. 
Definition: Amesos2_SolverCore_decl.hpp:362
A Matrix adapter interface for Amesos2. 
Definition: Amesos2_MatrixAdapter_decl.hpp:76
bool matrixShapeOK_impl() const 
Determines whether the shape of the matrix is OK for this solver. 
Definition: Amesos2_Superludist_def.hpp:630
Teuchos::RCP< const Tpetra::Map< local_ordinal_type, global_ordinal_type, node_type > > superlu_rowmap_
Maps rows of the matrix to processors in the SuperLU_DIST processor grid. 
Definition: Amesos2_Superludist_decl.hpp:327
~Superludist()
Destructor. 
Definition: Amesos2_Superludist_def.hpp:238
super_type & setParameters(const Teuchos::RCP< Teuchos::ParameterList > ¶meterList)
Set/update internal variables and solver options. 
Definition: Amesos2_SolverCore_def.hpp:282
int symbolicFactorization_impl()
Perform symbolic factorization of the matrix using SuperLU_DIST. 
Definition: Amesos2_Superludist_def.hpp:386
void get_default_grid_size(int nprocs, SLUD::int_t &nprow, SLUD::int_t &npcol) const 
Definition: Amesos2_Superludist_def.hpp:783
bool in_grid_
true if this processor is in SuperLU_DISTS's 2D process grid 
Definition: Amesos2_Superludist_decl.hpp:320
Helper class for putting 1-D data arrays into multivectors. 
Definition: Amesos2_MultiVecAdapter_decl.hpp:322
int solve_impl(const Teuchos::Ptr< MultiVecAdapter< Vector > > X, const Teuchos::Ptr< const MultiVecAdapter< Vector > > B) const 
SuperLU_DIST specific solve. 
Definition: Amesos2_Superludist_def.hpp:492
A templated MultiVector class adapter for Amesos2. 
Definition: Amesos2_MultiVecAdapter_decl.hpp:176
bool loadA_impl(EPhase current_phase)
Reads matrix data into internal solver structures. 
Definition: Amesos2_Superludist_def.hpp:808
Teuchos::RCP< const MatrixAdapter< Matrix > > matrixA_
The LHS operator. 
Definition: Amesos2_SolverCore_decl.hpp:454
int numericFactorization_impl()
SuperLU_DIST specific numeric factorization. 
Definition: Amesos2_Superludist_def.hpp:418