# 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_14 app}
{xrst_spell
   autoconf
   automake
   autotools
   auxillary
   bthread
   cmath
   complier
   cstdint
   datadir
   docdir
   doxygen
   extern
   forwardany
   forwardone
   forwardzero
   notational
   omhelp
   postfix
   uj
}

CppAD Changes and Additions During 2014
#######################################

mm-dd
*****

12-30
=====
There was a bug in the :ref:`cmake-name` whereby it would sometimes mistakenly
exit with the error message
::

   cppad_max_num_threads is not an integer greater than or equal 4

This has been fixed.

12-29
=====
The example ``not_complex_ad.cpp`` was using the type

   ``std::complex< CppAD::AD<double> >``

and was failing to compile with the ``clang`` complier.
This example has been removed because it is not consistent with the
C++ standard; see
:ref:`complex FAQ<faq@Complex Types>` .

12-28
=====

#. Fix some warnings generated by clang 3.5 about local functions
   that were not being used; e.g., sub-tests that were not being executed.
#. Fix ``cmake`` setting
   ``cppad_implicit_ctor_from_any_type``
   Note that this cmake option has since been replaced by
   ``cppad_deprecated`` option.
#. The ``clang++`` compiler was optimizing out the calculations
   in the :ref:`time_test.cpp-name` and :ref:`speed_test.cpp-name` examples.
   This caused these tests to hang while trying to determine how
   many times to repeat the test.
   This has been fixed.

12-27
=====
More work on the bug in
:ref:`optimizing<CondExp@Optimize>`
conditional expressions.

12-26
=====
A minimal example for computing cross terms in atomic operation
Hessian sparsity patterns ``atomic_two_rev_sparse_hes.cpp`` was added.

12-25
=====
More work on the bug in
:ref:`optimizing<CondExp@Optimize>`
conditional expressions.

12-23
=====
The c++11 standard includes the error function :ref:`erf-name` in
``cmath`` .
If the c++ compiler has the error function defined in ``cmath`` ,
the complier version of the error function is used and it corresponds to an
atomic operation.

Fix typo in tangent reverse mode theory for
:ref:`Positive Orders<tan_reverse@Positive Orders Z(t)>` .

12-22
=====
There was a bug related to
:ref:`optimizing<CondExp@Optimize>`
conditional expressions.
This has been fixed.

12-17
=====
Fix some compiler warnings and :ref:`speed-name` program names
when using the deprecated :ref:`configure-name` install procedure.

12-16
=====
If the ``c++11`` include file ``<cstdint>``
defines all the standard types, they can be used by to specify
:ref:`cppad_tape_addr_type<cmake@cppad_tape_addr_type@cstdint>` and
:ref:`cppad_tape_id_type<cmake@cppad_tape_id_type@cstdint>` .

12-15
=====
Correct the title and index entries for :ref:`forward_two-name`
from first to second order.

11-28
=====
Improve the index and ``search`` using
a new version of the ``omhelp`` documentation tool.

11-27
=====

#. Add alignment to the
   :ref:`get_memory<ta_get_memory@Alignment>` and
   :ref:`create_array<ta_create_array@Alignment>` specifications
   and
   :ref:`thread_alloc example<thread_alloc.cpp-name>` .
#. Advance the deprecated :ref:`unix install<configure-name>` utilities to
   autoconf-2.69 and automake-1.13.4.

09-28
=====
Fix more bugs related to optimizing condition conditional expressions.

#. Using old instead of new operator indices.
#. Not properly following dependence back through atomic operations.
#. Aborting during forward order zero, when skipping computation for a variable
   that was already completed (the skip is still useful for higher orders
   and for reverse mode).
#. Reverse mode not properly handling the variable number of arguments in the
   conditional skip operation.
#. Reverse mode tracing not properly handling the variable number
   of argument operations; i.e., conditional skip and cumulative summation.

09-27
=====
Fix a bug that occurred when
:ref:`f.optimize<optimize-name>` was used with a function *f*
that contained calls to user defined :ref:`atomic-name` operations
and :ref:`conditional expressions<CondExp-name>` .

09-25
=====
Fix a bug that occurred when
:ref:`f.optimize<optimize-name>` was used with a function *f*
that contained :ref:`discrete-name` functions.

09-21
=====
Fix a typo in documentation for
:ref:`any order reverse<reverse_any-name>` .
To be specific, :math:`x^{(k)}` was changed to be :math:`u^{(k)}`.

05-28
=====

#. Change the :ref:`speed_main@Sparsity Options@boolsparsity`
   so that it only affects the sparsity speed tests
   :ref:`sparse_jacobian<link_sparse_jacobian-name>` and
   :ref:`sparse_hessian<link_sparse_hessian-name>` ;
   i.e., it is now ignored by the other tests.
#. Improve the :ref:`speed-name` documentation page.

05-27
=====

#. The ``cppad_colpack.cpp``
   file was not being copied to the specified directory.
   In addition, the specified directory was changed from an include
   directory to data directory because
   ``cppad_colpack.cpp`` is not an include file.
#. If :ref:`colpack_prefix-name`  was specified, the CppAD
   :ref:`pkgconfig-name` file was missing some information.
   This has been fixed.

05-23
=====
The :ref:`speed-name` test instructions were converted from using
the old autotools :ref:`unix install<configure-name>` instructions
to use the :ref:`cmake-name` install instructions.
These instructions should work on any system, not just unix.

05-22
=====

#. Add multiple direction for mode
   :ref:`forward_dir-name` and use it to speed up the forward
   version of :ref:`sparse_jacobian-name` .
   Below is an example run of :ref:`cppad_sparse_jacobian.cpp-name` results
   before this change:
   ::

      cppad_sparse_jacobian_size = [ 100, 400, 900, 1600, 2500 ]
      cppad_sparse_jacobian_rate = [ 2973, 431.94, 142.25, 78.64, 26.87 ]

   and after this change:
   ::

      cppad_sparse_jacobian_size = [ 100, 400, 900, 1600, 2500 ]
      cppad_sparse_jacobian_rate = [ 6389, 954.26, 314.04, 180.06, 56.95 ]

   Due to the success of this change,
   ``multiple direction`` items were added to the wish list
   (they were later removed).
#. Improve the  forward mode tracing of arguments to,
   and results from, user defined :ref:`atomic-name` operations.

05-20
=====

#. Move ``speed/adolc/alloc_mat.hpp`` to
   ``speed/adolc/adolc_alloc_mat.hpp`` so it has the
   same name is its ``# ifndef`` command.
#. Fix ``# ifndef`` command in
   ``cppad/ipopt/solve_callback.hpp`` .
#. Add ``# ifndef`` command to ``test_more/extern_value.hpp`` .

05-19
=====
In the files
``cppad/local/asin_op.hpp`` and ``cppad/local/acos_op.hpp``
there were assignments of the form ``uj = 0.`` where ``u_j``
has type :ref:`Base<glossary@Base Type>` .
These may have not be defined operations in certain cases and
have been converted to ``uj = Base(0)`` .

05-16
=====
There was a mistake in printing the arguments for
``CSumOp`` and ``CSkipOp`` when using the undocumented
``TRACE`` option during forward mode (available in files of the form
``include/cppad/local/`` * ``sweep.hpp/`` ).
This has been fixed.

05-14
=====

#. There were some global variables in the file
   ``cppad/local/op_code.hpp`` that might have caused multiple definitions
   during link time for CppAD applications.
   These variables have been changed to be local so that this cannot happen.
#. There was a mistaken assert that the number of arguments for the
   ``BeginOp`` was zero that caused an abort when using the undocumented
   ``TRACE`` option available in files of the form
   ``include/cppad/local/`` * ``sweep.hpp/`` .
   This has been fixed.

03-18
=====

#. The
   :ref:`fun_deprecated@size_taylor`
   and
   :ref:`fun_deprecated@capacity_taylor`
   functions were deprecated;
   use :ref:`size_order-name` and :ref:`capacity_order-name` instead.
#. The documentation for :ref:`forward-name` and the examples
   :ref:`forward.cpp-name` , :ref:`forward_order.cpp-name` , have been improved.
   To be more specific, :ref:`forward_order-name` now references the special
   cases :ref:`forward_zero-name` , :ref:`forward_one-name` and the new case
   :ref:`forward_two-name` .

03-17
=====
The
:ref:`CppAD_vector@Assignment@Move Semantics`
version of the ``CppAD::vector`` assignment statement
was not checking vector sizes.
This has been fixed so that things work the same with compilers
that do not have move semantics.
(Note that with move semantics, no extra memory allocation is done
even if the target vector has a different size.)

03-09
=====
The documentation links
``forwardzero`` , ``forwardone`` , and ``forwardany``
have been changed to
:ref:`forward_zero-name` , :ref:`forward_one-name` ,
and :ref:`forward_order-name` respectively.
This may affect links from other web pages to the CppAD documentation.

03-05
=====
The names *p* and *q* in the
:ref:`forward<forward_order-name>` ,
:ref:`reverse<reverse_any-name>` ,
:ref:`atomic_two_forward-name` , and
:ref:`atomic_two_reverse-name` functions
were reverse so that *p* <= *q* .
This is only a notational change to make the arguments easier to remember.

03-02
=====

#. In the output for the speed
   :ref:`speed_main@test@correct` test,
   mention which tests are not available.
   Note that the set of available tests can depend on the
   :ref:`list of options<speed_main@Global Options>` .
#. In the documentation for
   :ref:`sparse_jacobian@n_sweep` ,
   mention that it is equal to the number of colors determined by the
   :ref:`sparse_jacobian@work@color_method` .
#. The :ref:`speed_cppad-name` tests were simplified by removing the printing
   of auxillary information related to the
   :ref:`speed_main@Global Options@optimize` option.
   Future auxillary information will be passed back in a manner similar to
   :ref:`link_sparse_jacobian@n_color` for the sparse jacobian test.
#. :ref:`CppAD_vector@Assignment@Move Semantics`
   were added to the ``CppAD::vector`` assignment operator.

03-01
=====

#. Change the prototype for *row* and *col* in the
   :ref:`link_sparse_jacobian-name` speed test to be ``const`` ; i.e.,
   they are not changed.
#. Move *x* near end of :ref:`link_sparse_hessian-name` speed test
   parameter list,
   (as is the case for :ref:`link_sparse_jacobian-name` ).

02-28
=====
The :ref:`CppAD_vector@data` function was added to the
``CppAD::vector`` template class.

02-27
=====
The CppAD developer documentation for the subdirectory
``cppad/ipopt`` was not being built by the command
``bin/run_doxygen.sh`` .
This has been fixed.

02-26
=====

#. The
   :ref:`adolc<speed_adolc-name>` and
   :ref:`cppad<speed_cppad-name>` sparse jacobian speed tests now print out
   :ref:`sparse_jacobian@n_sweep` .
#. The size of some of the :ref:`speed-name` test cases has been increased
   to test behavior for larger problems.
#. A link to :ref:`ode_evaluate-name` was missing in the
   :ref:`speed_utility@Speed Utility Routines` table.
   This has been fixed.

02-23
=====
The :ref:`sparse_jacobian@work@color_method`
option was added to the sparse Jacobian calculations.
This enables one to use :ref:`ColPack<colpack_prefix-name>`
do color the rows or columns.
The speed test :ref:`speed_main@Sparsity Options@colpack` option
was also added (but not yet implemented for
:ref:`sparse_hessian<link_sparse_hessian-name>` speed tests).

02-22
=====
The program names in
:ref:`thread_test.cpp-name` where changes from
*threading* _ ``test`` to ``multi_thread_`` *threading*
where *threading* is ``openmp`` , ``pthread`` or ``bthread`` .

02-17
=====
Fix ambiguous call to :ref:`nan@isnan`
during MS Visual Studio 2012 compilation.

02-15
=====

#. The :ref:`speed_main@Sparsity Options@boolsparsity` option
   was added to the :ref:`speed_main-name` program.
#. The ``retape`` option what changed to
   :ref:`speed_main@Global Options@onetape` so that the default
   is to retape (option not present).
   This was done because
   :ref:`fadbad<fadbad_prefix-name>` and
   :ref:`sacado<sacado_prefix-name>` always retape.
#. The documentation, and example source code, for all the speed
   :ref:`options<speed_main@Global Options>` was improved
   (made clearer).
#. Improve the success rate for
   :ref:`speed_test.cpp-name` and :ref:`time_test.cpp-name` .

01-26
=====
The destination directory for the
:ref:`cppad documentation<cmake@cmake_install_docdir>`
is now set separately from the data directory
using the ``cmake`` option

   ``-D cmake_install_docdir`` = *cmake_install_docdir*

This has increased the flexibility of the documentation installation
and removed the need for the option

   ``-D cppad_documentation`` = *yes_or_no*

which has been removed.

01-21
=====
The destination directory for the
cppad documentation
used to be one of the following:

| |tab| *prefix* / *datadir* / ``doc/cppad-`` *version*
| |tab| *prefix* / *datadir* / ``doc/`` *postfix* ``cppad-`` *version*

This has been changed by dropping the *version* number
at the end of the directory name.

01-10
=====
The change on :ref:`2013-12-27<whats_new_13@mm-dd@12-27>`
caused a conversion error in :ref:`atan2-name` when it was used with
``AD< AD<double> >`` arguments (and other similar cases).
This has been fixed.

{xrst_end whats_new_14}
