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

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

Pust reuse of previous install in user documentation.

get_eigen.sh: reuse partial installs.

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