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
Summary
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.
Talk to us
Join us for a 30 min session where you can share your feedback and ask us any queries you have