Actual source code: bcgslimpl.h

      1: /*
      2:     Private data structure for BiCGStab(L) solver.
      3:     Allocation takes place before each solve.
      4: */
      5: #pragma once
      6: #include <petscsys.h>

      8: typedef struct {
      9:   PetscInt  ell;     /* Number of search directions. */
     10:   PetscReal delta;   /* Threshold for recomputing exact residual norm */
     11:   PetscBool bConvex; /* Compute Enhanced BiCGstab polynomial when set to PETSC_TRUE */
     12:   PetscBool pinv;    /* Use pseudoinverse to calculate polynomial correction when set
     13:                                   to PETSC_TRUE */

     15:   /* Workspace Vectors */
     16:   Vec  vB;
     17:   Vec  vRt;
     18:   Vec  vXr;
     19:   Vec  vTm;
     20:   Vec *vvR;
     21:   Vec *vvU;

     23:   /* Workspace Arrays */
     24:   PetscScalar *vY0c, *vYlc, *vYtc;
     25:   PetscScalar *mZa, *mZb;
     26:   PetscScalar *u, *v, *work;
     27:   PetscReal   *s, *realwork;
     28:   PetscBLASInt lwork;
     29: } KSP_BCGSL;

     31: /* predefined shorthands */
     32: #define VX   (ksp->vec_sol)
     33: #define VB   (bcgsl->vB)
     34: #define VRT  (bcgsl->vRt)
     35: #define VXR  (bcgsl->vXr)
     36: #define VTM  (bcgsl->vTm)
     37: #define VVR  (bcgsl->vvR)
     38: #define VVU  (bcgsl->vvU)
     39: #define AY0c (bcgsl->vY0c)
     40: #define AYtc (bcgsl->vYtc)
     41: #define AYlc (bcgsl->vYlc)
     42: #define MZa  (bcgsl->mZa)
     43: #define MZb  (bcgsl->mZb)