# KSPQCG
Code to run conjugate gradient method subject to a constraint on the solution norm. 
## Options Database Key

- ***-ksp_qcg_trustregionradius <r> -*** Trust Region Radius





## Notes
This is rarely used directly, ir is used in Trust Region methods for nonlinear equations, `SNESNEWTONTR`

Uses preconditioned conjugate gradient to compute
an approximate minimizer of the quadratic function

q(s) = g^T * s + .5 * s^T * H * s

subject to the Euclidean norm trust region constraint

|| D * s || <= delta,

where

delta is the trust region radius,
g is the gradient vector, and
H is Hessian matrix,
D is a scaling matrix.

`KSPConvergedReason` may be
```none
   KSP_CONVERGED_CG_NEG_CURVE if convergence is reached along a negative curvature direction,
   KSP_CONVERGED_CG_CONSTRAINED if convergence is reached along a constrained step,
```

and other `KSP` converged/diverged reasons


## Notes

## Currently we allow symmetric preconditioning with the following scaling matrices
```none
      `PCNONE`:   D = Identity matrix
      `PCJACOBI`: D = diag [d_1, d_2, ...., d_n], where d_i = sqrt(H[i,i])
      `PCICC`:    D = L^T, implemented with forward and backward solves. Here L is an incomplete Cholesky factor of H.
```



## References

- **** -*** Trond Steihaug, The Conjugate Gradient Method and Trust Regions in Large Scale Optimization,
SIAM Journal on Numerical Analysis, Vol. 20, No. 3 (Jun., 1983).



## See Also
 [](chapter_ksp), 'KSPNASH`, `KSPGLTR`, `KSPSTCG`, `KSPCreate()`, `KSPSetType()`, `KSPType`, `KSP`, `KSPQCGSetTrustRegionRadius()`
`KSPQCGGetTrialStepNorm()`, `KSPQCGGetQuadratic()`

## Level
developer

## Location
<A HREF="PETSC_DOC_OUT_ROOT_PLACEHOLDER/src/ksp/ksp/impls/qcg/qcg.c.html#KSPQCG">src/ksp/ksp/impls/qcg/qcg.c</A>


---
[Edit on GitLab](https://gitlab.com/petsc/petsc/-/edit/release/src/ksp/ksp/impls/qcg/qcg.c)


[Index of all KSP routines](index.md)  
[Table of Contents for all manual pages](/docs/manualpages/index.md)  
[Index of all manual pages](/docs/manualpages/singleindex.md)  
