9#ifndef _fei_Matrix_Local_hpp_
10#define _fei_Matrix_Local_hpp_
12#include <fei_SharedPtr.hpp>
13#include <fei_MatrixGraph.hpp>
14#include <fei_Matrix.hpp>
15#include <fei_SparseRowGraph.hpp>
20class Matrix_Local :
public fei::Matrix {
22 Matrix_Local(fei::SharedPtr<fei::MatrixGraph> matrixGraph,
23 fei::SharedPtr<fei::SparseRowGraph> sparseRowGraph);
25 virtual ~Matrix_Local();
27 static fei::SharedPtr<fei::Matrix>
28 create_Matrix_Local(fei::SharedPtr<fei::MatrixGraph> matrixGraph,
35 int parameters(
const fei::ParameterSet& paramset);
39 int parameters(
int numParams,
const char*
const* paramStrings);
45 void setMatrixGraph(fei::SharedPtr<fei::MatrixGraph> matrixGraph);
60 int getRowLength(
int row,
int& length)
const;
63 int putScalar(
double scalar);
74 int copyOutRow(
int row,
int len,
double* coefs,
int* indices)
const;
88 int sumIn(
int numRows,
const int* rows,
89 int numCols,
const int* cols,
90 const double*
const* values,
105 int copyIn(
int numRows,
const int* rows,
106 int numCols,
const int* cols,
107 const double*
const* values,
125 int sumInFieldData(
int fieldID,
129 const double*
const* data,
149 int sumInFieldData(
int fieldID,
165 int sumIn(
int blockID,
int connectivityID,
166 const double*
const* values,
177 int multiply(fei::Vector* x,
187 int gatherFromOverlap(
bool accumulate =
true);
204 int writeToFile(
const char* filename,
205 bool matrixMarketFormat=
true);
219 int writeToStream(FEI_OSTREAM& ostrm,
220 bool matrixMarketFormat=
true);
238 const std::vector<int>& getRowNumbers()
const;
240 const std::vector<int>& getRowOffsets()
const;
242 const std::vector<int>& getColumnIndices()
const;
244 const std::vector<double>& getCoefs()
const;
247 int getRowIndex(
int rowNumber)
const;
249 int giveToMatrix(
int numRows,
const int* rows,
250 int numCols,
const int* cols,
251 const double*
const* values,
252 bool sumInto,
int format);
254 fei::SharedPtr<fei::MatrixGraph> matrixGraph_;
255 fei::SharedPtr<fei::SparseRowGraph> sparseRowGraph_;
256 std::vector<double> coefs_;
258 std::vector<double> work_data1D_;
259 std::vector<const double*> work_data2D_;
virtual fei::SharedPtr< fei::MatrixGraph > getMatrixGraph() const =0
virtual void setCommSizes()=0
virtual bool usingBlockEntryStorage()=0
virtual int getGlobalNumRows() const =0
virtual int getLocalNumRows() const =0
virtual const char * typeName()=0
virtual bool changedSinceMark()=0
virtual int globalAssemble()=0
virtual void markState()=0