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)