Amesos Package Browser (Single Doxygen Collection)  Development
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
Protected Attributes | List of all members
SuperludistOO Class Reference

SuperludistOO: An object-oriented wrapper for Xiaoye Li's Superludist. More...

#include <SuperludistOO.h>

Protected Attributes

const Epetra_LinearProblemProblem_
 
Epetra_LinearProblemRedistorredistor
 
Epetra_LinearProblemredistProblem
 
int M
 
int N
 
int nz
 
int * ptr
 
int * ind
 
double * val
 
double * rhs
 
double * lhs
 
int Nrhs
 
int ldrhs
 
int ldlhs
 
bool Transpose_
 
bool Factored_
 
bool FirstCallToSolve_
 
int numprocs
 
int nprow
 
int npcol
 
gridinfo_t grid
 
superlu_options_t options
 
SuperMatrix A
 
ScalePermstruct_t ScalePermstruct
 
SuperLUStat_t stat
 
LUstruct_t LUstruct
 
double * berr
 
vector< int > Ap
 
vector< int > Ai
 
vector< double > Aval
 
bool A_and_LU_built
 
int numrows
 
 SuperludistOO (const Epetra_LinearProblem &LinearProblem)
 SuperludistOO Constructor. More...
 
virtual ~SuperludistOO (void)
 SuperludistOO Destructor. More...
 
void SetTrans (bool trans)
 Setting the transpose flag to true causes Solve() to compute A^t x = b. More...
 
bool GetTrans () const
 Return the transpose flag. More...
 
int CheckInput () const
 Prints a summary of solver parameters, performs simple sanity checks. More...
 
double Condest () const
 Returns the condition number estimate for the current problem, if one exists, returns -1.0 if no estimate. More...
 
int Solve (bool Factor)
 All computation is performed during the call to Solve() More...
 

Detailed Description

SuperludistOO: An object-oriented wrapper for Xiaoye Li's Superludist.

SuperludistOO will solve a linear systems of equations: $ AX=B $, using Epetra objects and the Superludist solver library, where $A$ is an Epetra_RowMatrix and $X$ and $B$ are Epetra_MultiVector objects.

SuperLUdist execution can be tuned through a variety of parameters. SuperludistOO.h allows control of these parameters through the following named parameters, ignoring parameters with names that it does not recognize. Where possible, the parameters are common to all direct solvers (although some may ignore them). However, some parameters, in particular tuning parameters, are unique to each solver.

SuperludistOO consists of five steps. The first three listed below are referred to as the pre-factorization transformations. 1) Equilibration - to reduce the condition number of the problem 2) Row Permutation - to make the diagonal values larger 3) Col permutation - to help maintain sparsity 4) Factorization - Compute the L and U factors 5) Solve - Perform the forward and back solves

In other solvers, the steps are: symbolic factorization (Step 3 above), numeric factorization (Step 4 above) and Solve (Step 5 above). Step 2, row permutation can be considered static pivoting and equilibration is akin to left and right scaling.

NO MECHANISM EXISTS TODAY TO SET OPTIONS OR PARAMETERS.

The following parameters are generic, i.e. potentially applicable to all direct solvers. The ints are passed as options. The doubles are passed as parameters.

"EquilibrationType" - int - enum DsolEquilibrationOption{ DSOL_DO_NOT_EQUILIBRATE, DSOL_ROW_EQUILIBRATION, DSOL_COL_EQUILIBRATION, DSOL_ROW_COL_EQUILIBRATION }

"EquilibrationReuse" - int - enum DsolEquilibrationReuseOption{ DSOL_EQUILIBRATE_NEW_MATRICES, DSOL_USE_STORED_EQUILIBRATION } If DSOL_USE_STORED_EQUILIBRATION is set, new equilibration arrays are only computed if none have been stored. There are two ways that equilibration constants can be stored. 1) Each time that the matrices are equilibrated, the equilibrations are stored. 2) The user can store equilibration constants by calling SetLeftEquilibration() and SetRightEquilibration().

"ColumnPermutationType" - int - enum DsolColumnPermutationTypeOption{ DSOL_NO_COLUMN_PERMUTATION, DSOL_MMD_AT_times_A, DSOL_MMD_AT_plus_A, DSOL_COLAMD }

"ColumnPermutationReuse" - int - enum DsolColumnPermutationReuseOption{ DSOL_COL_PERM_NEW_MATRICES, DSOL_USE_STORED_COL_PERM } If DSOL_USE_STORED_COL_PERM is set, a new column permutation is only computed if none has been stored. There are two ways that a column permutation can be stored. 1) Each time that a column permutation is computed it is stored. 2) The user can store a column permutation by calling SetColumnPermutation().

"RowPermutationType" - int - enum DsolRowPermutationTypeOption{ DSOL_NO_ROW_PERMUTATION, DSOL_DUFF_KOSTER }

"RowPermutationReuse" - int - enum DsolRowPermutationReuseOption{ DSOL_ROW_PERM_NEW_MATRICES, DSOL_USE_STORED_ROW_PERM } If DSOL_USE_STORED_ROW_PERM is set, a new row permutation is only computed if none has been stored. There are two ways that a row permutation can be stored. 1) Each time that a row permutation is computed it is stored. 2) The user can store a row permutation by calling SetRowPermutation().

"FactorType" - int - enum DsolFactorTypeOption{ DSOL_DO_FACTOR, DSOL_DO_NOT_FACTOR } "FactorType" is not fully supported in release 0.1

"FactorTypeReuse" - int - enum DsolFactorTypeOption{ DSOL_REUSE_FACTOR, DSOL_DO_NOT_REUSE_FACTOR } "FactorTypeReuse" is not fully supported in release 0.1

"BLAS block size" - int - BLAS block size

Definition at line 160 of file SuperludistOO.h.

Constructor & Destructor Documentation

SuperludistOO::SuperludistOO ( const Epetra_LinearProblem LinearProblem)

SuperludistOO Constructor.

Creates a SuperludistOO instance, using an Epetra_LinearProblem, passing in an already-defined Epetra_LinearProblem object. The Epetra_LinearProblem class is the preferred method for passing in the linear problem to SuperludistOO because this class provides scaling capabilities and self-consistency checks that are not available when using other constructors.

Note: The operator in LinearProblem must be an Epetra_RowMatrix.

Definition at line 84 of file SuperludistOO.cpp.

SuperludistOO::~SuperludistOO ( void  )
virtual

SuperludistOO Destructor.

Completely deletes a SuperludistOO object.

Definition at line 103 of file SuperludistOO.cpp.

Member Function Documentation

void SuperludistOO::SetTrans ( bool  trans)
inline

Setting the transpose flag to true causes Solve() to compute A^t x = b.

Definition at line 187 of file SuperludistOO.h.

bool SuperludistOO::GetTrans ( ) const
inline

Return the transpose flag.

Definition at line 194 of file SuperludistOO.h.

int SuperludistOO::CheckInput ( ) const

Prints a summary of solver parameters, performs simple sanity checks.

Not supported in release 0.1;

double SuperludistOO::Condest ( ) const

Returns the condition number estimate for the current problem, if one exists, returns -1.0 if no estimate.

Member functions to set and clear the compact representations of the pre-factorizations are not included in the interface yet, in part because I am not sure what the interface to them should be. Here is a description of these functions, whose interface we will define later.

The next two member functions have no impact on the factorization unless "EquilibrationReuse" is set to DSOL_USE_STORED_EQUILIBRATION SetLeftEquilibrationVector - Sets the left equilibration vector for use on the next matrix factorization as specified by "EquilibrationReuse" ClearLeftEquilibrationVector - Forces the next matrix factorization to compute an equilibration as specified by "EquilibrationType" GetLeftEquilibrationVector -

The following member functions are analogous to the ones for Left Equilibration. SetRightEquilibrationVector - ClearRightEquilibrationVector - GetRightEquilibrationVector -

The next two member functions have no impact on the factorization unless "RowPermutationReuse" is set to DSOL_USE_STORED_ROW_PERM SetRowPermutationVector - Sets the left row permutation vector for use on the next matrix factorization as specified by "Row PermutationReuse" ClearRowPermutationVector - Forces the next matrix factorization to compute a row permutation as specified by "RowPermutationType" GetRowPermutationVector -

The following member functions are analogous to the ones for Row Permutation. SetColumnPermutationVector - ClearColumnPermutationVector - GetColumnPermutationVector -

Not supported in release 0.1

int SuperludistOO::Solve ( bool  Factor)

All computation is performed during the call to Solve()

Factor controls whether or not the matrix should be factored prior to the solve. Default is true.

Definition at line 170 of file SuperludistOO.cpp.

Member Data Documentation

const Epetra_LinearProblem* SuperludistOO::Problem_
protected

Definition at line 261 of file SuperludistOO.h.

Epetra_LinearProblemRedistor* SuperludistOO::redistor
protected

Definition at line 262 of file SuperludistOO.h.

Epetra_LinearProblem* SuperludistOO::redistProblem
protected

Definition at line 263 of file SuperludistOO.h.

int SuperludistOO::M
protected

Definition at line 267 of file SuperludistOO.h.

int SuperludistOO::N
protected

Definition at line 267 of file SuperludistOO.h.

int SuperludistOO::nz
protected

Definition at line 267 of file SuperludistOO.h.

int* SuperludistOO::ptr
protected

Definition at line 268 of file SuperludistOO.h.

int * SuperludistOO::ind
protected

Definition at line 268 of file SuperludistOO.h.

double* SuperludistOO::val
protected

Definition at line 269 of file SuperludistOO.h.

double * SuperludistOO::rhs
protected

Definition at line 269 of file SuperludistOO.h.

double * SuperludistOO::lhs
protected

Definition at line 269 of file SuperludistOO.h.

int SuperludistOO::Nrhs
protected

Definition at line 270 of file SuperludistOO.h.

int SuperludistOO::ldrhs
protected

Definition at line 270 of file SuperludistOO.h.

int SuperludistOO::ldlhs
protected

Definition at line 270 of file SuperludistOO.h.

bool SuperludistOO::Transpose_
protected

Definition at line 273 of file SuperludistOO.h.

bool SuperludistOO::Factored_
protected

Definition at line 274 of file SuperludistOO.h.

bool SuperludistOO::FirstCallToSolve_
protected

Definition at line 275 of file SuperludistOO.h.

int SuperludistOO::numprocs
protected

Definition at line 279 of file SuperludistOO.h.

int SuperludistOO::nprow
protected

Definition at line 280 of file SuperludistOO.h.

int SuperludistOO::npcol
protected

Definition at line 281 of file SuperludistOO.h.

gridinfo_t SuperludistOO::grid
protected

Definition at line 282 of file SuperludistOO.h.

superlu_options_t SuperludistOO::options
protected

Definition at line 283 of file SuperludistOO.h.

SuperMatrix SuperludistOO::A
protected

Definition at line 284 of file SuperludistOO.h.

ScalePermstruct_t SuperludistOO::ScalePermstruct
protected

Definition at line 285 of file SuperludistOO.h.

SuperLUStat_t SuperludistOO::stat
protected

Definition at line 286 of file SuperludistOO.h.

LUstruct_t SuperludistOO::LUstruct
protected

Definition at line 287 of file SuperludistOO.h.

double* SuperludistOO::berr
protected

Definition at line 288 of file SuperludistOO.h.

vector<int> SuperludistOO::Ap
protected

Definition at line 289 of file SuperludistOO.h.

vector<int> SuperludistOO::Ai
protected

Definition at line 290 of file SuperludistOO.h.

vector<double> SuperludistOO::Aval
protected

Definition at line 291 of file SuperludistOO.h.

bool SuperludistOO::A_and_LU_built
protected

Definition at line 292 of file SuperludistOO.h.

int SuperludistOO::numrows
protected

Definition at line 296 of file SuperludistOO.h.


The documentation for this class was generated from the following files: