Actual source code: krylovschur.h

slepc-3.5.2 2014-10-10
Report Typos and Errors
  1: /*
  2:    Private header for Krylov-Schur.

  4:    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
  5:    SLEPc - Scalable Library for Eigenvalue Problem Computations
  6:    Copyright (c) 2002-2014, 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: */


 27: PETSC_INTERN PetscErrorCode EPSReset_KrylovSchur(EPS);
 28: PETSC_INTERN PetscErrorCode EPSSolve_KrylovSchur_Default(EPS);
 29: PETSC_INTERN PetscErrorCode EPSSolve_KrylovSchur_Symm(EPS);
 30: PETSC_INTERN PetscErrorCode EPSSolve_KrylovSchur_Slice(EPS);
 31: PETSC_INTERN PetscErrorCode EPSSetUp_KrylovSchur_Slice(EPS);
 32: PETSC_INTERN PetscErrorCode EPSSolve_KrylovSchur_Indefinite(EPS);
 33: PETSC_INTERN PetscErrorCode EPSGetArbitraryValues(EPS,PetscScalar*,PetscScalar*);

 35: /* Structure characterizing a shift in spectrum slicing */
 36: typedef struct _n_shift *EPS_shift;
 37: struct _n_shift {
 38:   PetscReal     value;
 39:   PetscInt      inertia;
 40:   PetscBool     comp[2];      /* Shows completion of subintervals (left and right) */
 41:   EPS_shift     neighb[2];    /* Adjacent shifts */
 42:   PetscInt      index;        /* Index in eig where found values are stored */
 43:   PetscInt      neigs;        /* Number of values found */
 44:   PetscReal     ext[2];       /* Limits for accepted values */
 45:   PetscInt      nsch[2];      /* Number of missing values for each subinterval */
 46:   PetscInt      nconv[2];     /* Converged on each side (accepted or not) */
 47: };

 49: /* Structure for storing the state of spectrum slicing */
 50: struct _n_SR {
 51:   PetscReal     int0,int1;    /* Extremes of the interval */
 52:   PetscInt      dir;          /* Determines the order of values in eig (+1 incr, -1 decr) */
 53:   PetscBool     hasEnd;       /* Tells whether the interval has an end */
 54:   PetscInt      inertia0,inertia1;
 55:   PetscScalar   *back;
 56:   PetscInt      numEigs;      /* Number of eigenvalues in the interval */
 57:   PetscInt      indexEig;
 58:   EPS_shift     sPres;        /* Present shift */
 59:   EPS_shift     *pending;     /* Pending shifts array */
 60:   PetscInt      nPend;        /* Number of pending shifts */
 61:   PetscInt      maxPend;      /* Size of "pending" array */
 62:   PetscInt      *idxDef;      /* For deflation */
 63:   PetscInt      nMAXCompl;
 64:   PetscInt      iterCompl;
 65:   PetscInt      itsKs;        /* Krylovschur restarts */
 66:   PetscInt      nleap;
 67:   EPS_shift     s0;           /* Initial shift */
 68:   PetscScalar   *S;           /* Matrix for projected problem */
 69:   PetscInt      nS;
 70:   EPS_shift     sPrev;
 71:   PetscInt      nv;           /* position of restart vector */
 72:   BV            V;            /* working basis (for subsolve) */
 73:   BV            Vnext;        /* temporary working basis during change of shift */
 74:   PetscScalar   *eigr,*eigi;  /* eigenvalues (for subsolve) */
 75:   PetscReal     *errest;      /* error estimates (for subsolve) */
 76:   PetscInt      *perm;        /* permutation (for subsolve) */
 77: };
 78: typedef struct _n_SR  *EPS_SR;

 80: typedef struct {
 81:   PetscReal     keep;         /* restart parameter */
 82:   /* the following are used only in spectrum slicing */
 83:   EPS_SR        sr;           /* spectrum slicing context */
 84:   PetscInt      nev;          /* number of eigenvalues to compute */
 85:   PetscInt      ncv;          /* number of basis vectors */
 86:   PetscInt      mpd;          /* maximum dimension of projected problem */
 87: } EPS_KRYLOVSCHUR;

 89: #endif