xref: /petsc/src/snes/impls/ngmres/snesngmres.h (revision 19653cda39a019e1f4ef36d74a797e84caee624c)
1 #ifndef _SNESNGMRES_H
2 #define _SNESNGMRES_H
3 
4 #include <private/snesimpl.h>
5 
6 /*  Data structure for the Nonlinear GMRES method.  */
7 typedef struct {
8 
9   // Solver parameters and counters
10   PetscInt     msize;          // maximum size of krylov space
11   PetscInt     k_rmax;         // maximum number of iterations before restart
12   PetscBool    debug;          // debugging output for NGMRES
13   // History and subspace data
14   Vec          *rdot;          // residual history -- length msize
15   Vec          *xdot;          // solution history -- length msize
16   PetscReal     *r_norms;         // the residual norm history
17 
18   // General minimization problem context
19   PetscScalar  *h;              // the constraint matrix
20   PetscScalar  *beta;          // rhs for the minimization problem
21   PetscScalar    *xi;            // the norms of the various residual histories
22 
23   // Selection constants
24   PetscReal gammaA;          // Criterion A residual tolerance
25   PetscReal epsilonB;        // Criterion B difference tolerance
26   PetscReal deltaB;          // Criterion B residual tolerance
27   PetscReal gammaC;          // Restart residual tolerance
28 
29   // LS Minimization solve context
30   PetscScalar  *q;    // the matrix formed as q_ij = (rdot_i, rdot_j)
31   PetscBLASInt m;     // matrix dimension
32   PetscBLASInt n;     // matrix dimension
33   PetscBLASInt nrhs;  // the number of right hand sides
34   PetscBLASInt lda;   // the padded matrix dimension
35   PetscBLASInt ldb;   // the padded vector dimension
36   PetscReal * s;      // the singular values
37   PetscReal rcond;    // the condition
38   PetscBLASInt rank;  // the effective rank
39   PetscScalar * work; // the work vector
40   PetscReal  * rwork; // the real work vector used for complex
41   PetscBLASInt lwork; // the size of the work vector
42   PetscBLASInt info;  // the output condition
43 
44 } SNES_NGMRES;
45 
46 #define H(i,j)  ngmres->h[i*ngmres->msize + j]
47 #define Q(i,j)  ngmres->q[i*ngmres->msize + j]
48 
49 #endif
50