Adjoint Code Design Patterns  v0.1
U.Naumann
ACEvolution.hpp
1 #ifndef ACEVOLUTION_INCLUDED
2 #define ACEVOLUTION_INCLUDED
3 
4 #include "ACModule.hpp"
5 
6 namespace ACDesignPatterns {
7 
11 template<typename T>
12 class ACEvolution : public ACModule<T> {
13  protected:
14  size_t nsteps;
15  ACModule<T> *step;
16  public:
17  using ACModule<T>::x;
18  using ACModule<T>::ax;
19  using ACModule<T>::y;
20  using ACModule<T>::ay;
21  ACEvolution(size_t nsteps) : nsteps(nsteps), step(0) {};
22  void evaluate_primal() {
23  step->register_inoutput(x,ax,y,ay);
24  for (size_t i=0;i<nsteps;i++)
25  step->evaluate_primal();
26  }
27  void evaluate_split_primal() {
28  step->register_inoutput(x,ax,y,ay);
29  for (size_t i=0;i<nsteps;i++)
30  step->evaluate_split_primal();
31  }
32  void evaluate_split_adjoint() {
33  step->register_inoutput(x,ax,y,ay);
34  for (size_t i=0;i<nsteps;i++)
35  step->evaluate_split_adjoint();
36  }
37 };
38 
39 }
40 
41 #endif