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