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