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