Actual source code: stimpl.h

  1: /*
  2:    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
  3:    SLEPc - Scalable Library for Eigenvalue Problem Computations
  4:    Copyright (c) 2002-2010, Universidad 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: */

 22: #ifndef _STIMPL
 23: #define _STIMPL

 25:  #include slepceps.h


 30: typedef struct _STOps *STOps;

 32: struct _STOps {
 33:   PetscErrorCode   (*setup)(ST);
 34:   PetscErrorCode   (*apply)(ST,Vec,Vec);
 35:   PetscErrorCode   (*getbilinearform)(ST,Mat*);
 36:   PetscErrorCode   (*applytrans)(ST,Vec,Vec);
 37:   PetscErrorCode   (*setshift)(ST,PetscScalar);
 38:   PetscErrorCode   (*setfromoptions)(ST);
 39:   PetscErrorCode   (*postsolve)(ST);
 40:   PetscErrorCode   (*backtr)(ST,PetscInt,PetscScalar*,PetscScalar*);
 41:   PetscErrorCode   (*destroy)(ST);
 42:   PetscErrorCode   (*view)(ST,PetscViewer);
 43: };

 45: struct _p_ST {
 46:   PETSCHEADER(struct _STOps);
 47:   /*------------------------- User parameters --------------------------*/
 48:   Mat            A,B;              /* Matrices which define the eigensystem */
 49:   PetscScalar    sigma;            /* Value of the shift */
 50:   PetscTruth     sigma_set;        /* whether the user provided the shift or not */
 51:   PetscScalar    defsigma;         /* Default value of the shift */
 52:   STMatMode      shift_matrix;
 53:   MatStructure   str;          /* whether matrices have the same pattern or not */
 54:   Mat            mat;

 56:   /*------------------------- Misc data --------------------------*/
 57:   KSP            ksp;
 58:   Vec            w;
 59:   Vec            D;                /* diagonal matrix for balancing */
 60:   Vec            wb;               /* balancing requires an extra work vector */
 61:   void           *data;
 62:   PetscInt       setupcalled;
 63:   PetscInt       lineariterations;
 64:   PetscInt       applys;
 65:   PetscErrorCode (*checknullspace)(ST,PetscInt,const Vec[]);
 66: 
 67: };

 69: EXTERN PetscErrorCode STRegisterAll(char*);
 70: EXTERN PetscErrorCode STInitializePackage(char*);
 71: EXTERN PetscErrorCode STFinalizePackage(void);

 73: EXTERN PetscErrorCode STGetBilinearForm_Default(ST,Mat*);
 74: EXTERN PetscErrorCode STView_Default(ST,PetscViewer);
 75: EXTERN PetscErrorCode STAssociatedKSPSolve(ST,Vec,Vec);
 76: EXTERN PetscErrorCode STAssociatedKSPSolveTranspose(ST,Vec,Vec);
 77: EXTERN PetscErrorCode STCheckNullSpace_Default(ST,PetscInt,const Vec[]);
 78: EXTERN PetscErrorCode STMatShellCreate(ST st,Mat *mat);

 80: #endif