$Id: whats_new_10.omh 1771 2011-01-01 15:41:51Z bradbell $
/* --------------------------------------------------------------------------
CppAD: C++ Algorithmic Differentiation: Copyright (C) 2003-11 Bradley M. Bell

CppAD is distributed under multiple licenses. This distribution is under
the terms of the 
                    Common 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_10$$
$spell
	Wshadow
	pkg-config
	Dir
	libipopt
	const
	Linpack
	Blas
	makefile
	op
	arg
	checkpointing
	sizeof
	libcppad_ipopt.a
	Microsoft
	Lagragian
	iostream
	obj_value
	std::cout
	endl
	gcc
	retape
	hpp
	ifdef
	nlp
	ipopt_cppad/src
	CppAD
$$

$section Changes and Additions to CppAD During 2010$$

$head Introduction$$
This section contains a list of the changes to CppAD during 2010
(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-31$$
$list number$$
Add specifications for the CppAD $cref/pkgconfig/$$ files.
$lnext
Update the CppAD README file.
$lnext
Move most all CppAD development shell scripts to the $code bin$$
subdirectory of the distribution directory.
$lnext
Fix warnings generated by the $code g++$$ compiler option $code -Wshadow$$; 
for example, 
$code
sparse_pack.hpp:101:2: warning: declaration of 'end' shadows a member of 'this'
$$
$lend

$head 11-27$$
If $code NDEBUB$$ was defined,
the default CppAD $cref/error handler/ErrorHandler/$$ would return
because its $code assert$$ had no effect in this case.
This has been fixed by placing a call to $code std::exit(1)$$
after its assert.

$head 09-26$$
There was a bug 
(introduced on 09-22)
in $cref/make test/InstallUnix/make test/$$
when the $code configure$$ command was executed from a directory
other than the distribution directory
(the $cref/cppad_ipopt_nlp/$$ did not build).
This has been fixed.


$head 09-22$$
Promote $cref/cppad_ipopt_nlp/$$ from an example to a library
that gets installed 
(provided that the $cref/ipopt prefix/InstallUnix/IpoptDir/$$
is specified on the $code configure$$ command line).

$head 08-21$$
Fix problems with linking of $cref/cppad_ipopt_nlp/$$ test with
both older and newer versions of $code ipopt$$. 

$head 07-14$$
The new versions of ipopt use $code pkg-config$$ to record the location
where its necessary libraries are stored on the system.
The cppad $cref/configure/InstallUnix/Configure/$$ command has
been improved so that it can work both with versions of ipopt that use
$code pkg-config$$ and ones that don't.

$head 07-11$$
Old versions of the ipopt library were located in 
$icode%IpoptDir%/lib/libipopt.%*%$$
(see $cref/IpoptDir/InstallUnix/IpoptDir/$$),
but newer versions will be located in 
$icode%IpoptDir%/lib/coin/libipopt.%*%$$.
The directory $icode%IpoptDir%/lib/coin%$$ has been added to the library
search path so that the 
$cref/cppad_ipopt_nlp examples/cppad_ipopt_nlp/Example/$$
work with both old and new versions of ipopt.

$head 06-01$$
In the case where the preprocessor symbol $code NDEBUG$$ was defined 
(see $cref/speed/Faq/Speed/$$),
the function
$codei%
	CheckSimpleVector(const %Scalar%& %x%, const %Scalar%& %y%)
%$$
was not defined; see
$href%http://list.coin-or.org/pipermail/cppad/2010q2/000166.html%bug report%$$.
This has been fixed.

$head 04-28$$
Change the multi-level taping examples
$cref mul_level.cpp$$ and $cref mul_level_adolc.cpp$$
to be more efficient.

$head 04-26$$
Include Blas and Linpack libraries in makefile links for
$cref cppad_ipopt_nlp$$ examples.
This removes the need to use get.Blas when building Ipopt.
$pre

$$
The speed test in $code cppad_ipopt/speed$$ was missing
a link to the library $code ../src/libcppad_ipopt.a$$.
This has been fixed.

$head 04-24$$
There was a bug in the error checking done by $code cppad/local/sub_op.hpp$$
that caused the following improper abort:
$codei%
Error detected by false result for
    arg[1] < i_z
at line 337 in the file
    %...%/include/cppad/local/sub_op.hpp
%$$
This was fixed in the trunk.
It was also fixed in the release with version number $code 20100101.3$$
which can be downloaded from the CppAD
$href%http://www.coin-or.org/download/source/CppAD/%download directory%$$. 


$head 04-01$$
Some of the $cref/speed_utility/$$ library
(in $code speed/src$$) was being compiled for debugging.
This has been changed and they are now compiled with debugging off
and optimization on.

$head 03-11$$
The old $cref/reverse_any/$$ example was moved to $cref/reverse_three.cpp/$$,
the old checkpoint example is now the general case reverse example,
and a better $cref/checkpointing/checkpoint.cpp/$$ example was created.

$head 03-10$$
The $cref/optimize/$$ routine would mistakenly remove some
expressions that depended on the independent variables and that 
affected the result of certain $cref/CondExp/$$ operations.
This has been fixed. 

$head 03-09$$
Extend $cref/reverse_any/$$ so that it can be used for 
$cref/checkpointing/checkpoint.cpp/$$; i.e.,
splitting reverse mode calculations at function composition points.


$head 03-03$$
Fixed a bug in handling
$cref/vector of boolean/glossary/Sparsity Pattern/Vector of Boolean/$$ 
sparsity patterns.
(when the number of elements per set was a multiple of
$code sizeof(size_t))$$.

$head 02-11$$
The $code speed$$ directory has been reorganized and the
common part of the $cref/link functions/speed_main/Link Functions/$$,
as well as the $cref/microsoft_timer/$$,
have been moved to the subdirectory $code speed/src$$
where a library is built.

$head 02-08$$
A bug was introduced in the $cref/02-05/whats_new_10/02-05/$$
change whereby the $code make$$ command tried to build the
$code libcppad_ipopt.a$$ library even if $code IPOPT_DIR$$ was
not specified on the $cref/configure/InstallUnix/Configure/$$ command line.
This has been fixed.

$head 02-06$$
The Microsoft project files for the speed tests were extended 
so that the worked properly for the Release (as well as the Debug)
configuration, see
$cref/cppad speed test/InstallWindows/CppAD Speed Test/$$,
$cref/double speed test/InstallWindows/Double Speed Test/$$, and
$cref/speed utility example/InstallWindows/Speed Utility Example/$$.
(This required conversion from Visual Studio Version 7 to Visual Studio 2008
format.)
$pre

$$
Add an automated check for $cref/optimize/$$ bug 
fixed on $code 02-05$$. 
(Automatic checking for $cref/PrintFor/$$ bug was added on $code 02-05$$.)

$head 02-05$$
$list number$$
Simplify running all the tests by adding the
$cref/make test/InstallUnix/make test/$$ command.
$lnext
Simplify the $cref/configure/InstallUnix/Configure/$$ command by removing
need for:
$code --with-Speed$$,
$code --with-Introduction$$,
$code --with-Example$$,
$code --with-TestMore$$,
and $code --with-PrintFor$$.
$lnext
Add files that were missing in the Microsoft Visual Studio
projects; see $cref/InstallWindows/$$.
$lnext
Fix two significant bugs. One in the $cref/optimize/$$ command
and the other in the $cref/PrintFor/$$ command.
$lend

$head 02-03$$
Fix a mistakes in the test $cref/BenderQuad.cpp/$$.
In addition, the $cref/optimize/$$ routine was used to reduce the 
tape before doing the calculations.
$pre

$$
The routine $cref/opt_val_hes/$$ was added as an alternative to
$cref/BenderQuad/$$.

$head 01-26$$
Another speed improvement was made to $cref/cppad_ipopt_nlp/$$.
To be specific, the Lagragian multipliers where checked and components
that were zero were excluded form the Hessian evaluation.

$head 01-24$$
It appears that in $cref/cppad_ipopt_nlp/$$, when $code retape[k]$$ was true,
and $code L[k] > 1$$, it was possible to use the wrong operation sequence
in the calculations (though a test case that demonstrated this could not be 
produced). This is because the argument value to $latex r_k (u)$$ depends
on the value of $latex \ell$$ in the expression
$latex \[
	r_k \circ [ J_{k, \ell} \otimes n ] (x)
\] $$
(even when the value of $latex x$$ does not change).
$pre

$$
There was a bug in the $cref/ipopt_ode_check.cpp/$$ program,
for a long time,  that did not show up until now. Basically,
the check had code of the was using an undefined value.
This has been fixed.

$head 01-23$$
Improve the sparsity patterns and reduce the amount of memory
required for large sparse problems using $cref/cppad_ipopt_nlp/$$.
The speed test $code cppad_ipopt/speed$$ showed significant improvement.


$head 01-20$$
We plan to split up the 
$code ipopt_cppad/src/ipopt_cppad_nlp.hpp$$ include file.
In preparation,
the example $code ipopt_cppad$$ has been changed to $code cppad_ipopt$$.
This will facilitate using $code CPPAD_IPOPT_*$$ for the
$code # ifdef$$ commands in the new include files
(note that they must begin with $code CPPAD$$).


$head 01-18$$
The $code ipopt_cppad$$ subdirectory of the distribution
has been split into an $code src$$, $code example$$, and $code speed$$
subdirectories.
The $code example$$ ($code speed$$)
subdirectory is where one builds the $cref/ipopt_cppad_nlp/cppad_ipopt_nlp/$$ examples
($cref%speed tests%ipopt_ode_speed.cpp%$$).

$head 01-04$$
The following items have been fulfilled and
hence were removed for the $cref/WishList/$$:
$list number$$
If an exception occurs before the call to the corresponding
$xref/ADFun/$$ constructor or $cref/Dependent/$$, 
the tape recording can be stopped using $cref/abort_recording/$$.

$lnext
A speed test for $cref/ipopt_cppad_nlp/cppad_ipopt_nlp/$$ was added; see
$cref/ipopt_ode_speed.cpp/$$.

$lnext
The $cref/optimize/$$ command uses hash coding to check
when an expression is already in the tape and can be reused.

$lnext
The $cref/optimize/$$ command removes operations that
are not used by any of the dependent variables.

$lnext
The $cref/ad_in_c.cpp/$$ example demonstrates how to connect
CppAD to an arbitrary scripting language.

$lnext
The vector of sets option has been added to sparsity calculations; 
see $cref/sparsity pattern/glossary/Sparsity Pattern/$$.

$lend


$end
