~njansson/dolfin/hpc

« back to all changes in this revision

Viewing changes to src/kernel/la/dolfin/PETScEigenvalueSolver.h

  • Committer: Anders Logg
  • Date: 2007-01-10 09:04:44 UTC
  • mfrom: (1689.1.221 trunk)
  • Revision ID: logg@simula.no-20070110090444-ecyux3n1qnei4i8h
RemoveĀ oldĀ head

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
// Copyright (C) 2005-2006 Garth N. Wells.
 
2
// Licensed under the GNU GPL Version 2.
 
3
//
 
4
// First added:  2005-08-31
 
5
// Last changed: 2006-08-21
 
6
 
 
7
#ifndef __PETSC_EIGENVALUE_SOLVER_H
 
8
#define __PETSC_EIGENVALUE_SOLVER_H
 
9
 
 
10
#ifdef HAVE_SLEPC_H
 
11
 
 
12
#include <slepceps.h>
 
13
#include <dolfin/Parametrized.h>
 
14
 
 
15
namespace dolfin
 
16
{
 
17
 
 
18
  /// Forward declarations
 
19
  class PETScMatrix;
 
20
  class PETScVector;
 
21
 
 
22
  /// This class computes eigenvalues of a matrix. It is 
 
23
        /// a wrapper for the eigenvalue solver SLEPc.
 
24
  
 
25
  class PETScEigenvalueSolver: public Parametrized
 
26
  {
 
27
  public:
 
28
 
 
29
    /// Eigensolver methods
 
30
    enum Type
 
31
    { 
 
32
      arnoldi,          // Arnoldi
 
33
      default_solver,   // Default SLEPc solver (use when setting method from command line)
 
34
      lanczos,          // Lanczos
 
35
      lapack,           // LAPACK (all values, exact, only for small systems) 
 
36
      power,            // Power
 
37
      subspace          // Subspace
 
38
    };
 
39
 
 
40
    /// Create eigenvalue solver (use default solver type)
 
41
    PETScEigenvalueSolver();
 
42
 
 
43
    /// Create eigenvalue solver (specify solver type)
 
44
    PETScEigenvalueSolver(Type solver);
 
45
 
 
46
    /// Destructor
 
47
    ~PETScEigenvalueSolver();
 
48
 
 
49
    /// Compute all eigenpairs of the matrix A (solve Ax = \lambda x)
 
50
    void solve(const PETScMatrix& A);
 
51
 
 
52
    /// Compute largest n eigenpairs of the matrix A (solve Ax = \lambda x)
 
53
    void solve(const PETScMatrix& A, const uint n);
 
54
 
 
55
    /// Compute all eigenpairs of the generalised problem Ax = \lambda Bx
 
56
    void solve(const PETScMatrix& A, const PETScMatrix& B);
 
57
 
 
58
    /// Compute largest n eigenpairs of the generalised problem Ax = \lambda Bx
 
59
    void solve(const PETScMatrix& A, const PETScMatrix& B, const uint n);
 
60
 
 
61
    /// Get the 0th eigenvalue 
 
62
    void getEigenvalue(real& xr, real& xc);
 
63
 
 
64
    /// Get 0th eigenpair  
 
65
    void getEigenpair(real& xr, real& xc, PETScVector& r, PETScVector& c);
 
66
 
 
67
    /// Get eigenvalue i 
 
68
    void getEigenvalue(real& xr, real& xc, const int i);
 
69
 
 
70
    /// Get eigenpair i 
 
71
    void getEigenpair(real& xr, real& xc, PETScVector& r, PETScVector& c, const int i);
 
72
 
 
73
  private:
 
74
 
 
75
    /// Compute eigenvalues
 
76
    void solve(const PETScMatrix& A, const PETScMatrix* B, const uint n);
 
77
 
 
78
    EPSType getType(const Type type) const;
 
79
 
 
80
    // SLEPc solver pointer
 
81
    EPS eps;
 
82
 
 
83
    /// SLEPc solver type
 
84
    Type type;
 
85
 
 
86
  };
 
87
 
 
88
}
 
89
 
 
90
#endif
 
91
 
 
92
#endif