Hi All,

I am trying to solve a NonLinear mixed problem using PETSc SNES solver. The mixed space is made up of 3 elements (`P2-P1-P1`

) to solve for three unknowns say (`u, p, s`

). I need upper and lower bounds only on the last solution (`0<= s <=1`

). Extending from the snes demo, I need to create two functions carrying the upper and lower bounds for the solution of `s`

. As a naive attempt I did the following.

```
#Creating function spaces
V_ele = VectorElement('P',mesh.ufl_cell(), 2)
Q_ele = FiniteElement('P',mesh.ufl_cell(), 1)
W = FunctionSpace(mesh,MixedElement(V_ele,Q_ele,Q_ele))
#Creating the box constraints to pass to the SNES solver
smin, smax = Function(W), Function(W)
smin_nodal_values = smin.sub(2).vector()
smin_array = smin_nodal_values.get_local()
smin_array.fill(Constant(0.0))
smin.sub(2).vector()[:] = smin_array
smax_nodal_values = smax.sub(2).vector()
smax_array = smax_nodal_values.get_local()
smax_array.fill(Constant(1.0))
smax.sub(2).vector()[:] = smax_array
```

And then I go ahead and pass these to the solver by

`NonlinearVariationalProbelm().set_bounds(smin, smax)`

Is there any better way to do this? At the moment I cannot verify with the solution of the problem, because there is a divergence maybe because of some other reason or because of this method. At least want to make sure I am doing this right. One thing I am not sure about is if I am passing any unintended bounds to the `u`

and `p`

spaces also by this method. Since they are not assigned any bounds they must be 0 ? Ideally they should not have any.

Thanks,

Sid