[Trilinos-Users] Thyra Operator from Tpetra MultiVector

Einar Otnes einaro at yahoo.com
Mon Jul 22 10:59:48 MDT 2013


Dear experts,

I'm currently trying to learn how to use the Thyra-Tpetra adapters such that I can use the Thyra framework with Tpetra distributed vectors. 

I have been able to use Tpetra vectors, but I'm still struggling with obtaining  a Thyra Linear operator  from Tpetra MultiVector. The code snippet below will not compile due to the last statement where I try to create a Thyra Linear operator from Tpetra multiVector. What am I doing wrong?

Thank you so much for your help.

Best regards,

Einar Otnes




/***********************************************************************
 ***********************************************************************/

#include <Teuchos_Comm.hpp>

#include <Tpetra_DefaultPlatform.hpp>
#include <Tpetra_Vector.hpp>
#include <Tpetra_MultiVector.hpp>
#include <Tpetra_Map.hpp>

#include "Thyra_TpetraThyraWrappers.hpp"

#include "Thyra_VectorBase.hpp"
#include "Thyra_MultiVectorBase.hpp"
#include "Thyra_LinearOpBase.hpp"
#include "Thyra_OperatorVectorClientSupport.hpp"


int main(int argc, char* argv[]) {


	using Teuchos::RCP;

	typedef int     LO;
	typedef long    GO;
	typedef double  ST;

	typedef Kokkos::DefaultNode::DefaultNodeType             node_type;
	typedef Tpetra::Map<LO, GO, node_type>                   map_type;
	typedef Thyra::TpetraVectorSpace<ST,LO,GO,node_type >    VSpace;
	typedef Thyra::VectorSpaceBase<ST>                       VSB;
	typedef Thyra::TpetraVector<ST, LO, GO, node_type>       V;
	typedef Tpetra::MultiVector<ST, LO, GO, node_type>       MV;
	typedef Thyra::VectorBase<ST>                            VB;
	typedef Thyra::MultiVectorBase<ST>                       MVB;
	typedef Thyra::LinearOpBase<ST>                          LOP;

	Teuchos::oblackholestream blackHole;
	Teuchos::GlobalMPISession mpiSession (&argc, &argv, &blackHole);


	RCP<const Teuchos::Comm<int> > comm = Tpetra::DefaultPlatform::getDefaultPlatform().getComm();
	RCP<node_type> node                 = Kokkos::DefaultNode::getDefaultNode ();


	// Set problem size
	size_t m =  12;
	size_t n =  12;

	RCP<const map_type> rngMap = rcp (new map_type (m, 0, comm, Tpetra::GloballyDistributed, node));
	RCP<const map_type> domMap = rcp (new map_type (n, 0, comm, Tpetra::GloballyDistributed, node));


	RCP<VSpace> domSp = Thyra::tpetraVectorSpace<ST,LO,GO,node_type>(domMap);
	RCP<VSpace> rngSp = Thyra::tpetraVectorSpace<ST,LO,GO,node_type>(rngMap);

	RCP<VB> x =Thyra::tpetraVector<ST,LO,GO,node_type>(
			domSp, rcp(new Tpetra::Vector<ST, LO, GO, node_type>(domMap))
	);

	RCP<VB> b =Thyra::tpetraVector<ST,LO,GO,node_type>(
			rngSp, rcp(new Tpetra::Vector<ST, LO, GO, node_type>(rngMap))
	);


	// !!!!!!!!!!!! Here is my problem.

	// How do I define a Thyra operator from a Tpetra multiVector?
	// I want this operator to be able to operate on "x" to create "b", i.e. b=Ax.
	// My suggestion below doesn't compile, but I cannot figure out how to make this work...

//	RCP<LOP> A = Thyra::tpetraMultiVector(rngSp,
//			rcp(new Thyra::tpetraVectorSpace<ST,LO,GO,node_type>(domMap)),
//			rcp(new Tpetra::MultiVector<ST,LO,GO,node_type>(rngMap,domMap->getGlobalNumElements()))
//	);




	return EXIT_SUCCESS;
}



-------------- next part --------------
An HTML attachment was scrubbed...
URL: https://software.sandia.gov/pipermail/trilinos-users/attachments/20130722/6565e787/attachment.html 


More information about the Trilinos-Users mailing list