53 #ifndef AMESOS2_SUPERLU_DEF_HPP 
   54 #define AMESOS2_SUPERLU_DEF_HPP 
   56 #include <Teuchos_Tuple.hpp> 
   57 #include <Teuchos_ParameterList.hpp> 
   58 #include <Teuchos_StandardParameterEntryValidators.hpp> 
   66 template <
class Matrix, 
class Vector>
 
   68   Teuchos::RCP<const Matrix> A,
 
   69   Teuchos::RCP<Vector>       X,
 
   70   Teuchos::RCP<const Vector> B )
 
   75   , is_contiguous_(true)
 
   82   SLU::set_default_options(&(data_.options));
 
   84   data_.options.PrintStat = SLU::NO;
 
   86   SLU::StatInit(&(data_.stat));
 
   94   data_.relax = SLU::sp_ienv(2); 
 
   95   data_.panel_size = SLU::sp_ienv(1); 
 
  100   data_.U.Store = NULL;
 
  101   data_.X.Store = NULL;
 
  102   data_.B.Store = NULL;
 
  108 template <
class Matrix, 
class Vector>
 
  116   SLU::StatFree( &(data_.stat) ) ;
 
  119   if ( data_.A.Store != NULL ){
 
  120     SLU::Destroy_SuperMatrix_Store( &(data_.A) );
 
  124   if ( data_.L.Store != NULL ){ 
 
  125     SLU::Destroy_SuperNode_Matrix( &(data_.L) );
 
  126     SLU::Destroy_CompCol_Matrix( &(data_.U) );
 
  130 template <
class Matrix, 
class Vector>
 
  134   std::ostringstream oss;
 
  135   oss << 
"SuperLU solver interface";
 
  137     oss << 
", \"ILUTP\" : {";
 
  138     oss << 
"drop tol = " << data_.options.ILU_DropTol;
 
  139     oss << 
", fill factor = " << data_.options.ILU_FillFactor;
 
  140     oss << 
", fill tol = " << data_.options.ILU_FillTol;
 
  141     switch(data_.options.ILU_MILU) {
 
  153          oss << 
", regular ILU";
 
  155     switch(data_.options.ILU_Norm) {
 
  164          oss << 
", infinity-norm";
 
  168     oss << 
", direct solve";
 
  184 template<
class Matrix, 
class Vector>
 
  196   int permc_spec = data_.options.ColPerm;
 
  197   if ( permc_spec != SLU::MY_PERMC && this->root_ ){
 
  198 #ifdef HAVE_AMESOS2_TIMERS 
  199     Teuchos::TimeMonitor preOrderTimer(this->timers_.preOrderTime_);
 
  202     SLU::get_perm_c(permc_spec, &(data_.A), data_.perm_c.getRawPtr());
 
  209 template <
class Matrix, 
class Vector>
 
  224   same_symbolic_ = 
false;
 
  225   data_.options.Fact = SLU::DOFACT;
 
  231 template <
class Matrix, 
class Vector>
 
  240   if ( !same_symbolic_ && data_.L.Store != NULL ){
 
  241     SLU::Destroy_SuperNode_Matrix( &(data_.L) );
 
  242     SLU::Destroy_CompCol_Matrix( &(data_.U) );
 
  243     data_.L.Store = NULL;
 
  244     data_.U.Store = NULL;
 
  247   if( same_symbolic_ ) data_.options.Fact = SLU::SamePattern_SameRowPerm;
 
  252 #ifdef HAVE_AMESOS2_DEBUG 
  253     TEUCHOS_TEST_FOR_EXCEPTION( data_.A.ncol != as<int>(this->globalNumCols_),
 
  255                         "Error in converting to SuperLU SuperMatrix: wrong number of global columns." );
 
  256     TEUCHOS_TEST_FOR_EXCEPTION( data_.A.nrow != as<int>(this->globalNumRows_),
 
  258                         "Error in converting to SuperLU SuperMatrix: wrong number of global rows." );
 
  261     if( data_.options.Equil == SLU::YES ){
 
  262       magnitude_type rowcnd, colcnd, amax;
 
  266       function_map::gsequ(&(data_.A), data_.R.getRawPtr(),
 
  267                           data_.C.getRawPtr(), &rowcnd, &colcnd,
 
  269       TEUCHOS_TEST_FOR_EXCEPTION
 
  270         (info2 < 0, std::runtime_error,
 
  271          "SuperLU's gsequ function returned with status " << info2 << 
" < 0." 
  272          "  This means that argument " << (-info2) << 
" given to the function" 
  273          " had an illegal value.");
 
  275         if (info2 <= data_.A.nrow) {
 
  276           TEUCHOS_TEST_FOR_EXCEPTION
 
  277             (
true, std::runtime_error, 
"SuperLU's gsequ function returned with " 
  278              "info = " << info2 << 
" > 0, and info <= A.nrow = " << data_.A.nrow
 
  279              << 
".  This means that row " << info2 << 
" of A is exactly zero.");
 
  281         else if (info2 > data_.A.ncol) {
 
  282           TEUCHOS_TEST_FOR_EXCEPTION
 
  283             (
true, std::runtime_error, 
"SuperLU's gsequ function returned with " 
  284              "info = " << info2 << 
" > 0, and info > A.ncol = " << data_.A.ncol
 
  285              << 
".  This means that column " << (info2 - data_.A.nrow) << 
" of " 
  286              "A is exactly zero.");
 
  289           TEUCHOS_TEST_FOR_EXCEPTION
 
  290             (
true, std::runtime_error, 
"SuperLU's gsequ function returned " 
  291              "with info = " << info2 << 
" > 0, but its value is not in the " 
  292              "range permitted by the documentation.  This should never happen " 
  293              "(it appears to be SuperLU's fault).");
 
  298       function_map::laqgs(&(data_.A), data_.R.getRawPtr(),
 
  299                           data_.C.getRawPtr(), rowcnd, colcnd,
 
  300                           amax, &(data_.equed));
 
  309     SLU::sp_preorder(&(data_.options), &(data_.A), data_.perm_c.getRawPtr(),
 
  310                      data_.etree.getRawPtr(), &(data_.AC));
 
  313 #ifdef HAVE_AMESOS2_TIMERS 
  314       Teuchos::TimeMonitor numFactTimer(this->timers_.numFactTime_);
 
  317 #ifdef HAVE_AMESOS2_VERBOSE_DEBUG 
  318       std::cout << 
"Superlu:: Before numeric factorization" << std::endl;
 
  319       std::cout << 
"nzvals_ : " << nzvals_.toString() << std::endl;
 
  320       std::cout << 
"rowind_ : " << rowind_.toString() << std::endl;
 
  321       std::cout << 
"colptr_ : " << colptr_.toString() << std::endl;
 
  324       if(ILU_Flag_==
false) {
 
  325         function_map::gstrf(&(data_.options), &(data_.AC),
 
  326             data_.relax, data_.panel_size, data_.etree.getRawPtr(),
 
  327             NULL, 0, data_.perm_c.getRawPtr(), data_.perm_r.getRawPtr(),
 
  328             &(data_.L), &(data_.U), 
 
  329 #ifdef HAVE_AMESOS2_SUPERLU5_API 
  332             &(data_.stat), &info);
 
  335         function_map::gsitrf(&(data_.options), &(data_.AC),
 
  336             data_.relax, data_.panel_size, data_.etree.getRawPtr(),
 
  337             NULL, 0, data_.perm_c.getRawPtr(), data_.perm_r.getRawPtr(),
 
  338             &(data_.L), &(data_.U), 
 
  339 #ifdef HAVE_AMESOS2_SUPERLU5_API 
  342             &(data_.stat), &info);
 
  347     SLU::Destroy_CompCol_Permuted( &(data_.AC) );
 
  350     this->setNnzLU( as<size_t>(((SLU::SCformat*)data_.L.Store)->nnz +
 
  351                                ((SLU::NCformat*)data_.U.Store)->nnz) );
 
  355   Teuchos::broadcast(*(this->matrixA_->getComm()), 0, &info);
 
  357   global_size_type info_st = as<global_size_type>(info);
 
  358   TEUCHOS_TEST_FOR_EXCEPTION( (info_st > 0) && (info_st <= this->globalNumCols_),
 
  360     "Factorization complete, but matrix is singular. Division by zero eminent");
 
  361   TEUCHOS_TEST_FOR_EXCEPTION( (info_st > 0) && (info_st > this->globalNumCols_),
 
  363     "Memory allocation failure in Superlu factorization");
 
  365   data_.options.Fact = SLU::FACTORED;
 
  366   same_symbolic_ = 
true;
 
  372 template <
class Matrix, 
class Vector>
 
  379   const global_size_type ld_rhs = this->root_ ? X->getGlobalLength() : 0;
 
  380   const size_t nrhs = X->getGlobalNumVectors();
 
  382   const size_t val_store_size = as<size_t>(ld_rhs * nrhs);
 
  383   Teuchos::Array<slu_type> xValues(val_store_size);
 
  384   Teuchos::Array<slu_type> bValues(val_store_size);
 
  387 #ifdef HAVE_AMESOS2_TIMERS 
  388     Teuchos::TimeMonitor mvConvTimer(this->timers_.vecConvTime_);
 
  389     Teuchos::TimeMonitor redistTimer( this->timers_.vecRedistTime_ );
 
  391     if ( is_contiguous_ == 
true ) {
 
  393         slu_type>::do_get(B, bValues(),
 
  395             ROOTED, this->rowIndexBase_);
 
  399         slu_type>::do_get(B, bValues(),
 
  401             CONTIGUOUS_AND_ROOTED, this->rowIndexBase_);
 
  407   magnitude_type rpg, rcond;
 
  409     data_.ferr.resize(nrhs);
 
  410     data_.berr.resize(nrhs);
 
  413 #ifdef HAVE_AMESOS2_TIMERS 
  414       Teuchos::TimeMonitor mvConvTimer(this->timers_.vecConvTime_);
 
  416       SLU::Dtype_t dtype = type_map::dtype;
 
  417       int i_ld_rhs = as<int>(ld_rhs);
 
  418       function_map::create_Dense_Matrix(&(data_.B), i_ld_rhs, as<int>(nrhs),
 
  419                                         bValues.getRawPtr(), i_ld_rhs,
 
  420                                         SLU::SLU_DN, dtype, SLU::SLU_GE);
 
  421       function_map::create_Dense_Matrix(&(data_.X), i_ld_rhs, as<int>(nrhs),
 
  422                                         xValues.getRawPtr(), i_ld_rhs,
 
  423                                         SLU::SLU_DN, dtype, SLU::SLU_GE);
 
  430 #ifdef HAVE_AMESOS2_TIMERS 
  431     Teuchos::TimeMonitor solveTimer(this->timers_.solveTime_);
 
  434     if(ILU_Flag_==
false) {
 
  435       function_map::gssvx(&(data_.options), &(data_.A),
 
  436           data_.perm_c.getRawPtr(), data_.perm_r.getRawPtr(),
 
  437           data_.etree.getRawPtr(), &(data_.equed), data_.R.getRawPtr(),
 
  438           data_.C.getRawPtr(), &(data_.L), &(data_.U), NULL, 0, &(data_.B),
 
  439           &(data_.X), &rpg, &rcond, data_.ferr.getRawPtr(),
 
  440           data_.berr.getRawPtr(), 
 
  441 #ifdef HAVE_AMESOS2_SUPERLU5_API 
  444           &(data_.mem_usage), &(data_.stat), &ierr);
 
  447       function_map::gsisx(&(data_.options), &(data_.A),
 
  448           data_.perm_c.getRawPtr(), data_.perm_r.getRawPtr(),
 
  449           data_.etree.getRawPtr(), &(data_.equed), data_.R.getRawPtr(),
 
  450           data_.C.getRawPtr(), &(data_.L), &(data_.U), NULL, 0, &(data_.B),
 
  451           &(data_.X), &rpg, &rcond, 
 
  452 #ifdef HAVE_AMESOS2_SUPERLU5_API 
  455           &(data_.mem_usage), &(data_.stat), &ierr);
 
  461     SLU::Destroy_SuperMatrix_Store( &(data_.X) );
 
  462     SLU::Destroy_SuperMatrix_Store( &(data_.B) );
 
  463     data_.X.Store = NULL;
 
  464     data_.B.Store = NULL;
 
  468   Teuchos::broadcast(*(this->getComm()), 0, &ierr);
 
  470   global_size_type ierr_st = as<global_size_type>(ierr);
 
  471   TEUCHOS_TEST_FOR_EXCEPTION( ierr < 0,
 
  472                       std::invalid_argument,
 
  473                       "Argument " << -ierr << 
" to SuperLU xgssvx had illegal value" );
 
  474   TEUCHOS_TEST_FOR_EXCEPTION( ierr > 0 && ierr_st <= this->globalNumCols_,
 
  476                       "Factorization complete, but U is exactly singular" );
 
  477   TEUCHOS_TEST_FOR_EXCEPTION( ierr > 0 && ierr_st > this->globalNumCols_ + 1,
 
  479                       "SuperLU allocated " << ierr - this->globalNumCols_ << 
" bytes of " 
  480                       "memory before allocation failure occured." );
 
  484 #ifdef HAVE_AMESOS2_TIMERS 
  485     Teuchos::TimeMonitor redistTimer(this->timers_.vecRedistTime_);
 
  488     if ( is_contiguous_ == 
true ) {
 
  492             ROOTED, this->rowIndexBase_);
 
  498             CONTIGUOUS_AND_ROOTED, this->rowIndexBase_);
 
  507 template <
class Matrix, 
class Vector>
 
  514   return( this->matrixA_->getGlobalNumRows() == this->matrixA_->getGlobalNumCols() );
 
  518 template <
class Matrix, 
class Vector>
 
  523   using Teuchos::getIntegralValue;
 
  524   using Teuchos::ParameterEntryValidator;
 
  526   RCP<const Teuchos::ParameterList> valid_params = getValidParameters_impl();
 
  528   ILU_Flag_ = parameterList->get<
bool>(
"ILU_Flag",
false);
 
  530       SLU::ilu_set_default_options(&(data_.options));
 
  532       data_.options.PrintStat = SLU::NO;
 
  535   data_.options.Trans = this->control_.useTranspose_ ? SLU::TRANS : SLU::NOTRANS;
 
  537   if( parameterList->isParameter(
"Trans") ){
 
  538     RCP<const ParameterEntryValidator> trans_validator = valid_params->getEntry(
"Trans").validator();
 
  539     parameterList->getEntry(
"Trans").setValidator(trans_validator);
 
  541     data_.options.Trans = getIntegralValue<SLU::trans_t>(*parameterList, 
"Trans");
 
  544   if( parameterList->isParameter(
"IterRefine") ){
 
  545     RCP<const ParameterEntryValidator> refine_validator = valid_params->getEntry(
"IterRefine").validator();
 
  546     parameterList->getEntry(
"IterRefine").setValidator(refine_validator);
 
  548     data_.options.IterRefine = getIntegralValue<SLU::IterRefine_t>(*parameterList, 
"IterRefine");
 
  551   if( parameterList->isParameter(
"ColPerm") ){
 
  552     RCP<const ParameterEntryValidator> colperm_validator = valid_params->getEntry(
"ColPerm").validator();
 
  553     parameterList->getEntry(
"ColPerm").setValidator(colperm_validator);
 
  555     data_.options.ColPerm = getIntegralValue<SLU::colperm_t>(*parameterList, 
"ColPerm");
 
  558   data_.options.DiagPivotThresh = parameterList->get<
double>(
"DiagPivotThresh", 1.0);
 
  560   bool equil = parameterList->get<
bool>(
"Equil", 
true);
 
  561   data_.options.Equil = equil ? SLU::YES : SLU::NO;
 
  563   bool symmetric_mode = parameterList->get<
bool>(
"SymmetricMode", 
false);
 
  564   data_.options.SymmetricMode = symmetric_mode ? SLU::YES : SLU::NO;
 
  567   if( parameterList->isParameter(
"RowPerm") ){
 
  568     RCP<const ParameterEntryValidator> rowperm_validator = valid_params->getEntry(
"RowPerm").validator();
 
  569     parameterList->getEntry(
"RowPerm").setValidator(rowperm_validator);
 
  570     data_.options.RowPerm = getIntegralValue<SLU::rowperm_t>(*parameterList, 
"RowPerm");
 
  579   data_.options.ILU_DropTol = parameterList->get<
double>(
"ILU_DropTol", 0.0001);
 
  581   data_.options.ILU_FillFactor = parameterList->get<
double>(
"ILU_FillFactor", 10.0);
 
  583   if( parameterList->isParameter(
"ILU_Norm") ) {
 
  584     RCP<const ParameterEntryValidator> norm_validator = valid_params->getEntry(
"ILU_Norm").validator();
 
  585     parameterList->getEntry(
"ILU_Norm").setValidator(norm_validator);
 
  586     data_.options.ILU_Norm = getIntegralValue<SLU::norm_t>(*parameterList, 
"ILU_Norm");
 
  589   if( parameterList->isParameter(
"ILU_MILU") ) {
 
  590     RCP<const ParameterEntryValidator> milu_validator = valid_params->getEntry(
"ILU_MILU").validator();
 
  591     parameterList->getEntry(
"ILU_MILU").setValidator(milu_validator);
 
  592     data_.options.ILU_MILU = getIntegralValue<SLU::milu_t>(*parameterList, 
"ILU_MILU");
 
  595   data_.options.ILU_FillTol = parameterList->get<
double>(
"ILU_FillTol", 0.01);
 
  597   if( parameterList->isParameter(
"IsContiguous") ){
 
  598     is_contiguous_ = parameterList->get<
bool>(
"IsContiguous");
 
  603 template <
class Matrix, 
class Vector>
 
  604 Teuchos::RCP<const Teuchos::ParameterList>
 
  608   using Teuchos::tuple;
 
  609   using Teuchos::ParameterList;
 
  610   using Teuchos::EnhancedNumberValidator;
 
  611   using Teuchos::setStringToIntegralParameter;
 
  612   using Teuchos::stringToIntegralParameterEntryValidator;
 
  614   static Teuchos::RCP<const Teuchos::ParameterList> valid_params;
 
  616   if( is_null(valid_params) ){
 
  617     Teuchos::RCP<Teuchos::ParameterList> pl = Teuchos::parameterList();
 
  619     setStringToIntegralParameter<SLU::trans_t>(
"Trans", 
"NOTRANS",
 
  620                                                "Solve for the transpose system or not",
 
  621                                                tuple<string>(
"TRANS",
"NOTRANS",
"CONJ"),
 
  622                                                tuple<string>(
"Solve with transpose",
 
  623                                                              "Do not solve with transpose",
 
  624                                                              "Solve with the conjugate transpose"),
 
  625                                                tuple<SLU::trans_t>(SLU::TRANS,
 
  630     setStringToIntegralParameter<SLU::IterRefine_t>(
"IterRefine", 
"NOREFINE",
 
  631                                                     "Type of iterative refinement to use",
 
  632                                                     tuple<string>(
"NOREFINE", 
"SLU_SINGLE", 
"SLU_DOUBLE"),
 
  633                                                     tuple<string>(
"Do not use iterative refinement",
 
  634                                                                   "Do single iterative refinement",
 
  635                                                                   "Do double iterative refinement"),
 
  636                                                     tuple<SLU::IterRefine_t>(SLU::NOREFINE,
 
  642     setStringToIntegralParameter<SLU::colperm_t>(
"ColPerm", 
"COLAMD",
 
  643                                                  "Specifies how to permute the columns of the " 
  644                                                  "matrix for sparsity preservation",
 
  645                                                  tuple<string>(
"NATURAL", 
"MMD_AT_PLUS_A",
 
  646                                                                "MMD_ATA", 
"COLAMD"),
 
  647                                                  tuple<string>(
"Natural ordering",
 
  648                                                                "Minimum degree ordering on A^T + A",
 
  649                                                                "Minimum degree ordering on A^T A",
 
  650                                                                "Approximate minimum degree column ordering"),
 
  651                                                  tuple<SLU::colperm_t>(SLU::NATURAL,
 
  657     Teuchos::RCP<EnhancedNumberValidator<double> > diag_pivot_thresh_validator
 
  658       = Teuchos::rcp( 
new EnhancedNumberValidator<double>(0.0, 1.0) );
 
  659     pl->set(
"DiagPivotThresh", 1.0,
 
  660             "Specifies the threshold used for a diagonal entry to be an acceptable pivot",
 
  661             diag_pivot_thresh_validator); 
 
  663     pl->set(
"Equil", 
true, 
"Whether to equilibrate the system before solve");
 
  665     pl->set(
"SymmetricMode", 
false,
 
  666             "Specifies whether to use the symmetric mode. " 
  667             "Gives preference to diagonal pivots and uses " 
  668             "an (A^T + A)-based column permutation.");
 
  672     setStringToIntegralParameter<SLU::rowperm_t>(
"RowPerm", 
"LargeDiag",
 
  673             "Type of row permutation strategy to use",
 
  674             tuple<string>(
"NOROWPERM",
"LargeDiag",
"MY_PERMR"),
 
  675             tuple<string>(
"Use natural ordering",
 
  676             "Use weighted bipartite matching algorithm",
 
  677             "Use the ordering given in perm_r input"),
 
  678             tuple<SLU::rowperm_t>(SLU::NOROWPERM,
 
  697     pl->set(
"ILU_DropTol", 0.0001, 
"ILUT drop tolerance");
 
  699     pl->set(
"ILU_FillFactor", 10.0, 
"ILUT fill factor");
 
  701     setStringToIntegralParameter<SLU::norm_t>(
"ILU_Norm", 
"INF_NORM",
 
  702             "Type of norm to use",
 
  703             tuple<string>(
"ONE_NORM",
"TWO_NORM",
"INF_NORM"),
 
  704             tuple<string>(
"1-norm",
"2-norm",
"inf-norm"),
 
  705             tuple<SLU::norm_t>(SLU::ONE_NORM,SLU::TWO_NORM,SLU::INF_NORM),
 
  708     setStringToIntegralParameter<SLU::milu_t>(
"ILU_MILU", 
"SILU",
 
  709             "Type of modified ILU to use",
 
  710             tuple<string>(
"SILU",
"SMILU_1",
"SMILU_2",
"SMILU_3"),
 
  711             tuple<string>(
"Regular ILU",
"MILU 1",
"MILU 2",
"MILU 3"),
 
  712             tuple<SLU::milu_t>(SLU::SILU,SLU::SMILU_1,SLU::SMILU_2,
 
  716     pl->set(
"ILU_FillTol", 0.01, 
"ILUT fill tolerance");
 
  718     pl->set(
"ILU_Flag", 
false, 
"ILU flag: if true, run ILU routines");
 
  720     pl->set(
"IsContiguous", 
true, 
"Whether GIDs contiguous");
 
  729 template <
class Matrix, 
class Vector>
 
  735 #ifdef HAVE_AMESOS2_TIMERS 
  736   Teuchos::TimeMonitor convTimer(this->timers_.mtxConvTime_);
 
  740   if( current_phase == SYMBFACT ) 
return false;
 
  743   if( data_.A.Store != NULL ){
 
  744     SLU::Destroy_SuperMatrix_Store( &(data_.A) );
 
  745     data_.A.Store = NULL;
 
  750     nzvals_.resize(this->globalNumNonZeros_);
 
  751     rowind_.resize(this->globalNumNonZeros_);
 
  752     colptr_.resize(this->globalNumCols_ + 1);
 
  757 #ifdef HAVE_AMESOS2_TIMERS 
  758     Teuchos::TimeMonitor mtxRedistTimer( this->timers_.mtxRedistTime_ );
 
  761     TEUCHOS_TEST_FOR_EXCEPTION( this->rowIndexBase_ != this->columnIndexBase_,
 
  763                         "Row and column maps have different indexbase ");
 
  765     if ( is_contiguous_ == 
true ) {
 
  768             nzvals_(), rowind_(),
 
  769             colptr_(), nnz_ret, ROOTED,
 
  771             this->rowIndexBase_);
 
  776             nzvals_(), rowind_(),
 
  777             colptr_(), nnz_ret, CONTIGUOUS_AND_ROOTED,
 
  779             this->rowIndexBase_);
 
  784   SLU::Dtype_t dtype = type_map::dtype;
 
  787     TEUCHOS_TEST_FOR_EXCEPTION( nnz_ret != as<int>(this->globalNumNonZeros_),
 
  789                         "Did not get the expected number of non-zero vals");
 
  791     function_map::create_CompCol_Matrix( &(data_.A),
 
  792                                          this->globalNumRows_, this->globalNumCols_,
 
  797                                          SLU::SLU_NC, dtype, SLU::SLU_GE);
 
  804 template<
class Matrix, 
class Vector>
 
  810 #endif  // AMESOS2_SUPERLU_DEF_HPP 
Amesos2::SolverCore: A templated interface for interaction with third-party direct sparse solvers...
Definition: Amesos2_SolverCore_decl.hpp:105
bool loadA_impl(EPhase current_phase)
Reads matrix data into internal structures. 
Definition: Amesos2_Superlu_def.hpp:731
EPhase
Used to indicate a phase in the direct solution. 
Definition: Amesos2_TypeDecl.hpp:65
int numericFactorization_impl()
Superlu specific numeric factorization. 
Definition: Amesos2_Superlu_def.hpp:233
global_size_type globalNumCols_
Number of global columns in matrixA_. 
Definition: Amesos2_SolverCore_decl.hpp:478
~Superlu()
Destructor. 
Definition: Amesos2_Superlu_def.hpp:109
global_size_type globalNumRows_
Number of global rows in matrixA_. 
Definition: Amesos2_SolverCore_decl.hpp:475
Amesos2 Superlu declarations. 
bool matrixShapeOK_impl() const 
Determines whether the shape of the matrix is OK for this solver. 
Definition: Amesos2_Superlu_def.hpp:509
Helper class for getting 1-D copies of multivectors. 
Definition: Amesos2_MultiVecAdapter_decl.hpp:266
Superlu(Teuchos::RCP< const Matrix > A, Teuchos::RCP< Vector > X, Teuchos::RCP< const Vector > B)
Initialize from Teuchos::RCP. 
Definition: Amesos2_Superlu_def.hpp:67
Teuchos::RCP< const Teuchos::ParameterList > getValidParameters_impl() const 
Definition: Amesos2_Superlu_def.hpp:605
A generic helper class for getting a CCS representation of a Matrix. 
Definition: Amesos2_Util.hpp:654
int solve_impl(const Teuchos::Ptr< MultiVecAdapter< Vector > > X, const Teuchos::Ptr< const MultiVecAdapter< Vector > > B) const 
Superlu specific solve. 
Definition: Amesos2_Superlu_def.hpp:374
A Matrix adapter interface for Amesos2. 
Definition: Amesos2_MatrixAdapter_decl.hpp:76
void setParameters_impl(const Teuchos::RCP< Teuchos::ParameterList > ¶meterList)
Definition: Amesos2_Superlu_def.hpp:520
int preOrdering_impl()
Performs pre-ordering on the matrix to increase efficiency. 
Definition: Amesos2_Superlu_def.hpp:186
Helper class for putting 1-D data arrays into multivectors. 
Definition: Amesos2_MultiVecAdapter_decl.hpp:322
A templated MultiVector class adapter for Amesos2. 
Definition: Amesos2_MultiVecAdapter_decl.hpp:176
std::string description() const 
Returns a short description of this Solver. 
Definition: Amesos2_Superlu_def.hpp:132
int symbolicFactorization_impl()
Perform symbolic factorization of the matrix using Superlu. 
Definition: Amesos2_Superlu_def.hpp:211
Amesos2 interface to the SuperLU package. 
Definition: Amesos2_Superlu_decl.hpp:73