lines 6-971 of file: appendix/whats_new/12.xrst {xrst_begin whats_new_12 app} {xrst_spell datadir debian deprecate doxygen dw eigenvector fcur helgrind includedir inorder libdir linker lpthread lteuchos makefile pkgconfig plugin posix src statics stdbool taddr trilinos txt ubuntu uninitialised valgrind yyyymmdd } CppAD Changes and Additions During 2012 ####################################### mm-dd ***** 12-30 ===== #. Merge changes in ``branches/ipopt_solve`` to ``trunk`` , delete that branch, and advance version number to ``cppad-20121230`` . #. Remove ``cppad/configure.hpp`` from repository because it is built by the configuration process (even for MS Visual Studio, now that we are using :ref:`cmake-name` ). #. Add the ``AD`` < *Base* > input stream operator :ref:`>>` . 12-29 ===== In ``branches/ipopt_solve`` : #. Complete implementation of sparse Jacobian and Hessian calculations and add options that allow to user to choose between forward and reverse sparse Jacobians. #. The :ref:`ipopt_solve-name` routine seems to be faster and simpler than :ref:`cppad_ipopt_nlp-name` . More speed comparisons would be good to have. #. All of the :ref:`ADFun Drivers` have added specifications for the zero order Taylor coefficients after the routine is called. For example, see :ref:`Hessian@Hessian Uses Forward` . 12-28 ===== In ``branches/ipopt_solve`` : #. Add the :ref:`ipopt_solve_retape.cpp-name` and :ref:`ipopt_solve_ode_inverse.cpp-name` examples. #. Use ``ipopt::solve`` :ref:`ipopt_solve@options` argument (and not a file) for all the Ipopt options. As well as allowing for adding ``ipopt::solve`` special options; e.g., :ref:`ipopt_solve@options@Retape` . 12-27 ===== In ``branches/ipopt_solve`` : Change documentation section names that begin with ``cppad_ipopt`` to begin with :ref:`ipopt_nlp` to distinguish them from :ref:`CppAD::ipopt::solve` . 12-26 ===== In ``branches/ipopt_solve`` : #. Convert documentation most all documentation references from the deprecated :ref:`configure-name` instructions to the new :ref:`cmake-name` instructions. #. Include the :ref:`Introduction-name` programs in the :ref:`cmake_check-name` built using :ref:`cmake-name` . #. Deprecate :ref:`cppad_ipopt_nlp-name` and replace it by :ref:`ipopt_solve-name` which is easier to use. This is a first version of ``ipopt_solve`` and its speed and memory use needs to be improved. 12-23 ===== Copy development ``trunk`` to ``branches/ipopt_solve`` . 12-22 ===== Define a doxygen module (group) for each file that has doxygen documentation. 12-20 ===== #. The :ref:`install instructions` were installing ``cppad/CMakeLists.txt`` and ``cppad/configure.hpp.in`` in the ``cppad`` include directory. This has been fixed so that only * . ``h`` and * . ``hpp`` files get installed in the ``cppad`` include directory. #. Advance the version number to ``cppad-20121220`` . 12-19 ===== The files ```` and ```` do not exist for all C compilers, and this caused a problem when using the Windows compiler. This has been fixed by defining the type bool inside the ``compare_c/det_by_minor.c`` source code. 12-17 ===== There was a mistake in a check for a valid op code in the file ``hash_code.hpp`` . This mistake could generate a C++ assertion with an unknown error source. It has been fixed. 12-15 ===== #. Advance version number from ``20121120`` to ``20121215`` . Note that the CppAD version number no longer automatically advances with the date and is rather chosen to advance to the current date. #. The :ref:`cmake-name` installation was putting the ``cppad.pc`` :ref:`pkgconfig-name` file in ``cppad_prefix`` / *cmake_install_datadir* / ``cppad.pc`` This has been fixed and is now ``cppad_prefix`` / *cmake_install_datadir* / ``pkgconfig/cppad.pc`` #. The :ref:`pkgconfig-name` documentation has been improved. #. The command for running the :ref:`adolc examples` and :ref:`eigen examples` was fixed (changed from ``make check`` to ``make check_example`` ). 12-14 ===== #. Fix the old :ref:`configure-name` so that it works with the new ``cppad.pc`` . #. Fix the old installation --with_Documentation option (it was attempting to copy from the wrong directory). 12-13 ===== #. Include documentation for :ref:`ipopt-name` #. Fix the ``cppad.pc`` :ref:`pkgconfig-name` file so that it includes the necessary libraries and include files when :ref:`cmake@include_ipopt` is specified; see :ref:`pkgconfig-name` . 11-28 ===== Update the :ref:`wish_list-name` : #. Remove Microsoft compiler warning item that has been fixed. #. Remove faster sparse set operations item that was completed using ``cppad_sparse_list`` (not part of user API). #. Remove :ref:`cmake-name` items that have been completed. #. Remove :ref:`CondExp-name` items related to using ``AD< std::complex >`` types because it is better to use ``std::complex< AD >`` . #. Remove :ref:`thread_alloc-name` memory chunk item that has been completed. #. Remove :ref:`VecAD-name` item about slicing from floating point type to ``int`` (not important). #. Change an Ipopt item to a :ref:`cppad_ipopt_nlp-name` (which was removed because ``cppad_ipopt_nlp`` is now deprecated). Add new ``cppad_ipopt_sum`` item to the wish list. (This has been removed because :ref:`checkpointing` can now be used for this purpose.) #. Add new ``atomic_one`` :ref:`wish_list-name` item (since removed). 11-21 ===== #. Fix the :ref:`download@Version` number in link to the current download files. #. Change the ``subversion`` download instructions to use the ``export`` instead of ``checkout`` command. This avoids downloading the source code control files. 11-20 ===== #. The ``cmake`` variables ``cmake_install_includedir`` and ``cmake_install_libdir`` were changed to :ref:`cmake@cmake_install_includedirs` and :ref:`cmake@cmake_install_libdirs` to signify the fact that they can now be a list of directories. #. Advance version number to ``cppad-20121120`` . 11-17 ===== #. Finish documenting the new :ref:`cmake-name` configuration instructions and deprecate the old :ref:`unix` instructions. #. Change the specifications for :ref:`multi_thread@CPPAD_MAX_NUM_THREADS` to allow for a value of one. This enables one to have more tapes during a program execution. #. Include the :ref:`C versus C++` speed comparison in the :ref:`cmake-name` build. 11-16 ===== Fix a warning that occurred in :ref:`Rosen34-name` when it was compiled with the preprocessor symbol ``NDEBUG`` defined. 11-14 ===== Advanced the CppAD version to ``cppad-20121114`` . #. Started documenting the :ref:`cmake-name` configuration procedure during installation. This included factoring out the :ref:`download-name` procedure as a separate section so that the same download instruction also apply to the :ref:`unix` install procedure. #. Changed :ref:`example/compare_change.cpp` to just return true when ``NDEBUG`` is defined. This enabled all the tests in the ``example`` directory to be compiled with ``NDEBUG`` is defined and to pass. #. In the case where ``NDEBUG`` is defined, removed detection of ``nan`` during forward mode from ``test_more/forward.cpp%`` . This enables all the tests in the ``test_more`` directory to be compiled with ``NDEBUG`` is defined and to pass. #. Started a wish list for CppAD's use of :ref:`cmake-name` . The wish list items were completed and removed. 11-09 ===== The :ref:`team_pthread.cpp-name` was failing to link on Ubuntu 12.04 because the libraries were not at the end of the link line. This has been fixed. 11-06 ===== #. Remove some remaining references to the old licenses CPL-1.0 and GPL-2.0; see :ref:`whats_new_12@mm-dd@10-24` . #. Remove out of date Microsoft project files from the distribution. The build system is being converted to use `cmake `_ which builds these files automatically and thereby keeps them up to date. This feature is not yet documented, but one can inspect the file ``bin/run_cmake.sh`` to see how to use ``cmake`` with CppAD. 11-04 ===== Add missing return value to the example ``base_alloc`` :ref:`base_alloc.hpp@CondExpOp` function. This has been fixed and the comments for this example have been improved. 10-31 ===== The CppAD profiling was not compiling the ``speed/src/\*.cpp`` files with the profiling flag. This has been changes (only for the profiling speed test). 10-30 ===== The :ref:`configure@fadbad_dir` directory install instructions were changed. To be specific, ``FADBAD++`` was changed to ``include/FADBAD++`` . This makes it more like the other optional packages. 10-25 ===== The test :ref:`runge45_1.cpp-name` was failing when using gcc-4.5.2. This has been fixed by properly defining ``fabs`` ( *x* ) where *x* is a double (without the ``std`` in front). 10-24 ===== Change the CppAD licenses from CPL-1.0 and GPL-2.0 to EPL-1.0 and GPL-3.0. 10-12 ===== #. Change all the multiple levels of AD examples to start with :ref:`mul_level-name` . To be specific, move ``taylor_ode.cpp`` to :ref:`mul_level_ode.cpp-name` and ``taylor_ode_adolc.cpp`` to :ref:`mul_level_adolc_ode.cpp-name` . #. Add :ref:`taylor_ode.cpp-name` as a example of Taylor's method for solving ODEs, (:ref:`mul_level_ode.cpp-name` is an application of this method to multi-level AD.) 10-04 ===== #. Change :ref:`speed_main-name` so that it outputs small rates (less than 1000) with two decimal points of precision (instead of as integers). In addition, flush result for each size when it finishes to give user more feedback about how things are progressing. #. Add the optional :ref:`time_test@test_size` argument to the ``time_test`` routine. 10-03 ===== Change the ``hold_memory`` speed to option to just :ref:`speed_main@Global Options@memory` . In addition, in the speed test output, include all of the options that are present in the output variable name; see :ref:`speed_main@Speed Results` . 10-02 ===== Fix another problem with Debian's ``/bin/sh`` shell executing ``example/multi_thread/test.sh`` ; see :ref:`whats_new_12@mm-dd@03-17` 09-24 ===== Improve documentation for the :ref:`atomic_one-name` :ref:`atomic_one@rev_hes_sparse` argument :ref:`atomic_one@rev_hes_sparse@v` . In addition, add sparsity calculations to the old_reciprocal.cpp example. 09-11 ===== Add ``user_simple.cpp`` , a simpler :ref:`atomic_one-name` example. 08-05 ===== #. A new type was added for the internal representation of :ref:`glossary@Sparsity Pattern@Vector of Sets` sparsity patterns; see the configure ``--with-sparse_option`` (since removed). #. A new speed test, :ref:`compare_c-name` , compares the speed of the same source code compiled with C and C++. 07-30 ===== #. The :ref:`CppAD_vector@clear` function was added to ``CppAD::vector`` . #. Warning !!: The ``CppAD::vector`` :ref:`CppAD_vector@resize` specifications were changed so that *x* . ``resize`` (0) no longer frees the corresponding memory (use *x* . ``clear`` () instead). #. Fix a bug in error checking during :ref:`optimize-name` procedure had the following ``valgrind`` symptom during the ``optimize.cpp`` example: :: ==6344== Conditional jump or move depends on uninitialised value(s) #. Fix mistake in old_tan.cpp where ``w[2] = 0`` was missing before the call :: dw = F.Reverse(1, w); 07-08 ===== #. Improve the documentation for :ref:`pow-name` and :ref:`pow_int-name` . #. Change all the example section names to be same as corresponding file names; e.g. change ``vectorBool.cpp`` to :ref:`vector_bool.cpp-name` for the example ``example/utility/vector_bool.cpp`` . 07-07 ===== Add the ``CPPAD_TAPE_ID_TYPE`` argument to the :ref:`configure@Configure` command line. 07-05 ===== Deprecate ``CPPAD_TEST_VECTOR`` and use :ref:`CPPAD_TESTVECTOR` in its place. This fixes a problem introduced by changes on 07-03 whereby code that used ``CPPAD_TEST_VECTOR`` would no longer work. 07-04 ===== #. Replace the requirement that the :ref:`SimpleVector-name` :ref:`SimpleVector@size` function return a ``size_t`` value to the requirement that it can be converted to a ``size_t`` value. #. The :ref:`--with-eigenvector` option was added to the ``configure`` command line. 07-03 ===== Fix bug in :ref:`atomic_one-name` functions identification of variables that caused old_tan.cpp to fail with error message :: Error detected by false result for y_taddr > 0 at line 262 in the file cppad/local/dependent.hpp 07-02 ===== Add ``eigen_plugin.hpp`` so that an Eigen vector can be used as a :ref:`SimpleVector-name` . This has since been removed; see :ref:`2017-05-11` . 07-01 ===== #. Change :ref:`cppad_eigen.hpp-name` to match new specifications and example in eigen help files on `customizing and extending eigen. `_ #. Fix bug whereby a newly constructed :ref:`VecAD-name` object was a :ref:`con_dyn_var@Variable` (instead of a parameter) directly after construction (when no previous :ref:`ADFun` object had been created). #. Change a ``ok != a == 0.`` to ``ok &= a == 0.`` in the example :ref:`ad_ctor.cpp-name` . #. Add the :ref:`eigen_array.cpp-name` example. 06-17 ===== #. Move :ref:`epsilon-name` to :ref:`numeric_limits-name` and add the functions ``min`` and ``max`` in *CppAD::numeric_limits<* ``Type`` > . #. Convert use of the deprecated :ref:`epsilon-name` in examples to use of ``numeric_limits`` :ref:`numeric_limits@epsilon` . #. Complete :ref:`cppad_eigen.hpp-name` interface to ``lowest`` and ``highest`` functions for all non-complex AD types. 06-16 ===== Add the example :ref:`eigen_det.cpp-name` that uses the `Eigen `_ linear algebra package. 06-15 ===== Include the :ref:`base_adolc.hpp-name` as ```` under the :ref:`configure@prefix_dir` directory. 06-12 ===== Increase the size and of the :ref:`sparse Jacobian speed tests` . 06-10 ===== #. Add the :ref:`hold_memory` option to the speed test main program. This was changed to just ``memory`` ; see :ref:`whats_new_12@mm-dd@10-03` . #. In :ref:`cppad_sparse_jacobian.cpp-name` , change ``USE_BOOL_SPARSITY`` from true to false. In addition, change the number of non-zeros per row from about approximately three to approximately ten. 06-09 ===== Change :ref:`adolc_sparse_jacobian.cpp-name` to use the sparse adolc Jacobian (instead of the full Jacobian) driver. This was also done for :ref:`adolc_sparse_hessian.cpp-name` , but there is a problem with the test that is being investigated. 06-08 ===== Implement the matrix multiply speed test :ref:`link_mat_mul-name` for all packages (there is a problem with the :ref:`fadbad_mat_mul.cpp-name` implementation and it is being looked into). 06-07 ===== Make all the speed tests implementations (for the specific packages) uniform by having a Specification and Implementation heading and similar indexing. For example, see :ref:`adolc_det_minor.cpp-name` , :ref:`cppad_det_minor.cpp-name` , :ref:`double_det_minor.cpp-name` , :ref:`fadbad_det_minor.cpp-name` , and :ref:`sacado_det_minor.cpp-name` . 06-05 ===== Add the :ref:`sacado_ode.cpp-name` speed test. 06-04 ===== #. The specifications for :ref:`Runge45-name` where changes so that it uses the ``fabs`` function instead of the ``<`` operation. This enabled the a more precise statement about its :ref:`Runge45@Operation Sequence` . #. The ``fabs`` function as added to the CppAD standard math library (see :ref:`abs-name` ) and the :ref:`base type requirements` . This enables one to write code that works with ``AD`` as well as ``double`` without having to define ``abs`` for ``double`` arguments (and similarly for ``float`` ). #. Add the :ref:`adolc_ode.cpp-name` and :ref:`fadbad_ode.cpp-name` speed tests (and edit the :ref:`cppad_ode.cpp-name` test). 06-03 ===== #. The ``CppAD::vector`` class was extended to allow assignment with the target of size zero and the source of non-zero size; see :ref:`CppAD_vector@Assignment@Check Size` . #. A memory leak and a bug in ``cppad_mat_mul.cpp`` were fixed (the bug was related to the change to ``CppAD::vector`` above). 06-02 ===== #. Remove the deprecated symbol ``CppADvector`` from the :ref:`det_by_lu-name` speed test source code :ref:`det_by_lu.hpp-name` . #. Include :ref:`memory_leak-name` in the list of :ref:`deprecated-name` features. #. Change the :ref:`ode_evaluate-name` speed test utility so that its :ref:`operation sequence` does not depend on the repetition; see :ref:`ode_evaluate@p@p == 0` in its documentation. #. Use same argument for taping and derivative evaluation when ``retape`` speed test option is true. #. Implement the *retape* == ``false`` option in :ref:`cppad_ode.cpp-name` . #. Have :ref:`cppad_det_lu.cpp-name` , :ref:`cppad_det_minor.cpp-name` , and :ref:`cppad_poly.cpp-name` , return false when one of the specified options is not supported. Do the same for *package* _ *test* . ``cpp`` for *package* equal to ``adolc`` , ``fadbad`` , and ``sacado`` and for *test* equal to ``det_lu`` , ``det_minor`` , ``poly`` . 06-01 ===== Change :ref:`cppad_sparse_hessian.cpp-name` and :ref:`cppad_sparse_jacobian.cpp-name` to use the *row* , *col* interface to :ref:`sparse_hessian-name` . In addition, implement the speed test ``retape`` speed test option for these tests. 05-31 ===== Add the ``cppad_print_optimize`` routine to so that the corresponding code does not need to be reproduced for all the :ref:`speed_cppad-name` tests. In addition, during CppAD speed tests, print out the optimization results for each test size. 05-30 ===== Change specifications for :ref:`link_sparse_hessian-name` so that the row and column indices are inputs (instead of being chosen randomly by the test for each repetition). This enables use of the ``retape`` speed test option during sparse Hessian speed tests. 05-29 ===== Add :ref:`index_sort-name` to the general purpose template :ref:`utilities` so that it can be used by the implementations of :ref:`link_sparse_jacobian-name` and :ref:`link_sparse_hessian-name` . 05-27 ===== Split the sparse Jacobian and Hessian test function the separate function :ref:`sparse_jac_fun-name` and :ref:`sparse_hes_fun-name` (do not use sparse Hessian for both). In addition, change row and column indices from *i* and *j* to *row* and *col* . 05-24 ===== Merged in changes from ``branches/sparse`` : #. A new interface was added to :ref:`sparse_jacobian-name` and :ref:`sparse_hessian-name` . This interface returns a sparse representation of the corresponding matrices using row and column index vectors. #. The examples :ref:`sparse_jacobian.cpp-name` and :ref:`sparse_hessian.cpp-name` were improved and extended to include the new interface. #. The definition of an :ref:`glossary@AD Function` was improved to include definition of the corresponding *n* and *m* . 04-19 ===== The :ref:`configure@boost_dir` configure command line value has been changed to be the corresponding prefix during the installation of boost. To be specific, it used to be that ``boost_dir`` / *boost* was the boost include directory, now ``boost_dir`` / *include* is the boost include directory. This make it the same as the other directory arguments on the configure command line. In addition, it fixes some bugs in the detection of the boost multi-threading library. 04-18 ===== Add documentation and testing for not using :ref:`free_all` and :ref:`atomic_one clear` while in :ref:`parallel` mode. 04-17 ===== Fix bug when using :ref:`atomic_one-name` functions with :ref:`multi_threading` . 04-10 ===== Add control of the :ref:`configure@max_num_threads` argument to the unix :ref:`configure@Configure` command. 04-06 ===== #. A change was made to the way that the tapes were managed to reduce false sharing during :ref:`multi-threading` . Because of this change, it is now suggest that the user call :ref:`parallel_ad-name` after the multi-threading section of the program. #. The routine :ref:`ta_free_all-name` was created to make it easier to manage memory and the routine :ref:`memory_leak-name` was deprecated. #. Add the ``-lteuchos`` flag to the link line for the :ref:`speed_sacado-name` tests. (This was not necessary for ``trilinos-10.8.3`` but is necessary for ``trilinos-10.10.1`` ) 04-05 ===== The restriction was added that :ref:`parallel_ad-name` cannot be called while a tape is being recorded. This was necessary inorder to initialize some new statics in the tape. 04-01 ===== Fixed a race condition when using CppAD with :ref:`multi-threading` . This has been fixed and the error message below no longer occurs. Suppose that you ran the CppAD :ref:`configure@Configure` command in the ``work`` directory. If you then edited the file ``work/multi_thread/makefile`` and changed :: # AM_CXXFLAGS = -g $(CXX_FLAGS) AM_CXXFLAGS = -DNDEBUG -O2 $(CXX_FLAGS) to:: AM_CXXFLAGS = -g $(CXX_FLAGS) # AM_CXXFLAGS = -DNDEBUG -O2 $(CXX_FLAGS) and then executed the commands :: make clean make pthread_test valgrind --tool=helgrind ./pthread_test simple_ad The following error message would result: | |tab| ... ``snip ...`` | ==7041== ``Possible data race during write of size 4 at 0x8077460 by thread`` #1 | ==7041== ``at 0x804FE23: CppAD::AD::tape_new`` () ( ``tape_link.hpp:221`` ) | ... ``snip ...`` 03-27 ===== Reduce the amount of memory allocation and copying of information during a :ref:`Dependent-name` operation or an ``ADFun`` :ref:`fun_construct@Sequence Constructor` . 03-26 ===== Calling ``taylor_capacity`` , with to with capacity equal to zero, was not :ref:`capacity_order@c@Freeing Memory` . This has been fixed. 03-23 ===== #. Improve, the multi-threading examples :ref:`simple_ad_openmp.cpp-name` , :ref:`simple_ad_bthread.cpp-name` , and :ref:`simple_ad_pthread.cpp-name` . This includes separating generic code that can be used for all applications from problem specific code. #. Add initialization of statics in :ref:`parallel_ad@CheckSimpleVector` during ``parallel_ad`` call. These statics are required to use :ref:`CppAD::vector` . #. Add a debugging check to make sure :ref:`CheckSimpleVector-name` is initialized in sequential mode. 03-21 ===== Fix an incorrect error check in ``thread_alloc`` that did not allow :ref:`ta_return_memory-name` to return memory in sequential execution mode that was allocated by a different thread during parallel execution. 03-17 ===== Debian recently converted the default shell corresponding to ``/bin/sh`` to ``dash`` (which caused ``example/multi_thread/test.sh`` to fail). This has been fixed. In general, Debian's policy is that ``bin/sh`` will be a `Posix Shell `_. 03-11 ===== There was a bug in :ref:`thread_alloc-name` where extra memory was held onto even if :ref:`hold_memory` was never called and only one thread was used by the program. This caused ``valgrind --leak-check`` = ``full --show-reachable`` = ``yes`` to generate an error message. If :ref:`multiple threads` are used, one should free this :ref:`ta_free_available@Purpose@Extra Memory` for threads other than thread zero. If ``hold_memory`` is used, one should call :ref:`free_available` for all threads. 03-03 ===== #. Add the examples :ref:`simple_ad_openmp.cpp-name` , :ref:`simple_ad_bthread.cpp-name` and :ref:`simple_ad_pthread.cpp-name` . #. Fix bug in finding boost multi-threading library (due to fact that :ref:`configure@boost_dir` is not the prefix during the boost installation). 03-02 ===== #. Change the name ``simple_ad.cpp`` to :ref:`team_example.cpp-name` #. The multi-threading ``team_example.cpp`` example was changed to use :math:`f(x) = \sqrt{ x^2 }` instead of the function :math:`{\rm atan2} [ \sin(x) , \cos (x) ]` (both functions should behave like the identity function :math:`f(x) = x`). This enabled the removal of ``example/multi_thread/arc_tan.cpp`` . #. In :ref:`team_example.cpp-name` check that all of the threads pass their individual test; i.e. ``work_all_`` [ *thread_num* ]. *ok* is true for all *thread_num* . 02-11 ===== #. The requirements in :ref:`base_member-name` were missing from the :ref:`base_require-name` documentation. In addition, the :ref:`base_require.cpp-name` example has been added. The specifications for :ref:`memory_leak-name` where changes so that calling routine specifies the amount of static memory to add. In addition, it is now possible to call ``memory_leak`` when :ref:`num_threads` is greater than one (still can't be in parallel mode). 02-10 ===== #. Add the missing Base class requirements in the entire :ref:`base_member-name` section and under the :ref:`base_require@Output Operator` in the :ref:`base_require-name` section. #. Add the :ref:`base_alloc.hpp-name` example. 02-09 ===== #. Add the *set_static* to :ref:`memory_leak-name` . This is necessary for testing base types that allocate memory for each element. #. Fix memory allocation bug in ``cppad/local/pod_vector.hpp`` when each element of the :ref:`Base` type allocated memory. 01-30 ===== Make another attempt to fix linking with boost threads where the wrong version of the library is in the system include directory; i.e., to have :ref:`configure@boost_dir` override the default library. 01-27 ===== There were some problems with :ref:`configure's` automatic detection of the boost multi-threading library. These have been fixed. 01-24 ===== It used to be that :ref:`thread_alloc-name` did not hold onto memory when *num_threads* was one in the previous call to :ref:`parallel_setup` . Holding onto memory is now controlled by the separate routine :ref:`hold_memory` . This give the user more control over the memory allocator and the ability to obtain a speed up even when there is only one thread. To convert old code to the new interface, after each call to ``thread_alloc::parallel_setup`` ( *num_threads* , *in_parallel* , *thread_num* ); put the following call ``thread_alloc::hold_memory`` ( *num_threads* > 1); 01-23 ===== Change variable notation and use :ref:`optimize-name` in :ref:`mul_level.cpp-name` . 01-20 ===== #. Add the example :ref:`change_param.cpp-name` which shows how to compute derivatives of functions that have parameters that change, but derivatives are not computed with respect to these parameters. #. The documentation for machine :ref:`epsilon-name` has been improved. (The fact that it can be used for *Base* types was missing.) 01-19 ===== #. In cases where ``test.sh`` is trivial, put its operations in corresponding makefile. #. Fix problem compiling ``cppad/speed/sparse_evaluate.hpp`` under gcc on Fedora 17. #. Run ``example/multi_thread/test.sh`` from source directory (no need to copy to build directory). 01-16 ===== The test program ``example/multi_thread/test.sh`` failed if the openmp_flags not present in the ``configure`` command. This has been fixed. In addition, this ``test.sh`` has been made faster by cycling through the available threading systems instead of doing every system for every test. 01-15 ===== Fix ``make test`` so it works when :ref:`configure@Configure` is run in the distribution directory ``cppad-`` *yyyymmdd* (not just when it is run in a different directory). 01-12 ===== The ``-lpthread`` library was missing from the :ref:`multi_thread-name` test program linker command. This has been fixed. 01-07 ===== #. A duplicated code block beginning with :: if( fabs( fcur ) <= epsilon_ ) was removed from the routine ``multi_newton_worker`` . #. The distance between solutions that are joined to one solution has been corrected from :math:`(b - a) / (2 n )` to :math:`(b - a) / n`; see :ref:`multi_newton_run@xout` . The correction was in the file :ref:`multi_newton.cpp-name` where ``sub_length_ / 2`` was change to ``sub_length_`` . 01-02 ===== #. The :ref:`thread_alloc-name` memory allocator was changed to avoid certain false sharing situations (cases where two different thread were changing and using memory that is on the same page of cache). On one tests machine, the execution time for the 32 thread case for the test :: ./openmp_test multi_newton 1 32 1000 4800 10 true improved from 0.0302 seconds to 0.0135 seconds. #. There was a problem with the correctness test section of the :ref:`multi_newton_time-name` test. The convergence criteria, and correctness criteria, needed to be scaled by the largest argument values. This was a problem with over a hundred zeros were included in the test (and the largest argument value was :math:`100 \pi` or more). #. There was a problem with the way that :ref:`multi_newton_takedown-name` joined two solutions into one. It is possible that one of the solutions that needs to be joined is on the boundary and very close to a solution in the next (or previous interval) that is not on the boundary. In this case, the one with the smaller function value is chosen. for the previous {xrst_end whats_new_12}