# [Coin-ipopt] How to use subroutine EV_HLV(...)

Andreas Waechter andreasw at watson.ibm.com
Thu Jul 28 11:05:11 EDT 2005

```Hi Danh,

> 1.  What is different between EV_H(...) and EV_HLV(...) ?  Could I save
> memory when I used EV_HLV(..)?

You need to provide the subroutine EV_HLV only in special circumstances.
I assume that you are using the full-space version of the Ipopt (default),
in which case you really don't need to write that subroutine - just give
Ipopt the dummy stub that comes with the distribution.

EV_HLV is only needed if you work in the reduced space and if you select
certain combinations of options for computing the exact reduced Hessian
explicitly.

> 2.  Could you explain to me how to use subroutine EV_HLV(...)?
>
> I have the problem of very large Hessian matrix.  Here is a small example of
> my Hessian:
>
>         H1
>             H2         0
>                 H3
>                    .
> H=                  .
>              0           .
>                            H16
>
>
> where:  Hi (which is one of H1,H2,...H16) are matrices of 6x6.  They have a
> similar form except their values.
>
> Now, if I use subroutine EV_HLV(...) like this, is its definition like this
> correct? (Suppose that algorithm parameters are changed as Ipopt manual)
>
>
> subroutine EV_HLV(...)
> ....
>      do i=1,16
>           calculate Hi =hi(X)                          (to get 6x6 matrix)
>           do j=1,6
>           calculate indice of k-th variable
>           VOUT(k)=VOUT(k) + Hi*VIN(k)
>           end do
>      end do
> end
>
> Are dimension of VOUT and VIN 6x16 =96 in my example ?

Yes, that would be the dimension.  And your psydo code is probably
correct, if VOUT(k) and Hi are meant to be blockas of vectors and
matrices.

But, again, I doubt that you would need to bother with this.

Hope this helps,

Andreas

```