Actual source code: slepcip.h
1: /*
2: - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
3: SLEPc - Scalable Library for Eigenvalue Problem Computations
4: Copyright (c) 2002-2011, Universitat Politecnica de Valencia, Spain
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.
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.
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: */
24: #include slepcsys.h
28: /*S
29: IP - Abstraction of a vector inner product, that can be defined
30: in different ways. Using this object is not required for application
31: programmers.
33: Level: beginner
35: .seealso: IPCreate()
36: S*/
37: typedef struct _p_IP* IP;
39: /*E
40: IPType - String with the name of the inner product. For complex scalars,
41: it is possible to choose between a sesquilinear form (x,y)=x^H*M*y (the default)
42: or a bilinear form (x,y)=x^T*M*y (without complex conjugation). In the case
43: of real scalars, only the bilinear form (x,y)=x^T*M*y is available.
45: Level: advanced
47: .seealso: IPSetType(), IP
48: E*/
49: #define IPType char*
50: #define IPBILINEAR "bilinear"
51: #define IPSESQUILINEAR "sesquilinear"
53: /* Logging support */
56: /*E
57: IPOrthogType - determines what type of orthogonalization to use
59: Level: advanced
61: .seealso: IPSetOrthogonalization(), IPGetOrthogonalization(), IPOrthogonalize()
62: E*/
63: typedef enum { IP_ORTHOG_MGS,
64: IP_ORTHOG_CGS } IPOrthogType;
66: /*E
67: IPOrthogRefineType - determines what type of refinement
68: to use during orthogonalization
70: Level: advanced
72: .seealso: IPSetOrthogonalization(), IPGetOrthogonalization(), IPOrthogonalize()
73: E*/
74: typedef enum { IP_ORTHOG_REFINE_NEVER,
75: IP_ORTHOG_REFINE_IFNEEDED,
76: IP_ORTHOG_REFINE_ALWAYS } IPOrthogRefineType;
116: /*MC
117: IPRegisterDynamic - Adds an inner product to the IP package.
119: Synopsis:
120: PetscErrorCode IPRegisterDynamic(const char *name,const char *path,const char *name_create,PetscErrorCode (*routine_create)(IP))
122: Not collective
124: Input Parameters:
125: + name - name of a new user-defined IP
126: . path - path (either absolute or relative) the library containing this solver
127: . name_create - name of routine to create context
128: - routine_create - routine to create context
130: Notes:
131: IPRegisterDynamic() may be called multiple times to add several user-defined inner products.
133: If dynamic libraries are used, then the fourth input argument (routine_create)
134: is ignored.
136: Level: advanced
138: .seealso: IPRegisterDestroy(), IPRegisterAll()
139: M*/
140: #if defined(PETSC_USE_DYNAMIC_LIBRARIES)
141: #define IPRegisterDynamic(a,b,c,d) IPRegister(a,b,c,0)
142: #else
143: #define IPRegisterDynamic(a,b,c,d) IPRegister(a,b,c,d)
144: #endif
150: #endif