Amesos Package Browser (Single Doxygen Collection) Development
Loading...
Searching...
No Matches
Amesos_Superludist.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_SUPERLUDIST_H
30#define AMESOS_SUPERLUDIST_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_LinearProblem.h"
40#include "Teuchos_RCP.hpp"
41#ifdef EPETRA_MPI
42#include "Epetra_MpiComm.h"
43#else
44#include "Epetra_Comm.h"
45#endif
46
47
48// Amesos_Superludist_Pimpl contains a pointer to structures defined in
49// superlu_ddefs.h. This prevents Amesos_Superludist.h
50// from having to include superludist.h.
51//
52// Doxygen does not handle forward class references well.
53#ifndef DOXYGEN_SHOULD_SKIP_THIS
55#endif
56
57
59
65 private Amesos_Time,
66 private Amesos_NoCopiable,
67 private Amesos_Utils,
68 private Amesos_Control,
69 private Amesos_Status
70{
71
72public:
73
75
83 Amesos_Superludist(const Epetra_LinearProblem& LinearProblem);
84
86
89
91
93
95
96 int Solve();
97
98
100
101
103
105 int SetUseTranspose(bool UseTranspose) { return( UseTranspose?1:0 );};
106
108
109
110 const Epetra_LinearProblem *GetProblem() const { return(Problem_); };
111
113
116 bool MatrixShapeOK() const;
117
119 bool UseTranspose() const {return(false);};
121
122 int SetParameters( Teuchos::ParameterList &ParameterList ) ;
123
126
129
131 int NumSolve() const { return( Amesos_Status::NumSolve_ ); }
132
134 void PrintTiming() const;
135
137 void PrintStatus() const;
138
140 void GetTiming( Teuchos::ParameterList &TimingParameterList ) const { Amesos_Time::GetTiming(TimingParameterList); }
141
142private:
143 inline const Epetra_Comm& Comm() const {return(GetProblem()->GetOperator()->Comm());};
144
145 inline const Epetra_Import& Importer() const
146 {
147 return(*(Importer_.get()));
148 }
149
150 inline const Epetra_Map& UniformMap() const
151 {
152 return(*(UniformMap_.get()));
153 }
154
155 inline const Epetra_RowMatrix& UniformMatrix() const
156 {
157 return(*(UniformMatrix_.get()));
158 }
159
160 inline Epetra_CrsMatrix& CrsUniformMatrix()
161 {
162 return(*(CrsUniformMatrix_.get()));
163 }
164
165 //
166 // PrivateSuperluData_ contains pointers to data needed by klu whose
167 // data structures are defined by klu.h
168 //
169 Teuchos::RCP<Amesos_Superlu_Pimpl> PrivateSuperluData_;
170
171 int RedistributeA();
172
173 int ReFactor();
174 int Factor();
175
176 const Epetra_LinearProblem* Problem_;
177 Epetra_RowMatrix *RowMatrixA_ ; // Problem_->GetOperator()
178
179 RCP<Epetra_Map> UniformMap_;
180 RCP<Epetra_CrsMatrix> CrsUniformMatrix_;
181 RCP<Epetra_RowMatrix> UniformMatrix_;
182 Teuchos::RCP<Epetra_Import> Importer_;
183
188
194
197
198 // Ap, Ai, Aval form the compressed row storage used by SuperLU_DIST
199 std::vector <int> Ap_;
200 std::vector <int> Ai_;
201 std::vector <double> Aval_;
204
207
209 std::string ColPerm_;
210 std::string RowPerm_;
213 std::string IterRefine_;
215 bool Equil_;
216
219
220}; // End of class Amesos_Superludist
221#endif /* AMESOS_SUPERLUDIST_H */
Amesos_BaseSolver: A pure virtual class for direct solution of real-valued double-precision operators...
Amesos_Control: Container for some control variables.
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_Superludist: An object-oriented wrapper for Superludist.
int SetParameters(Teuchos::ParameterList &ParameterList)
Updates internal variables.
Teuchos::RCP< Amesos_Superlu_Pimpl > PrivateSuperluData_
void PrintTiming() const
Print various timig.
Epetra_RowMatrix * RowMatrixA_
int SymbolicFactorization()
Performs SymbolicFactorization on the matrix A.
const Epetra_LinearProblem * GetProblem() const
Returns the Epetra_LinearProblem.
std::vector< int > Ap_
int Solve()
Solves A X = B (or AT x = B)
int NumGlobalRows_
Global dimension of the matrix.
int NumSymbolicFact() const
Returns the number of symbolic factorizations performed by this object.
int * Global_Columns_
Contains the global ID of local columns.
Epetra_CrsMatrix & CrsUniformMatrix()
const Epetra_Comm & Comm() const
Returns a pointer to the Epetra_Comm communicator associated with this operator.
void PrintStatus() const
Print various information about the parameters used by Superludist.
bool UseTranspose() const
Always returns false. Superludist doesn't support transpose solve.
const Epetra_Import & Importer() const
RCP< Epetra_CrsMatrix > CrsUniformMatrix_
RCP< Epetra_Map > UniformMap_
void GetTiming(Teuchos::ParameterList &TimingParameterList) const
Extracts timing information from the current solver and places it in the parameter list.
Amesos_Superludist(const Epetra_LinearProblem &LinearProblem)
Amesos_Superludist Constructor.
int NumSolve() const
Returns the number of solves performed by this object.
Teuchos::RCP< Epetra_Import > Importer_
std::vector< int > Ai_
std::vector< double > Aval_
~Amesos_Superludist(void)
Amesos_Superludist Destructor.
bool Redistribute_
redistribute the input matrix prior to calling Superludist
int GridCreated_
true if the SuperLU_DIST's grid has been created (and has to be free'd)
const Epetra_Map & UniformMap() const
bool FactorizationOK_
true if NumericFactorization() has been successfully called.
int NumericFactorization()
Performs NumericFactorization on the matrix A.
const Epetra_LinearProblem * Problem_
bool ReuseSymbolic_
Allows FactOption to be used on subsequent calls to pdgssvx from NumericFactorization.
int SetUseTranspose(bool UseTranspose)
Amesos_Superludist does not support transpose at this time.
int NumNumericFact() const
Returns the number of numeric factorizations performed by this object.
const Epetra_RowMatrix & UniformMatrix() const
bool MatrixShapeOK() const
Returns true if SUPERLUDIST can handle this matrix shape.
RCP< Epetra_RowMatrix > UniformMatrix_
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.