$Id: whats_new_04.omh 3686 2015-05-11 16:14:25Z 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_04$$ $spell cppad.hpp deps executables Runge Rhs aclocal config Makefile ublas Autoconf Automake cppad yy mm dd Faq acos asin sqrt exp usr nmake mak namespace CppADvector atan cos retape Vec const std Hess depricated Det Lu dsp Arg Cpp Microsoft Taylor dep ind $$ $section Changes and Additions to CppAD During 2004$$ $head Introduction$$ This section contains a list of the changes plus future plans for CppAD during 2004 (in reverse order by date). The purpose of this section is to assist you in learning about changes between various versions. $head 12-11$$ The documentation for the CppAD error macros was improved. The package title in $cref cppad$$ was changed. The documentation for $cref/CppAD::vector/CppAD_vector/$$ was improved and the corresponding source code $code cppad/vector.hpp$$ was included. $head 12-09$$ The $cref LuSolve$$ and $code OdeRunge$$ source code was modified to make the more in line with the introduction to C++ AD book ($code OdeRunge$$ has been replaced by $cref Runge45$$). In addition, the examples $code OdeRunge.cpp$$ and $cref lu_solve.cpp$$ were modified to make the simpler. (The more complex version of $code OdeRunge.cpp$$ was moved to the $code TestMore$$ directory.) $head 12-03$$ The $cref Poly$$ documentation and source code were modified to make them more in line with the introduction to C++ AD book. $head 11-17$$ Changing to Autoconf and Automake on $cref/08-24/whats_new_04/08-24/$$ mistakenly forgot the $code -Wall$$ compiler switch (all warnings). This has been added and the corresponding warnings have been fixed. $head 11-16$$ The 11-15 Debug version would not compile under Visual C++ version 7.0 because a declaration of $code LessThanOrZero$$ was missing. This has been fixed. $head 11-15$$ The $cref ForOne$$ and $cref RevOne$$ easy to use $cref/drivers/Drivers/$$ were added. $head 11-14$$ The notation in the $cref ADFun$$ sections was changed to make the $cref Forward$$ and $cref Reverse$$ routines easier to use. $head 11-13$$ The Taylor coefficient vector and matrix notation was folded into just $cref/Taylor coefficients/glossary/Taylor Coefficient/$$. $head 11-12$$ If $code NDEBUG$$ is not defined during compile time, all $codei%AD<%Base%>%$$ $cref/comparison/Compare/$$ operations are checked during $cref/zero order/forward_zero/$$ forward mode calculations. The $cref CompareChange$$ function returns the number of comparison operations that have changed. $head 11-10$$ The $cref get_started.cpp$$ example was changed to use the $cref Jacobian$$ driver. In addition, more $cref/index/_index/$$ entries, that point to the $cref/easy to use drivers/Drivers/$$, were added. $head 11-04$$ The Microsoft Visual Studio project file $code example/Example.dsp/$$ was missing some new examples that needed to be linked in the install windows procedure. This has been fixed. $head 11-02$$ The $cref/unix installation/auto_tools/$$ required the user to touch the files to get the dates in proper order. This is no longer necessary. $head 11-01$$ Some of the dependency directories and files, for example $code PrintFor/.deps$$ and $code PrintFor/.deps/PrintFor.Po$$ had an extra $code ?$$ at the end of their names. This seems to have been fixed by using a newer version of the autoconf and automake tools. $head 10-29$$ Add the example and test $cref simple_vector.cpp$$ to the $cref SimpleVector$$ documentation. $pre $$ The specifications for $cref/preprocessor symbols/preprocessor/$$ state that all the CppAD preprocessor symbols begin with $code CppAD$$ (so they do not conflict with other packages). Some preprocessor symbols in the file $code cppad/config.h$$ did began with $code WITH_$$. This has been fixed. $head 10-28$$ The examples $cref hes_lu_det.cpp$$, $cref hes_minor_det.cpp$$, $cref jac_lu_det.cpp$$, and $cref jac_minor_det.cpp$$ used the negative of a $code size_t$$ value. The value has been changed to an $code int$$. $pre $$ The $cref/CppAD::vector/CppAD_vector/$$ template class was converted into a library routine so it can be used separately from the rest of CppAD. $head 10-27$$ The $cref PrintFor$$ example was moved to its own directory because the conversion from VC 6.0 to VC 7.0 projects did not work when there were multiple executables in one project file. The $cref install$$ instructions were modified to reflect this change. $head 10-21$$ One declaration (for the $cref Value$$ function) was missing from the file $code cppad/local/Declare.h$$. This has been added and CppAD should now compile and run under both Microsoft VC 6.0 and 7.0. $head 10-19$$ The current version of CppAD has a problem compiling under Microsoft Visual C++ version 7.0 (it compiles and works under version 6.0). The problem appears to be due to a closer agreement between VC 7.0 and the C++ standard for declaring templates functions as friends. Some friend declarations were removed and others were made more specific in order to migrate the a version that will compile and run using VC 7.0. $head 10-16$$ The example $cref compare.cpp$$ displayed the text from $cref bool_fun.cpp$$ by mistake. This has been fixed. $pre $$ The $cref Compare$$ operators have been extended to work with $code int$$ operands. $head 10-06$$ The test $code TapeDetLu$$ was added to $code speed_cppad/DetLuSpeed.cpp$$ and $code TapeDetMinor$$ was added to $code speed_cppad/DetMinorSpeed.cpp$$. These tests just tape the calculations without computing any derivatives. Using this, and the other tests, one can to separate the taping time from the derivative calculation time. $pre $$ The windows installation steps do not build a $code config.h$$ file. Hence a default $code config.h$$ file was added to the distribution for use with Microsoft Visual Studio. $pre $$ The $code Distribute$$ section of the developer documentation was brought up to date. $pre $$ Links to the ADOLC and FADBAD download pages were added to the $cref/unix installation/auto_tools/$$ instructions. $head 09-29$$ The include files for the $cref library$$ are now included by the root file $code cppad/cppad.hpp$$. They can still be included individually with out the rest of the CppAD package. $head 09-26$$ The routine $code OdeRunge$$ was modified so that it will now integrate functions of a complex arguments. This was done by removing all uses of greater than and less than comparisons were removed. ($code OdeRunge$$ has been replaced by $cref Runge45$$). $pre $$ The changes on $cref/09-21/whats_new_04/09-21/$$ did not fix all the file date and time problems; i.e., automake was still running in response to the $cref/unix installation/auto_tools/$$ $code make$$ command. $head 09-23$$ There was a reference to $icode B$$ that should have been $icode X$$ in the description of the $cref/X/LuSolve/X/$$ argument of $code LuSolve$$. This has been fixed. $head 09-21$$ The $cref CondExp$$ function has been modified so that it works properly for $codei%AD< AD<%Base%> >%$$ types; i.e., it now works for multiple levels of taping. $pre $$ The date of the files $code aclocal.m4$$ and $code config.h.in$$ were later than the date of top level $code Makefile.am$$. This caused the $code make$$ command during the $cref/unix installation/auto_tools/$$ to try to run $code autoconf$$ and this did not work on systems with very old versions of $code autoconf$$. This has been fixed. $head 09-13$$ The examples that are specific to an operation were moved to be below that operation in the documentation tree. For example $cref add.cpp$$ is below $cref ad_binary$$ in the documentation tree. $head 09-10$$ The version released on 04-09-09 did not have the new file $code PrintFor.h$$ in $code cppad/local$$. This has been fixed. $pre $$ The $icode Base$$ type requirements were simplified. $pre $$ The $cref/Unix installation/auto_tools/$$ instructions were modified so just one make command was executed at the top level. This was necessary because the order of the makes is now important (as previously suggested, the makes did not work properly). $head 09-09$$ The $cref PrintFor$$ function was added so that users can debug the computation of function values at arguments that are different from those used when taping. $head 09-07$$ In the $cref/Unix installation/auto_tools/$$ instructions place $code ./$$ in front of current directory program names; for example, $code ./GetStarted$$ instead of $code GetStarted$$ (because some unix systems do not have the current directory in the default executable path). $head 09-04$$ A library containing the $cref SpeedTest$$ and $cref NearEqual$$ object files was added to the distribution. $pre $$ All of the include files of the form $codei%%$$ were moved to $codei%%$$. $head 09-02$$ Some more messages were added to the output of $code configure$$ during the $cref/Unix installation/auto_tools/$$. $pre $$ The suggested compression program during Windows installation was changed from $href% http://www.7-zip.org% 7-zip %$$ to $href% http://www.winzip.com% WinZip %$$. $head 08-27$$ The error messages printed by the default version of the CppAD error macros had $code YY-MM-DD$$ in place of the date for the current version. This has been fixed. $pre $$ All the correctness tests are now compiled with the $code -g$$ command line option (the speed tests are still compiled with $code -O2 -DNDEBUG$$). $pre $$ The $cref/installation instructions/Install/$$ for Unix and Windows were split into separate pages. $head 08-25$$ The $cref/installation/Install/$$ now automates the replacement of $cref/CppAD::vector/CppAD_vector/$$ by either the $code std::vector$$ or $code boost::numeric::ublas::vector$$. $head 08-24$$ This date marks the first release that uses the Gnu tools Autoconf and Automake. This automates the building of the make files for the $cref/installation/Install/$$ and is the standard way to distribute open source software. This caused some organizational changes, for example, the $cref/GetStarted/get_started.cpp/$$ example now has its own directory and the distribution directory is named $codei% cppad-%yy%-%mm%-%dd% %$$ where $icode%yy%-%mm%-%dd%$$ is the year, month and date of the distribution. (Note the distribution directory is different from the directory where CppAD is finally installed.) $head 08-12$$ Move $code OdeExplicit$$ into the $code cppad/library/$$ directory. In addition, change it so that the vector type was a template argument; i.e., works for any type of vector (not just $code CppADvector$$). $head 07-31$$ Move $cref LuSolve$$ into the $code cppad/library/$$ directory. In addition, change it so that the vector type was a template argument; i.e., works for any type of vector (not just $code CppADvector$$). $head 07-08$$ The file $code cppad/example/NearEqual.h$$ has been moved to $code cppad/example/NearEqualExt.h$$ because it contains extensions of the $cref NearEqual$$ routine to $code AD$$ types. $head 07-07$$ The $code double$$ and $code std::complex$$ cases for the $cref NearEqual$$ routine arguments has been moved to the general purpose $cref library$$. $head 07-03$$ The CppAD error macros names $code CppADExternalAssert$$ and $code CppADInternalAssert$$ were changed to $code CppADUsageError$$ and $code CppADUnknownError$$. The $cref SpeedTest$$ routine was changed to use $code CppADUsageError$$ instead of a C assert. $head 07-02$$ The $cref SpeedTest$$ output was improved so that the columns of values line up. Previously, this was not the case when the number of digits in the size changed. $head 06-29$$ Added code to trap and report memory allocation errors during $code new$$ operations. $head 06-25$$ A discussion of the order dependence of the $cref/assignment/ad_assign/$$ operator and the $cref/independent function/Independent/$$ was added to the $cref/Faq/Faq/Assignment and Independent/$$. In addition, a similar discussion was added to the documentation for the $cref Independent$$ function. $pre $$ The definition of a $cref/parameter/glossary/Parameter/$$ and $cref/variable/glossary/Variable/$$ were changed to reflect that fact that these are time dependent (current) properties of an $codei%AD<%Base%>%$$ object. $head 06-12$$ All of the $cref/arithmetic operators/Arithmetic/$$ (except for the unary operators) can now accept $code int$$ arguments. The documentation for these arguments has been changed to reflect this. In addition, the corresponding test cases have been changed to test this and to test high order derivative cases. The old versions of these tests were moved into the $code cppad/Test$$ directory. $head 06-04$$ The $cref/atan2/atan2/$$ function was added. $head 06-03$$ The $code asin$$ and $code acos$$ $cref unary_standard_math$$ functions were added. $pre $$ There was a bug the reverse mode theory and calculation of derivatives of $cref sqrt$$ for fourth and higher orders. This has been fixed. In addition, the following examples have been changed so that they test derivative up to fifth order: $cref/asin/Asin.cpp/$$, $cref/atan/atan.cpp/$$, $cref/cos/cos.cpp/$$, $cref/exp/exp.cpp/$$, $cref/log/log.cpp/$$, $cref/sin/sin.cpp/$$, $cref/sqrt/sqrt.cpp/$$. $head 06-01$$ There was a bug in the $cref atan$$ function $cref/forward mode/Forward/$$ calculations for Taylor coefficient orders greater than two. This has been fixed. $head 05-30$$ The $cref/sin/sin.cpp/$$ and $cref/cos/cos.cpp/$$ examples were changed so that they tested higher order derivatives. $head 05-29$$ The forward mode recursion formulas for each of the $xref/ ForwardTheory/ Standard Math Functions/ Cases that Apply Recursion Above/ standard math functions/ 1 /$$ has been split into separate sections. $pre $$ A roman (instead of italic) font was used for the name of for the name of each of the standard math functions in the assumption statements below the section for the standard math functions. For example, $latex \sin(x)$$ instead of $latex sin(x)$$. $head 05-26$$ In the documentation for $cref Poly$$, the reference to $code example/Poly.h$$ was corrected to $code cppad/library/Poly.h$$. $pre $$ In the documentation for $cref SpeedTest$$, the reference to $code Lib/SpeedTest.h$$ was corrected to $code cppad/library/SpeedTest.h$$. In addition, the example case was corrected. $pre $$ In $cref Reverse$$, the definition for $latex U(t, u)$$ had $latex t^p-1$$ where it should have had $latex t^{p-1}$$. This has been fixed. $head 05-25$$ The special case where the second argument to the $cref pow$$ function is an $code int$$ has been added. $head 05-14$$ Change all of the include syntax $codei% # include "%filename%" %$$ to the syntax $codei% # include <%filename%> %$$ so that examples and other use better reflect how one would use CppAD after it was installed in a standard include directory; for example $code /usr/local/include/cppad$$. $pre $$ The user documentation was moved from the directory $code cppad/User$$ to the directory $code cppad/Doc$$. $pre $$ The directory $code cppad/Lib$$ was moved to $code cppad/library$$ to reflect that fact that it is not what one expects in a standard $code lib$$ directory or a standard $code include$$ directory. $head 05-12$$ The string $code YY-MM-DD$$ in the preprocessor symbol $code CppADVersion$$ was not being replaced by the current date during distribution. This resulted in the $code CppADExternalAssert$$ macro printing $code YY-MM-DD$$ where is should have printed the date of distribution. This has been fixed. $pre $$ All of the include commands of the form $codei% # include "include/%name%.h" # include "lib/%name%.h" %$$ have been changed to the form $codei% # include "cppad/include/%name%.h" # include "cppad/lib/%name%.h" %$$ This will avoid mistakenly loading a file from another package that is in the set of directories being searched by the compiler. It is therefore necessary to specify that the directory above the $code CppAD$$ directory be searched by the compiler. For example, if $code CppAD$$ is in $code /usr/local/cppad$$, you must specify that $code /usr/local$$ be searched by the compiler. Note that if $code /usr/local/cppad/$$ is no longer searched, you will have to change $codep # include "cppad.hpp" $$ to $codep # include "cppad/cppad.hpp" $$. $pre $$ The window $code nmake$$ file $code Speed/Speed.mak$$ was out of date. This has been fixed. $head 05-09$$ Move $cref Poly$$ and $cref SpeedTest$$ into the $code cppad/Lib$$ directory and the $code CppAD$$ namespace. $head 05-07$$ The $cref/divide operator tests/div.cpp/$$ were extended to include a second order derivative calculation using reverse mode. $pre $$ The $cref Poly$$ routine was modified to be more efficient in the derivative case. In addition, it was changed to use an arbitrary vector for the coefficients (not just a $code CppADvector$$). $head 05-04$$ A reloading of the data base caused the files $code include/atan.h$$ and $code include/cos.h$$ to be mistakenly started with lower case letters. These have been moved to $code include/Atan.h$$ and $code include/Cos.h$$ respectively. $head 05-03$$ The $cref Reverse$$ mode calculations for $cref/conditional expressions/CondExp/$$ were mistakenly left out. This has been fixed. $head 04-29$$ The unary functions, such as $cref sin$$ and $cref cos$$, were not defined for elements of an $cref VecAD$$ vector. This has been fixed. $head 04-28$$ The operator $cref/< >%$$ class had values that were variables in the $codei%AD<%Base%>%$$ class. This has been fixed. $head 04-01$$ The name of the class that tapes indexing operations was changed from $code ADVec$$ to $cref VecAD$$. This class was extended so that the value of elements in these vectors can be variables (need not be $cref/parameters/glossary/Parameter/$$). $head 03-30$$ Do some simple searching of the parameter table during taping avoid multiple copies of parameters on tape (use less tape memory). $head 03-28$$ The version $cref/ADVec/VecAD/$$, a vector class that tapes indexing operations, is now available. It is currently restricted by the fact that all the values in the vector must be $cref/parameters/Glossary/Parameter/$$. $head 03-25$$ The internal taping structure has been changed to have variable length instructions. This is to save memory on the tape. In addition, it may help in the implementation of the vector class that tracks indexing. (A now functioning version of this class is described in $cref VecAD$$.) $head 03-18$$ A change was made to the way parameter values are stored on the tape. This resulted in a significant savings in the amount of memory required. $head 03-17$$ Change the return type for $cref SpeedTest$$ from $code const char *$$ to $code std::string$$. The memory required for the largest test cases was added to the $cref speed_cppad$$ tests output. $head 03-15$$ The comparison between ADOLC and CppAD for the $code DetLuADOLC.cpp/$$ example was returning an error (because it was checking for exact equality of calculated derivatives instead of nearly equal). This has been fixed. $head 03-12$$ The user defined unary functions were removed and the user defined $cref/discrete functions/Discrete/$$ were added. These discrete functions add the capability of conditional expressions (alternate calculations) being included in an $cref ADFun$$ object. $head 03-11$$ The classes $cref det_by_minor$$ and $cref det_by_lu$$ were added and used these to simplify the examples that compute determinants. $head 03-09$$ The routines $code Grad$$ and $code Hess$$ have been removed. You should use $cref Jacobian$$ and $cref Hessian$$ instead. $head 03-07$$ The driver routines $cref Hessian$$ and $cref RevTwo$$ has been added. These to compute specialized subsets of the second order partials. $pre $$ Documentation errors in $cref ForTwo$$ and $cref Reverse$$ were fixed. The $cref example$$ documentation was reorganized. $head 03-06$$ The driver $cref ForTwo$$ has been added. It uses forward mode to compute a subset of the second order partials. $pre $$ Split all of the "example" and "test" index entries that come from $codei%cppad/example/%*%.cpp%$$ into sorted subheadings. $head 03-05$$ The $code Grad$$ routine, which only computed first derivatives of scalar valued functions, has been replaced by the $cref Jacobian$$ routine which computes the derivative of vector valued functions. $head 03-04$$ The bug reported on $cref/02-17/whats_new_04/02-17/$$ was present in all the operators. These have all been fixed and tests for all the operators have been added to the $code cppad/Test$$ directory. $pre $$ The $cref/f.Parameter()/seq_property/Parameter/$$ function was added so that one can count how many components of the range space depend on the value of the domain space components. This helps when deciding whether to use forward or reverse mode. $head 03-03$$ Special operators were added to distinguish the cases where one of the operands is a $cref/parameter/glossary/Parameter/$$. This reduced the amount of branching that is necessary when executing $cref Forward$$ and $cref Reverse$$ calculations. $pre $$ The $cref Independent$$ and $cref/Parameter/seq_property/Parameter/$$ functions were moved below $cref ADFun$$ in the documentation. $head 03-01$$ The DetLuADOLC.cpp, DetLu case was added to the ADOLC comparison tests. $head 02-29$$ Under certain optimization flag values, and on certain systems, an error was reported by the ADOLC correctness comparison. It turned out that CppAD was not initializing a particular index when debugging was turned off. This has been fixed. $head 02-28$$ A set of routines for comparing CppAD with ADOLC has been added to the distribution. In addition, documentation for compiling and linking the $cref/Examples/example/$$ and $cref/Speed Tests/speed_cppad/$$ has been added. $head 02-21$$ If you use the user defined unary atomic functions there is a restriction on the order of the derivatives that can be calculated. This restriction was documented in the user defined unary function $cref Forward$$ and $cref Reverse$$. (These unary functions were removed on $cref/03-12/whats_new_04/03-12/$$.) $head 02-20$$ A user interface to arbitrary order $cref/reverse mode/Reverse/$$ calculations was implemented. In addition, the $cref ADFun$$ member functions $code Rev$$ and $code RevTwo$$ were removed because it is easier to use the uniform syntax below: $table $bold Old Syntax$$ $cnext $bold Uniform Syntax$$ $rnext $icode%r1% = %f%.Rev(%v%)%$$ $cnext $icode%r1% = %f%.Reverse(1, %v%)%$$ $rnext $icode%q1% = %f%.RevTwo(%v%)%$$ $cnext $icode%r2% = %f%.Reverse(2, %v%)%$$ $rnext $cnext $icode%q1%[%i%] == %r2%[2 * %i% + 1]%$$ $tend $pre $$ The $cref Theory$$ section has been completely changed so that it corresponds to the arbitrary order calculations. (Some of this change was made when the arbitrary forward mode interface was added on $cref/04-02-15/whats_new_04/02-15/$$. $pre $$ The directory $code cppad/Test$$ has been added. It contains tests cases that are not intended as examples. $head 02-17$$ There was a bug in the way CppAD handled the parameters zero and one when they were variables on a lower level tape; i.e. x might be a parameter on an $codei%AD< AD<%Base%> >%$$ tape and a its value might be a variable on the $codei%AD<%Base%>%$$ tape. This bug in the multiply and divide routines has been fixed. $pre $$ There was a bug that is some cases reported a divide by zero error when the numerator was zero. This has been fixed. $head 02-16$$ A bug in $cref Forward$$ prevented the calculation of derivatives with higher order than two. In addition, this checking for user errors in the use of $code Forward$$ was also faulty. This has been fixed. $pre $$ The Microsoft project file $code example\Example.dsp$$ was out of date. This has been fixed. $pre $$ The example that $cref/tapes derivative calculations/mul_level/$$ has been changed to an application of $cref/Taylor's method/mul_level_ode.cpp/$$ for solving ordinary differential equations. $head 02-15$$ A user interface to arbitrary order $cref/ forward mode/Forward/$$ calculations was implemented. In addition, the $cref ADFun$$ member functions $code Arg$$, $code For$$ and $code ForTwo$$ were removed because it is easier to use the uniform syntax below: $table $bold Old Syntax$$ $cnext $bold Uniform Syntax$$ $rnext $icode%v0% = %f%.Arg(%u0%)%$$ $cnext $icode%v0% = %f%.Forward(0, %u0%)%$$ $rnext $icode%v1% = %f%.For(%u1%)%$$ $cnext $icode%v1% = %f%.Forward(1, %u1%)%$$ $rnext $icode%v2% = %f%.For(%u2%)%$$ $cnext $icode%v2% = %f%.Forward(1, %u2%)%$$ $tend $head 02-12$$ All of the derivative calculations are now done using arbitrary order Taylor arithmetic routines. The $cref Theory$$ section was changed to document this method of calculation. $head 02-01$$ The definition of a $cref/Taylor coefficient/glossary/Taylor Coefficient/$$ was changed to include the factorial factor. This change was also made to the output specifications for the $code FunForTwo$$ routine. $head 01-29$$ There were some bugs in the $code FunArg$$ function that were fixed. $list number$$ If one of the dependent variables was a $cref/parameter/glossary/Parameter/$$ $code FunArg$$ did not set it's value properly. (All its derivatives are zero and this was handled properly.) $lnext The user defined unary functions were not computed correctly. $lend The specifications for the usage and unknown CppAD error macros were modified so that they could be used with out side effects. $head 01-28$$ Some corrections and improvements were made to the documentation including: $code CppADvector$$ was placed before its use, a reference to $code Ode_ind$$ and $code Ode_dep$$ was fixed in $code OdeImplicit$$. $head 01-22$$ The specifications for the routine $code FunForTwo$$ was changed to use $cref/Taylor coefficients/glossary/Taylor Coefficient/$$. This makes the interface to CppAD closer to the interface for $href%https://projects.coin-or.org/ADOL-C%ADOLC%$$. $end