[COLOR=#0000ff]! Compile:[/color]
[COLOR=#0000ff]! gfortran nlopt_example.f95 -o nlopt_example -L. libnlopt-0.dll[/color]
[COLOR=#a020f0]program[/color] main
[COLOR=#2e8b57][b]external[/b][/color] myfunc, myconstraint
[COLOR=#2e8b57][b]double precision[/b][/color] lb([COLOR=#ff00ff]2[/color])
[COLOR=#2e8b57][b]integer[/b][/color][COLOR=#804040][b]*[/b][/color][COLOR=#ff00ff]8[/color] opt
[COLOR=#2e8b57][b]double precision[/b][/color] d1([COLOR=#ff00ff]2[/color]), d2([COLOR=#ff00ff]2[/color])
[COLOR=#2e8b57][b]double precision[/b][/color] x([COLOR=#ff00ff]2[/color]), minf
[COLOR=#2e8b57][b]integer[/b][/color] ires
[COLOR=#a020f0]include[/color] [COLOR=#ff00ff]'nlopt.f'[/color]
[COLOR=#008080]call[/color] nlo_create(opt, NLOPT_LD_MMA, [COLOR=#ff00ff]2[/color])
[COLOR=#008080]call[/color] nlo_get_lower_bounds(ires, opt, lb)
lb([COLOR=#ff00ff]2[/color]) [COLOR=#804040][b]=[/b][/color] [COLOR=#ff00ff]0.0[/color]
[COLOR=#008080]call[/color] nlo_set_lower_bounds(ires, opt, lb)
[COLOR=#008080]call[/color] nlo_set_min_objective(ires, opt, myfunc, [COLOR=#ff00ff]0[/color])
d1([COLOR=#ff00ff]1[/color]) [COLOR=#804040][b]=[/b][/color] [COLOR=#ff00ff]2[/color].
d1([COLOR=#ff00ff]2[/color]) [COLOR=#804040][b]=[/b][/color] [COLOR=#ff00ff]0[/color].
[COLOR=#008080]call[/color] nlo_add_inequality_constraint(ires, opt, [COLOR=#804040][b]&[/b][/color]
myconstraint, d1, [COLOR=#ff00ff]1.D-8[/color])
d2([COLOR=#ff00ff]1[/color]) [COLOR=#804040][b]=[/b][/color] [COLOR=#804040][b]-[/b][/color][COLOR=#ff00ff]1[/color].
d2([COLOR=#ff00ff]2[/color]) [COLOR=#804040][b]=[/b][/color] [COLOR=#ff00ff]1[/color].
[COLOR=#008080]call[/color] nlo_add_inequality_constraint(ires, opt, [COLOR=#804040][b]&[/b][/color]
myconstraint, d2, [COLOR=#ff00ff]1.D-8[/color])
[COLOR=#008080]call[/color] nlo_set_xtol_rel(ires, opt, [COLOR=#ff00ff]1.D-4[/color])
x([COLOR=#ff00ff]1[/color]) [COLOR=#804040][b]=[/b][/color] [COLOR=#ff00ff]1.234[/color]
x([COLOR=#ff00ff]2[/color]) [COLOR=#804040][b]=[/b][/color] [COLOR=#ff00ff]5.678[/color]
[COLOR=#008080]call[/color] nlo_optimize(ires, opt, x, minf)
[COLOR=#804040][b]if[/b][/color] (ires[COLOR=#804040][b].lt.[/b][/color][COLOR=#ff00ff]0[/color]) [COLOR=#804040][b]then[/b][/color]
[COLOR=#804040][b]write[/b][/color]([COLOR=#804040][b]*[/b][/color],[COLOR=#804040][b]*[/b][/color]) [COLOR=#ff00ff]'nlopt failed!'[/color]
[COLOR=#804040][b]else[/b][/color]
[COLOR=#804040][b]write[/b][/color]([COLOR=#804040][b]*[/b][/color],[COLOR=#804040][b]*[/b][/color]) [COLOR=#ff00ff]'found min at '[/color], x([COLOR=#ff00ff]1[/color]), x([COLOR=#ff00ff]2[/color])
[COLOR=#804040][b]write[/b][/color]([COLOR=#804040][b]*[/b][/color],[COLOR=#804040][b]*[/b][/color]) [COLOR=#ff00ff]'min val = '[/color], minf
[COLOR=#804040][b]endif[/b][/color]
[COLOR=#008080]call[/color] nlo_destroy(opt)
[COLOR=#a020f0]end[/color]
[COLOR=#a020f0]subroutine[/color] myfunc(val, n, x, grad, need_gradient, f_data)
[COLOR=#2e8b57][b]double precision[/b][/color] val, x(n), grad(n)
[COLOR=#2e8b57][b]integer[/b][/color] n, need_gradient
[COLOR=#804040][b]if[/b][/color] (need_gradient[COLOR=#804040][b].ne.[/b][/color][COLOR=#ff00ff]0[/color]) [COLOR=#804040][b]then[/b][/color]
grad([COLOR=#ff00ff]1[/color]) [COLOR=#804040][b]=[/b][/color] [COLOR=#ff00ff]0.0[/color]
grad([COLOR=#ff00ff]2[/color]) [COLOR=#804040][b]=[/b][/color] [COLOR=#ff00ff]0.5[/color] [COLOR=#804040][b]/[/b][/color] [COLOR=#008080]dsqrt[/color](x([COLOR=#ff00ff]2[/color]))
[COLOR=#804040][b]endif[/b][/color]
val [COLOR=#804040][b]=[/b][/color] [COLOR=#008080]dsqrt[/color](x([COLOR=#ff00ff]2[/color]))
[COLOR=#a020f0]end[/color]
[COLOR=#a020f0]subroutine[/color] myconstraint(val, n, x, grad, need_gradient, d)
[COLOR=#2e8b57][b]integer[/b][/color] need_gradient
[COLOR=#2e8b57][b]double precision[/b][/color] val, x(n), grad(n), d([COLOR=#ff00ff]2[/color]), a, b
a [COLOR=#804040][b]=[/b][/color] d([COLOR=#ff00ff]1[/color])
b [COLOR=#804040][b]=[/b][/color] d([COLOR=#ff00ff]2[/color])
[COLOR=#804040][b]if[/b][/color] (need_gradient[COLOR=#804040][b].ne.[/b][/color][COLOR=#ff00ff]0[/color]) [COLOR=#804040][b]then[/b][/color]
grad([COLOR=#ff00ff]1[/color]) [COLOR=#804040][b]=[/b][/color] [COLOR=#ff00ff]3[/color]. [COLOR=#804040][b]*[/b][/color] a [COLOR=#804040][b]*[/b][/color] (a[COLOR=#804040][b]*[/b][/color]x([COLOR=#ff00ff]1[/color]) [COLOR=#804040][b]+[/b][/color] b)[COLOR=#804040][b]**[/b][/color][COLOR=#ff00ff]2[/color]
grad([COLOR=#ff00ff]2[/color]) [COLOR=#804040][b]=[/b][/color] [COLOR=#804040][b]-[/b][/color][COLOR=#ff00ff]1.0[/color]
[COLOR=#804040][b]endif[/b][/color]
val [COLOR=#804040][b]=[/b][/color] (a[COLOR=#804040][b]*[/b][/color]x([COLOR=#ff00ff]1[/color]) [COLOR=#804040][b]+[/b][/color] b)[COLOR=#804040][b]**[/b][/color][COLOR=#ff00ff]3[/color] [COLOR=#804040][b]-[/b][/color] x([COLOR=#ff00ff]2[/color])
[COLOR=#a020f0]end[/color]