Amesos Package Browser (Single Doxygen Collection)  Development
Amesos_Umfpack.h
Go to the documentation of this file.
1 
2 // @HEADER
3 // ***********************************************************************
4 //
5 // Amesos: Direct Sparse Solver Package
6 // Copyright (2004) Sandia Corporation
7 //
8 // Under terms of Contract DE-AC04-94AL85000, there is a non-exclusive
9 // license for use of this work by or on behalf of the U.S. Government.
10 //
11 // This library is free software; you can redistribute it and/or modify
12 // it under the terms of the GNU Lesser General Public License as
13 // published by the Free Software Foundation; either version 2.1 of the
14 // License, or (at your option) any later version.
15 //
16 // This library is distributed in the hope that it will be useful, but
17 // WITHOUT ANY WARRANTY; without even the implied warranty of
18 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
19 // Lesser General Public License for more details.
20 //
21 // You should have received a copy of the GNU Lesser General Public
22 // License along with this library; if not, write to the Free Software
23 // Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301
24 // USA
25 // Questions? Contact Michael A. Heroux (maherou@sandia.gov)
26 //
27 // ***********************************************************************
28 // @HEADER
29 
40 #ifndef AMESOS_UMFPACK_H
41 #define AMESOS_UMFPACK_H
42 
43 #include "Amesos_ConfigDefs.h"
44 #include "Amesos_BaseSolver.h"
45 #include "Amesos_BaseSolver.h"
46 #include "Amesos_NoCopiable.h"
47 #include "Amesos_Utils.h"
48 #include "Amesos_Time.h"
49 #include "Amesos_Status.h"
50 #include "Amesos_Control.h"
51 #include "Epetra_CrsMatrix.h"
52 #include "Epetra_LinearProblem.h"
53 #include "Epetra_Time.h"
54 #include "Epetra_Import.h"
55 #include "Teuchos_RCP.hpp"
56 #ifdef EPETRA_MPI
57 #include "Epetra_MpiComm.h"
58 #else
59 #include "Epetra_Comm.h"
60 #endif
61 
63 
71  private Amesos_Time,
72  private Amesos_NoCopiable,
73  private Amesos_Utils,
74  private Amesos_Control,
75  private Amesos_Status
76 {
77 public:
78 
80 
88  Amesos_Umfpack( const Epetra_LinearProblem& LinearProblem );
89 
91 
93  ~Amesos_Umfpack(void);
94 
96 
97 
99 
100  int NumericFactorization();
101 
102  int Solve();
103 
105 
106 
107  const Epetra_LinearProblem *GetProblem() const { return(Problem_); };
108 
110 
113  bool MatrixShapeOK() const ;
114 
115  int SetUseTranspose(bool UseTranspose_in) {UseTranspose_ = UseTranspose_in; return(0);};
116 
117  bool UseTranspose() const {return(UseTranspose_);};
118 
119  const Epetra_Comm & Comm() const {return(GetProblem()->GetOperator()->Comm());};
120 
122  /* Rcond is an estimate of the reciprocal of the condition number of the
123  matrix at the time of the most recent call to NumericFactorization()
124  Rcond = min(abs(diag))/max(abs(diag)) see Umfpack documentatoin
125  for details.
126  */
127  double GetRcond() const ;
128 
130 
133 
136 
138  int NumSolve() const { return( Amesos_Status::NumSolve_ ); }
139 
141  void PrintTiming() const;
142 
144  void PrintStatus() const;
145 
147  void GetTiming( Teuchos::ParameterList &TimingParameterList ) const { Amesos_Time::GetTiming(TimingParameterList); }
148 
149 private:
150 
152 
153 
156  {
157  return(dynamic_cast<Epetra_RowMatrix *>(Problem_->GetOperator()));
158  }
159 
161  int ConvertToSerial(const bool FirstTime);
162 
163  /*
164  ConvertToUmfpackCRS - Convert matirx to form expected by Umfpack: Ai, Ap, Aval
165  Preconditions:
166  numentries_, NumGloalElements_ and SerialMatrix_ must be set.
167  Postconditions:
168  Ai, Ap, and Aval are resized and populated with a compresses row storage
169  version of the input matrix A.
170  */
171  int ConvertToUmfpackCRS();
172 
173  /*
174  PerformSymbolicFactorization - Call Umfpack to perform symbolic factorization
175  Preconditions:
176  IsLocal must be set to 1 if the input matrix is entirely stored on process 0
177  Ap, Ai and Aval are a compressed row storage version of the input matrix A.
178  Postconditions:
179  Symbolic points to an UMFPACK internal opaque object containing the
180  symbolic factorization and accompanying information.
181  SymbolicFactorizationOK_ = true;
182  Note: All action is performed on process 0
183  */
184 
186 
187  /*
188  PerformNumericFactorization - Call Umfpack to perform numeric factorization
189  Preconditions:
190  IsLocal must be set
191  Ap, Ai and Aval are a compressed row storage version of the input matrix A.
192  Symbolic must be set
193  Postconditions:
194  Numeric points to an UMFPACK internal opaque object containing the
195  numeric factorization and accompanying information.
196  NumericFactorizationOK_ = true;
197  Note: All action is performed on process 0
198  */
200 
201  inline const Epetra_Import& Importer() const
202  {
203  return(*(ImportToSerial_.get()));
204  }
205 
206  inline const Epetra_Map& SerialMap() const
207  {
208  return(*(SerialMap_.get()));
209  }
210 
211  inline const Epetra_CrsMatrix& SerialCrsMatrix() const
212  {
213  return(*(SerialCrsMatrixA_.get()));
214  }
215 
217  {
218  return(*(SerialCrsMatrixA_.get()));
219  }
220 
221  // @}
222 
224  void *Symbolic;
226  void *Numeric;
227 
229  std::vector <int> Ap;
230  std::vector <int> Ai;
231  std::vector <double> Aval;
232 
234  int IsLocal_;
239 
243  /* If IsLocal==1 - Points to the original matrix
244  * If IsLocal==0 - Points to SerialCrsMatrixA
245  */
247 
249 
255  mutable double Rcond_;
256  // True if Rcond_ is the same on all processes
257  mutable bool RcondValidOnAllProcs_;
260 
264 
265 }; // class Amesos_Umfpack
266 #endif /* AMESOS_UMFPACK_H */
Amesos_Umfpack::NumericFactorization
int NumericFactorization()
Performs NumericFactorization on the matrix A.
Definition: Amesos_Umfpack.cpp:429
Teuchos_RCP.hpp
Amesos_Umfpack::VecRedistTime_
int VecRedistTime_
Definition: Amesos_Umfpack.h:262
Amesos_Umfpack::numentries_
int numentries_
Number of non-zero entries in Problem_->GetOperator()
Definition: Amesos_Umfpack.h:236
Amesos_Umfpack::PerformSymbolicFactorization
int PerformSymbolicFactorization()
Definition: Amesos_Umfpack.cpp:251
Amesos_Status::NumSolve_
int NumSolve_
Number of solves.
Definition: Amesos_Status.h:71
Amesos_NoCopiable.h
Amesos_NoCopiable
Amesos_NoCopiable: Simple class to prevent the usage of copy constructor and operator =.
Definition: Amesos_NoCopiable.h:44
Amesos_Umfpack::Problem_
const Epetra_LinearProblem * Problem_
Pointer to the linear problem to solve.
Definition: Amesos_Umfpack.h:253
Amesos_Umfpack::RcondValidOnAllProcs_
bool RcondValidOnAllProcs_
Definition: Amesos_Umfpack.h:257
Amesos_Umfpack::UseTranspose
bool UseTranspose() const
Returns the current UseTranspose setting.
Definition: Amesos_Umfpack.h:117
Amesos_BaseSolver
Amesos_BaseSolver: A pure virtual class for direct solution of real-valued double-precision operators...
Definition: Amesos_BaseSolver.h:223
Amesos_Umfpack::Importer
const Epetra_Import & Importer() const
Definition: Amesos_Umfpack.h:201
Amesos_Umfpack::Numeric
void * Numeric
Umfpack internal opaque object.
Definition: Amesos_Umfpack.h:226
Amesos_Status::NumSymbolicFact_
int NumSymbolicFact_
Number of symbolic factorization phases.
Definition: Amesos_Status.h:67
Amesos_Umfpack::GetRcond
double GetRcond() const
Returns an estimate of the reciprocal of the condition number.
Definition: Amesos_Umfpack.cpp:368
Amesos_Umfpack::SetParameters
int SetParameters(Teuchos::ParameterList &ParameterList)
Updates internal variables.
Definition: Amesos_Umfpack.cpp:236
Epetra_CrsMatrix.h
Amesos_Umfpack::NumNumericFact
int NumNumericFact() const
Returns the number of numeric factorizations performed by this object.
Definition: Amesos_Umfpack.h:135
Amesos_Umfpack::UseTranspose_
bool UseTranspose_
If true, solve the problem with the transpose.
Definition: Amesos_Umfpack.h:251
Amesos_Time.h
Epetra_Comm
Amesos_Umfpack
Class Amesos_Umfpack: An object-oriented wrapper for UMFPACK.
Definition: Amesos_Umfpack.h:70
Amesos_Umfpack::Ap
std::vector< int > Ap
Ap, Ai, Aval form the compressed row storage used by Umfpack.
Definition: Amesos_Umfpack.h:229
Amesos_Umfpack::Rcond_
double Rcond_
Reciprocal condition number estimate.
Definition: Amesos_Umfpack.h:255
Amesos_Umfpack::SerialCrsMatrix
Epetra_CrsMatrix & SerialCrsMatrix()
Definition: Amesos_Umfpack.h:216
Epetra_LinearProblem.h
Teuchos::RCP< Epetra_Map >
Epetra_CrsMatrix
Epetra_MpiComm.h
Amesos_Umfpack::~Amesos_Umfpack
~Amesos_Umfpack(void)
Amesos_Umfpack Destructor.
Definition: Amesos_Umfpack.cpp:86
Amesos_Umfpack::ConvertToSerial
int ConvertToSerial(const bool FirstTime)
Converts matrix to a serial Epetra_CrsMatrix.
Definition: Amesos_Umfpack.cpp:101
Amesos_Umfpack::SetUseTranspose
int SetUseTranspose(bool UseTranspose_in)
If set true, X will be set to the solution of AT X = B (not A X = B)
Definition: Amesos_Umfpack.h:115
Amesos_Umfpack::MtxConvTime_
int MtxConvTime_
Quick access pointers to internal timer data.
Definition: Amesos_Umfpack.h:262
Amesos_Umfpack::Amesos_Umfpack
Amesos_Umfpack(const Epetra_LinearProblem &LinearProblem)
Amesos_Umfpack Constructor.
Definition: Amesos_Umfpack.cpp:50
Amesos_Umfpack::SolveTime_
int SolveTime_
Definition: Amesos_Umfpack.h:263
Amesos_Umfpack::SerialCrsMatrixA_
Teuchos::RCP< Epetra_CrsMatrix > SerialCrsMatrixA_
Definition: Amesos_Umfpack.h:248
Amesos_Umfpack::NumGlobalElements_
int NumGlobalElements_
Number of rows and columns in the Problem_->GetOperator()
Definition: Amesos_Umfpack.h:238
Amesos_Umfpack::ImportToSerial_
Teuchos::RCP< Epetra_Import > ImportToSerial_
Importer from distributed to serial (all rows on process 0).
Definition: Amesos_Umfpack.h:259
Amesos_Status::NumNumericFact_
int NumNumericFact_
Number of numeric factorization phases.
Definition: Amesos_Status.h:69
Amesos_Umfpack::ConvertToUmfpackCRS
int ConvertToUmfpackCRS()
Definition: Amesos_Umfpack.cpp:181
Amesos_Utils
Amesos_Utils: Collections of basic utilities.
Definition: Amesos_Utils.h:19
Epetra_RowMatrix
Amesos_Umfpack::IsLocal_
int IsLocal_
1 if Problem_->GetOperator() is stored entirely on process 0
Definition: Amesos_Umfpack.h:234
Amesos_BaseSolver.h
Amesos_Umfpack::SerialMap
const Epetra_Map & SerialMap() const
Definition: Amesos_Umfpack.h:206
Amesos_Umfpack::SerialMatrix_
Epetra_RowMatrix * SerialMatrix_
Points to a Serial Copy of A.
Definition: Amesos_Umfpack.h:246
Amesos_Umfpack::NumSolve
int NumSolve() const
Returns the number of solves performed by this object.
Definition: Amesos_Umfpack.h:138
Epetra_LinearProblem
Amesos_Umfpack::Matrix
Epetra_RowMatrix * Matrix()
Returns a pointer to the linear system matrix.
Definition: Amesos_Umfpack.h:155
Amesos_Umfpack::Symbolic
void * Symbolic
Umfpack internal opaque object.
Definition: Amesos_Umfpack.h:224
Amesos_Umfpack::SerialCrsMatrix
const Epetra_CrsMatrix & SerialCrsMatrix() const
Definition: Amesos_Umfpack.h:211
Amesos_Umfpack::OverheadTime_
int OverheadTime_
Definition: Amesos_Umfpack.h:263
Amesos_Umfpack::PerformNumericFactorization
int PerformNumericFactorization()
Definition: Amesos_Umfpack.cpp:286
Epetra_Import.h
Amesos_Control
Amesos_Control: Container for some control variables.
Definition: Amesos_Control.h:16
Amesos_Umfpack::PrintStatus
void PrintStatus() const
Prints information about the factorization and solution phases.
Definition: Amesos_Umfpack.cpp:585
Amesos_Umfpack::Aval
std::vector< double > Aval
Definition: Amesos_Umfpack.h:231
Amesos_Umfpack::PrintTiming
void PrintTiming() const
Prints timing information.
Definition: Amesos_Umfpack.cpp:605
Epetra_Comm.h
Amesos_ConfigDefs.h
Amesos_Umfpack::SymFactTime_
int SymFactTime_
Definition: Amesos_Umfpack.h:263
Amesos_Umfpack::Solve
int Solve()
Solves A X = B (or AT x = B)
Definition: Amesos_Umfpack.cpp:469
Amesos_Umfpack::SerialMap_
Teuchos::RCP< Epetra_Map > SerialMap_
Points to a Serial Map (unused if IsLocal == 1 )
Definition: Amesos_Umfpack.h:241
Amesos_Utils.h
Amesos_Control.h
Amesos_Time::GetTiming
void GetTiming(Teuchos::ParameterList &list) const
Load up the current timing information into the parameter list.
Definition: Amesos_Time.h:124
Epetra_LinearProblem::GetOperator
Epetra_Operator * GetOperator() const
Amesos_Umfpack::Comm
const Epetra_Comm & Comm() const
Returns a pointer to the Epetra_Comm communicator associated with this operator.
Definition: Amesos_Umfpack.h:119
Teuchos::RCP::get
T * get() const
Amesos_Umfpack::GetProblem
const Epetra_LinearProblem * GetProblem() const
Returns the Epetra_LinearProblem.
Definition: Amesos_Umfpack.h:107
Amesos_Umfpack::GetTiming
void GetTiming(Teuchos::ParameterList &TimingParameterList) const
Extracts timing information from the current solver and places it in the parameter list.
Definition: Amesos_Umfpack.h:147
Teuchos::ParameterList
Amesos_Umfpack::NumFactTime_
int NumFactTime_
Definition: Amesos_Umfpack.h:263
Amesos_Umfpack::MatrixShapeOK
bool MatrixShapeOK() const
Returns true if UMFPACK can handle this matrix shape.
Definition: Amesos_Umfpack.cpp:378
Amesos_Time
Amesos_Time: Container for timing information.
Definition: Amesos_Time.h:50
Epetra_Map
Amesos_Umfpack::Ai
std::vector< int > Ai
Definition: Amesos_Umfpack.h:230
Amesos_Umfpack::SymbolicFactorization
int SymbolicFactorization()
Performs SymbolicFactorization on the matrix A.
Definition: Amesos_Umfpack.cpp:389
Amesos_Umfpack::MtxRedistTime_
int MtxRedistTime_
Definition: Amesos_Umfpack.h:262
Epetra_Import
Epetra_Time.h
Amesos_Umfpack::NumSymbolicFact
int NumSymbolicFact() const
Returns the number of symbolic factorizations performed by this object.
Definition: Amesos_Umfpack.h:132
Amesos_Status
Amesos_Status: Container for some status variables.
Definition: Amesos_Status.h:20
Amesos_Status.h