9 #ifndef _fei_MatrixGraph_hpp_
10 #define _fei_MatrixGraph_hpp_
12 #include <fei_macros.hpp>
13 #include <fei_SharedPtr.hpp>
14 #include <fei_VectorSpace.hpp>
15 #include <fei_Reducer.hpp>
16 #include <snl_fei_Constraint.hpp>
17 #include <fei_Record.hpp>
18 #include <fei_SparseRowGraph.hpp>
23 class ConnectivityBlock;
48 const char* name) = 0;
51 enum { REDUCED_INDICES = 0,
52 UNREDUCED_INDICES = 1,
53 BLOCK_ENTRY_GRAPH = 2,
54 POINT_ENTRY_GRAPH = 3};
170 const int* numFieldsPerID,
171 const int* fieldIDs) = 0;
198 const int* numFieldsPerID,
199 const int* fieldIDs) = 0;
224 int numConnectivityLists,
226 bool diagonal=
false) = 0;
252 bool diagonal=
false) = 0;
275 int numConnectivityLists,
277 int colPatternID) = 0;
293 const int* connectedIdentifiers) = 0;
311 const int* rowConnectedIdentifiers,
312 const int* colConnectedIdentifiers) = 0;
327 const int* connectedIdentifiers) = 0;
344 const int* rowConnectedIdentifiers,
346 const int* colConnectedIdentifiers) = 0;
366 const int* rowOffsets,
367 const int* packedColumnIDs) = 0;
390 const int* rowOffsets,
391 const int* packedColumnIDs) = 0;
410 const int* rowLengths,
411 const int*
const* columnIDs) = 0;
416 int constraintIDType,
420 const int* fieldIDs) = 0;
425 int constraintIDType,
429 const int* fieldIDs) = 0;
438 int offsetIntoSlaveField,
439 const double* weights,
440 double rhsValue) = 0;
442 virtual bool newSlaveData() = 0;
467 bool localRowGraph_includeSharedRows=
false) = 0;
473 bool& equivalent)
const = 0;
498 int& numColIndices) = 0;
506 int& numIndices) = 0;
513 int rowIndicesAllocLen,
516 int colIndicesAllocLen,
518 int& numColIndices) = 0;
523 int& numIndices) = 0;
529 std::vector<int>& indices) = 0;
562 std::vector<int>& globalIndices) = 0;
virtual void setIndicesMode(int mode)=0
virtual void setParameters(const fei::ParameterSet ¶ms)=0
virtual ConstraintType * getLagrangeConstraint(int constraintID)=0
virtual int getGlobalNumSlaveConstraints() const =0
virtual ConstraintType * getPenaltyConstraint(int constraintID)=0
virtual void setColumnSpace(fei::SharedPtr< fei::VectorSpace > columnSpace)=0
virtual int initLagrangeConstraint(int constraintID, int constraintIDType, int numIDs, const int *idTypes, const int *IDs, const int *fieldIDs)=0
virtual int initSlaveConstraint(int numIDs, const int *idTypes, const int *IDs, const int *fieldIDs, int offsetOfSlave, int offsetIntoSlaveField, const double *weights, double rhsValue)=0
virtual fei::SharedPtr< fei::Reducer > getReducer()=0
snl_fei::Constraint< fei::Record< int > * > ConstraintType
virtual int getConstraintConnectivityIndices(ConstraintType *cr, std::vector< int > &globalIndices)=0
virtual const fei::ConnectivityBlock * getConnectivityBlock(int blockID) const =0
virtual bool hasSlaveDof(int ID, int idType)=0
virtual void setRowSpace(fei::SharedPtr< fei::VectorSpace > rowSpace)=0
virtual fei::SharedPtr< fei::SparseRowGraph > createGraph(bool blockEntryGraph, bool localRowGraph_includeSharedRows=false)=0
virtual std::map< int, fei::ConnectivityBlock * > & getConnectivityBlocks()=0
virtual fei::SharedPtr< fei::SparseRowGraph > getRemotelyOwnedGraphRows()=0
virtual int getConnectivityNumIndices(int blockID) const =0
virtual fei::SharedPtr< fei::VectorSpace > getRowSpace()=0
virtual int initConnectivity(int blockID, int connectivityID, const int *connectedIdentifiers)=0
virtual std::map< int, ConstraintType * > & getLagrangeConstraints()=0
virtual int initComplete()=0
virtual int getConnectivityIndices(int blockID, int connectivityID, int indicesAllocLen, int *indices, int &numIndices)=0
virtual fei::SharedPtr< fei::VectorSpace > getColSpace()=0
virtual int createSlaveMatrices()=0
virtual void getConstrainedIndices(std::vector< int > &crindices) const =0
virtual fei::SharedPtr< fei::FillableMat > getSlaveDependencyMatrix()=0
virtual int getPatternNumIndices(int patternID, int &numIndices)=0
virtual ConstraintType * getSlaveConstraint(int constraintID)=0
virtual int compareStructure(const fei::MatrixGraph &matrixGraph, bool &equivalent) const =0
virtual int getPatternIndices(int patternID, const int *IDs, std::vector< int > &indices)=0
virtual int definePattern(int numIDs, int idType)=0
virtual int initPenaltyConstraint(int constraintID, int constraintIDType, int numIDs, const int *idTypes, const int *IDs, const int *fieldIDs)=0
virtual int getLocalNumLagrangeConstraints() const =0
virtual int getNumConnectivityBlocks() const =0
virtual int getConnectivityBlockIDs(std::vector< int > &blockIDs) const =0
virtual fei::Pattern * getPattern(int patternID)=0
virtual int getNumIDsPerConnectivityList(int blockID) const =0
virtual int initConnectivityBlock(int blockID, int numConnectivityLists, int patternID, bool diagonal=false)=0