int EpetraVector<T>::inputValues(int numIDs, const int* GIDs, const int* numValuesPerID, const double* values, bool accumulate) { 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); }
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); }
int Epetra_FEVector::inputNonlocalValue(int_type GID, double value, bool suminto, int vectorIndex) { return inputNonlocalValues(GID, 1, &value, suminto, vectorIndex); }