9#ifndef _snl_fei_Broker_LinSysCore_hpp_
10#define _snl_fei_Broker_LinSysCore_hpp_
29#define fei_file "snl_fei_Broker_LinSysCore.hpp"
89 bool zeroSharedRows =
true;
91 zeroSharedRows =
false;
138 std::vector<int> globalOffsets;
139 std::vector<int> globalBlkOffsets;
144 std::vector<int> lsizes(num_procs, 0);
145 std::vector<int> gsizes(num_procs, 0);
146 lsizes[local_proc] = localsize;
148 globalOffsets.resize(num_procs+1);
150 for(
int p=0; p<num_procs; ++p) {
151 globalOffsets[p] = offset;
154 globalOffsets[num_procs] = offset;
155 globalBlkOffsets = globalOffsets;
161 vecSpace->getGlobalIndexOffsets(globalOffsets);
162 vecSpace->getGlobalBlkIndexOffsets(globalBlkOffsets);
164 numLocalEqns_ = globalOffsets[local_proc+1]-globalOffsets[local_proc];
168 &globalBlkOffsets[0],
170 &globalBlkOffsets[0]));
194 std::vector<int>& rowNumbers = localSRGraph->rowNumbers;
195 int numLocalRows = rowNumbers.size();
196 int* rowOffsets = &(localSRGraph->rowOffsets[0]);
197 int numLocalNonzeros = localSRGraph->packedColumnIndices.size();
198 int* nonzeros = &(localSRGraph->packedColumnIndices[0]);
200 int numGlobalNonzeros = 0;
203 std::vector<int*> colPtrs(numLocalRows);
204 std::vector<int> ptRowsPerBlkRow(numLocalRows, 1);
205 std::vector<int> rowLengths(numLocalRows);
206 int* rowLengthsPtr = &rowLengths[0];
208 for(
int i=0; i<numLocalRows; ++i) {
209 colPtrs[i] = &(nonzeros[rowOffsets[i]]);
210 rowLengthsPtr[i] = rowOffsets[i+1]-rowOffsets[i];
220 &ptRowsPerBlkRow[0]));
virtual int setLookup(Lookup &lookup)=0
virtual int setGlobalOffsets(int len, int *nodeOffsets, int *eqnOffsets, int *blkEqnOffsets)=0
virtual int setMatrixStructure(int **ptColIndices, int *ptRrowLengths, int **blkColIndices, int *blkRowLengths, int *ptRowsPerBlkRow)=0
virtual int getBlkEqnSize(int blkEqn)=0
virtual fei::SharedPtr< fei::SparseRowGraph > createGraph(bool blockEntryGraph, bool localRowGraph_includeSharedRows=false)=0
virtual fei::SharedPtr< fei::VectorSpace > getRowSpace()=0
std::vector< int > & getLocalReducedEqns()
MPI_Comm getCommunicator() const
fei::SharedPtr< fei::LinearSystem > createLinearSystem()
fei::SharedPtr< fei::Vector > createVector(bool isSolutionVector=false)
fei::SharedPtr< fei::Matrix > createMatrix()
fei::SharedPtr< fei::Reducer > reducer_
fei::SharedPtr< LinearSystemCore > linsyscore_
fei::SharedPtr< fei::MatrixGraph > matrixGraph_
virtual ~Broker_LinSysCore()
void setMatrixGraph(fei::SharedPtr< fei::MatrixGraph > matrixGraph)
Broker_LinSysCore(fei::SharedPtr< LinearSystemCore > lsc, fei::SharedPtr< fei::MatrixGraph > matrixGraph, fei::SharedPtr< fei::Reducer > reducer, bool blockMatrix)
int localProc(MPI_Comm comm)
int GlobalMax(MPI_Comm comm, std::vector< T > &local, std::vector< T > &global)
int numProcs(MPI_Comm comm)
int GlobalSum(MPI_Comm comm, std::vector< T > &local, std::vector< T > &global)