static nlopt_result divide_rect(double *rdiv, params *p)
{
int i;
- const const int n = p->n;
+ const int n = p->n;
const int L = p->L;
double *c = rdiv + 3; /* center of rect to divide */
double *w = c + n; /* widths of rect to divide */
}
/* workspace allocation */
- w = malloc((n*(3*n+2*m+11)+4*m+6)*sizeof(*w));
+ w = (double*) malloc((n*(3*n+2*m+11)+4*m+6)*sizeof(*w));
if (w == NULL)
{
if (iprint>=1) fprintf(stderr, "cobyla: memory allocation error.\n");
return NLOPT_OUT_OF_MEMORY;
}
- iact = malloc((m+1)*sizeof(*iact));
+ iact = (int*)malloc((m+1)*sizeof(*iact));
if (iact == NULL)
{
if (iprint>=1) fprintf(stderr, "cobyla: memory allocation error.\n");
#include "nlopt.h"
#include "nlopt-util.h"
+#ifdef __cplusplus
+extern "C"
+{
+#endif /* __cplusplus */
+
/*
* Verbosity level
*/
if test "x$with_cxx" = xyes; then
AC_DEFINE([WITH_CXX], 1, [Define if compiled including C++-based routines])
NLOPT_SUFFIX="_cxx"
+ CC=$CXX
+ CFLAGS=$CXXFLAGS
fi
AC_SUBST(NLOPT_SUFFIX)
if test "$ac_test_CXXFLAGS" != "set"; then
CXXFLAGS="$CXXFLAGS -Wall -W -Wcast-qual -Wpointer-arith -Wcast-align -pedantic -Wshadow -Wwrite-strings -Wredundant-decls -Wundef -Wconversion"
fi
+ if test "x$with_cxx" = xyes; then
+ CFLAGS=$CXXFLAGS
+ fi
fi
fi
FILE *logfile, doublereal *f, integer *free, integer *maxi,
integer *point, fp fcn, doublereal *x, doublereal *l, doublereal *
minf, integer *minpos, doublereal *u, integer *n, integer *maxfunc,
- integer *maxdeep, integer *oops, doublereal *fmax, integer *
+ const integer *maxdeep, integer *oops, doublereal *fmax, integer *
ifeasiblef, integer *iinfesiblef, void *fcn_data)
{
/* System generated locals */
/* +-----------------------------------------------------------------------+ */
/* Subroutine */ void direct_dirchoose_(integer *anchor, integer *s, integer *actdeep,
doublereal *f, doublereal *minf, doublereal epsrel, doublereal epsabs, doublereal *thirds,
- integer *maxpos, integer *length, integer *maxfunc, integer *maxdeep,
- integer *maxdiv, integer *n, FILE *logfile,
+ integer *maxpos, integer *length, integer *maxfunc, const integer *maxdeep,
+ const integer *maxdiv, integer *n, FILE *logfile,
integer *cheat, doublereal *kmax, integer *ifeasiblef, integer jones)
{
/* System generated locals */
/* | return to the main program with an error. | */
/* +-----------------------------------------------------------------------+ */
/* Subroutine */ void direct_dirdoubleinsert_(integer *anchor, integer *s, integer *
- maxpos, integer *point, doublereal *f, integer *maxdeep, integer *
- maxfunc, integer *maxdiv, integer *ierror)
+ maxpos, integer *point, doublereal *f, const integer *maxdeep, integer *
+ maxfunc, const integer *maxdiv, integer *ierror)
{
/* System generated locals */
integer s_dim1, s_offset, i__1;
/* +-----------------------------------------------------------------------+ */
/* Subroutine */ static void dirresortlist_(integer *replace, integer *anchor,
doublereal *f, integer *point, integer *length, integer *n, integer *
- maxfunc, integer *maxdim, integer *maxdeep, FILE *logfile,
+ maxfunc, integer *maxdim, const integer *maxdeep, FILE *logfile,
integer jones)
{
/* System generated locals */
/* Subroutine */ void direct_dirreplaceinf_(integer *free, integer *freeold,
doublereal *f, doublereal *c__, doublereal *thirds, integer *length,
integer *anchor, integer *point, doublereal *c1, doublereal *c2,
- integer *maxfunc, integer *maxdeep, integer *maxdim, integer *n,
+ integer *maxfunc, const integer *maxdeep, integer *maxdim, integer *n,
FILE *logfile, doublereal *fmax, integer jones)
{
/* System generated locals */
/* +-----------------------------------------------------------------------+ */
/* Subroutine */ void direct_dirinsertlist_(integer *new__, integer *anchor, integer *
point, doublereal *f, integer *maxi, integer *length, integer *
- maxfunc, integer *maxdeep, integer *n, integer *samp,
+ maxfunc, const integer *maxdeep, integer *n, integer *samp,
integer jones)
{
/* System generated locals */
FILE *logfile, doublereal *f, integer *free,
integer *maxi, integer *point, doublereal *x, doublereal *l,
doublereal *minf, integer *minpos, doublereal *u, integer *n,
- integer *maxfunc, integer *maxdeep, integer *oops)
+ integer *maxfunc, const integer *maxdeep, integer *oops)
{
/* System generated locals */
integer length_dim1, length_offset, c_dim1, c_offset, i__1, i__2;
/* Subroutine */ void direct_dirdivide_(integer *new__, integer *currentlength,
integer *length, integer *point, integer *arrayi, integer *sample,
integer *list2, doublereal *w, integer *maxi, doublereal *f, integer *
- maxfunc, integer *maxdeep, integer *n)
+ maxfunc, const integer *maxdeep, integer *n)
{
/* System generated locals */
integer length_dim1, length_offset, list2_dim1, list2_offset, i__1, i__2;
integer *free, FILE *logfile, integer *arrayi,
integer *maxi, integer *list2, doublereal *w, doublereal *x,
doublereal *l, doublereal *u, doublereal *minf, integer *minpos,
- doublereal *thirds, doublereal *levels, integer *maxfunc, integer *
+ doublereal *thirds, doublereal *levels, integer *maxfunc, const integer *
maxdeep, integer *n, integer *maxor, doublereal *fmax, integer *
ifeasiblef, integer *iinfeasible, integer *ierror, void *fcndata,
integer jones)
/* | Initialise the list. | */
/* +-----------------------------------------------------------------------+ */
/* Subroutine */ void direct_dirinitlist_(integer *anchor, integer *free, integer *
- point, doublereal *f, integer *maxfunc, integer *maxdeep)
+ point, doublereal *f, integer *maxfunc, const integer *maxdeep)
{
/* System generated locals */
integer i__1;
/* Subroutine */ void direct_dirheader_(FILE *logfile, integer *version,
doublereal *x, integer *n, doublereal *eps, integer *maxf, integer *
maxt, doublereal *l, doublereal *u, integer *algmethod, integer *
- maxfunc, integer *maxdeep, doublereal *fglobal, doublereal *fglper,
+ maxfunc, const integer *maxdeep, doublereal *fglobal, doublereal *fglper,
integer *ierror, doublereal *epsfix, integer *iepschange, doublereal *
volper, doublereal *sigmaper)
{
FILE *logfile, integer *version,
doublereal *x, integer *n, doublereal *eps, integer *maxf, integer *
maxt, doublereal *l, doublereal *u, integer *algmethod, integer *
- maxfunc, integer *maxdeep, doublereal *fglobal, doublereal *fglper,
+ maxfunc, const integer *maxdeep, doublereal *fglobal, doublereal *fglper,
integer *ierror, doublereal *epsfix, integer *iepschange, doublereal *
volper, doublereal *sigmaper);
extern void direct_dirinit_(
integer *free, FILE *logfile, integer *arrayi,
integer *maxi, integer *list2, doublereal *w, doublereal *x,
doublereal *l, doublereal *u, doublereal *minf, integer *minpos,
- doublereal *thirds, doublereal *levels, integer *maxfunc, integer *
+ doublereal *thirds, doublereal *levels, integer *maxfunc, const integer *
maxdeep, integer *n, integer *maxor, doublereal *fmax, integer *
ifeasiblef, integer *iinfeasible, integer *ierror, void *fcndata,
integer jones);
extern void direct_dirinitlist_(
integer *anchor, integer *free, integer *
- point, doublereal *f, integer *maxfunc, integer *maxdeep);
+ point, doublereal *f, integer *maxfunc, const integer *maxdeep);
extern void direct_dirpreprc_(doublereal *u, doublereal *l, integer *n,
doublereal *xs1, doublereal *xs2, integer *oops);
extern void direct_dirchoose_(
integer *anchor, integer *s, integer *actdeep,
doublereal *f, doublereal *minf, doublereal epsrel, doublereal epsabs, doublereal *thirds,
- integer *maxpos, integer *length, integer *maxfunc, integer *maxdeep,
- integer *maxdiv, integer *n, FILE *logfile,
+ integer *maxpos, integer *length, integer *maxfunc, const integer *maxdeep,
+ const integer *maxdiv, integer *n, FILE *logfile,
integer *cheat, doublereal *kmax, integer *ifeasiblef, integer jones);
extern void direct_dirdoubleinsert_(
integer *anchor, integer *s, integer *maxpos, integer *point,
- doublereal *f, integer *maxdeep, integer *maxfunc,
- integer *maxdiv, integer *ierror);
+ doublereal *f, const integer *maxdeep, integer *maxfunc,
+ const integer *maxdiv, integer *ierror);
extern integer direct_dirgetmaxdeep_(integer *pos, integer *length, integer *maxfunc,
integer *n);
extern void direct_dirget_i__(
FILE *logfile, doublereal *f, integer *free,
integer *maxi, integer *point, doublereal *x, doublereal *l,
doublereal *minf, integer *minpos, doublereal *u, integer *n,
- integer *maxfunc, integer *maxdeep, integer *oops);
+ integer *maxfunc, const integer *maxdeep, integer *oops);
extern void direct_dirdivide_(
integer *new__, integer *currentlength,
integer *length, integer *point, integer *arrayi, integer *sample,
integer *list2, doublereal *w, integer *maxi, doublereal *f,
- integer *maxfunc, integer *maxdeep, integer *n);
+ integer *maxfunc, const integer *maxdeep, integer *n);
extern void direct_dirinsertlist_(
integer *new__, integer *anchor, integer *point, doublereal *f,
integer *maxi, integer *length, integer *maxfunc,
- integer *maxdeep, integer *n, integer *samp, integer jones);
+ const integer *maxdeep, integer *n, integer *samp, integer jones);
extern void direct_dirreplaceinf_(
integer *free, integer *freeold,
doublereal *f, doublereal *c__, doublereal *thirds, integer *length,
integer *anchor, integer *point, doublereal *c1, doublereal *c2,
- integer *maxfunc, integer *maxdeep, integer *maxdim, integer *n,
+ integer *maxfunc, const integer *maxdeep, integer *maxdim, integer *n,
FILE *logfile, doublereal *fmax, integer jones);
extern void direct_dirsummary_(
FILE *logfile, doublereal *x, doublereal *l, doublereal *u,
FILE *logfile, doublereal *f, integer *free, integer *maxi,
integer *point, fp fcn, doublereal *x, doublereal *l, doublereal *
minf, integer *minpos, doublereal *u, integer *n, integer *maxfunc,
- integer *maxdeep, integer *oops, doublereal *fmax, integer *
+ const integer *maxdeep, integer *oops, doublereal *fmax, integer *
ifeasiblef, integer *iinfesiblef, void *fcn_data);
/* DIRect.c */
/* utility routines to implement the various stopping criteria */
-static int relstop(double old, double new, double reltol, double abstol)
+static int relstop(double vold, double vnew, double reltol, double abstol)
{
- if (nlopt_isinf(old)) return 0;
- return(fabs(new - old) < abstol
- || fabs(new - old) < reltol * (fabs(new) + fabs(old)) * 0.5
- || (reltol > 0 && new == old)); /* catch new == old == 0 case */
+ if (nlopt_isinf(vold)) return 0;
+ return(fabs(vnew - vold) < abstol
+ || fabs(vnew - vold) < reltol * (fabs(vnew) + fabs(vold)) * 0.5
+ || (reltol > 0 && vnew == vold)); /* catch vnew == vold == 0 */
}
int nlopt_stop_ftol(const nlopt_stopping *s, const double f, double oldf)