\(\newcommand{\W}[1]{ \; #1 \; }\) \(\newcommand{\R}[1]{ {\rm #1} }\) \(\newcommand{\B}[1]{ {\bf #1} }\) \(\newcommand{\D}[2]{ \frac{\partial #1}{\partial #2} }\) \(\newcommand{\DD}[3]{ \frac{\partial^2 #1}{\partial #2 \partial #3} }\) \(\newcommand{\Dpow}[2]{ \frac{\partial^{#1}}{\partial {#2}^{#1}} }\) \(\newcommand{\dpow}[2]{ \frac{ {\rm d}^{#1}}{{\rm d}\, {#2}^{#1}} }\)
2015¶
View page sourceRelease Notes for 2015¶
mm-dd¶
12-31¶
The download instructions were modified to have more mention of git and less mention of subversion.
12-29¶
Separate to_string from ad_to_string so that it can be used without the rest of CppAD; i.e., by including
#
include <cppad/utility/to_string.hpp>
12-28¶
Add the to_string utility.
Add base_to_string to the Base type requirements.
A Base Requirements item was added to the wish list.
The wish_list item to reorganize the include directory has been removed. It was completed when the utilities was moved to
cppad/utility
; see 11-30 .
12-08¶
A convention was included for addon Library Files .
Change new utility specifications to allow for individual file includes; e.g.,
<cppad/utility/vector.hpp>
.
12-01¶
Fix problem with configure install handling of the
deprecated files.
This included changing the autotools
--with-implicit_ctor
option to configure .
This was removed on
2017-02-10 .
11-30¶
The
library
section has been moved to the utilities section. In addition, the corresponding source code files incppad
have been moved tocppad/utility
.The individual utility include files have been deprecated; see include_deprecated . For example,
# include <cppad/runge_45.hpp>
You should us the utility include instead; i.e.,
# include <cppad/utility.hpp>
The numeric_ad routines where moved from the
library
the a separate documentation section.Change
cmake_install_prefix
to cppad_prefix and Changecmake_install_postfix
to cppad_postfix .Change
cppad_implicit_ctor_from_any_type
to the cmakecppad_deprecated
option and change its specifications to refer to all deprecated features.
11-25¶
CppAD now installs the object library
-lcppad_lib
to be included when linking. Currently, it is only required when colpack_prefix is specified on the CMake Command .
It is no longer necessary to compile and link the file
cppad_colpack.cpp
when colpack_prefix is specified during the install process; see CMake Command . (It is included in
cppad_lib
).
11-24¶
The
check_for_nan
output now includes the first dependent variable index that isnan
in its error message.Change the deprecated include reference
pow_int.h
topow_int.hpp
in pow_int .
11-14¶
There was a bug in the new get_check_for_nan feature that writes independent variable values to a temporary file; see 11-06 below. This has been fixed.
11-08¶
Fixed a bug in the RevSparseJac routine. To be specific, the argument r was transposed from what the documentation said. (This has no effect in the usual case where r is the identity.)
Added the
bool_sparsity.cpp
examples which show how to conserve memory when computing sparsity patterns. (This has since been replaced by rc_sparsity.cpp .)Modified the ipopt_solve procedure to take advantage of the memory conserving sparsity pattern calculations when Retape is false.
Added the bit_per_unit function to the
vectorBool
class. (This aids the memory conservation mentioned above.)
11-06¶
It is often difficult to determine what cause a nan
result
during an operation with an ADFun object.
The new feature
get_check_for_nan was
added to make this easier.
10-21¶
There was a mistake in the documentation for index_sort ,
the argument ind is not const
.
10-16¶
Add a PrintFor optimization wish list item. This has been done, see no_print_for_op .
10-06¶
Add the
CPPAD_USE_CPLUSPLUS_2011
,CPPAD_NUMERIC_LIMITS
, andCPPAD_STANDARD_MATH_UNARY
, to the preprocessor section. In addition, remove checking that all user API preprocessor symbols are in this section form the wish_list .Alphabetize and make some corrections to list of examples .
The documentation for some of the deprecated features was missing the date when they were deprecated. This has been fixed; e.g., see Deprecated 2012-12-26 .
10-04¶
base_require : Add the macro CPPAD_NUMERIC_LIMITS to aid in setting the numeric limits for a user defined Base class.
base_require : The quiet_NaN function has been added to the CppAD
numeric_limits
. Note the reason for not using std::numeric_limits .The nan(zero) function computes a
nan
by dividing zero by zero which results in a warning when using some compilers. This function has been deprecated and the corresponding wish_list item has been removed.Move documentation for zdouble to deprecated section and documentation for numeric_limits to ADValued .
Remove all uses of, and references to, zdouble from the examples .
10-03¶
base_require :
It is no longer necessary to define the specialization for
CppAD::epsilon<
Base> () for each Base type.
10-02¶
There was a bug in test_more/azmul.cpp
whereby the vector
z
had the wrong dimension (in two places). This has been fixed.
09-28¶
Use the current atomic_two_option setting to determine which type of sparsity patterns to use for dependency calculations during optimize procedure. It used to be that the bool_sparsity_enum was used when pack_sparsity_enum was specified.
It is not longer an error to take the derivative of the square root function, because the result may be the part of a conditional expression that is not used.
Update the wish_list section.
09-27¶
It is no longer necessary to use the zdouble class when computing with multiple levels of AD conditional expressions and reverse mode .
The
zdouble
class has been deprecated. Use the azmul function for absolute zero (when it is needed).
09-25¶
base_require :
absolute zero multiplication
is now required for user defined base types.
This makes it possible to combine
conditional expression ,
multiple levels ,
Reverse , and
a base type that has standard ieee multiplication; e.g., double
.
In other words, not all multiplications will need to have an
absolute zero (as is the case with the zdouble base class.
09-24¶
Fix some Visual Studio 2013 C++ level four /W4
warnings
(previous warnings were are level 3).
In addition, disable warning
4100
unreferenced formal parameter,
and warning
4127
conditional expression is constant.
09-23¶
CppAD can optionally test its use with the external packages eigen , ipopt , and colpack . In addition, it can compare its speed with the external AD packages adolc , fadbad , and sacado . The scripts that download and install a local copy of these external packages have been modified to automatically skip installation when it has already been done.
09-21¶
Improve discussion of windows download and testing. This discussion has since been removed; see +:ref:2018@mm-dd@05-20 in whats new for 2018.
09-20¶
Add the cppad_profile_flag to the list of possible
cmake
command arguments.More of the warnings generated by Visual Studio 2013 have been fixed. One remaining warning is about
asctime
andgmtime
not being thread safe.
09-19¶
There was a bug in the numeric_limits section of the example user defined base type. This has been fixed.
There were some compile and link errors when running the tests using Visual Studio 2013. These have been fixed.
Many of the warnings generated by Visual Studio 2013 have been fixed.
09-16¶
The conditional expressions, CondExp , were not working
for the type < CppAD::AD<adouble> >
where adouble
is the ADOL-C AD type.
This has been fixed by adding a call to
CPPAD_COND_EXP_REL in
base_adolc.hpp
.
09-03¶
There was a bug in the vectorBool Assignment . To be specific, it not allow a size zero vector to be assigned using a vector any other size. This has been fixed.
The addition of the pack option on 08-31 introduced a bug in the calculation of RevSparseHes . The
chkpoint_one_get_started.cpp
example was changed to demonstrate this problem and the bug was fixed.
09-02¶
The Dependency Pattern was not being computed correctly for the sign , Discrete , and VecAD operations. This has been fixed. This could have caused problems using checkpoint functions that used any of these operations.
08-31¶
Mention the fact that using checkpoint functions can make recordings faster .
Add the pack sparsity option for atomic_two operations.
Add the pack sparsity option to chkpoint_one functions.
Added the
example/atomic/sparsity.cpp
example.Remove mention of OpenMP from thread_alloc::thread_num (thread_alloc never was OpenMP specific).
08-30¶
The sparsity argument was added to the
atomic_base
constructor and the chkpoint_one constructor.Make
atomic_two_norm_sq.cpp
an example with no set sparsity andatomic_two_reciprocal.cpp
an example with no bool sparsity.Improve discussion of
Independent
and Parallel Mode .
08-29¶
Some asserts in the checkpoint implementation were not using the CppAD ErrorHandler . This has been fixed.
08-28¶
Free checkpoint function sparsity patters during Forward operations that use its atomic operation. (They kept between sparsity calculations because they do not change.)
08-26¶
Fix a bug in RevSparseJac when used to compute sparsity pattern for a subset of the rows in a checkpoint function.
08-25¶
Reduce the amount of memory required for checkpoint functions (since sparsity patterns are now being held so they do not need to be recalculated).
08-20¶
Added an example that computes the sparsity pattern for a subset of the Jacobian and a subset of the Hessian .
08-17¶
Do some optimization of the checkpoint feature so that sparsity patterns are stored and not recalculated.
Fix a warning (introduced on 08-11) where the
CppAD::vector
data function was being shadowed by a local variable.The source code control for CppAD has a link to
compile
, instead of real file. This sometimes caused problems with the deprecated configure install procedure and has been fixed.
08-16¶
08-09¶
Add the preservation of data to the specifications of a CppAD::vector
during a resize when the
capacity of the vector does not change.
In addition, added and example of this to cppad_vector.cpp .
08-06¶
The zdouble numeric_limits were not being computed properly. This has been fixed.
07-31¶
Added the sparse_sub_hes.cpp example, a way to compute the sparsity for a subset of variables without using multiple levels of AD .
06-16¶
There were some Unknown asserts when the sparsity pattern p in sparse_jacobian and sparse_hessian was not properly dimensioned. These have been changed to Known asserts to give better error reporting.
In the special case where sparse Hessian work or sparse Jacobian work was specified and the set of elements to be computed was empty, the work vector is empty after the call (and it appears to need to be calculated on subsequent calls). This resulted in a bug when the sparsity pattern was not provided on subsequent calls (and has been fixed).
06-11¶
Some C++11 features were not being taken advantage of after the change on 05-10 . To be specific, move semantics, the high resolution clock, and null pointers. This has been fixed.
In the example zdouble.cpp, the vector
a1z
was not properly dimensioned. This has been fixed and the dimensions of all the variables have been clarified.
06-09¶
Add an abort_op_index item to the wish list. It has since been removed (domain errors may not affect the results due to conditional expressions ).
06-07¶
Add a absolute zero item and a numeric_limits item to the wish list. The absolute zero item has been completed and the numeric limit item was modified on implementation. Remove the multiple directions with list item.
05-26: cond_exp_1¶
There was a problem using conditional expressions with multiple levels of AD where the result of the conditional expression might not be determined during forward mode. This would generate an assert of the form:
Error detected by false result for
IdenticalCon
( side )at line
number in the file
include/cppad/local/cskip_op.hpp
where side was left
or right
and number was the line number of an assert in cskip_op.hpp
.
This has been fixed.
05-26: cond_exp_2¶
There was a problem with using
conditional expressions and reverse mode
with multiple levels of AD .
This was problem was represented by the file bug/cond_exp_2.sh
.
The problem above has been fixed by adding the base type
zdouble
, see CppAD motivation for this new type. (It is no longer necessary to usezdouble
to get an absolute zero because CppAD now uses azmul where an absolute zero is required.)The sections mul_level , change_param.cpp , mul_level.cpp , and mul_level_ode.cpp were changed to use zdouble .
The adolc multi-level examples mul_level_adolc.cpp and mul_level_adolc_ode.cpp were changed to mention the limitations because Adolc does not have an Absolute Zero .
The example above were also changed so that AD variable names that indicated the level of AD for the variable.
base_require : The base type requirements were modified to include mention of absolute zero . In addition, the base type requirements API Warning is now more informative.
05-11¶
Reorganize the unary_standard_math documentation.
05-10¶
Add the exponential minus one function log1p .
base_require : If you are defining your own base type, note that
log1p
function was added to the base type requirements.Use the single preprocessor flag
CPPAD_USE_CPLUSPLUS_2011
to signal that the functions asinh, acosh, atanh, erf, erfc, expm1, log1p are part of the base type requirements.
05-09¶
Add the exponential minus one function expm1 . If you are defining your own base type, note that expm1 was added to the base type requirements.
Fix some warnings about comparing signed and unsigned integers when using eigen for the CppAD test vector. (The eigen vector
size()
function returns anint
instead of asize_t
.)
05-08¶
Add the inverse hyperbolic sine function atanh . If you are defining your own base type, note that atanh was added to the base type requirements.
Fix a bug in the implementation of the
acosh
multiple direction forward mode forward_dir .
05-07¶
Add the inverse hyperbolic sine function acosh . If you are defining your own base type, note that acosh was added to the base type requirements.
05-05¶
Add the inverse hyperbolic sine function asinh . If you are defining your own base type, note that asinh was added to the base type requirements.
04-18¶
In the sparse jacobian and sparse hessian calculations, If work is present, and has already been computed, the sparsity pattern p is not used. This has been added to the documentation; see sparse jacobian and sparse hessian documentation for work and p .
03-13¶
Remove the syntax
AD
< Base > y = x
for the AD constructor documentation because it does not work when the constructor is explicit . Also document the restriction that the constructor in the assignment must be implicit.
03-06¶
The developers of the TMB package reported that for large ADFun tapes, the optimize routine uses a large amount of memory because it allocates a standard set for each variable on the tape. These sets are only necessary for variables in conditional expressions that can be skipped once the independent variables have a set value. The problem has been reduced by using a NULL pointer for the empty set and similar changes. It still needs more work.
02-28¶
It used to be the case that the Reverse mode would propagate nan through the conditional expression case that is not used. For example, if
Independent(ax);
AD<double> aeps = 1e-10;
ay[0] = CondExpGt( ax[0], aeps, 1.0/ax[0], 1.0/aeps );
ADFun<double> f(ax, ay);
The corresponding reverse mode calculation,
at x[0] = 0.0
, would result in
Error detected by false result for
! ( hasnan(value) && check_for_nan_ )
This has been fixed so that only the conditional expression case that is used
affects the reverse mode results.
The example cond_exp.cpp was changed to reflect this
(a check for nan
was changed to a check for zero).
Note that this fix only works when
IdenticalCon is true for the
base type of the result in the conditional expression; e.g.,
one can still get a nan
effect from the case that is not selected
when using AD< AD<double> >
conditional expressions.
02-18¶
If the compiler supports the c++11 feature
std::chrono:high_resolution_clock
then use it for
the elapsed_seconds function.
02-16¶
The new example sub_sparse_hes.cpp shows one way to compute a Hessian for a subset of variables without having to compute the sparsity pattern for the entire functions.
02-14¶
Fix another bug in the derivative calculations for the c++11 version of the error function.
02-11¶
Fix a bug in the optimization of conditional expressions. To be specific, if NDEBUG is not defined, one could get an assert with the message:
Error detected by false result for
var_index_ >= NumRes(op_)
02-10¶
The change on 2014-12-23 introduced a bug when the c++11 version of the error function was used with an optimized function. There was also a bug in the sparsity calculations for when this erf function was included. These bugs have been fixed.
02-09¶
The test test_more/optimize.cpp
was failing on some systems
because an exactly equality check should have been a near equal check.
This has been fixed.
02-07¶
On some systems, the library
corresponding to speed/src
could not be found.
This library is only used for testing and so has been changed to always be
static (hence does not need to be found at run time).
02-06¶
There was a bug in the coloring method change on
2015-01-07 .
To be specific, work . color_method
was not being set
to "cppad.symmetric"
after work . color_method.clear
() .
This has been fixed.
02-04¶
Enable the same install of CppAD to be used both with and without C++11 features; e.g., with both
g++ --std=c++11
and withg++ --std=c++98
. Previously if the cppad_cxx_flags specified C++11, then it could only be used in that way.The CMake Command now requires the version of
cmake
to be greater than or equal 2.8 (due a bug incmake
version 2.6).
02-03¶
Improved the searching for the boost multi-threading library which is used for by the team_bthread.cpp case of the thread_test.cpp example and test.
02-02¶
Improve the documentation for the CMake Command line options
cmake_install_
dir
for dir equal to
prefix
, postfix
, includedirs
, libdirs
,
datadir
, and docdir
.
01-30¶
Fix bug in link_sparse_hessian speed test introduced on 01-09 below.
01-29¶
Fix some warnings generated by g++ 4.9.2
.
01-26¶
The change of global variables to local in
cppad/local/op_code.hpp
on 2014-50-14
created a bug in parallel_ad (some local statics needed to
be initialized). This has been fixed.
01-23¶
There was a bug in the cmake install detection of compiler features.
One symptom of this bug was that on systems that had the gettimeofday
function, the cmake install would sometimes report
cppad_has_gettimeofday
= 0
This has been fixed.
01-21¶
The deprecated configure procedure had a bug in the
detection of when the size of an unsigned int
was the same as the size of a size_t
. This has been fixed.
01-20¶
The new compare_change interface has been created and the old CompareChange function has been deprecated; see the compare_change.cpp example. This enables one to determine the source code during taping that corresponds to changes in the comparisons during zero order forward operations; see abort_op_index .
This new compare_change interface can detect comparison changes even if NDEBUG is defined and even if f.optimize() has been called. The deprecated function
CompareChange
used to always return zero afterf .
optimize
()and was not even defined when
NDEBUG
was defined. There was a resulting speed effect for this; see no_compare_op .The date when some features where deprecated has been added to the documentation. For example, see Deprecated 2006-12-17 .
01-09¶
The change 01-07 below included (but did not mention) using a sparse, instead of full, structure for the Hessian in the test. This has also been done for the sparse Jacobian test.
For both the sparse_jacobian and sparse_hessian tests, the sparse function is only chosen once (it used to be different for every repeat). This reduced the amount of computation not connected what is being tested. It also make the onetape a valid option for these tests.
There was a bug in the multiple direction forward routine. Results for function values that are Parameter were not being computed properly (all the derivatives are zero in this case). This has been fixed.
01-07¶
The following changes were merged in from the color_hes
branch:
Specify the type of coloring for the sparse hessian calculations. To be specific, instead of
"cppad"
and"colpack"
, the choices are"cppad.symmetric"
,"cppad.general"
, and"colpack.star"
. This is not compatible with the change on 01-02 , which was so recent that this should not be a problem.The n_color values were not being returned properly by cppad_sparse_hessian.cpp and adolc_sparse_hessian.cpp . The CppAD version has been fixed and the ADOL-C version has been set to zero.
The link_sparse_hessian example case was to sparse for good testing (by mistake). This has been fixed.
Add n_sweep (now n_color ) to link_sparse_hessian and speed_main .
Change the
cppad
sparse Hessian color_method to take advantage of the symmetry of the Hessian (in a similar fashion to thecolpack
coloring method).
01-02¶
Added to option to uses colpack for the sparse Hessian coloring method ; see the example colpack_hes.cpp .