Actual source code: slepcst.h

  1: /*
  2:    Spectral transformation module for eigenvalue problems.

  4:    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
  5:    SLEPc - Scalable Library for Eigenvalue Problem Computations
  6:    Copyright (c) 2002-2013, Universitat Politecnica de Valencia, Spain

  8:    This file is part of SLEPc.

 10:    SLEPc is free software: you can redistribute it and/or modify it under  the
 11:    terms of version 3 of the GNU Lesser General Public License as published by
 12:    the Free Software Foundation.

 14:    SLEPc  is  distributed in the hope that it will be useful, but WITHOUT  ANY
 15:    WARRANTY;  without even the implied warranty of MERCHANTABILITY or  FITNESS
 16:    FOR  A  PARTICULAR PURPOSE. See the GNU Lesser General Public  License  for
 17:    more details.

 19:    You  should have received a copy of the GNU Lesser General  Public  License
 20:    along with SLEPc. If not, see <http://www.gnu.org/licenses/>.
 21:    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 22: */

 26: #include <slepcsys.h>
 27: #include <petscksp.h>

 29: PETSC_EXTERN PetscErrorCode STInitializePackage(void);

 31: /*S
 32:     ST - Abstract SLEPc object that manages spectral transformations.
 33:     This object is accessed only in advanced applications.

 35:     Level: beginner

 37: .seealso:  STCreate(), EPS
 38: S*/
 39: typedef struct _p_ST* ST;

 41: /*J
 42:     STType - String with the name of a SLEPc spectral transformation

 44:     Level: beginner

 46: .seealso: STSetType(), ST
 47: J*/
 48: typedef const char* STType;
 49: #define STSHELL     "shell"
 50: #define STSHIFT     "shift"
 51: #define STSINVERT   "sinvert"
 52: #define STCAYLEY    "cayley"
 53: #define STFOLD      "fold"
 54: #define STPRECOND   "precond"

 56: /* Logging support */
 57: PETSC_EXTERN PetscClassId ST_CLASSID;

 59: PETSC_EXTERN PetscErrorCode STCreate(MPI_Comm,ST*);
 60: PETSC_EXTERN PetscErrorCode STDestroy(ST*);
 61: PETSC_EXTERN PetscErrorCode STReset(ST);
 62: PETSC_EXTERN PetscErrorCode STSetType(ST,STType);
 63: PETSC_EXTERN PetscErrorCode STGetType(ST,STType*);
 64: PETSC_EXTERN PetscErrorCode STSetOperators(ST,PetscInt,Mat*);
 65: PETSC_EXTERN PetscErrorCode STGetOperators(ST,PetscInt,Mat*);
 66: PETSC_EXTERN PetscErrorCode STGetNumMatrices(ST,PetscInt*);
 67: PETSC_EXTERN PetscErrorCode STSetUp(ST);
 68: PETSC_EXTERN PetscErrorCode STSetFromOptions(ST);
 69: PETSC_EXTERN PetscErrorCode STView(ST,PetscViewer);

 71: PETSC_EXTERN PetscErrorCode STApply(ST,Vec,Vec);
 72: PETSC_EXTERN PetscErrorCode STMatMult(ST,PetscInt,Vec,Vec);
 73: PETSC_EXTERN PetscErrorCode STMatMultTranspose(ST,PetscInt,Vec,Vec);
 74: PETSC_EXTERN PetscErrorCode STMatSolve(ST,PetscInt,Vec,Vec);
 75: PETSC_EXTERN PetscErrorCode STMatSolveTranspose(ST,PetscInt,Vec,Vec);
 76: PETSC_EXTERN PetscErrorCode STGetBilinearForm(ST,Mat*);
 77: PETSC_EXTERN PetscErrorCode STApplyTranspose(ST,Vec,Vec);
 78: PETSC_EXTERN PetscErrorCode STComputeExplicitOperator(ST,Mat*);
 79: PETSC_EXTERN PetscErrorCode STPostSolve(ST);

 81: PETSC_EXTERN PetscErrorCode STSetKSP(ST,KSP);
 82: PETSC_EXTERN PetscErrorCode STGetKSP(ST,KSP*);
 83: PETSC_EXTERN PetscErrorCode STSetShift(ST,PetscScalar);
 84: PETSC_EXTERN PetscErrorCode STGetShift(ST,PetscScalar*);
 85: PETSC_EXTERN PetscErrorCode STSetDefaultShift(ST,PetscScalar);
 86: PETSC_EXTERN PetscErrorCode STSetBalanceMatrix(ST,Vec);
 87: PETSC_EXTERN PetscErrorCode STGetBalanceMatrix(ST,Vec*);

 89: PETSC_EXTERN PetscErrorCode STSetOptionsPrefix(ST,const char*);
 90: PETSC_EXTERN PetscErrorCode STAppendOptionsPrefix(ST,const char*);
 91: PETSC_EXTERN PetscErrorCode STGetOptionsPrefix(ST,const char*[]);

 93: PETSC_EXTERN PetscErrorCode STBackTransform(ST,PetscInt,PetscScalar*,PetscScalar*);

 95: PETSC_EXTERN PetscErrorCode STCheckNullSpace(ST,PetscInt,const Vec[]);

 97: PETSC_EXTERN PetscErrorCode STGetOperationCounters(ST,PetscInt*,PetscInt*);
 98: PETSC_EXTERN PetscErrorCode STResetOperationCounters(ST);

100: /*E
101:     STMatMode - Determines how to handle the coefficient matrix associated
102:     to the spectral transformation

104:     Level: intermediate

106: .seealso: STSetMatMode(), STGetMatMode()
107: E*/
108: typedef enum { ST_MATMODE_COPY,
109:                ST_MATMODE_INPLACE,
110:                ST_MATMODE_SHELL } STMatMode;
111: PETSC_EXTERN PetscErrorCode STSetMatMode(ST,STMatMode);
112: PETSC_EXTERN PetscErrorCode STGetMatMode(ST,STMatMode*);
113: PETSC_EXTERN PetscErrorCode STSetMatStructure(ST,MatStructure);
114: PETSC_EXTERN PetscErrorCode STGetMatStructure(ST,MatStructure*);

116: PETSC_EXTERN PetscFunctionList STList;
117: PETSC_EXTERN PetscBool         STRegisterAllCalled;
118: PETSC_EXTERN PetscErrorCode STRegisterAll(void);
119: PETSC_EXTERN PetscErrorCode STRegister(const char[],PetscErrorCode(*)(ST));

121: /* --------- options specific to particular spectral transformations-------- */

123: PETSC_EXTERN PetscErrorCode STShellGetContext(ST st,void **ctx);
124: PETSC_EXTERN PetscErrorCode STShellSetContext(ST st,void *ctx);
125: PETSC_EXTERN PetscErrorCode STShellSetApply(ST st,PetscErrorCode (*apply)(ST,Vec,Vec));
126: PETSC_EXTERN PetscErrorCode STShellSetApplyTranspose(ST st,PetscErrorCode (*applytrans)(ST,Vec,Vec));
127: PETSC_EXTERN PetscErrorCode STShellSetBackTransform(ST st,PetscErrorCode (*backtr)(ST,PetscInt,PetscScalar*,PetscScalar*));

129: PETSC_EXTERN PetscErrorCode STCayleyGetAntishift(ST,PetscScalar*);
130: PETSC_EXTERN PetscErrorCode STCayleySetAntishift(ST,PetscScalar);

132: PETSC_EXTERN PetscErrorCode STPrecondGetMatForPC(ST st,Mat *mat);
133: PETSC_EXTERN PetscErrorCode STPrecondSetMatForPC(ST st,Mat mat);
134: PETSC_EXTERN PetscErrorCode STPrecondGetKSPHasMat(ST st,PetscBool *setmat);
135: PETSC_EXTERN PetscErrorCode STPrecondSetKSPHasMat(ST st,PetscBool setmat);

137: #endif