Abstract

From a computational point of view, sensitivity analysis, calibration of a model, or variational data assimilation may be tackled after the differentiation of the numerical code representing the model into an adjoint code. This paper presents and compares methodologies to generate discrete adjoint codes. These methods can be implemented when hand writing adjoint codes, or within Automatic Differentiation (AD) tools. AD has been successfully applied to industrial codes that were large and general enough to fully validate this new technology. We compare these methodologies in terms of execution time and memory requirement on a one dimensional thermal-hydraulic module for two-phase flow modeling. With regard to this experiment, some development axes for AD tools are extracted as well as methods for AD tool users to get efficient adjoint codes semi-automatically. The next objective is to generate automatically adjoint codes as efficient as hand written ones.

Highlights

  • During the last three decades the interest for optimal control [15] techniques grows up in various research communities

  • One observes that the adjoint code of one statement is a sequence of statements which length is the number of adjoint variables of the original assignment

  • Computational methods using derivatives are classical for a large number of applications involving optimal control theory such as shape optimisation or data assimilation in geophysics

Read more

Summary

Introduction

During the last three decades the interest for optimal control [15] techniques grows up in various research communities. The two methods for getting adjoint codes are: writing the code from the derivatives of the continuous mathematical equations, or differentiating the code that discretizes the continuous mathematical equations. If one wishes to obtain a discrete adjoint from an existing computational code, one may choose either to write it by hand or to generate it using automatic differentiation (AD), or to mix both techniques. A theoretical presentation of the strategies used to generate adjoint codes (by hand or automatically) can be found in [6]. These codes are compared in terms of execution time and memory requirement.

Basics of automatic differentiation
Chain rule application
Activity propagation
Adjoining strategies
Local strategies
Global strategies
From one strategy to the other
Comparison of the global strategies
Target code
Method Time
Adjoint runtimes comparisons
Conclusion
Full Text
Paper version not known

Talk to us

Join us for a 30 min session where you can share your feedback and ask us any queries you have

Schedule a call