$Id: whats_new_14.omh 3696 2015-06-07 15:53:26Z bradbell $ /* -------------------------------------------------------------------------- CppAD: C++ Algorithmic Differentiation: Copyright (C) 2003-15 Bradley M. Bell CppAD is distributed under multiple licenses. This distribution is under the terms of the Eclipse Public License Version 1.0. A copy of this license is included in the COPYING file of this distribution. Please visit http://www.coin-or.org/CppAD/ for information on other licenses. -------------------------------------------------------------------------- */ $begin whats_new_14$$ $dollar @$$ $spell cstdint addr omhelp autoconf automake alloc ifndef asin acos uj op hpp taylor forwardzero forwardone forwardany const doxygen ipopt adolc colpack Jacobian openmp pthread bthread isnan onetape retape fadbad sacado boolsparsity cmake docdir CppAD cppad datadir erf cmath ctor std num $$ $section CppAD Changes and Additions During 2014$$ $head Introduction$$ 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. $head 12-30$$ There was a bug in the $cref cmake$$ whereby it would sometimes mistakenly exit with the error message $codep cppad_max_num_threads is not an integer greater than or equal 4 $$ This has been fixed. $head 12-29$$ The example $code not_complex_ad.cpp$$ was using the type $codei% std::complex< CppAD::AD > %$$ and was failing to compile with the $code clang$$ complier. This example has been removed because it is not consistent with the C++ standard; see $cref/complex FAQ/faq/Complex Types/$$. $head 12-28$$ $list number$$ 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. $lnext Fix $code cmake$$ setting $cref/cppad_implicit_ctor_from_any_type/ cmake/cppad_implicit_ctor_from_any_type /$$. Note that this option is deprecated and may eventually be removed. $lnext The $code clang++$$ compiler was optimizing out the calculations in the $cref time_test.cpp$$ and $cref 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. $lend $head 12-27$$ More work on the bug in $cref/optimizing/CondExp/Optimize/$$ conditional expressions. $head 12-26$$ A minimal example for computing cross terms in atomic operation Hessian sparsity patterns $cref atomic_hes_sparse.cpp$$ was added. $head 12-25$$ More work on the bug in $cref/optimizing/CondExp/Optimize/$$ conditional expressions. $head 12-23$$ The c++11 standard includes the error function $cref erf$$ in $code cmath$$. If the c++ compiler has the error function defined in $code cmath$$, the complier version of the error function is used and it corresponds to an atomic operation. $pre $$ Fix typo in tangent reverse mode theory for $cref/Positive Orders/tan_reverse/Positive Orders Z(t)/$$. $head 12-22$$ There was a bug related to $cref/optimizing/CondExp/Optimize/$$ conditional expressions. This has been fixed. $head 12-17$$ Fix some compiler warnings and $cref speed$$ program names when using the deprecated $cref/auto-tools/auto_tools/$$ install procedure. $head 12-16$$ If the $code c++11$$ include file $code $$ defines all the standard types, they can be used by to specify $cref/cppad_tape_addr_type/cmake/cppad_tape_addr_type/cstdint/$$ and $cref/cppad_tape_id_type/cmake/cppad_tape_id_type/cstdint/$$. $head 12-15$$ Correct the title and $cref _index$$ entries for $cref forward_two$$ from first to second order. $head 11-28$$ Improve the $cref/index/_index/$$ and $code search$$ using a new version of the $code omhelp$$ documentation tool. $head 11-27$$ $list number$$ Add alignment to the $cref/get_memory/ta_get_memory/Alignment/$$ and $cref/create_array/ta_create_array/Alignment/$$ specifications and $cref/thread_alloc example/thread_alloc.cpp/$$. $lnext Advance the deprecated $cref/unix install/auto_tools/$$ utilities to autoconf-2.69 and automake-1.13.4. $lend $head 09-28$$ Fix more bugs related to optimizing condition conditional expressions. $list number$$ Using old instead of new operator indices. $lnext Not properly following dependence back through atomic operations. $lnext 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). $lnext Reverse mode not properly handling the variable number of arguments in the conditional skip operation. $lnext Reverse mode tracing not properly handling the variable number of argument operations; i.e., conditional skip and cumulative summation. $lend $head 09-27$$ Fix a bug that occurred when $cref/f.optimize/optimize/$$ was used with a function $icode f$$ that contained calls to user defined $cref atomic$$ operations and $cref/conditional expressions/CondExp/$$. $head 09-25$$ Fix a bug that occurred when $cref/f.optimize/optimize/$$ was used with a function $icode f$$ that contained $cref discrete$$ functions. $head 09-21$$ Fix a typo in documentation for $cref/any order reverse/reverse_any/$$. To be specific, $latex x^{(k)}$$ was changed to be $latex u^{(k)}$$. $head 05-28$$ $list number$$ Change the $cref/boolsparsity/speed_main/Sparsity Options/boolsparsity/$$ so that it only affects the sparsity speed tests $cref/sparse_jacobian/link_sparse_jacobian/$$ and $cref/sparse_hessian/link_sparse_hessian/$$; i.e., it is now ignored by the other tests. $lnext Improve the $cref speed$$ documentation page. $lend $head 05-27$$ $list number$$ The $cref/cppad_colpack.cpp/colpack_prefix/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 ($code cppad_colpack.cpp$$ is not an include file). $lnext If $cref colpack_prefix$$ was specified, the CppAD $cref pkgconfig$$ file was missing some information. This has been fixed. $lend $head 05-23$$ The $cref speed$$ test instructions were converted from using the old auto-tools $cref/unix install/auto_tools/$$ instructions to use the $cref cmake$$ install instructions. These instructions should work on any system, not just unix. $head 05-22$$ $list number$$ Add multiple direction for mode $cref forward_dir$$ and use it to speed up the forward version of $cref sparse_jacobian$$. Below is an example run of $cref cppad_sparse_jacobian.cpp$$ results before this change: $codep 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: $codep 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, $code multiple direction$$ items were added to the wish list (they were later removed). $lnext Improve the forward mode tracing of arguments to, and results from, user defined $cref atomic$$ operations. $lend $head 05-20$$ $list number$$ Move $code speed/adolc/alloc_mat.hpp$$ to $code speed/adolc/adolc_alloc_mat.hpp$$ so it has the same name is its $code # ifndef$$ command. $lnext Fix $code # ifndef$$ command in $code cppad/ipopt/solve_callback.hpp$$. $lnext Add $code # ifndef$$ command to $code test_more/extern_value.hpp$$. $lend $head 05-19$$ In the files $code cppad/local/asin_op.hpp$$ and $code cppad/local/acos_op.hpp$$ there were assignments of the form $code uj = 0.$$ where $code u_j$$ has type $cref/Base/glossary/Base Type/$$. These may have not be defined operations in certain cases and have been converted to $code uj = Base(0)$$. $head 05-16$$ There was a mistake in printing the arguments for $code CSumOp$$ and $code CSkipOp$$ when using the undocumented $code TRACE$$ option during forward mode (available in files of the form $codei%cppad/local/%*%sweep.hpp/%$$). This has been fixed. $head 05-14$$ $list number$$ There were some global variables in the file $code 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. $lnext There was a mistaken assert that the number of arguments for the $code BeginOp$$ was zero that caused an abort when using the undocumented $code TRACE$$ option available in files of the form $codei%cppad/local/%*%sweep.hpp/%$$. This has been fixed. $lend $head 03-18$$ $list number$$ The $cref/size_taylor/FunDeprecated/size_taylor/$$ and $cref/capacity_taylor/FunDeprecated/capacity_taylor/$$ functions were deprecated; use $cref size_order$$ and $cref capacity_order$$ instead. $lnext The documentation for $cref forward$$ and the examples $cref forward.cpp$$, $cref forward_order.cpp$$, have been improved. To be more specific, $cref forward_order$$ now references the special cases $cref forward_zero$$, $cref forward_one$$ and the new case $cref forward_two$$. $lend $head 03-17$$ The $cref/move semantics/CppAD_vector/Assignment/Move Semantics/$$ version of the $code 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.) $head 03-09$$ The documentation links $code forwardzero$$, $code forwardone$$, and $code forwardany$$ have been changed to $cref forward_zero$$, $cref forward_one$$, and $cref forward_order$$ respectively. This may affect links from other web pages to the CppAD documentation. $head 03-05$$ The names $icode p$$ and $icode q$$ in the $cref/forward/forward_order/$$, $cref/reverse/reverse_any/$$, $cref atomic_forward$$, and $cref atomic_reverse$$ functions were reverse so that $icode%p% <= %q%$$. This is only a notational change to make the arguments easier to remember. $head 03-02$$ $list number$$ In the output for the speed $cref/correct/speed_main/test/correct/$$ test, mention which tests are not available. Note that the set of available tests can depend on the $cref/list of options/speed_main/option_list/$$. $lnext In the documentation for $cref/n_sweep/sparse_jacobian/n_sweep/$$, mention that it is equal to the number of colors determined by the $cref/color_method/sparse_jacobian/work/color_method/$$. $lnext The $cref speed_cppad$$ tests were simplified by removing the printing of auxillary information related to the $cref/optimize/speed_main/option_list/optimize/$$ option. Future auxillary information will be passed back in a manner similar to $cref/n_sweep/link_sparse_jacobian/n_sweep/$$ for the sparse jacobian test. $lnext $cref/Move semantics/CppAD_vector/Assignment/Move Semantics/$$ were added to the $code CppAD::vector$$ assignment operator. $lend $head 03-01$$ $list number$$ Change the prototype for $icode row$$ and $icode col$$ in the $cref link_sparse_jacobian$$ speed test to be $code const$$; i.e., they are not changed. $lnext Move $icode x$$ near end of $cref link_sparse_hessian$$ speed test parameter list, (as is the case for $cref link_sparse_jacobian$$). $lend $head 02-28$$ The $cref/data/CppAD_vector/data/$$ function was added to the $code CppAD::vector$$ template class. $head 02-27$$ The CppAD developer documentation for the subdirectory $code cppad/ipopt$$ was not being built by the command $code bin/run_doxygen.sh$$. This has been fixed. $head 02-26$$ $list number$$ The $cref/adolc/speed_adolc/$$ and $cref/cppad/speed_cppad/$$ sparse jacobian speed tests now print out $cref/n_sweep/sparse_jacobian/n_sweep/$$. $lnext The size of some of the $cref speed$$ test cases has been increased to test behavior for larger problems. $lnext A link to $cref ode_evaluate$$ was missing in the $cref/Speed Utility Routines/speed_utility/Speed Utility Routines/$$ table. This has been fixed. $lend $head 02-23$$ The $cref/color_method/sparse_jacobian/work/color_method/$$ option was added to the sparse Jacobian calculations. This enables one to use $cref/ColPack/colpack_prefix/$$ do color the rows or columns. The speed test $cref/colpack/speed_main/Sparsity Options/colpack/$$ option was also added (but not yet implemented for $cref/sparse_hessian/link_sparse_hessian/$$ speed tests). $head 02-22$$ The program names in $cref thread_test.cpp$$ where changes from $icode%threading%_test%$$ to $codei%multi_thread_%threading%$$ where $icode threading$$ is $code openmp$$, $code pthread$$ or $code bthread$$. $head 02-17$$ Fix ambiguous call to $cref/isnan/nan/isnan/$$ during MS Visual Studio 2012 compilation. $head 02-15$$ $list number$$ The $cref/boolsparsity/speed_main/Sparsity Options/boolsparsity/$$ option was added to the $cref speed_main$$ program. $lnext The $code retape$$ option what changed to $cref/onetape/speed_main/option_list/onetape/$$ so that the default is to retape (option not present). This was done because $cref/fadbad/fadbad_prefix/$$ and $cref/sacado/sacado_prefix/$$ always retape. $lnext The documentation, and example source code, for all the speed $cref/options/speed_main/option_list/$$ was improved (made clearer). $lnext Improve the success rate for $cref speed_test.cpp$$ and $cref time_test.cpp$$. $lend $head 01-26$$ The destination directory for the $cref/cppad documentation/cmake/cmake_install_docdir/$$ is now set separately from the data directory using the $code cmake$$ option $codei% -D cmake_install_docdir=%cmake_install_docdir% %$$ This has increased the flexibility of the documentation installation and removed the need for the option $codei% -D cppad_documentation=%yes_or_no% %$$ which has been removed. $head 01-21$$ The destination directory for the cppad documentation used to be one of the following: $codei% %prefix%/%datadir%/doc/cppad-%version% %prefix%/%datadir%/doc/%postfix%cppad-%version% %$$ This has been changed by dropping the $icode version$$ number at the end of the directory name. $head 01-10$$ The change on $cref/2013-12-27/whats_new_13/12-27/$$ caused a conversion error in $cref atan2$$ when it was used with $code AD< AD >$$ arguments (and other similar cases). This has been fixed. $end