本文整理汇总了C++中teuchos::RCP::DomainMap方法的典型用法代码示例。如果您正苦于以下问题:C++ RCP::DomainMap方法的具体用法?C++ RCP::DomainMap怎么用?C++ RCP::DomainMap使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类teuchos::RCP
的用法示例。
在下文中一共展示了RCP::DomainMap方法的4个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: run_test
static int run_test(Teuchos::RCP<Epetra_CrsMatrix> matrix,
bool verbose, // display the graph before & after
bool contract, // set global number of partitions to 1/2 num procs
int partitioningType, // hypergraph or graph partitioning, or simple
int vertexWeightType, // use vertex weights?
int edgeWeightType, // use edge/hyperedge weights?
int objectType) // use isorropia's CrsMatrix or CrsGraph
{
int rc=0, fail = 0;
#ifdef HAVE_EPETRAEXT
int localProc = 0;
double balance1, balance2, cutn1, cutn2, cutl1, cutl2;
double balance3, cutn3, cutl3;
double cutWgt1, cutWgt2, cutWgt3;
int numCuts1, numCuts2, numCuts3, valid;
int numPartitions = 0;
int keepDenseEdges = 0;
int numProcs = 1;
#ifdef HAVE_MPI
const Epetra_MpiComm &Comm = dynamic_cast<const Epetra_MpiComm &>(matrix->Comm());
localProc = Comm.MyPID();
numProcs = Comm.NumProc();
#else
const Epetra_SerialComm &Comm = dynamic_cast<const Epetra_SerialComm &>(matrix->Comm());
#endif
int numRows = matrix->NumGlobalRows();
if (numRows < (numProcs * 100)){
// By default Zoltan throws out dense edges, defined as those
// whose number of non-zeros exceeds 25% of the number of vertices.
//
// If dense edges are thrown out of a small matrix, there may be nothing left.
keepDenseEdges = 1;
}
double myShareBefore = 1.0 / numProcs;
double myShare = myShareBefore;
if (contract){
numPartitions = numProcs / 2;
if (numPartitions > numRows)
numPartitions = numRows;
if (numPartitions > 0){
if (localProc < numPartitions){
myShare = 1.0 / numPartitions;
}
else{
myShare = 0.0;
}
}
else{
contract = 0;
}
}
// If we want Zoltan's or Isorropia's default weights, then we don't
// need to supply a CostDescriber object to createBalancedCopy,
// so we get to test the API functions that don't take a CostDescriber.
bool noCosts = ((vertexWeightType == NO_APPLICATION_SUPPLIED_WEIGHTS) &&
(edgeWeightType == NO_APPLICATION_SUPPLIED_WEIGHTS));
// Test the interface that has no parameters, if possible
bool noParams =
((partitioningType == HYPERGRAPH_PARTITIONING) && // default, so requires no params
(numPartitions == 0) && // >0 would require a parameter
(keepDenseEdges == 0)); // >0 would require a parameter
// Maps for original object
const Epetra_Map &sourceRowMap = matrix->RowMap();
const Epetra_Map &sourceRangeMap = matrix->RangeMap();
// const Epetra_Map &sourceColMap = matrix->ColMap();
const Epetra_Map &sourceDomainMap = matrix->DomainMap();
int numCols = matrix->NumGlobalCols();
int nMyRows = sourceRowMap.NumMyElements();
int base = sourceRowMap.IndexBase();
// Compute vertex and edge weights
Isorropia::Epetra::CostDescriber costs;
Teuchos::RCP<Epetra_Vector> vptr;
Teuchos::RCP<Epetra_CrsMatrix> eptr;
Teuchos::RCP<Epetra_Vector> hyperEdgeWeights;
if (edgeWeightType != NO_APPLICATION_SUPPLIED_WEIGHTS){
if (partitioningType == GRAPH_PARTITIONING){
// Create graph edge weights.
eptr = Teuchos::rcp(new Epetra_CrsMatrix(*matrix));
//.........这里部分代码省略.........
示例2: main
int main(int argc, char *argv[])
{
std::cout << Epetra_Version() << std::endl << std::endl;
#ifdef HAVE_MPI
MPI_Init(&argc,&argv);
Epetra_MpiComm Comm (MPI_COMM_WORLD);
#else
Epetra_SerialComm Comm;
#endif
Teuchos::RCP<Teuchos::FancyOStream> fos = getFancyOStream(Teuchos::rcpFromRef(std::cout));
// Construct a Map with NumElements and index base of 0
Teuchos::RCP<Epetra_Map> rgMap = Teuchos::rcp(new Epetra_Map(63, 0, Comm));
Teuchos::RCP<Epetra_Map> doMap = Teuchos::rcp(new Epetra_Map(20, 0, Comm));
Epetra_CrsMatrix* Pin = NULL;
EpetraExt::MatrixMarketFileToCrsMatrix("Test.mat",
*rgMap, *rgMap, *doMap,
Pin, false,
true);
Teuchos::RCP<Epetra_CrsMatrix> P = Teuchos::rcp(Pin);
Epetra_CrsMatrix* A = NULL;
A = TridiagMatrix(rgMap.get(), 1.0, -2.0, 1.0);
Teuchos::RCP<Epetra_CrsMatrix> rcpA = Teuchos::rcp(A);
////////////////////////////////////////////
// plain Epetra
////////////////////////////////////////////
// Create x and b vectors
Teuchos::RCP<Epetra_Vector> x = Teuchos::rcp(new Epetra_Vector(*doMap));
Teuchos::RCP<Epetra_Vector> x2 = Teuchos::rcp(new Epetra_Vector(*rgMap));
Teuchos::RCP<Epetra_Vector> b = Teuchos::rcp(new Epetra_Vector(*rgMap));
Teuchos::RCP<Epetra_Vector> b2 = Teuchos::rcp(new Epetra_Vector(*rgMap));
x->PutScalar(1.0);
x2->PutScalar(1.0);
double normx = 0.0;
x->Norm1(&normx);
if (Comm.MyPID() == 0) std::cout << "||x|| = " << normx << std::endl;
x2->Norm1(&normx);
if (Comm.MyPID() == 0) std::cout << "||x2|| = " << normx << std::endl;
/*P->Apply(*x,*b);
normx = 0.0;
b->Norm1(&normx);*/
//if (Comm.MyPID() == 0) std::cout << "||Px||_1 = " << normx << std::endl;
/*Epetra_RowMatrixTransposer et(&*P);
Epetra_CrsMatrix* PT;
int rv = et.CreateTranspose(true,PT);
if (rv != 0) {
std::ostringstream buf;
buf << rv;
std::string msg = "Utils::Transpose: Epetra::RowMatrixTransposer returned value of " + buf.str();
std::cout << msg << std::endl;
}
Teuchos::RCP<Epetra_CrsMatrix> rcpPT(PT);
rcpPT->Apply(*x2,*b2);
normx = 0.0;
b2->Norm1(&normx);*/
//if (Comm.MyPID() == 0) std::cout << "||P^T x||_1 = " << normx << std::endl;
// matrix-matrix multiply
Teuchos::RCP<Epetra_CrsMatrix> AP = Teuchos::rcp(new Epetra_CrsMatrix(Copy,rcpA->RangeMap(),1));
EpetraExt::MatrixMatrix::Multiply(*rcpA,false,*P,false,*AP, *fos);
// AP->FillComplete(P->DomainMap(),rcpA->RangeMap());
//std::cout << *AP << std::endl;
AP->Apply(*x,*b2);
normx = 0.0;
b2->Norm1(&normx);
if (Comm.MyPID() == 0) std::cout << "Epetra: ||AP x||_1 = " << normx << std::endl;
// build A^T explicitely
Epetra_RowMatrixTransposer etA(&*rcpA);
Epetra_CrsMatrix* AT;
int rv3 = etA.CreateTranspose(true,AT);
if (rv3 != 0) {
std::ostringstream buf;
buf << rv3;
std::string msg = "Utils::Transpose: Epetra::RowMatrixTransposer returned value of " + buf.str();
std::cout << msg << std::endl;
}
Teuchos::RCP<Epetra_CrsMatrix> rcpAT(AT);
// calculate A^T Px
Teuchos::RCP<Epetra_CrsMatrix> APexpl = Teuchos::rcp(new Epetra_CrsMatrix(Copy,rcpA->DomainMap(),20));
EpetraExt::MatrixMatrix::Multiply(*rcpAT,false,*P,false,*APexpl, *fos);
// APexpl->FillComplete(P->DomainMap(),rcpA->DomainMap()); // check me
APexpl->Apply(*x,*b2);
normx = 0.0;
b2->Norm1(&normx);
if (Comm.MyPID() == 0) std::cout << "Epetra: ||A^T_expl P x||_1 = " << normx << std::endl;
//.........这里部分代码省略.........
示例3: preconditioner
/*----------------------------------------------------------------------*
| compute the preconditioner (public) m.gee 03/06|
*----------------------------------------------------------------------*/
bool MOERTEL::Mortar_ML_Preconditioner::Compute()
{
iscomputed_ = false;
MLAPI::Init();
// get parameters
int maxlevels = mlparams_.get("max levels",10);
int maxcoarsesize = mlparams_.get("coarse: max size",10);
double* nullspace = mlparams_.get("null space: vectors",(double*)NULL);
int nsdim = mlparams_.get("null space: dimension",1);
int numpde = mlparams_.get("PDE equations",1);
double damping = mlparams_.get("aggregation: damping factor",1.33);
std::string eigenanalysis = mlparams_.get("eigen-analysis: type", "Anorm");
std::string smoothertype = mlparams_.get("smoother: type","symmetric Gauss-Seidel");
std::string coarsetype = mlparams_.get("coarse: type","Amesos-KLU");
std::string ptype = mlparams_.get("prolongator: type","mod_full");
// create the 2 rowmaps
Arrmap_ = Teuchos::rcp(MOERTEL::SplitMap(A_->RowMap(),*Annmap_));
Teuchos::RCP<Epetra_Map> map1 = Arrmap_;
Teuchos::RCP<Epetra_Map> map2 = Annmap_;
// split Atilde
//
// Atilde11 Atilde12
// Atilde21 Atilde22
//
Teuchos::RCP<Epetra_CrsMatrix> Atilde11;
Teuchos::RCP<Epetra_CrsMatrix> Atilde12;
Teuchos::RCP<Epetra_CrsMatrix> Atilde21;
Teuchos::RCP<Epetra_CrsMatrix> Atilde22;
MOERTEL::SplitMatrix2x2(Atilde_,map1,map2,Atilde11,Atilde12,Atilde21,Atilde22);
Atilde11_ = Atilde11;
// build BWT (padded to full size)
//
// 0 Mr Dinv
// 0 I
//
Teuchos::RCP<Epetra_CrsMatrix> BWT = Teuchos::rcp(MOERTEL::MatMatMult(*B_,false,*WT_,false,0));
Teuchos::RCP<Epetra_CrsMatrix> tmp = Teuchos::rcp(MOERTEL::PaddedMatrix(BWT->RowMap(),0.0,25));
MOERTEL::MatrixMatrixAdd(*BWT,false,1.0,*tmp,0.0);
tmp->FillComplete(BWT->DomainMap(),BWT->RangeMap());
BWT = tmp;
tmp = Teuchos::null;
// split BWT to obtain M = Mr Dinv
Teuchos::RCP<Epetra_CrsMatrix> Zero11;
Teuchos::RCP<Epetra_CrsMatrix> M;
Teuchos::RCP<Epetra_CrsMatrix> Zero21;
Teuchos::RCP<Epetra_CrsMatrix> I22;
MOERTEL::SplitMatrix2x2(BWT,map1,map2,Zero11,M,Zero21,I22);
M_ = M;
// transpose BWT to get WBT and split again
tmp = Teuchos::rcp(MOERTEL::PaddedMatrix(BWT->RowMap(),0.0,25));
MOERTEL::MatrixMatrixAdd(*BWT,true,1.0,*tmp,0.0);
tmp->FillComplete();
Teuchos::RCP<Epetra_CrsMatrix> Zero12;
MOERTEL::SplitMatrix2x2(tmp,map1,map2,Zero11,Zero12,MT_,I22);
// build matrix Ahat11 = Atilde11 + M Atilde22 M^T
Teuchos::RCP<Epetra_CrsMatrix> Ahat11 = Teuchos::rcp(new Epetra_CrsMatrix(Copy,*map1,50,false));
MOERTEL::MatrixMatrixAdd(*Atilde11,false,1.0,*Ahat11,0.0);
Teuchos::RCP<Epetra_CrsMatrix> tmp1 = Teuchos::rcp(MOERTEL::MatMatMult(*Atilde22,false,*M,true,0));
Teuchos::RCP<Epetra_CrsMatrix> tmp2 = Teuchos::rcp(MOERTEL::MatMatMult(*M,false,*tmp1,false,0));
MOERTEL::MatrixMatrixAdd(*tmp2,false,-1.0,*Ahat11,1.0);
Ahat11->FillComplete();
Ahat11->OptimizeStorage();
Ahat11_ = Ahat11;
// build mlapi objects
Space space1(*map1);
Space space2(*map2);
mlapiAtilde11_.Reshape(space1,space1,Atilde11_.get(),false);
mlapiAhat11_.Reshape(space1,space1,Ahat11_.get(),false);
mlapiM_.Reshape(space2,space1,M_.get(),false);
mlapiMT_.Reshape(space1,space2,MT_.get(),false);
// build the smoother G(Atilde11)
G_.Reshape(mlapiAtilde11_,smoothertype,mlparams_);
iscomputed_ = true;
return true;
}
示例4: space
/*----------------------------------------------------------------------*
| compute the preconditioner (public) m.gee 03/06|
*----------------------------------------------------------------------*/
bool MOERTEL::Mortar_ML_Preconditioner::Compute()
{
iscomputed_ = false;
MLAPI::Init();
// get parameters
int maxlevels = mlparams_.get("max levels",10);
int maxcoarsesize = mlparams_.get("coarse: max size",10);
double* nullspace = mlparams_.get("null space: vectors",(double*)NULL);
int nsdim = mlparams_.get("null space: dimension",1);
int numpde = mlparams_.get("PDE equations",1);
double damping = mlparams_.get("aggregation: damping factor",1.33);
std::string eigenanalysis = mlparams_.get("eigen-analysis: type", "Anorm");
std::string smoothertype = mlparams_.get("smoother: type","symmetric Gauss-Seidel");
std::string coarsetype = mlparams_.get("coarse: type","Amesos-KLU");
std::string ptype = mlparams_.get("prolongator: type","mod_full");
// create the missing rowmap Arrmap_
Arrmap_ = Teuchos::rcp(MOERTEL::SplitMap(A_->RowMap(),*Annmap_));
Teuchos::RCP<Epetra_Map> map1 = Arrmap_;
Teuchos::RCP<Epetra_Map> map2 = Annmap_;
// split Atilde
//
// Atilde11 Atilde12
// Atilde21 Atilde22
//
Teuchos::RCP<Epetra_CrsMatrix> Atilde11;
Teuchos::RCP<Epetra_CrsMatrix> Atilde12;
Teuchos::RCP<Epetra_CrsMatrix> Atilde21;
Teuchos::RCP<Epetra_CrsMatrix> Atilde22;
MOERTEL::SplitMatrix2x2(Atilde_,map1,map2,Atilde11,Atilde12,Atilde21,Atilde22);
// build Atildesplit
//
// Atilde11 0
// 0 I
//
Atildesplit_ = Teuchos::rcp(new Epetra_CrsMatrix(Copy,A_->RowMap(),50,false));
MOERTEL::MatrixMatrixAdd(*Atilde11,false,1.0,*Atildesplit_,0.0);
Teuchos::RCP<Epetra_CrsMatrix> tmp = Teuchos::rcp(MOERTEL::PaddedMatrix(*map2,1.0,1));
tmp->FillComplete();
MOERTEL::MatrixMatrixAdd(*tmp,false,1.0,*Atildesplit_,1.0);
Atildesplit_->FillComplete();
Atildesplit_->OptimizeStorage();
// split A
//
// A11 A12
// A21 A22
//
Teuchos::RCP<Epetra_CrsMatrix> A11;
Teuchos::RCP<Epetra_CrsMatrix> A12;
Teuchos::RCP<Epetra_CrsMatrix> A21;
Teuchos::RCP<Epetra_CrsMatrix> A22;
MOERTEL::SplitMatrix2x2(A_,map1,map2,A11,A12,A21,A22);
// build Asplit_
//
// A11 0
// 0 A22
//
Asplit_ = Teuchos::rcp(new Epetra_CrsMatrix(Copy,A_->RowMap(),50,false));
MOERTEL::MatrixMatrixAdd(*A11,false,1.0,*Asplit_,0.0);
MOERTEL::MatrixMatrixAdd(*A22,false,1.0,*Asplit_,1.0);
Asplit_->FillComplete();
Asplit_->OptimizeStorage();
// build BWT (padded to full size)
//
// 0 Mr Dinv
// 0 I
//
Teuchos::RCP<Epetra_CrsMatrix> BWT = Teuchos::rcp(MOERTEL::MatMatMult(*B_,false,*WT_,false,10));
tmp = Teuchos::rcp(MOERTEL::PaddedMatrix(BWT->RowMap(),0.0,25));
MOERTEL::MatrixMatrixAdd(*BWT,false,1.0,*tmp,0.0);
tmp->FillComplete(BWT->DomainMap(),BWT->RangeMap());
BWT = tmp;
tmp = Teuchos::null;
// split BWT to obtain M = Mr Dinv
Teuchos::RCP<Epetra_CrsMatrix> Zero11;
Teuchos::RCP<Epetra_CrsMatrix> M;
Teuchos::RCP<Epetra_CrsMatrix> Zero21;
Teuchos::RCP<Epetra_CrsMatrix> I22;
MOERTEL::SplitMatrix2x2(BWT,map1,map2,Zero11,M,Zero21,I22);
// build matrix Ahat11 = Atilde11 - M Atilde22 M^T
Teuchos::RCP<Epetra_CrsMatrix> Ahat11 = Teuchos::rcp(new Epetra_CrsMatrix(Copy,*map1,50,false));
MOERTEL::MatrixMatrixAdd(*Atilde11,false,1.0,*Ahat11,0.0);
Teuchos::RCP<Epetra_CrsMatrix> tmp1 = Teuchos::rcp(MOERTEL::MatMatMult(*Atilde22,false,*M,true,10));
Teuchos::RCP<Epetra_CrsMatrix> tmp2 = Teuchos::rcp(MOERTEL::MatMatMult(*M,false,*tmp1,false,10));
MOERTEL::MatrixMatrixAdd(*tmp2,false,-1.0,*Ahat11,1.0);
Ahat11->FillComplete();
//.........这里部分代码省略.........