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

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

General comments about this commit go here (delete this line).

check_define.sh: ignore files that are output during configuration.
whats_new_13.omh: fix spelling.
makefile.in: fix modification date.
adolc_prefix.omh: require that Colpack and Adolc have same prefix.

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