[Trilinos-Users] Unexpected Error In Amesos2 After Upgrading Trilinos

Corey A. Henderson cahenderson at wisc.edu
Sun Dec 2 12:59:07 EST 2018


Hello,

I am struggling to debug an error being thrown by Amesos2 in v12.12.1
(Release), when using Belos & MueLu for a GMRES solve. The identical code
run against v12.10.1 (Debug) does not throw an error. Furthermore, the
error does not happen for small matrix sizes. It works for N=1000 and
N=2000 but fails for N=3000.

The error I get is:
MueLu::TpetraOperator::apply : detected an exception
/dev/shm/Trilinos-trilinos-release-12-12-1/packages/amesos2/src/Amesos2_KLU2_def.hpp:144:
Throw number = 39
Throw test that evaluated to true: sp_colind == nullptr
Amesos2 Runtime Error: sp_colind returned null
terminate called after throwing an instance of 'std::runtime_error'
  what():
/dev/shm/Trilinos-trilinos-release-12-12-1/packages/amesos2/src/Amesos2_KLU2_def.hpp:144:
Throw number = 39
Throw test that evaluated to true: sp_colind == nullptr
Amesos2 Runtime Error: sp_colind returned null
Aborted

In my simple test code I believe I am correctly setting column indices when
I set up my matrix (A should be the identity matrix). I've pasted code
below that reproduces the error. I'd appreciate help identifying where my
mistake is, please.

-- 
Corey A. Henderson
PhD Candidate and NSF Graduate Fellow
Dept. of Engineering Physics
Univ. of Wisconsin - Madison

********

#include <iostream>
#include "BelosTpetraAdapter.hpp"
#include "Tpetra_CrsMatrix.hpp"
#include "MueLu_CreateTpetraPreconditioner.hpp"
#include "BelosSolverFactory.hpp"
const bool testIt(const ulong numEntries) {
 bool success = false;
  Teuchos::RCP<const Teuchos::Comm<int> > localComm(new
Teuchos::SerialComm<int>());
  Teuchos::RCP<Tpetra::Map<int, long long> > testMap(
    new Tpetra::Map<int, long long>(static_cast<long long>(numEntries),
0LL, localComm, Tpetra::GloballyDistributed));
  Teuchos::RCP<Tpetra::CrsMatrix<double, int, long long> > testA(
    new Tpetra::CrsMatrix<double, int, long long>(testMap, 1UL,
Tpetra::StaticProfile));
  Teuchos::Array<double> rowDataArray(1UL, 1.0);
  Teuchos::Array<long long> columnIndicesArray(1UL, 1LL);
  for (long long row=0; row < static_cast<long long>(numEntries); ++row) {
   columnIndicesArray[0] = row;
   testA->insertGlobalValues(row, columnIndicesArray(), rowDataArray());
  }
  testA->fillComplete();
  Teuchos::RCP<Tpetra::MultiVector<double, int, long long> > testB(
    new Tpetra::MultiVector<double, int, long long>(testMap, 1, false));
  for (long long row=0; row < static_cast<long long>(numEntries); ++row)
   testB->replaceGlobalValue(row, 0, static_cast<double>(row));
  Teuchos::RCP<Tpetra::MultiVector<double, int, long long> > testX(
    new Tpetra::MultiVector<double, int, long long>(testMap, 1, false));
  testX->putScalar(0.0);
  Teuchos::RCP<Tpetra::Operator<double, int, long long> > testAOperator =
    Teuchos::rcp_dynamic_cast<Tpetra::Operator<double, int, long long>
>(testA, true);
  Teuchos::ParameterList mueLuParameterList;
  mueLuParameterList.set("verbosity", "none");
  mueLuParameterList.set("problem: type", "Poisson-2D");
  Teuchos::RCP<MueLu::TpetraOperator<double, int, long long> >
mueLuPreconditioner =
    MueLu::CreateTpetraPreconditioner(testAOperator, mueLuParameterList);
 Belos::SolverFactory<double, Tpetra::MultiVector<double, int, long long>,
Tpetra::Operator<double, int, long long> > factory;
 Teuchos::RCP<Teuchos::ParameterList> solverParams =
Teuchos::parameterList();
 solverParams->set ("Num Blocks", 100);
 solverParams->set ("Maximum Iterations", 1000);
 solverParams->set ("Convergence Tolerance", 10e-6);
 Teuchos::RCP< Belos::SolverManager<double, Tpetra::MultiVector<double,
int, long long>, Tpetra::Operator<double, int, long long> > >
  testSolver = factory.create("GMRES", solverParams);
 Teuchos::RCP<Belos::LinearProblem<double, Tpetra::MultiVector<double, int,
long long>, Tpetra::Operator<double, int, long long> > > problem
  = Teuchos::rcp(new Belos::LinearProblem<double,
Tpetra::MultiVector<double, int, long long>, Tpetra::Operator<double, int,
long long> >(testAOperator, testX, testB));
 problem->setLeftPrec(mueLuPreconditioner);
 success = problem->setProblem();
 if (success) testSolver->setProblem(problem);
 if (success) {
  Belos::ReturnType result = testSolver->solve();
  success = (result == Belos::Converged);
 }
 if (success) {
  for (long long int row=0; row<static_cast<long long int>(numEntries);
++row) {
   double thisValue = testX->getData(0)[row];
   long long int longValue = round(thisValue);
   if (longValue != row) {
    success = false;
   }
  }
 }
 return success;
}
int main(int argc, char **argv) {
    bool result = false;
    result = testIt(1000); //works
    std::cout << "Result for 1000: " << (result ? "True" : "False") <<
std::endl;
    result = testIt(2000);  //works
    std::cout << "Result for 2000: " << (result ? "True" : "False") <<
std::endl;
    result = testIt(3000);  //fails
    std::cout << "Result for 3000: " << (result ? "True" : "False") <<
std::endl;

    return 0;
}
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://trilinos.org/pipermail/trilinos-users/attachments/20181202/6e7ad885/attachment.html>


More information about the Trilinos-Users mailing list