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

Last change on this file since 2939 was 2939, checked in by bradbell, 7 years ago
  1. Make sure all '# defines' have an '# undef' and vise-verser.
  2. Add adolc tests to jenkins.sh.

check_define.sh: New reoutine that check defines have matching undef.
package.sh: run check_define.sh.
search.sh: add missing source directory to search.
configure.hpp.in: fix bug in speed tests (name of preprocessor macro).
pow.hpp: fix comment.
thread_alloc.hpp: fix spelling in comment.
jenkins.sh: Automatically set LD_LIBRARY_PATH.
base_adolc.hpp: fix problem when using ADOL-C-2.4.1
adolc_prefix.omh: add link to get_adolc.sh.

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