1 | $Id$ |
---|
2 | /* -------------------------------------------------------------------------- |
---|
3 | CppAD: C++ Algorithmic Differentiation: Copyright (C) 2003-16 Bradley M. Bell |
---|
4 | |
---|
5 | CppAD is distributed under multiple licenses. This distribution is under |
---|
6 | the terms of the |
---|
7 | Eclipse Public License Version 1.0. |
---|
8 | |
---|
9 | A copy of this license is included in the COPYING file of this distribution. |
---|
10 | Please visit http://www.coin-or.org/CppAD/ for information on other licenses. |
---|
11 | -------------------------------------------------------------------------- */ |
---|
12 | |
---|
13 | $begin whats_new_16$$ |
---|
14 | $spell |
---|
15 | alloc |
---|
16 | hpp |
---|
17 | valgrind |
---|
18 | uninitialized |
---|
19 | adouble |
---|
20 | CppAD |
---|
21 | Eigen |
---|
22 | std |
---|
23 | namespace |
---|
24 | cppad |
---|
25 | Hes |
---|
26 | Jac |
---|
27 | mul |
---|
28 | ifndef |
---|
29 | xam |
---|
30 | $$ |
---|
31 | |
---|
32 | $section Changes and Additions to CppAD During 2016$$ |
---|
33 | |
---|
34 | $head Introduction$$ |
---|
35 | The sections listed below contain a list of the changes to CppAD |
---|
36 | in reverse order by date. |
---|
37 | The purpose of these sections is to |
---|
38 | assist you in learning about changes between various versions of CppAD. |
---|
39 | |
---|
40 | $head 03-22$$ |
---|
41 | $list number$$ |
---|
42 | Add the $cref atomic_eigen_mat_mul.cpp$$ example; see |
---|
43 | $cref/under construction/atomic_eigen_mat_mul.cpp/Under Construction/$$. |
---|
44 | $lnext |
---|
45 | change $code atomic_ode.cpp$$ to $cref checkpoint_ode.cpp$$ and |
---|
46 | $code atomic_extended_ode.cpp$$ to $cref checkpoint_extended_ode.cpp$$. |
---|
47 | $lend |
---|
48 | |
---|
49 | $head 03-21$$ |
---|
50 | Change the $cref atomic_mat_mul.hpp$$ class name from $code mat_mul$$ |
---|
51 | to $code atomic_mat_mul$$. This example use of the name $code mat_mul$$ |
---|
52 | in the $cref atomic_mat_mul.cpp$$ example / test. |
---|
53 | |
---|
54 | $head 03-20$$ |
---|
55 | $list number$$ |
---|
56 | Include the sub-directory name to the include guards |
---|
57 | in $icode%*%.hpp%$$ files. For example, |
---|
58 | $codep |
---|
59 | # ifndef CPPAD_UTILITY_VECTOR_HPP |
---|
60 | # define CPPAD_UTILITY_VECTOR_HPP |
---|
61 | $$ |
---|
62 | appears in the file $code cppad/utility/vector.hpp$$. This makes it |
---|
63 | easier to avoid conflicts when choosing $cref addon$$ names. |
---|
64 | $lnext |
---|
65 | Add the $cref set_union$$ utility and use it to simplify the |
---|
66 | $cref atomic$$ examples that use |
---|
67 | $cref/vector of sets/glossary/Sparsity Pattern/Vector of Sets/$$ |
---|
68 | sparsity patterns. |
---|
69 | $lend |
---|
70 | |
---|
71 | |
---|
72 | $head 03-19$$ |
---|
73 | $list number$$ |
---|
74 | Move $cref atomic_mat_mul.cpp$$ to $code atomic_mat_mul_xam.cpp$$ |
---|
75 | (moved back on $cref/03-21/whats_new_16/03-21/$$. |
---|
76 | $lnext |
---|
77 | Move $code atomic_matrix_mul.hpp$$ to $cref atomic_mat_mul.hpp$$. |
---|
78 | $lend |
---|
79 | |
---|
80 | $head 03-17$$ |
---|
81 | Add the |
---|
82 | $code atomic_ode.cpp$$ and $code atomic_extended_ode.cpp$$ examples. |
---|
83 | |
---|
84 | $head 03-12$$ |
---|
85 | $list number$$ |
---|
86 | Move the example $code reverse_any.cpp$$ to $cref reverse_checkpoint.cpp$$. |
---|
87 | $lnext |
---|
88 | Add the $cref atomic_mul_level.cpp$$ example. |
---|
89 | $lend |
---|
90 | |
---|
91 | $head 03-05$$ |
---|
92 | The following atomic function examples were added |
---|
93 | These examples are for a specific atomic operation. |
---|
94 | In addition, the domain and range dimensions for these examples |
---|
95 | are not one and not equal to each other: |
---|
96 | $cref atomic_forward.cpp$$, |
---|
97 | $cref atomic_reverse.cpp$$, |
---|
98 | $cref atomic_for_sparse_jac.cpp$$, |
---|
99 | $cref atomic_rev_sparse_jac.cpp$$, |
---|
100 | $cref atomic_for_sparse_hes.cpp$$, |
---|
101 | $cref atomic_rev_sparse_hes.cpp$$. |
---|
102 | |
---|
103 | |
---|
104 | $head 03-01$$ |
---|
105 | $list number$$ |
---|
106 | Improve documentation of implementation requirements for the atomic |
---|
107 | $cref/rev_sparse_jac/atomic_rev_sparse_jac/Implementation/$$. |
---|
108 | $lnext |
---|
109 | Make some corrections to the $cref atomic_for_sparse_hes$$ documentation. |
---|
110 | and fix a bug in how CppAD used these functions. |
---|
111 | $lend |
---|
112 | |
---|
113 | $head 02-29$$ |
---|
114 | $list number$$ |
---|
115 | Merged sparse into master branch. This makes the |
---|
116 | $cref ForSparseHes$$ routine available for use. |
---|
117 | $lnext |
---|
118 | Changed the |
---|
119 | $cref/global options/speed_main/Global Options/$$ |
---|
120 | in the speed test main program to use one global variable with prototype |
---|
121 | $srccode%cpp% |
---|
122 | extern std::map<std::string, bool> global_option; |
---|
123 | %$$ |
---|
124 | $lend |
---|
125 | |
---|
126 | |
---|
127 | $head 02-28$$ |
---|
128 | Fix a mistake in the old atomic |
---|
129 | $code example/sparsity/sparsity.cpp$$ example. |
---|
130 | This example has since been changed to |
---|
131 | $cref atomic_set_sparsity.cpp$$. |
---|
132 | |
---|
133 | |
---|
134 | $head 02-27$$ |
---|
135 | The $code --with-sparse_set$$ and $code --with-sparse_set$$ options |
---|
136 | were removed from the $cref auto_tools$$ install procedure. |
---|
137 | |
---|
138 | $head 02-26$$ |
---|
139 | The condition that the operation sequence in $icode f$$ is |
---|
140 | $cref/independent/glossary/Operation/Independent/$$ of |
---|
141 | the independent variables was added to the statement about |
---|
142 | the validity of the sparsity patterns; see $icode x$$ in |
---|
143 | $cref/ForSparseJac/ForSparseJac/x/$$, |
---|
144 | $cref/RevSparseJac/RevSparseJac/x/$$, and |
---|
145 | $cref/RevSparseHes/RevSparseHes/x/$$. |
---|
146 | |
---|
147 | $head 02-25$$ |
---|
148 | The $cref cmake$$ command line argument $code cppad_sparse_list$$ |
---|
149 | has been removed (because it is so much better than the other option). |
---|
150 | |
---|
151 | $head 02-23$$ |
---|
152 | A new version of the |
---|
153 | $code cppad_sparse_list$$ class (not part of user API) uses |
---|
154 | reference counters to reduce the number of copies of sets that are equal. |
---|
155 | This improved the speed of sparsity pattern computations that use |
---|
156 | the $cref/vector of sets/glossary/Sparsity Pattern/Vector of Sets/$$ |
---|
157 | representation. |
---|
158 | For example, the results for the |
---|
159 | $cref cppad_sparse_hessian.cpp$$ test compare as follows: |
---|
160 | $codep |
---|
161 | sparse_hessian_size = [ 100, 400, 900, 1600, 2500 ] |
---|
162 | sparse_hessian_rate_old = [ 1480, 265.21, 93.33, 41.93, 0.86 ] |
---|
163 | sparse_hessian_rate_new = [ 1328, 241.61, 92.99, 40.51, 3.80 ] |
---|
164 | $$ |
---|
165 | Note that the improvement is only for large problems. In fact, |
---|
166 | for large problems, preliminary testing indicates that |
---|
167 | the new vector of sets representation preforms better than |
---|
168 | the $cref/vector of boolean/glossary/Sparsity Pattern/Vector of Boolean/$$ |
---|
169 | representation. |
---|
170 | |
---|
171 | |
---|
172 | $head 01-21$$ |
---|
173 | Fix a $code valgrind$$ warning about use of uninitialized memory |
---|
174 | in the test $code test_more/checkpoint.cpp$$ (the problem was in the test). |
---|
175 | |
---|
176 | $head 01-20$$ |
---|
177 | $list number$$ |
---|
178 | Fix a $code valgrind$$ warning about use of uninitialized memory |
---|
179 | when using the $cref/adouble/base_adolc.hpp/$$ base type. |
---|
180 | This required an optional $cref base_hash$$ function and the special |
---|
181 | $cref/adouble hash_code/base_adolc.hpp/hash_code/$$ implementation. |
---|
182 | $lnext |
---|
183 | The $code adouble$$ $cref to_string$$ functions |
---|
184 | required a special implementation; see |
---|
185 | $cref/adouble to_string/base_adolc.hpp/to_string/$$. |
---|
186 | $lnext |
---|
187 | Add the $cref/to_string/base_alloc.hpp/to_string/$$ and |
---|
188 | $cref/hash_code/base_alloc.hpp/hash_code/$$ examples |
---|
189 | to the $code base_alloc.hpp$$ example. |
---|
190 | $lend |
---|
191 | |
---|
192 | $head 01-18$$ |
---|
193 | $list number$$ |
---|
194 | Fix ambiguity between $code CppAD::sin$$ and $code std::sin$$, |
---|
195 | and other standard math functions, |
---|
196 | when using |
---|
197 | $codep |
---|
198 | using namespace std; |
---|
199 | using namespace CppAD; |
---|
200 | $$ |
---|
201 | This is OK for simple programs, but not generally recommended. |
---|
202 | See $code double$$ version of base class definitions for |
---|
203 | $cref/Unary Standard Math/base_double.hpp/Unary Standard Math/$$ |
---|
204 | for more details. |
---|
205 | $lnext |
---|
206 | Change Eigen array example |
---|
207 | $cref eigen_array.cpp$$ |
---|
208 | to use member function version of $code sin$$ function |
---|
209 | (as per Eigen's array class documentation). |
---|
210 | $lend |
---|
211 | |
---|
212 | $end |
---|