本文整理汇总了C++中Epetra_BlockMap类的典型用法代码示例。如果您正苦于以下问题:C++ Epetra_BlockMap类的具体用法?C++ Epetra_BlockMap怎么用?C++ Epetra_BlockMap使用的例子?那么, 这里精选的类代码示例或许可以为您提供帮助。
在下文中一共展示了Epetra_BlockMap类的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: getMyLIDs
Teuchos::Array<EpetraGlobalIndex> getMyLIDs(
const Epetra_BlockMap &map,
const Teuchos::ArrayView<const EpetraGlobalIndex> &selectedGIDs)
{
Teuchos::Array<EpetraGlobalIndex> sortedMyGIDs(map.MyGlobalElements(), map.MyGlobalElements() + map.NumMyElements());
std::sort(sortedMyGIDs.begin(), sortedMyGIDs.end());
Teuchos::Array<EpetraGlobalIndex> sortedSelectedGIDs(selectedGIDs);
std::sort(sortedSelectedGIDs.begin(), sortedSelectedGIDs.end());
Teuchos::Array<EpetraGlobalIndex> mySelectedGIDs;
std::set_intersection(sortedMyGIDs.begin(), sortedMyGIDs.end(),
sortedSelectedGIDs.begin(), sortedSelectedGIDs.end(),
std::back_inserter(mySelectedGIDs));
Teuchos::Array<EpetraGlobalIndex> result;
result.reserve(mySelectedGIDs.size());
std::transform(
mySelectedGIDs.begin(), mySelectedGIDs.end(),
std::back_inserter(result),
std::bind1st(std::mem_fun_ref(static_cast<int(Epetra_BlockMap::*)(EpetraGlobalIndex) const>(&Epetra_BlockMap::LID)), map));
return result;
}
示例2: ReportError
// Epetra_Export constructor for a Epetra_BlockMap object
Epetra_Export::Epetra_Export( const Epetra_BlockMap & sourceMap, const Epetra_BlockMap & targetMap)
: Epetra_Object("Epetra::Export"),
TargetMap_(targetMap),
SourceMap_(sourceMap),
NumSameIDs_(0),
NumPermuteIDs_(0),
PermuteToLIDs_(0),
PermuteFromLIDs_(0),
NumRemoteIDs_(0),
RemoteLIDs_(0),
NumExportIDs_(0),
ExportLIDs_(0),
ExportPIDs_(0),
NumSend_(0),
NumRecv_(0),
Distor_(0)
{
if(!targetMap.GlobalIndicesTypeMatch(sourceMap))
throw ReportError("Epetra_Export::Epetra_Export: GlobalIndicesTypeMatch failed", -1);
if(targetMap.GlobalIndicesInt())
#ifndef EPETRA_NO_32BIT_GLOBAL_INDICES
Construct<int>(sourceMap, targetMap);
#else
throw ReportError("Epetra_Export::Epetra_Export: ERROR, GlobalIndicesInt but no API for it.",-1);
#endif
else if(targetMap.GlobalIndicesLongLong())
示例3: selectedGIDs
Teuchos::Array<int>
Albany::NodeGIDsSolutionCullingStrategy::
selectedGIDs(const Epetra_BlockMap &sourceMap) const
{
Teuchos::Array<int> result;
{
Teuchos::Array<int> mySelectedGIDs;
// Subract 1 to convert exodus GIDs to our GIDs
for (int i=0; i<nodeGIDs_.size(); i++)
if (sourceMap.MyGID(nodeGIDs_[i] -1) ) mySelectedGIDs.push_back(nodeGIDs_[i] - 1);
const Epetra_Comm &comm = sourceMap.Comm();
{
int selectedGIDCount;
{
int mySelectedGIDCount = mySelectedGIDs.size();
comm.SumAll(&mySelectedGIDCount, &selectedGIDCount, 1);
}
result.resize(selectedGIDCount);
}
const int ierr = Epetra::GatherAllV(
comm,
mySelectedGIDs.getRawPtr(), mySelectedGIDs.size(),
result.getRawPtr(), result.size());
TEUCHOS_ASSERT(ierr == 0);
}
std::sort(result.begin(), result.end());
return result;
}
示例4: sourceGlobalElements
MapEpetra::MapEpetra ( const Epetra_BlockMap& blockMap, const Int offset, const Int maxId) :
M_commPtr(blockMap.Comm().Clone())
{
std::vector<Int> myGlobalElements;
Int* sourceGlobalElements ( blockMap.MyGlobalElements() );
Int const startIdOrig ( offset );
Int const endIdOrig ( startIdOrig + maxId );
const Int maxMyElements = std::min ( maxId, blockMap.NumMyElements() );
myGlobalElements.reserve ( maxMyElements );
//Sort MyGlobalElements to avoid a bug in Trilinos (9?) when multiplying two matrices (A * B^T)
std::sort ( myGlobalElements.begin(), myGlobalElements.end() );
// We consider that the source Map may not be ordered
for ( Int i (0); i < blockMap.NumMyElements(); ++i )
if ( sourceGlobalElements[i] < endIdOrig && sourceGlobalElements[i] >= startIdOrig )
{
myGlobalElements.push_back ( sourceGlobalElements[i] - offset );
}
createMap ( -1,
myGlobalElements.size(),
&myGlobalElements.front(),
*M_commPtr );
}
示例5: mapDowncast
Teuchos::RCP<Epetra_Map> mapDowncast(const Epetra_BlockMap &in)
{
if (in.ConstantElementSize() && in.ElementSize() == 1) {
return Teuchos::rcp(new Epetra_Map(static_cast<const Epetra_Map &>(in)));
}
return Teuchos::null;
}
示例6: super
VectorEpetra<T>::VectorEpetra ( Epetra_BlockMap const& emap )
:
super( emap.NumGlobalElements(), emap.NumMyElements() ),
M_emap( emap ),
M_vec( M_emap )
//M_destroy_vec_on_exit( true )
{
this->init( M_emap, true );
checkInvariants();
}
示例7: roundRobinMap
ArrayRCP<zgno_t> roundRobinMap(const Epetra_BlockMap &emap)
{
const Epetra_Comm &comm = emap.Comm();
int proc = comm.MyPID();
int nprocs = comm.NumProc();
zgno_t basegid = emap.MinAllGID();
zgno_t maxgid = emap.MaxAllGID();
size_t nglobalrows = emap.NumGlobalElements();
return roundRobinMapShared(proc, nprocs, basegid, maxgid, nglobalrows);
}
示例8: BlockMapToHandle
int BlockMapToHandle(FILE * handle, const Epetra_BlockMap & map) {
#ifndef EPETRA_NO_32BIT_GLOBAL_INDICES
if(map.GlobalIndicesInt()) {
return TBlockMapToHandle<int>(handle, map);
}
else
#endif
#ifndef EPETRA_NO_64BIT_GLOBAL_INDICES
if(map.GlobalIndicesLongLong()) {
return TBlockMapToHandle<long long>(handle, map);
}
else
#endif
throw "EpetraExt::BlockMapToHandle: GlobalIndices type unknown";
}
示例9: rcp
//EpetraMap_To_TpetraMap: takes in Epetra_Map object, converts it to its equivalent Tpetra::Map object,
//and returns an RCP pointer to this Tpetra::Map
Teuchos::RCP<const Tpetra_Map> Petra::EpetraMap_To_TpetraMap(const Epetra_BlockMap& epetraMap_,
const Teuchos::RCP<const Teuchos::Comm<int> >& commT_)
{
const std::size_t numElements = Teuchos::as<std::size_t>(epetraMap_.NumMyElements());
const auto indexBase = Teuchos::as<GO>(epetraMap_.IndexBase());
if (epetraMap_.DistributedGlobal() || epetraMap_.Comm().NumProc() == Teuchos::OrdinalTraits<int>::one()) {
Teuchos::Array<Tpetra_GO> indices(numElements);
int *epetra_indices = epetraMap_.MyGlobalElements();
for(LO i=0; i < numElements; i++)
indices[i] = epetra_indices[i];
const Tpetra::global_size_t computeGlobalElements = Teuchos::OrdinalTraits<Tpetra::global_size_t>::invalid();
return Teuchos::rcp(new Tpetra_Map(computeGlobalElements, indices, indexBase, commT_));
} else {
return Teuchos::rcp(new Tpetra_Map(numElements, indexBase, commT_, Tpetra::LocallyReplicated));
}
}
示例10: CalculateOffset
int BlockUtility::CalculateOffset(const Epetra_BlockMap & BaseMap)
{
if(BaseMap.GlobalIndicesInt())
return TCalculateOffset<int>(BaseMap);
else
throw "EpetraExt::BlockUtility::GenerateBlockMap: Global Indices not int.";
}
示例11: assert
int
LOCA::Epetra::AugmentedOp::blockMap2PointMap(const Epetra_BlockMap& BlockMap,
Epetra_Map*& PointMap) const
{
// Generate an Epetra_Map that has the same number and distribution of points
// as the input Epetra_BlockMap object. The global IDs for the output PointMap
// are computed by using the MaxElementSize of the BlockMap. For variable block
// sizes this will create gaps in the GID space, but that is OK for Epetra_Maps.
int MaxElementSize = BlockMap.MaxElementSize();
int PtNumMyElements = BlockMap.NumMyPoints();
int * PtMyGlobalElements = 0;
if (PtNumMyElements>0) PtMyGlobalElements = new int[PtNumMyElements];
int NumMyElements = BlockMap.NumMyElements();
int curID = 0;
for (int i=0; i<NumMyElements; i++) {
int StartID = BlockMap.GID(i)*MaxElementSize;
int ElementSize = BlockMap.ElementSize(i);
for (int j=0; j<ElementSize; j++) PtMyGlobalElements[curID++] = StartID+j;
}
assert(curID==PtNumMyElements); // Sanity test
PointMap = new Epetra_Map(-1, PtNumMyElements, PtMyGlobalElements, BlockMap.IndexBase(), BlockMap.Comm());
if (PtNumMyElements>0) delete [] PtMyGlobalElements;
if (!BlockMap.PointSameAs(*PointMap)) {EPETRA_CHK_ERR(-1);} // Maps not compatible
return(0);
}
示例12:
//==============================================================================
Epetra_BlockMap::Epetra_BlockMap(const Epetra_BlockMap& map)
: Epetra_Object(map.Label()),
BlockMapData_(map.BlockMapData_)
{
BlockMapData_->IncrementReferenceCount();
// This call appears to be unnecessary overhead. Removed 10-Aug-2004 maherou.
// GlobalToLocalSetup(); // Setup any information for making global index to local index translation fast.
}
示例13: TCalculateOffset
int_type BlockUtility::TCalculateOffset(const Epetra_BlockMap & BaseMap)
{
int_type MaxGID = (int_type) BaseMap.MaxAllGID64();
// int Offset = 1;
// while( Offset <= MaxGID ) Offset *= 10;
// return Offset;
return MaxGID+1;
}
示例14:
Epetra_DistObject::Epetra_DistObject(const Epetra_BlockMap& map)
: Epetra_Object("Epetra::DistObject"),
Map_(map),
Comm_(&Map_.Comm()),
DistributedGlobal_(map.DistributedGlobal()),
Exports_(0),
Imports_(0),
LenExports_(0),
LenImports_(0),
Sizes_(0)
{}
示例15: ReportError
//=============================================================================
Epetra_LongLongVector::Epetra_LongLongVector(const Epetra_BlockMap& map, bool zeroOut)
: Epetra_DistObject(map, "Epetra::LongLongVector"),
Values_(0),
UserAllocated_(false),
Allocated_(false)
{
if(!map.GlobalIndicesLongLong())
throw ReportError("Epetra_LongLongVector::Epetra_LongLongVector: cannot be called with non long long map index type", -1);
AllocateForCopy();
if(zeroOut) PutValue(0); // Zero out values
}