<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1 plus MathML 2.0 plus SVG 1.1//EN" "http://www.w3.org/2002/04/xhtml-math-svg/xhtml-math-svg.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
  <head>
    <meta http-equiv="Content-Type" content="application/xhtml+xml; charset=utf-8"/>
    <title>Project-Team:ECUADOR</title>
    <link rel="stylesheet" href="../static/css/raweb.css" type="text/css"/>
    <meta name="description" content="Research Program - Algorithmic Differentiation"/>
    <meta name="dc.title" content="Research Program - Algorithmic Differentiation"/>
    <meta name="dc.creator" content="Laurent Hascoët"/>
    <meta name="dc.creator" content="Valérie Pascual"/>
    <meta name="dc.creator" content="Ala Taftaf"/>
    <meta name="dc.subject" content=""/>
    <meta name="dc.publisher" content="INRIA"/>
    <meta name="dc.date" content="(SCHEME=ISO8601) 2016-01"/>
    <meta name="dc.type" content="Report"/>
    <meta name="dc.language" content="(SCHEME=ISO639-1) en"/>
    <meta name="projet" content="ECUADOR"/>
    <script type="text/javascript" src="https://raweb.inria.fr/rapportsactivite/RA2016/static/MathJax/MathJax.js?config=TeX-MML-AM_CHTML">
      <!--MathJax-->
    </script>
  </head>
  <body>
    <div class="tdmdiv">
      <div class="logo">
        <a href="http://www.inria.fr">
          <img style="align:bottom; border:none" src="../static/img/icons/logo_INRIA-coul.jpg" alt="Inria"/>
        </a>
      </div>
      <div class="TdmEntry">
        <div class="tdmentete">
          <a href="uid0.html">Project-Team Ecuador</a>
        </div>
        <span>
          <a href="uid1.html">Members</a>
        </span>
      </div>
      <div class="TdmEntry">
        <a href="./uid3.html">Overall Objectives</a>
      </div>
      <div class="TdmEntry">Research Program<ul><li class="tdmActPage"><a href="uid12.html&#10;&#9;&#9;  ">Algorithmic Differentiation</a></li><li><a href="uid19.html&#10;&#9;&#9;  ">Static Analysis and Transformation of programs</a></li><li><a href="uid20.html&#10;&#9;&#9;  ">Algorithmic Differentiation and Scientific Computing</a></li></ul></div>
      <div class="TdmEntry">Application Domains<ul><li><a href="uid24.html&#10;&#9;&#9;  ">Algorithmic Differentiation</a></li><li><a href="uid31.html&#10;&#9;&#9;  ">Multidisciplinary optimization</a></li><li><a href="uid32.html&#10;&#9;&#9;  ">Inverse problems and Data Assimilation</a></li><li><a href="uid34.html&#10;&#9;&#9;  ">Linearization</a></li><li><a href="uid35.html&#10;&#9;&#9;  ">Mesh adaptation</a></li></ul></div>
      <div class="TdmEntry">New Software and Platforms<ul><li><a href="uid37.html&#10;&#9;&#9;  ">AIRONUM</a></li><li><a href="uid44.html&#10;&#9;&#9;  ">TAPENADE</a></li></ul></div>
      <div class="TdmEntry">New Results<ul><li><a href="uid49.html&#10;&#9;&#9;  ">AD-adjoints and C dynamic memory management</a></li><li><a href="uid50.html&#10;&#9;&#9;  ">AD-adjoints of MPI-parallel codes</a></li><li><a href="uid51.html&#10;&#9;&#9;  ">AD-adjoints of Iterative Processes</a></li><li><a href="uid52.html&#10;&#9;&#9;  ">AD of mixed-language codes</a></li><li><a href="uid53.html&#10;&#9;&#9;  ">Multirate methods</a></li><li><a href="uid54.html&#10;&#9;&#9;  ">Application of AD to uncertainties and errors in CFD</a></li><li><a href="uid59.html&#10;&#9;&#9;  ">Control of approximation errors</a></li><li><a href="uid60.html&#10;&#9;&#9;  ">Turbulence models</a></li></ul></div>
      <div class="TdmEntry">Bilateral Contracts and Grants with Industry<ul><li><a href="uid62.html&#10;&#9;&#9;  ">Bilateral Contracts with Industry</a></li></ul></div>
      <div class="TdmEntry">Partnerships and Cooperations<ul><li><a href="uid66.html&#10;&#9;&#9;  ">National Initiatives</a></li><li><a href="uid69.html&#10;&#9;&#9;  ">European Initiatives</a></li><li><a href="uid87.html&#10;&#9;&#9;  ">International Initiatives</a></li><li><a href="uid89.html&#10;&#9;&#9;  ">International Research Visitors</a></li></ul></div>
      <div class="TdmEntry">Dissemination<ul><li><a href="uid98.html&#10;&#9;&#9;  ">Promoting Scientific Activities</a></li><li><a href="uid102.html&#10;&#9;&#9;  ">Teaching - Supervision - Juries</a></li><li><a href="uid111.html&#10;&#9;&#9;  ">Popularization</a></li></ul></div>
      <div class="TdmEntry">
        <div>Bibliography</div>
      </div>
      <div class="TdmEntry">
        <ul>
          <li>
            <a id="tdmbibentmajor" href="bibliography.html">Major publications</a>
          </li>
          <li>
            <a id="tdmbibentyear" href="bibliography.html#year">Publications of the year</a>
          </li>
          <li>
            <a id="tdmbibentfoot" href="bibliography.html#References">References in notes</a>
          </li>
        </ul>
      </div>
    </div>
    <div id="main">
      <div class="mainentete">
        <div id="head_agauche">
          <small><a href="http://www.inria.fr">
	    
	    Inria
	  </a> | <a href="../index.html">
	    
	    Raweb 
	    2016</a> | <a href="http://www.inria.fr/en/teams/ecuador">Presentation of the Project-Team ECUADOR</a></small>
        </div>
        <div id="head_adroite">
          <table class="qrcode">
            <tr>
              <td>
                <a href="ecuador.xml">
                  <img style="align:bottom; border:none" alt="XML" src="../static/img/icons/xml_motif.png"/>
                </a>
              </td>
              <td>
                <a href="ecuador.pdf">
                  <img style="align:bottom; border:none" alt="PDF" src="IMG/qrcode-ecuador-pdf.png"/>
                </a>
              </td>
              <td>
                <a href="../ecuador/ecuador.epub">
                  <img style="align:bottom; border:none" alt="e-pub" src="IMG/qrcode-ecuador-epub.png"/>
                </a>
              </td>
            </tr>
            <tr>
              <td/>
              <td>PDF
</td>
              <td>e-Pub
</td>
            </tr>
          </table>
        </div>
      </div>
      <!--FIN du corps du module-->
      <br/>
      <div class="bottomNavigation">
        <div class="tail_aucentre">
          <a href="./uid3.html" accesskey="P"><img style="align:bottom; border:none" alt="previous" src="../static/img/icons/previous_motif.jpg"/> Previous | </a>
          <a href="./uid0.html" accesskey="U"><img style="align:bottom; border:none" alt="up" src="../static/img/icons/up_motif.jpg"/>  Home</a>
          <a href="./uid19.html" accesskey="N"> | Next <img style="align:bottom; border:none" alt="next" src="../static/img/icons/next_motif.jpg"/></a>
        </div>
        <br/>
      </div>
      <div id="textepage">
        <!--DEBUT2 du corps du module-->
        <h2>Section: 
      Research Program</h2>
        <h3 class="titre3">Algorithmic Differentiation</h3>
        <p class="participants"><span class="part">Participants</span> :
	Laurent Hascoët, Valérie Pascual, Ala Taftaf.</p>
        <hr/>
        <div id="glossaire" style="margin-left: 2em;margin-right: 2em;">
          <dl title="Glossary">
Glossary
        
        <dt>algorithmic differentiation</dt>
        <dd><p><a name=""> </a>(AD, aka Automatic Differentiation)
Transformation of a program, that returns a new program that computes
derivatives of the initial program, i.e. some combination of the
partial derivatives of the program's outputs with respect to its inputs.</p></dd>
        <dt>adjoint</dt>
        <dd><p><a name=""> </a>Mathematical manipulation of the Partial Differential Equations
that define a problem, obtaining new differential equations that define
the gradient of the original problem's solution.</p></dd>
        <dt>checkpointing</dt>
        <dd><p><a name=""> </a>General trade-off technique, used in adjoint AD,
that trades duplicate execution of a part of the program
to save some memory space that was used to save intermediate results.</p></dd>
      </dl>
        </div>
        <hr/>
        <p>Algorithmic Differentiation (AD) differentiates
<i>programs</i>. The input of AD is
a source program <span class="math"><math xmlns="http://www.w3.org/1998/Math/MathML"><mi>P</mi></math></span> that, given some <span class="math"><math xmlns="http://www.w3.org/1998/Math/MathML"><mrow><mi>X</mi><mo>∈</mo><msup><mi>ℝ</mi><mi>n</mi></msup></mrow></math></span>,
returns some <span class="math"><math xmlns="http://www.w3.org/1998/Math/MathML"><mrow><mi>Y</mi><mo>=</mo><mi>F</mi><mrow><mo>(</mo><mi>X</mi><mo>)</mo></mrow><mspace width="0.222222em"/><mo>∈</mo><msup><mi>ℝ</mi><mi>m</mi></msup></mrow></math></span>, for a differentiable <span class="math"><math xmlns="http://www.w3.org/1998/Math/MathML"><mi>F</mi></math></span>.
AD generates a new source program <span class="math"><math xmlns="http://www.w3.org/1998/Math/MathML"><msup><mi>P</mi><mo>'</mo></msup></math></span> that,
given <span class="math"><math xmlns="http://www.w3.org/1998/Math/MathML"><mi>X</mi></math></span>, computes some derivatives of <span class="math"><math xmlns="http://www.w3.org/1998/Math/MathML"><mi>F</mi></math></span> <a href="./bibliography.html#ecuador-2016-bid0">[6]</a>.</p>
        <p>Any execution of <span class="math"><math xmlns="http://www.w3.org/1998/Math/MathML"><mi>P</mi></math></span> amounts to a sequence of instructions,
which is identified with a composition of vector functions. Thus, if</p>
        <div align="center" class="mathdisplay">
          <a name="uid13"/>
          <table width="100%">
            <tr valign="middle">
              <td align="center">
                <math xmlns="http://www.w3.org/1998/Math/MathML">
                  <mtable displaystyle="true">
                    <mtr>
                      <mtd columnalign="right">
                        <mtable>
                          <mtr>
                            <mtd columnalign="right">
                              <mi>P</mi>
                            </mtd>
                            <mtd>
                              <mrow>
                                <mspace width="0.222222em"/>
                                <mtext>runs</mtext>
                                <mspace width="0.222222em"/>
                              </mrow>
                            </mtd>
                            <mtd columnalign="left">
                              <mrow>
                                <mo>{</mo>
                                <msub>
                                  <mi>I</mi>
                                  <mn>1</mn>
                                </msub>
                                <mo>;</mo>
                                <msub>
                                  <mi>I</mi>
                                  <mn>2</mn>
                                </msub>
                                <mo>;</mo>
                                <mo>⋯</mo>
                                <msub>
                                  <mi>I</mi>
                                  <mi>p</mi>
                                </msub>
                                <mo>;</mo>
                                <mo>}</mo>
                                <mo>,</mo>
                              </mrow>
                            </mtd>
                          </mtr>
                          <mtr>
                            <mtd columnalign="right">
                              <mi>F</mi>
                            </mtd>
                            <mtd>
                              <mrow>
                                <mtext>then</mtext>
                                <mspace width="4.pt"/>
                                <mtext>is</mtext>
                              </mrow>
                            </mtd>
                            <mtd columnalign="left">
                              <mrow>
                                <msub>
                                  <mi>f</mi>
                                  <mi>p</mi>
                                </msub>
                                <mo>∘</mo>
                                <msub>
                                  <mi>f</mi>
                                  <mrow>
                                    <mi>p</mi>
                                    <mo>-</mo>
                                    <mn>1</mn>
                                  </mrow>
                                </msub>
                                <mo>∘</mo>
                                <mo>⋯</mo>
                                <mo>∘</mo>
                                <msub>
                                  <mi>f</mi>
                                  <mn>1</mn>
                                </msub>
                                <mo>,</mo>
                              </mrow>
                            </mtd>
                          </mtr>
                        </mtable>
                      </mtd>
                    </mtr>
                  </mtable>
                </math>
              </td>
              <td class="eqno" width="10" align="right">(1)</td>
            </tr>
          </table>
        </div>
        <p class="notaparagraph">where each <span class="math"><math xmlns="http://www.w3.org/1998/Math/MathML"><msub><mi>f</mi><mi>k</mi></msub></math></span> is the elementary function implemented by instruction <span class="math"><math xmlns="http://www.w3.org/1998/Math/MathML"><msub><mi>I</mi><mi>k</mi></msub></math></span>.
AD applies the chain rule to obtain derivatives of <span class="math"><math xmlns="http://www.w3.org/1998/Math/MathML"><mi>F</mi></math></span>.
Calling <span class="math"><math xmlns="http://www.w3.org/1998/Math/MathML"><msub><mi>X</mi><mi>k</mi></msub></math></span> the values of all variables after
instruction <span class="math"><math xmlns="http://www.w3.org/1998/Math/MathML"><msub><mi>I</mi><mi>k</mi></msub></math></span>, i.e. <span class="math"><math xmlns="http://www.w3.org/1998/Math/MathML"><mrow><msub><mi>X</mi><mn>0</mn></msub><mo>=</mo><mi>X</mi></mrow></math></span> and <span class="math"><math xmlns="http://www.w3.org/1998/Math/MathML"><mrow><msub><mi>X</mi><mi>k</mi></msub><mo>=</mo><msub><mi>f</mi><mi>k</mi></msub><mrow><mo>(</mo><msub><mi>X</mi><mrow><mi>k</mi><mo>-</mo><mn>1</mn></mrow></msub><mo>)</mo></mrow></mrow></math></span>,
the Jacobian of <span class="math"><math xmlns="http://www.w3.org/1998/Math/MathML"><mi>F</mi></math></span> is</p>
        <div align="center" class="mathdisplay">
          <a name="uid14"/>
          <table width="100%">
            <tr valign="middle">
              <td align="center">
                <math xmlns="http://www.w3.org/1998/Math/MathML">
                  <mrow>
                    <msup>
                      <mi>F</mi>
                      <mo>'</mo>
                    </msup>
                    <mrow>
                      <mo>(</mo>
                      <mi>X</mi>
                      <mo>)</mo>
                    </mrow>
                    <mo>=</mo>
                    <msubsup>
                      <mi>f</mi>
                      <mi>p</mi>
                      <mo>'</mo>
                    </msubsup>
                    <mrow>
                      <mo>(</mo>
                      <msub>
                        <mi>X</mi>
                        <mrow>
                          <mi>p</mi>
                          <mo>-</mo>
                          <mn>1</mn>
                        </mrow>
                      </msub>
                      <mo>)</mo>
                    </mrow>
                    <mspace width="0.222222em"/>
                    <mo>.</mo>
                    <mspace width="0.222222em"/>
                    <msubsup>
                      <mi>f</mi>
                      <mrow>
                        <mi>p</mi>
                        <mo>-</mo>
                        <mn>1</mn>
                      </mrow>
                      <mo>'</mo>
                    </msubsup>
                    <mrow>
                      <mo>(</mo>
                      <msub>
                        <mi>X</mi>
                        <mrow>
                          <mi>p</mi>
                          <mo>-</mo>
                          <mn>2</mn>
                        </mrow>
                      </msub>
                      <mo>)</mo>
                    </mrow>
                    <mspace width="0.222222em"/>
                    <mo>.</mo>
                    <mspace width="0.222222em"/>
                    <mo>⋯</mo>
                    <mspace width="0.222222em"/>
                    <mo>.</mo>
                    <mspace width="0.222222em"/>
                    <msubsup>
                      <mi>f</mi>
                      <mn>1</mn>
                      <mo>'</mo>
                    </msubsup>
                    <mrow>
                      <mo>(</mo>
                      <msub>
                        <mi>X</mi>
                        <mn>0</mn>
                      </msub>
                      <mo>)</mo>
                    </mrow>
                  </mrow>
                </math>
              </td>
              <td class="eqno" width="10" align="right">(2)</td>
            </tr>
          </table>
        </div>
        <p class="notaparagraph">which can be mechanically written as a sequence of instructions <span class="math"><math xmlns="http://www.w3.org/1998/Math/MathML"><msubsup><mi>I</mi><mi>k</mi><mo>'</mo></msubsup></math></span>.
This can be generalized to higher level derivatives, Taylor series, etc.
Combining the <span class="math"><math xmlns="http://www.w3.org/1998/Math/MathML"><msubsup><mi>I</mi><mi>k</mi><mo>'</mo></msubsup></math></span> with the control of <span class="math"><math xmlns="http://www.w3.org/1998/Math/MathML"><mi>P</mi></math></span> yields <span class="math"><math xmlns="http://www.w3.org/1998/Math/MathML"><msup><mi>P</mi><mo>'</mo></msup></math></span>,
and therefore this differentiation is piecewise.</p>
        <p>In practice, many applications only need cheaper projections of <span class="math"><math xmlns="http://www.w3.org/1998/Math/MathML"><mrow><msup><mi>F</mi><mo>'</mo></msup><mrow><mo>(</mo><mi>X</mi><mo>)</mo></mrow></mrow></math></span> such as:</p>
        <ul>
          <li>
            <p class="notaparagraph"><a name="uid15"> </a><b>Sensitivities</b>, defined for a given direction <span class="math"><math xmlns="http://www.w3.org/1998/Math/MathML"><mover accent="true"><mi>X</mi><mo>˙</mo></mover></math></span> in the input space as:</p>
            <div align="center" class="mathdisplay">
              <a name="uid16"/>
              <table width="100%">
                <tr valign="middle">
                  <td align="center">
                    <math xmlns="http://www.w3.org/1998/Math/MathML">
                      <mrow>
                        <msup>
                          <mi>F</mi>
                          <mo>'</mo>
                        </msup>
                        <mrow>
                          <mo>(</mo>
                          <mi>X</mi>
                          <mo>)</mo>
                        </mrow>
                        <mo>.</mo>
                        <mover accent="true">
                          <mi>X</mi>
                          <mo>˙</mo>
                        </mover>
                        <mo>=</mo>
                        <msubsup>
                          <mi>f</mi>
                          <mi>p</mi>
                          <mo>'</mo>
                        </msubsup>
                        <mrow>
                          <mo>(</mo>
                          <msub>
                            <mi>X</mi>
                            <mrow>
                              <mi>p</mi>
                              <mo>-</mo>
                              <mn>1</mn>
                            </mrow>
                          </msub>
                          <mo>)</mo>
                        </mrow>
                        <mspace width="0.222222em"/>
                        <mo>.</mo>
                        <mspace width="0.222222em"/>
                        <msubsup>
                          <mi>f</mi>
                          <mrow>
                            <mi>p</mi>
                            <mo>-</mo>
                            <mn>1</mn>
                          </mrow>
                          <mo>'</mo>
                        </msubsup>
                        <mrow>
                          <mo>(</mo>
                          <msub>
                            <mi>X</mi>
                            <mrow>
                              <mi>p</mi>
                              <mo>-</mo>
                              <mn>2</mn>
                            </mrow>
                          </msub>
                          <mo>)</mo>
                        </mrow>
                        <mspace width="0.222222em"/>
                        <mo>.</mo>
                        <mspace width="0.222222em"/>
                        <mo>⋯</mo>
                        <mspace width="0.222222em"/>
                        <mo>.</mo>
                        <mspace width="0.222222em"/>
                        <msubsup>
                          <mi>f</mi>
                          <mn>1</mn>
                          <mo>'</mo>
                        </msubsup>
                        <mrow>
                          <mo>(</mo>
                          <msub>
                            <mi>X</mi>
                            <mn>0</mn>
                          </msub>
                          <mo>)</mo>
                        </mrow>
                        <mspace width="0.222222em"/>
                        <mo>.</mo>
                        <mspace width="0.222222em"/>
                        <mover accent="true">
                          <mi>X</mi>
                          <mo>˙</mo>
                        </mover>
                        <mspace width="1.em"/>
                        <mo>.</mo>
                      </mrow>
                    </math>
                  </td>
                  <td class="eqno" width="10" align="right">(3)</td>
                </tr>
              </table>
            </div>
            <p class="notaparagraph">
              <a name="uid15"> </a>
            </p>
            <p><a name="uid15"> </a>This expression is easily computed from right to left, interleaved with the original
program instructions. This is the <i>tangent mode</i> of AD.</p>
          </li>
          <li>
            <p class="notaparagraph"><a name="uid17"> </a><b>Adjoints</b>, defined after transposition (<span class="math"><math xmlns="http://www.w3.org/1998/Math/MathML"><msup><mi>F</mi><mrow><mo>'</mo><mo>*</mo></mrow></msup></math></span>), for a given weighting <span class="math"><math xmlns="http://www.w3.org/1998/Math/MathML"><mover><mi>Y</mi><mo>¯</mo></mover></math></span> of the outputs as:</p>
            <div align="center" class="mathdisplay">
              <a name="uid18"/>
              <table width="100%">
                <tr valign="middle">
                  <td align="center">
                    <math xmlns="http://www.w3.org/1998/Math/MathML">
                      <mrow>
                        <msup>
                          <mi>F</mi>
                          <mrow>
                            <mo>'</mo>
                            <mo>*</mo>
                          </mrow>
                        </msup>
                        <mrow>
                          <mo>(</mo>
                          <mi>X</mi>
                          <mo>)</mo>
                        </mrow>
                        <mo>.</mo>
                        <mover>
                          <mi>Y</mi>
                          <mo>¯</mo>
                        </mover>
                        <mo>=</mo>
                        <msubsup>
                          <mi>f</mi>
                          <mn>1</mn>
                          <mrow>
                            <mo>'</mo>
                            <mo>*</mo>
                          </mrow>
                        </msubsup>
                        <mrow>
                          <mo>(</mo>
                          <msub>
                            <mi>X</mi>
                            <mn>0</mn>
                          </msub>
                          <mo>)</mo>
                        </mrow>
                        <mo>.</mo>
                        <msubsup>
                          <mi>f</mi>
                          <mn>2</mn>
                          <mrow>
                            <mo>'</mo>
                            <mo>*</mo>
                          </mrow>
                        </msubsup>
                        <mrow>
                          <mo>(</mo>
                          <msub>
                            <mi>X</mi>
                            <mn>1</mn>
                          </msub>
                          <mo>)</mo>
                        </mrow>
                        <mo>.</mo>
                        <mspace width="0.222222em"/>
                        <mo>⋯</mo>
                        <mspace width="0.222222em"/>
                        <mo>.</mo>
                        <msubsup>
                          <mi>f</mi>
                          <mrow>
                            <mi>p</mi>
                            <mo>-</mo>
                            <mn>1</mn>
                          </mrow>
                          <mrow>
                            <mo>'</mo>
                            <mo>*</mo>
                          </mrow>
                        </msubsup>
                        <mrow>
                          <mo>(</mo>
                          <msub>
                            <mi>X</mi>
                            <mrow>
                              <mi>p</mi>
                              <mo>-</mo>
                              <mn>2</mn>
                            </mrow>
                          </msub>
                          <mo>)</mo>
                        </mrow>
                        <mo>.</mo>
                        <msubsup>
                          <mi>f</mi>
                          <mi>p</mi>
                          <mrow>
                            <mo>'</mo>
                            <mo>*</mo>
                          </mrow>
                        </msubsup>
                        <mrow>
                          <mo>(</mo>
                          <msub>
                            <mi>X</mi>
                            <mrow>
                              <mi>p</mi>
                              <mo>-</mo>
                              <mn>1</mn>
                            </mrow>
                          </msub>
                          <mo>)</mo>
                        </mrow>
                        <mo>.</mo>
                        <mover>
                          <mi>Y</mi>
                          <mo>¯</mo>
                        </mover>
                        <mspace width="1.em"/>
                        <mo>.</mo>
                      </mrow>
                    </math>
                  </td>
                  <td class="eqno" width="10" align="right">(4)</td>
                </tr>
              </table>
            </div>
            <p class="notaparagraph">
              <a name="uid17"> </a>
            </p>
            <p><a name="uid17"> </a>This expression is most efficiently computed from right to left,
because matrix<span class="math"><math xmlns="http://www.w3.org/1998/Math/MathML"><mo>×</mo></math></span>vector products are cheaper
than matrix<span class="math"><math xmlns="http://www.w3.org/1998/Math/MathML"><mo>×</mo></math></span>matrix products.
This is the <i>adjoint mode</i> of AD, most effective for
optimization, data assimilation  <a href="./bibliography.html#ecuador-2016-bid1">[37]</a>,
adjoint problems  <a href="./bibliography.html#ecuador-2016-bid2">[32]</a>, or inverse problems.</p>
          </li>
        </ul>
        <p>Adjoint AD builds a very efficient program  <a href="./bibliography.html#ecuador-2016-bid3">[34]</a>,
which computes the gradient in a time independent from the number of parameters <span class="math"><math xmlns="http://www.w3.org/1998/Math/MathML"><mi>n</mi></math></span>.
In contrast, computing the same gradient with the <i>tangent mode</i>
would require running the tangent differentiated program <span class="math"><math xmlns="http://www.w3.org/1998/Math/MathML"><mi>n</mi></math></span> times.</p>
        <p>However, the <span class="math"><math xmlns="http://www.w3.org/1998/Math/MathML"><msub><mi>X</mi><mi>k</mi></msub></math></span> are required in
the <i>inverse</i> of their computation order. If the
original program <i>overwrites</i> a part of <span class="math"><math xmlns="http://www.w3.org/1998/Math/MathML"><msub><mi>X</mi><mi>k</mi></msub></math></span>,
the differentiated program must restore <span class="math"><math xmlns="http://www.w3.org/1998/Math/MathML"><msub><mi>X</mi><mi>k</mi></msub></math></span> before it is used
by <span class="math"><math xmlns="http://www.w3.org/1998/Math/MathML"><mrow><msubsup><mi>f</mi><mrow><mi>k</mi><mo>+</mo><mn>1</mn></mrow><mrow><mo>'</mo><mo>*</mo></mrow></msubsup><mrow><mo>(</mo><msub><mi>X</mi><mi>k</mi></msub><mo>)</mo></mrow></mrow></math></span>.
Therefore, the central research problem of adjoint AD is to
make the <span class="math"><math xmlns="http://www.w3.org/1998/Math/MathML"><msub><mi>X</mi><mi>k</mi></msub></math></span> available in reverse order at the cheapest cost,
using strategies that combine storage,
repeated forward computation from available previous values, or even
inverted computation from available later values.</p>
        <p>Another research issue is to make the AD model cope with the
constant evolution of modern language constructs. From the old days
of Fortran77, novelties include pointers and dynamic allocation,
modularity, structured data types, objects, vectorial notation
and parallel programming. We keep developing our models and tools
to handle these new constructs.
</p>
      </div>
      <!--FIN du corps du module-->
      <br/>
      <div class="bottomNavigation">
        <div class="tail_aucentre">
          <a href="./uid3.html" accesskey="P"><img style="align:bottom; border:none" alt="previous" src="../static/img/icons/previous_motif.jpg"/> Previous | </a>
          <a href="./uid0.html" accesskey="U"><img style="align:bottom; border:none" alt="up" src="../static/img/icons/up_motif.jpg"/>  Home</a>
          <a href="./uid19.html" accesskey="N"> | Next <img style="align:bottom; border:none" alt="next" src="../static/img/icons/next_motif.jpg"/></a>
        </div>
        <br/>
      </div>
    </div>
  </body>
</html>
