44 #include <Epetra_Export.h> 45 #include <Epetra_Import.h> 46 #include <Epetra_LinearProblem.h> 47 #include <Epetra_CrsGraph.h> 48 #include <Epetra_CrsMatrix.h> 49 #include <Epetra_MultiVector.h> 50 #include <Epetra_Vector.h> 51 #include <Epetra_IntVector.h> 52 #include <Epetra_Map.h> 53 #include <Epetra_Comm.h> 60 if( Exporter_ )
delete Exporter_;
61 if( Importer_ )
delete Importer_;
63 if( NewProblem_ )
delete NewProblem_;
64 if( NewRHS_ )
delete NewRHS_;
65 if( NewLHS_ )
delete NewLHS_;
73 OldMatrix_ =
dynamic_cast<Epetra_CrsMatrix*
>( orig.GetMatrix() );
74 OldRHS_ = orig.GetRHS();
75 OldLHS_ = orig.GetLHS();
76 OldRowMap_ =
const_cast<Epetra_Map*
>(&OldMatrix_->RowMap());
81 if( !OldMatrix_ ) ierr = -2;
82 if( !OldRHS_ ) ierr = -3;
83 if( !OldLHS_ ) ierr = -4;
85 NewMatrix_ = &(matrixTrans_( *OldMatrix_ ));
87 Epetra_BlockMap & NewRowMap =
const_cast<Epetra_BlockMap&
>(NewMatrix_->Graph().RowMap());
89 NewRHS_ =
new Epetra_MultiVector( NewRowMap, 1 );
90 NewLHS_ =
new Epetra_MultiVector( NewRowMap, 1 );
92 Exporter_ =
new Epetra_Export( *OldRowMap_, NewRowMap );
93 Importer_ =
new Epetra_Import( NewRowMap, *OldRowMap_ );
95 NewProblem_ =
new Epetra_LinearProblem( NewMatrix_, NewLHS_, NewRHS_ );
104 NewLHS_->Export( *OldLHS_, *Exporter_, Insert );
105 NewRHS_->Export( *OldRHS_, *Exporter_, Insert );
106 NewMatrix_->Export( *OldMatrix_, *Exporter_, Insert );
115 OldLHS_->Import( *NewLHS_, *Exporter_, Insert );
116 OldRHS_->Import( *NewRHS_, *Exporter_, Insert );
117 OldMatrix_->Import( *NewMatrix_, *Exporter_, Insert );
NewTypeRef operator()(OriginalTypeRef orig)
Transform Operator.
EpetraExt::BlockCrsMatrix: A class for constructing a distributed block matrix.
bool fwd()
Forward Data Migration.
bool rvs()
Reverse Data Migration.
~LinearProblem_MatrixTrans()
Destructor.