119653cdaSPeter Brune #ifndef _SNESNGMRES_H 219653cdaSPeter Brune #define _SNESNGMRES_H 319653cdaSPeter Brune 419653cdaSPeter Brune #include <private/snesimpl.h> 519653cdaSPeter Brune 619653cdaSPeter Brune /* Data structure for the Nonlinear GMRES method. */ 719653cdaSPeter Brune typedef struct { 819653cdaSPeter Brune 9*98b3e84cSPeter Brune /* Solver parameters and counters */ 10*98b3e84cSPeter Brune PetscInt msize; /* maximum size of krylov space */ 11*98b3e84cSPeter Brune PetscInt k_rmax; /* maximum number of iterations before restart */ 12*98b3e84cSPeter Brune PetscBool debug; /* debugging output for NGMRES */ 13*98b3e84cSPeter Brune /* History and subspace data */ 14*98b3e84cSPeter Brune Vec *rdot; /* residual history -- length msize */ 15*98b3e84cSPeter Brune Vec *xdot; /* solution history -- length msize */ 16*98b3e84cSPeter Brune PetscReal *r_norms; /* the residual norm history */ 1719653cdaSPeter Brune 18*98b3e84cSPeter Brune /* General minimization problem context */ 19*98b3e84cSPeter Brune PetscScalar *h; /* the constraint matrix */ 20*98b3e84cSPeter Brune PetscScalar *beta; /* rhs for the minimization problem */ 21*98b3e84cSPeter Brune PetscScalar *xi; /* the dot-product of the current and previous res. */ 2219653cdaSPeter Brune 23*98b3e84cSPeter Brune /* Selection constants */ 24*98b3e84cSPeter Brune PetscReal gammaA; /* Criterion A residual tolerance */ 25*98b3e84cSPeter Brune PetscReal epsilonB; /* Criterion B difference tolerance */ 26*98b3e84cSPeter Brune PetscReal deltaB; /* Criterion B residual tolerance */ 27*98b3e84cSPeter Brune PetscReal gammaC; /* Restart residual tolerance */ 2819653cdaSPeter Brune 29*98b3e84cSPeter Brune /* LS Minimization solve context */ 30*98b3e84cSPeter Brune PetscScalar *q; /* the matrix formed as q_ij = (rdot_i, rdot_j) */ 31*98b3e84cSPeter Brune PetscBLASInt m; /* matrix dimension */ 32*98b3e84cSPeter Brune PetscBLASInt n; /* matrix dimension */ 33*98b3e84cSPeter Brune PetscBLASInt nrhs; /* the number of right hand sides */ 34*98b3e84cSPeter Brune PetscBLASInt lda; /* the padded matrix dimension */ 35*98b3e84cSPeter Brune PetscBLASInt ldb; /* the padded vector dimension */ 36*98b3e84cSPeter Brune PetscReal * s; /* the singular values */ 37*98b3e84cSPeter Brune PetscReal rcond; /* the exit condition */ 38*98b3e84cSPeter Brune PetscBLASInt rank; /* the effective rank */ 39*98b3e84cSPeter Brune PetscScalar * work; /* the work vector */ 40*98b3e84cSPeter Brune PetscReal * rwork; /* the real work vector used for complex */ 41*98b3e84cSPeter Brune PetscBLASInt lwork; /* the size of the work vector */ 42*98b3e84cSPeter Brune PetscBLASInt info; /* the output condition */ 4319653cdaSPeter Brune 4419653cdaSPeter Brune } SNES_NGMRES; 4519653cdaSPeter Brune 4619653cdaSPeter Brune #define H(i,j) ngmres->h[i*ngmres->msize + j] 4719653cdaSPeter Brune #define Q(i,j) ngmres->q[i*ngmres->msize + j] 4819653cdaSPeter Brune 4919653cdaSPeter Brune #endif 50