Amesos Package Browser (Single Doxygen Collection) Development
Loading...
Searching...
No Matches
Amesos_Lapack.h
Go to the documentation of this file.
1// @HEADER
2// ***********************************************************************
3//
4// Amesos: Direct Sparse Solver Package
5// Copyright (2004) Sandia Corporation
6//
7// Under terms of Contract DE-AC04-94AL85000, there is a non-exclusive
8// license for use of this work by or on behalf of the U.S. Government.
9//
10// This library is free software; you can redistribute it and/or modify
11// it under the terms of the GNU Lesser General Public License as
12// published by the Free Software Foundation; either version 2.1 of the
13// License, or (at your option) any later version.
14//
15// This library is distributed in the hope that it will be useful, but
16// WITHOUT ANY WARRANTY; without even the implied warranty of
17// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
18// Lesser General Public License for more details.
19//
20// You should have received a copy of the GNU Lesser General Public
21// License along with this library; if not, write to the Free Software
22// Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301
23// USA
24// Questions? Contact Michael A. Heroux (maherou@sandia.gov)
25//
26// ***********************************************************************
27// @HEADER
28
29#ifndef AMESOS_LAPACK_H
30#define AMESOS_LAPACK_H
31
32#include "Amesos_ConfigDefs.h"
33#include "Amesos_BaseSolver.h"
34#include "Amesos_NoCopiable.h"
35#include "Amesos_Utils.h"
36#include "Amesos_Time.h"
37#include "Amesos_Status.h"
38#include "Amesos_Control.h"
39#include "Epetra_Comm.h"
40#include "Epetra_Map.h"
41#include "Epetra_SerialDenseMatrix.h"
42#include "Epetra_SerialDenseVector.h"
43#include "Epetra_SerialDenseSolver.h"
44#include "Epetra_CrsMatrix.h"
45#include "Epetra_Import.h"
46#include "Epetra_Export.h"
47class Epetra_RowMatrix;
48class Epetra_LinearProblem;
49#include "Teuchos_RCP.hpp"
50
52
66 private Amesos_Time,
67 private Amesos_NoCopiable,
68 private Amesos_Utils,
69 private Amesos_Control,
70 private Amesos_Status
71{
72public:
73
75
83 Amesos_Lapack(const Epetra_LinearProblem& LinearProblem );
84
86
88 ~Amesos_Lapack(void);
89
91
92
94
96
97 int Solve();
98
100
101
102 const Epetra_LinearProblem *GetProblem() const { return(Problem_); };
103
104 bool MatrixShapeOK() const;
105
106 int SetUseTranspose(bool UseTranspose_in) {
107 UseTranspose_ = UseTranspose_in;
108 return(0);
109 }
110
111 bool UseTranspose() const {return(UseTranspose_);};
112
113 const Epetra_Comm & Comm() const {
114 return(GetProblem()->GetOperator()->Comm());
115 }
116
118
120 void setParameterList(Teuchos::RCP<Teuchos::ParameterList> const& paramList) ;
121
122 Teuchos::RCP<Teuchos::ParameterList> unsetParameterList() ;
123
124
126 int SetParameters( Teuchos::ParameterList &ParameterList ) ;
127
129
139 int GEEV(Epetra_Vector& Er, Epetra_Vector& Ei);
140
143
146
148 int NumSolve() const { return( Amesos_Status::NumSolve_ ); }
149
151 void PrintTiming() const;
152
154 void PrintStatus() const;
155
157 void GetTiming( Teuchos::ParameterList &TimingParameterList ) const { Amesos_Time::GetTiming(TimingParameterList); }
158
160
161protected:
162
164 const Epetra_RowMatrix* Matrix() const
165 {
166 return(Problem_->GetMatrix());
167 }
168
170#ifndef EPETRA_NO_32BIT_GLOBAL_INDICES
171 inline int NumGlobalRows() const
172 {
173 return(Matrix()->NumGlobalRows());
174 }
175#endif
176
177 inline long long NumGlobalRows64() const
178 {
179 return(Matrix()->NumGlobalRows64());
180 }
181
183 inline int NumMyRows() const
184 {
185 return(Matrix()->NumMyRows());
186 }
187
189 inline const Epetra_Map& SerialMap()
190 {
191 return(*(SerialMap_.get()));
192 }
193
195 inline Epetra_RowMatrix& SerialMatrix()
196 {
197 return(*(SerialMatrix_.get()));
198 }
199
200 inline Epetra_CrsMatrix& SerialCrsMatrix()
201 {
202 return(*(SerialCrsMatrix_.get()));
203 }
204
206 const Epetra_Import& MatrixImporter()
207 {
208 return(*(MatrixImporter_.get()));
209 }
210
212 const Epetra_Export& RhsExporter()
213 {
214 return(*(RhsExporter_.get()));
215 }
216
218 const Epetra_Import& SolutionImporter()
219 {
220 return(*(SolutionImporter_.get()));
221 }
222
223 Teuchos::RCP<Teuchos::ParameterList> pl_ ;
224
226 int SolveSerial(Epetra_MultiVector& X,
227 const Epetra_MultiVector& B);
228
230 int SolveDistributed(Epetra_MultiVector& X,
231 const Epetra_MultiVector& B);
232
235
237 int SerialToDense();
238
240 int DenseToFactored();
241
242 Teuchos::RCP<Epetra_RowMatrix> SerialMatrix_;
243 Teuchos::RCP<Epetra_CrsMatrix> SerialCrsMatrix_;
244 Teuchos::RCP<Epetra_Map> SerialMap_;
245 Teuchos::RCP<Epetra_Import> MatrixImporter_;
246 Teuchos::RCP<Epetra_Export> RhsExporter_;
247 Teuchos::RCP<Epetra_Import> SolutionImporter_;
248
250 Epetra_SerialDenseMatrix DenseMatrix_;
252 Epetra_SerialDenseMatrix DenseLHS_;
254 Epetra_SerialDenseMatrix DenseRHS_;
256 Epetra_SerialDenseSolver DenseSolver_;
257
261 const Epetra_LinearProblem* Problem_;
262
265
266 long long NumGlobalRows_;
268
269 Teuchos::RCP<Teuchos::ParameterList> ParameterList_ ;
270
271}; // End of class Amesos_Lapack
272#endif /* AMESOS_LAPACK_H */
Amesos_BaseSolver: A pure virtual class for direct solution of real-valued double-precision operators...
Amesos_Control: Container for some control variables.
Amesos_Lapack: an interface to LAPACK.
int SetUseTranspose(bool UseTranspose_in)
If set true, X will be set to the solution of AT X = B (not A X = B)
Epetra_CrsMatrix & SerialCrsMatrix()
int NumSolve() const
Returns the number of solves performed by this object.
~Amesos_Lapack(void)
Amesos_Lapack Destructor.
Epetra_RowMatrix & SerialMatrix()
Returns a reference to serial matrix (that with all rows on process 0).
Teuchos::RCP< Teuchos::ParameterList > pl_
int DenseToFactored()
Factors the matrix using LAPACK.
Teuchos::RCP< Epetra_Map > SerialMap_
long long NumGlobalNonzeros_
int Solve()
Solves A X = B (or AT x = B)
const Epetra_Import & MatrixImporter()
Returns a reference to the matrix importer (from row map to serial map).
long long NumGlobalRows_
const Epetra_LinearProblem * GetProblem() const
Returns the Epetra_LinearProblem.
long long NumGlobalRows64() const
bool UseTranspose() const
Returns the current UseTranspose setting.
Teuchos::RCP< Epetra_Import > SolutionImporter_
Epetra_SerialDenseMatrix DenseMatrix_
Dense matrix.
int SolveSerial(Epetra_MultiVector &X, const Epetra_MultiVector &B)
Solves the linear system, when only one process is used.
const Epetra_Export & RhsExporter()
Returns a reference to the rhs exporter (from range map to serial map).
int DistributedToSerial()
Converts a distributed matrix to serial matrix.
Epetra_SerialDenseMatrix DenseLHS_
Dense LHS.
int NumGlobalRows() const
Returns the number of global rows, or -1 if Matrix() returns 0.
Teuchos::RCP< Teuchos::ParameterList > ParameterList_
const Epetra_Map & SerialMap()
Returns a reference to serial map (that with all elements on process 0).
Teuchos::RCP< Epetra_Export > RhsExporter_
void PrintTiming() const
Print timing information.
void GetTiming(Teuchos::ParameterList &TimingParameterList) const
Extracts timing information from the current solver and places it in the parameter list.
int NumSymbolicFact() const
Returns the number of symbolic factorizations performed by this object.
int NumNumericFact() const
Returns the number of numeric factorizations performed by this object.
Epetra_SerialDenseSolver DenseSolver_
Linear problem for dense matrix and vectors.
Epetra_SerialDenseMatrix DenseRHS_
Dense RHS.
bool MatrixShapeOK() const
Returns true if the solver can handle this matrix shape.
bool UseTranspose_
If true, the linear system with the transpose will be solved.
Teuchos::RCP< Epetra_CrsMatrix > SerialCrsMatrix_
int GEEV(Epetra_Vector &Er, Epetra_Vector &Ei)
Computes the eigenvalues of the linear system matrix using DGEEV.
Teuchos::RCP< Epetra_RowMatrix > SerialMatrix_
Teuchos::RCP< Teuchos::ParameterList > unsetParameterList()
This is an empty stub.
int NumericFactorization()
Performs NumericFactorization on the matrix A.
const Epetra_RowMatrix * Matrix() const
Returns a pointer to the linear system matrix.
const Epetra_Comm & Comm() const
Returns a pointer to the Epetra_Comm communicator associated with this operator.
const Epetra_LinearProblem * Problem_
Pointer to the linear problem.
const Epetra_Import & SolutionImporter()
Returns a reference to the solution importer (to domain map from serial map).
int MtxRedistTime_
Quick access ids for the individual timings.
int SetParameters(Teuchos::ParameterList &ParameterList)
Deprecated - Sets parameters.
void setParameterList(Teuchos::RCP< Teuchos::ParameterList > const &paramList)
Use this parameter list to read values from
int SerialToDense()
Converts a serial matrix to dense format.
Teuchos::RCP< Epetra_Import > MatrixImporter_
Amesos_Lapack(const Epetra_LinearProblem &LinearProblem)
Amesos_Lapack Constructor.
int NumMyRows() const
Returns the number of local rows, or -1 if Matrix() returns 0.
void PrintStatus() const
Print information about the factorization and solution phases.
int SymbolicFactorization()
Performs SymbolicFactorization on the matrix A.
int SolveDistributed(Epetra_MultiVector &X, const Epetra_MultiVector &B)
Solves the linear system, when more than one process is used.
Amesos_NoCopiable: Simple class to prevent the usage of copy constructor and operator =.
Amesos_Status: Container for some status variables.
int NumSymbolicFact_
Number of symbolic factorization phases.
int NumSolve_
Number of solves.
int NumNumericFact_
Number of numeric factorization phases.
Amesos_Time: Container for timing information.
Definition Amesos_Time.h:51
void GetTiming(Teuchos::ParameterList &list) const
Load up the current timing information into the parameter list.
Amesos_Utils: Collections of basic utilities.