Script 'mail_helper' called by obssrc
Hello community,
here is the log from the commit of package Ipopt for openSUSE:Factory checked in at 2021-07-31 18:51:23
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/Ipopt (Old)
and /work/SRC/openSUSE:Factory/.Ipopt.new.1899 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "Ipopt"
Sat Jul 31 18:51:23 2021 rev:8 rq:909506 version:3.14.2
Changes:
--------
--- /work/SRC/openSUSE:Factory/Ipopt/Ipopt.changes 2021-07-05 22:23:09.113642128 +0200
+++ /work/SRC/openSUSE:Factory/.Ipopt.new.1899/Ipopt.changes 2021-07-31 18:52:27.482453874 +0200
@@ -1,0 +2,13 @@
+Wed Jul 28 10:29:43 UTC 2021 - Atri Bhattacharya
+
+- Update to version 3.14.2:
+ * Added OptionsList::UnsetValue() to remove an option setting.
+ * Added missing translation of some Ipopt status codes into AMPL
+ solve result codes.
+ * If using the MPI-parallel version of MUMPS: Moved calls to
+ MPI_Init()/MPI_Finalize() in MUMPS interface into global
+ constructor/destructor of Ipopt library (if building with
+ GCC/clang). Use configure flag --disable-mpiinit to disable.
+ [gh#coin-or/Ipopt#500].
+
+-------------------------------------------------------------------
Old:
----
Ipopt-3.14.1.tar.gz
New:
----
Ipopt-3.14.2.tar.gz
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ Ipopt.spec ++++++
--- /var/tmp/diff_new_pack.8V731k/_old 2021-07-31 18:52:27.834453453 +0200
+++ /var/tmp/diff_new_pack.8V731k/_new 2021-07-31 18:52:27.838453448 +0200
@@ -18,7 +18,7 @@
%define shlib libipopt0
Name: Ipopt
-Version: 3.14.1
+Version: 3.14.2
Release: 0
Summary: A software package for large-scale nonlinear optimization methods
License: EPL-2.0
++++++ Ipopt-3.14.1.tar.gz -> Ipopt-3.14.2.tar.gz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/Ipopt-releases-3.14.1/.travis.yml new/Ipopt-releases-3.14.2/.travis.yml
--- old/Ipopt-releases-3.14.1/.travis.yml 2021-06-25 11:22:34.000000000 +0200
+++ new/Ipopt-releases-3.14.2/.travis.yml 2021-07-21 09:31:43.000000000 +0200
@@ -101,8 +101,8 @@
brew update;
brew install bash gcc metis hwloc;
$SINGLEPRECISION && brew install lapack;
- if [[ "$OSX" == 10.14 ]] ; then export CC=gcc-9 ; export CXX=g++-9 ;
- elif [[ "$OSX" == 10.15 ]] ; then export CC=gcc-10 ; export CXX=g++-10 ;
+ if [[ "$OSX" == 10.14 ]] ; then export CC=gcc-11 ; export CXX=g++-11 ;
+ elif [[ "$OSX" == 10.15 ]] ; then export CC=gcc-11 ; export CXX=g++-11 ;
elif [[ "$OSX" == 11 ]] ; then export CC=gcc-11 ; export CXX=g++-11 ; fi ;
$CC --version; $CXX --version; gfortran --version;
fi
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/Ipopt-releases-3.14.1/ChangeLog.md new/Ipopt-releases-3.14.2/ChangeLog.md
--- old/Ipopt-releases-3.14.1/ChangeLog.md 2021-06-25 11:22:34.000000000 +0200
+++ new/Ipopt-releases-3.14.2/ChangeLog.md 2021-07-21 09:31:43.000000000 +0200
@@ -7,6 +7,15 @@
## 3.14
+### 3.14.2 (2021-07-21)
+
+- Added `OptionsList::UnsetValue()` to remove an option setting.
+- Added missing translation of some Ipopt status codes into AMPL solve result codes.
+- If using the MPI-parallel version of MUMPS: Moved calls to
+ `MPI_Init()`/`MPI_Finalize()` in MUMPS interface into global constructor/destructor
+ of Ipopt library (if building with GCC/clang). Use configure flag
+ `--disable-mpiinit` to disable. [#500]
+
### 3.14.1 (2021-06-25)
- Fixed invalidation of cached Hessians when reoptimizing with same structure.
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/Ipopt-releases-3.14.1/README.md new/Ipopt-releases-3.14.2/README.md
--- old/Ipopt-releases-3.14.1/README.md 2021-06-25 11:22:34.000000000 +0200
+++ new/Ipopt-releases-3.14.2/README.md 2021-07-21 09:31:43.000000000 +0200
@@ -47,9 +47,9 @@
In order to compile Ipopt, certain third party code is required (such as some linear algebra routines).
Those are available under different conditions/licenses.
-If you want to learn more about Ipopt, you can find references in the [bibliography of the documentation](https://coin-or.github.io/Ipopt/citelist.html) and this ["Papers about Ipopt" page](https://github.com/coin-or/Ipopt/wiki/IpoptPapers).
+If you want to learn more about Ipopt, you can find references in the [bibliography of the documentation](https://coin-or.github.io/Ipopt/citelist.html).
-For information on projects that use Ipopt, refer to the [Success Stories page](https://github.com/coin-or/Ipopt/wiki/SuccessStories).
+For information on projects or papers that use Ipopt, refer to the [Ipopt usage stories and papers](https://github.com/coin-or/Ipopt/discussions/497) discussion.
Getting Started
@@ -124,7 +124,6 @@
Please include as much information as possible, and if possible some (ideally simple) example code so that we can reproduce the error.
* **[Discussions](https://github.com/coin-or/Ipopt/discussions)**: ask questions, share ideas, engage with the Ipopt community
* **[Mailing list archive](http://list.coin-or.org/pipermail/ipopt/)** (2002-2020): predecessor of Discussions
- * **[Ipopt Wiki](https://github.com/coin-or/Ipopt/wiki)** with hints and tricks
* External resources:
* [short Ipopt tutorial](http://drops.dagstuhl.de/volltexte/2009/2089/pdf/09061.WaechterAndreas.Paper...)
* [build Ipopt on Windows step-by-step](https://github.com/Ishanki/IPOPT-Installation-on-Windows-10)
@@ -133,7 +132,7 @@
--------------
We provide this program in the hope that it may be useful to others, and we would very much like to hear about your experience with it.
-If you found it helpful and are using it within our software, we encourage you to add your feedback to the [Success Stories page](https://github.com/coin-or/Ipopt/wiki/SuccessStories).
+If you found it helpful and are using it within our software, we encourage you to add your feedback to the [Ipopt usage stories and papers](https://github.com/coin-or/Ipopt/discussions/497) discussion.
Since a lot of time and effort has gone into Ipopt's development, **please cite the following publication if you are using Ipopt for your own research**:
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/Ipopt-releases-3.14.1/configure new/Ipopt-releases-3.14.2/configure
--- old/Ipopt-releases-3.14.1/configure 2021-06-25 11:22:34.000000000 +0200
+++ new/Ipopt-releases-3.14.2/configure 2021-07-21 09:31:43.000000000 +0200
@@ -1,6 +1,6 @@
#! /bin/sh
# Guess values for system-dependent variables and create Makefiles.
-# Generated by GNU Autoconf 2.71 for Ipopt 3.14.1.
+# Generated by GNU Autoconf 2.71 for Ipopt 3.14.2.
#
# Report bugs to https://github.com/coin-or/Ipopt/issues/new.
#
@@ -627,8 +627,8 @@
# Identity of this package.
PACKAGE_NAME='Ipopt'
PACKAGE_TARNAME='ipopt'
-PACKAGE_VERSION='3.14.1'
-PACKAGE_STRING='Ipopt 3.14.1'
+PACKAGE_VERSION='3.14.2'
+PACKAGE_STRING='Ipopt 3.14.2'
PACKAGE_BUGREPORT='https://github.com/coin-or/Ipopt/issues/new'
PACKAGE_URL='https://github.com/coin-or/Ipopt'
@@ -911,6 +911,7 @@
with_mumps
with_mumps_lflags
with_mumps_cflags
+enable_mpiinit
with_hsl
with_hsl_lflags
with_hsl_cflags
@@ -1494,7 +1495,7 @@
# Omit some internal or obsolete options to make the list less imposing.
# This message is too long to be a string in the A/UX 3.1 sh.
cat <<_ACEOF
-\`configure' configures Ipopt 3.14.1 to adapt to many kinds of systems.
+\`configure' configures Ipopt 3.14.2 to adapt to many kinds of systems.
Usage: $0 [OPTION]... [VAR=VALUE]...
@@ -1565,7 +1566,7 @@
if test -n "$ac_init_help"; then
case $ac_init_help in
- short | recursive ) echo "Configuration of Ipopt 3.14.1:";;
+ short | recursive ) echo "Configuration of Ipopt 3.14.2:";;
esac
cat <<\_ACEOF
@@ -1594,6 +1595,9 @@
--enable-fast-install[=PKGS]
optimize for fast installation [default=yes]
--disable-libtool-lock avoid locking (might break parallel builds)
+ --disable-mpiinit disable that (un)loading the Ipopt library
+ initalizes (finalizes) MPI if the MPI version of
+ MUMPS is linked
--disable-pardisomkl disable check for MKL version of Pardiso in Lapack
--enable-inexact-solver enable inexact linear solver version EXPERIMENTAL!
(default: no)
@@ -1760,7 +1764,7 @@
test -n "$ac_init_help" && exit $ac_status
if $ac_init_version; then
cat <<\_ACEOF
-Ipopt configure 3.14.1
+Ipopt configure 3.14.2
generated by GNU Autoconf 2.71
Copyright (C) 2021 Free Software Foundation, Inc.
@@ -2645,7 +2649,7 @@
This file contains any messages produced by compilers while
running configure, to aid debugging if configure makes a mistake.
-It was created by Ipopt $as_me 3.14.1, which was
+It was created by Ipopt $as_me 3.14.2, which was
generated by GNU Autoconf 2.71. Invocation command line was
$ $0$ac_configure_args_raw
@@ -4266,7 +4270,7 @@
-printf "%s\n" "#define IPOPT_VERSION \"3.14.1\"" >>confdefs.h
+printf "%s\n" "#define IPOPT_VERSION \"3.14.2\"" >>confdefs.h
printf "%s\n" "#define IPOPT_VERSION_MAJOR 3" >>confdefs.h
@@ -4275,7 +4279,7 @@
printf "%s\n" "#define IPOPT_VERSION_MINOR 14" >>confdefs.h
-printf "%s\n" "#define IPOPT_VERSION_RELEASE 1" >>confdefs.h
+printf "%s\n" "#define IPOPT_VERSION_RELEASE 2" >>confdefs.h
@@ -4386,7 +4390,7 @@
# Define the identity of the package.
PACKAGE='ipopt'
- VERSION='3.14.1'
+ VERSION='3.14.2'
# Some tools Automake needs.
@@ -22135,9 +22139,9 @@
- LT_LDFLAGS="$LT_LDFLAGS -version-number 3:14:1"
- { printf "%s\n" "$as_me:${as_lineno-$LINENO}: libtool version info: -version-number 3:14:1" >&5
-printf "%s\n" "$as_me: libtool version info: -version-number 3:14:1" >&6;}
+ LT_LDFLAGS="$LT_LDFLAGS -version-number 3:14:2"
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: libtool version info: -version-number 3:14:2" >&5
+printf "%s\n" "$as_me: libtool version info: -version-number 3:14:2" >&6;}
LT_LDFLAGS="$LT_LDFLAGS -no-undefined"
@@ -24168,6 +24172,25 @@
fi
+# Check whether --enable-mpiinit was given.
+if test ${enable_mpiinit+y}
+then :
+ enableval=$enable_mpiinit; case "$enableval" in
+ no | yes) ;;
+ *)
+ as_fn_error $? "invalid argument for --enable-mpiinit: $enableval" "$LINENO" 5;;
+ esac
+ mpiinit=$enableval
+else $as_nop
+ mpiinit=yes
+fi
+
+if test $mpiinit = yes ; then
+
+printf "%s\n" "#define IPOPT_MPIINIT 1" >>confdefs.h
+
+fi
+
#######
# HSL #
#######
@@ -25963,7 +25986,7 @@
JAVA_TEST=Test.java
CLASS_TEST=Test.class
cat << \EOF > $JAVA_TEST
-/* #line 25966 "configure" */
+/* #line 25989 "configure" */
public class Test {
}
EOF
@@ -26489,7 +26512,7 @@
JAVA_TEST=Test.java
CLASS_TEST=Test.class
cat << \EOF > $JAVA_TEST
-/* #line 26492 "configure" */
+/* #line 26515 "configure" */
public class Test {
}
EOF
@@ -26524,7 +26547,7 @@
CLASS_TEST=Test.class
TEST=Test
cat << \EOF > $JAVA_TEST
-/* [#]line 26527 "configure" */
+/* [#]line 26550 "configure" */
public class Test {
public static void main (String args[]) {
System.exit (0);
@@ -27975,7 +27998,7 @@
# report actual input values of CONFIG_FILES etc. instead of their
# values after options handling.
ac_log="
-This file was extended by Ipopt $as_me 3.14.1, which was
+This file was extended by Ipopt $as_me 3.14.2, which was
generated by GNU Autoconf 2.71. Invocation command line was
CONFIG_FILES = $CONFIG_FILES
@@ -28048,7 +28071,7 @@
cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
ac_cs_config='$ac_cs_config_escaped'
ac_cs_version="\\
-Ipopt config.status 3.14.1
+Ipopt config.status 3.14.2
configured by $0, generated by GNU Autoconf 2.71,
with options \\"\$ac_cs_config\\"
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/Ipopt-releases-3.14.1/configure.ac new/Ipopt-releases-3.14.2/configure.ac
--- old/Ipopt-releases-3.14.1/configure.ac 2021-06-25 11:22:34.000000000 +0200
+++ new/Ipopt-releases-3.14.2/configure.ac 2021-07-21 09:31:43.000000000 +0200
@@ -8,7 +8,7 @@
# Names and other basic things #
#############################################################################
-AC_INIT([Ipopt],[3.14.1],[https://github.com/coin-or/Ipopt/issues/new],[],[https://github.com/coin-or/Ipopt])
+AC_INIT([Ipopt],[3.14.2],[https://github.com/coin-or/Ipopt/issues/new],[],[https://github.com/coin-or/Ipopt])
AC_COPYRIGHT([
Copyright 2004, 2011 International Business Machines and others.
@@ -128,6 +128,19 @@
# we assume that MPI_Finalized is present if MPI_Initialized is present
AC_CHECK_FUNCS([MPI_Initialized])
+AC_ARG_ENABLE([mpiinit],
+ [AS_HELP_STRING([--disable-mpiinit],[disable that (un)loading the Ipopt library initalizes (finalizes) MPI if the MPI version of MUMPS is linked])],
+ [case "$enableval" in
+ no | yes) ;;
+ *)
+ AC_MSG_ERROR([invalid argument for --enable-mpiinit: $enableval]);;
+ esac
+ mpiinit=$enableval],
+ [mpiinit=yes])
+if test $mpiinit = yes ; then
+ AC_DEFINE(IPOPT_MPIINIT,1,[Define to 1 if MPI should be initialized (finalized) when Ipopt library is (un)loaded.])
+fi
+
#######
# HSL #
#######
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/Ipopt-releases-3.14.1/doc/install.dox new/Ipopt-releases-3.14.2/doc/install.dox
--- old/Ipopt-releases-3.14.1/doc/install.dox 2021-06-25 11:22:34.000000000 +0200
+++ new/Ipopt-releases-3.14.2/doc/install.dox 2021-07-21 09:31:43.000000000 +0200
@@ -302,10 +302,15 @@
in [METIS](http://glaros.dtc.umn.edu/gkhome/metis/metis/overview) are
available on the system.
-\note MUMPS uses internally a fake implementation of MPI. If you are
-using %Ipopt within an MPI program together with MUMPS, the
-code will not run. You will have to modify the MUMPS sources so that the
-MPI symbols inside the MUMPS code are renamed.
+\note The non-MPI version of MUMPS uses internally a fake implementation
+of MPI, which can prevent using %Ipopt together with MUMPS within an MPI program.
+You will have to either modify the MUMPS sources so that the MPI symbols
+inside the MUMPS code are renamed or use a MPI-parallel version of MUMPS.
+In the latter case and if a GCC compatible compiler is used, the %Ipopt
+library will call `MPI_Init()` and `MPI_Finalize()` when loaded and unloaded,
+respectively. To prevent this, use the configure flag `--disable-mpiinit`.
+Note that the %Ipopt executable, tests, and examples will not work in this
+case (if using MUMPS as linear solver).
\note Branch `stable/2.1` of project ThirdParty-Mumps can be used to build
a library of MUMPS 4 that is usable with %Ipopt. Initial experiments on
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/Ipopt-releases-3.14.1/doc/main.dox new/Ipopt-releases-3.14.2/doc/main.dox
--- old/Ipopt-releases-3.14.1/doc/main.dox 2021-06-25 11:22:34.000000000 +0200
+++ new/Ipopt-releases-3.14.2/doc/main.dox 2021-07-21 09:31:43.000000000 +0200
@@ -79,8 +79,8 @@
Writing high-quality numerical software takes a lot of time and effort,
and does usually not translate into a large number of publications,
therefore we believe this request is only fair :).
-We also have space in the [%Ipopt wiki](https://github.com/coin-or/Ipopt/wiki)
-where we list publications,
+We also have space in the [%Ipopt usage stories and papers](https://github.com/coin-or/Ipopt/discussions/497)
+discussion where we list publications,
projects, etc., in which %Ipopt has been used. We would be
very happy to hear about your experiences.
@@ -317,8 +317,7 @@
\subsection MOREINFO More Information and Contributions
-An issue tracking, discussion system, and a wiki can be found at the %Ipopt
-homepage,
+An issue tracking and discussion system can be found at the %Ipopt homepage,
https://github.com/coin-or/Ipopt.
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/Ipopt-releases-3.14.1/src/Algorithm/LinearSolvers/IpMumpsSolverInterface.cpp new/Ipopt-releases-3.14.2/src/Algorithm/LinearSolvers/IpMumpsSolverInterface.cpp
--- old/Ipopt-releases-3.14.1/src/Algorithm/LinearSolvers/IpMumpsSolverInterface.cpp 2021-06-25 11:22:34.000000000 +0200
+++ new/Ipopt-releases-3.14.2/src/Algorithm/LinearSolvers/IpMumpsSolverInterface.cpp 2021-07-21 09:31:43.000000000 +0200
@@ -14,9 +14,6 @@
// - Since Mumps 5.1.0, mumps_->nz (MUMPS_INT) is deprecated and mumps_->nnz (MUMPS_INT8) should be used.
// For now (Mumps 5.4.0), mumps_->nz still works and has no disadvantage for us.
-// The following line is a fix for otherwise twice-defined global variable
-// (This would have to be taken out for a parallel MUMPS version!)
-#define MPI_COMM_WORLD IPOPT_MPI_COMM_WORLD
#ifdef __GNUC__
#pragma GCC diagnostic ignored "-Wunused-variable"
#endif
@@ -55,23 +52,13 @@
static std::mutex mumps_call_mutex;
#endif
-namespace Ipopt
-{
-#if IPOPT_VERBOSITY > 0
-static const Index dbg_verbosity = 0;
-#endif
-
#define USE_COMM_WORLD -987654
-int MumpsSolverInterface::instancecount_mpi = 0;
-
-MumpsSolverInterface::MumpsSolverInterface()
+// initialize MPI when library is loaded; finalize MPI when library is unloaded
+#if defined(__GNUC__) && defined(IPOPT_MPIINIT) && !defined(MUMPS_MPI_H) && defined(HAVE_MPI_INITIALIZED)
+__attribute__((constructor))
+static void MPIinit(void)
{
- DBG_START_METH("MumpsSolverInterface::MumpsSolverInterface()",
- dbg_verbosity);
-
-#ifndef MUMPS_MPI_H
-#if defined(HAVE_MPI_INITIALIZED)
int mpi_initialized;
MPI_Initialized(&mpi_initialized);
if( !mpi_initialized )
@@ -79,18 +66,31 @@
int argc = 1;
char** argv = NULL;
MPI_Init(&argc, &argv);
- assert(instancecount_mpi == 0);
- instancecount_mpi = 1;
- }
- else if( instancecount_mpi > 0 )
- {
- ++instancecount_mpi;
}
+}
+
+__attribute__((destructor))
+static void MPIfini(void)
+{
+ int mpi_finalized;
+ MPI_Finalized(&mpi_finalized);
+ if(!mpi_finalized)
+ MPI_Finalize();
+}
#endif
- int myid;
- MPI_Comm_rank(MPI_COMM_WORLD, &myid);
+
+
+namespace Ipopt
+{
+#if IPOPT_VERBOSITY > 0
+static const Index dbg_verbosity = 0;
#endif
+MumpsSolverInterface::MumpsSolverInterface()
+{
+ DBG_START_METH("MumpsSolverInterface::MumpsSolverInterface()",
+ dbg_verbosity);
+
//initialize mumps
MUMPS_STRUC_C* mumps_ = static_cast(calloc(1, sizeof(MUMPS_STRUC_C)));
mumps_->job = -1; //initialize mumps
@@ -121,18 +121,6 @@
MUMPS_STRUC_C* mumps_ = static_cast(mumps_ptr_);
mumps_->job = -2; //terminate mumps
mumps_c(mumps_);
-#ifndef MUMPS_MPI_H
-#ifdef HAVE_MPI_INITIALIZED
- if( instancecount_mpi == 1 )
- {
- int mpi_finalized;
- MPI_Finalized(&mpi_finalized);
- assert(!mpi_finalized);
- MPI_Finalize();
- }
- --instancecount_mpi;
-#endif
-#endif
delete[] mumps_->a;
free(mumps_);
}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/Ipopt-releases-3.14.1/src/Algorithm/LinearSolvers/IpMumpsSolverInterface.hpp new/Ipopt-releases-3.14.2/src/Algorithm/LinearSolvers/IpMumpsSolverInterface.hpp
--- old/Ipopt-releases-3.14.1/src/Algorithm/LinearSolvers/IpMumpsSolverInterface.hpp 2021-06-25 11:22:34.000000000 +0200
+++ new/Ipopt-releases-3.14.2/src/Algorithm/LinearSolvers/IpMumpsSolverInterface.hpp 2021-07-21 09:31:43.000000000 +0200
@@ -140,11 +140,6 @@
* again.
*/
bool refactorize_;
- /** Counter on number of alive Mumps interface objects, if we have called MPI_Initialize.
- *
- * When the last object is destroyed, we will call MPI_Finalize.
- */
- static int instancecount_mpi;
///@}
/** @name Solver specific data/options */
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/Ipopt-releases-3.14.1/src/Apps/AmplSolver/AmplTNLP.cpp new/Ipopt-releases-3.14.2/src/Apps/AmplSolver/AmplTNLP.cpp
--- old/Ipopt-releases-3.14.1/src/Apps/AmplSolver/AmplTNLP.cpp 2021-06-25 11:22:34.000000000 +0200
+++ new/Ipopt-releases-3.14.2/src/Apps/AmplSolver/AmplTNLP.cpp 2021-07-21 09:31:43.000000000 +0200
@@ -827,60 +827,98 @@
obj_sol_ = obj_value;
std::string message = " \nIpopt " IPOPT_VERSION ": ";
- if( status == SUCCESS )
+ switch( status )
{
- message += "Optimal Solution Found";
- solve_result_num = 0;
- }
- else if( status == MAXITER_EXCEEDED )
- {
- message += "Maximum Number of Iterations Exceeded.";
- solve_result_num = 400;
- }
- else if( status == CPUTIME_EXCEEDED )
- {
- message += "Maximum CPU Time Exceeded.";
- solve_result_num = 401;
- }
- else if( status == WALLTIME_EXCEEDED )
- {
- message += "Maximum Wallclock Time Exceeded.";
- solve_result_num = 402;
- }
- else if( status == STOP_AT_TINY_STEP )
- {
- message += "Search Direction becomes Too Small.";
- solve_result_num = 500;
- }
- else if( status == STOP_AT_ACCEPTABLE_POINT )
- {
- message += "Solved To Acceptable Level.";
- solve_result_num = 1;
- }
- else if( status == FEASIBLE_POINT_FOUND )
- {
- message += "Found feasible point for square problem.";
- solve_result_num = 2;
- }
- else if( status == LOCAL_INFEASIBILITY )
- {
- message += "Converged to a locally infeasible point. Problem may be infeasible.";
- solve_result_num = 200;
- }
- else if( status == RESTORATION_FAILURE )
- {
- message += "Restoration Phase Failed.";
- solve_result_num = 501;
- }
- else if( status == DIVERGING_ITERATES )
- {
- message += "Iterates diverging; problem might be unbounded.";
- solve_result_num = 300;
- }
- else
- {
- message += "Unknown Error";
- solve_result_num = 502;
+ case SUCCESS:
+ message += "Optimal Solution Found";
+ solve_result_num = 0;
+ break;
+
+ case STOP_AT_ACCEPTABLE_POINT:
+ message += "Solved To Acceptable Level.";
+ solve_result_num = 1;
+ break;
+
+ case FEASIBLE_POINT_FOUND:
+ message += "Found feasible point for square problem.";
+ solve_result_num = 2;
+ break;
+
+ case LOCAL_INFEASIBILITY:
+ message += "Converged to a locally infeasible point. Problem may be infeasible.";
+ solve_result_num = 200;
+ break;
+
+ case DIVERGING_ITERATES:
+ message += "Iterates diverging; problem might be unbounded.";
+ solve_result_num = 300;
+ break;
+
+ case MAXITER_EXCEEDED:
+ message += "Maximum Number of Iterations Exceeded.";
+ solve_result_num = 400;
+ break;
+
+ case CPUTIME_EXCEEDED:
+ message += "Maximum CPU Time Exceeded.";
+ solve_result_num = 401;
+ break;
+
+ case WALLTIME_EXCEEDED:
+ message += "Maximum Wallclock Time Exceeded.";
+ solve_result_num = 402;
+ break;
+
+ case USER_REQUESTED_STOP:
+ message += "User requested stop.";
+ solve_result_num = 403;
+ break;
+
+ case STOP_AT_TINY_STEP:
+ message += "Search Direction becomes Too Small.";
+ solve_result_num = 500;
+ break;
+
+ case RESTORATION_FAILURE:
+ message += "Restoration Phase Failed.";
+ solve_result_num = 501;
+ break;
+
+ case ERROR_IN_STEP_COMPUTATION:
+ message += "Error in step computation.";
+ solve_result_num = 502;
+ break;
+
+ // the following should be dead code, i.e., finalize_solution isn't called in these cases
+ case INVALID_NUMBER_DETECTED:
+ message += "Invalid number in NLP function or derivative detected.";
+ solve_result_num = 550;
+ break;
+
+ case TOO_FEW_DEGREES_OF_FREEDOM:
+ message += "NLP has too few degrees of freedom.";
+ solve_result_num = 551;
+ break;
+
+ case INVALID_OPTION:
+ message += "Invalid option setting.";
+ solve_result_num = 552;
+ break;
+
+ case OUT_OF_MEMORY:
+ message += "Out of memory.";
+ solve_result_num = 553;
+ break;
+
+ case INTERNAL_ERROR:
+ message += "Internal error.";
+ solve_result_num = 554;
+ break;
+
+ case UNASSIGNED:
+ message += "Unknown Error";
+ solve_result_num = 599;
+ break;
}
if( IsValid(suffix_handler_) )
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/Ipopt-releases-3.14.1/src/Common/IpOptionsList.cpp new/Ipopt-releases-3.14.2/src/Common/IpOptionsList.cpp
--- old/Ipopt-releases-3.14.1/src/Common/IpOptionsList.cpp 2021-06-25 11:22:34.000000000 +0200
+++ new/Ipopt-releases-3.14.2/src/Common/IpOptionsList.cpp 2021-07-21 09:31:43.000000000 +0200
@@ -283,6 +283,27 @@
return true;
}
+bool OptionsList::UnsetValue(
+ const std::string& tag
+)
+{
+ if( !will_allow_clobber(tag) )
+ {
+ if( IsValid(jnlst_) )
+ {
+ std::string msg = "WARNING: Tried to unset option \"" + tag;
+ msg += "\",\n but the current value is set to disallow clobbering.\n";
+ msg += " The setting will remain as: \"" + tag;
+ msg += " " + options_[lowercase(tag)].GetValue();
+ msg += "\"\n";
+ jnlst_->Printf(J_WARNING, J_MAIN, "%s", msg.c_str());
+ }
+ return false;
+ }
+
+ return options_.erase(lowercase(tag)) > 0;
+}
+
bool OptionsList::SetStringValueIfUnset(
const std::string& tag,
const std::string& value,
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/Ipopt-releases-3.14.1/src/Common/IpOptionsList.hpp new/Ipopt-releases-3.14.2/src/Common/IpOptionsList.hpp
--- old/Ipopt-releases-3.14.1/src/Common/IpOptionsList.hpp 2021-06-25 11:22:34.000000000 +0200
+++ new/Ipopt-releases-3.14.2/src/Common/IpOptionsList.hpp 2021-07-21 09:31:43.000000000 +0200
@@ -239,6 +239,14 @@
{
return SetStringValue(tag, value ? "yes" : "no", allow_clobber, dont_print);
}
+
+ /// Resets an option to its default value, if clobber is allowed.
+ ///
+ /// @return Whether value has been unset, i.e., value was set before and clobber was allowed.
+ /// @since 3.14.2
+ virtual bool UnsetValue(
+ const std::string& tag
+ );
///@}
/** @name Methods for setting options only if they have not been set before */
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/Ipopt-releases-3.14.1/src/Common/config.h.in new/Ipopt-releases-3.14.2/src/Common/config.h.in
--- old/Ipopt-releases-3.14.1/src/Common/config.h.in 2021-06-25 11:22:34.000000000 +0200
+++ new/Ipopt-releases-3.14.2/src/Common/config.h.in 2021-07-21 09:31:43.000000000 +0200
@@ -155,6 +155,10 @@
/* As IPOPT_LAPACK_FUNC, but for C identifiers containing underscores. */
#undef IPOPT_LAPACK_FUNC_
+/* Define to 1 if MPI should be initialized (finalized) when Ipopt library is
+ (un)loaded. */
+#undef IPOPT_MPIINIT
+
/* Define to 1 if using single precision floating point */
#undef IPOPT_SINGLE
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/Ipopt-releases-3.14.1/src/Common/config_ipopt_default.h new/Ipopt-releases-3.14.2/src/Common/config_ipopt_default.h
--- old/Ipopt-releases-3.14.1/src/Common/config_ipopt_default.h 2021-06-25 11:22:34.000000000 +0200
+++ new/Ipopt-releases-3.14.2/src/Common/config_ipopt_default.h 2021-07-21 09:31:43.000000000 +0200
@@ -5,7 +5,7 @@
/***************************************************************************/
/* Version number of project */
-#define IPOPT_VERSION "3.14.1"
+#define IPOPT_VERSION "3.14.2"
/* Major Version number of project */
#define IPOPT_VERSION_MAJOR 3
@@ -14,7 +14,7 @@
#define IPOPT_VERSION_MINOR 14
/* Release Version number of project */
-#define IPOPT_VERSION_RELEASE 1
+#define IPOPT_VERSION_RELEASE 2
/* Define to the C type corresponding to Fortran INTEGER
* @deprecated Use ipindex instead.
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/Ipopt-releases-3.14.1/src/Interfaces/IpIpoptApplication.cpp new/Ipopt-releases-3.14.2/src/Interfaces/IpIpoptApplication.cpp
--- old/Ipopt-releases-3.14.1/src/Interfaces/IpIpoptApplication.cpp 2021-06-25 11:22:34.000000000 +0200
+++ new/Ipopt-releases-3.14.2/src/Interfaces/IpIpoptApplication.cpp 2021-07-21 09:31:43.000000000 +0200
@@ -679,8 +679,10 @@
}
catch( IpoptNLP::Eval_Error& exc )
{
+ // this can happen if the final point was accepted because functions can be evaluated,
+ // but functions are not differentiable, so dual infeasibility cannot be computed
status = INVALID_NUMBER_DETECTED;
- exc.ReportException(*jnlst_, J_ERROR);
+ exc.ReportException(*jnlst_, J_STRONGWARNING);
}
}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/Ipopt-releases-3.14.1/src/Interfaces/IpIpoptApplication.hpp new/Ipopt-releases-3.14.2/src/Interfaces/IpIpoptApplication.hpp
--- old/Ipopt-releases-3.14.1/src/Interfaces/IpIpoptApplication.hpp 2021-06-25 11:22:34.000000000 +0200
+++ new/Ipopt-releases-3.14.2/src/Interfaces/IpIpoptApplication.hpp 2021-07-21 09:31:43.000000000 +0200
@@ -157,9 +157,8 @@
/** Solve a problem (that inherits from TNLP) for a repeated time.
*
* The OptimizeTNLP method must have been called before. The
- * TNLP must be the same object, and the structure (number of
- * variables and constraints and position of nonzeros in Jacobian
- * and Hessian must be the same).
+ * TNLP must be the same object. The IpoptAlgorithm object from the
+ * previous solve will be reused.
*/
virtual ApplicationReturnStatus ReOptimizeTNLP(
const SmartPtr<TNLP>& tnlp
@@ -168,9 +167,8 @@
/** Solve a problem (that inherits from NLP) for a repeated time.
*
* The OptimizeNLP method must have been called before. The
- * NLP must be the same object, and the structure (number of
- * variables and constraints and position of nonzeros in Jacobian
- * and Hessian must be the same).
+ * NLP must be the same object. The IpoptAlgorithm object from the
+ * previous solve will be reused.
*/
virtual ApplicationReturnStatus ReOptimizeNLP(
const SmartPtr<NLP>& nlp
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/Ipopt-releases-3.14.1/src/Interfaces/IpStdCInterface.h new/Ipopt-releases-3.14.2/src/Interfaces/IpStdCInterface.h
--- old/Ipopt-releases-3.14.1/src/Interfaces/IpStdCInterface.h 2021-06-25 11:22:34.000000000 +0200
+++ new/Ipopt-releases-3.14.2/src/Interfaces/IpStdCInterface.h 2021-07-21 09:31:43.000000000 +0200
@@ -158,17 +158,17 @@
*/
typedef bool (*Intermediate_CB)(
ipindex alg_mod, /**< algorithm mode: 0 is regular, 1 is restoration */
- ipindex iter_count,
- ipnumber obj_value,
- ipnumber inf_pr,
- ipnumber inf_du,
- ipnumber mu,
- ipnumber d_norm,
- ipnumber regularization_size,
- ipnumber alpha_du,
- ipnumber alpha_pr,
- ipindex ls_trials,
- UserDataPtr user_data
+ ipindex iter_count,/**< iteration number */
+ ipnumber obj_value, /**< objective function value */
+ ipnumber inf_pr, /**< primal infeasibility */
+ ipnumber inf_du, /**< dual infeasibility */
+ ipnumber mu, /**< barrier parameter */
+ ipnumber d_norm, /**< infinity-norm of primal step */
+ ipnumber regularization_size, /**< size of regularization of Hessian of Lagrangian */
+ ipnumber alpha_du, /**< step length for dual variables */
+ ipnumber alpha_pr, /**< step length for primal variables */
+ ipindex ls_trials, /**< number of backtracking line search steps */
+ UserDataPtr user_data /**< user data */
);
/** Function for creating a new Ipopt Problem object.