9#ifndef _fei_MatrixGraph_Impl2_hpp_
10#define _fei_MatrixGraph_Impl2_hpp_
27 class ConnectivityBlock;
58 const char* name = NULL);
169 const int* numFieldsPerID,
170 const int* fieldIDs);
196 const int* numFieldsPerID,
197 const int* fieldIDs);
222 int numConnectivityLists,
224 bool diagonal=
false);
250 bool diagonal=
false);
273 int numConnectivityLists,
291 const int* connectedIdentifiers);
309 const int* rowConnectedIdentifiers,
310 const int* colConnectedIdentifiers);
324 const int* connectedIdentifiers);
341 const int* rowConnectedIdentifiers,
343 const int* colConnectedIdentifiers);
363 const int* rowOffsets,
364 const int* packedColumnIDs);
387 const int* rowOffsets,
388 const int* packedColumnIDs);
407 const int* rowLengths,
408 const int*
const* columnIDs);
413 int constraintIDType,
417 const int* fieldIDs);
422 int constraintIDType,
426 const int* fieldIDs);
435 int offsetIntoSlaveField,
436 const double* weights,
464 bool localRowGraph_includeSharedRows=
false);
470 bool& equivalent)
const;
511 int rowIndicesAllocLen,
514 int colIndicesAllocLen,
527 std::vector<int>& indices);
560 std::vector<int>& globalIndices);
598 bool gatherFromOverlap);
616 int* records,
int numRecords,
617 const int* numFieldsPerID,
619 const int* fieldSizes,
625 int* records,
int numRecords,
626 int fieldID,
int fieldSize,
653 const int* connectedIdentifiers,
662 void setName(
const char* name);
687 std::map<int, ConstraintType* >
virtual fei::SharedPtr< fei::MatrixGraph > createMatrixGraph(fei::SharedPtr< fei::VectorSpace > rowSpace, fei::SharedPtr< fei::VectorSpace > columnSpace, const char *name)
int exchangeBlkEqnSizes(fei::Graph *graph)
fei::SharedPtr< fei::VectorSpace > getRowSpace()
void setParameters(const fei::ParameterSet ¶ms)
int addPattern(fei::Pattern *pattern)
int addLagrangeConstraintsToGraph(fei::Graph *graph)
std::map< int, fei::Pattern * > patterns_
int getGlobalNumSlaveConstraints() const
int getConnectivityRecords(fei::VectorSpace *vecSpace, int idType, int numIDs, const int *IDs, int *records)
int addBlockToGraph_multiField_symmetric(fei::Graph *graph, fei::ConnectivityBlock *cblock)
const fei::ConnectivityBlock * getConnectivityBlock(int blockID) const
ConstraintType * getLagrangeConstraint(int constraintID)
int createAlgebraicGraph(bool blockEntryGraph, fei::Graph *graph, bool gatherFromOverlap)
int getConnectivityIndices(int blockID, int connectivityID, int indicesAllocLen, int *indices, int &numIndices)
std::map< int, fei::ConnectivityBlock * > & getConnectivityBlocks()
std::set< int > constrained_indices_
std::map< int, fei::ConnectivityBlock * > connectivityBlocks_
int getConnectivityNumIndices(int blockID) const
ConstraintType * getSlaveConstraint(int constraintID)
fei::SharedPtr< fei::VectorSpace > getColSpace()
int addPenaltyConstraintsToGraph(fei::Graph *graph)
int getConnectivityBlockIDs(std::vector< int > &blockIDs) const
int createSlaveMatrices()
int definePattern(int numIDs, int idType)
std::map< int, ConstraintType * > penaltyConstraints_
std::vector< fei::ConnectivityBlock * > sparseBlocks_
int addBlockToGraph_sparse(fei::Graph *graph, fei::ConnectivityBlock *cblock)
void setColumnSpace(fei::SharedPtr< fei::VectorSpace > columnSpace)
fei::SharedPtr< fei::SparseRowGraph > remotelyOwnedGraphRows_
ConstraintType * getPenaltyConstraint(int constraintID)
int initPenaltyConstraint(int constraintID, int constraintIDType, int numIDs, const int *idTypes, const int *IDs, const int *fieldIDs)
virtual ~MatrixGraph_Impl2()
void setIndicesMode(int mode)
fei::SharedPtr< fei::Reducer > reducer_
fei::SharedPtr< FillableMat > D_
int initConnectivityBlock(int blockID, int numConnectivityLists, int patternID, bool diagonal=false)
void setRowSpace(fei::SharedPtr< fei::VectorSpace > rowSpace)
bool hasSlaveDof(int ID, int idType)
std::vector< int > tmpIntArray1_
int addBlockToGraph_singleField_symmetric(fei::Graph *graph, fei::ConnectivityBlock *cblock)
int addBlockToGraph_noField_symmetric(fei::Graph *graph, fei::ConnectivityBlock *cblock)
int getPatternIndices(int patternID, const int *IDs, std::vector< int > &indices)
int getNumConnectivityBlocks() const
void getConstrainedIndices(std::vector< int > &crindices) const
int initSlaveConstraint(int numIDs, const int *idTypes, const int *IDs, const int *fieldIDs, int offsetOfSlave, int offsetIntoSlaveField, const double *weights, double rhsValue)
int initLagrangeConstraint(int constraintID, int constraintIDType, int numIDs, const int *idTypes, const int *IDs, const int *fieldIDs)
fei::Pattern * getPattern(int patternID)
int getConnectivityIndices_singleField(const snl_fei::RecordCollection *const *recordCollections, int *records, int numRecords, int fieldID, int fieldSize, int indicesAllocLen, int *indices, int &numIndices)
std::map< int, ConstraintType * > & getLagrangeConstraints()
int compareStructure(const fei::MatrixGraph &matrixGraph, bool &equivalent) const
fei::SharedPtr< fei::Reducer > getReducer()
int arbitraryBlockCounter_
int getLocalNumLagrangeConstraints() const
bool includeAllSlaveConstraints_
fei::SharedPtr< FillableMat > getSlaveDependencyMatrix()
std::vector< int > tmpIntArray2_
int getConstraintConnectivityIndices(ConstraintType *cr, std::vector< int > &globalIndices)
int initConnectivity(int blockID, int connectivityID, const int *connectedIdentifiers)
void setName(const char *name)
int getConnectivityIndices_multiField(const snl_fei::RecordCollection *const *recordCollections, int *records, int numRecords, const int *numFieldsPerID, const int *fieldIDs, const int *fieldSizes, int indicesAllocLen, int *indices, int &numIndices)
fei::SharedPtr< fei::VectorSpace > colSpace_
fei::SharedPtr< fei::VectorSpace > rowSpace_
fei::SharedPtr< fei::SparseRowGraph > getRemotelyOwnedGraphRows()
fei::SharedPtr< fei::SparseRowGraph > createGraph(bool blockEntryGraph, bool localRowGraph_includeSharedRows=false)
std::map< int, ConstraintType * > slaveConstraints_
int addBlockToGraph_multiField_nonsymmetric(fei::Graph *graph, fei::ConnectivityBlock *cblock)
int getNumIDsPerConnectivityList(int blockID) const
std::map< int, ConstraintType * > lagrangeConstraints_
int addBlockToGraph_singleField_nonsymmetric(fei::Graph *graph, fei::ConnectivityBlock *cblock)
int getPatternNumIndices(int patternID, int &numIndices)
int getConnectivityIndices_noField(const snl_fei::RecordCollection *const *recordCollections, int *records, int numRecords, int indicesAllocLen, int *indices, int &numIndices)
fei::SharedPtr< CSVec > g_