# SPDX-License-Identifier: EPL-2.0 OR GPL-2.0-or-later
# SPDX-FileCopyrightText: Bradley M. Bell <bradbell@seanet.com>
# SPDX-FileContributor: 2003-23 Bradley M. Bell
# ----------------------------------------------------------------------------

{xrst_begin whats_new_10 app}
{xrst_spell
   blas
   ifdef
   lagragian
   libcppad
   libipopt
   linpack
   makefile
   src
   subdirectories
   wshadow
}

Changes and Additions to CppAD During 2010
##########################################

mm-dd
*****

12-31
=====

#. Add specifications for the CppAD :ref:`pkgconfig-name` files.
#. Update the CppAD README file.
#. Move most all CppAD development shell scripts to the ``bin``
   subdirectory of the distribution directory.
#. Fix warnings generated by the ``g++`` compiler option ``-Wshadow`` ;
   for example,

      ``sparse_pack.hpp:101:2: warning: declaration of`` ``'end'`` ``shadows a member of`` ``'this'``

11-27
=====
If ``NDEBUB`` was defined,
the default CppAD :ref:`error handler<ErrorHandler-name>` would return
because its ``assert`` had no effect in this case.
This has been fixed by placing a call to ``std::exit(1)``
after its assert.

09-26
=====
There was a bug
(introduced on 09-22)
in ``make test``
when the ``configure`` command was executed from a directory
other than the distribution directory
(the :ref:`cppad_ipopt_nlp-name` did not build).
This has been fixed.

09-22
=====
Promote :ref:`cppad_ipopt_nlp-name` from an example to a library
that gets installed
(provided that the :ref:`configure@ipopt_dir`
is specified on the ``configure`` command line).

08-21
=====
Fix problems with linking of :ref:`cppad_ipopt_nlp-name` test with
both older and newer versions of ``ipopt`` .

07-14
=====
The new versions of ipopt use ``pkg-config`` to record the location
where its necessary libraries are stored on the system.
The cppad :ref:`configure@Configure` command has
been improved so that it can work both with versions of ipopt that use
``pkg-config`` and ones that don't.

07-11
=====
Old versions of the ipopt library were located in
*ipopt_dir* / ``lib/libipopt.`` *
(see :ref:`configure@ipopt_dir` ),
but newer versions will be located in
*ipopt_dir* / ``lib/coin-or/libipopt.`` * .
The directory *ipopt_dir* / ``lib/coin`` has been added to the library
search path so that the
cppad_ipopt_nlp examples
work with both old and new versions of ipopt.

06-01
=====
In the case where the preprocessor symbol ``NDEBUG`` was defined
(see :ref:`Faq@Speed` ),
the function

   ``CheckSimpleVector`` ( ``const`` *Scalar* & *x* , ``const`` *Scalar* & *y* )

was not defined; see
`bug report <http://list.coin-or.org/pipermail/cppad/2010q2/000166.html>`_.
This has been fixed.

04-28
=====
Change the multi-level taping examples
:ref:`mul_level.cpp-name` and :ref:`mul_level_adolc.cpp-name`
to be more efficient.

04-26
=====
Include Blas and Linpack libraries in makefile links for
:ref:`cppad_ipopt_nlp-name` examples.
This removes the need to use get.Blas when building Ipopt.

The speed test in ``cppad_ipopt/speed`` was missing
a link to the library ``../src/libcppad_ipopt.a`` .
This has been fixed.

04-24
=====
There was a bug in the error checking done by ``cppad/local/sub_op.hpp``
that caused the following improper abort:

| ``Error detected by false result for``
| |tab| ``arg`` [1] < ``i_z``
| ``at line 337 in the file``
| |tab| .../ ``include/cppad/local/sub_op.hpp``

This was fixed in the trunk.
It was also fixed in the release with version number ``20100101.3``
which can be downloaded from the CppAD
`download directory <http://www.coin-or.org/download/source/CppAD/>`_.

04-01
=====
Some of the :ref:`speed_utility-name` library
(in ``speed/src`` ) was being compiled for debugging.
This has been changed and they are now compiled with debugging off
and optimization on.

03-11
=====
The old :ref:`reverse_any-name` example was moved to :ref:`reverse_three.cpp-name` ,
the old checkpoint example is now the general case reverse example,
and a better ``checkpoint.cpp/`` example was created.

03-10
=====
The :ref:`optimize-name` routine would mistakenly remove some
expressions that depended on the independent variables and that
affected the result of certain :ref:`CondExp-name` operations.
This has been fixed.

03-09
=====
Extend :ref:`reverse_any-name` so that it can be used for
:ref:`checkpointing<chkpoint_one-name>` ; i.e.,
splitting reverse mode calculations at function composition points.

03-03
=====
Fixed a bug in handling
:ref:`vector of boolean<glossary@Sparsity Pattern@Boolean Vector>`
sparsity patterns.
(when the number of elements per set was a multiple of
``sizeof(size_t))`` .

02-11
=====
The ``speed`` directory has been reorganized and the
common part of the :ref:`speed_main@Link Routines` ,
as well as the ``microsoft_timer`` ,
have been moved to the subdirectory ``speed/src``
where a library is built.

02-08
=====
A bug was introduced in the :ref:`whats_new_10@mm-dd@02-05`
change whereby the ``make`` command tried to build the
``libcppad_ipopt.a`` library even if ``IPOPT_DIR`` was
not specified on the :ref:`configure@Configure` command line.
This has been fixed.

02-06
=====
The Microsoft project files for the speed tests were extended
so that the worked properly for the Release (as well as the Debug)
configuration.
(This required conversion from Visual Studio Version 7 to Visual Studio 2008
format.)

Add an automated check for :ref:`optimize-name` bug
fixed on ``02-05`` .
(Automatic checking for :ref:`PrintFor-name` bug was added on ``02-05`` .)

02-05
=====

#. Simplify running all the tests by adding the
   ``make test`` command.
#. Simplify the :ref:`configure@Configure` command by removing
   need for:
   ``--with-Speed`` ,
   ``--with-Introduction`` ,
   ``--with-Example`` ,
   ``--with-TestMore`` ,
   and ``--with-PrintFor`` .
#. Add files that were missing in the Microsoft Visual Studio
   projects.
#. Fix two significant bugs. One in the :ref:`optimize-name` command
   and the other in the :ref:`PrintFor-name` command.

02-03
=====
Fix a mistakes in the test :ref:`bender_quad.cpp-name` .
In addition, the :ref:`optimize-name` routine was used to reduce the
tape before doing the calculations.

The routine :ref:`opt_val_hes-name` was added as an alternative to
:ref:`BenderQuad-name` .

01-26
=====
Another speed improvement was made to :ref:`cppad_ipopt_nlp-name` .
To be specific, the Lagragian multipliers where checked and components
that were zero were excluded form the Hessian evaluation.

01-24
=====
It appears that in :ref:`cppad_ipopt_nlp-name` , when ``retape[k]`` was true,
and ``L[k] > 1`` , it was possible to use the wrong operation sequence
in the calculations (though a test case that demonstrated this could not be
produced). This is because the argument value to :math:`r_k (u)` depends
on the value of :math:`\ell` in the expression

.. math::

   r_k \circ [ J_{k, \ell} \otimes n ] (x)

(even when the value of :math:`x` does not change).

There was a bug in the ``ipopt_nlp_ode_check.cpp`` program,
for a long time,  that did not show up until now. Basically,
the check had code of the was using an undefined value.
This has been fixed.

01-23
=====
Improve the sparsity patterns and reduce the amount of memory
required for large sparse problems using :ref:`cppad_ipopt_nlp-name` .
The speed test ``cppad_ipopt/speed`` showed significant improvement.

01-20
=====
We plan to split up the
``ipopt_cppad/src/ipopt_cppad_nlp.hpp`` include file.
In preparation,
the example ``ipopt_cppad`` has been changed to ``cppad_ipopt`` .
This will facilitate using ``CPPAD_IPOPT_*`` for the
``# ifdef`` commands in the new include files
(note that they must begin with ``CPPAD`` ).

01-18
=====
The ``ipopt_cppad`` subdirectory of the distribution
has been split into an ``src`` , ``example`` , and ``speed``
subdirectories.
The ``example`` (``speed`` )
subdirectory is where one builds the :ref:`cppad_ipopt_nlp-name` examples
(speed tests).

01-04
=====
The following items have been fulfilled and
hence were removed for the :ref:`wish_list-name` :

#. If an exception occurs before the call to the corresponding
   :ref:`ADFun-name` constructor or :ref:`Dependent-name` ,
   the tape recording can be stopped using :ref:`abort_recording-name` .

#. A speed test for :ref:`cppad_ipopt_nlp-name` was added; see
   ``ipopt_ode_speed.cpp`` .

#. The :ref:`optimize-name` command uses hash coding to check
   when an expression is already in the tape and can be reused.

#. The :ref:`optimize-name` command removes operations that
   are not used by any of the dependent variables.

#. The :ref:`ad_in_c.cpp-name` example demonstrates how to connect
   CppAD to an arbitrary scripting language.

#. The vector of sets option has been added to sparsity calculations;
   see :ref:`glossary@Sparsity Pattern` .

{xrst_end whats_new_10}
