Date: 2025-03-29T05:58:26+00:00

Actual source code: chebyshevimpl.h

      1: /*
      2:     Private data structure for Chebyshev Iteration
      3: */

      5: #pragma once

      7: #include <petsc/private/kspimpl.h>

      9: typedef struct {
     10:   PetscReal  emin, emax;                   /* store user provided estimates of extreme eigenvalues or computed with kspest and transformed with tform[] */
     11:   PetscReal  emin_computed, emax_computed; /* eigenvalues as computed by kspest, if computed */
     12:   PetscReal  emin_provided, emax_provided; /* provided by PCGAMG; discarded unless preconditioned by Jacobi */
     13:   PetscReal *betas;                        /* store beta coefficients for 4th-kind Chebyshev smoother */
     14:   PetscInt   num_betas_alloc;

     16:   KSP              kspest;   /* KSP used to estimate eigenvalues */
     17:   PetscReal        tform[4]; /* transform from Krylov estimates to Chebyshev bounds */
     18:   PetscInt         eststeps; /* number of kspest steps in KSP used to estimate eigenvalues */
     19:   PetscBool        usenoisy; /* use noisy right-hand side vector to estimate eigenvalues */
     20:   KSPChebyshevKind chebykind;
     21:   /* For tracking when to update the eigenvalue estimates */
     22:   PetscObjectId    amatid, pmatid;
     23:   PetscObjectState amatstate, pmatstate;
     24: } KSP_Chebyshev;

     26: /* given the polynomial order, return tabulated beta coefficients for use in opt. 4th-kind Chebyshev smoother */
     27: PETSC_INTERN PetscErrorCode KSPChebyshevGetBetas_Private(KSP);