46 #include "Epetra_Map.h" 47 #include "Epetra_CrsMatrix.h" 50 #include "Epetra_MpiComm.h" 55 #include "Epetra_Comm.h" 56 #include "Epetra_SerialComm.h" 58 #include "BelosConfigDefs.hpp" 59 #include "BelosMVOPTester.hpp" 60 #include "BelosEpetraAdapter.hpp" 62 #ifdef HAVE_EPETRA_THYRA 64 #include "Thyra_EpetraThyraWrappers.hpp" 65 #include "Thyra_EpetraLinearOp.hpp" 70 int main(
int argc,
char *argv[])
73 using Teuchos::rcp_implicit_cast;
80 MPI_Init(&argc,&argv);
81 Teuchos::RCP<Epetra_MpiComm> Comm = Teuchos::rcp(
new Epetra_MpiComm(MPI_COMM_WORLD) );
84 Teuchos::RCP<Epetra_SerialComm> Comm = Teuchos::rcp(
new Epetra_SerialComm() );
93 int MyPID = Comm->MyPID();
97 if (argv[1][0]==
'-' && argv[1][1]==
'v') {
104 Teuchos::RCP<Epetra_Map> Map = Teuchos::rcp(
new Epetra_Map(dim, 0, *Comm) );
107 int NumMyElements = Map->NumMyElements();
108 std::vector<int> MyGlobalElements(NumMyElements);
109 Map->MyGlobalElements(&MyGlobalElements[0]);
114 std::vector<int> NumNz(NumMyElements);
118 for (i=0; i<NumMyElements; i++) {
119 if (MyGlobalElements[i]==0 || MyGlobalElements[i] == dim-1) {
128 Teuchos::RCP<Epetra_CrsMatrix> A = Teuchos::rcp(
new Epetra_CrsMatrix(Copy, *Map, &NumNz[0]) );
133 std::vector<double> Values(2);
134 Values[0] = -1.0; Values[1] = -1.0;
135 std::vector<int> Indices(2);
138 for (i=0; i<NumMyElements; i++) {
139 if (MyGlobalElements[i]==0) {
143 else if (MyGlobalElements[i] == dim-1) {
148 Indices[0] = MyGlobalElements[i]-1;
149 Indices[1] = MyGlobalElements[i]+1;
152 ierr = A->InsertGlobalValues(MyGlobalElements[i],NumEntries,&Values[0],&Indices[0]);
155 ierr = A->InsertGlobalValues(MyGlobalElements[i],1,&two,&MyGlobalElements[i]);
160 ierr = A->FillComplete();
164 Teuchos::RCP<Belos::EpetraOp> op = Teuchos::rcp(
new Belos::EpetraOp(A));
172 Teuchos::RCP<Belos::EpetraMultiVec> ivec = Teuchos::rcp(
new Belos::EpetraMultiVec(*Map, blockSize) );
176 Teuchos::RCP<Belos::OutputManager<double> > MyOM = Teuchos::rcp(
new Belos::OutputManager<double>( MyPID ) );
178 MyOM->setVerbosity( Belos::Errors + Belos::Warnings );
181 #ifdef HAVE_EPETRA_THYRA 182 typedef Thyra::MultiVectorBase<double> TMVB;
183 typedef Thyra::LinearOpBase<double> TLOB;
187 Teuchos::RCP<const Thyra::VectorSpaceBase<double> > epetra_vs =
188 Thyra::create_VectorSpace(Map);
191 Teuchos::RCP<Thyra::MultiVectorBase<double> > thyra_ivec =
192 Thyra::create_MultiVector(rcp_implicit_cast<Epetra_MultiVector>(ivec),epetra_vs);
195 Teuchos::RCP<Thyra::LinearOpBase<double> > thyra_op =
196 Teuchos::rcp(
new Thyra::EpetraLinearOp(A) );
200 ierr = Belos::TestMultiVecTraits<double,TMVB>(MyOM,thyra_ivec);
204 if ( verbose && MyPID==0 ) {
205 std::cout <<
"*** ThyraAdapter PASSED TestMultiVecTraits()" << std::endl;
209 if ( verbose && MyPID==0 ) {
210 std::cout <<
"*** ThyraAdapter FAILED TestMultiVecTraits() ***" 211 << std::endl << std::endl;
217 ierr = Belos::TestOperatorTraits<double,TMVB,TLOB>(MyOM,thyra_ivec,thyra_op);
221 if ( verbose && MyPID==0 ) {
222 std::cout <<
"*** ThyraAdapter PASSED TestOperatorTraits()" << std::endl;
226 if ( verbose && MyPID==0 ) {
227 std::cout <<
"*** ThyraAdapter FAILED TestOperatorTraits() ***" 228 << std::endl << std::endl;
239 if (verbose && MyPID==0)
240 std::cout <<
"End Result: TEST FAILED" << std::endl;
246 if (verbose && MyPID==0)
247 std::cout <<
"End Result: TEST PASSED" << std::endl;
int main(int argc, char *argv[])
Thyra specializations of MultiVecTraits and OperatorTraits.