本文整理汇总了C++中Epetra_BlockMap::GlobalIndicesInt方法的典型用法代码示例。如果您正苦于以下问题:C++ Epetra_BlockMap::GlobalIndicesInt方法的具体用法?C++ Epetra_BlockMap::GlobalIndicesInt怎么用?C++ Epetra_BlockMap::GlobalIndicesInt使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类Epetra_BlockMap
的用法示例。
在下文中一共展示了Epetra_BlockMap::GlobalIndicesInt方法的5个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: 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())
示例2: CalculateOffset
int BlockUtility::CalculateOffset(const Epetra_BlockMap & BaseMap)
{
if(BaseMap.GlobalIndicesInt())
return TCalculateOffset<int>(BaseMap);
else
throw "EpetraExt::BlockUtility::GenerateBlockMap: Global Indices not int.";
}
示例3: 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";
}
示例4: Construct
//.........这里部分代码省略.........
// Test for distributed cases
int ierr = 0;
if (sourceMap.DistributedGlobal()) {
if (NumExportIDs_>0) ExportPIDs_ = new int[NumExportIDs_];
ierr = targetMap.RemoteIDList(NumExportIDs_, ExportGIDs, ExportPIDs_, 0); // Get remote PIDs
if( ierr ) throw ReportError("Error in Epetra_BlockMap::RemoteIDList", ierr);
//Get rid of IDs not in Target Map
if(NumExportIDs_>0) {
int cnt = 0;
for( i = 0; i < NumExportIDs_; ++i )
if( ExportPIDs_[i] == -1 ) ++cnt;
if( cnt ) {
int_type * NewExportGIDs = 0;
int * NewExportPIDs = 0;
int * NewExportLIDs = 0;
int cnt1 = NumExportIDs_-cnt;
if (cnt1) {
NewExportGIDs = new int_type[cnt1];
NewExportPIDs = new int[cnt1];
NewExportLIDs = new int[cnt1];
}
cnt = 0;
for( i = 0; i < NumExportIDs_; ++i )
if( ExportPIDs_[i] != -1 ) {
NewExportGIDs[cnt] = ExportGIDs[i];
NewExportPIDs[cnt] = ExportPIDs_[i];
NewExportLIDs[cnt] = ExportLIDs_[i];
++cnt;
}
assert(cnt==cnt1); // Sanity test
NumExportIDs_ = cnt;
delete [] ExportGIDs;
delete [] ExportPIDs_;
delete [] ExportLIDs_;
ExportGIDs = NewExportGIDs;
ExportPIDs_ = NewExportPIDs;
ExportLIDs_ = NewExportLIDs;
ReportError("Warning in Epetra_Export: Source IDs not found in Target Map (Do you want to export from subset of Source Map?)", 1 );
}
}
//Make sure Export IDs are ordered by processor
Epetra_Util util;
if(targetMap.GlobalIndicesLongLong()) {
// FIXME (mfh 11 Jul 2013) This breaks ANSI aliasing rules, if
// int_type != long long. On some compilers, it results in
// warnings such as this: "dereferencing type-punned pointer
// will break strict-aliasing rules".
util.Sort(true,NumExportIDs_,ExportPIDs_,0,0,1,&ExportLIDs_, 1, (long long **)&ExportGIDs);
}
else if(targetMap.GlobalIndicesInt()) {
int* ptrs[2] = {ExportLIDs_, (int*) ExportGIDs};
util.Sort(true,NumExportIDs_,ExportPIDs_,0,0, 2,&ptrs[0], 0, 0);
}
else {
throw ReportError("Epetra_Import::Epetra_Import: GlobalIndices Internal Error", -1);
}
Distor_ = sourceMap.Comm().CreateDistributor();
// Construct list of exports that calling processor needs to send as a result
// of everyone asking for what it needs to receive.
ierr = Distor_->CreateFromSends( NumExportIDs_, ExportPIDs_, true, NumRemoteIDs_);
if (ierr!=0) throw ReportError("Error in Epetra_Distributor.CreateFromSends()", ierr);
// Use comm plan with ExportGIDs to find out who is sending to us and
// get proper ordering of GIDs for remote entries
// (that we will convert to LIDs when done).
if (NumRemoteIDs_>0) RemoteLIDs_ = new int[NumRemoteIDs_]; // Allocate space for LIDs in target that are
// going to get something from off-processor.
char * cRemoteGIDs = 0; //Do will alloc memory for this object
int LenCRemoteGIDs = 0;
ierr = Distor_->Do(reinterpret_cast<char *> (ExportGIDs),
sizeof( int_type ),
LenCRemoteGIDs,
cRemoteGIDs);
if (ierr) throw ReportError("Error in Epetra_Distributor.Do()", ierr);
int_type * RemoteGIDs = reinterpret_cast<int_type*>(cRemoteGIDs);
// Remote IDs come in as GIDs, convert to LIDs
for (i=0; i< NumRemoteIDs_; i++) {
RemoteLIDs_[i] = targetMap.LID(RemoteGIDs[i]);
//NumRecv_ += targetMap.ElementSize(RemoteLIDs_[i]); // Count total number of entries to receive
NumRecv_ += targetMap.MaxElementSize(); // Count total number of entries to receive (currently need max)
}
if (LenCRemoteGIDs>0) delete [] cRemoteGIDs;
}
if (NumExportIDs_>0) delete [] ExportGIDs;
if (NumTargetIDs>0) delete [] TargetGIDs;
if (NumSourceIDs>0) delete [] SourceGIDs;
return;
}
示例5: Construct
//.........这里部分代码省略.........
int cnt = 0;
for( i = 0; i < NumRemoteIDs_; ++i )
if( RemotePIDs[i] == -1 ) ++cnt;
if( cnt ) {
if( NumRemoteIDs_-cnt ) {
int_type * NewRemoteGIDs = new int_type[NumRemoteIDs_-cnt];
int * NewRemotePIDs = new int[NumRemoteIDs_-cnt];
int * NewRemoteLIDs = new int[NumRemoteIDs_-cnt];
cnt = 0;
for( i = 0; i < NumRemoteIDs_; ++i )
if( RemotePIDs[i] != -1 ) {
NewRemoteGIDs[cnt] = RemoteGIDs[i];
NewRemotePIDs[cnt] = RemotePIDs[i];
NewRemoteLIDs[cnt] = targetMap.LID(RemoteGIDs[i]);
++cnt;
}
NumRemoteIDs_ = cnt;
delete [] RemoteGIDs;
delete [] RemotePIDs;
delete [] RemoteLIDs_;
RemoteGIDs = NewRemoteGIDs;
RemotePIDs = NewRemotePIDs;
RemoteLIDs_ = NewRemoteLIDs;
ReportError("Warning in Epetra_Import: Target IDs not found in Source Map (Do you want to import to subset of Target Map?)", 1);
}
else { //valid RemoteIDs empty
NumRemoteIDs_ = 0;
delete [] RemoteGIDs;
RemoteGIDs = 0;
delete [] RemotePIDs;
RemotePIDs = 0;
}
}
}
//Sort Remote IDs by processor so DoReverses will work
Epetra_Util util;
if(targetMap.GlobalIndicesLongLong())
{
util.Sort(true,NumRemoteIDs_,RemotePIDs,0,0, 1,&RemoteLIDs_, 1,(long long**)&RemoteGIDs);
}
else if(targetMap.GlobalIndicesInt())
{
int* ptrs[2] = {RemoteLIDs_, (int*)RemoteGIDs};
util.Sort(true,NumRemoteIDs_,RemotePIDs,0,0,2,&ptrs[0], 0, 0);
}
else
{
throw ReportError("Epetra_Import::Epetra_Import: GlobalIndices Internal Error", -1);
}
Distor_ = sourceMap.Comm().CreateDistributor();
// Construct list of exports that calling processor needs to send as a result
// of everyone asking for what it needs to receive.
bool Deterministic = true;
int_type* tmp_ExportLIDs; //Export IDs come in as GIDs
ierr = Distor_->CreateFromRecvs( NumRemoteIDs_, RemoteGIDs, RemotePIDs,
Deterministic, NumExportIDs_, tmp_ExportLIDs, ExportPIDs_ );
if (ierr!=0) throw ReportError("Error in Epetra_Distributor.CreateFromRecvs()", ierr);
// Export IDs come in as GIDs, convert to LIDs
if(targetMap.GlobalIndicesLongLong())
{
ExportLIDs_ = new int[NumExportIDs_];
for (i=0; i< NumExportIDs_; i++) {
if (ExportPIDs_[i] < 0) throw ReportError("targetMap requested a GID that is not in the sourceMap.", -1);
ExportLIDs_[i] = sourceMap.LID(tmp_ExportLIDs[i]);
NumSend_ += sourceMap.MaxElementSize(); // Count total number of entries to send (currently need max)
}
delete[] tmp_ExportLIDs;
}
else if(targetMap.GlobalIndicesInt())
{
for (i=0; i< NumExportIDs_; i++) {
if (ExportPIDs_[i] < 0) throw ReportError("targetMap requested a GID that is not in the sourceMap.", -1);
tmp_ExportLIDs[i] = sourceMap.LID(tmp_ExportLIDs[i]);
NumSend_ += sourceMap.MaxElementSize(); // Count total number of entries to send (currently need max)
}
ExportLIDs_ = reinterpret_cast<int *>(tmp_ExportLIDs); // Can't reach here if tmp_ExportLIDs is long long.
}
else
{
throw ReportError("Epetra_Import::Epetra_Import: GlobalIndices Internal Error", -1);
}
}
if( NumRemoteIDs_>0 ) delete [] RemoteGIDs;
if( NumRemoteIDs_>0 ) delete [] RemotePIDs;
if (NumTargetIDs>0) delete [] TargetGIDs;
if (NumSourceIDs>0) delete [] SourceGIDs;
return;
}