[Trilinos-Users] [EXTERNAL] Amesos2 with Epetra

Daniel Santos dsantosolivan at gmail.com
Tue Nov 13 11:24:50 EST 2018


Hello Jason,

Thank you very much for your answer. I tried something like this but I
thought it was returning an RCP pointer as in the example.
I don't think it has something to do with that because I have tried to
catch the return with auto / auto* as:
auto sp =  Amesos2::create<Epetra_RowMatrix, Epetra_MultiVector>("Superlu",
linearProblem->GetMatrix(), linearProblem->GetLHS(),
linearProblem->GetRHS()));

In the example, with Tpetra it works perfectly but here I still get the
errors about the adapter:

....../trilinos/include/Amesos2_MatrixAdapter_def.hpp: In instantiation of
‘Teuchos::RCP<const Amesos2::MatrixAdapter<Matrix> >
Amesos2::createConstMatrixAdapter(Teuchos::RCP<const T>) [with Matrix =
Epetra_RowMatrix]’:
....../trilinos/include/Amesos2_SolverCore_def.hpp:70:46:   required from
‘Amesos2::SolverCore<ConcreteSolver, Matrix,
Vector>::SolverCore(Teuchos::RCP<const T2>, Teuchos::RCP<T>,
Teuchos::RCP<const Serializer>) [with ConcreteSolver = Amesos2::KLU2;
Matrix = Epetra_RowMatrix; Vector = Epetra_MultiVector]’
....../trilinos/include/Amesos2_KLU2_def.hpp:75:24:   required from
‘Amesos2::KLU2< <template-parameter-1-1>, <template-parameter-1-2>
>::KLU2(Teuchos::RCP<const T>, Teuchos::RCP<T2>, Teuchos::RCP<const T2>)
[with Matrix = Epetra_RowMatrix; Vector = Epetra_MultiVector]’
....../trilinos/include/Amesos2_Factory.hpp:361:19:   required from ‘static
Teuchos::RCP<Amesos2::Solver<Matrix, Vector> >
Amesos2::create_solver_with_supported_type<ConcreteSolver, Matrix,
Vector>::apply(Teuchos::RCP<const T2>, Teuchos::RCP<T>, Teuchos::RCP<const
Serializer>) [with ConcreteSolver = Amesos2::KLU2; Matrix =
Epetra_RowMatrix; Vector = Epetra_MultiVector]’
....../trilinos/include/Amesos2_Factory.hpp:413:87:   required from ‘static
Teuchos::RCP<Amesos2::Solver<Matrix, Vector> >
Amesos2::handle_solver_type_support<ConcreteSolver, Matrix,
Vector>::apply(Teuchos::RCP<const T2>, Teuchos::RCP<T>, Teuchos::RCP<const
Serializer>) [with ConcreteSolver = Amesos2::KLU2; Matrix =
Epetra_RowMatrix; Vector = Epetra_MultiVector]’
....../trilinos/include/Amesos2_Factory.hpp:552:67:   required from
‘Teuchos::RCP<Amesos2::Solver<Matrix, Vector> >
Amesos2::create(std::__cxx11::string, Teuchos::RCP<const T>,
Teuchos::RCP<T2>, Teuchos::RCP<const T2>) [with Matrix = Epetra_RowMatrix;
Vector = Epetra_MultiVector; std::__cxx11::string =
std::__cxx11::basic_string<char>]’
....../trilinos/include/Amesos2_Factory.hpp:476:19:   required from
‘Amesos2::Solver<Matrix, Vector>* Amesos2::create(const char*, const
Matrix*, Vector*, const Vector*) [with Matrix = Epetra_RowMatrix; Vector =
Epetra_MultiVector]’
.......Solvers_Direct_Amesos2.cpp:32:161:   required from here
....../trilinos/include/Amesos2_MatrixAdapter_def.hpp:578:17: error: no
matching function for call to
‘Amesos2::ConcreteMatrixAdapter<Epetra_RowMatrix>::ConcreteMatrixAdapter(Teuchos::RCP<Epetra_RowMatrix>)’
     return( rcp(new
ConcreteMatrixAdapter<Matrix>(rcp_const_cast<Matrix,const
Matrix>(m))).getConst() );

^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
In file included from
....../trilinos/include/Amesos2_TpetraRowMatrix_AbstractMatrixAdapter_def.hpp:48,
                 from
....../trilinos/include/Amesos2_AbstractConcreteMatrixAdapter_def.hpp:47,
                 from
....../trilinos/include/Amesos2_ConcreteMatrixAdapter_def.hpp:48,
                 from
....../trilinos/include/Amesos2_MatrixAdapter_def.hpp:49,
                 from ....../trilinos/include/Amesos2_SolverCore_def.hpp:56,
                 from ....../trilinos/include/Amesos2_SolverCore.hpp:50,
                 from ....../trilinos/include/Amesos2_KLU2_decl.hpp:56,
                 from ....../trilinos/include/Amesos2_KLU2.hpp:47,
                 from ....../trilinos/include/Amesos2_Factory.hpp:104,
                 from ....../trilinos/include/Amesos2.hpp:45,
                 from .......Solvers_Direct_Amesos2.cpp:2:
....../trilinos/include/Amesos2_ConcreteMatrixAdapter_decl.hpp:51:9: note:
candidate: ‘constexpr
Amesos2::ConcreteMatrixAdapter<Epetra_RowMatrix>::ConcreteMatrixAdapter()’
   class ConcreteMatrixAdapter {};
         ^~~~~~~~~~~~~~~~~~~~~
....../trilinos/include/Amesos2_ConcreteMatrixAdapter_decl.hpp:51:9:
note:   candidate expects 0 arguments, 1 provided
....../trilinos/include/Amesos2_ConcreteMatrixAdapter_decl.hpp:51:9: note:
candidate: ‘constexpr
Amesos2::ConcreteMatrixAdapter<Epetra_RowMatrix>::ConcreteMatrixAdapter(const
Amesos2::ConcreteMatrixAdapter<Epetra_RowMatrix>&)’
....../trilinos/include/Amesos2_ConcreteMatrixAdapter_decl.hpp:51:9:
note:   no known conversion for argument 1 from
‘Teuchos::RCP<Epetra_RowMatrix>’ to ‘const
Amesos2::ConcreteMatrixAdapter<Epetra_RowMatrix>&’
....../trilinos/include/Amesos2_ConcreteMatrixAdapter_decl.hpp:51:9: note:
candidate: ‘constexpr
Amesos2::ConcreteMatrixAdapter<Epetra_RowMatrix>::ConcreteMatrixAdapter(Amesos2::ConcreteMatrixAdapter<Epetra_RowMatrix>&&)’
....../trilinos/include/Amesos2_ConcreteMatrixAdapter_decl.hpp:51:9:
note:   no known conversion for argument 1 from
‘Teuchos::RCP<Epetra_RowMatrix>’ to
‘Amesos2::ConcreteMatrixAdapter<Epetra_RowMatrix>&&’
In file included from ....../trilinos/include/Amesos2_SolverCore_def.hpp:56,
                 from ....../trilinos/include/Amesos2_SolverCore.hpp:50,
                 from ....../trilinos/include/Amesos2_KLU2_decl.hpp:56,
                 from ....../trilinos/include/Amesos2_KLU2.hpp:47,
                 from ....../trilinos/include/Amesos2_Factory.hpp:104,
                 from ....../trilinos/include/Amesos2.hpp:45,
                 from .......Solvers_Direct_Amesos2.cpp:2:
....../trilinos/include/Amesos2_MatrixAdapter_def.hpp: In instantiation of
‘Amesos2::MatrixAdapter<Matrix>::global_size_t
Amesos2::MatrixAdapter<Matrix>::getGlobalNumRows() const [with Matrix =
Epetra_RowMatrix; Amesos2::MatrixAdapter<Matrix>::global_size_t = long
unsigned int]’:
....../trilinos/include/Amesos2_SolverCore_def.hpp:80:44:   required from
‘Amesos2::SolverCore<ConcreteSolver, Matrix,
Vector>::SolverCore(Teuchos::RCP<const T2>, Teuchos::RCP<T>,
Teuchos::RCP<const Serializer>) [with ConcreteSolver = Amesos2::KLU2;
Matrix = Epetra_RowMatrix; Vector = Epetra_MultiVector]’
....../trilinos/include/Amesos2_KLU2_def.hpp:75:24:   required from
‘Amesos2::KLU2< <template-parameter-1-1>, <template-parameter-1-2>
>::KLU2(Teuchos::RCP<const T>, Teuchos::RCP<T2>, Teuchos::RCP<const T2>)
[with Matrix = Epetra_RowMatrix; Vector = Epetra_MultiVector]’
....../trilinos/include/Amesos2_Factory.hpp:361:19:   required from ‘static
Teuchos::RCP<Amesos2::Solver<Matrix, Vector> >
Amesos2::create_solver_with_supported_type<ConcreteSolver, Matrix,
Vector>::apply(Teuchos::RCP<const T2>, Teuchos::RCP<T>, Teuchos::RCP<const
Serializer>) [with ConcreteSolver = Amesos2::KLU2; Matrix =
Epetra_RowMatrix; Vector = Epetra_MultiVector]’
....../trilinos/include/Amesos2_Factory.hpp:413:87:   required from ‘static
Teuchos::RCP<Amesos2::Solver<Matrix, Vector> >
Amesos2::handle_solver_type_support<ConcreteSolver, Matrix,
Vector>::apply(Teuchos::RCP<const T2>, Teuchos::RCP<T>, Teuchos::RCP<const
Serializer>) [with ConcreteSolver = Amesos2::KLU2; Matrix =
Epetra_RowMatrix; Vector = Epetra_MultiVector]’
....../trilinos/include/Amesos2_Factory.hpp:552:67:   required from
‘Teuchos::RCP<Amesos2::Solver<Matrix, Vector> >
Amesos2::create(std::__cxx11::string, Teuchos::RCP<const T>,
Teuchos::RCP<T2>, Teuchos::RCP<const T2>) [with Matrix = Epetra_RowMatrix;
Vector = Epetra_MultiVector; std::__cxx11::string =
std::__cxx11::basic_string<char>]’
....../trilinos/include/Amesos2_Factory.hpp:476:19:   required from
‘Amesos2::Solver<Matrix, Vector>* Amesos2::create(const char*, const
Matrix*, Vector*, const Vector*) [with Matrix = Epetra_RowMatrix; Vector =
Epetra_MultiVector]’
.......Solvers_Direct_Amesos2.cpp:32:161:   required from here
....../trilinos/include/Amesos2_MatrixAdapter_def.hpp:131:12: error:
invalid static_cast from type ‘const
Amesos2::MatrixAdapter<Epetra_RowMatrix>*’ to type ‘const adapter_t*’ {aka
‘const Amesos2::ConcreteMatrixAdapter<Epetra_RowMatrix>*’}
     return static_cast<const adapter_t*>(this)->getGlobalNumRows_impl();


On Tue, Nov 13, 2018 at 4:49 PM Gates, Jason Matthew <jmgate at sandia.gov>
wrote:

> A Teuchos expert might want to chime in to confirm this, but I suspect you
> could either:
>
>    - Remove the Teuchos::RCP<…> that’s wrapping the type on the left hand
>    side for your solver variable, or
>    - Use something along the lines of Teuchos::rcpFromRef(…) to wrap the
>    right hand side.
>
> It looks like the problem is the left hand side is currently a pointer
> type, while the right hand side isn’t.
>
> Hope this helps,
>
> Jason M. Gates
>
> On Nov 13, 2018, at 2:56 AM, Daniel Santos <dsantosolivan at gmail.com>
> wrote:
>
> Good morning,
>
> I am trying to use the Amesos2 package with Epetra matrices/vectors. The
> problem is that I have not found any tutorial for doing that.
>
> I have started with the tutorial: SimpleSolve (
> https://trilinos.org/docs/dev/packages/amesos2/doc/html/SimpleSolve_8cpp-example.html)
> and that one compiles and run without a problem (with Klu solver).
> Then I try to use the same in my code:
> Teuchos::RCP<Amesos2::Solver<Epetra_RowMatrix, Epetra_MultiVector>> solver
> = Amesos2::create<Epetra_RowMatrix, Epetra_MultiVector>("Superlu",
> linearProblem->GetMatrix(), linearProblem->GetLHS(),
> linearProblem->GetRHS());
> where linearProblem is a Epetra_LinearProblem.
> In that case, I get a lot of errors about the Adapters of Epetra like
> these:
> /......cpp:32:139: error: conversion from
> ‘Amesos2::Solver<Epetra_RowMatrix, Epetra_MultiVector>*’ to non-scalar type
> ‘Teuchos::RCP<Amesos2::Solver<Epetra_RowMatrix, Epetra_MultiVector> >’
> requested
>          Teuchos::RCP<Amesos2::Solver<Epetra_RowMatrix,
> Epetra_MultiVector>> solver = Amesos2::create<Epetra_RowMatrix,
> Epetra_MultiVector>("Superlu", linearProblem->GetMatrix(),
> linearProblem->GetLHS(), linearProblem->GetRHS());
> /...../trilinos/include/Amesos2_MatrixAdapter_def.hpp:578:17: error: no
> matching function for call to
> ‘Amesos2::ConcreteMatrixAdapter<Epetra_RowMatrix>::ConcreteMatrixAdapter(Teuchos::RCP<Epetra_RowMatrix>)’
>      return( rcp(new
> ConcreteMatrixAdapter<Matrix>(rcp_const_cast<Matrix,const
> Matrix>(m))).getConst() );
>
> How should I correctly use this?
> Thank you very much,
> Daniel Santos-Oliván.
> _______________________________________________
> Trilinos-Users mailing list
> Trilinos-Users at trilinos.org
> https://trilinos.org/mailman/listinfo/trilinos-users
>
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://trilinos.org/pipermail/trilinos-users/attachments/20181113/3ea5c02f/attachment.html>


More information about the Trilinos-Users mailing list