source: trunk/ADOL-C/doc/short_ref.tex @ 40

Last change on this file since 40 was 40, checked in by awalther, 11 years ago

adapted directoy structure

File size: 18.8 KB
Line 
1% Latex file containing the short reference of ADOL-C version 2.0.0
2%
3% Copyright (C) Andrea Walther, Andreas Griewank, Andreas Kowarz,
4%               Hristo Mitev, Sebastian Schlenkrich, Jean Utke, Olaf Vogel
5%
6% This file is part of ADOL-C. This software is provided as open source.
7% Any use, reproduction, or distribution of the software constitutes
8% recipient's acceptance of the terms of the accompanying license file.
9%++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
10
11\documentclass[12pt,oneside,a4paper]{article}
12\usepackage{amsmath,amsthm,amssymb}
13\usepackage{epsfig,color,psfrag}
14\usepackage{fancyhdr}
15
16%\setlength{\hoffset}{2.0cm}
17\setlength{\oddsidemargin}{-0.5cm}
18\setlength{\evensidemargin}{-0.5cm}
19\setlength{\topmargin}{-0.5cm}
20%\setlength{\headheight}{0cm}
21\setlength{\headsep}{1cm}
22\setlength{\textwidth}{17.0cm}
23\setlength{\textheight}{25.0cm}
24%\setlength{\parindent}{0pt}
25%\setlength{\parskip}{2.5ex plus 0.5ex minus 0.5ex}
26%\renewcommand{\baselinestretch}{1.2}
27
28\pagestyle{fancy}
29\lhead{\sc \bf ADOL-C}
30\chead{}
31\rhead{\sc {\bf A}utomatic {\bf D}ifferentiation by {\bf O}ver{\bf L}oading
32       in {\bf C}++}
33\renewcommand{\headrulewidth}{0.02cm}
34\renewcommand{\footrulewidth}{0.02cm}
35
36\newcommand{\R}{{ {\rm I} \kern -.225em {\rm R} }}
37
38\begin{document}
39%-----------------------------------------------------------------------
40%-----------------------------------------------------------------------
41\begin{center}\Large
42{\Huge \bf The Basic Idea}\\[2ex]
43
44\fbox{\hspace{1mm} 
45  {\bf Vector function} in {\bf C/C++}:\rule[-4mm]{0cm}{12mm}\hspace{0.4cm}
46  $F:\R^n\rightarrow\R^m:x\mapsto y=F\!\left(x\right)$
47}\\[2ex] 
48{\Huge$\Downarrow$} Operator overloading (C++)\\[2ex]
49\fbox{\hspace{2mm} 
50  {\bf Internal representation} of $F$ ($\equiv$\emph{tape})\rule[-4mm]{0cm}{12mm}
51}\\[2ex] 
52{\Huge$\Downarrow$}\hspace{1.5cm}Interpretation\hspace{1.5cm}{\Huge$\Downarrow$}\\[2ex]
53\fbox{\begin{minipage}[h]{80mm}
54{\bf \underline{Forward mode}}
55\begin{align*}
56  x\left(t\right)& =\sum_{j=0}^{d} x_j t^j\\[1ex]
57  & \Downarrow\\[1ex]
58  y\left(t\right)&   = \sum_{j=0}^{d} y_j t^j
59  + O\left(t^{d+1}\right)
60\end{align*}
61{\bf $\Longrightarrow$ Directional derivatives\\[-2.2ex]}
62\end{minipage}}
63\fbox{\begin{minipage}[h]{80mm}
64{\bf \underline{Reverse mode}}
65\begin{align*}
66  y_j & = y_j\left(x_0,x_1,\ldots,x_j\right)\\[1ex]
67  & \Downarrow\\[1ex]
68  \frac{\partial y_j}{\partial x_i} & =
69  \frac{\partial y_{j-i}}{\partial x_0} \\[1ex]
70    & = A_{j-i}\left(x_0,x_1,\ldots,x_{j-i}\right)
71\end{align*}\\[-0.85ex]
72{\bf $\Longrightarrow$ Gradients (adjoints)}
73\end{minipage}}
74
75\begin{minipage}[h]{160mm}
76\small
77\begin{align*}
78  y_0 & = F\left(x_0\right) \\
79  y_1 & = F'\left(x_0\right) x_1 \\
80  y_2 & = F'\left(x_0\right) x_2 + \frac{1}{2}F''\left(x_0\right)x_1 x_1 \\
81  y_3 & = F'\left(x_0\right) x_3 + F''\left(x_0\right)x_1 x_2
82          + \frac{1}{6}F'''\left(x_0\right)x_1 x_1 x_1\\
83  & \ldots\\
84  \frac{\partial y_0}{\partial x_0} =
85  \frac{\partial y_1}{\partial x_1} =
86  \frac{\partial y_2}{\partial x_2} =
87  \frac{\partial y_3}{\partial x_3} =
88  A_0 & = F'\left(x_0\right) \\
89  \frac{\partial y_1}{\partial x_0} =
90  \frac{\partial y_2}{\partial x_1} =
91  \frac{\partial y_3}{\partial x_2} =
92  A_1 & = F''\left(x_0\right) x_1 \\
93  \frac{\partial y_2}{\partial x_0} =
94  \frac{\partial y_3}{\partial x_1} =
95  A_2 & = F''\left(x_0\right) x_2 + \frac{1}{2}F'''\left(x_0\right)x_1 x_1 \\
96  \frac{\partial y_3}{\partial x_0} =
97  A_3 & = F''\left(x_0\right) x_3 + F'''\left(x_0\right)x_1 x_2
98          + \frac{1}{6}F^{(4)}\left(x_0\right)x_1 x_1 x_1 \\
99  & \ldots
100\end{align*}
101
102
103\end{minipage}
104\end{center}
105
106\newpage
107%-----------------------------------------------------------------------
108%-----------------------------------------------------------------------
109\begin{center}\Large
110{\Huge \bf Application}\\[2ex]
111{\bf Operator overloading concept $\Rightarrow$ Code modification}\\[2ex]
112\fbox{\parbox{170mm}{
113\begin{itemize}\setlength{\itemsep}{0cm}\setlength{\parsep}{0cm}
114\item Inclusion of appropriate ADOL-C headers
115\item Retyping of all involved variables to active data type {\tt adouble}
116\item Marking active section to be ``taped'' 
117      ({\tt trace\_on}/{\tt trace\_off})
118\item Specification of independent and dependent variables
119      ({\tt <<=}/{\tt >>=})
120\item Specification of differentiation task(s)
121\item Recompilation and Linking with ADOL-C library {\tt libad.a}
122\end{itemize}}}\\[5ex]
123%
124\begin{minipage}[h]{160mm}
125\small
126\underline{Example:}
127\begin{verbatim}
128#include "adolc.h"                      // inlusion of ADOL-C headers
129...
130adouble foo ( adouble x )               // some activated function
131{ adouble tmp;
132  tmp = log(x);
133  return 3.0*tmp*tmp + 2.0;
134}
135...
136int main (int argc, char* argv[])       // main program or other procedure
137{ ...
138  double   x[2],  y;               
139  adouble ax[2], ay;                    // declaration of active variables
140  x[0]=0.3; x[1]=2.3;     
141  trace_on(1);                          // starting active section
142    ax[0]<<=x[0]; ax[1]<<=x[1];         // marking independent variables
143    ay=ax[0]*sin(ax[1])+ foo(ax[1]);    // function evaluation
144    ay>>=y;                             // marking dependend variables
145  trace_off();                          // ending active section
146  ...
147  double g[2];   
148  gradient(1,2,x,g);                    // application of ADOL-C routine
149  ...
150  x[0]+=0.1; x[1]+=0.3;                 // application at different argument
151  gradient(1,2,x,g);
152  ...
153}
154\end{verbatim}
155\end{minipage}
156\end{center}
157
158\newpage
159%-----------------------------------------------------------------------
160%-----------------------------------------------------------------------
161\begin{center}\Large
162{\Huge \bf Drivers for Optimization and Nonlinear Equations (C/C++)}\\[-0.5ex]
163\begin{align*}
164     \min_{x}f\left(x\right),\qquad & f:\R^n\rightarrow\R\\
165     F\left(x\right)=0_m, \qquad  & F:\R^n\rightarrow\R^m
166\end{align*}\\[0.5ex]
167
168\begin{tabular}{|p{13.3cm}|p{3.3cm}|}
169\hline & \\[-2.0ex]
170{\tt function(tag,m,n,x[n],y[m])} & $F\left(x_0\right)$ \\[1.0ex]
171\hline& \\[-2.0ex] 
172{\tt gradient(tag,n,x[n],g[n])} & $\nabla f\left(x_0\right)$ \\[0.5ex]
173{\tt hessian(tag,n,x[n],H[n][n])} & $\nabla^2 f\left(x_0\right)$ \\[1.0ex]
174\hline & \\[-2.0ex] 
175{\tt jacobian(tag,m,n,x[n],J[m][n])} & $F'\left(x_0\right)$ \\[0.5ex]
176{\tt vec\_jac(tag,m,n,repeat?,x[n],u[m],z[n])} & $u^TF'\left(x_0\right)$ \\[0.5ex]
177{\tt jac\_vec(tag,m,n,x[n],v[n],z[m])} & $F'\left(x_0\right)v$ \\[1.0ex]
178\hline & \\[-2.0ex] 
179{\tt hess\_vec(tag,n,x[n],v[n],z[n])} & $\nabla^2f\left(x_0\right)v$ \\[0.5ex]
180{\tt lagra\_hess\_vec(tag,m,n,x[n],v[n],u[m],h[n])} & $u^TF''\left(x_0\right)v$ \\[1.0ex]
181\hline & \\[-2.0ex] 
182{\tt jac\_solv(tag,n,x[n],b[n],sparse?,mode?)} & $F'\left(x_0\right)w=b$ \\[1.0ex]
183\hline
184\end{tabular}\\[5ex]
185%
186\begin{minipage}[h]{160mm}
187\small
188\underline{Example:}  \hspace{0.5cm} Solution of $F(x)=0$ by Newton's method
189\begin{verbatim}
190...
191double x[n], r[n];
192int i;
193...
194initialize(x);                         // setting up the initial x
195...
196function(ftag,n,n,x,r);                // compute residuum r
197while (norm(r) > EPSILON)              // terminate if small residuum
198{ jac_solv(ftag,n,x,r,0,2);            // compute r:=F'(x)^(-1)*r
199  for (i=0; i<n; i++)                  // update x
200    x[i] -= r[i];
201  function(ftag,n,n,x,r);              // compute residuum r
202}
203...
204\end{verbatim}
205\end{minipage}
206\end{center}
207
208\newpage
209%-----------------------------------------------------------------------
210%-----------------------------------------------------------------------
211\begin{center}\Large
212{\Huge \bf Lowest-level Differentiation Routines}\\[-0.5ex]
213\begin{align*}
214   & F:\R^n\rightarrow\R^m
215\end{align*}\\[0.5ex]
216{\Large \bf  Forward Mode (C/C++)}\\[2ex]
217%
218\fbox{\parbox{17.5cm}{\begin{center}
219  {\tt zos\_forward(tag,m,n,keep,x[n],y[m])}
220\end{center}}}\\[2ex]
221\begin{minipage}[h]{14cm}
222\small 
223\begin{itemize}
224\item zero-order scalar forward; computes $y=F\left(x\right)$
225\item $0\leq\text{\tt keep}\leq 1$;
226      $\text{\tt keep}=1\;\text{prepares for {\tt fos\_reverse}
227                                          or {\tt fov\_reverse}}$
228\end{itemize}
229\end{minipage}\\[2ex]
230%
231\fbox{\parbox{17.5cm}{\begin{center}
232  {\tt fos\_forward(tag,m,n,keep,x0[n],x1[n],y0[m],y1[m])}
233\end{center}}}\\[2ex]
234\begin{minipage}[h]{14cm}
235\small 
236\begin{itemize}
237\item first-order scalar forward; computes $y_0=F\left(x_0\right)$,
238      $y_1=F'\left(x_0\right)x_1$
239\item $0\leq\text{\tt keep}\leq 2$;
240      $\text{\tt keep} = \left\{\begin{array}{cl}
241       1 & \text{prepares for {\tt fos\_reverse} or {\tt fov\_reverse}} \\
242       2 & \text{prepares for {\tt hos\_reverse} or {\tt hov\_reverse}}
243       \end{array}\right.$ 
244\end{itemize}
245\end{minipage}\\[2ex]
246%
247\fbox{\parbox{17.5cm}{\begin{center}
248  {\tt fov\_forward(tag,m,n,p,x[n],X[n][p],y[m],Y[m][p])}
249\end{center}}}\\[2ex]
250\begin{minipage}[h]{14cm}
251\small 
252\begin{itemize}
253\item first-order vector forward; computes $y=F\left(x\right)$,
254      $Y=F'\left(x\right)X$
255\end{itemize}
256\end{minipage}\\[2ex]
257%
258\fbox{\parbox{17.5cm}{\begin{center}
259  {\tt hos\_forward(tag,m,n,d,keep,x[n],X[n][d],y[m],Y[m][d])}
260\end{center}}}\\[2ex]
261\begin{minipage}[h]{14cm}
262\small 
263\begin{itemize}
264\item higher-order scalar forward; computes $y_0=F\left(x_0\right)$,
265      $y_1=F'\left(x_0\right)x_1$, \ldots, where $x=x_0$,
266      $X=[x_1,x_2,\ldots,x_d]$ and  $y=y_0$,
267      $Y=[y_1,y_2,\ldots,y_d]$ 
268\item $0\leq\text{\tt keep}\leq d+1$;
269      $\text{\tt keep} \left\{\begin{array}{cl}
270       = 1  & \text{prepares for {\tt fos\_reverse} or {\tt fov\_reverse}} \\
271       > 1 & \text{prepares for {\tt hos\_reverse} or {\tt hov\_reverse}}
272       \end{array}\right.$ 
273\end{itemize}
274\end{minipage}\\[2ex]
275%
276\fbox{\parbox{17.5cm}{\begin{center}
277  {\tt hov\_forward(tag,m,n,d,p,x[n],X[n][p][d],y[m],Y[m][p][d])}
278\end{center}}}\\[2ex]
279\begin{minipage}[h]{14cm}
280\small 
281\begin{itemize}
282\item higher-order vector forward; computes $y_0=F\left(x_0\right)$,
283      $Y_1=F'\left(x_0\right)X_1$, \ldots, where $x=x_0$,
284      $X=[X_1,X_2,\ldots,X_d]$ and  $y=y_0$,
285      $Y=[Y_1,Y_2,\ldots,Y_d]$ 
286\end{itemize}
287\end{minipage}\\[2ex]
288\end{center}
289
290\newpage
291%-----------------------------------------------------------------------
292%-----------------------------------------------------------------------
293\begin{center}\Large
294{\Large \bf  Reverse Mode (C/C++)}\\[2ex]
295%
296\fbox{\parbox{17.5cm}{\begin{center}
297  {\tt fos\_reverse(tag,m,n,u[m],z[n])}
298\end{center}}}\\[2ex]
299\begin{minipage}[h]{14cm}
300\small 
301\begin{itemize}
302\item first-order scalar reverse; computes $z^T=u^T F'\left(x\right)$
303\item after calling  {\tt zos\_forward}, {\tt fos\_forward}, or
304      {\tt hos\_forward} with $\text{\tt keep}=1$
305\end{itemize}
306\end{minipage}\\[2ex]
307%
308\fbox{\parbox{17.5cm}{\begin{center}
309  {\tt fov\_reverse(tag,m,n,q,U[q][m],Z[q][n])}
310\end{center}}}\\[2ex]
311\begin{minipage}[h]{14cm}
312\small 
313\begin{itemize}
314\item first-order vector reverse; computes $Z=U F'\left(x\right)$
315\item after calling  {\tt zos\_forward}, {\tt fos\_forward}, or
316      {\tt hos\_forward} with $\text{\tt keep}=1$
317\end{itemize}
318\end{minipage}\\[2ex]
319%
320%
321\fbox{\parbox{17.5cm}{\begin{center}
322  {\tt hos\_reverse(tag,m,n,d,u[m],Z[n][d+1])}
323\end{center}}}\\[2ex]
324\begin{minipage}[h]{14cm}
325\small 
326\begin{itemize}
327\item higher-order scalar reverse; computes the adjoints
328      \mbox{$z_0^T=u^T F'\left(x_0\right)=u^T A_0$},
329      \mbox{$z_1^T=u^T F''\left(x_0\right)x_1=u^T A_1$},
330      \ldots, where $Z=[z_0,z_1,\ldots,z_d]$
331\item after calling  {\tt fos\_forward} or
332      {\tt hos\_forward} with $\text{\tt keep}=d+1>1$
333\end{itemize}
334\end{minipage}\\[2ex]
335%
336\fbox{\parbox{17.5cm}{\begin{center}
337  {\tt hov\_reverse(tag,m,n,d,q,U[q][m],Z[q][n][d+1],nz[q][n])}
338\end{center}}}\\[2ex]
339\begin{minipage}[h]{14cm}
340\small 
341\begin{itemize}
342\item higher-order vector reverse; computes the adjoints
343      \mbox{$Z_0=U F'\left(x_0\right)=U A_0$},
344      \mbox{$Z_1=U F''\left(x_0\right)x_1=U A_1$},
345      \ldots, where $Z=[Z_0,Z_1,\ldots,Z_d]$
346\item after calling  {\tt fos\_forward} or
347      {\tt hos\_forward} with $\text{\tt keep}=d+1>1$
348\item optional nonzero pattern {\tt nz} ($\Rightarrow$ manual)
349\end{itemize}
350\end{minipage}\\[3ex]
351%
352\begin{minipage}[h]{160mm}
353\small
354\underline{Example:}
355\begin{verbatim}
356...
357double x[n], y[m], **I, **J;
358I=myallocI2(m);                        // allocation of identity matrix
359J=myalloc2(m,n);                       // allocation of Jacobian matrix
360...
361initialize(x);                         // setting up the argument x
362...
363zos_forward(ftag,m,n,1,x,y);           // computing the Jacobian by
364fos_reverse(ftag,m,n,m,I,J);           // reverse mode of AD
365...
366\end{verbatim}
367\end{minipage}
368\end{center}
369
370\newpage
371%-----------------------------------------------------------------------
372%-----------------------------------------------------------------------
373\begin{center}\Large
374{\Huge \bf Low-level Differentiation Routines}\\[3ex]
375{\Large \bf  Forward Mode (C++ interfaces)}\\[2ex]
376\begin{tabular}{|p{13.6cm}|p{3.0cm}|}
377\hline & \\[-2.0ex]
378{\tt forward(tag,m,n,d,keep,X[n][d+1],Y[m][d+1])} & 
379           {\large {\tt hos}, {\tt fos}, {\tt zos}} \\[0.5ex]
380{\tt forward(tag,m=1,n,d,keep,X[n][d+1],Y[d+1])} & 
381           {\large {\tt hos}, {\tt fos}, {\tt zos}} \\[1.0ex]
382\hline& \\[-2.0ex] 
383{\tt forward(tag,m,n,d=0,keep,x[n],y[m])} & 
384           {\large {\tt zos}} \\[0.5ex]
385{\tt forward(tag,m,n,keep,x[n],y[m])} & 
386           {\large {\tt zos}} \\[1.0ex]
387\hline& \\[-2.0ex] 
388{\tt forward(tag,m,n,p,x[n],X[n][p],y[m],Y[m][p])} &
389           {\large {\tt fov}} \\[1.0ex]
390\hline& \\[-2.0ex] 
391{\tt forward(tag,m,n,d,p,x[n],X[n][p][d],} & {\large {\tt hov}} \\[0.5ex]
392\hspace{8.7cm}{\tt y[m],Y[m][p][d])} & \\[1.0ex]
393\hline
394\end{tabular}\\[4ex]
395%
396{\Large \bf  Reverse Mode (C++ interfaces)}\\[2ex]
397\begin{tabular}{|p{15.6cm}|p{0.8cm}|}
398\hline & \\[-2.0ex]
399{\tt reverse(tag,m,n,d,u[m],Z[n][d+1])} & 
400           {\large {\tt hos}} \\[0.5ex]
401{\tt forward(tag,m=1,n,d,u,Z[n][d+1])} & 
402           {\large {\tt hos}} \\[1.0ex]
403\hline& \\[-2.0ex] 
404{\tt reverse(tag,m,n,d=0,u[m],z[n])} & 
405           {\large {\tt fos}} \\[0.5ex]
406{\tt reverse(tag,m=1,n,d=0,u,z[n])} & 
407           {\large {\tt fos}} \\[1.0ex]
408\hline& \\[-2.0ex] 
409{\tt reverse(tag,m,n,d,q,U[q][m],Z[q][n][d+1],nz[q][n])} & 
410           {\large {\tt hov}} \\[0.5ex]
411{\tt reverse(tag,m=1,n,d,q,U[q],Z[q][n][d+1],nz[q][n])} & 
412           {\large {\tt hov}} \\[0.5ex]
413{\tt reverse(tag,m=1,n,d,Z[m][n][d+1],nz[m][n])} ($U=I_m$) & 
414           {\large {\tt hov}} \\[0.5ex]
415\hline& \\[-2.0ex] 
416{\tt reverse(tag,m,n,d=0,q,U[q][m],Z[q][n])} & 
417           {\large {\tt fov}} \\[0.5ex]
418{\tt reverse(tag,m,n,q,U[q][m],Z[q][n]} & 
419           {\large {\tt fov}} \\[0.5ex]
420{\tt reverse(tag,m=1,n,d=0,q,U[q],Z[q][n])} & 
421           {\large {\tt fov}} \\[1.0ex]
422\hline
423\end{tabular}
424%
425\end{center}
426
427\newpage
428%-----------------------------------------------------------------------
429%-----------------------------------------------------------------------
430\begin{center}\Large
431{\Huge \bf Drivers for Ordinary Differential Equations
432           (C/C++)}\\[-0.5ex]
433\begin{align*}
434      \text{{\bf ODE}:}\qquad 
435      x'\left(t\right)=y\left(t\right)=F\left(x\left(t\right)\right),
436      \qquad x\left(0\right) = x_0
437\end{align*}\\[2ex]
438%
439\fbox{\parbox{17.5cm}{\begin{center}
440  {\tt  forodec(tag,n,tau,dold,d,X[n][d+1])}
441\end{center}}}\\[2ex]
442\begin{minipage}[h]{15cm}
443\small 
444\begin{itemize}
445\item recursive forward computation of $x_{d_{old}+1},\ldots,x_d$ from
446      $x_0,\ldots,x_{d_{old}}$ (by $x_{i+1} = \frac{1}{1+i}y_i$)
447\item application with $d_{old}=0$ delivers truncated Taylor series
448      $\sum_0^d x_j t^j$ at base point $x_0$
449\end{itemize}
450\end{minipage}\\[2ex]
451%
452\fbox{\parbox{17.5cm}{\begin{center}
453  {\tt   hov\_reverse(tag,n,n,d-1,n,I[n][n],A[n][n][d],nz[n][n])}
454\end{center}}}\\[2ex]
455\begin{minipage}[h]{15cm}
456\small 
457\begin{itemize}
458\item reverse computation of $A_j=\frac{\partial y_j}{\partial x_0}$,
459  $j=0,\ldots,d$ after calling {\tt forodec} with degree $d$ 
460\item  optional nonzero pattern {\tt nz} ($\Rightarrow$ manual)
461\end{itemize}
462\end{minipage}\\[2ex]
463%
464\fbox{\parbox{17.5cm}{\begin{center}
465  {\tt   accodec(n,tau,d-1,A[n][n][d],B[n][n][d],nz[n][n])}
466\end{center}}}\\[2ex]
467\begin{minipage}[h]{15cm}
468\small 
469\begin{itemize}
470\item accumulation of total derivatives $B_j=\frac{d x_j}{d x_0}$,
471 $j=0,\ldots,d$ from the partial derivatives
472 $A_j=\frac{\partial y_j}{\partial x_0}$, $j=0,\ldots,d$
473 after calling {\tt hov\_reverse} 
474\item  optional nonzero pattern {\tt nz} ($\Rightarrow$ manual)
475\end{itemize}
476\end{minipage}\\[4ex]
477%
478\begin{minipage}[h]{160mm}
479\small
480\underline{C++:} \hspace{0.5cm} Special C++ interfaces can be found in
481                 file {\tt SRC/DRIVERS/odedrivers.h}!\\[3ex]
482\underline{Example:}
483\begin{verbatim}
484...
485double x[n], **I, **X, ***A, ***B;
486I=myallocI2(n);                        // allocation of identity matrix
487X=myalloc2(n,5);                       // allocation of matrix X
488A=myalloc3(n,n,4); B=myalloc3(n,n,4);  // allocation of tensors A and B
489...
490initialize(X);                         // setting up the argument x_0
491...
492forodec(ftag,n,1.0,0,4,X);             // compute x_1,...,x_4
493hov_reverse(ftag,n,n,3,n,I,A,NULL);    // compute A_0,...,A_3
494accodec(ftag,n,1.0,3,A,B,NULL);        // accumulate B_0,...,B_3
495...
496\end{verbatim}
497\end{minipage}
498%
499\end{center}
500
501\newpage
502%-----------------------------------------------------------------------
503%-----------------------------------------------------------------------
504\begin{center}\Large
505{\bf ADOL-C provides}\\[1ex]
506\fbox{\parbox{170mm}{
507\begin{itemize}\setlength{\itemsep}{0cm}\setlength{\parsep}{0cm}
508\item Low-level~differentiation~routines ({\tt forward}/{\tt reverse})
509\item Easy-to-use driver routines for
510      \begin{itemize}\setlength{\itemsep}{0cm}\setlength{\parsep}{0cm}
511      \item the solution of optimization problems and nonlinear equations
512      \item the integration of ordinary differential equations
513      \item the evaluation of higher derivative tensors
514            ($\Rightarrow$ manual)
515      \end{itemize}
516\item Derivatives of implicit and inverse functions ($\Rightarrow$ manual)
517\item Forward and backward dependence analysis ($\Rightarrow$ manual)
518\end{itemize}}}\\[2ex]
519{\bf Recent developments}\\[1ex]
520\fbox{\parbox{17cm}{
521\begin{itemize}\setlength{\itemsep}{0cm}\setlength{\parsep}{0cm}
522\item Efficient detection of Jacobian/Hessian sparsity structure
523\item Exploitation of Jacobian/Hessian sparsity by matrix compression
524\item Integration of checkpointing routines
525\item Exploitation of fixpoint iterations
526\item Differentiation of OpenMP parallel programs
527\end{itemize}}}\\[2ex]
528{\bf Future developments}\\[1ex]
529\fbox{\parbox{17cm}{
530\begin{itemize}\setlength{\itemsep}{0cm}\setlength{\parsep}{0cm}
531\item Internal optimizations to reduce storage needed for reverse mode
532\item Recovery of structure for internal function representation
533\item Differentiation of MPI parallel programs
534\end{itemize}}}\\[2ex]
535{\bf Contact/Resources}\\[1ex]
536\fbox{\parbox{17cm}{
537\begin{itemize}\setlength{\itemsep}{0cm}\setlength{\parsep}{0cm}
538\item E-mail: \hspace{0.6cm}{\tt adol-c@list.coin-or.org}
539\item WWW:    \hspace{0.5cm}{\tt http://www.coin-or.org/projects/ADOL-C.xml}
540\end{itemize}}}
541\end{center}
542
543\end{document}
544
545
Note: See TracBrowser for help on using the repository browser.