:orphan:
# SNESVISetVariableBounds
Sets the lower and upper bounds for the solution vector. xl <= x <= xu. This allows solving (differential) variable inequalities.
## Synopsis
```
#include "petscsnes.h"
PetscErrorCode SNESVISetVariableBounds(SNES snes, Vec xl, Vec xu)
```
## Input Parameters
- ***snes -*** the `SNES` context.
- ***xl -*** lower bound.
- ***xu -*** upper bound.
## Notes
If this routine is not called then the lower and upper bounds are set to
`PETSC_NINFINITY` and `PETSC_INFINITY` respectively during `SNESSetUp()`.
Problems with bound constraints can be solved with the reduced space, `SNESVINEWTONRSLS`, and semi-smooth `SNESVINEWTONSSLS` solvers.
For particular components that have no bounds you can use `PETSC_NINFINITY` or `PETSC_INFINITY`
`SNESVISetComputeVariableBounds()` can be used to provide a function that computes the bounds. This should be used if you are using, for example, grid
sequencing and need bounds set for a variety of vectors
## See Also
[](sec_vi), `SNES`, `SNESVIGetVariableBounds()`, `SNESVISetComputeVariableBounds()`, `SNESSetFunctionDomainError()`, `SNESSetJacobianDomainError()`, `SNESVINEWTONRSLS`, `SNESVINEWTONSSLS`, 'SNESSetType()`
## Level
advanced
## Location
src/snes/impls/vi/vi.c
## Implementations
SNESVISetVariableBounds_VI in src/snes/impls/vi/vi.c
---
[Edit on GitLab](https://gitlab.com/petsc/petsc/-/edit/release/src/snes/impls/vi/vi.c)
[Index of all SNES routines](index.md)
[Table of Contents for all manual pages](/manualpages/index.md)
[Index of all manual pages](/manualpages/singleindex.md)