Amesos Package Browser (Single Doxygen Collection)  Development
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
54 class Amesos_Superlu_Pimpl ;
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 
72 public:
73 
75 
83  Amesos_Superludist(const Epetra_LinearProblem& LinearProblem);
84 
86  ~Amesos_Superludist(void);
89 
91 
92  int SymbolicFactorization() ;
93 
94  int NumericFactorization() ;
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 
142 private:
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 
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 
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 
205  int nprow_;
206  int npcol_;
207 
209  std::string ColPerm_;
210  std::string RowPerm_;
211  int* perm_c_;
212  int* perm_r_;
213  std::string IterRefine_;
215  bool Equil_;
216 
219 
220 }; // End of class Amesos_Superludist
221 #endif /* AMESOS_SUPERLUDIST_H */
void PrintTiming() const
Print various timig.
int NumSymbolicFact_
Number of symbolic factorization phases.
Definition: Amesos_Status.h:67
Amesos_Control: Container for some control variables.
int NumSymbolicFact() const
Returns the number of symbolic factorizations performed by this object.
int NumSolve() const
Returns the number of solves performed by this object.
int Solve()
Solves A X = B (or AT x = B)
bool ReuseSymbolic_
Allows FactOption to be used on subsequent calls to pdgssvx from NumericFactorization.
void PrintStatus() const
Print various information about the parameters used by Superludist.
Amesos_Superludist: An object-oriented wrapper for Superludist.
bool FactorizationOK_
true if NumericFactorization() has been successfully called.
std::vector< int > Ap_
bool UseTranspose() const
Always returns false. Superludist doesn&#39;t support transpose solve.
~Amesos_Superludist(void)
Amesos_Superludist Destructor.
bool Redistribute_
redistribute the input matrix prior to calling Superludist
const Epetra_LinearProblem * GetProblem() const
Returns the Epetra_LinearProblem.
int SymbolicFactorization()
Performs SymbolicFactorization on the matrix A.
const Epetra_Comm & Comm() const
Returns a pointer to the Epetra_Comm communicator associated with this operator.
int NumNumericFact_
Number of numeric factorization phases.
Definition: Amesos_Status.h:69
int GridCreated_
true if the SuperLU_DIST&#39;s grid has been created (and has to be free&#39;d)
void GetTiming(Teuchos::ParameterList &list) const
Load up the current timing information into the parameter list.
Definition: Amesos_Time.h:124
const Epetra_Map & UniformMap() const
int SetParameters(Teuchos::ParameterList &ParameterList)
Updates internal variables.
int NumSolve_
Number of solves.
Definition: Amesos_Status.h:71
Epetra_CrsMatrix & CrsUniformMatrix()
int NumNumericFact() const
Returns the number of numeric factorizations performed by this object.
Epetra_RowMatrix * RowMatrixA_
std::vector< double > Aval_
const Epetra_Import & Importer() const
int NumericFactorization()
Performs NumericFactorization on the matrix A.
RCP< Epetra_Map > UniformMap_
Amesos_Status: Container for some status variables.
Definition: Amesos_Status.h:20
int * Global_Columns_
Contains the global ID of local columns.
void GetTiming(Teuchos::ParameterList &TimingParameterList) const
Extracts timing information from the current solver and places it in the parameter list...
Teuchos::RCP< Amesos_Superlu_Pimpl > PrivateSuperluData_
Amesos_Time: Container for timing information.
Definition: Amesos_Time.h:50
int SetUseTranspose(bool UseTranspose)
Amesos_Superludist does not support transpose at this time.
RCP< Epetra_RowMatrix > UniformMatrix_
int NumGlobalRows_
Global dimension of the matrix.
const Epetra_RowMatrix & UniformMatrix() const
Amesos_Superludist(const Epetra_LinearProblem &LinearProblem)
Amesos_Superludist Constructor.
Teuchos::RCP< Epetra_Import > Importer_
Amesos_BaseSolver: A pure virtual class for direct solution of real-valued double-precision operators...
const Epetra_LinearProblem * Problem_
bool MatrixShapeOK() const
Returns true if SUPERLUDIST can handle this matrix shape.
Amesos_NoCopiable: Simple class to prevent the usage of copy constructor and operator =...
RCP< Epetra_CrsMatrix > CrsUniformMatrix_
std::vector< int > Ai_
Amesos_Utils: Collections of basic utilities.
Definition: Amesos_Utils.h:19