Adjoint Code Design Patterns
v0.1
U.Naumann
Main Page
Classes
Files
File List
MyACEnsemblePathwiseEvolutionRecursiveBisection.hpp
1
#include<cmath>
2
using namespace
std
;
3
4
#include "ACEnsemblePathwise.hpp"
5
#include "ACEvolutionRecursiveBisection.hpp"
6
using namespace
ACDesignPatterns
;
7
11
template
<
typename
T>
12
class
MyACEvolutionStepUserData
{
13
T p;
14
public
:
15
T& p_ref() {
return
p; }
16
};
17
21
template
<
typename
T>
22
class
MyACEvolutionStep
:
public
ACModule
<T> {
23
stack<T> required_T;
24
using
ACModule<T>::x
;
25
using
ACModule<T>::ax
;
26
using
ACModule<T>::y
;
27
using
ACModule<T>::ay
;
28
public
:
29
MyACEvolutionStepUserData<T>
&d;
30
MyACEvolutionStep
(
MyACEvolutionStepUserData<T>
&d) : d(d) { }
31
void
evaluate_primal() {
32
y[0]=sin(x[0]*d.p_ref());
33
}
34
void
evaluate_split_primal() {
35
if
(&x[0]==&y[0]) required_T.push(x[0]);
36
y[0]=sin(x[0]*d.p_ref());
37
}
38
void
evaluate_split_adjoint() {
39
if
(&x[0]==&y[0]) {
40
x[0]=required_T.top(); required_T.pop();
41
ax[0]*=d.p_ref()*cos(x[0]*d.p_ref());
42
}
else
43
ax[0]+=d.p_ref()*cos(x[0]*d.p_ref())*ay[0];
44
}
45
};
46
52
template
<
typename
T>
53
class
MyACEvolutionRecomputeAll
:
public
ACEvolutionRecomputeAll
<T> {
54
using
ACEvolutionRecomputeAll<T>::step
;
55
public
:
56
MyACEvolutionRecomputeAll
(
size_t
nsteps,
ACModule<T>
* s)
57
:
ACEvolutionRecomputeAll<T>
(nsteps) {
58
step=s;
59
}
60
};
61
66
template
<
typename
T>
67
class
MyACEvolutionRecursiveBisection
:
public
ACEvolutionRecursiveBisection
<T> {
68
public
:
69
using
ACEvolution<T>::step
;
70
using
ACEvolutionRecursiveBisection<T>::m
;
71
MyACEvolutionRecursiveBisection
(
size_t
nsteps,
size_t
ncheckpoints,
MyACEvolutionStepUserData<T>
& d) :
ACEvolutionRecursiveBisection<T>
(nsteps,ncheckpoints) {
72
step=
new
MyACEvolutionStep<T>
(d);
73
m=
new
MyACEvolutionRecomputeAll<T>
(nsteps,step);
74
}
75
~
MyACEvolutionRecursiveBisection
() {
delete
step;
delete
m; }
76
};
77
82
template
<
typename
T>
83
class
MyACEnsemblePathwiseEvolutionRecursiveBisection
:
public
ACEnsemblePathwise
<T> {
84
public
:
85
using
ACEnsemblePathwise<T>::path
;
86
using
ACModule<T>::x
;
87
using
ACModule<T>::ax
;
88
using
ACModule<T>::y
;
89
using
ACModule<T>::ay
;
90
using
ACModule<T>::push_arguments
;
91
using
ACModule<T>::read_arguments
;
92
using
ACModule<T>::pop_arguments
;
93
MyACEnsemblePathwiseEvolutionRecursiveBisection
(
size_t
npaths,
size_t
nsteps,
size_t
ncheckpoints,
MyACEvolutionStepUserData<T>
& d) :
ACEnsemblePathwise<T>
(npaths) {
94
path=
new
MyACEvolutionRecursiveBisection<T>
(nsteps,ncheckpoints,d);
95
}
96
~
MyACEnsemblePathwiseEvolutionRecursiveBisection
() {
delete
path; }
97
};
ACDesignPatterns::ACEvolution
Definition:
ACEvolution.hpp:12
MyACEvolutionStepUserData
Definition:
MyACEnsemblePathwiseEvolutionRecursiveBisection.hpp:12
MyACEnsemblePathwiseEvolutionRecursiveBisection
Definition:
MyACEnsemblePathwiseEvolutionRecursiveBisection.hpp:83
std
ACDesignPatterns
Definition:
ACEnsemble.hpp:6
MyACEvolutionStep
Definition:
MyACEnsemblePathwiseEvolutionRecursiveBisection.hpp:22
MyACEvolutionRecursiveBisection
Definition:
MyACEnsemblePathwiseEvolutionRecursiveBisection.hpp:67
MyACEvolutionRecomputeAll
Definition:
MyACEnsemblePathwiseEvolutionRecursiveBisection.hpp:53
ACDesignPatterns::ACEvolutionRecomputeAll
Definition:
ACEvolutionRecomputeAll.hpp:14
ACDesignPatterns::ACEnsemblePathwise
Definition:
ACEnsemblePathwise.hpp:16
ACDesignPatterns::ACEvolutionRecursiveBisection
Definition:
ACEvolutionRecursiveBisection.hpp:18
ACDesignPatterns::ACModule
Definition:
ACModule.hpp:34
Generated by
1.8.9.1