Amesos Package Browser (Single Doxygen Collection)
Development
Toggle main menu visibility
Loading...
Searching...
No Matches
src
Amesos_Scalapack.h
Go to the documentation of this file.
1
/*
2
TODO:
3
1) Eliminate mb_ and grid_mb_ DONE
4
5
1) Allow user level control over whether to use a 1D or 2D data
6
distribution.
7
2) Figure out how to redistribute the vectors. (Allow no more than
8
nb vectors at a time for now). Done - I think
9
3) Move the code from software:MyExamples/TwodMap/TwoDMap.cpp in to
10
this routine (for the 2D case) Done - I think
11
4) Create the ScaLAPACK 2D dense matrix. Done - I think
12
*/
13
14
// @HEADER
15
// ***********************************************************************
16
//
17
// Amesos: Direct Sparse Solver Package
18
// Copyright (2004) Sandia Corporation
19
//
20
// Under terms of Contract DE-AC04-94AL85000, there is a non-exclusive
21
// license for use of this work by or on behalf of the U.S. Government.
22
//
23
// This library is free software; you can redistribute it and/or modify
24
// it under the terms of the GNU Lesser General Public License as
25
// published by the Free Software Foundation; either version 2.1 of the
26
// License, or (at your option) any later version.
27
//
28
// This library is distributed in the hope that it will be useful, but
29
// WITHOUT ANY WARRANTY; without even the implied warranty of
30
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
31
// Lesser General Public License for more details.
32
//
33
// You should have received a copy of the GNU Lesser General Public
34
// License along with this library; if not, write to the Free Software
35
// Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301
36
// USA
37
// Questions? Contact Michael A. Heroux (maherou@sandia.gov)
38
//
39
// ***********************************************************************
40
// @HEADER
41
42
#ifndef _AMESOS_SCALAPACK_H_
43
#define _AMESOS_SCALAPACK_H_
44
45
#include "
Amesos_ConfigDefs.h
"
46
#include "
Amesos_BaseSolver.h
"
47
#include "
Amesos_NoCopiable.h
"
48
#include "
Amesos_Utils.h
"
49
#include "
Amesos_Time.h
"
50
#include "
Amesos_Status.h
"
51
#include "
Amesos_Control.h
"
52
#include "Epetra_LinearProblem.h"
53
#include "Epetra_Time.h"
54
#ifdef EPETRA_MPI
55
#include "Epetra_MpiComm.h"
56
#else
57
#include "Epetra_Comm.h"
58
#endif
59
#include "Epetra_CrsGraph.h"
60
62
145
146
class
Amesos_Scalapack
:
public
Amesos_BaseSolver
,
147
private
Amesos_Time
,
148
private
Amesos_NoCopiable
,
149
private
Amesos_Utils
,
150
private
Amesos_Control
,
151
private
Amesos_Status
152
{
153
154
public
:
155
157
165
Amesos_Scalapack
(
const
Epetra_LinearProblem& LinearProblem );
166
168
170
~Amesos_Scalapack
(
void
);
172
174
176
183
int
SymbolicFactorization
() ;
184
186
211
int
NumericFactorization
() ;
212
214
234
int
Solve
();
235
237
239
240
#if 0
242
char
* Label()
const
{
return
(Epetra_Object::Label());};
243
#endif
244
246
const
Epetra_LinearProblem *
GetProblem
()
const
{
return
(
Problem_
); };
247
249
252
bool
MatrixShapeOK
()
const
;
253
255
267
int
SetUseTranspose
(
bool
UseTranspose
) {
UseTranspose_
=
UseTranspose
;
return
(0);};
268
270
bool
UseTranspose
()
const
{
return
(
UseTranspose_
);};
271
273
const
Epetra_Comm &
Comm
()
const
{
return
(
GetProblem
()->GetOperator()->
Comm
());};
274
276
292
int
SetParameters
( Teuchos::ParameterList &ParameterList ) ;
293
295
int
NumSymbolicFact
()
const
{
return
(
Amesos_Status::NumSymbolicFact_
); }
296
298
int
NumNumericFact
()
const
{
return
(
Amesos_Status::NumNumericFact_
); }
299
301
int
NumSolve
()
const
{
return
(
Amesos_Status::NumSolve_
); }
302
304
void
PrintTiming
()
const
;
305
307
void
PrintStatus
()
const
;
308
310
void
GetTiming
( Teuchos::ParameterList &TimingParameterList )
const
{
Amesos_Time::GetTiming
(TimingParameterList); }
311
313
314
private
:
315
/*
316
RedistributeA - Convert matrix to a dense ScaLAPACK matrix
317
Preconditions:
318
Problem_ must be set
319
SetParameters()
320
ScaLAPACK1DMap and ScaLAPACK1DMatrix must either be 0 or be pointers to
321
appropriatly allocate objects. If they are non-zero, those objects
322
will be deleted and recreated.
323
324
Postconditions:
325
nprow_, npcol_, DescA_
326
RowMatrixA_
327
ScaLAPACK1DMap_
328
ScaLAPACK1DMatrix_
329
ImportToScaLAPACK1D_
330
ImportBackToOriginal_
331
332
*/
333
int
RedistributeA
();
334
335
/*
336
ConvertToScalapack - Convert matirx to form expected by Scalapack: Ai, Ap, Aval
337
Preconditions:
338
Problem_
339
Postconditions:
340
nprow_, npcol_,
341
*/
342
int
ConvertToScalapack
();
343
344
/*
345
PerformNumericFactorization - Call Scalapack to perform numeric factorization
346
Preconditions:
347
348
Postconditions:
349
DenseA_, DescA_
350
*/
351
int
PerformNumericFactorization
();
352
353
protected
:
354
355
int
iam_
;
// Process number (i.e. Comm().MyPID()
356
357
int
NumGlobalElements_
;
// Number of rows and columns in the Problem_->GetOperator()
358
int
NumGlobalNonzeros_
;
359
360
//
361
// The following variables are required for the ScaLAPACK interface:
362
//
363
int
nprow_
;
// number of process rows: 1 for now
364
int
npcol_
;
// number of process columns
365
int
ictxt_
;
// BLACS context
366
int
m_per_p_
;
// Number of columns per process
367
int
DescA_
[10];
// ScaLAPACK array descriptor
368
369
Epetra_Map *
ScaLAPACK1DMap_
;
// Points to a 1D Map which matches a ScaLAPACK 1D
370
// blocked (not block cyclic) distribution
371
Epetra_CrsMatrix *
ScaLAPACK1DMatrix_
;
// Points to a ScaLAPACK 1D
372
// blocked (not block cyclic) distribution
373
Epetra_Map *
VectorMap_
;
// Points to a Map for vectors X and B
374
std::vector<double>
DenseA_
;
// The data in a ScaLAPACK 1D blocked format
375
std::vector<int>
Ipiv_
;
// ScaLAPACK pivot information
376
int
NumOurRows_
;
377
int
NumOurColumns_
;
378
379
380
bool
UseTranspose_
;
381
const
Epetra_LinearProblem *
Problem_
;
382
383
384
// some timing internal to ScaLAPACK
385
double
ConTime_
;
// time to convert to ScaLAPACKformat
386
double
SymTime_
;
// time for symbolic factorization
387
double
NumTime_
;
// time for numeric factorization
388
double
SolTime_
;
// time for solution
389
double
VecTime_
;
// time to redistribute vectors
390
double
MatTime_
;
// time to redistribute matrix
391
392
//
393
// Control of the data distribution
394
//
395
bool
TwoD_distribution_
;
// True if 2D data distribution is used
396
int
grid_nb_
;
// Row and Column blocking factor (only used in 2D distribution)
397
int
mypcol_
;
// Process column in the ScaLAPACK2D grid
398
int
myprow_
;
// Process row in the ScaLAPACK2D grid
399
Epetra_CrsMatrix*
FatOut_
;
//
400
401
//
402
// Blocking factors (For both 1D and 2D data distributions)
403
//
404
int
nb_
;
405
int
lda_
;
406
407
Epetra_Time *
Time_
;
408
409
};
// End of class Amesos_Scalapack
410
#endif
/* _AMESOS_SCALAPACK_H_ */
Amesos_BaseSolver.h
Amesos_ConfigDefs.h
Amesos_Control.h
Amesos_NoCopiable.h
Amesos_Status.h
Amesos_Time.h
Amesos_Utils.h
Amesos_BaseSolver
Amesos_BaseSolver: A pure virtual class for direct solution of real-valued double-precision operators...
Definition
Amesos_BaseSolver.h:225
Amesos_Control::Amesos_Control
Amesos_Control()
Default constructor.
Definition
Amesos_Control.h:20
Amesos_NoCopiable::Amesos_NoCopiable
Amesos_NoCopiable()
Default constructor.
Definition
Amesos_NoCopiable.h:48
Amesos_Scalapack::MatrixShapeOK
bool MatrixShapeOK() const
Returns true if SCALAPACK can handle this matrix shape.
Definition
Amesos_Scalapack.cpp:769
Amesos_Scalapack::Time_
Epetra_Time * Time_
Definition
Amesos_Scalapack.h:407
Amesos_Scalapack::NumSolve
int NumSolve() const
Returns the number of solves performed by this object.
Definition
Amesos_Scalapack.h:301
Amesos_Scalapack::NumTime_
double NumTime_
Definition
Amesos_Scalapack.h:387
Amesos_Scalapack::PrintTiming
void PrintTiming() const
Print timing information.
Definition
Amesos_Scalapack.cpp:1015
Amesos_Scalapack::~Amesos_Scalapack
~Amesos_Scalapack(void)
Amesos_Scalapack Destructor.
Definition
Amesos_Scalapack.cpp:71
Amesos_Scalapack::VecTime_
double VecTime_
Definition
Amesos_Scalapack.h:389
Amesos_Scalapack::SymTime_
double SymTime_
Definition
Amesos_Scalapack.h:386
Amesos_Scalapack::iam_
int iam_
Definition
Amesos_Scalapack.h:355
Amesos_Scalapack::NumGlobalNonzeros_
int NumGlobalNonzeros_
Definition
Amesos_Scalapack.h:358
Amesos_Scalapack::SolTime_
double SolTime_
Definition
Amesos_Scalapack.h:388
Amesos_Scalapack::UseTranspose_
bool UseTranspose_
Definition
Amesos_Scalapack.h:380
Amesos_Scalapack::SetUseTranspose
int SetUseTranspose(bool UseTranspose)
SetUseTranpose(true) is more efficient in Amesos_Scalapack.
Definition
Amesos_Scalapack.h:267
Amesos_Scalapack::Solve
int Solve()
Solves A X = B (or AT X = B).
Definition
Amesos_Scalapack.cpp:810
Amesos_Scalapack::NumOurRows_
int NumOurRows_
Definition
Amesos_Scalapack.h:376
Amesos_Scalapack::TwoD_distribution_
bool TwoD_distribution_
Definition
Amesos_Scalapack.h:395
Amesos_Scalapack::npcol_
int npcol_
Definition
Amesos_Scalapack.h:364
Amesos_Scalapack::PerformNumericFactorization
int PerformNumericFactorization()
Definition
Amesos_Scalapack.cpp:694
Amesos_Scalapack::ScaLAPACK1DMap_
Epetra_Map * ScaLAPACK1DMap_
Definition
Amesos_Scalapack.h:369
Amesos_Scalapack::NumNumericFact
int NumNumericFact() const
Returns the number of numeric factorizations performed by this object.
Definition
Amesos_Scalapack.h:298
Amesos_Scalapack::nprow_
int nprow_
Definition
Amesos_Scalapack.h:363
Amesos_Scalapack::RedistributeA
int RedistributeA()
Definition
Amesos_Scalapack.cpp:124
Amesos_Scalapack::MatTime_
double MatTime_
Definition
Amesos_Scalapack.h:390
Amesos_Scalapack::GetTiming
void GetTiming(Teuchos::ParameterList &TimingParameterList) const
Extracts timing information from the current solver and places it in the parameter list.
Definition
Amesos_Scalapack.h:310
Amesos_Scalapack::lda_
int lda_
Definition
Amesos_Scalapack.h:405
Amesos_Scalapack::Comm
const Epetra_Comm & Comm() const
Returns a pointer to the Epetra_Comm communicator associated with this matrix.
Definition
Amesos_Scalapack.h:273
Amesos_Scalapack::FatOut_
Epetra_CrsMatrix * FatOut_
Definition
Amesos_Scalapack.h:399
Amesos_Scalapack::grid_nb_
int grid_nb_
Definition
Amesos_Scalapack.h:396
Amesos_Scalapack::DenseA_
std::vector< double > DenseA_
Definition
Amesos_Scalapack.h:374
Amesos_Scalapack::NumSymbolicFact
int NumSymbolicFact() const
Returns the number of symbolic factorizations performed by this object.
Definition
Amesos_Scalapack.h:295
Amesos_Scalapack::ConTime_
double ConTime_
Definition
Amesos_Scalapack.h:385
Amesos_Scalapack::ConvertToScalapack
int ConvertToScalapack()
Definition
Amesos_Scalapack.cpp:510
Amesos_Scalapack::NumericFactorization
int NumericFactorization()
Performs NumericFactorization on the matrix A.
Definition
Amesos_Scalapack.cpp:789
Amesos_Scalapack::mypcol_
int mypcol_
Definition
Amesos_Scalapack.h:397
Amesos_Scalapack::ictxt_
int ictxt_
Definition
Amesos_Scalapack.h:365
Amesos_Scalapack::Problem_
const Epetra_LinearProblem * Problem_
Definition
Amesos_Scalapack.h:381
Amesos_Scalapack::VectorMap_
Epetra_Map * VectorMap_
Definition
Amesos_Scalapack.h:373
Amesos_Scalapack::UseTranspose
bool UseTranspose() const
Returns the current UseTranspose setting.
Definition
Amesos_Scalapack.h:270
Amesos_Scalapack::Amesos_Scalapack
Amesos_Scalapack(const Epetra_LinearProblem &LinearProblem)
Amesos_Scalapack Constructor.
Definition
Amesos_Scalapack.cpp:50
Amesos_Scalapack::Ipiv_
std::vector< int > Ipiv_
Definition
Amesos_Scalapack.h:375
Amesos_Scalapack::DescA_
int DescA_[10]
Definition
Amesos_Scalapack.h:367
Amesos_Scalapack::NumGlobalElements_
int NumGlobalElements_
Definition
Amesos_Scalapack.h:357
Amesos_Scalapack::m_per_p_
int m_per_p_
Definition
Amesos_Scalapack.h:366
Amesos_Scalapack::GetProblem
const Epetra_LinearProblem * GetProblem() const
Get a pointer to the Problem.
Definition
Amesos_Scalapack.h:246
Amesos_Scalapack::SetParameters
int SetParameters(Teuchos::ParameterList &ParameterList)
Updates internal variables.
Definition
Amesos_Scalapack.cpp:657
Amesos_Scalapack::SymbolicFactorization
int SymbolicFactorization()
Performs SymbolicFactorization on the matrix A.
Definition
Amesos_Scalapack.cpp:778
Amesos_Scalapack::myprow_
int myprow_
Definition
Amesos_Scalapack.h:398
Amesos_Scalapack::ScaLAPACK1DMatrix_
Epetra_CrsMatrix * ScaLAPACK1DMatrix_
Definition
Amesos_Scalapack.h:371
Amesos_Scalapack::NumOurColumns_
int NumOurColumns_
Definition
Amesos_Scalapack.h:377
Amesos_Scalapack::PrintStatus
void PrintStatus() const
Print information about the factorization and solution phases.
Definition
Amesos_Scalapack.cpp:994
Amesos_Scalapack::nb_
int nb_
Definition
Amesos_Scalapack.h:404
Amesos_Status::NumSymbolicFact_
int NumSymbolicFact_
Number of symbolic factorization phases.
Definition
Amesos_Status.h:67
Amesos_Status::NumSolve_
int NumSolve_
Number of solves.
Definition
Amesos_Status.h:71
Amesos_Status::NumNumericFact_
int NumNumericFact_
Number of numeric factorization phases.
Definition
Amesos_Status.h:69
Amesos_Status::Amesos_Status
Amesos_Status()
Default constructor.
Definition
Amesos_Status.h:24
Amesos_Time::Amesos_Time
Amesos_Time()
Default constructor to create size timers.
Definition
Amesos_Time.h:55
Amesos_Time::GetTiming
void GetTiming(Teuchos::ParameterList &list) const
Load up the current timing information into the parameter list.
Definition
Amesos_Time.h:124
Amesos_Utils::Amesos_Utils
Amesos_Utils()
Default constructor.
Definition
Amesos_Utils.h:23
Generated by
1.17.0