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