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