Actual source code: slepccontour.h

slepc-main 2023-10-18
Report Typos and Errors
  1: /*
  2:    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
  3:    SLEPc - Scalable Library for Eigenvalue Problem Computations
  4:    Copyright (c) 2002-, Universitat Politecnica de Valencia, Spain

  6:    This file is part of SLEPc.
  7:    SLEPc is distributed under a 2-clause BSD license (see LICENSE).
  8:    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
  9: */

 11: #pragma once

 13: #include <slepc/private/slepcimpl.h>
 14: #include <petscksp.h>

 16: /*
 17:   CISS_BlockHankel - Builds a block Hankel matrix from the contents of Mu.
 18: */
 19: static inline PetscErrorCode CISS_BlockHankel(PetscScalar *Mu,PetscInt s,PetscInt L,PetscInt M,PetscScalar *H)
 20: {
 21:   PetscInt i,j,k;

 23:   PetscFunctionBegin;
 24:   for (k=0;k<L*M;k++)
 25:     for (j=0;j<M;j++)
 26:       for (i=0;i<L;i++)
 27:         H[j*L+i+k*L*M] = Mu[i+k*L+(j+s)*L*L];
 28:   PetscFunctionReturn(PETSC_SUCCESS);
 29: }

 31: SLEPC_SINGLE_LIBRARY_INTERN PetscErrorCode SlepcCISS_isGhost(Mat,PetscInt,PetscReal*,PetscReal,PetscBool*);
 32: SLEPC_SINGLE_LIBRARY_INTERN PetscErrorCode SlepcCISS_BH_SVD(PetscScalar*,PetscInt,PetscReal,PetscReal*,PetscInt*);

 34: /* Data structures and functions for contour integral methods (used in several classes) */
 35: struct _n_SlepcContourData {
 36:   PetscObject  parent;     /* parent object */
 37:   PetscSubcomm subcomm;    /* subcommunicator for top level parallelization */
 38:   PetscInt     npoints;    /* number of integration points assigned to the local subcomm */
 39:   KSP          *ksp;       /* ksp array for storing factorizations at integration points */
 40:   Mat          *pA;        /* redundant copies of the matrices in the local subcomm */
 41:   Mat          *pP;        /* redundant copies of the matrices (preconditioner) */
 42:   PetscInt     nmat;       /* number of matrices in pA */
 43:   Vec          xsub;       /* aux vector with parallel layout as redundant Mat */
 44:   Vec          xdup;       /* aux vector with parallel layout as original Mat (with contiguous order) */
 45:   VecScatter   scatterin;  /* to scatter from regular vector to xdup */
 46: };
 47: typedef struct _n_SlepcContourData* SlepcContourData;

 49: SLEPC_SINGLE_LIBRARY_INTERN PetscErrorCode SlepcContourDataCreate(PetscInt,PetscInt,PetscObject,SlepcContourData*);
 50: SLEPC_SINGLE_LIBRARY_INTERN PetscErrorCode SlepcContourDataReset(SlepcContourData);
 51: SLEPC_SINGLE_LIBRARY_INTERN PetscErrorCode SlepcContourDataDestroy(SlepcContourData*);

 53: SLEPC_SINGLE_LIBRARY_INTERN PetscErrorCode SlepcContourRedundantMat(SlepcContourData,PetscInt,Mat*,Mat*);
 54: SLEPC_SINGLE_LIBRARY_INTERN PetscErrorCode SlepcContourScatterCreate(SlepcContourData,Vec);