Introduced unsteady adjoint functionality. Currently supports full storage of the primal time-series or utilization of binomial checkpointing.
This branch also serves as a fetching point for the profiling and improvement of the unsteady adjoint code during the exaFoam project.
compressedFullStorage stores the entire flow time-series, potentially by compressing each time-step (only the above-mentioned short approach is available for the moment).
binomialCheckPointing is based on the homonymous algorithm proposed in
\verbatim
Wang, Q., Moin, P., & Iaccarino, G..
Minimal Repetition Dynamic Checkpointing Algorithm for
Unsteady Adjoint Calculation (2009).
SIAM Journal on Scientific Computing, 31(4), 2549-2567.
10.1137/080727890,
\endverbatim
which stores the solution of the flow equations in a predefined number of time-steps, named checkpoints. During the backwards-in-time integration of the adjoint equations, if the primal solution at a certain time-step is not available, it is retrieved by re-computing the primal flow field starting from the closest checkpoint. Checkpoints are optimally distributed throughout the time-series to invoke the least number of flow recomputations during the backwards-in-time solution of the adjoint equations. Binomial checkpointing is the current state of the art though its re-computation cost frequently amounts for an extra solution of the flow equations in medium-to-large cases.
Authored by Andreas Margetis and reviewed by Vaggelis Papoutsis, with earlier contributions from Dr. Ioannis Kavvadias.