Line data Source code
1 : /* 2 : - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 3 : SLEPc - Scalable Library for Eigenvalue Problem Computations 4 : Copyright (c) 2002-, Universitat Politecnica de Valencia, Spain 5 : 6 : This file is part of SLEPc. 7 : SLEPc is distributed under a 2-clause BSD license (see LICENSE). 8 : - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 9 : */ 10 : 11 : #pragma once 12 : 13 : #include <slepc/private/slepcimpl.h> 14 : #include <petscksp.h> 15 : 16 : /* 17 : CISS_BlockHankel - Builds a block Hankel matrix from the contents of Mu. 18 : */ 19 16 : static inline PetscErrorCode CISS_BlockHankel(PetscScalar *Mu,PetscInt s,PetscInt L,PetscInt M,PetscScalar *H) 20 : { 21 16 : PetscInt i,j,k; 22 : 23 16 : PetscFunctionBegin; 24 1356 : for (k=0;k<L*M;k++) 25 11980 : for (j=0;j<M;j++) 26 143328 : for (i=0;i<L;i++) 27 132688 : H[j*L+i+k*L*M] = Mu[i+k*L+(j+s)*L*L]; 28 16 : PetscFunctionReturn(PETSC_SUCCESS); 29 : } 30 : 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*); 33 : 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; 48 : 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*); 52 : 53 : SLEPC_SINGLE_LIBRARY_INTERN PetscErrorCode SlepcContourRedundantMat(SlepcContourData,PetscInt,Mat*,Mat*); 54 : SLEPC_SINGLE_LIBRARY_INTERN PetscErrorCode SlepcContourScatterCreate(SlepcContourData,Vec);