9#ifndef _fei_VectorReducer_hpp_
10#define _fei_VectorReducer_hpp_
12#include <fei_iosfwd.hpp>
13#include <fei_VectorSpace.hpp>
14#include <fei_Reducer.hpp>
15#include <fei_Vector.hpp>
18#define fei_file "fei_VectorReducer.hpp"
20#include <fei_ErrMacros.hpp>
30 bool isSolutionVector=
false);
33 virtual ~VectorReducer();
42 const char* typeName()
const {
return(target_->
typeName()); }
56 int scatterToOverlap();
63 int gatherFromOverlap(
bool accumulate =
true);
66 int putScalar(
double scalar);
71 int sumIn(
int numValues,
const int* indices,
const double* values,
77 int copyIn(
int numValues,
const int* indices,
const double* values,
96 int sumInFieldData(
int fieldID,
109 int copyInFieldData(
int fieldID,
116 int copyInFieldDataLocalIDs(
int fieldID,
129 int copyOutFieldData(
int fieldID,
136 int writeToFile(
const char* filename,
137 bool matrixMarketFormat=
true);
139 int writeToStream(FEI_OSTREAM& ostrm,
140 bool matrixMarketFormat=
true);
142 int copyOut(
int numValues,
145 int vectorIndex=0)
const;
150 int copyOut_FE(
int nodeNumber,
int dofOffset,
double& value);
152 int giveToUnderlyingVector(
int numValues,
154 const double* values,
158 int sumIntoFEVector(
int blockID,
161 const int* nodeNumbers,
162 const int* numIndicesPerNode,
163 const double* values);
virtual const char * typeName() const =0
virtual void setCommSizes()=0
virtual void setVectorSpace(fei::SharedPtr< fei::VectorSpace > vecSpace)=0
virtual fei::SharedPtr< fei::VectorSpace > getVectorSpace() const =0