44#include <Epetra_CrsMatrix.h>
45#include <Epetra_Map.h>
46#include <Epetra_Import.h>
47#include <Epetra_IntSerialDenseVector.h>
48#include <Epetra_LongLongSerialDenseVector.h>
49#include <Epetra_GIDTypeSerialDenseVector.h>
60template<
typename int_type>
63transform( OriginalTypeRef orig )
68 assert( orig.Filled() );
83 for(
int i = 0; i < nNumRows; ++i )
84 matched = matched && ( oRowMap.
MyGID(newRowMap_.GID64(i)) );
85 if( !matched ) std::cerr <<
"EDT_CrsMatrix_SubCopy: Bad new_row_Map. GIDs of new row map must be GIDs of the original row map on the same processor.\n";
88 if( !newRangeMap_.
SameAs(newDomainMap_) ) {
90 int_type* newDomainMap_MyGlob = 0;
91 newDomainMap_.MyGlobalElementsPtr(newDomainMap_MyGlob);
93 for(
int i = 0; i < nNumDomain; ++i )
94 matched = matched && ( pidList[i]>=0 );
97 if( !matched ) std::cout <<
"EDT_CrsMatrix_SubCopy: Bad newDomainMap. One or more GIDs in new domain map are not part of original domain map.\n";
105 int_type* oColMap_MyGlob = 0;
106 oColMap.MyGlobalElementsPtr(oColMap_MyGlob);
110 int_type * origColGidList = 0;
111 oColMap.MyGlobalElementsPtr(origColGidList);
112 for(
int i = 0; i < oNumCols; ++i )
114 newColMapGidList[numNewCols++]= origColGidList[i];
115 newColMap_ =
Epetra_Map(-1, numNewCols, newColMapGidList.Values(), 0, oColMap.
Comm());
139#ifndef EPETRA_NO_32BIT_GLOBAL_INDICES
141 return transform<int>(orig);
145#ifndef EPETRA_NO_64BIT_GLOBAL_INDICES
147 return transform<long long>(orig);
151 throw "CrsMatrix_SubCopy::operator(): GlobalIndices type unknown";
171 if (!
newObj_->Filled())
return(
false);
~CrsMatrix_SubCopy()
Destructor.
bool fwd()
Forward transfer of data from orig object input in the operator() method call to the new object creat...
bool rvs()
Reverse transfer of data from new object created in the operator() method call to the orig object inp...
NewTypeRef operator()(OriginalTypeRef orig)
Transformation Operator.
int RemoteIDList(int NumIDs, const int *GIDList, int *PIDList, int *LIDList) const
bool SameAs(const Epetra_BlockMap &Map) const
bool GlobalIndicesInt() const
const Epetra_Comm & Comm() const
int NumMyElements() const
bool MyGID(int GID_in) const
bool GlobalIndicesLongLong() const
EpetraExt::BlockCrsMatrix: A class for constructing a distributed block matrix.