- g++-mingw-w64-x86-64
- gcc-mingw-w64-x86-64
- binutils-mingw-w64-x86-64
+ - gfortran
+
script:
- pip install mkdocs python-markdown-math --user
- PATH=$PATH:~/.local/bin mkdocs build
- mkdir build && pushd build
- - cmake -DCMAKE_INSTALL_PREFIX=~/.local -DNLOPT_MATLAB=OFF ..
+ - cmake -DCMAKE_INSTALL_PREFIX=~/.local -DNLOPT_MATLAB=OFF -DNLOPT_FORTRAN=ON ..
- make install -j2 && ctest -j2 --output-on-failure
- rm -rf * ~/.local
- cmake -DCMAKE_INSTALL_PREFIX=~/.local -DNLOPT_PYTHON=OFF -DNLOPT_OCTAVE=OFF -DNLOPT_GUILE=OFF -DNLOPT_MATLAB=OFF -DCMAKE_TOOLCHAIN_FILE=$PWD/../cmake/toolchain-i686-w64-mingw32.cmake ..
- brew install swig octave guile || echo "nope"
script:
- mkdir build && pushd build
- - cmake -DCMAKE_INSTALL_PREFIX=~/.local -DPYTHON_EXECUTABLE=/usr/bin/python ..
+ - cmake -DCMAKE_INSTALL_PREFIX=~/.local -DPYTHON_EXECUTABLE=/usr/bin/python -DNLOPT_FORTRAN=ON ..
- make install && ctest --output-on-failure
list (APPEND CMAKE_MODULE_PATH ${CMAKE_SOURCE_DIR}/cmake)
option (NLOPT_CXX "enable cxx routines" ON)
+option (NLOPT_FORTRAN "enable fotran tests" OFF)
option (BUILD_SHARED_LIBS "Build NLopt as a shared library" ON)
option (NLOPT_PYTHON "build python bindings" ON)
option (NLOPT_OCTAVE "build octave bindings" ON)
option (NLOPT_TESTS "build unit tests" OFF)
endif ()
+if (NLOPT_FORTRAN)
+ enable_language (Fortran)
+endif ()
+
include (GNUInstallDirs)
# Offer the user the choice of overriding the installation directories
--- /dev/null
+program main
+ external myfunc, myconstraint
+ double precision lb(2)
+ integer*8 opt
+ double precision d1(2), d2(2)
+ double precision x(2), minf
+ integer ires
+ include 'nlopt.f'
+
+ opt=0
+ call nlo_create(opt, NLOPT_LD_MMA, 2)
+ call nlo_get_lower_bounds(ires, opt, lb)
+ lb(2) = 0.0
+ call nlo_set_lower_bounds(ires, opt, lb)
+ call nlo_set_min_objective(ires, opt, myfunc, 0)
+
+ d1(1) = 2.
+ d1(2) = 0.
+ call nlo_add_inequality_constraint(ires, opt, myconstraint, d1, 1.D-8)
+ d2(1) = -1.
+ d2(2) = 1.
+ call nlo_add_inequality_constraint(ires, opt, myconstraint, d2, 1.D-8)
+
+ call nlo_set_xtol_rel(ires, opt, 1.D-4)
+
+ x(1) = 1.234
+ x(2) = 5.678
+ call nlo_optimize(ires, opt, x, minf)
+ if (ires.lt.0) then
+ write(*,*) 'nlopt failed!'
+ stop 1
+ else
+ write(*,*) 'found min at ', x(1), x(2)
+ write(*,*) 'min val = ', minf
+ endif
+
+ call nlo_destroy(opt)
+
+ end
+
+ subroutine myfunc(val, n, x, grad, need_gradient, f_data)
+ double precision val, x(n), grad(n)
+ integer n, need_gradient
+ if (need_gradient.ne.0) then
+ grad(1) = 0.0
+ grad(2) = 0.5 / dsqrt(x(2))
+ endif
+ val = dsqrt(x(2))
+ end
+
+ subroutine myconstraint(val, n, x, grad, need_gradient, d)
+ integer need_gradient
+ double precision val, x(n), grad(n), d(2), a, b
+ a = d(1)
+ b = d(2)
+ if (need_gradient.ne.0) then
+ grad(1) = 3. * a * (a*x(1) + b)**2
+ grad(2) = -1.0
+ endif
+ val = (a*x(1) + b)**3 - x(2)
+ end