c                  Kohdefunktio ja gradienttivektori
      subroutine objfun(mode,n,x,objf,objgrd,nstate)
      implicit none
      double precision objf
      integer mode, n, nstate
      double precision  objgrd(n), x(n)
c
      objf = (x(1)-2.0d0)**2 + (x(2)-1.0d0)**2
c
      objgrd(1) = 2.0d0*(x(1)-2.0d0)
      objgrd(2) = 2.0d0*(x(2)-1.0d0)
      return
      end
c                  Rajoitteet ja Jacobin matriisi
      subroutine confun(mode,ncnln,n,nrowj,x,c,cjac,nstate)
      implicit none
      integer mode, n, ncnln, nrowj, nstate
      double precision c(nrowj), cjac(nrowj,n), x(n)
      integer i, j
c                  Alustetaan Jacobin matriisi
      if (nstate.eq.1) then
         do 40 j = 1, n
            do 20 i = 1, ncnln
               cjac(i,j) = 0.0d0
   20       continue
   40    continue
      end if
c                  Epalin. rajoite 1
      c(1) = -(x(1)**2)/4.0d0 - x(2)**2
c                  Jacobin matriisin rivi 1
      cjac(1,1) = -0.5d0*x(1)
      cjac(1,2) = -2.0d0*x(2)
      return
      end
