source: trunk/omh/whats_new/whats_new_13.omh @ 2935

Last change on this file since 2935 was 2935, checked in by bradbell, 7 years ago

check_svn_id.sh: Ignore bug/build directory.
std_vector.sh: Add copyright message.
rev_sparse_hes.cpp: Fix problem on OSX systems.

  • Property svn:keywords set to Id
File size: 12.1 KB
Line 
1$Id: whats_new_13.omh 2935 2013-10-12 19:40:01Z bradbell $
2/* --------------------------------------------------------------------------
3CppAD: C++ Algorithmic Differentiation: Copyright (C) 2003-13 Bradley M. Bell
4
5CppAD is distributed under multiple licenses. This distribution is under
6the terms of the
7                    Eclipse Public License Version 1.0.
8
9A copy of this license is included in the COPYING file of this distribution.
10Please visit http://www.coin-or.org/CppAD/ for information on other licenses.
11-------------------------------------------------------------------------- */
12
13$begin whats_new_13$$
14$dollar @$$
15$spell
16        aka
17        sacado
18        resize
19        sb
20        IpIpoptAlg.cpp
21        inf
22        const
23        algo
24        afun
25        cxx
26        checkpointing
27        cout
28        typename
29        bool
30        struct
31        impl
32        std
33        alloc
34        ptr
35        isnan
36        cmake
37        namespace
38        testvector
39        eigen
40        microsoft
41        src
42        jac
43        hpp
44        Wunused
45        Cpp
46        cppad
47$$
48
49$section CppAD Changes and Additions During 2013$$
50
51$head Introduction$$
52This section contains a list of the changes to CppAD during 2013
53(in reverse order by date).
54The purpose of this section is to
55assist you in learning about changes between various versions of CppAD.
56
57$head 10-12$$
58$list number$$
59Change $cref get_eigen.sh$$ so that it will reuse install information
60when it is present.
61In addition document reuse for
62$cref/get_eigen.sh/get_eigen.sh/Reuse/$$,
63$cref/get_ipopt.sh/get_ipopt.sh/Reuse/$$, and
64$cref/get_sacado.sh/get_sacado.sh/Reuse/$$.
65$lnext
66Fix following $code g++$$ error on OSX system:
67$codep
68error: no match for 'operator|=' (operand types are
69'std::vector<bool>::reference {aka std::_Bit_reference}' and 'bool')
70    Check[i * n + j] |= F2[i * n + k] & r[ k * n + j];
71                     ^
72$$
73$lend
74
75$head 09-20$$
76$list number$$
77Add lines for $cref atomic_base$$ function documentation
78to both the definition and use of each operation.
79This required adding sub-headings in the example usages
80corresponding to the function documentation sections.
81For example; see
82$cref/atomic forward examples/atomic_forward/Examples/$$.
83$lnext
84Improve the documentation for $cref atomic_base_clear$$
85and remove its use from the
86$cref/atomic_base examples/atomic_base/Examples/$$
87(because it is not needed).
88$lend
89
90$head 09-19$$
91Add links from the $cref atomic_base$$ functions documentation
92to the corresponding examples.
93This required adding headings in the examples that
94correspond to the function documentation sections.
95For example; see
96$cref/atomic forward examples/atomic_forward/Examples/$$.
97
98$head 09-18$$
99$list number$$
100A segmentation fault would occur if
101an $cref ADFun$$ object used an $cref atomic$$
102function that had been deleted.
103This has been fixed so that when $code NDEBUG$$ is not defined,
104an error message is generated.
105$lnext
106A mistake in the documentation for
107$cref/Memory and Parallel Mode/CppAD_vector/Memory and Parallel Mode/$$
108has been fixed.
109This corresponds to the change in the specifications for
110$cref/CppAD::vector::resize/CppAD_vector/resize/$$ made on
111$cref/2012-07-30/whats_new_12/07-30/$$
112$lnext
113There was a bug during the
114$cref/checking for nan/check_for_nan/$$ during
115$cref reverse$$ mode.
116This has been fixed.
117$lnext
118It appears, from inspecting the Ipopt source file
119$code Ipopt/src/Algorithm/IpIpoptAlg.cpp$$ that the option $code sb$$
120to $code yes$$ suppress the printing of the Ipopt banner.
121The Ipopt examples and tests have been changed to use this option
122(although it is not in the ipopt documentation).
123$lnext
124Fix the a typo in the documentation for $code ipopt_solve$$
125$cref/Integer/ipopt_solve/options/Integer/$$ options
126($code Numeric$$ was changed to $code Integer$$).
127$lend
128
129$head 09-07$$
130There was a bug in the cumulative sum operator
131(which is used by $cref optimize$$ )
132for $cref Forward$$ orders greater than zero.
133This was detected by the $cref checkpoint$$ tests
134when $code optimize$$ was used to make the
135checkpoint functions faster.
136The bug has been fixed and the checkpoint functions now use
137optimize (and hence should be faster).
138
139$head 08-12$$
140$list number$$
141The ability to turn on and off checking for $cref nan$$ in
142$cref Forward$$ mode results has been added; see $cref check_for_nan$$.
143$lnext
144Use this option to remove the need to handel $code nan$$ as a special
145case in $cref checkpoint$$ functions that
146$cref/atomic functions/optimize/Atomic Functions/$$ in within
147another function is optimized.
148$lnext
149Check $cref/reverse/reverse_any/$$  mode results when
150$cref check_for_nan$$ is true.
151(It used to be the case that only $cref/forward/ForwardAny/$$ results
152were checked for $code nan$$.)
153$lend
154
155$head 08-11$$
156If an $cref atomic$$ function had arguments that did not affect
157the final dependent variables in $icode f$$,
158$cref/f.optimize()/optimize/$$ would fail.
159This has been fixed.
160In addition, documentation about using $code optimize$$
161with $cref/atomic functions/optimize/Atomic Functions/$$ has been added.
162
163$head 08-06$$
164Fix a case where the test $code test_more/limits.cpp$$ failed because
165$codep
166        double inf   = std::numeric_limits<double>::infinity();
167        double check = std::complex<double>(inf) / std::complex<float>(1.)
168$$
169can result in the imaginary part of $code check$$ being $code - nan$$.
170
171$head 07-26$$
172Allow for use of $code const::string&$$ as a possible type for
173$cref/name/atomic_ctor/atomic_base/name/$$ in the $code atomic_base$$
174constructor.
175
176$head 05-28$$
177Remove $icode ok$$ return flag from
178$cref/checkpoint algo/checkpoint/algo/$$
179and
180$cref/checkpoint afun/checkpoint/afun/$$.
181
182$head 05-21$$
183$list number$$
184Deprecate the $cref old_atomic$$ interface and replace it by the
185$cref atomic_base$$ and $cref checkpoint$$ interfaces.
186$lnext
187There was a problem with the $cref cmake$$ command
188if the $cref/cppad_cxx_flags/cmake/cppad_cxx_flags/$$ was not specified.
189This has been fixed.
190$lend
191
192
193$head 05-17$$
194$list number$$
195Add the $cref/transpose/ForSparseJac/transpose/$$ option to
196$cref/ForSparseJac/$$.
197$lnext
198Add the $cref/transpose/RevSparseHes/transpose/$$ option to
199$cref/RevSparseHes/$$.
200$lend
201
202$head 05-15$$
203Change $cref RevSparseJac$$ parameter names to be closer to the
204$cref ForSparseJac$$ names so the difference is clearer.
205
206$head 05-14$$
207$list number$$
208The $cref checkpoint$$ class has been added.
209This is a much easier way to do checkpointing than the
210old checkpoint example.
211The old checkpointing example is now the $cref reverse_any.cpp$$ example.
212$lnext
213Fix bug in $cref RevSparseJac$$ for case when $cref/q/RevSparseJac/q/$$
214was not equal to $icode m$$ (range dimension) and sparsity pattern was a
215vector of $code bool$$.
216$lnext
217Add the $cref/transpose/RevSparseJac/transpose/$$ option to
218$cref/RevSparseJac/$$.
219$lend
220
221$head 05-12$$
222The sparse hessian example in $cref old_reciprocal.cpp$$ was not
223being run. This has been fixed.
224
225$head 05-11$$
226The $cref/old_atomic examples/old_atomic/Example/$$
227names were all changed to begin with $code user$$.
228
229$head 05-04$$
230The option to compute
231$cref/multiple orders/ForwardAny/x_p/Multiple Orders/$$ was added.
232The $cref old_usead_2.cpp$$ example shows the need for this.
233The problem is that a new atomic function interface needs to be designed
234with checkpointing as a particular application.
235Multiple order forward mode is the first step in this direction.
236
237$head 04-28$$
238$list number$$
239The scripts $cref get_eigen.sh$$ and $cref get_sacado.sh$$ were added.
240If you are using Unix, and you do not have
241$href%http://eigen.tuxfamily.org%Eigen%$$ or
242$href%http://trilinos.sandia.gov/packages/sacado%Sacado%$$
243installed on your system, you can use the corresponding script
244to download and install a local copy for use when testing CppAD.
245$lnext
246The code $codei%std::cout << %X%$$,
247would generate a compile error when $icode X$$ was an Eigen matrix
248with $codei%CppAD::AD<%Base%>%$$ elements.
249This has been fixed.
250$lend
251
252
253$head 04-27$$
254There was a problem using the output operator $code <<$$ with
255and $cref/eigen/cppad_eigen.hpp/$$ matrix of $code AD$$ elements.
256This has been fixed using a template partial specialization of
257$codep
258        template<typename Scalar, bool IsInteger>
259        struct significant_decimals_default_impl
260$$
261because the original template requires definition of a implicit conversion
262from the scalar type to an $code int$$ and this is dangerous for AD types
263(note that $cref Integer$$ is used for explicit conversions).
264
265
266$head 04-26$$
267$list number$$
268The example $cref old_usead_2.cpp$$ was completed.
269This is a more realistic, but also more complicated, example of
270using AD to computed derivatives inside an atomic function.
271$lnext
272The script $cref get_fadbad.sh$$ has been added.
273If you are using Unix, and you do not have
274$href%http://www.fadbad.com%FADBAD%$$
275installed on your system, you can use this script
276to download and install a local copy for use when testing CppAD.
277$lend
278
279$end
280
281$head 04-20$$
282The example $cref old_usead_1.cpp$$ was added.
283
284$head 04-16$$
285The script $cref get_ipopt.sh$$ has been added.
286If you are using Unix, and you do not have
287$href%http://www.coin-or.org/projects/Ipopt.xml%Ipopt%$$ 
288installed on your system, you can use this script
289to download and install a local copy for use when testing CppAD.
290
291$head 04-14$$
292The following program,
293when executed, would cause a CppAD assertion with an unknown source:
294$codep
295        # include <cppad/cppad.hpp>
296        int main(void)
297        {       size_t min_bytes = static_cast<size_t>(-1);
298                size_t cap_bytes;
299                void *v_ptr = CppAD::thread_alloc::get_memory(min_bytes, cap_bytes);
300                return 0;
301        }
302$$
303It now generates the following message,
304(when compiled without $cref/NDEBUG/faq/Speed/NDEBUG/$$)"
305$codep
306        get_memory(min_bytes, cap_bytes): min_bytes is too large
307        Error detected by false result for
308                min_bytes < std::numeric_limits<size_t>::max() / 2
309$$
310
311
312$head 03-02$$
313The function $cref/isnan/nan/$$ no longer allows for systems
314that return false for $icode%x% != %x%$$ when $icode x$$ is $code NaN$$.
315This makes the $code isnan$$ function faster.
316In addition, it removes the need to store a static value
317which causes complications for parallel execution (as well as other problems).
318Thus, it is no longer necessary for the first call to $code isnan$$
319to be during sequential execution and it has been removed from the
320multi-threading $cref/initialization/multi_thread/Initialization/$$ list.
321
322$head 03-01$$
323Remove the $cref cmake$$ $code cppad_c11_flag$$ and instead
324automatically detect if the compiler supports specific c++11 features.
325
326$head 02-27$$
327The test $cref limits.cpp$$ was failing during testing of Fedora-19; see
328$href%https://bugzilla.redhat.com/show_bug.cgi?id=913929% Bug 913929%$$.
329This has been fixed.
330
331$head 02-20$$
332$list number$$
333The documentation for the $cref cmake$$ install option
334$code cppad_test_vector_namespace$$ was fixed to be
335$cref/cppad_testvector/cmake/cppad_testvector/$$.
336This was also fixed for the
337$cref/eigen test vector/eigen_prefix/Test Vector/$$ documentation.
338$lnext
339An option to specify that the compiler supports c++11 constructs,
340$code cppad_c11_flag$$, was added
341to the $code cmake$$ command line.
342$lend
343$head 01-07$$
344Fix undefined $code microsoft_timer$$ when building the
345$cref speed_example.cpp$$ program.
346
347$head 01-06$$
348$list number$$
349The $cref limits$$ documentation was corrected an improved.
350$lnext
351The $cref limits.cpp$$ example was simplified and restricted to just testing
352for $code AD<double>$$.
353$lnext
354Testing for types other than $code AD<double>$$
355was moved to $code test_more/limits.cpp$$.
356In addition, $code test_more/limits.cpp$$ was modified to avoid the
357use of guard digits (and hence test failure) on more machines.
358$lend
359
360$head 01-05$$
361$list number$$
362The $cref limits.cpp$$ example was failing on some machines
363because they were using guard digits during calculations.
364This has been fixed by using vectors instead of scalars
365for storing values.
366$lnext
367The $cref speed_example.cpp$$ was not linking when using a shared
368object library for the code in $code speed/src$$.
369This has been fixed by not including the library when linking
370the speed examples.
371$lend
372
373$head 01-02$$
374$list number$$
375A new stable version of CppAD, for 2013, was created
376and its first release $code cppad-20130000.0$$ is available
377for download at
378$pre
379        $$
380$href%http://www.coin-or.org/download/source/CppAD/%$$
381$lnext
382Advance version number for trunk to $code 20130102$$.
383$lend
384
385$head 01-01$$
386When compiling with $cref/NDEBUG/Faq/Speed/NDEBUG/$$ defined,
387the following warning could be generated:
388$codei%
389%...%rev_sparse_jac.hpp:315:9: warning: unused variable 'm' [-Wunused-variable]
390%$$
391This has been fixed.
392
393
394$end
Note: See TracBrowser for help on using the repository browser.