% IMPORTANT: The following is UTF-8 encoded. This means that in the presence
% of non-ASCII characters, it will not work with BibTeX 0.99 or older.
% Instead, you should use an up-to-date BibTeX implementation like “bibtex8” or
% “biber”.
@PHDTHESIS{Lotz:667318,
author = {Lotz, Johannes},
othercontributors = {Naumann, Uwe and Gauger, Nicolas Ralph},
title = {{H}ybrid approaches to adjoint code generation with
dco/c++},
school = {RWTH Aachen University},
type = {Dissertation},
address = {Aachen},
reportid = {RWTH-2016-06197},
pages = {1 Online-Ressource (III, 127 Seiten) : Illustrationen,
Diagramme},
year = {2016},
note = {Veröffentlicht auf dem Publikationsserver der RWTH Aachen
University; Dissertation, RWTH Aachen University, 2016},
abstract = {This dissertation is concerned with the computation of
arbitrary-order derivative projections (tangents and
adjoints) of numerical simulation programs written in C++.
Thanks to the increasing computational power, simulation
nowadays plays a fundamental role within a wide range of
applications. On this basis, in the last decades simulation
programs became the foundation for optimization problems in
a wide variety of domains, e.g. design optimization in
computational fluid dynamics. When using derivative-based
algorithms to carry out the optimization, first- and
higher-order sensitivities of the underlying simulation
program are required. Since in many cases gradients of
scalar objective functions need to be computed, the adjoint
method should be used. Adjoint programs can either be
written by hand or generated by Algorithmic (or Automatic)
Differentiation (AD) tools. AD is a semantic program
transformation exploiting the chain rule of differential
calculus to automatically generate programs such that
sensitivities are computed in addition to the original
function values. Writing adjoint programs by hand can be a
tedious, time-consuming, and error-prone task, but on the
other hand, the well-versed programmer can possibly write
much more efficient code, especially when exploiting
mathematical properties by symbolic transformations. When
hand-coding an adjoint simulation program, an incremental
software development process is difficult. To achieve an
effective development process and get an efficient program,
hybridization techniques can be used to couple an AD tool
with hand-written code. This makes a top-down adjoint code
development possible -- beginning with a pure AD solution,
going step by step to a more efficient implementation.This
thesis consists of three main points. First, the software
dco/c++ is presented. dco/c++ implements AD by overloading
in C++ and features hybridization techniques in a flexible
and efficient way. Flexibility is meant in terms of
compliance with a modern C++ environment (e.g. generic
concepts, exception-safety, thread-safety, or portability),
and in terms of a convenient interface with emphasis on the
support for arbitrary-order derivatives. Efficiency on the
other hand is ensured by the newly developed AD test suite,
which carries out performance tests also in comparison to
other AD tools.As the second main point, arbitrary-order
derivative projections of common numerical algorithms like
linear and nonlinear solvers are derived symbolically,
exploiting mathematical properties. Those results are shown
to be of practical relevance by connecting them to the
hybridization capabilities of dco/c++. This combination is
presented with the help of an extensive case study
demonstrating the effectiveness of the approach. In
addition, dco/c++ was successfully used in many projects and
its applicability is therefore shown in terms of "reference
projects".When using AD to generate an adjoint program, the
resulting executable typically requires a huge amount of
memory. The third point of this thesis therefore covers the
Call Tree Reversal (CTR) problem. CTR is a checkpointing
technique, which allows for a tradeoff between additional
runtime and memory requirements. The problem itself is an
NP-complete optimization problem, which in this thesis is
approached by a mixed integer programming formulation for
the first time.},
cin = {123120 / 120000},
ddc = {004},
cid = {$I:(DE-82)123120_20140620$ / $I:(DE-82)120000_20140620$},
typ = {PUB:(DE-HGF)11},
urn = {urn:nbn:de:hbz:82-rwth-2016-061974},
doi = {10.18154/RWTH-2016-06197},
url = {https://publications.rwth-aachen.de/record/667318},
}