119653cdaSPeter Brune #ifndef _SNESNGMRES_H 219653cdaSPeter Brune #define _SNESNGMRES_H 319653cdaSPeter Brune 419653cdaSPeter Brune #include <private/snesimpl.h> 5*e7058c64SPeter Brune #include <petsclinesearch.h> 619653cdaSPeter Brune 719653cdaSPeter Brune /* Data structure for the Nonlinear GMRES method. */ 819653cdaSPeter Brune typedef struct { 919653cdaSPeter Brune 1098b3e84cSPeter Brune /* Solver parameters and counters */ 1198b3e84cSPeter Brune PetscInt msize; /* maximum size of krylov space */ 1228ed4a04SPeter Brune PetscInt restart_it; /* number of iterations the restart conditions persist before restart */ 13dfbf837cSBarry Smith PetscViewer monitor; /* debugging output for NGMRES */ 1428ed4a04SPeter Brune 1598b3e84cSPeter Brune /* History and subspace data */ 16f109b39eSPeter Brune Vec *Fdot; /* residual history -- length msize */ 17f109b39eSPeter Brune Vec *Xdot; /* solution history -- length msize */ 18f109b39eSPeter Brune PetscReal *fnorms; /* the residual norm history */ 1919653cdaSPeter Brune 2098b3e84cSPeter Brune /* General minimization problem context */ 2198b3e84cSPeter Brune PetscScalar *h; /* the constraint matrix */ 2298b3e84cSPeter Brune PetscScalar *beta; /* rhs for the minimization problem */ 2398b3e84cSPeter Brune PetscScalar *xi; /* the dot-product of the current and previous res. */ 2419653cdaSPeter Brune 25*e7058c64SPeter Brune /* Line searches */ 26*e7058c64SPeter Brune LineSearch linesearch; /* Line search for the default step */ 27*e7058c64SPeter Brune LineSearch additive_linesearch; /* Line search for the additive variant */ 28*e7058c64SPeter Brune 2998b3e84cSPeter Brune /* Selection constants */ 30d2e16ddcSPeter Brune PetscBool anderson; /* use anderson-mixing approach */ 319f425c49SPeter Brune PetscBool additive; /* use additive variant instead of selection */ 3298b3e84cSPeter Brune PetscReal gammaA; /* Criterion A residual tolerance */ 3398b3e84cSPeter Brune PetscReal epsilonB; /* Criterion B difference tolerance */ 3498b3e84cSPeter Brune PetscReal deltaB; /* Criterion B residual tolerance */ 3598b3e84cSPeter Brune PetscReal gammaC; /* Restart residual tolerance */ 3619653cdaSPeter Brune 37*e7058c64SPeter Brune /* Least squares minimization solve context */ 3898b3e84cSPeter Brune PetscScalar *q; /* the matrix formed as q_ij = (rdot_i, rdot_j) */ 3998b3e84cSPeter Brune PetscBLASInt m; /* matrix dimension */ 4098b3e84cSPeter Brune PetscBLASInt n; /* matrix dimension */ 4198b3e84cSPeter Brune PetscBLASInt nrhs; /* the number of right hand sides */ 4298b3e84cSPeter Brune PetscBLASInt lda; /* the padded matrix dimension */ 4398b3e84cSPeter Brune PetscBLASInt ldb; /* the padded vector dimension */ 4498b3e84cSPeter Brune PetscReal *s; /* the singular values */ 4598b3e84cSPeter Brune PetscReal rcond; /* the exit condition */ 4698b3e84cSPeter Brune PetscBLASInt rank; /* the effective rank */ 4798b3e84cSPeter Brune PetscScalar *work; /* the work vector */ 4898b3e84cSPeter Brune PetscReal *rwork; /* the real work vector used for complex */ 4998b3e84cSPeter Brune PetscBLASInt lwork; /* the size of the work vector */ 5098b3e84cSPeter Brune PetscBLASInt info; /* the output condition */ 5119653cdaSPeter Brune 5278440776SJed Brown PetscBool setup_called; /* indicates whether SNESSetUp_NGMRES() has been called */ 5319653cdaSPeter Brune } SNES_NGMRES; 5419653cdaSPeter Brune 5519653cdaSPeter Brune #define H(i,j) ngmres->h[i*ngmres->msize + j] 5619653cdaSPeter Brune #define Q(i,j) ngmres->q[i*ngmres->msize + j] 5719653cdaSPeter Brune 5819653cdaSPeter Brune #endif 59