60 if (matrixGraph_.
get() == NULL)
return(vptr);
61 if (setGlobalOffsets() != 0)
return(vptr);
70 if (reducer_.
get() != NULL) {
71 vec.
reset(
new fei::VectorReducer(reducer_, tmpvec, isSolutionVector));
85 if (matrixGraph_.
get() == NULL)
return(mptr);
87 if (setMatrixStructure() != 0)
return(mptr);
89 bool zeroSharedRows =
true;
90 if (reducer_.
get() != NULL) {
91 zeroSharedRows =
false;
96 numLocalEqns_, zeroSharedRows));
98 if (reducer_.
get() != NULL) {
99 matptr.
reset(
new fei::MatrixReducer(reducer_, tmpmat));
113 if (matrixGraph_.
get() == NULL)
return(lsptr);
115 if (setMatrixStructure() != 0)
return(lsptr);
124 { matrixGraph_ = matrixGraph; }
127 int setGlobalOffsets()
130 if (setGlobalOffsets_)
return(0);
132 if (matrixGraph_.
get() == NULL)
return(-1);
138 std::vector<int> globalOffsets;
139 std::vector<int> globalBlkOffsets;
141 if (reducer_.
get() != NULL) {
142 int localsize = reducer_->getLocalReducedEqns().size();
143 numLocalEqns_ = localsize;
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]));
172 setGlobalOffsets_ =
true;
176 int setMatrixStructure()
179 if (setMatrixStructure_)
return(0);
181 if (matrixGraph_.
get() == NULL)
return(-1);
185 CHK_ERR( linsyscore_->
setLookup(*lookup_) );
187 CHK_ERR( setGlobalOffsets() );
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];
211 if (blockMatrix_ ==
true) {
220 &ptRowsPerBlkRow[0]));
222 setMatrixStructure_ =
true;
233 bool setGlobalOffsets_;
235 bool setMatrixStructure_;