$Id: whats_new_10.omh 2683 2012-12-30 18:17:03Z bradbell $
/* --------------------------------------------------------------------------
CppAD: C++ Algorithmic Differentiation: Copyright (C) 2003-12 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_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 $code 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_dir/InstallUnix/ipopt_dir/$$
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%ipopt_dir%/lib/libipopt.%*%$$
(see $cref/ipopt_dir/InstallUnix/ipopt_dir/$$),
but newer versions will be located in 
$icode%ipopt_dir%/lib/coin/libipopt.%*%$$.
The directory $icode%ipopt_dir%/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.
(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
$code 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.
$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 bender_quad.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_nlp_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
$cref 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
