Prev Next whats_new_14

@(@\newcommand{\W}[1]{ \; #1 \; } \newcommand{\R}[1]{ {\rm #1} } \newcommand{\B}[1]{ {\bf #1} } \newcommand{\D}[2]{ \frac{\partial #1}{\partial #2} } \newcommand{\DD}[3]{ \frac{\partial^2 #1}{\partial #2 \partial #3} } \newcommand{\Dpow}[2]{ \frac{\partial^{#1}}{\partial {#2}^{#1}} } \newcommand{\dpow}[2]{ \frac{ {\rm d}^{#1}}{{\rm d}\, {#2}^{#1}} }@)@
CppAD Changes and Additions During 2014

This section contains a list of the changes to CppAD during 2014 (in reverse order by date). The purpose of this section is to assist you in learning about changes between various versions of CppAD.

There was a bug in the cmake 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.

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 complex FAQ .

  1. 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.
  2. Fix cmake setting cppad_implicit_ctor_from_any_type Note that this cmake option has since been replaced by cppad_deprecated .
  3. The clang++ compiler was optimizing out the calculations in the time_test.cpp and speed_test.cpp examples. This caused these tests to hang while trying to determine how many times to repeat the test. This has been fixed.

More work on the bug in optimizing conditional expressions.

A minimal example for computing cross terms in atomic operation Hessian sparsity patterns atomic_rev_sparse_hes.cpp was added.

More work on the bug in optimizing conditional expressions.

The c++11 standard includes the error function erf 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 Positive Orders .

There was a bug related to optimizing conditional expressions. This has been fixed.

Fix some compiler warnings and speed program names when using the deprecated autotools install procedure.

If the c++11 include file <cstdint> defines all the standard types, they can be used by to specify cppad_tape_addr_type and cppad_tape_id_type .

Correct the title and _index entries for forward_two from first to second order.

Improve the index and search using a new version of the omhelp documentation tool.

  1. Add alignment to the get_memory and create_array specifications and thread_alloc example .
  2. Advance the deprecated unix install utilities to autoconf-2.69 and automake-1.13.4.

Fix more bugs related to optimizing condition conditional expressions.
  1. Using old instead of new operator indices.
  2. Not properly following dependence back through atomic operations.
  3. 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).
  4. Reverse mode not properly handling the variable number of arguments in the conditional skip operation.
  5. Reverse mode tracing not properly handling the variable number of argument operations; i.e., conditional skip and cumulative summation.

Fix a bug that occurred when f.optimize was used with a function f that contained calls to user defined atomic operations and conditional expressions .

Fix a bug that occurred when f.optimize was used with a function f that contained discrete functions.

Fix a typo in documentation for any order reverse . To be specific, @(@ x^{(k)} @)@ was changed to be @(@ u^{(k)} @)@.

  1. Change the boolsparsity so that it only affects the sparsity speed tests sparse_jacobian and sparse_hessian ; i.e., it is now ignored by the other tests.
  2. Improve the speed documentation page.

  1. 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.
  2. If colpack_prefix was specified, the CppAD pkgconfig file was missing some information. This has been fixed.

The speed test instructions were converted from using the old autotools unix install instructions to use the cmake install instructions. These instructions should work on any system, not just unix.

  1. Add multiple direction for mode forward_dir and use it to speed up the forward version of sparse_jacobian . Below is an example run of cppad_sparse_jacobian.cpp 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).
  2. Improve the forward mode tracing of arguments to, and results from, user defined atomic operations.

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

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 Base . These may have not be defined operations in certain cases and have been converted to uj = Base(0).

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 cppad/local/*sweep.hpp/ ). This has been fixed.

  1. 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.
  2. 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 cppad/local/*sweep.hpp/ . This has been fixed.

  1. The size_taylor and capacity_taylor functions were deprecated; use size_order and capacity_order instead.
  2. The documentation for forward and the examples forward.cpp , forward_order.cpp , have been improved. To be more specific, forward_order now references the special cases forward_zero , forward_one and the new case forward_two .

The 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.)

The documentation links forwardzero, forwardone, and forwardany have been changed to forward_zero , forward_one , and forward_order respectively. This may affect links from other web pages to the CppAD documentation.

The names p and q in the forward , reverse , atomic_forward , and atomic_reverse functions were reverse so that p <= q . This is only a notational change to make the arguments easier to remember.

  1. In the output for the speed correct test, mention which tests are not available. Note that the set of available tests can depend on the list of options .
  2. In the documentation for n_sweep , mention that it is equal to the number of colors determined by the color_method .
  3. The speed_cppad tests were simplified by removing the printing of auxillary information related to the optimize option. Future auxillary information will be passed back in a manner similar to n_sweep for the sparse jacobian test.
  4. Move semantics were added to the CppAD::vector assignment operator.

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

The data function was added to the CppAD::vector template class.

The CppAD developer documentation for the subdirectory cppad/ipopt was not being built by the command bin/ This has been fixed.

  1. The adolc and cppad sparse jacobian speed tests now print out n_sweep .
  2. The size of some of the speed test cases has been increased to test behavior for larger problems.
  3. A link to ode_evaluate was missing in the Speed Utility Routines table. This has been fixed.

The color_method option was added to the sparse Jacobian calculations. This enables one to use ColPack do color the rows or columns. The speed test colpack option was also added (but not yet implemented for sparse_hessian speed tests).

The program names in thread_test.cpp where changes from threading_test to multi_thread_threading where threading is openmp, pthread or bthread.

Fix ambiguous call to isnan during MS Visual Studio 2012 compilation.

  1. The boolsparsity option was added to the speed_main program.
  2. The retape option what changed to onetape so that the default is to retape (option not present). This was done because fadbad and sacado always retape.
  3. The documentation, and example source code, for all the speed options was improved (made clearer).
  4. Improve the success rate for speed_test.cpp and time_test.cpp .

The destination directory for the cppad documentation is now set separately from the data directory using the cmake option
     -D cmake_install_docdir=
This has increased the flexibility of the documentation installation and removed the need for the option
     -D cppad_documentation=
which has been removed.

The destination directory for the cppad documentation used to be one of the following:
This has been changed by dropping the version number at the end of the directory name.

The change on 2013-12-27 caused a conversion error in atan2 when it was used with AD< AD<double> > arguments (and other similar cases). This has been fixed.
Input File: omh/appendix/whats_new/whats_new_14.omh