# 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_11 app}
{xrst_spell
   automake
   boostvector
   bthread
   builddir
   caching
   cpl
   devel
   executables
   fedoraproject
   geq
   gpl
   hasnan
   initializer
   instantiation
   isnan
   libspeed
   makefile
   matlab
   omh
   pkgconfig
   prefixdir
   pthreads
   requirements requirements
   simplification
   svn
   tanh
   tgz
   truncating
   undefine
   vcproj
   wshadow
}

Changes and Additions to CppAD During 2011
##########################################

mm-dd
*****

12-30
=====

#. There was a bug when using :ref:`abs-name` with an ``AD< AD<double> >``
   argument, whereby the corresponding ``AD<double>`` operation sequence
   depended on the value of the argument to the ``abs`` function.
#. Change the specifications for the derivative of the :ref:`abs-name`
   function to be the :ref:`sign-name` function instead of a directional derivative.
#. Add the :ref:`sign-name` function to the ``AD`` < *Base* > list of
   available functions.
   In addition, add the
   :ref:`base_std_math@sign` function to the list of
   :ref:`base type requirements<base_require-name>` .

12-28
=====
The file :ref:`time_test.hpp<time_test@Include>`
was not being included by ``cppad/cppad.hpp`` .
This has been fixed.

12-21
=====
The types
``SizeVector`` ,
``NumberVector`` ,
``ADNumber`` , and
``ADVector`` ,
were in the global namespace and this was causing warnings
about the shadowing of these declarations.
The
:ref:`cppad_ipopt_nlp@cppad_ipopt namespace`
was created to avoid these problems.
The simplest way to make old :ref:`cppad_ipopt_nlp-name` code work with this
change is to use the command
::

   using namespace cppad_ipopt;

12-20
=====

#. Change ``team_start`` to :ref:`team_thread.hpp@team_create`
   and ``team_stop`` to :ref:`team_thread.hpp@team_destroy` .
#. Change ``NDEBUG`` mentions to include link to
   :ref:`Faq@Speed@NDEBUG` .
#. Improve :ref:`memory_leak-name` documentation.

11-29
=====
THe :ref:`time_test-name` routine was still executing the
test at least twice, even if that was not necessary for the specified
minimum time. This has been fixed.

11-27
=====
Move ``multi_thread.cpp`` to :ref:`thread_test.cpp-name`
and fix its :ref:`running<thread_test.cpp@Running Tests>` instructions.

11-24
=====
Create :ref:`preprocessor-name` section with pointers to all the
preprocessor symbols that are in the CppAD API.

11-21
=====
Separate :ref:`--with-boostvector<configure@--with-testvector>`
for :ref:`configure@boost_dir` .
This enables one to specify *boost_dir* for
:ref:`team_bthread.cpp-name` with out using boost vectors.

11-20
=====

#. Move ``sum_i_inv.cpp`` to :ref:`harmonic.cpp-name` .
#. Include the date, time, CppAD version, and
   :ref:`team_thread.hpp@team_name` in the
   :ref:`thread_test.cpp-name` output.

11-18
=====

#. The :ref:`thread_test.cpp-name` program was truncating *test_time*
   to the nearest integer.
   This has been fixed.
#. The :ref:`time_test-name` routine has been made more efficient and now
   check for the case where only one execution of the test is necessary
   to achieve the desired *test_time*
   (it used to always run at least two).
#. The ``sum_i_inv_time.cpp`` and :ref:`multi_newton.cpp-name`
   routines were calling the test an extra time at the end to check for
   correctness.
   The results of the last test are now cached and used for the correctness
   test so that an extra call is not necessary (to make the tests run faster
   when only a few repetitions are necessary).

11-17
=====

#. Create another speed testing routine :ref:`time_test-name` which is
   like :ref:`speed_test-name` but it returns the time instead of rate
   and as a ``double`` instead of a ``size_t`` .
   The use it for the timing tests in
   ``sum_i_inv_time.cpp`` and :ref:`multi_newton_time-name` .
#. Add *test_time* as a command line argument
   to the multi-threading ``sum_i_inv``
   and :ref:`thread_test.cpp@multi_newton`
   timing tests.

11-09
=====
Change ``thread_team.hpp`` to :ref:`team_thread.hpp-name` and do
the same for all other names that ended in ``_team`` ; e.g.,
:ref:`team_openmp.cpp-name` .

11-07
=====
The users choice for ``test_vector`` was not actually changing
the tests that the user ran. This have been fixed.

11-06
=====
Make all the output generated by :ref:`multi_newton.cpp-name` valid
matlab and octave input so it is easy to plot the results.

11-04
=====
Use thread specific data to simplify :ref:`team_openmp.cpp-name` .

11-01
=====
Make :ref:`team_bthread.cpp-name` more similar to :ref:`team_pthread.cpp-name` .

10-30
=====

#. Reorganize and improve the :ref:`multi_thread-name` section and its subsections.
#. There was a bug in :ref:`multi_newton.cpp-name` that only showed up when
   the number of threads was greater than or equal 4.
   This has been fixed.
   In addition,
   :ref:`multi_thread@CPPAD_MAX_NUM_THREADS`
   was increased from 2 to 4 (to enable testing for this bug).
#. The accuracy expected in the ``sum_i_inv.cpp`` results were failing
   when ``mega_sum`` was large.
   This check has been modified to include a correction for *mega_sum* .

10-29
=====
The following changes were merged in from ``branches/thread`` :

#. Move ``openmp`` to ``example/multi_thread/openmp`` .
   and create ``example/multi_thread/bthread`` , ``multi_thread/pthread``
   with similar tests.
#. Put multi-threading common code in ``multi_thread`` directory
   and threading system specific code in ``example/multi_thread/`` *threading*
   for *threading* equal to ``openmp`` , ``bthread`` ,
   and ``pthread`` .
#. Update the README file.
#. Remove the ``bug/optimize.sh`` file (no longer a bug).
#. Make ``arc_tan.cpp``
   utility that can be used by multiple multi-threading tests.
#. Create :ref:`team_thread.hpp-name` specifications,
   move OpenMP management to :ref:`team_openmp.cpp-name` ,
   Boost thread management to :ref:`team_bthread.cpp-name` ,
   and pthread management to :ref:`team_pthread.cpp-name` .
#. All of the make files were modified so that the command
   ::

      make test

   would run the tests for the current directory.
#. Extend the multi-threading speed tests
   ``sum_i_inv.cpp`` and :ref:`multi_newton.cpp-name` so they run
   using Boost threads and pthreads (as well as OpenMP threads).

10-14
=====
Fix some compiler warnings about shadowed variables that were
detected by ``g++`` version ``4.6.1 20110908`` .

10-12
=====

#. The MAC version of the ``pthread`` library does not include the
   ``pthread_barrier_wait`` function; i.e., is not compliant with
   the IEEE Std 1003.1, 2004 Edition for ``pthread`` .
   This caused the ``pthread_simple_ad.cpp`` to fail to compile on the MAC.
   This has been fixed by not compiling the ``pthread`` examples
   unless ``pthread_barrier_wait`` is present.
#. The :ref:`cppad_ipopt_nlp-name` routine has been changed to
   :ref:`optimize-name` the functions :math:`r_k (u)` such that
   ``retape`` ( *k* ) is false.

09-06
=====

#. Add the
   `boost multi-threading <http://www.boost.org/doc/libs/1_47_0/doc/html/thread.html>`_
   examples :ref:`a11c_bthread.cpp-name` and ``bthread_simple_ad.cpp`` .
#. Improve documentation for
   :ref:`ta_parallel_setup@thread_num` argument
   to ``parallel_setup`` .
#. More simplification of ``bthread_simple_ad.cpp`` example.

09-05
=====
Simply and fix some problems with ``pthread_simple_ad.cpp`` ,
including avoiding a :ref:`team_pthread.cpp@Bug in Cygwin` .

09-02
=====

#. The OpenMP speed test program ``openmp/run.cpp`` was not setting
   the number of threads for the one thread case (so dynamic thread adjustment was
   used). This has been fixed.
#. The :ref:`thread_alloc.cpp-name` example was missing from the
   Microsoft ``example/example.vcproj`` file and a attempt was made
   to link to missing OpenMP routines (this has been fixed).
   In addition,
   some Microsoft compiler warning have been fixed; see the examples and tests
   in the Windows install instructions.
#. There was an oversight,
   and ``CPPAD_MAX_NUM_THREAD``
   was being set to 2 when ``_OPENMP`` was not defined.
   This has been fixed and
   :ref:`multi_thread@CPPAD_MAX_NUM_THREADS`
   has been documented and is now part of the CppAD API.
#. The ``pthread_simple_ad.cpp`` test failed under cygwin.
   This was because the previous test ``openmp_ad.cpp`` was
   set up calls to OpenMP routines that were still in effect
   when ``pthread/simple_ad`` ran.
   This has been fixed by making
   *num_threads*  == 1 a special case in
   :ref:`parallel_setup<ta_parallel_setup-name>` .

09-01
=====
Modify the CppAD trunk using the
changes from svn revision 2060 to revision 2081 in the branch
::

   https://projects.coin-or.org/svn/CppAD/branches/pthread

These changes are described below.

#. 09-01:
   There was a bug in the :ref:`atomic_one-name` functions
   in the case where none of the elements of the argument to the function
   was a :ref:`glossary@Variable` .
   This has been fixed.
   In addition, old_tan.cpp generated an assert for this
   case and this has also been fixed (in addition to including an example
   for this case).

#. 08-31:
   Move the ``sum_i_inv_time.cpp`` test from
   ``openmp/run.sh`` to ``openmp/run.cpp`` .
#. 08-31:
   Change ``--with-openmp`` to
   OPENMP_FLAGS=openmp_flags configure
   command line argument.

#. 08-30:
   Create the ``openmp/run.cpp`` program
   and move the ``openmp_multi_newton.cpp`` test from
   ``openmp/run.sh`` to ``openmp/run.cpp`` .
   This uses :ref:`configure@Configure`
   information for building the tests.
#. 08-30:
   Document the ``--with-openmp`` configure
   command line argument.
#. 08-30:
   Move ``openmp/multi_newton.hpp`` to
   ``openmp/newton_method.hpp`` and
   ``openmp/multi_newton.cpp`` to
   ``openmp/newton_example.cpp`` .

#. 08-25:
   Replace :ref:`omp_alloc-name` by :ref:`thread_alloc-name` in
   :ref:`multi_thread-name` , the section on how to use CppAD in parallel.
#. 08-25:
   Implement :ref:`omp_alloc-name` as links to corresponding :ref:`thread_alloc-name`
   sections.
#. 08-25:
   Create the ``pthread_simple_ad.cpp`` example that does AD using the
   pthread library.
   In addition, fix some problems in ``openmp_simple_ad.cpp``
#. 08-25:
   Move ``openmp/example_a11c.cpp`` to
   :ref:`example/a11c_openmp.cpp<a11c_openmp.cpp-name>` .
#. 08-25:
   Move ``openmp/parallel_ad.cpp`` to
   ``openmp_simple_ad.cpp`` .

#. 08-23:
   Beginning steps in replacing :ref:`omp_alloc-name` by :ref:`thread_alloc-name` :
   Replace :ref:`omp_alloc-name` by :ref:`thread_alloc-name`
   in the :ref:`utilities<utility-name>` .
#. 08-23:
   move :ref:`omp_alloc-name` to the deprecated section of the
   documentation.
#. 08-23:
   Change all :ref:`omp_alloc-name` section names to begin with ``omp_`` ,
   and change all :ref:`thread_alloc-name` section names to begin with ``new_`` .
#. 08-23:
   Convert :ref:`CppAD_vector-name` from using :ref:`omp_alloc-name` to using
   :ref:`thread_alloc-name` for memory allocation.
#. 08-23:
   Extend the :ref:`memory_leak-name` routine to also check the
   :ref:`thread_alloc-name` allocator.

#. 08-21:
   Create the OpenMP and pthread examples
   :ref:`a11c_openmp.cpp-name` ,
   :ref:`a11c_pthread.cpp-name` , and
   ``openmp_simple_ad.cpp`` .
   These OpenMP examples were originally in the ``openmp`` directory,
   and have been moved, and modified to conform, to the normal example directory.

08-11
=====
Modify the CppAD trunk using the
changes from svn revision 2044 to revision 2056 in the branch
::

   https://projects.coin-or.org/svn/CppAD/branches/base_require

These changes are described below.

#. 08-10:
   Add the output stream optional argument *s* in

      *f* . ``Forward`` (0, *x* , *s* )

   See :ref:`zero order forward mode<forward_zero-name>` and :ref:`PrintFor-name` .
#. 08-10:
   Improve omp_alloc.cpp example.

#. 08-09:
   :ref:`base_require-name` :
   Add :ref:`numeric_limits@epsilon` to the
   *Base* type requirements.
#. 08-09:
   Extend ``epsilon`` to AD types.

#. 08-08:
   Improve the :ref:`base_require-name` documentation for
   :ref:`standard math functions<base_std_math-name>` .
#. 08-08:
   :ref:`base_require-name` :
   Add ``abs_geq`` to the :ref:`requirements<base_require-name>`
   for a user defined *Base* type.
#. 08-08:
   Check that zero order forward mode results are approximately equal,
   instead of exactly equal,
   after an :ref:`optimize-name` operation.
   This fixes a bug in the optimize correctness check
   (The  order of operations can be changed by ``optimize``
   and hence the zero order forward mode results may not be exactly the same.)

#. 08-07:
   Improve the :ref:`base_require-name` documentation for
   :ref:`base_identical@EqualOpSeq` ,
   :ref:`base_identical@Identical`
   :ref:`base_require@Integer` , and
   :ref:`Ordered<base_ordered-name>`
   operations.

#. 08-06:
   Add the :ref:`base_cond_exp@CondExpRel` paragraph to the
   base requirements documentation.
   This was missing and are required for
   :ref:`CondExp-name` to work with ``AD`` < *Base* > arguments
   and a non-standard *Base* type.

#. 08-04:
   :ref:`base_require-name` :
   Change the :ref:`include<base_require@Include Order>` file name to
   :ref:`base_require.hpp<base_require-name>` .
#. 08-04:
   Use :ref:`base_float.hpp-name` and :ref:`base_double.hpp-name` as additional examples
   for the :ref:`CondExp Base requirements<base_cond_exp-name>`
   requirements.

08-03
=====
Change :ref:`PrintFor-name` condition from less than or equal zero
to not greater than zero;i.e., not positive.
This makes ``nan`` print because it results in false for all comparisons.

08-02
=====

#. Change :ref:`PrintFor-name` so it no longer aborts execution when
   there is no operation sequence being recording; see
   :ref:`Independent@Start Recording` .
#. Improve the :ref:`print_for_cout.cpp-name` example.

07-31
=====
Add a conditional version of the :ref:`PrintFor-name` command

   ``PrintFor`` ( *text* , *y* , *z* )

which only prints when *z*  <= 0 .
This is useful for error reporting during forward mode; i.e.,
reporting when the argument to the ``log`` function is not valid.

07-29
=====

#. The routines :ref:`set_max_num_threads<omp_max_num_threads-name>` and
   ``get_max_num_threads`` were created.
   User's will need to replace calls to
   :ref:`max_num_threads<old_max_num_threads-name>`
   by calls to ``set_max_num_threads`` .
#. The functions :ref:`omp_efficient-name` was deprecated because it
   has not been shown to be useful.

07-28
=====

#. Change :ref:`omp_return_memory-name` so that if :ref:`omp_max_num_threads-name` is one
   (the default), :ref:`omp_alloc-name` does not hold onto memory
   (keep it available for the corresponding thread).
#. Add files that were missing from the Microsoft Visual Studio
   ``example`` and ``test_more`` subdirectory
   project files.
#. Fix some warnings generated by Microsoft Visual Studio 2010 build.

07-27
=====
Make ``tan`` and ``tanh`` :ref:`atomic_base<glossary@Operation@Atomic>`
operations; see :ref:`tan_forward-name` and :ref:`tan_reverse-name` .

07-25
=====
Finish the :ref:`atomic_one-name` example old_tan.cpp.
This is also a design and implementation of the routines necessary
to make ``tan`` and ``tanh`` CppAD atomic operations.

07-18
=====
The reverse mode formulas for :math:`Z(t)` need to involve
the lower order Taylor coefficients for :math:`Y(t)`.
This has been fixed in :ref:`tan_reverse-name` .

07-17
=====

#. Fix bug in :ref:`atomic_one-name` functions.
   To be specific, the Taylor coefficients for :math:`y`,
   of order less than *k* ,
   were not passed into the ``atomic_one``
   :ref:`atomic_one@forward` callback function.
#. Derive the theory for including the tangent and hyperbolic tangent
   as CppAD atomic operations :ref:`tan_forward-name` and :ref:`tan_reverse-name` ;
   see the wish list item ``Tan and Tanh`` .
#. Implement and test forward mode calculation of derivative for
   the tangent and hyperbolic tangent functions;
   see the new :ref:`atomic_one-name` example old_tan.cpp.

07-14
=====

#. The :ref:`configure-name` instructions for running the individual
   correctness and speed tests were out of date.
   This has been fixed; see
   :ref:`example and tests<configure@make@Examples and Tests>` .
#. Move ``parallel_ad.cpp`` from ``example`` directory
   to ``openmp`` directory (and convert it from a function to a program).
#. Simplify ``example_a11c.cpp`` by making it just a correctness test.
#. Change ``openmp/run.sh`` so that it runs correctness tests with
   the compiler debugging flags.

07-13
=====

#. static hash code data that was begin used by multiple threads
   when recording ``AD`` < *Base* > operations
   :ref:`omp_in_parallel-name` execution mode. This has been fixed.
#. Make the sparse calculations safe
   for use during :ref:`omp_in_parallel-name` execution mode.
#. Add the ``parallel_ad.cpp`` example.
#. Change ``example_a11c.cpp`` example so that is just a correctness
   (not speed) test.

07-11
=====

#. Change the upper limit for
   :ref:`omp_max_num_threads-name` from 32 to 48.
#. Add :ref:`parallel<ta_in_parallel-name>` documentation for,
   ``nan`` ,
   :ref:`Rosen34<Rosen34@Parallel Mode>` , and
   :ref:`Runge45<Runge45@Parallel Mode>` .
#. Fix :ref:`CheckNumericType-name` and :ref:`CheckSimpleVector-name`
   so they work properly when used in parallel mode.

#. The changes below were made on the ``openmp/run.sh`` branch:
#. Change to ``openmp/run.sh``
   maximum number of threads
   instead of specifying the entire set of values to be tested.
#. Change settings for
   ``newton_example``
   so that ``n_gird`` is a multiple of the maximum number of threads.
#. Report dynamic number of thread
   results as a separate result in the summary output line.
#. Fix automatic removal of executables from ``openmp`` directory
   (was commented out).
#. The documentation for ``openmp/run.sh`` was moved to the
   ``multi_thread`` section.

07-10
=====

#. Add link to :ref:`Discrete-title` in :ref:`multi_thread-name` .
#. Make use of the :ref:`track_new_del-name` routines
   :ref:`omp_in_parallel-name` execution mode an error (it never worked properly);
   see :ref:`TrackNewDel multi-threading<track_new_del@Multi-Threading>` .
#. Change :ref:`memory_leak-name` so that it checks for a leak in all threads.
   This is what ``openmp_newton_example.cpp`` and
   ``sum_i_inv_time.cpp``
   assumed was being done.

07-09
=====
All the OpenMP parallel execution requirements
have been grouped in the section :ref:`multi_thread-name` .

07-07
=====
Add the routine :ref:`parallel_ad-name` to fix bug when using
``AD`` < *Base* > in :ref:`parallel<omp_in_parallel-name>` execution mode.

06-23
=====

#. Fix a bug whereby the assert

   | |tab| ``Error detected by false result for``
   | |tab| |tab| ! ``omp_in_parallel`` ()
   | |tab| ``at line`` *n* ``in the file``
   | |tab| *prefix* / ``include/cppad/omp_alloc.hpp``

   sometimes occurred.
#. The routine :ref:`omp_max_thread-name` was deprecated,
   use the routine :ref:`omp_max_num_threads-name` instead.
#. The deprecated routines have been grouped together in the
   :ref:`deprecated-name` section of the CppAD manual.

06-21
=====

#. The ``openmp/run.sh`` routine was changed to use zero,
   instead of ``automatic`` , for automatic choice of
   ``openmp/run.sh``
   number of repeats
   and
   maximum number of threads.

#. The output of each of the OpenMP examples / speed tests
   (run by ``openmp/run.sh`` )
   was changed to be valid matlab / octave assignment statements.

#. In the case where OpenMP is enabled during compilation,
   a summary for the different number of threads as added at the end of
   the ``openmp/run.sh`` output.

06-18
=====

#. The :ref:`configure@tape_addr_type` option was added
   to the :ref:`configure@Configure` command line.
#. The function :ref:`fun_property@size_op_seq` results uses
   ``sizeof(CppAD_TAPE_ADDR_TYPE)``
   where it used to use ``sizeof(size_t)`` .
#. Remove ``cppad/config.h`` from CppAD distribution,
   (put the information in ``cppad/configure.hpp`` .)
   This removes the need to undefine symbols that were
   defined by ``cppad/config.h`` and that did not begin with ``CPPAD_`` .
#. Change :ref:`adolc<configure@adolc_dir>` library linkage so it
   works with version ``ADOL-C-2.2.0`` .

05-29
=====
Fix bug (introduced on :ref:`whats_new_11@mm-dd@05-22` )
whereby constructor might not be called (but required) when the
:ref:`base type<base_require-name>` is not plain old data.

05-28
=====

#. Add the :ref:`omp_efficient-name` routine to the :ref:`omp_alloc-name` system.
#. Improve the ``omp_alloc`` tracing so it prints the same pointer
   as returned to the user (not an offset version of that pointer).

05-26
=====
Fix Visual Studio project files that were broken during the change on 05-22.
In addition, in the file ``cppad/omp_alloc.hpp`` ,
suppress the following Microsoft Visual Studio warning
::

   warning C4345: behavior change: an object of POD type constructed with
   an initializer of the form () will be default-initialized

05-22
=====

#. The old memory tracking routines :ref:`track_new_del-name` have been deprecated.
   Their use should be replaced using the :ref:`omp_alloc-name`
   a memory allocator which is designed to work well in a multi-threading OpenMP
   environment; see :ref:`omp_alloc@Purpose` .
#. The replacement of ``TrackNewDel`` by ``omp_alloc``
   has been throughout the CppAD source code, including the examples
   that used ``TrackNewDel`` ; namely,
   :ref:`mul_level_adolc.cpp-name` , :ref:`mul_level_adolc_ode.cpp-name` .
#. The CppAD vector template class
   and the :ref:`CppAD_vector@vectorBool` class
   were modified to use the ``omp_alloc``
   :ref:`memory<CppAD_vector@Memory and Parallel Mode>` manager.
   This should improves its speed of memory allocation
   :ref:`omp_in_parallel-name` sections of a program.
#. The :ref:`speed_test-name` argument
   :ref:`speed_test@size_vec` call was by value,
   instead of by reference (as documented).
   This has been fixed and the call is now by reference.
#. The :ref:`CppAD_vector@capacity` function has been added
   to the CppAD vector class.
#. The simple vector
   :ref:`SimpleVector@Element Constructor and Destructor`
   description has been changed to explicitly specify that the
   default constructor is used to initialize elements of the array.
#. The :ref:`fun_property@size_op_seq` documentation
   has been improved to mention that the allocated memory may be larger.

05-11
=====

#. Avoid ambiguity in the definition of the
   :ref:`complex isnan<base_complex.hpp@isnan>` function.
#. Errors during ``make test`` were not
   being detected.
   This has been fixed.

05-03
=====

#. If ``NDEBUG`` is not defined,
   the :ref:`hasnan<nan-name>` function is used to make sure that the
   results of any :ref:`Forward-name` operation does not contain a
   nan (not a number).
   If so, an error message is generated and the program terminates.
   This error message and termination can be caught; see :ref:`ErrorHandler-name` .

#. In the event that the
   :ref:`cppad_ipopt_nlp-name` objective function, the constraints,
   or their derivatives are infinite,
   an error message is generated and the program terminates
   (proved that ``NDEBUG`` is not defined and the default error
   handler has not been replaced).

04-29
=====

#. The Microsoft Visual Studio 2003 project files
   for the Windows examples and tests no longer worked because
   the current version of CppAD uses local types in template instantiation; see
   `Compiler Error C2918 <http://msdn.microsoft.com/en-us/library/bh44f2cb(v=vs.71).aspx>`_.
   These project files were converted to Visual Studio 2008 where they do work
   (if you use a later version, Visual Studio should automatically
   convert them for you).

#. The old speed test directory was moved to ``speed_cppad``
   before the new :ref:`speed-name` test organization was created on 2006-12-11
   (revision 715 of the repository).
   The old speed tests have not been used for years and so have been deleted.

04-20
=====
The ``openmp/run.sh`` script what changed
to take an argument that specifies which tests is run
(it no longer runs all the tests).
Also improve the openmp test program output formatting.

04-19
=====
The *use_ad* option was added to the
``openmp_newton_example.cpp`` test case.

03-19
=====
The subversion write protected directory
``bin/.svn`` was mistakenly part of the
compressed tar file It has been removed.

03-11
=====
The vector of sets argument
:ref:`atomic_one@rev_hes_sparse@r`
to the ``atomic_one`` function *rev_hes_sparse*
must have size greater than or equal to *n* .
There was a check that its size was greater than or equal *q* .
This was incorrect and has been fixed.

03-05
=====
Add the :ref:`conjugate gradient<conj_grad.cpp-name>` example.

02-22
=====
Add the :ref:`speed_main@Global Options@atomic` option to the
speed test program and use
old_mat_mul.hpp during the
:ref:`cppad_mat_mul.cpp-name` speed test when the atomic option is specified.

02-19
=====
There was a bug when :ref:`omp_max_thread-name` was set to one,
and ``NDEBUG`` was not defined,
the thread corresponding to parameters was one, but the only valid thread
number was zero (only one thread)
and an CPPAD stopped with an assertion error.
This has been fixed.

02-17
=====
There was a mistake in ``openmp/run.sh`` where it attempted
to remove a non-existent file in the case where
``openmp/run.sh``
openmp_flag was not ``""`` .
This has been fixed.

02-15
=====
A matrix multiply speed test has been added.
So far, this has only implemented for the
:ref:`cppad<cppad_mat_mul.cpp-name>` and :ref:`double<double_mat_mul.cpp-name>` cases.
(For the time being this test is not available for the other
speed comparison cases.)

02-09
=====
A variable in ``atomic_one.hpp`` was declare of type *Base*
when it should have been declared of type ``size_t`` .
It caused the :ref:`atomic_one-name` feature to fail with some base types.
This has been fixed.

The old_mat_mul.hpp example has been improved by
caching the :math:`x` variable information and using it during
:ref:`reverse Hessian sparsity<atomic_one@rev_hes_sparse>` calculations.

Some of the :ref:`atomic_one-name` documentation was extended to
include more explanation.

02-06
=====
The use can now define complex :ref:`atomic_base<atomic_one-name>` operations
and store them in a CppAD :ref:`ADFun-name` object.
This item has been remove from the
:ref:`wish list<wish_list-name>` .

The documentation for :ref:`RevSparseHes-name` had a dimension error.
This has been fixed.

A faster set operations item was added to the wish list.
This has since been satisfied by
``cppad_sparse_list`` choice during
the install process (since removed).

02-02
=====
The documentation for :ref:`ForSparseJac-name` had some formatting errors.
The errors have been fix and the documentation has been improved.

02-01
=====
The subversion
install instructions were brought up to date.
They have since been replaced by just separate
``subversion`` instructions.

01-19
=====
The directory where the :ref:`pkgconfig-name` file ``cppad.pc``
is stored has been moved from
*prefixdir* / ``lib/pkgconfig/cppad.pc``
to
*prefixdir* / ``share/pkgconfig/cppad.pc`` ;
see
`devel lists.fedoraproject.org <http://lists.fedoraproject.org/pipermail/devel/2011-January/147915.html>`_.

01-16
=====
The following have been fixed:

#. The install of the documentation failed
   when it was done from a directory other than the top source directory.
#. The GPL distribution had the output of the
   :ref:`configure@Configure` command in it.
#. Since the change on 01-09, the file
   ``omh/appendix/11.omh`` has been required to build the
   documentation (and it has been missing from the distribution).
#. Fadbad was generating warnings due to the ``-Wshadow`` flag
   with the ``g++`` compiler.
   The Fadbad :ref:`speed<speed_fadbad-name>` tests have a special
   flag with this warning removed from the
   :ref:`configure@cxx_flags` .

01-09
=====
There were some problems running ``make test`` in the releases

   ``http://www.coin-or.org/download/source/CppAD/cppad-20110101.0.`` *license* . ``tgz``

where *license* is ``gpl`` or ``cpl`` .

#. The version of automake used to build the corresponding
   ``makefile.in`` files did not define ``abs_top_builddir`` .
#. The include file ``cppad_ipopt_nlp.hpp`` was always installed, even if
   :ref:`configure@ipopt_dir` was not defined on the
   ``configure`` command line.
#. The speed test library ``libspeed.a`` was being installed
   (it is only intended for testing).

These problems are fixed in the trunk
and these fixes will be copied to the corresponding stable and
release versions; i.e.,

   ``http://www.coin-or.org/download/source/CppAD/cppad-20110101.1.`` *license* . ``tgz``

will not have this problem.

{xrst_end whats_new_11}
