本文整理匯總了C++中EPETRA_CHK_ERR函數的典型用法代碼示例。如果您正苦於以下問題:C++ EPETRA_CHK_ERR函數的具體用法?C++ EPETRA_CHK_ERR怎麽用?C++ EPETRA_CHK_ERR使用的例子?那麽, 這裏精選的函數代碼示例或許可以為您提供幫助。
在下文中一共展示了EPETRA_CHK_ERR函數的15個代碼示例,這些例子默認根據受歡迎程度排序。您可以為喜歡或者感覺有用的代碼點讚,您的評價將有助於係統推薦出更棒的C++代碼示例。
示例1: DefineScaleForm
int AztecOO_StatusTestResNorm::DefineScaleForm(ScaleType TypeOfScaling, NormType TypeOfNorm,
Epetra_Vector * Weights,
double ScaleValue )
{
if (!firstcallDefineScaleForm_) EPETRA_CHK_ERR(-1); // We can only have this routine called once.
firstcallDefineScaleForm_ = false;
scaletype_ = TypeOfScaling;
scalenormtype_ = TypeOfNorm;
scaleweights_ = Weights;
scalevalue_ = ScaleValue;
// These conditions force the residual vector to be computed
if (scaletype_==NormOfInitRes && scalenormtype_!=TwoNorm) resvecrequired_ = true;
return(0);
}
示例2: EPETRA_CHK_ERR
int Epetra_SerialDistributor::CreateFromRecvs( const int & NumRemoteIDs,
const long long * RemoteGIDs,
const int * RemotePIDs,
bool Deterministic,
int & NumExportIDs,
long long *& ExportGIDs,
int *& ExportPIDs )
{
(void)NumRemoteIDs;
(void)RemoteGIDs;
(void)RemotePIDs;
(void)Deterministic;
(void)NumExportIDs;
(void)ExportGIDs;
(void)ExportPIDs;
EPETRA_CHK_ERR(-1); // This method should never be called
return(-1);
}
示例3: EPETRA_CHK_ERR
//=========================================================================
int Epetra_MapColoring::UnpackAndCombine(const Epetra_SrcDistObject & Source,
int NumImportIDs,
int * ImportLIDs,
int LenImports,
char * Imports,
int & SizeOfPacket,
Epetra_Distributor & Distor,
Epetra_CombineMode CombineMode,
const Epetra_OffsetIndex * Indexor )
{
(void)Source;
(void)LenImports;
(void)Imports;
(void)SizeOfPacket;
(void)Distor;
(void)Indexor;
int j;
if( CombineMode != Add
&& CombineMode != Zero
&& CombineMode != Insert
&& CombineMode != AbsMax )
EPETRA_CHK_ERR(-1); //Unsupported CombinedMode, will default to Zero
if (NumImportIDs<=0) return(0);
int * To = ElementColors_;
int * ptr;
// Unpack it...
ptr = (int *) Imports;
if (CombineMode==Add)
for (j=0; j<NumImportIDs; j++) To[ImportLIDs[j]] += ptr[j]; // Add to existing value
else if(CombineMode==Insert)
for (j=0; j<NumImportIDs; j++) To[ImportLIDs[j]] = ptr[j];
else if(CombineMode==AbsMax) {
for (j=0; j<NumImportIDs; j++) To[ImportLIDs[j]] = 0;
for (j=0; j<NumImportIDs; j++) To[ImportLIDs[j]] = EPETRA_MAX( To[ImportLIDs[j]],std::abs(ptr[j]));
}
return(0);
}
示例4: EPETRA_CHK_ERR
//=========================================================================
int Epetra_LinearProblemRedistor::UpdateRedistProblemValues(Epetra_LinearProblem * ProblemWithNewValues) {
if (!RedistProblemCreated_) EPETRA_CHK_ERR(-1); // This method can only be called after CreateRedistProblem()
Epetra_RowMatrix * OrigMatrix = ProblemWithNewValues->GetMatrix();
Epetra_MultiVector * OrigLHS = ProblemWithNewValues->GetLHS();
Epetra_MultiVector * OrigRHS = ProblemWithNewValues->GetRHS();
if (OrigMatrix==0) EPETRA_CHK_ERR(-2); // There is no matrix associated with this Problem
Epetra_CrsMatrix * RedistMatrix = dynamic_cast<Epetra_CrsMatrix *>(RedistProblem_->GetMatrix());
// Check if the tranpose should be create or not
if (ConstructTranspose_) {
EPETRA_CHK_ERR(Transposer_->UpdateTransposeValues(OrigMatrix));
}
else {
// If not, then just do the redistribution based on the the RedistMap
EPETRA_CHK_ERR(RedistMatrix->PutScalar(0.0));
// need to do this next step until we generalize the Import/Export ops for CrsMatrix
Epetra_CrsMatrix * OrigCrsMatrix = dynamic_cast<Epetra_CrsMatrix *>(OrigMatrix);
if (OrigCrsMatrix==0) EPETRA_CHK_ERR(-3); // Broken for a RowMatrix at this point
EPETRA_CHK_ERR(RedistMatrix->Export(*OrigCrsMatrix, *RedistExporter_, Add));
}
// Now redistribute the RHS and LHS if non-zero
if (OrigLHS!=0) {
EPETRA_CHK_ERR(RedistProblem_->GetLHS()->Export(*OrigLHS, *RedistExporter_, Add));
}
if (OrigRHS!=0) {
EPETRA_CHK_ERR(RedistProblem_->GetRHS()->Export(*OrigRHS, *RedistExporter_, Add));
}
return(0);
}
示例5: Solve
//=============================================================================
int Ifpack_CrsIct::Solve(bool Trans, const Epetra_MultiVector& X,
Epetra_MultiVector& Y) const {
//
// This function finds Y such that LDU Y = X or U(trans) D L(trans) Y = X for multiple RHS
//
if (X.NumVectors()!=Y.NumVectors()) EPETRA_CHK_ERR(-1); // Return error: X and Y not the same size
bool Upper = true;
bool UnitDiagonal = true;
Epetra_MultiVector * X1 = (Epetra_MultiVector *) &X;
Epetra_MultiVector * Y1 = (Epetra_MultiVector *) &Y;
U_->Solve(Upper, true, UnitDiagonal, *X1, *Y1);
Y1->Multiply(1.0, *D_, *Y1, 0.0); // y = D*y (D_ has inverse of diagonal)
U_->Solve(Upper, false, UnitDiagonal, *Y1, *Y1); // Solve Uy = y
return(0);
}
示例6: CreateTransposeLocal
//=========================================================================
bool EpetraExt::RowMatrix_Transpose::fwd()
{
Epetra_CrsMatrix * TempTransA1 = CreateTransposeLocal(*origObj_);
const Epetra_Export * TransposeExporter=0;
bool DeleteExporter = false;
if(TempTransA1->Exporter()) TransposeExporter = TempTransA1->Exporter();
else {
DeleteExporter=true;
TransposeExporter = new Epetra_Export(TransposeMatrix_->DomainMap(),TransposeMatrix_->RowMap());
}
TransposeMatrix_->PutScalar(0.0); // Zero out all values of the matrix
EPETRA_CHK_ERR(TransposeMatrix_->Export(*TempTransA1, *TransposeExporter, Add));
if(DeleteExporter) delete TransposeExporter;
delete TempTransA1;
return 0;
}
示例7: return
int EpetraVector<T>::GlobalAssemble(Epetra_CombineMode mode)
{
//In this method we need to gather all the non-local (overlapping) data
//that's been input on each processor, into the (probably) non-overlapping
//distribution defined by the map that 'this' vector was constructed with.
//We don't need to do anything if there's only one processor or if
//ignoreNonLocalEntries_ is true.
if (_vec->Map().Comm().NumProc() < 2 || ignoreNonLocalEntries_) {
return(0);
}
//First build a map that describes the data in nonlocalIDs_/nonlocalCoefs_.
//We'll use the arbitrary distribution constructor of Map.
Epetra_BlockMap sourceMap(-1, numNonlocalIDs_,
nonlocalIDs_, nonlocalElementSize_,
_vec->Map().IndexBase(), _vec->Map().Comm());
//Now build a vector to hold our nonlocalCoefs_, and to act as the source-
//vector for our import operation.
Epetra_MultiVector nonlocalVector(sourceMap, 1);
int i,j;
for(i=0; i<numNonlocalIDs_; ++i) {
for(j=0; j<nonlocalElementSize_[i]; ++j) {
nonlocalVector.ReplaceGlobalValue(nonlocalIDs_[i], j, 0,
nonlocalCoefs_[i][j]);
}
}
Epetra_Export exporter(sourceMap, _vec->Map());
EPETRA_CHK_ERR( _vec->Export(nonlocalVector, exporter, mode) );
destroyNonlocalData();
return(0);
}
示例8: return
int Epetra_FEVector::GlobalAssemble(Epetra_CombineMode mode,
bool reuse_map_and_exporter)
{
//In this method we need to gather all the non-local (overlapping) data
//that's been input on each processor, into the (probably) non-overlapping
//distribution defined by the map that 'this' vector was constructed with.
//We don't need to do anything if there's only one processor or if
//ignoreNonLocalEntries_ is true.
if (Map().Comm().NumProc() < 2 || ignoreNonLocalEntries_) {
return(0);
}
if (nonlocalMap_ == 0 || !reuse_map_and_exporter) {
createNonlocalMapAndExporter<int_type>();
}
Epetra_MultiVector& nonlocalVector = *nonlocalVector_;
nonlocalVector.PutScalar(0.0);
int elemSize = Map().MaxElementSize();
for(int vi=0; vi<NumVectors(); ++vi) {
for(size_t i=0; i<nonlocalIDs<int_type>().size(); ++i) {
for(int j=0; j<nonlocalElementSize_[i]; ++j) {
nonlocalVector.ReplaceGlobalValue(nonlocalIDs<int_type>()[i], j, vi,
nonlocalCoefs_[vi][i*elemSize+j]);
}
}
}
EPETRA_CHK_ERR( Export(nonlocalVector, *exporter_, mode) );
if (reuse_map_and_exporter) {
zeroNonlocalData<int_type>();
}
else {
destroyNonlocalData();
}
return(0);
}
示例9: ReportError
int Epetra_BlockMap::RemoteIDList(int NumIDs, const long long * GIDList,
int * PIDList, int * LIDList,
int * SizeList) const
{
if(!BlockMapData_->GlobalIndicesLongLong_)
throw ReportError("Epetra_BlockMap::RemoteIDList ERROR, Can't call long long* version for non long long* map.",-1);
if (BlockMapData_->Directory_ == NULL) {
BlockMapData_->Directory_ = Comm().CreateDirectory(*this);
}
Epetra_Directory* directory = BlockMapData_->Directory_;
if (directory == NULL) {
return(-1);
}
EPETRA_CHK_ERR( directory->GetDirectoryEntries(*this, NumIDs, GIDList,
PIDList, LIDList, SizeList) );
return(0);
}
示例10: libmesh_assert
int EpetraVector<T>::inputValues(int numIDs,
const int * GIDs,
const int * numValuesPerID,
const double * values,
bool accumulate)
{
if (accumulate) {
libmesh_assert(last_edit == 0 || last_edit == 2);
last_edit = 2;
} else {
libmesh_assert(last_edit == 0 || last_edit == 1);
last_edit = 1;
}
int offset=0;
for(int i=0; i<numIDs; ++i) {
int numValues = numValuesPerID[i];
if (_vec->Map().MyGID(GIDs[i])) {
if (accumulate) {
for(int j=0; j<numValues; ++j) {
_vec->SumIntoGlobalValue(GIDs[i], j, 0, values[offset+j]);
}
}
else {
for(int j=0; j<numValues; ++j) {
_vec->ReplaceGlobalValue(GIDs[i], j, 0, values[offset+j]);
}
}
}
else {
if (!ignoreNonLocalEntries_) {
EPETRA_CHK_ERR( inputNonlocalValues(GIDs[i], numValues,
&(values[offset]), accumulate) );
}
}
offset += numValues;
}
return(0);
}
示例11: ConstructRedistributeExporter
//==============================================================================
int LinearProblem_CrsSingletonFilter::ConstructRedistributeExporter(Epetra_Map * SourceMap, Epetra_Map * TargetMap,
Epetra_Export * & RedistributeExporter,
Epetra_Map * & RedistributeMap) {
int IndexBase = SourceMap->IndexBase();
if (IndexBase!=TargetMap->IndexBase()) EPETRA_CHK_ERR(-1);
const Epetra_Comm & Comm = TargetMap->Comm();
int TargetNumMyElements = TargetMap->NumMyElements();
int SourceNumMyElements = SourceMap->NumMyElements();
// ContiguousTargetMap has same number of elements per PE as TargetMap, but uses contigious indexing
Epetra_Map ContiguousTargetMap(-1, TargetNumMyElements, IndexBase,Comm);
// Same for ContiguousSourceMap
Epetra_Map ContiguousSourceMap(-1, SourceNumMyElements, IndexBase, Comm);
assert(ContiguousSourceMap.NumGlobalElements()==ContiguousTargetMap.NumGlobalElements());
// Now create a vector that contains the global indices of the Source Epetra_MultiVector
Epetra_IntVector SourceIndices(View, ContiguousSourceMap, SourceMap->MyGlobalElements());
// Create an exporter to send the SourceMap global IDs to the target distribution
Epetra_Export Exporter(ContiguousSourceMap, ContiguousTargetMap);
// Create a vector to catch the global IDs in the target distribution
Epetra_IntVector TargetIndices(ContiguousTargetMap);
TargetIndices.Export(SourceIndices, Exporter, Insert);
// Create a new map that describes how the Source MultiVector should be laid out so that it has
// the same number of elements on each processor as the TargetMap
RedistributeMap = new Epetra_Map(-1, TargetNumMyElements, TargetIndices.Values(), IndexBase, Comm);
// This exporter will finally redistribute the Source MultiVector to the same layout as the TargetMap
RedistributeExporter = new Epetra_Export(*SourceMap, *RedistributeMap);
return(0);
}
示例12: ConstructRedistributeExporter
//==============================================================================
int Epetra_CrsSingletonFilter::ConstructRedistributeExporter(Epetra_Map * SourceMap, Epetra_Map * TargetMap,
Epetra_Export * & RedistributeExporter,
Epetra_Map * & RedistributeMap) {
int IndexBase = SourceMap->IndexBase(); // CJ TODO FIXME long long
if (IndexBase!=TargetMap->IndexBase()) EPETRA_CHK_ERR(-1);
const Epetra_Comm & Comm = TargetMap->Comm();
int TargetNumMyElements = TargetMap->NumMyElements();
int SourceNumMyElements = SourceMap->NumMyElements();
// ContiguousTargetMap has same number of elements per PE as TargetMap, but uses contigious indexing
Epetra_Map ContiguousTargetMap(-1, TargetNumMyElements, IndexBase,Comm);
// Same for ContiguousSourceMap
Epetra_Map ContiguousSourceMap(-1, SourceNumMyElements, IndexBase, Comm);
assert(ContiguousSourceMap.NumGlobalElements64()==ContiguousTargetMap.NumGlobalElements64());
// Now create a vector that contains the global indices of the Source Epetra_MultiVector
#ifndef EPETRA_NO_32BIT_GLOBAL_INDICES
Epetra_IntVector *SourceIndices = 0;
Epetra_IntVector *TargetIndices = 0;
#endif
#ifndef EPETRA_NO_64BIT_GLOBAL_INDICES
Epetra_LongLongVector *SourceIndices_LL = 0;
Epetra_LongLongVector *TargetIndices_LL = 0;
#endif
if(SourceMap->GlobalIndicesInt())
#ifndef EPETRA_NO_32BIT_GLOBAL_INDICES
SourceIndices = new Epetra_IntVector(View, ContiguousSourceMap, SourceMap->MyGlobalElements());
#else
throw "Epetra_CrsSingletonFilter::ConstructRedistributeExporter: GlobalIndicesInt but no int API";
#endif
else if(SourceMap->GlobalIndicesLongLong())
示例13: Multiply
//=============================================================================
int Ifpack_CrsIct::Multiply(bool Trans, const Epetra_MultiVector& X,
Epetra_MultiVector& Y) const {
//
// This function finds X such that LDU Y = X or U(trans) D L(trans) Y = X for multiple RHS
//
if (X.NumVectors()!=Y.NumVectors()) EPETRA_CHK_ERR(-1); // Return error: X and Y not the same size
//bool Upper = true;
//bool Lower = false;
//bool UnitDiagonal = true;
Epetra_MultiVector * X1 = (Epetra_MultiVector *) &X;
Epetra_MultiVector * Y1 = (Epetra_MultiVector *) &Y;
U_->Multiply(false, *X1, *Y1);
Y1->Update(1.0, *X1, 1.0); // Y1 = Y1 + X1 (account for implicit unit diagonal)
Y1->ReciprocalMultiply(1.0, *D_, *Y1, 0.0); // y = D*y (D_ has inverse of diagonal)
Epetra_MultiVector Y1temp(*Y1); // Need a temp copy of Y1
U_->Multiply(true, Y1temp, *Y1);
Y1->Update(1.0, Y1temp, 1.0); // (account for implicit unit diagonal)
return(0);
}
示例14: ReportError
int Epetra_FEVector::inputValues(int numIDs,
const int_type* GIDs,
const int* numValuesPerID,
const double* values,
bool suminto,
int vectorIndex)
{
if(!Map().template GlobalIndicesIsType<int_type>())
throw ReportError("Epetra_FEVector::inputValues mismatch between argument types (int/long long) and map type.", -1);
int offset=0;
for(int i=0; i<numIDs; ++i) {
int numValues = numValuesPerID[i];
if (Map().MyGID(GIDs[i])) {
if (suminto) {
for(int j=0; j<numValues; ++j) {
SumIntoGlobalValue(GIDs[i], j, vectorIndex, values[offset+j]);
}
}
else {
for(int j=0; j<numValues; ++j) {
ReplaceGlobalValue(GIDs[i], j, vectorIndex, values[offset+j]);
}
}
}
else {
if (!ignoreNonLocalEntries_) {
EPETRA_CHK_ERR( inputNonlocalValues(GIDs[i], numValues,
&(values[offset]), suminto,
vectorIndex) );
}
}
offset += numValues;
}
return(0);
}
示例15: EPETRA_CHK_ERR
//=============================================================================
int Ifpack_CrsRiluk::Multiply(bool Trans, const Epetra_MultiVector& X,
Epetra_MultiVector& Y) const {
//
// This function finds X such that LDU Y = X or U(trans) D L(trans) Y = X for multiple RHS
//
// First generate X and Y as needed for this function
Teuchos::RefCountPtr<Epetra_MultiVector> X1;
Teuchos::RefCountPtr<Epetra_MultiVector> Y1;
EPETRA_CHK_ERR(GenerateXY(Trans, X, Y, &X1, &Y1));
#ifdef IFPACK_FLOPCOUNTERS
Epetra_Flops * counter = this->GetFlopCounter();
if (counter!=0) {
L_->SetFlopCounter(*counter);
Y1->SetFlopCounter(*counter);
U_->SetFlopCounter(*counter);
}
#endif
if (!Trans) {
EPETRA_CHK_ERR(U_->Multiply(Trans, *X1, *Y1)); //
EPETRA_CHK_ERR(Y1->Update(1.0, *X1, 1.0)); // Y1 = Y1 + X1 (account for implicit unit diagonal)
EPETRA_CHK_ERR(Y1->ReciprocalMultiply(1.0, *D_, *Y1, 0.0)); // y = D*y (D_ has inverse of diagonal)
Epetra_MultiVector Y1temp(*Y1); // Need a temp copy of Y1
EPETRA_CHK_ERR(L_->Multiply(Trans, Y1temp, *Y1));
EPETRA_CHK_ERR(Y1->Update(1.0, Y1temp, 1.0)); // (account for implicit unit diagonal)
if (IsOverlapped_) {EPETRA_CHK_ERR(Y.Export(*Y1,*L_->Exporter(), OverlapMode_));} // Export computed Y values if needed
}
else {
EPETRA_CHK_ERR(L_->Multiply(Trans, *X1, *Y1));
EPETRA_CHK_ERR(Y1->Update(1.0, *X1, 1.0)); // Y1 = Y1 + X1 (account for implicit unit diagonal)
EPETRA_CHK_ERR(Y1->ReciprocalMultiply(1.0, *D_, *Y1, 0.0)); // y = D*y (D_ has inverse of diagonal)
Epetra_MultiVector Y1temp(*Y1); // Need a temp copy of Y1
EPETRA_CHK_ERR(U_->Multiply(Trans, Y1temp, *Y1));
EPETRA_CHK_ERR(Y1->Update(1.0, Y1temp, 1.0)); // (account for implicit unit diagonal)
if (IsOverlapped_) {EPETRA_CHK_ERR(Y.Export(*Y1,*L_->Exporter(), OverlapMode_));}
}
return(0);
}