Actual source code: cyclic.h

      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: typedef struct {
     14:   PetscBool explicitmatrix;
     15:   EPS       eps;
     16:   PetscBool usereps;
     17:   Mat       C,D;
     18: } SVD_CYCLIC;

     20: typedef struct {
     21:   Mat       A,AT;
     22:   Vec       x1,x2,y1,y2;
     23:   Vec       diag,w;         /* used only in extended cross matrix */
     24:   PetscBool swapped;
     25:   PetscBool misaligned;     /* bottom block is misaligned, checked in GPU only */
     26:   Vec       wx2,wy2;        /* workspace vectors used if misaligned=true */
     27: } SVD_CYCLIC_SHELL;

     29: #if defined(PETSC_HAVE_CUDA)
     30: SLEPC_INTERN PetscErrorCode MatMult_Cyclic_CUDA(Mat,Vec,Vec);
     31: SLEPC_INTERN PetscErrorCode MatMult_ECross_CUDA(Mat,Vec,Vec);
     32: #endif
     33: #if defined(PETSC_HAVE_HIP)
     34: SLEPC_INTERN PetscErrorCode MatMult_Cyclic_HIP(Mat,Vec,Vec);
     35: SLEPC_INTERN PetscErrorCode MatMult_ECross_HIP(Mat,Vec,Vec);
     36: #endif