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