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 | makefile |
---|
31 | vy |
---|
32 | $$ |
---|
33 | |
---|
34 | $section Changes and Additions to CppAD During 2016$$ |
---|
35 | |
---|
36 | $head Introduction$$ |
---|
37 | The sections listed below contain a list of the changes to CppAD |
---|
38 | in reverse order by date. |
---|
39 | The purpose of these sections is to |
---|
40 | assist you in learning about changes between various versions of CppAD. |
---|
41 | |
---|
42 | $head 03-27$$ |
---|
43 | Fix a bug in the calculation of the $cref atomic_eigen_mat_inv.hpp$$ |
---|
44 | $cref/reverse/atomic_eigen_mat_inv.hpp/Private/reverse/$$ example. |
---|
45 | |
---|
46 | $head 03-26$$ |
---|
47 | $list number$$ |
---|
48 | Implement and test the $cref atomic_eigen_mat_inv.cpp$$ |
---|
49 | $cref/reverse/atomic_eigen_mat_inv.hpp/Private/reverse/$$ is implemented. |
---|
50 | $lnext |
---|
51 | Fix a bug in the calculation of |
---|
52 | $cref/vy/atomic_forward/vy/$$ in the $cref atomic_eigen_mat_inv.hpp$$ |
---|
53 | $cref/forward/atomic_eigen_mat_inv.hpp/Private/forward/$$ example. |
---|
54 | $lend |
---|
55 | |
---|
56 | |
---|
57 | $head 03-25$$ |
---|
58 | $list number$$ |
---|
59 | Start construction of the $cref atomic_eigen_mat_inv.cpp$$ example, |
---|
60 | currently only |
---|
61 | $cref/forward/atomic_eigen_mat_inv.hpp/Private/forward/$$ is implemented |
---|
62 | and tested. |
---|
63 | $lnext |
---|
64 | More improvements to $cref atomic_eigen_mat_mul.cpp$$ example. |
---|
65 | $lend |
---|
66 | |
---|
67 | $head 03-24$$ |
---|
68 | $list number$$ |
---|
69 | Fix build of $code example/atomic.cpp$$ when |
---|
70 | $cref eigen_prefix$$ is not available |
---|
71 | (bug introduced when $cref atomic_eigen_mat_mul.cpp$$ was added). |
---|
72 | $lnext |
---|
73 | Extend $cref atomic_eigen_mat_mul.cpp$$ example to include |
---|
74 | $cref/for_sparse_jac/atomic_eigen_mat_mul.hpp/Private/for_sparse_jac/$$, |
---|
75 | $cref/rev_sparse_jac/atomic_eigen_mat_mul.hpp/Private/rev_sparse_jac/$$, |
---|
76 | $cref/for_sparse_hes/atomic_eigen_mat_mul.hpp/Private/for_sparse_hes/$$, |
---|
77 | $cref/rev_sparse_hes/atomic_eigen_mat_mul.hpp/Private/rev_sparse_hes/$$. |
---|
78 | $lnext |
---|
79 | Fix a bug in the $cref ForSparseHes$$ routine. |
---|
80 | $lnext |
---|
81 | Edit $cref atomic_rev_sparse_hes$$ documentation. |
---|
82 | $lend |
---|
83 | |
---|
84 | $head 03-23$$ |
---|
85 | $list number$$ |
---|
86 | Fix bug in auto-tools file $code example/atomic/makefile.am$$ |
---|
87 | (introduced on 03-22). |
---|
88 | $lnext |
---|
89 | Improve the $cref atomic_eigen_mat_mul.cpp$$ example |
---|
90 | and extend it to include reverse mode. |
---|
91 | $lend |
---|
92 | |
---|
93 | $head 03-22$$ |
---|
94 | $list number$$ |
---|
95 | Start construction of the $cref atomic_eigen_mat_mul.cpp$$ example. |
---|
96 | $lnext |
---|
97 | change $code atomic_ode.cpp$$ to $cref checkpoint_ode.cpp$$ and |
---|
98 | $code atomic_extended_ode.cpp$$ to $cref checkpoint_extended_ode.cpp$$. |
---|
99 | $lend |
---|
100 | |
---|
101 | $head 03-21$$ |
---|
102 | Change the $cref atomic_mat_mul.hpp$$ class name from $code mat_mul$$ |
---|
103 | to $code atomic_mat_mul$$. This example use of the name $code mat_mul$$ |
---|
104 | in the $cref atomic_mat_mul.cpp$$ example / test. |
---|
105 | |
---|
106 | $head 03-20$$ |
---|
107 | $list number$$ |
---|
108 | Include the sub-directory name to the include guards |
---|
109 | in $icode%*%.hpp%$$ files. For example, |
---|
110 | $codep |
---|
111 | # ifndef CPPAD_UTILITY_VECTOR_HPP |
---|
112 | # define CPPAD_UTILITY_VECTOR_HPP |
---|
113 | $$ |
---|
114 | appears in the file $code cppad/utility/vector.hpp$$. This makes it |
---|
115 | easier to avoid conflicts when choosing $cref addon$$ names. |
---|
116 | $lnext |
---|
117 | Add the $cref set_union$$ utility and use it to simplify the |
---|
118 | $cref atomic$$ examples that use |
---|
119 | $cref/vector of sets/glossary/Sparsity Pattern/Vector of Sets/$$ |
---|
120 | sparsity patterns. |
---|
121 | $lend |
---|
122 | |
---|
123 | |
---|
124 | $head 03-19$$ |
---|
125 | $list number$$ |
---|
126 | Move $cref atomic_mat_mul.cpp$$ to $code atomic_mat_mul_xam.cpp$$ |
---|
127 | (moved back on $cref/03-21/whats_new_16/03-21/$$. |
---|
128 | $lnext |
---|
129 | Move $code atomic_matrix_mul.hpp$$ to $cref atomic_mat_mul.hpp$$. |
---|
130 | $lend |
---|
131 | |
---|
132 | $head 03-17$$ |
---|
133 | Add the |
---|
134 | $code atomic_ode.cpp$$ and $code atomic_extended_ode.cpp$$ examples. |
---|
135 | |
---|
136 | $head 03-12$$ |
---|
137 | $list number$$ |
---|
138 | Move the example $code reverse_any.cpp$$ to $cref reverse_checkpoint.cpp$$. |
---|
139 | $lnext |
---|
140 | Add the $cref atomic_mul_level.cpp$$ example. |
---|
141 | $lend |
---|
142 | |
---|
143 | $head 03-05$$ |
---|
144 | The following atomic function examples were added |
---|
145 | These examples are for a specific atomic operation. |
---|
146 | In addition, the domain and range dimensions for these examples |
---|
147 | are not one and not equal to each other: |
---|
148 | $cref atomic_forward.cpp$$, |
---|
149 | $cref atomic_reverse.cpp$$, |
---|
150 | $cref atomic_for_sparse_jac.cpp$$, |
---|
151 | $cref atomic_rev_sparse_jac.cpp$$, |
---|
152 | $cref atomic_for_sparse_hes.cpp$$, |
---|
153 | $cref atomic_rev_sparse_hes.cpp$$. |
---|
154 | |
---|
155 | |
---|
156 | $head 03-01$$ |
---|
157 | $list number$$ |
---|
158 | Improve documentation of implementation requirements for the atomic |
---|
159 | $cref/rev_sparse_jac/atomic_rev_sparse_jac/Implementation/$$. |
---|
160 | $lnext |
---|
161 | Make some corrections to the $cref atomic_for_sparse_hes$$ documentation. |
---|
162 | and fix a bug in how CppAD used these functions. |
---|
163 | $lend |
---|
164 | |
---|
165 | $head 02-29$$ |
---|
166 | $list number$$ |
---|
167 | Merged sparse into master branch. This makes the |
---|
168 | $cref ForSparseHes$$ routine available for use. |
---|
169 | $lnext |
---|
170 | Changed the |
---|
171 | $cref/global options/speed_main/Global Options/$$ |
---|
172 | in the speed test main program to use one global variable with prototype |
---|
173 | $srccode%cpp% |
---|
174 | extern std::map<std::string, bool> global_option; |
---|
175 | %$$ |
---|
176 | $lend |
---|
177 | |
---|
178 | |
---|
179 | $head 02-28$$ |
---|
180 | Fix a mistake in the old atomic |
---|
181 | $code example/sparsity/sparsity.cpp$$ example. |
---|
182 | This example has since been changed to |
---|
183 | $cref atomic_set_sparsity.cpp$$. |
---|
184 | |
---|
185 | |
---|
186 | $head 02-27$$ |
---|
187 | The $code --with-sparse_set$$ and $code --with-sparse_set$$ options |
---|
188 | were removed from the $cref auto_tools$$ install procedure. |
---|
189 | |
---|
190 | $head 02-26$$ |
---|
191 | The condition that the operation sequence in $icode f$$ is |
---|
192 | $cref/independent/glossary/Operation/Independent/$$ of |
---|
193 | the independent variables was added to the statement about |
---|
194 | the validity of the sparsity patterns; see $icode x$$ in |
---|
195 | $cref/ForSparseJac/ForSparseJac/x/$$, |
---|
196 | $cref/RevSparseJac/RevSparseJac/x/$$, and |
---|
197 | $cref/RevSparseHes/RevSparseHes/x/$$. |
---|
198 | |
---|
199 | $head 02-25$$ |
---|
200 | The $cref cmake$$ command line argument $code cppad_sparse_list$$ |
---|
201 | has been removed (because it is so much better than the other option). |
---|
202 | |
---|
203 | $head 02-23$$ |
---|
204 | A new version of the |
---|
205 | $code cppad_sparse_list$$ class (not part of user API) uses |
---|
206 | reference counters to reduce the number of copies of sets that are equal. |
---|
207 | This improved the speed of sparsity pattern computations that use |
---|
208 | the $cref/vector of sets/glossary/Sparsity Pattern/Vector of Sets/$$ |
---|
209 | representation. |
---|
210 | For example, the results for the |
---|
211 | $cref cppad_sparse_hessian.cpp$$ test compare as follows: |
---|
212 | $codep |
---|
213 | sparse_hessian_size = [ 100, 400, 900, 1600, 2500 ] |
---|
214 | sparse_hessian_rate_old = [ 1480, 265.21, 93.33, 41.93, 0.86 ] |
---|
215 | sparse_hessian_rate_new = [ 1328, 241.61, 92.99, 40.51, 3.80 ] |
---|
216 | $$ |
---|
217 | Note that the improvement is only for large problems. In fact, |
---|
218 | for large problems, preliminary testing indicates that |
---|
219 | the new vector of sets representation preforms better than |
---|
220 | the $cref/vector of boolean/glossary/Sparsity Pattern/Vector of Boolean/$$ |
---|
221 | representation. |
---|
222 | |
---|
223 | |
---|
224 | $head 01-21$$ |
---|
225 | Fix a $code valgrind$$ warning about use of uninitialized memory |
---|
226 | in the test $code test_more/checkpoint.cpp$$ (the problem was in the test). |
---|
227 | |
---|
228 | $head 01-20$$ |
---|
229 | $list number$$ |
---|
230 | Fix a $code valgrind$$ warning about use of uninitialized memory |
---|
231 | when using the $cref/adouble/base_adolc.hpp/$$ base type. |
---|
232 | This required an optional $cref base_hash$$ function and the special |
---|
233 | $cref/adouble hash_code/base_adolc.hpp/hash_code/$$ implementation. |
---|
234 | $lnext |
---|
235 | The $code adouble$$ $cref to_string$$ functions |
---|
236 | required a special implementation; see |
---|
237 | $cref/adouble to_string/base_adolc.hpp/to_string/$$. |
---|
238 | $lnext |
---|
239 | Add the $cref/to_string/base_alloc.hpp/to_string/$$ and |
---|
240 | $cref/hash_code/base_alloc.hpp/hash_code/$$ examples |
---|
241 | to the $code base_alloc.hpp$$ example. |
---|
242 | $lend |
---|
243 | |
---|
244 | $head 01-18$$ |
---|
245 | $list number$$ |
---|
246 | Fix ambiguity between $code CppAD::sin$$ and $code std::sin$$, |
---|
247 | and other standard math functions, |
---|
248 | when using |
---|
249 | $codep |
---|
250 | using namespace std; |
---|
251 | using namespace CppAD; |
---|
252 | $$ |
---|
253 | This is OK for simple programs, but not generally recommended. |
---|
254 | See $code double$$ version of base class definitions for |
---|
255 | $cref/Unary Standard Math/base_double.hpp/Unary Standard Math/$$ |
---|
256 | for more details. |
---|
257 | $lnext |
---|
258 | Change Eigen array example |
---|
259 | $cref eigen_array.cpp$$ |
---|
260 | to use member function version of $code sin$$ function |
---|
261 | (as per Eigen's array class documentation). |
---|
262 | $lend |
---|
263 | |
---|
264 | $end |
---|