Adjoint Code Design Patterns  v0.1
U.Naumann
ACEvolutionRecomputeAll.hpp
1 #ifndef ACEVOLUTION_RECOMPUTE_ALL_INCLUDED
2 #define ACEVOLUTION_RECOMPUTE_ALL_INCLUDED
3 
4 
5 #include "ACEvolution.hpp"
6 
7 namespace ACDesignPatterns {
8 
13 template<typename T>
15  protected:
17  public:
23  using ACModule<T>::x;
24  using ACModule<T>::ax;
25  using ACModule<T>::y;
26  using ACModule<T>::ay;
27  ACEvolutionRecomputeAll(size_t nsteps) : ACEvolution<T>(nsteps) {};
28  void evaluate_primal() {
29  step->register_inoutput(x,ax,y,ay);
31  }
32  void evaluate_split_primal() {
33  step->register_inoutput(x,ax,y,ay);
34  push_arguments();
36  }
37  void evaluate_split_adjoint() {
38  step->register_inoutput(x,ax,y,ay);
39  for (size_t t=nsteps;t>0;t--) {
40  read_arguments();
41  for (size_t i=0;i<t-1;i++)
42  step->evaluate_primal();
43  step->evaluate_split_primal();
44  step->evaluate_split_adjoint();
45  }
46  pop_arguments();
47  }
48 };
49 
50 }
51 
52 #endif