9#ifndef _fei_Vector_Impl_hpp_
10#define _fei_Vector_Impl_hpp_
30#define fei_file "fei_Vector_Impl.hpp"
62 T* vector,
int numLocalEqns,
63 bool isSolutionVector=
false,
64 bool deleteVector=
false);
101 int sumIn(
int numValues,
const int* indices,
const double* values,
107 int copyIn(
int numValues,
const int* indices,
const double* values,
169 bool matrixMarketFormat=
true);
172 bool matrixMarketFormat=
true);
191 int vectorIndex=0)
const;
195 int copyOut_FE(
int nodeNumber,
int dofOffset,
double& value);
200 const double* values,
207 int vectorIndex=0)
const;
212 const int* nodeNumbers,
213 const int* numIndicesPerNode,
215 const double* values);
231 T* vector,
int numLocalEqns,
232 bool isSolutionVector,
254 os <<
dbgprefix_<<
" ctor, numLocalEqns="<<numLocalEqns
258 std::vector<int> idTypes;
259 vecSpace->getIDTypes(idTypes);
260 std::vector<int> eqns;
261 std::vector<double> zeros;
262 for(
size_t i=0; i<idTypes.size(); ++i) {
263 int idType = idTypes[i];
267 iter = idMap.begin(), iterEnd = idMap.end();
268 for(; iter!=iterEnd; ++iter) {
269 int ID = iter->first;
271 vecSpace->getGlobalIndex(idType, ID, eqn);
272 int ndof = vecSpace->getNumDegreesOfFreedom(idType, ID);
274 zeros.resize(ndof, 0.0);
275 for(
int j=0; j<ndof; ++j) eqns[j] = eqn+j;
276 if (!isSolutionVector) {
277 sumIn(ndof, &eqns[0], &zeros[0]);
280 copyIn(ndof, &eqns[0], &zeros[0]);
287 for(
size_t i=0; i<remoteVecs.size(); ++i) {
288 remoteVecs[i]->clear();
309 if (scalar != 0.0)
return(-1);
376 const int* indices,
const double* values,
384 return(
giveToVector(numValues, indices, values,
true, vectorIndex) );
390 const int* indices,
const double* values,
398 return(
giveToVector(numValues, indices, values,
false, vectorIndex) );
405 const double* values,
412 for(
int i=0; i<numValues; ++i) {
413 os <<
"{"<<indices[i]<<
","<<values[i]<<
"} ";
419 numValues, indices, values,
432 int vectorIndex)
const
440 numValues, indices, values,
458 return(
assembleFieldData(fieldID, idType, numIDs, IDs, data,
true, vectorIndex));
475 return(
assembleFieldData(fieldID, idType, numIDs, IDs, data,
false, vectorIndex));
518 bool matrixMarketFormat)
526 bool matrixMarketFormat)
536 int vectorIndex)
const
551 const int* nodeNumbers,
552 const int* numIndicesPerNode,
554 const double* values)
557 numNodes, nodeNumbers,
558 numIndicesPerNode, dof_ids, values) );
562#define fei_file "unknown_file"
FEI_OSTREAM * output_stream_
OutputLevel output_level_
map_type & getSharedIDs()
std::map< T, std::set< int > > map_type
int copyInFieldData(int fieldID, int idType, int numIDs, const int *IDs, const double *data, int vectorIndex=0)
int copyOut(int numValues, const int *indices, double *values, int vectorIndex=0) const
int copyOutOfUnderlyingVector(int numValues, const int *indices, double *values, int vectorIndex=0) const
int copyIn(int numValues, const int *indices, const double *values, int vectorIndex=0)
int sumInFieldData(int fieldID, int idType, int numIDs, const int *IDs, const double *data, int vectorIndex=0)
int gatherFromOverlap(bool accumulate=true)
int copyOut_FE(int nodeNumber, int dofOffset, double &value)
int sumIntoFEVector(int blockID, int connOffset, int numNodes, const int *nodeNumbers, const int *numIndicesPerNode, const int *dof_ids, const double *values)
int update(double a, const fei::Vector *x, double b)
int copyOutFieldData(int fieldID, int idType, int numIDs, const int *IDs, double *data, int vectorIndex=0)
const char * typeName() const
void setVectorSpace(fei::SharedPtr< fei::VectorSpace > vecSpace)
Vector_Impl(fei::SharedPtr< fei::VectorSpace > vecSpace, T *vector, int numLocalEqns, bool isSolutionVector=false, bool deleteVector=false)
const T * getUnderlyingVector() const
int copyInFieldDataLocalIDs(int fieldID, int idType, int numIDs, const int *localIDs, const double *data, int vectorIndex=0)
int sumIn(int numValues, const int *indices, const double *values, int vectorIndex=0)
int putScalar(double scalar)
int writeToFile(const char *filename, bool matrixMarketFormat=true)
int giveToUnderlyingVector(int numValues, const int *indices, const double *values, bool sumInto=true, int vectorIndex=0)
fei::SharedPtr< fei::VectorSpace > getVectorSpace() const
void setUnderlyingVector(T *vec)
int writeToStream(FEI_OSTREAM &ostrm, bool matrixMarketFormat=true)
T * getUnderlyingVector()
virtual int gatherFromOverlap(bool accumulate=true)
int assembleFieldDataLocalIDs(int fieldID, int idType, int numIDs, const int *localIDs, const double *data, bool sumInto=true, int vectorIndex=0)
int copyOut(int numValues, const int *indices, double *values, int vectorIndex=0) const
int giveToVector(int numValues, const int *indices, const double *values, bool sumInto=true, int vectorIndex=0)
virtual int writeToFile(const char *filename, bool matrixMarketFormat=true)
Vector_core(fei::SharedPtr< fei::VectorSpace > vecSpace, int numLocalEqns)
int firstLocalOffset() const
void set_vector_space(fei::SharedPtr< fei::VectorSpace > vspace)
virtual int writeToStream(FEI_OSTREAM &ostrm, bool matrixMarketFormat=true)
virtual int scatterToOverlap()
virtual int copyOutFieldData(int fieldID, int idType, int numIDs, const int *IDs, double *data, int vectorIndex=0)
std::vector< CSVec * > & remotelyOwned()
int assembleFieldData(int fieldID, int idType, int numIDs, const int *IDs, const double *data, bool sumInto=true, int vectorIndex=0)
fei::SharedPtr< fei::VectorSpace > get_vector_space() const
void setFEVector(bool flag)
int localProc(MPI_Comm comm)
void set_values(CSVec &vec, double scalar)
int numProcs(MPI_Comm comm)
static int update(T *vec, double a, const T *x, double b)
static const char * typeName()
static int putValuesIn(T *vec, int firstLocalOffset, int numValues, const int *indices, const double *values, bool sum_into, bool isSolnVector=false, int vectorIndex=0)
static int setValues(T *vec, int firstLocalOffset, double scalar, bool isSolnVector=false)
static int copyOut(T *vec, int firstLocalOffset, int numValues, const int *indices, double *values, bool isSolnVector=false, int vectorIndex=0)
static const char * typeName()
static int copyOut(T *, int, int, double &)
static int sumInElemVector(T *, int, int, int, const int *, const int *, const int *, const double *)