|
Amesos Package Browser (Single Doxygen Collection)
Development
|
Go to the documentation of this file.
33 #include "Trilinos_Util.h"
41 #ifdef HAVE_AMESOS_SLUD
44 #ifdef HAVE_AMESOS_SLUS
47 #ifdef HAVE_AMESOS_SLUD2
50 #ifdef HAVE_AMESOS_DSCPACK
53 #ifdef HAVE_AMESOS_UMFPACK
56 #ifdef HAVE_AMESOS_KLU
59 #ifdef HAVE_AMESOS_LAPACK
62 #ifdef HAVE_AMESOS_TAUCS
65 #ifdef HAVE_AMESOS_PARDISO
68 #ifdef HAVE_AMESOS_PARAKLETE
71 #if defined(HAVE_AMESOS_MUMPS) && defined(HAVE_MPI)
74 #ifdef HAVE_AMESOS_SCALAPACK
77 #ifdef HAVE_AMESOS_SUPERLUDIST
80 #ifdef HAVE_AMESOS_SUPERLU
117 int iam = Comm.
MyPID() ;
131 std::string FileName = matrix_file ;
132 int FN_Size = FileName.size() ;
133 std::string LastFiveBytes = FileName.substr(
EPETRA_MAX(0,FN_Size-5), FN_Size );
134 std::string LastFourBytes = FileName.substr(
EPETRA_MAX(0,FN_Size-4), FN_Size );
135 bool NonContiguousMap =
false;
137 if ( LastFiveBytes ==
".triU" ) {
138 NonContiguousMap =
true;
140 EPETRA_CHK_ERR( Trilinos_Util_ReadTriples2Epetra( matrix_file,
false, Comm, readMap, readA, readx,
141 readb, readxexact, NonContiguousMap ) );
143 if ( LastFiveBytes ==
".triS" ) {
144 NonContiguousMap =
true;
146 EPETRA_CHK_ERR( Trilinos_Util_ReadTriples2Epetra( matrix_file,
true, Comm,
147 readMap, readA, readx,
148 readb, readxexact, NonContiguousMap ) );
150 if ( LastFourBytes ==
".mtx" ) {
151 EPETRA_CHK_ERR( Trilinos_Util_ReadMatrixMarket2Epetra( matrix_file, Comm, readMap,
152 readA, readx, readb, readxexact) );
155 Trilinos_Util_ReadHb2Epetra( matrix_file, Comm, readMap, readA, readx,
166 serialA = &transposeA ;
175 if( NonContiguousMap ) {
180 int NumMyElements = map.NumMyElements();
181 int MyFirstElement = map.MinMyGID();
182 std::vector<int> MapMap_( NumGlobalElements );
184 Comm.
Broadcast( &MapMap_[0], NumGlobalElements, 0 ) ;
185 map_ =
new Epetra_Map( NumGlobalElements, NumMyElements, &MapMap_[MyFirstElement], 0, Comm);
215 if ( distribute_matrix ) {
220 A.Export(*serialA, exporter,
Add);
223 assert(
A.FillComplete()==0);
229 passxexact = &xexact;
236 passxexact = &serialxexact;
237 passresid = &serialresid;
238 passtmp = &serialtmp;
247 passA->
Multiply( transpose, *passxexact, *passb ) ;
251 double Anorm = passA->
NormInf() ;
258 double max_resid = 0.0;
259 for (
int j = 0 ; j < special+1 ; j++ ) {
267 }
else if ( SparseSolver ==
UMFPACK ) {
272 umfpack.SetTrans( transpose ) ;
276 }
else if ( SparseSolver == SuperLU ) {
282 superluserial.SetTrans( transpose ) ;
283 superluserial.SetUseDGSSV( special == 0 ) ;
284 superluserial.Solve() ;
286 #ifdef HAVE_AMESOS_SLUD
287 }
else if ( SparseSolver == SuperLUdist ) {
292 #ifdef HAVE_AMESOS_SLUD2
293 }
else if ( SparseSolver == SuperLUdist2 ) {
295 superludist2.
SetTrans( transpose ) ;
299 }
else if ( SparseSolver == SPOOLES ) {
307 #ifdef HAVE_AMESOS_DSCPACK
308 }
else if ( SparseSolver ==
DSCPACK ) {
311 ParamList.
set(
"MaxProcs", -3 );
316 #ifdef HAVE_AMESOS_UMFPACK
317 }
else if ( SparseSolver ==
UMFPACK ) {
320 ParamList.
set(
"MaxProcs", -3 );
326 #ifdef HAVE_AMESOS_KLU
327 }
else if ( SparseSolver ==
KLU ) {
330 ParamList.
set(
"MaxProcs", -3 );
338 #ifdef HAVE_AMESOS_PARAKLETE
339 }
else if ( SparseSolver ==
PARAKLETE ) {
342 ParamList.
set(
"MaxProcs", -3 );
350 #ifdef HAVE_AMESOS_SLUS
351 }
else if ( SparseSolver == SuperLU ) {
360 #ifdef HAVE_AMESOS_LAPACK
361 }
else if ( SparseSolver ==
LAPACK ) {
363 ParamList.
set(
"MaxProcs", -3 );
371 #ifdef HAVE_AMESOS_TAUCS
372 }
else if ( SparseSolver ==
TAUCS ) {
375 ParamList.
set(
"MaxProcs", -3 );
383 #ifdef HAVE_AMESOS_PARDISO
384 }
else if ( SparseSolver ==
PARDISO ) {
387 ParamList.
set(
"MaxProcs", -3 );
395 #ifdef HAVE_AMESOS_PARKLETE
396 }
else if ( SparseSolver == PARKLETE ) {
398 Amesos_Parklete parklete( Problem ) ;
399 ParamList.
set(
"MaxProcs", -3 );
407 #if defined(HAVE_AMESOS_MUMPS) && defined(HAVE_MPI)
408 }
else if ( SparseSolver ==
MUMPS ) {
411 ParamList.
set(
"MaxProcs", -3 );
419 #ifdef HAVE_AMESOS_SCALAPACK
420 }
else if ( SparseSolver ==
SCALAPACK ) {
423 ParamList.
set(
"MaxProcs", -3 );
431 #ifdef HAVE_AMESOS_SUPERLUDIST
435 ParamList.
set(
"MaxProcs", -3 );
444 #ifdef HAVE_AMESOS_SUPERLU
445 }
else if ( SparseSolver ==
SUPERLU ) {
448 ParamList.
set(
"MaxProcs", -3 );
456 #ifdef TEST_SPOOLESSERIAL
457 }
else if ( SparseSolver == SPOOLESSERIAL ) {
462 spoolesserial.Solve() ;
466 std::cerr <<
"\n\n#################### Requested solver not available (Or not tested with blocked RHS) on this platform #####################\n" << std::endl ;
477 std::vector <double>
error(numsolves) ;
478 double max_error = 0.0;
480 passresid->
Update(1.0, *passx, -1.0, *passxexact, 0.0);
483 for (
int i = 0 ; i< numsolves; i++ )
484 if (
error[i] > max_error ) max_error =
error[i] ;
493 std::vector <double> residual(numsolves) ;
496 passA->
Multiply( transpose, *passx, *passtmp);
497 passresid->
Update(1.0, *passtmp, -1.0, *passb, 0.0);
499 passresid->
Norm2(&residual[0]);
501 for (
int i = 0 ; i< numsolves; i++ )
502 if ( residual[i] > max_resid ) max_resid = residual[i] ;
507 std::vector <double> bnorm(numsolves);
508 passb->
Norm2( &bnorm[0] ) ;
511 std::vector <double> xnorm(numsolves);
512 passx->
Norm2( &xnorm[0] ) ;
516 if (
false && iam == 0 ) {
518 std::cout <<
" Amesos_TestMutliSolver.cpp " << std::endl ;
519 for (
int i = 0 ; i< numsolves && i < 10 ; i++ ) {
520 std::cout <<
"i=" << i
521 <<
" error = " <<
error[i]
522 <<
" xnorm = " << xnorm[i]
523 <<
" residual = " << residual[i]
524 <<
" bnorm = " << bnorm[i]
529 std::cout << std::endl <<
" max_resid = " << max_resid ;
530 std::cout <<
" max_error = " << max_error << std::endl ;
#define EPETRA_CHK_ERR(xxx)
int SetParameters(Teuchos::ParameterList &ParameterList)
Set parameters from the input parameters list, returns 0 if successful.
int SetUseTranspose(bool UseTranspose)
Amesos_Superludist does not support transpose at this time.
int SymbolicFactorization()
Performs SymbolicFactorization on the matrix A.
int NumericFactorization()
Performs NumericFactorization on the matrix A.
int NumericFactorization()
Performs NumericFactorization on the matrix A.
int Solve(bool Factor)
All computation is performed during the call to Solve()
int PutScalar(double ScalarConstant)
Amesos_Klu: A serial, unblocked code ideal for getting started and for very sparse matrices,...
int SymbolicFactorization()
Performs SymbolicFactorization on the matrix A.
int Solve()
Solves A X = B (or AT x = B)
int NumericFactorization()
Performs NumericFactorization on the matrix A.
int NumericFactorization()
Performs NumericFactorization on the matrix A.
int SetUseTranspose(bool useTheTranspose)
If set true, X will be set to the solution of AT X = B (not A X = B)
virtual int Broadcast(double *MyVals, int Count, int Root) const=0
void SetTrans(bool trans)
void SetTrans(bool trans)
Setting the transpose flag to true causes Solve() to compute A^t x = b.
int SetUseTranspose(bool UseTranspose_in)
If set true, X will be set to the solution of AT X = B (not A X = B)
virtual void Barrier() const=0
int SetParameters(Teuchos::ParameterList &ParameterList)
Updates internal variables.
int SetParameters(Teuchos::ParameterList &ParameterList)
Updates internal variables.
virtual double NormInf() const=0
int NumericFactorization()
Performs NumericFactorization on the matrix A.
int NumGlobalElements() const
Class Amesos_Umfpack: An object-oriented wrapper for UMFPACK.
int Solve()
Solves A X = B (or AT x = B)
void Set_Anorm(double anorm_in)
int SymbolicFactorization()
Performs SymbolicFactorization on the matrix A.
int NumericFactorization()
Performs NumericFactorization on the matrix A.
int Solve(bool Factor)
All computation is performed during the call to Solve()
int SetParameters(Teuchos::ParameterList &ParameterList)
Updates internal variables.
void Set_Xnorm(double xnorm_in)
int SetSeed(unsigned int Seed_in)
int SetUseTranspose(bool UseTranspose_in)
If set true, X will be set to the solution of AT X = B (not A X = B)
int SymbolicFactorization()
Performs SymbolicFactorization on the matrix A.
Amesos_Scalapack: A serial and parallel dense solver. For now, we implement only the unsymmetric ScaL...
ParameterList & set(std::string const &name, T const &value, std::string const &docString="", RCP< const ParameterEntryValidator > const &validator=null)
Amesos_Lapack: an interface to LAPACK.
Amesos_Dscpack: An object-oriented wrapper for Dscpack.
Superludist2_OO: An object-oriented wrapper for Superludist.
int SymbolicFactorization()
Performs SymbolicFactorization on the matrix A.
int SetParameters(Teuchos::ParameterList &ParameterList)
Updates internal variables.
int Norm2(double *Result) const
int NumericFactorization()
Performs NumericFactorization on the matrix A.
Amesos_Superludist: An object-oriented wrapper for Superludist.
void SetTrans(bool trans)
Setting the transpose flag to true causes Solve() to compute A^t x = b.
int SetParameters(Teuchos::ParameterList &ParameterList)
Updates internal variables.
SpoolesOO: An object-oriented wrapper for Spooles.
int Solve(bool Verbose=false, bool Equil=true, bool Factor=true, int perm_type=2, double pivot_thresh=-1, bool Refact=true, bool Trans=false)
All computation is performed during the call to Solve()
int Solve()
Solves A X = B (or AT x = B)
int Solve()
Solves A X = B (or AT X = B)
int SymbolicFactorization()
Performs SymbolicFactorization on the matrix A.
int SetUseTranspose(bool UseTranspose)
SetUseTranpose()
int Amesos_TestMultiSolver(Epetra_Comm &Comm, char *matrix_file, int numsolves, SparseSolverType SparseSolver, bool transpose, int special, AMESOS_MatrixType matrix_type)
int MyGlobalElements(int *MyGlobalElementList) const
int SymbolicFactorization()
Performs SymbolicFactorization on the matrix A.
SuperludistOO: An object-oriented wrapper for Xiaoye Li's Superludist.
static SparseSolverResult SS_Result
int Solve()
Solves A X = B (or AT x = B)
Amesos_Mumps: An object-oriented wrapper for the double precision version of MUMPS.
int CrsMatrixTranspose(Epetra_CrsMatrix *In, Epetra_CrsMatrix *Out)
Amesos_Taucs: An interface to the TAUCS package.
int SetParameters(Teuchos::ParameterList &ParameterList)
Updates internal variables.
void Set_Total_Time(double Total_Time_in)
int SetParameters(Teuchos::ParameterList &ParameterList)
Updates internal variables.
int SymbolicFactorization()
Performs SymbolicFactorization on the matrix A.
int Solve()
Solves A X = B (or AT x = B)
int SetUseTranspose(bool UseTranspose)
SetUseTranpose(true) is more efficient in Amesos_Scalapack.
int SetParameters(Teuchos::ParameterList &ParameterList)
Updates internal variables.
int Solve()
Solves A X = B (or AT x = B)
int SetParameters(Teuchos::ParameterList &ParameterList)
Updates internal variables.
int SymbolicFactorization()
Performs SymbolicFactorization on the matrix A.
double ElapsedTime(void) const
int SetUseTranspose(bool UseTranspose_in)
If set true, X will be set to the solution of AT X = B (not A X = B)
Amesos_Paraklete: A serial, unblocked code ideal for getting started and for very sparse matrices,...
void Set_Bnorm(double bnorm_in)
static std::ofstream log_file
int NumericFactorization()
Performs NumericFactorization on the matrix A.
int Solve()
Solves A X = B (or AT X = B)
int SetUseTranspose(bool UseTranspose_in)
SetUseTranpose()
Amesos_Superlu: Amesos interface to Xioye Li's SuperLU 3.0 serial code.
int Solve()
Solves A X = B (or AT x = B)
int Solve()
Solves A X = B (or AT x = B)
int SetUseTranspose(bool UseTranspose_in)
SetUseTranpose(true) is more efficient in Amesos_Klu.
int SetUseTranspose(bool UseTranspose)
Amesos_Taucs supports only symmetric matrices, hence transpose is irrelevant, but harmless.
void Set_Error(double error_in)
int NumericFactorization()
Performs NumericFactorization on the matrix A.
virtual int Multiply(bool TransA, const Epetra_MultiVector &X, Epetra_MultiVector &Y) const=0
virtual int MyPID() const=0
Epetra_SLU: An object-oriented wrapper for Xiaoye Li's serial sparse solver package: Superlu.
Amesos_Pardiso: Interface to the PARDISO package.
int Solve()
Solves A X = B (or AT x = B)
int Update(double ScalarA, const Epetra_MultiVector &A, double ScalarThis)
void Set_Residual(double residual_in)