85 { std::cout <<
"FAIL for Global!\n"; abort(); }
87 { std::cout <<
"FAIL for Global Indices!\n"; abort(); }
123 std::cout <<
"SVDs and Inverses!\n";
126 std::cout <<
"Block: " << i <<
" Size: " <<
VbrBlockDim_[i] << std::endl;
128 std::cout << *(
Inverses_[i]) << std::endl;
136 double * currLoc = A;
155 std::cout <<
"-------------------\n";
156 std::cout <<
"BlockJacobi\n";
157 std::cout <<
"-------------------\n";
163 std::multiset<double> SVs;
170 if(
SVDs_[i]->S()[0] > MaxSV ) MaxSV =
SVDs_[i]->S()[0];
177 MaxSV = std::max( MaxSV, 1.0 );
181 std::multiset<double>::iterator iterSI = SVs.begin();
182 std::multiset<double>::iterator endSI = SVs.end();
186 std::cout << std::endl;
187 std::cout <<
"Singular Values\n";
188 for( ; iterSI != endSI; ++iterSI, i++ ) std::cout << i <<
"\t" << *iterSI << std::endl;
189 std::cout << std::endl;
198 abs_thresh = MaxSV * rel_thresh;
205 SVDs_[i]->Invert( rel_thresh, abs_thresh );
223 std::cout <<
"DiagBlock: " << i << std::endl;
225 std::cout <<
"RHSBlock: " << i << std::endl;
232 std::cout <<
"Block Jacobi'd Matrix!\n";
234 else std::cout << *(dynamic_cast<Epetra_VbrMatrix*>(
origObj_->GetMatrix())) << std::endl;
235 std::cout <<
"Block Jacobi'd RHS!\n";
237 std::cout << std::endl;
242 std::cout <<
"Min Singular Value: " << MinSV << std::endl;
243 std::cout <<
"Max Singular Value: " << MaxSV << std::endl;
244 std::cout <<
"--------------------\n";
std::vector< int > VbrBlockCnt_
~LinearProblem_BlockJacobi()
std::vector< Epetra_SerialDenseMatrix * > Inverses_
Epetra_LinearProblem * NewProblem_
Epetra_VbrMatrix * NewMatrix_
NewTypeRef operator()(OriginalTypeRef orig)
Analysis of transform operation on original object and construction of new object.
std::vector< int * > VbrBlockIndices_
bool rvs()
Reverse transfer of data from new object created in the operator() method call to the orig object inp...
bool fwd()
Forward transfer of data from orig object input in the operator() method call to the new object creat...
std::vector< int > VbrBlockDim_
std::vector< Epetra_SerialDenseSVD * > SVDs_
std::vector< Epetra_SerialDenseMatrix * > RHSBlocks_
std::vector< Epetra_SerialDenseMatrix ** > VbrBlocks_
bool DistributedGlobal() const
int ExtractView(double **A, int *MyLDA) const
bool IndicesAreGlobal() const
int NumMyBlockRows() const
int ExtractMyBlockRowView(int BlockRow, int &RowDim, int &NumBlockEntries, int *&BlockIndices, Epetra_SerialDenseMatrix **&Values) const
const Epetra_BlockMap & RowMap() const
EpetraExt::BlockCrsMatrix: A class for constructing a distributed block matrix.