$Id: whats_new_14.omh 3529 2014-12-30 15:36:27Z bradbell $
/* --------------------------------------------------------------------------
CppAD: C++ Algorithmic Differentiation: Copyright (C) 2003-14 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<double> >
%$$
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/InstallUnix/$$ install procedure.

$head 12-16$$
If the $code c++11$$ include file $code <cstdint>$$
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/InstallUnix/$$ 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/InstallUnix/$$ 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, other
$cref/multiple direction/WishList/Multiple Directions/$$ items
were added to the wish list.
$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<double> >$$ arguments (and other similar cases).
This has been fixed.

$end
