Subversion Repositories slepc-dev

Rev

Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
2757 jroman 1
/*
2
   - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
3
   SLEPc - Scalable Library for Eigenvalue Problem Computations
4
   Copyright (c) 2002-2011, Universitat Politecnica de Valencia, Spain
5
 
6
   This file is part of SLEPc.
7
 
8
   SLEPc is free software: you can redistribute it and/or modify it under  the
9
   terms of version 3 of the GNU Lesser General Public License as published by
10
   the Free Software Foundation.
11
 
12
   SLEPc  is  distributed in the hope that it will be useful, but WITHOUT  ANY
13
   WARRANTY;  without even the implied warranty of MERCHANTABILITY or  FITNESS
14
   FOR  A  PARTICULAR PURPOSE. See the GNU Lesser General Public  License  for
15
   more details.
16
 
17
   You  should have received a copy of the GNU Lesser General  Public  License
18
   along with SLEPc. If not, see <http://www.gnu.org/licenses/>.
19
   - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
20
*/
21
 
22
#if !defined(__SLEPCPS_H)
23
#define __SLEPCPS_H
24
#include "slepcsys.h"
25
PETSC_EXTERN_CXX_BEGIN
26
 
2832 jroman 27
#define PS_MAX_SOLVE 6
28
 
2757 jroman 29
extern PetscErrorCode PSInitializePackage(const char[]);
30
/*S
31
    PS - Projected system, to represent low-dimensional eigenproblems that
32
    must be solved within iterative solvers. This is an auxiliary object
33
    and is not normally needed by application programmers.
34
 
35
    Level: advanced
36
 
37
.seealso:  PSCreate()
38
S*/
39
typedef struct _p_PS* PS;
40
 
41
/*E
42
    PSType - String with the name of the type of projected system. Roughly,
43
    there are as many types as problem types are available within SLEPc,
44
    with some specific types for particular matrix structures.
45
 
46
    Level: advanced
47
 
48
.seealso: PSSetType(), PS
49
E*/
50
#define PSType            char*
51
#define PSHEP             "hep"
52
#define PSNHEP            "nhep"
53
#define PSGHEP            "ghep"
2808 carcamgo 54
#define PSGHIEP           "ghiep"
2757 jroman 55
#define PSGNHEP           "gnhep"
56
#define PSSVD             "svd"
57
#define PSQEP             "qep"
58
 
59
/* Logging support */
60
extern PetscClassId PS_CLASSID;
61
 
62
/*E
63
    PSStateType - to indicate in which state the projected problem is
64
 
65
    Level: advanced
66
 
67
.seealso: PSSetState()
68
E*/
69
typedef enum { PS_STATE_RAW,
70
               PS_STATE_INTERMEDIATE,
71
               PS_STATE_CONDENSED,
72
               PS_STATE_SORTED } PSStateType;
73
 
74
/*E
75
    PSMatType - to refer to one of the matrices stored internally in PS
76
 
2775 jroman 77
    Notes:
78
    The matrices preferently refer to:
79
+   PS_MAT_A  - first matrix of eigenproblem/singular value problem
80
.   PS_MAT_B  - second matrix of a generalized eigenproblem
81
.   PS_MAT_C  - third matrix of a quadratic eigenproblem
82
.   PS_MAT_T  - tridiagonal matrix
2849 jroman 83
.   PS_MAT_D  - diagonal matrix
2840 eromero 84
.   PS_MAT_Q  - orthogonal matrix of (right) Schur vectors
2842 jroman 85
.   PS_MAT_Z  - orthogonal matrix of left Schur vectors
2775 jroman 86
.   PS_MAT_X  - right eigenvectors
87
.   PS_MAT_Y  - left eigenvectors
88
.   PS_MAT_U  - left singular vectors
89
.   PS_MAT_VT - right singular vectors
90
-   PS_MAT_W  - workspace matrix
91
 
92
    All matrices can have space to hold ld x ld elements, except for
2849 jroman 93
    PS_MAT_T that has space for 3 x ld elements (ld = leading dimension)
94
    and PS_MAT_D that has space for just ld elements.
2775 jroman 95
 
2757 jroman 96
    Level: advanced
97
 
2807 jroman 98
.seealso: PSAllocate(), PSGetArray(), PSGetArrayReal(), PSVectors()
2757 jroman 99
E*/
100
typedef enum { PS_MAT_A,
101
               PS_MAT_B,
102
               PS_MAT_C,
2775 jroman 103
               PS_MAT_T,
2849 jroman 104
               PS_MAT_D,
2757 jroman 105
               PS_MAT_Q,
2842 jroman 106
               PS_MAT_Z,
2757 jroman 107
               PS_MAT_X,
108
               PS_MAT_Y,
109
               PS_MAT_U,
110
               PS_MAT_VT,
2766 jroman 111
               PS_MAT_W,
2757 jroman 112
               PS_NUM_MAT } PSMatType;
113
 
114
extern PetscErrorCode PSCreate(MPI_Comm,PS*);
115
extern PetscErrorCode PSSetType(PS,const PSType);
116
extern PetscErrorCode PSGetType(PS,const PSType*);
117
extern PetscErrorCode PSSetOptionsPrefix(PS,const char *);
118
extern PetscErrorCode PSAppendOptionsPrefix(PS,const char *);
119
extern PetscErrorCode PSGetOptionsPrefix(PS,const char *[]);
120
extern PetscErrorCode PSSetFromOptions(PS);
121
extern PetscErrorCode PSView(PS,PetscViewer);
122
extern PetscErrorCode PSDestroy(PS*);
123
extern PetscErrorCode PSReset(PS);
124
 
125
extern PetscErrorCode PSAllocate(PS,PetscInt);
2758 jroman 126
extern PetscErrorCode PSGetLeadingDimension(PS,PetscInt*);
2757 jroman 127
extern PetscErrorCode PSSetState(PS,PSStateType);
128
extern PetscErrorCode PSGetState(PS,PSStateType*);
129
extern PetscErrorCode PSSetDimensions(PS,PetscInt,PetscInt,PetscInt);
130
extern PetscErrorCode PSGetDimensions(PS,PetscInt*,PetscInt*,PetscInt*);
2793 jroman 131
extern PetscErrorCode PSSetMethod(PS,PetscInt);
132
extern PetscErrorCode PSGetMethod(PS,PetscInt*);
2794 jroman 133
extern PetscErrorCode PSSetCompact(PS,PetscBool);
134
extern PetscErrorCode PSGetCompact(PS,PetscBool*);
2834 jroman 135
extern PetscErrorCode PSSetExtraRow(PS,PetscBool);
136
extern PetscErrorCode PSGetExtraRow(PS,PetscBool*);
2815 jroman 137
extern PetscErrorCode PSSetRefined(PS,PetscBool);
138
extern PetscErrorCode PSGetRefined(PS,PetscBool*);
2757 jroman 139
extern PetscErrorCode PSGetArray(PS,PSMatType,PetscScalar *a[]);
140
extern PetscErrorCode PSRestoreArray(PS,PSMatType,PetscScalar *a[]);
141
extern PetscErrorCode PSGetArrayReal(PS,PSMatType,PetscReal *a[]);
142
extern PetscErrorCode PSRestoreArrayReal(PS,PSMatType,PetscReal *a[]);
2807 jroman 143
extern PetscErrorCode PSVectors(PS,PSMatType,PetscInt*,PetscReal*);
2759 jroman 144
extern PetscErrorCode PSSolve(PS,PetscScalar*,PetscScalar*);
2763 jroman 145
extern PetscErrorCode PSSort(PS,PetscScalar*,PetscScalar*,PetscErrorCode (*)(PetscScalar,PetscScalar,PetscScalar,PetscScalar,PetscInt*,void*),void*);
2766 jroman 146
extern PetscErrorCode PSCond(PS,PetscReal*);
2773 jroman 147
extern PetscErrorCode PSTranslateHarmonic(PS,PetscScalar,PetscReal,PetscBool,PetscScalar*,PetscReal*);
2814 jroman 148
extern PetscErrorCode PSTranslateRKS(PS,PetscScalar);
2757 jroman 149
 
150
extern PetscFList PSList;
151
extern PetscBool  PSRegisterAllCalled;
152
extern PetscErrorCode PSRegisterAll(const char[]);
153
extern PetscErrorCode PSRegister(const char[],const char[],const char[],PetscErrorCode(*)(PS));
154
extern PetscErrorCode PSRegisterDestroy(void);
155
 
156
/*MC
157
   PSRegisterDynamic - Adds a projected system to the PS package.
158
 
159
   Synopsis:
160
   PetscErrorCode PSRegisterDynamic(const char *name,const char *path,const char *name_create,PetscErrorCode (*routine_create)(PS))
161
 
162
   Not collective
163
 
164
   Input Parameters:
165
+  name - name of a new user-defined PS
166
.  path - path (either absolute or relative) the library containing this solver
167
.  name_create - name of routine to create context
168
-  routine_create - routine to create context
169
 
170
   Notes:
171
   PSRegisterDynamic() may be called multiple times to add several user-defined
172
   projected systems.
173
 
174
   If dynamic libraries are used, then the fourth input argument (routine_create)
175
   is ignored.
176
 
177
   Level: advanced
178
 
179
.seealso: PSRegisterDestroy(), PSRegisterAll()
180
M*/
181
#if defined(PETSC_USE_DYNAMIC_LIBRARIES)
182
#define PSRegisterDynamic(a,b,c,d) PSRegister(a,b,c,0)
183
#else
184
#define PSRegisterDynamic(a,b,c,d) PSRegister(a,b,c,d)
185
#endif
186
 
187
PETSC_EXTERN_CXX_END
188
#endif